# This code accompanies work by Matt Thomas and Crystal Peebles at Ithaca College. # Please contact [email protected] for information about this code.
reset() typeset_mode(True)
def all_paths(G,a,b): old_paths = G.all_paths( a, b ) # get all paths without edge multiplicity new_paths=[] for p in old_paths: # traverse each path replacing each edge by a list of (multi) edges multi_path=[] for i,u in enumerate(p): if i < len(p)-1: v = p[i+1] edges = G.edge_boundary([u], [v] ) multi_path.append(edges) new_paths.extend( CartesianProduct(*multi_path )) # each sequence of (multi) edges will be a source of multiple paths #new_paths.extend( cartesian_product(*multi_path )) return new_paths
# start is at position 1 and end is position 5 _ = var('start') _ = var('end')
# define all the positions for i in ['A','B']: for j in [1..2]: for k in ['a','b']: for l in [1..8]: _ = var(str(i)+str(j)+str(k)+'Pos'+str(l))
#Add arrows for calls, small subset, rest are at end # Graph D is the first half of dances reset('D') # create the graph D = DiGraph(multiedges=True) for i in ['BRPT']: D.add_edge(start,A1aPos4,str(i)) for j in [[1,4],[2,1],[3,2],[4,3],[5,8],[6,5],[7,6],[8,7]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['CL4','MAL1','MAR1','WAL1','WAR1','LL','MG1','WG1','MDsD1','WDsD1','NDsD1','NAL1','NAR1']: D.add_edge((start,A1aPos1,str(i))) for j in [[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['WHH','MHH']: D.add_edge((start,A1aPos7,str(i))) for j in [[1,7],[2,4],[3,5],[4,2],[5,7],[6,2],[7,5],[8,4]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['WAL1.5','WAR1.5']: D.add_edge((start,A1aPos8,str(i))) for j in [[1,8],[2,5],[3,6],[4,7],[5,2],[6,3],[7,4],[8,1]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['MAL1.5','MAR1.5','MG1.5','MDsD1.5']: D.add_edge((start,A1aPos6,str(i))) for j in [[1,6],[2,7],[3,8],[4,5],[5,4],[6,1],[7,2],[8,3]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['RsLs']: D.add_edge((start,A1aPos6,str(i))) for j in [[1,6],[2,7],[3,8],[4,5],[5,4],[6,1],[7,2],[8,3]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['BRCT']: D.add_edge((start,A1aPos7,str(i))) for j in [[1,7],[2,6],[3,5],[4,8],[5,3],[6,2],[7,1],[8,4]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['WG1.5','WDsD1.5']: D.add_edge((start,A1aPos8,str(i))) for j in [[1,8],[2,7],[3,6],[4,5],[5,4],[6,3],[7,2],[8,1]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['LC']: D.add_edge((start,A1aPos2,str(i))) for j in [[1,2],[2,5],[3,4],[4,7],[5,2],[6,7],[7,4],[8,5]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['PS']: for j in [[2,2],[4,4],[6,4],[8,2]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['NS']: D.add_edge((start,A1aPos5,str(i))) for j in [[1,5],[3,7],[5,5],[7,7]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['PDsD1','PAL1','PAR1']: for j in [[2,2],[4,4],[6,6],[8,8]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['PDsD1.5','PAL1.5','PAR1.5']: for j in [[2,8],[4,6],[6,4],[8,2]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['NDsD1','NALR1']: D.add_edge((start,A1aPos1,str(i))) for j in [[1,1],[3,3],[5,5],[7,7]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['NDsD1.5','NAL1.5','NAR1.5']: D.add_edge((start,A1aPos5,str(i))) for j in [[1,5],[3,7],[5,1],[7,3]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i))
# Graph E is the second half of dances reset('E') # create the graph E = DiGraph(multiedges=True) for i in ['BRPT']: E.add_edge(B2aPos6,end,str(i)) for j in [[1,4],[2,1],[3,2],[4,3],[5,8],[6,5],[7,6],[8,7]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['CL4','MAL1','MAR1','WAL1','WAR1','LL','MG1','WG1','MDsD1','WDsD1','NDsD1','NAL1','NAR1']: E.add_edge((B2aPos5,end,str(i))) for j in [[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['WHH','MHH']: E.add_edge((B2aPos3,end,str(i))) E.add_edge((B2aPos7,end,str(i))) for j in [[1,7],[2,4],[3,5],[4,2],[5,7],[6,2],[7,5],[8,4]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['WAL1.5','WAR1.5']: E.add_edge((B2aPos2,end,str(i))) for j in [[1,8],[2,5],[3,6],[4,7],[5,2],[6,3],[7,4],[8,1]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['MAL1.5','MAR1.5','MG1.5','MDsD1.5']: E.add_edge((B2aPos4,end,str(i))) for j in [[1,6],[2,7],[3,8],[4,5],[5,4],[6,1],[7,2],[8,3]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['RsLs']: E.add_edge((B2aPos4,end,str(i))) for j in [[1,6],[2,7],[3,8],[4,5],[5,4],[6,1],[7,2],[8,3]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['BRCT']: E.add_edge((B2aPos3,end,str(i))) for j in [[1,7],[2,6],[3,5],[4,8],[5,3],[6,2],[7,1],[8,4]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['WG1.5','WDsD1.5']: E.add_edge((B2aPos4,end,str(i))) for j in [[1,8],[2,7],[3,6],[4,5],[5,4],[6,3],[7,2],[8,1]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['LC']: E.add_edge((B2aPos2,end,str(i))) E.add_edge((B2aPos8,end,str(i))) for j in [[1,2],[2,5],[3,4],[4,7],[5,2],[6,7],[7,4],[8,5]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['PS']: for j in [[2,2],[4,4],[6,4],[8,2]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['NS']: E.add_edge((B2aPos1,end,str(i))) E.add_edge((B2aPos5,end,str(i))) for j in [[1,5],[3,7],[5,5],[7,7]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['PDsD1','PAL1','PAR1']: for j in [[2,2],[4,4],[6,6],[8,8]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['PDsD1.5','PAL1.5','PAR1.5']: for j in [[2,8],[4,6],[6,4],[8,2]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['NDsD1','NALR1']: E.add_edge((B2aPos5,end,str(i))) for j in [[1,1],[3,3],[5,5],[7,7]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i)) for i in ['NDsD1.5','NAL1.5','NAR1.5']: E.add_edge((B2aPos1,end,str(i))) for j in [[1,5],[3,7],[5,1],[7,3]]: for k in [['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: E.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i))
D.set_pos({ start:[0,4], A1aPos1:[1,7], A1aPos2:[1,6], A1aPos3:[1,5], A1aPos4:[1,4], A1aPos5:[1,3], A1aPos6:[1,2], A1aPos7:[1,1], A1aPos8:[1,0], A1bPos1:[2,7], A1bPos2:[2,6], A1bPos3:[2,5], A1bPos4:[2,4], A1bPos5:[2,3], A1bPos6:[2,2], A1bPos7:[2,1], A1bPos8:[2,0], A2aPos1:[3,7], A2aPos2:[3,6], A2aPos3:[3,5], A2aPos4:[3,4], A2aPos5:[3,3], A2aPos6:[3,2], A2aPos7:[3,1], A2aPos8:[3,0], A2bPos1:[4,7], A2bPos2:[4,6], A2bPos3:[4,5], A2bPos4:[4,4], A2bPos5:[4,3], A2bPos6:[4,2], A2bPos7:[4,1], A2bPos8:[4,0] })
E.set_pos({ A2bPos1:[4,7], A2bPos2:[4,6], A2bPos3:[4,5], A2bPos4:[4,4], A2bPos5:[4,3], A2bPos6:[4,2], A2bPos7:[4,1], A2bPos8:[4,0], B1aPos1:[5,7], B1aPos2:[5,6], B1aPos3:[5,5], B1aPos4:[5,4], B1aPos5:[5,3], B1aPos6:[5,2], B1aPos7:[5,1], B1aPos8:[5,0], B1bPos1:[6,7], B1bPos2:[6,6], B1bPos3:[6,5], B1bPos4:[6,4], B1bPos5:[6,3], B1bPos6:[6,2], B1bPos7:[6,1], B1bPos8:[6,0], B2aPos1:[7,7], B2aPos2:[7,6], B2aPos3:[7,5], B2aPos4:[7,4], B2aPos5:[7,3], B2aPos6:[7,2], B2aPos7:[7,1], B2aPos8:[7,0], end:[8,4] })
D.graphplot(edge_labels=True, vertex_size=5000).show(figsize=4)
E.graphplot(edge_labels=True, vertex_size=3500).show(figsize=4)
D.get_pos() E.get_pos()
{A2aPos7:[3,1],A1bPos2:[2,6],A1aPos4:[1,4],A2aPos5:[3,3],A1bPos7:[2,1],A2bPos8:[4,0],A1aPos2:[1,6],A1bPos5:[2,3],A2bPos6:[4,2],A1aPos7:[1,1],A2aPos8:[3,0],A1aPos5:[1,3],A2aPos6:[3,2],start:[0,4],A1bPos8:[2,0],A2bPos3:[4,5],A1bPos6:[2,2],A1aPos8:[1,0],A2bPos1:[4,7],A2aPos3:[3,5],A1aPos6:[1,2],A2aPos1:[3,7],A1bPos3:[2,5],A2bPos4:[4,4],A1bPos1:[2,7],A2bPos2:[4,6],A1aPos3:[1,5],A2aPos4:[3,4],A2bPos7:[4,1],A1aPos1:[1,7],A2aPos2:[3,6],A1bPos4:[2,4],A2bPos5:[4,3]}
{B1aPos8:[5,0],B2aPos3:[7,5],B1aPos6:[5,2],A2bPos8:[4,0],B2aPos1:[7,7],B1bPos3:[6,5],A2bPos6:[4,2],B1bPos1:[6,7],B1aPos3:[5,5],B2aPos4:[7,4],B1aPos1:[5,7],B2aPos2:[7,6],A2bPos3:[4,5],B1bPos4:[6,4],B2aPos7:[7,1],A2bPos1:[4,7],B1bPos2:[6,6],B1aPos4:[5,4],B2aPos5:[7,3],B1bPos7:[6,1],end:[8,4],B1aPos2:[5,6],A2bPos4:[4,4],B1bPos5:[6,3],B1aPos7:[5,1],B2aPos8:[7,0],A2bPos2:[4,6],B1aPos5:[5,3],B2aPos6:[7,2],A2bPos7:[4,1],B1bPos8:[6,0],A2bPos5:[4,3],B1bPos6:[6,2]}
# count the dances #paths=all_paths(D,start,A2bPos1) #len(paths) #for p in paths: # print p
totaldances = 0 for i in [1..8]: for j in ['a','b']: _ = var(str(j)+str(i))
firstset = [] secondset = [] for i in [1..8]: paths=all_paths(D,start,var('A2bPos'+str(i))) firstset.append(len(paths)) print "Start to A2b Position",i,"is",len(paths),"paths" for i in [1..8]: paths=all_paths(E,var('A2bPos'+str(i)),end) secondset.append(len(paths)) print "A2b Position",i,"to end is",len(paths),"paths"
<string>:11: DeprecationWarning: CartesianProduct is deprecated. Use cartesian_product instead
See http://trac.sagemath.org/18411 for details.
Start to A2b Position 1 is 158191 paths
Start to A2b Position 2 is 173187 paths
Start to A2b Position 3 is 103870 paths
Start to A2b Position 4 is 179807 paths
Start to A2b Position 5 is 181266 paths
Start to A2b Position 6 is 141273 paths
Start to A2b Position 7 is 167723 paths
Start to A2b Position 8 is 126958 paths
A2b Position 1 to end is 181266 paths
A2b Position 2 to end is 186557 paths
A2b Position 3 to end is 167723 paths
A2b Position 4 to end is 238817 paths
A2b Position 5 to end is 238764 paths
A2b Position 6 to end is 179931 paths
A2b Position 7 to end is 178306 paths
A2b Position 8 to end is 173131 paths
firstset secondset
[158191, 173187, 103870, 179807, 181266, 141273, 167723, 126958]
[181266, 186557, 167723, 238817, 238764, 179931, 178306, 173131]
totaldances=0 for i in [0..len(firstset)-1]: totaldances = totaldances + (firstset[i]*secondset[i]) totaldances
241931823417
matrix(firstset)*transpose(matrix(secondset))
(241931823417)