Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Project: Contra Dance
Views: 138
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 reset('D') # create the graph D = DiGraph(multiedges=True) for i in ['BRPT']: D.add_edge(start,A1aPos4,str(i)) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.add_edge((B2aPos3,end,str(i))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.add_edge((B2aPos2,end,str(i))) D.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 [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.add_edge((B2aPos1,end,str(i))) D.add_edge((B2aPos5,end,str(i))) for j in [[1,5],[3,7],[5,5],[7,7]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.add_edge((B2aPos5,end,str(i))) for j in [[1,1],[3,3],[5,5],[7,7]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: 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))) D.add_edge((B2aPos1,end,str(i))) for j in [[1,5],[3,7],[5,1],[7,3]]: for k in [['A1a','A1b'],['A1b','A2a'],['A2a','A2b'],['A2b','B1a'],['B1a','B1b'],['B1b','B2a']]: D.add_edge(var(str(k[0])+'Pos'+str(j[0])),var(str(k[1])+'Pos'+str(j[1])),str(i))
# show the graph, it's not pretty...yet len(set(D.vertices())) #D.graphplot(edge_labels=True,layout='circular').show() D.graphplot(edge_labels=True,layout='circular').show() D.get_pos() #positions = D.get_pos() #positions #D.get_pos()
58\displaystyle 58
# count the dances paths=all_paths(D,start,end) len(paths)
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], 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).show(figsize=32)
D.graphplot(edge_labels=True).show(figsize=128)
D.get_pos()
D.set_pos() D.plot(save_pos=True)
for p in paths: print p
D.show(edge_labels=True,layout='spring',iterations=20000)
D.show()
digraphs.Circuit(100).show() digraphs.Circuit(100).show(iterations=20000)