summaryrefslogtreecommitdiff
path: root/_downloads/07fcc19ba03226cd3d83d4e40ec44385/auto_examples_python.zip
blob: d08dad656b53cc7013d12a6ca942fc11cadd8b02 (plain)
ofshex dumpascii
0000 50 4b 03 04 14 00 00 00 00 00 02 7b 57 56 40 87 eb 83 a6 03 00 00 a6 03 00 00 1c 00 00 00 33 64 PK.........{WV@...............3d
0020 5f 64 72 61 77 69 6e 67 2f 6d 61 79 61 76 69 32 5f 73 70 72 69 6e 67 2e 70 79 22 22 22 0a 3d 3d _drawing/mayavi2_spring.py""".==
0040 3d 3d 3d 3d 3d 0a 4d 61 79 61 76 69 32 0a 3d 3d 3d 3d 3d 3d 3d 0a 0a 22 22 22 0a 0a 69 6d 70 6f =====.Mayavi2.=======.."""..impo
0060 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 rt.networkx.as.nx.import.numpy.a
0080 73 20 6e 70 0a 66 72 6f 6d 20 6d 61 79 61 76 69 20 69 6d 70 6f 72 74 20 6d 6c 61 62 0a 0a 23 20 s.np.from.mayavi.import.mlab..#.
00a0 73 6f 6d 65 20 67 72 61 70 68 73 20 74 6f 20 74 72 79 0a 23 20 48 3d 6e 78 2e 6b 72 61 63 6b 68 some.graphs.to.try.#.H=nx.krackh
00c0 61 72 64 74 5f 6b 69 74 65 5f 67 72 61 70 68 28 29 0a 23 20 48 3d 6e 78 2e 47 72 61 70 68 28 29 ardt_kite_graph().#.H=nx.Graph()
00e0 3b 48 2e 61 64 64 5f 65 64 67 65 28 27 61 27 2c 27 62 27 29 3b 48 2e 61 64 64 5f 65 64 67 65 28 ;H.add_edge('a','b');H.add_edge(
0100 27 61 27 2c 27 63 27 29 3b 48 2e 61 64 64 5f 65 64 67 65 28 27 61 27 2c 27 64 27 29 0a 23 20 48 'a','c');H.add_edge('a','d').#.H
0120 3d 6e 78 2e 67 72 69 64 5f 32 64 5f 67 72 61 70 68 28 34 2c 35 29 0a 48 20 3d 20 6e 78 2e 63 79 =nx.grid_2d_graph(4,5).H.=.nx.cy
0140 63 6c 65 5f 67 72 61 70 68 28 32 30 29 0a 0a 23 20 72 65 6f 72 64 65 72 20 6e 6f 64 65 73 20 66 cle_graph(20)..#.reorder.nodes.f
0160 72 6f 6d 20 30 2c 6c 65 6e 28 47 29 2d 31 0a 47 20 3d 20 6e 78 2e 63 6f 6e 76 65 72 74 5f 6e 6f rom.0,len(G)-1.G.=.nx.convert_no
0180 64 65 5f 6c 61 62 65 6c 73 5f 74 6f 5f 69 6e 74 65 67 65 72 73 28 48 29 0a 23 20 33 64 20 73 70 de_labels_to_integers(H).#.3d.sp
01a0 72 69 6e 67 20 6c 61 79 6f 75 74 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f ring.layout.pos.=.nx.spring_layo
01c0 75 74 28 47 2c 20 64 69 6d 3d 33 2c 20 73 65 65 64 3d 31 30 30 31 29 0a 23 20 6e 75 6d 70 79 20 ut(G,.dim=3,.seed=1001).#.numpy.
01e0 61 72 72 61 79 20 6f 66 20 78 2c 79 2c 7a 20 70 6f 73 69 74 69 6f 6e 73 20 69 6e 20 73 6f 72 74 array.of.x,y,z.positions.in.sort
0200 65 64 20 6e 6f 64 65 20 6f 72 64 65 72 0a 78 79 7a 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 70 6f ed.node.order.xyz.=.np.array([po
0220 73 5b 76 5d 20 66 6f 72 20 76 20 69 6e 20 73 6f 72 74 65 64 28 47 29 5d 29 0a 23 20 73 63 61 6c s[v].for.v.in.sorted(G)]).#.scal
0240 61 72 20 63 6f 6c 6f 72 73 0a 73 63 61 6c 61 72 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 6c 69 73 ar.colors.scalars.=.np.array(lis
0260 74 28 47 2e 6e 6f 64 65 73 28 29 29 29 20 2b 20 35 0a 0a 6d 6c 61 62 2e 66 69 67 75 72 65 28 29 t(G.nodes())).+.5..mlab.figure()
0280 0a 0a 70 74 73 20 3d 20 6d 6c 61 62 2e 70 6f 69 6e 74 73 33 64 28 0a 20 20 20 20 78 79 7a 5b 3a ..pts.=.mlab.points3d(.....xyz[:
02a0 2c 20 30 5d 2c 0a 20 20 20 20 78 79 7a 5b 3a 2c 20 31 5d 2c 0a 20 20 20 20 78 79 7a 5b 3a 2c 20 ,.0],.....xyz[:,.1],.....xyz[:,.
02c0 32 5d 2c 0a 20 20 20 20 73 63 61 6c 61 72 73 2c 0a 20 20 20 20 73 63 61 6c 65 5f 66 61 63 74 6f 2],.....scalars,.....scale_facto
02e0 72 3d 30 2e 31 2c 0a 20 20 20 20 73 63 61 6c 65 5f 6d 6f 64 65 3d 22 6e 6f 6e 65 22 2c 0a 20 20 r=0.1,.....scale_mode="none",...
0300 20 20 63 6f 6c 6f 72 6d 61 70 3d 22 42 6c 75 65 73 22 2c 0a 20 20 20 20 72 65 73 6f 6c 75 74 69 ..colormap="Blues",.....resoluti
0320 6f 6e 3d 32 30 2c 0a 29 0a 0a 70 74 73 2e 6d 6c 61 62 5f 73 6f 75 72 63 65 2e 64 61 74 61 73 65 on=20,.)..pts.mlab_source.datase
0340 74 2e 6c 69 6e 65 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 6c 69 73 74 28 47 2e 65 64 67 65 73 28 t.lines.=.np.array(list(G.edges(
0360 29 29 29 0a 74 75 62 65 20 3d 20 6d 6c 61 62 2e 70 69 70 65 6c 69 6e 65 2e 74 75 62 65 28 70 74 ))).tube.=.mlab.pipeline.tube(pt
0380 73 2c 20 74 75 62 65 5f 72 61 64 69 75 73 3d 30 2e 30 31 29 0a 6d 6c 61 62 2e 70 69 70 65 6c 69 s,.tube_radius=0.01).mlab.pipeli
03a0 6e 65 2e 73 75 72 66 61 63 65 28 74 75 62 65 2c 20 63 6f 6c 6f 72 3d 28 30 2e 38 2c 20 30 2e 38 ne.surface(tube,.color=(0.8,.0.8
03c0 2c 20 30 2e 38 29 29 0a 6d 6c 61 62 2e 6f 72 69 65 6e 74 61 74 69 6f 6e 5f 61 78 65 73 28 29 0a ,.0.8)).mlab.orientation_axes().
03e0 50 4b 03 04 14 00 00 00 00 00 02 7b 57 56 c4 33 ea 37 7d 04 00 00 7d 04 00 00 18 00 00 00 33 64 PK.........{WV.3.7}...}.......3d
0400 5f 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 62 61 73 69 63 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d _drawing/plot_basic.py""".======
0420 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 42 61 73 69 63 20 6d 61 74 70 6c 6f 74 6c 69 62 0a 3d 3d 3d 3d ==========.Basic.matplotlib.====
0440 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 41 20 62 61 73 69 63 20 65 78 61 6d 70 6c 65 20 6f 66 ============..A.basic.example.of
0460 20 33 44 20 47 72 61 70 68 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 20 75 73 69 6e 67 20 60 6d .3D.Graph.visualization.using.`m
0480 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 5f 33 64 60 2e 0a 0a 22 22 22 0a 0a 69 6d 70 pl_toolkits.mplot_3d`..."""..imp
04a0 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 ort.networkx.as.nx.import.numpy.
04c0 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 as.np.import.matplotlib.pyplot.a
04e0 73 20 70 6c 74 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 s.plt.from.mpl_toolkits.mplot3d.
0500 69 6d 70 6f 72 74 20 41 78 65 73 33 44 0a 0a 23 20 54 68 65 20 67 72 61 70 68 20 74 6f 20 76 69 import.Axes3D..#.The.graph.to.vi
0520 73 75 61 6c 69 7a 65 0a 47 20 3d 20 6e 78 2e 63 79 63 6c 65 5f 67 72 61 70 68 28 32 30 29 0a 0a sualize.G.=.nx.cycle_graph(20)..
0540 23 20 33 64 20 73 70 72 69 6e 67 20 6c 61 79 6f 75 74 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 #.3d.spring.layout.pos.=.nx.spri
0560 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 64 69 6d 3d 33 2c 20 73 65 65 64 3d 37 37 39 29 0a 23 20 ng_layout(G,.dim=3,.seed=779).#.
0580 45 78 74 72 61 63 74 20 6e 6f 64 65 20 61 6e 64 20 65 64 67 65 20 70 6f 73 69 74 69 6f 6e 73 20 Extract.node.and.edge.positions.
05a0 66 72 6f 6d 20 74 68 65 20 6c 61 79 6f 75 74 0a 6e 6f 64 65 5f 78 79 7a 20 3d 20 6e 70 2e 61 72 from.the.layout.node_xyz.=.np.ar
05c0 72 61 79 28 5b 70 6f 73 5b 76 5d 20 66 6f 72 20 76 20 69 6e 20 73 6f 72 74 65 64 28 47 29 5d 29 ray([pos[v].for.v.in.sorted(G)])
05e0 0a 65 64 67 65 5f 78 79 7a 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 28 70 6f 73 5b 75 5d 2c 20 70 .edge_xyz.=.np.array([(pos[u],.p
0600 6f 73 5b 76 5d 29 20 66 6f 72 20 75 2c 20 76 20 69 6e 20 47 2e 65 64 67 65 73 28 29 5d 29 0a 0a os[v]).for.u,.v.in.G.edges()])..
0620 23 20 43 72 65 61 74 65 20 74 68 65 20 33 44 20 66 69 67 75 72 65 0a 66 69 67 20 3d 20 70 6c 74 #.Create.the.3D.figure.fig.=.plt
0640 2e 66 69 67 75 72 65 28 29 0a 61 78 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 .figure().ax.=.fig.add_subplot(1
0660 31 31 2c 20 70 72 6f 6a 65 63 74 69 6f 6e 3d 22 33 64 22 29 0a 0a 23 20 50 6c 6f 74 20 74 68 65 11,.projection="3d")..#.Plot.the
0680 20 6e 6f 64 65 73 20 2d 20 61 6c 70 68 61 20 69 73 20 73 63 61 6c 65 64 20 62 79 20 22 64 65 70 .nodes.-.alpha.is.scaled.by."dep
06a0 74 68 22 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 61 78 2e 73 63 61 74 74 65 72 28 2a 6e 6f th".automatically.ax.scatter(*no
06c0 64 65 5f 78 79 7a 2e 54 2c 20 73 3d 31 30 30 2c 20 65 63 3d 22 77 22 29 0a 0a 23 20 50 6c 6f 74 de_xyz.T,.s=100,.ec="w")..#.Plot
06e0 20 74 68 65 20 65 64 67 65 73 0a 66 6f 72 20 76 69 7a 65 64 67 65 20 69 6e 20 65 64 67 65 5f 78 .the.edges.for.vizedge.in.edge_x
0700 79 7a 3a 0a 20 20 20 20 61 78 2e 70 6c 6f 74 28 2a 76 69 7a 65 64 67 65 2e 54 2c 20 63 6f 6c 6f yz:.....ax.plot(*vizedge.T,.colo
0720 72 3d 22 74 61 62 3a 67 72 61 79 22 29 0a 0a 0a 64 65 66 20 5f 66 6f 72 6d 61 74 5f 61 78 65 73 r="tab:gray")...def._format_axes
0740 28 61 78 29 3a 0a 20 20 20 20 22 22 22 56 69 73 75 61 6c 69 7a 61 74 69 6f 6e 20 6f 70 74 69 6f (ax):....."""Visualization.optio
0760 6e 73 20 66 6f 72 20 74 68 65 20 33 44 20 61 78 65 73 2e 22 22 22 0a 20 20 20 20 23 20 54 75 72 ns.for.the.3D.axes.""".....#.Tur
0780 6e 20 67 72 69 64 6c 69 6e 65 73 20 6f 66 66 0a 20 20 20 20 61 78 2e 67 72 69 64 28 46 61 6c 73 n.gridlines.off.....ax.grid(Fals
07a0 65 29 0a 20 20 20 20 23 20 53 75 70 70 72 65 73 73 20 74 69 63 6b 20 6c 61 62 65 6c 73 0a 20 20 e).....#.Suppress.tick.labels...
07c0 20 20 66 6f 72 20 64 69 6d 20 69 6e 20 28 61 78 2e 78 61 78 69 73 2c 20 61 78 2e 79 61 78 69 73 ..for.dim.in.(ax.xaxis,.ax.yaxis
07e0 2c 20 61 78 2e 7a 61 78 69 73 29 3a 0a 20 20 20 20 20 20 20 20 64 69 6d 2e 73 65 74 5f 74 69 63 ,.ax.zaxis):.........dim.set_tic
0800 6b 73 28 5b 5d 29 0a 20 20 20 20 23 20 53 65 74 20 61 78 65 73 20 6c 61 62 65 6c 73 0a 20 20 20 ks([]).....#.Set.axes.labels....
0820 20 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 22 78 22 29 0a 20 20 20 20 61 78 2e 73 65 74 5f 79 .ax.set_xlabel("x").....ax.set_y
0840 6c 61 62 65 6c 28 22 79 22 29 0a 20 20 20 20 61 78 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 22 7a 22 label("y").....ax.set_zlabel("z"
0860 29 0a 0a 0a 5f 66 6f 72 6d 61 74 5f 61 78 65 73 28 61 78 29 0a 66 69 67 2e 74 69 67 68 74 5f 6c )..._format_axes(ax).fig.tight_l
0880 61 79 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 20 7b 57 ayout().plt.show().PK.........{W
08a0 56 58 f2 c2 60 09 0c 00 00 09 0c 00 00 17 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 VX..`............algorithms/plot
08c0 5f 73 6e 61 70 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 53 _snap.py""".==================.S
08e0 4e 41 50 20 47 72 61 70 68 20 53 75 6d 6d 61 72 79 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d NAP.Graph.Summary.==============
0900 3d 3d 3d 3d 0a 41 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 73 75 6d 6d 61 72 69 7a 69 6e 67 20 61 ====.An.example.of.summarizing.a
0920 20 67 72 61 70 68 20 62 61 73 65 64 20 6f 6e 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 73 20 .graph.based.on.node.attributes.
0940 61 6e 64 20 65 64 67 65 20 61 74 74 72 69 62 75 74 65 73 0a 75 73 69 6e 67 20 74 68 65 20 53 75 and.edge.attributes.using.the.Su
0960 6d 6d 61 72 69 7a 61 74 69 6f 6e 20 62 79 20 47 72 6f 75 70 69 6e 67 20 4e 6f 64 65 73 20 6f 6e mmarization.by.Grouping.Nodes.on
0980 20 41 74 74 72 69 62 75 74 65 73 20 61 6e 64 20 50 61 69 72 77 69 73 65 0a 65 64 67 65 73 20 28 .Attributes.and.Pairwise.edges.(
09a0 53 4e 41 50 29 20 61 6c 67 6f 72 69 74 68 6d 20 28 6e 6f 74 20 74 6f 20 62 65 20 63 6f 6e 66 75 SNAP).algorithm.(not.to.be.confu
09c0 73 65 64 20 77 69 74 68 20 74 68 65 20 53 74 61 6e 66 6f 72 64 20 4e 65 74 77 6f 72 6b 0a 41 6e sed.with.the.Stanford.Network.An
09e0 61 6c 79 73 69 73 20 50 72 6f 6a 65 63 74 29 2e 20 20 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 alysis.Project)...The.algorithm.
0a00 67 72 6f 75 70 73 20 6e 6f 64 65 73 20 62 79 20 74 68 65 69 72 20 75 6e 69 71 75 65 0a 63 6f 6d groups.nodes.by.their.unique.com
0a20 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 20 76 61 6c 75 binations.of.node.attribute.valu
0a40 65 73 20 61 6e 64 20 65 64 67 65 20 74 79 70 65 73 20 77 69 74 68 20 6f 74 68 65 72 20 67 72 6f es.and.edge.types.with.other.gro
0a60 75 70 73 0a 6f 66 20 6e 6f 64 65 73 20 74 6f 20 70 72 6f 64 75 63 65 20 61 20 73 75 6d 6d 61 72 ups.of.nodes.to.produce.a.summar
0a80 79 20 67 72 61 70 68 2e 20 20 54 68 65 20 73 75 6d 6d 61 72 79 20 67 72 61 70 68 20 63 61 6e 20 y.graph...The.summary.graph.can.
0aa0 74 68 65 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 69 6e 66 65 72 20 68 6f 77 20 6e 6f 64 65 73 20 then.be.used.to.infer.how.nodes.
0ac0 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 61 74 74 72 69 62 75 74 65 73 20 76 61 6c 75 65 73 with.different.attributes.values
0ae0 20 72 65 6c 61 74 65 20 74 6f 20 6f 74 68 65 72 20 6e 6f 64 65 73 20 69 6e 20 74 68 65 0a 67 72 .relate.to.other.nodes.in.the.gr
0b00 61 70 68 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 aph..""".import.networkx.as.nx.i
0b20 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 0a mport.matplotlib.pyplot.as.plt..
0b40 0a 6e 6f 64 65 73 20 3d 20 7b 0a 20 20 20 20 22 41 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 52 .nodes.=.{....."A":.{"color":."R
0b60 65 64 22 7d 2c 0a 20 20 20 20 22 42 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 52 65 64 22 7d 2c ed"},....."B":.{"color":."Red"},
0b80 0a 20 20 20 20 22 43 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 52 65 64 22 7d 2c 0a 20 20 20 20 ....."C":.{"color":."Red"},.....
0ba0 22 44 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 52 65 64 22 7d 2c 0a 20 20 20 20 22 45 22 3a 20 "D":.{"color":."Red"},....."E":.
0bc0 7b 22 63 6f 6c 6f 72 22 3a 20 22 42 6c 75 65 22 7d 2c 0a 20 20 20 20 22 46 22 3a 20 7b 22 63 6f {"color":."Blue"},....."F":.{"co
0be0 6c 6f 72 22 3a 20 22 42 6c 75 65 22 7d 2c 0a 20 20 20 20 22 47 22 3a 20 7b 22 63 6f 6c 6f 72 22 lor":."Blue"},....."G":.{"color"
0c00 3a 20 22 42 6c 75 65 22 7d 2c 0a 20 20 20 20 22 48 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 42 :."Blue"},....."H":.{"color":."B
0c20 6c 75 65 22 7d 2c 0a 20 20 20 20 22 49 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 59 65 6c 6c 6f lue"},....."I":.{"color":."Yello
0c40 77 22 7d 2c 0a 20 20 20 20 22 4a 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 59 65 6c 6c 6f 77 22 w"},....."J":.{"color":."Yellow"
0c60 7d 2c 0a 20 20 20 20 22 4b 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 59 65 6c 6c 6f 77 22 7d 2c },....."K":.{"color":."Yellow"},
0c80 0a 20 20 20 20 22 4c 22 3a 20 7b 22 63 6f 6c 6f 72 22 3a 20 22 59 65 6c 6c 6f 77 22 7d 2c 0a 7d ....."L":.{"color":."Yellow"},.}
0ca0 0a 65 64 67 65 73 20 3d 20 5b 0a 20 20 20 20 28 22 41 22 2c 20 22 42 22 2c 20 22 53 74 72 6f 6e .edges.=.[.....("A",."B",."Stron
0cc0 67 22 29 2c 0a 20 20 20 20 28 22 41 22 2c 20 22 43 22 2c 20 22 57 65 61 6b 22 29 2c 0a 20 20 20 g"),.....("A",."C",."Weak"),....
0ce0 20 28 22 41 22 2c 20 22 45 22 2c 20 22 53 74 72 6f 6e 67 22 29 2c 0a 20 20 20 20 28 22 41 22 2c .("A",."E",."Strong"),.....("A",
0d00 20 22 49 22 2c 20 22 57 65 61 6b 22 29 2c 0a 20 20 20 20 28 22 42 22 2c 20 22 44 22 2c 20 22 57 ."I",."Weak"),.....("B",."D",."W
0d20 65 61 6b 22 29 2c 0a 20 20 20 20 28 22 42 22 2c 20 22 4a 22 2c 20 22 57 65 61 6b 22 29 2c 0a 20 eak"),.....("B",."J",."Weak"),..
0d40 20 20 20 28 22 42 22 2c 20 22 46 22 2c 20 22 53 74 72 6f 6e 67 22 29 2c 0a 20 20 20 20 28 22 43 ...("B",."F",."Strong"),.....("C
0d60 22 2c 20 22 47 22 2c 20 22 57 65 61 6b 22 29 2c 0a 20 20 20 20 28 22 44 22 2c 20 22 48 22 2c 20 ",."G",."Weak"),.....("D",."H",.
0d80 22 57 65 61 6b 22 29 2c 0a 20 20 20 20 28 22 49 22 2c 20 22 4a 22 2c 20 22 53 74 72 6f 6e 67 22 "Weak"),.....("I",."J",."Strong"
0da0 29 2c 0a 20 20 20 20 28 22 4a 22 2c 20 22 4b 22 2c 20 22 53 74 72 6f 6e 67 22 29 2c 0a 20 20 20 ),.....("J",."K",."Strong"),....
0dc0 20 28 22 49 22 2c 20 22 4c 22 2c 20 22 53 74 72 6f 6e 67 22 29 2c 0a 5d 0a 6f 72 69 67 69 6e 61 .("I",."L",."Strong"),.].origina
0de0 6c 5f 67 72 61 70 68 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 6f 72 69 67 69 6e 61 6c 5f 67 72 l_graph.=.nx.Graph().original_gr
0e00 61 70 68 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 6e 20 66 6f 72 20 6e 20 69 6e 20 6e 6f aph.add_nodes_from(n.for.n.in.no
0e20 64 65 73 2e 69 74 65 6d 73 28 29 29 0a 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2e 61 64 64 5f des.items()).original_graph.add_
0e40 65 64 67 65 73 5f 66 72 6f 6d 28 28 75 2c 20 76 2c 20 7b 22 74 79 70 65 22 3a 20 6c 61 62 65 6c edges_from((u,.v,.{"type":.label
0e60 7d 29 20 66 6f 72 20 75 2c 20 76 2c 20 6c 61 62 65 6c 20 69 6e 20 65 64 67 65 73 29 0a 0a 0a 70 }).for.u,.v,.label.in.edges)...p
0e80 6c 74 2e 73 75 70 74 69 74 6c 65 28 22 53 4e 41 50 20 53 75 6d 6d 61 72 69 7a 61 74 69 6f 6e 22 lt.suptitle("SNAP.Summarization"
0ea0 29 0a 0a 62 61 73 65 5f 6f 70 74 69 6f 6e 73 20 3d 20 7b 22 77 69 74 68 5f 6c 61 62 65 6c 73 22 )..base_options.=.{"with_labels"
0ec0 3a 20 54 72 75 65 2c 20 22 65 64 67 65 63 6f 6c 6f 72 73 22 3a 20 22 62 6c 61 63 6b 22 2c 20 22 :.True,."edgecolors":."black",."
0ee0 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 35 30 30 7d 0a 0a 61 78 31 20 3d 20 70 6c 74 2e 73 75 62 70 node_size":.500}..ax1.=.plt.subp
0f00 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 74 2e 74 69 74 6c 65 28 0a 20 20 20 20 22 4f 72 69 lot(1,.2,.1).plt.title(....."Ori
0f20 67 69 6e 61 6c 20 28 25 73 20 6e 6f 64 65 73 2c 20 25 73 20 65 64 67 65 73 29 22 0a 20 20 20 20 ginal.(%s.nodes,.%s.edges)".....
0f40 25 20 28 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2e 6e 75 6d 62 65 72 5f 6f 66 5f 6e 6f 64 65 %.(original_graph.number_of_node
0f60 73 28 29 2c 20 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2e 6e 75 6d 62 65 72 5f 6f 66 5f 65 64 s(),.original_graph.number_of_ed
0f80 67 65 73 28 29 29 0a 29 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 ges()).).pos.=.nx.spring_layout(
0fa0 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2c 20 73 65 65 64 3d 37 34 38 32 39 33 34 29 0a 6e 6f original_graph,.seed=7482934).no
0fc0 64 65 5f 63 6f 6c 6f 72 73 20 3d 20 5b 64 5b 22 63 6f 6c 6f 72 22 5d 20 66 6f 72 20 5f 2c 20 64 de_colors.=.[d["color"].for._,.d
0fe0 20 69 6e 20 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2e 6e 6f 64 65 73 28 64 61 74 61 3d 54 72 .in.original_graph.nodes(data=Tr
1000 75 65 29 5d 0a 0a 65 64 67 65 5f 74 79 70 65 5f 76 69 73 75 61 6c 5f 77 65 69 67 68 74 5f 6c 6f ue)]..edge_type_visual_weight_lo
1020 6f 6b 75 70 20 3d 20 7b 22 57 65 61 6b 22 3a 20 31 2e 30 2c 20 22 53 74 72 6f 6e 67 22 3a 20 33 okup.=.{"Weak":.1.0,."Strong":.3
1040 2e 30 7d 0a 65 64 67 65 5f 77 65 69 67 68 74 73 20 3d 20 5b 0a 20 20 20 20 65 64 67 65 5f 74 79 .0}.edge_weights.=.[.....edge_ty
1060 70 65 5f 76 69 73 75 61 6c 5f 77 65 69 67 68 74 5f 6c 6f 6f 6b 75 70 5b 64 5b 22 74 79 70 65 22 pe_visual_weight_lookup[d["type"
1080 5d 5d 0a 20 20 20 20 66 6f 72 20 5f 2c 20 5f 2c 20 64 20 69 6e 20 6f 72 69 67 69 6e 61 6c 5f 67 ]].....for._,._,.d.in.original_g
10a0 72 61 70 68 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 0a 5d 0a 0a 6e 78 2e 64 72 61 77 raph.edges(data=True).]..nx.draw
10c0 5f 6e 65 74 77 6f 72 6b 78 28 0a 20 20 20 20 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2c 20 70 _networkx(.....original_graph,.p
10e0 6f 73 3d 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c 6f 72 73 2c 20 os=pos,.node_color=node_colors,.
1100 77 69 64 74 68 3d 65 64 67 65 5f 77 65 69 67 68 74 73 2c 20 2a 2a 62 61 73 65 5f 6f 70 74 69 6f width=edge_weights,.**base_optio
1120 6e 73 0a 29 0a 0a 6e 6f 64 65 5f 61 74 74 72 69 62 75 74 65 73 20 3d 20 28 22 63 6f 6c 6f 72 22 ns.)..node_attributes.=.("color"
1140 2c 29 0a 65 64 67 65 5f 61 74 74 72 69 62 75 74 65 73 20 3d 20 28 22 74 79 70 65 22 2c 29 0a 73 ,).edge_attributes.=.("type",).s
1160 75 6d 6d 61 72 79 5f 67 72 61 70 68 20 3d 20 6e 78 2e 73 6e 61 70 5f 61 67 67 72 65 67 61 74 69 ummary_graph.=.nx.snap_aggregati
1180 6f 6e 28 0a 20 20 20 20 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2c 20 6e 6f 64 65 5f 61 74 74 on(.....original_graph,.node_att
11a0 72 69 62 75 74 65 73 2c 20 65 64 67 65 5f 61 74 74 72 69 62 75 74 65 73 2c 20 70 72 65 66 69 78 ributes,.edge_attributes,.prefix
11c0 3d 22 53 2d 22 0a 29 0a 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 0a 70 ="S-".)..plt.subplot(1,.2,.2)..p
11e0 6c 74 2e 74 69 74 6c 65 28 0a 20 20 20 20 22 53 4e 41 50 20 41 67 67 72 65 67 61 74 69 6f 6e 20 lt.title(....."SNAP.Aggregation.
1200 28 25 73 20 6e 6f 64 65 73 2c 20 25 73 20 65 64 67 65 73 29 22 0a 20 20 20 20 25 20 28 73 75 6d (%s.nodes,.%s.edges)".....%.(sum
1220 6d 61 72 79 5f 67 72 61 70 68 2e 6e 75 6d 62 65 72 5f 6f 66 5f 6e 6f 64 65 73 28 29 2c 20 73 75 mary_graph.number_of_nodes(),.su
1240 6d 6d 61 72 79 5f 67 72 61 70 68 2e 6e 75 6d 62 65 72 5f 6f 66 5f 65 64 67 65 73 28 29 29 0a 29 mmary_graph.number_of_edges()).)
1260 0a 73 75 6d 6d 61 72 79 5f 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 .summary_pos.=.nx.spring_layout(
1280 73 75 6d 6d 61 72 79 5f 67 72 61 70 68 2c 20 73 65 65 64 3d 38 33 37 35 34 32 38 29 0a 6e 6f 64 summary_graph,.seed=8375428).nod
12a0 65 5f 63 6f 6c 6f 72 73 20 3d 20 5b 5d 0a 66 6f 72 20 6e 6f 64 65 20 69 6e 20 73 75 6d 6d 61 72 e_colors.=.[].for.node.in.summar
12c0 79 5f 67 72 61 70 68 3a 0a 20 20 20 20 63 6f 6c 6f 72 20 3d 20 73 75 6d 6d 61 72 79 5f 67 72 61 y_graph:.....color.=.summary_gra
12e0 70 68 2e 6e 6f 64 65 73 5b 6e 6f 64 65 5d 5b 22 63 6f 6c 6f 72 22 5d 0a 20 20 20 20 6e 6f 64 65 ph.nodes[node]["color"].....node
1300 5f 63 6f 6c 6f 72 73 2e 61 70 70 65 6e 64 28 63 6f 6c 6f 72 29 0a 0a 65 64 67 65 5f 77 65 69 67 _colors.append(color)..edge_weig
1320 68 74 73 20 3d 20 5b 5d 0a 66 6f 72 20 65 64 67 65 20 69 6e 20 73 75 6d 6d 61 72 79 5f 67 72 61 hts.=.[].for.edge.in.summary_gra
1340 70 68 2e 65 64 67 65 73 28 29 3a 0a 20 20 20 20 65 64 67 65 5f 74 79 70 65 73 20 3d 20 73 75 6d ph.edges():.....edge_types.=.sum
1360 6d 61 72 79 5f 67 72 61 70 68 2e 67 65 74 5f 65 64 67 65 5f 64 61 74 61 28 2a 65 64 67 65 29 5b mary_graph.get_edge_data(*edge)[
1380 22 74 79 70 65 73 22 5d 0a 20 20 20 20 65 64 67 65 5f 77 65 69 67 68 74 20 3d 20 30 2e 30 0a 20 "types"].....edge_weight.=.0.0..
13a0 20 20 20 66 6f 72 20 65 64 67 65 5f 74 79 70 65 20 69 6e 20 65 64 67 65 5f 74 79 70 65 73 3a 0a ...for.edge_type.in.edge_types:.
13c0 20 20 20 20 20 20 20 20 65 64 67 65 5f 77 65 69 67 68 74 20 2b 3d 20 65 64 67 65 5f 74 79 70 65 ........edge_weight.+=.edge_type
13e0 5f 76 69 73 75 61 6c 5f 77 65 69 67 68 74 5f 6c 6f 6f 6b 75 70 5b 65 64 67 65 5f 74 79 70 65 5b _visual_weight_lookup[edge_type[
1400 22 74 79 70 65 22 5d 5d 0a 20 20 20 20 65 64 67 65 5f 77 65 69 67 68 74 73 2e 61 70 70 65 6e 64 "type"]].....edge_weights.append
1420 28 65 64 67 65 5f 77 65 69 67 68 74 29 0a 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 (edge_weight)..nx.draw_networkx(
1440 0a 20 20 20 20 73 75 6d 6d 61 72 79 5f 67 72 61 70 68 2c 0a 20 20 20 20 70 6f 73 3d 73 75 6d 6d .....summary_graph,.....pos=summ
1460 61 72 79 5f 70 6f 73 2c 0a 20 20 20 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c ary_pos,.....node_color=node_col
1480 6f 72 73 2c 0a 20 20 20 20 77 69 64 74 68 3d 65 64 67 65 5f 77 65 69 67 68 74 73 2c 0a 20 20 20 ors,.....width=edge_weights,....
14a0 20 2a 2a 62 61 73 65 5f 6f 70 74 69 6f 6e 73 0a 29 0a 0a 70 6c 74 2e 74 69 67 68 74 5f 6c 61 79 .**base_options.)..plt.tight_lay
14c0 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0e 7b 57 56 7f out().plt.show().PK.........{WV.
14e0 c5 e1 aa 85 03 00 00 85 03 00 00 2a 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 6d ...........*...algorithms/plot_m
1500 61 78 69 6d 75 6d 5f 69 6e 64 65 70 65 6e 64 65 6e 74 5f 73 65 74 2e 70 79 22 22 22 0a 3d 3d 3d aximum_independent_set.py""".===
1520 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4d 61 78 69 6d 75 6d 20 49 6e 64 ====================.Maximum.Ind
1540 65 70 65 6e 64 65 6e 74 20 53 65 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ependent.Set.===================
1560 3d 3d 3d 3d 0a 0a 41 6e 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 73 65 74 20 69 73 20 61 20 73 65 ====..An.independent.set.is.a.se
1580 74 20 6f 66 20 76 65 72 74 69 63 65 73 20 69 6e 20 61 20 67 72 61 70 68 20 77 68 65 72 65 20 6e t.of.vertices.in.a.graph.where.n
15a0 6f 20 74 77 6f 20 76 65 72 74 69 63 65 73 20 69 6e 20 74 68 65 0a 73 65 74 20 61 72 65 20 61 64 o.two.vertices.in.the.set.are.ad
15c0 6a 61 63 65 6e 74 2e 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 jacent..The.maximum.independent.
15e0 73 65 74 20 69 73 20 74 68 65 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 73 65 74 20 6f 66 20 6c 61 set.is.the.independent.set.of.la
1600 72 67 65 73 74 0a 70 6f 73 73 69 62 6c 65 20 73 69 7a 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 rgest.possible.size.for.a.given.
1620 67 72 61 70 68 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 graph.."""..import.numpy.as.np.i
1640 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 mport.matplotlib.pyplot.as.plt.i
1660 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 66 72 6f 6d 20 6e 65 74 77 6f 72 mport.networkx.as.nx.from.networ
1680 6b 78 2e 61 6c 67 6f 72 69 74 68 6d 73 20 69 6d 70 6f 72 74 20 61 70 70 72 6f 78 69 6d 61 74 69 kx.algorithms.import.approximati
16a0 6f 6e 20 61 73 20 61 70 70 72 6f 78 0a 0a 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 0a 20 20 20 20 on.as.approx..G.=.nx.Graph(.....
16c0 5b 0a 20 20 20 20 20 20 20 20 28 31 2c 20 32 29 2c 0a 20 20 20 20 20 20 20 20 28 37 2c 20 32 29 [.........(1,.2),.........(7,.2)
16e0 2c 0a 20 20 20 20 20 20 20 20 28 33 2c 20 39 29 2c 0a 20 20 20 20 20 20 20 20 28 33 2c 20 32 29 ,.........(3,.9),.........(3,.2)
1700 2c 0a 20 20 20 20 20 20 20 20 28 37 2c 20 36 29 2c 0a 20 20 20 20 20 20 20 20 28 35 2c 20 32 29 ,.........(7,.6),.........(5,.2)
1720 2c 0a 20 20 20 20 20 20 20 20 28 31 2c 20 35 29 2c 0a 20 20 20 20 20 20 20 20 28 32 2c 20 38 29 ,.........(1,.5),.........(2,.8)
1740 2c 0a 20 20 20 20 20 20 20 20 28 31 30 2c 20 32 29 2c 0a 20 20 20 20 20 20 20 20 28 31 2c 20 37 ,.........(10,.2),.........(1,.7
1760 29 2c 0a 20 20 20 20 20 20 20 20 28 36 2c 20 31 29 2c 0a 20 20 20 20 20 20 20 20 28 36 2c 20 39 ),.........(6,.1),.........(6,.9
1780 29 2c 0a 20 20 20 20 20 20 20 20 28 38 2c 20 34 29 2c 0a 20 20 20 20 20 20 20 20 28 39 2c 20 34 ),.........(8,.4),.........(9,.4
17a0 29 2c 0a 20 20 20 20 5d 0a 29 0a 0a 49 20 3d 20 61 70 70 72 6f 78 2e 6d 61 78 69 6d 75 6d 5f 69 ),.....].)..I.=.approx.maximum_i
17c0 6e 64 65 70 65 6e 64 65 6e 74 5f 73 65 74 28 47 29 0a 70 72 69 6e 74 28 66 22 4d 61 78 69 6d 75 ndependent_set(G).print(f"Maximu
17e0 6d 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 73 65 74 20 6f 66 20 47 3a 20 7b 49 7d 22 29 0a 0a 70 m.independent.set.of.G:.{I}")..p
1800 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 33 39 os.=.nx.spring_layout(G,.seed=39
1820 32 39 39 38 39 39 29 0a 6e 78 2e 64 72 61 77 28 0a 20 20 20 20 47 2c 0a 20 20 20 20 70 6f 73 3d 299899).nx.draw(.....G,.....pos=
1840 70 6f 73 2c 0a 20 20 20 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 54 72 75 65 2c 0a 20 20 20 20 6e pos,.....with_labels=True,.....n
1860 6f 64 65 5f 63 6f 6c 6f 72 3d 5b 22 74 61 62 3a 72 65 64 22 20 69 66 20 6e 20 69 6e 20 49 20 65 ode_color=["tab:red".if.n.in.I.e
1880 6c 73 65 20 22 74 61 62 3a 62 6c 75 65 22 20 66 6f 72 20 6e 20 69 6e 20 47 5d 2c 0a 29 0a 50 4b lse."tab:blue".for.n.in.G],.).PK
18a0 03 04 14 00 00 00 00 00 0e 7b 57 56 7d 53 7b 3e cc 08 00 00 cc 08 00 00 22 00 00 00 61 6c 67 6f .........{WV}S{>........"...algo
18c0 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 64 65 64 65 6e 73 69 66 69 63 61 74 69 6f 6e 2e 70 79 22 22 rithms/plot_dedensification.py""
18e0 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 44 65 64 65 6e 73 69 66 69 63 61 74 69 6f ".===============.Dedensificatio
1900 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 6c 65 73 20 6f 66 20 64 n.===============..Examples.of.d
1920 65 64 65 6e 73 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 20 67 72 61 70 68 2e 20 20 44 65 64 65 edensification.of.a.graph...Dede
1940 6e 73 69 66 69 63 61 74 69 6f 6e 20 72 65 74 61 69 6e 73 20 74 68 65 20 73 74 72 75 63 74 75 72 nsification.retains.the.structur
1960 61 6c 0a 70 61 74 74 65 72 6e 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 67 72 61 70 68 al.pattern.of.the.original.graph
1980 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20 61 64 64 20 63 6f 6d 70 72 65 73 73 6f 72 20 6e 6f .and.will.only.add.compressor.no
19a0 64 65 73 20 77 68 65 6e 20 64 6f 69 6e 67 20 73 6f 0a 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 des.when.doing.so.would.result.i
19c0 6e 20 66 65 77 65 72 20 65 64 67 65 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 72 65 73 73 65 64 20 n.fewer.edges.in.the.compressed.
19e0 67 72 61 70 68 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 graph..""".import.matplotlib.pyp
1a00 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 lot.as.plt.import.networkx.as.nx
1a20 0a 0a 70 6c 74 2e 73 75 70 74 69 74 6c 65 28 22 44 65 64 65 6e 73 69 66 69 63 61 74 69 6f 6e 22 ..plt.suptitle("Dedensification"
1a40 29 0a 0a 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 )..original_graph.=.nx.DiGraph()
1a60 0a 77 68 69 74 65 5f 6e 6f 64 65 73 20 3d 20 5b 22 31 22 2c 20 22 32 22 2c 20 22 33 22 2c 20 22 .white_nodes.=.["1",."2",."3",."
1a80 34 22 2c 20 22 35 22 2c 20 22 36 22 5d 0a 72 65 64 5f 6e 6f 64 65 73 20 3d 20 5b 22 41 22 2c 20 4",."5",."6"].red_nodes.=.["A",.
1aa0 22 42 22 2c 20 22 43 22 5d 0a 6e 6f 64 65 5f 73 69 7a 65 73 20 3d 20 5b 32 35 30 20 66 6f 72 20 "B",."C"].node_sizes.=.[250.for.
1ac0 6e 6f 64 65 20 69 6e 20 77 68 69 74 65 5f 6e 6f 64 65 73 20 2b 20 72 65 64 5f 6e 6f 64 65 73 5d node.in.white_nodes.+.red_nodes]
1ae0 0a 6e 6f 64 65 5f 63 6f 6c 6f 72 73 20 3d 20 5b 22 77 68 69 74 65 22 20 66 6f 72 20 6e 20 69 6e .node_colors.=.["white".for.n.in
1b00 20 77 68 69 74 65 5f 6e 6f 64 65 73 5d 20 2b 20 5b 22 72 65 64 22 20 66 6f 72 20 6e 20 69 6e 20 .white_nodes].+.["red".for.n.in.
1b20 72 65 64 5f 6e 6f 64 65 73 5d 0a 0a 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2e 61 64 64 5f 6e red_nodes]..original_graph.add_n
1b40 6f 64 65 73 5f 66 72 6f 6d 28 77 68 69 74 65 5f 6e 6f 64 65 73 20 2b 20 72 65 64 5f 6e 6f 64 65 odes_from(white_nodes.+.red_node
1b60 73 29 0a 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2e 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d s).original_graph.add_edges_from
1b80 28 0a 20 20 20 20 5b 0a 20 20 20 20 20 20 20 20 28 22 31 22 2c 20 22 43 22 29 2c 0a 20 20 20 20 (.....[.........("1",."C"),.....
1ba0 20 20 20 20 28 22 31 22 2c 20 22 42 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 32 22 2c 20 22 43 ....("1",."B"),.........("2",."C
1bc0 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 32 22 2c 20 22 42 22 29 2c 0a 20 20 20 20 20 20 20 20 "),.........("2",."B"),.........
1be0 28 22 32 22 2c 20 22 41 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 33 22 2c 20 22 42 22 29 2c 0a ("2",."A"),.........("3",."B"),.
1c00 20 20 20 20 20 20 20 20 28 22 33 22 2c 20 22 41 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 33 22 ........("3",."A"),.........("3"
1c20 2c 20 22 36 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 34 22 2c 20 22 43 22 29 2c 0a 20 20 20 20 ,."6"),.........("4",."C"),.....
1c40 20 20 20 20 28 22 34 22 2c 20 22 42 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 34 22 2c 20 22 41 ....("4",."B"),.........("4",."A
1c60 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 35 22 2c 20 22 42 22 29 2c 0a 20 20 20 20 20 20 20 20 "),.........("5",."B"),.........
1c80 28 22 35 22 2c 20 22 41 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 36 22 2c 20 22 35 22 29 2c 0a ("5",."A"),.........("6",."5"),.
1ca0 20 20 20 20 20 20 20 20 28 22 41 22 2c 20 22 36 22 29 2c 0a 20 20 20 20 5d 0a 29 0a 62 61 73 65 ........("A",."6"),.....].).base
1cc0 5f 6f 70 74 69 6f 6e 73 20 3d 20 7b 22 77 69 74 68 5f 6c 61 62 65 6c 73 22 3a 20 54 72 75 65 2c _options.=.{"with_labels":.True,
1ce0 20 22 65 64 67 65 63 6f 6c 6f 72 73 22 3a 20 22 62 6c 61 63 6b 22 7d 0a 70 6f 73 20 3d 20 7b 0a ."edgecolors":."black"}.pos.=.{.
1d00 20 20 20 20 22 33 22 3a 20 28 30 2c 20 31 29 2c 0a 20 20 20 20 22 32 22 3a 20 28 30 2c 20 32 29 ...."3":.(0,.1),....."2":.(0,.2)
1d20 2c 0a 20 20 20 20 22 31 22 3a 20 28 30 2c 20 33 29 2c 0a 20 20 20 20 22 36 22 3a 20 28 31 2c 20 ,....."1":.(0,.3),....."6":.(1,.
1d40 30 29 2c 0a 20 20 20 20 22 41 22 3a 20 28 31 2c 20 31 29 2c 0a 20 20 20 20 22 42 22 3a 20 28 31 0),....."A":.(1,.1),....."B":.(1
1d60 2c 20 32 29 2c 0a 20 20 20 20 22 43 22 3a 20 28 31 2c 20 33 29 2c 0a 20 20 20 20 22 34 22 3a 20 ,.2),....."C":.(1,.3),....."4":.
1d80 28 32 2c 20 33 29 2c 0a 20 20 20 20 22 35 22 3a 20 28 32 2c 20 31 29 2c 0a 7d 0a 61 78 31 20 3d (2,.3),....."5":.(2,.1),.}.ax1.=
1da0 20 70 6c 74 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 74 2e 74 69 74 6c 65 28 .plt.subplot(1,.2,.1).plt.title(
1dc0 22 4f 72 69 67 69 6e 61 6c 20 28 25 73 20 65 64 67 65 73 29 22 20 25 20 6f 72 69 67 69 6e 61 6c "Original.(%s.edges)".%.original
1de0 5f 67 72 61 70 68 2e 6e 75 6d 62 65 72 5f 6f 66 5f 65 64 67 65 73 28 29 29 0a 6e 78 2e 64 72 61 _graph.number_of_edges()).nx.dra
1e00 77 5f 6e 65 74 77 6f 72 6b 78 28 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2c 20 70 6f 73 3d 70 w_networkx(original_graph,.pos=p
1e20 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c 6f 72 73 2c 20 2a 2a 62 61 os,.node_color=node_colors,.**ba
1e40 73 65 5f 6f 70 74 69 6f 6e 73 29 0a 0a 6e 6f 6e 65 78 70 5f 67 72 61 70 68 2c 20 63 6f 6d 70 72 se_options)..nonexp_graph,.compr
1e60 65 73 73 69 6f 6e 5f 6e 6f 64 65 73 20 3d 20 6e 78 2e 73 75 6d 6d 61 72 69 7a 61 74 69 6f 6e 2e ession_nodes.=.nx.summarization.
1e80 64 65 64 65 6e 73 69 66 79 28 0a 20 20 20 20 6f 72 69 67 69 6e 61 6c 5f 67 72 61 70 68 2c 20 74 dedensify(.....original_graph,.t
1ea0 68 72 65 73 68 6f 6c 64 3d 32 2c 20 63 6f 70 79 3d 46 61 6c 73 65 0a 29 0a 6e 6f 6e 65 78 70 5f hreshold=2,.copy=False.).nonexp_
1ec0 6e 6f 64 65 5f 63 6f 6c 6f 72 73 20 3d 20 6c 69 73 74 28 6e 6f 64 65 5f 63 6f 6c 6f 72 73 29 0a node_colors.=.list(node_colors).
1ee0 6e 6f 6e 65 78 70 5f 6e 6f 64 65 5f 73 69 7a 65 73 20 3d 20 6c 69 73 74 28 6e 6f 64 65 5f 73 69 nonexp_node_sizes.=.list(node_si
1f00 7a 65 73 29 0a 66 6f 72 20 6e 6f 64 65 20 69 6e 20 63 6f 6d 70 72 65 73 73 69 6f 6e 5f 6e 6f 64 zes).for.node.in.compression_nod
1f20 65 73 3a 0a 20 20 20 20 6e 6f 6e 65 78 70 5f 6e 6f 64 65 5f 63 6f 6c 6f 72 73 2e 61 70 70 65 6e es:.....nonexp_node_colors.appen
1f40 64 28 22 79 65 6c 6c 6f 77 22 29 0a 20 20 20 20 6e 6f 6e 65 78 70 5f 6e 6f 64 65 5f 73 69 7a 65 d("yellow").....nonexp_node_size
1f60 73 2e 61 70 70 65 6e 64 28 36 30 30 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 s.append(600).plt.subplot(1,.2,.
1f80 32 29 0a 0a 70 6c 74 2e 74 69 74 6c 65 28 22 44 65 64 65 6e 73 69 66 69 65 64 20 28 25 73 20 65 2)..plt.title("Dedensified.(%s.e
1fa0 64 67 65 73 29 22 20 25 20 6e 6f 6e 65 78 70 5f 67 72 61 70 68 2e 6e 75 6d 62 65 72 5f 6f 66 5f dges)".%.nonexp_graph.number_of_
1fc0 65 64 67 65 73 28 29 29 0a 6e 6f 6e 65 78 70 5f 70 6f 73 20 3d 20 7b 0a 20 20 20 20 22 35 22 3a edges()).nonexp_pos.=.{....."5":
1fe0 20 28 30 2c 20 30 29 2c 0a 20 20 20 20 22 42 22 3a 20 28 30 2c 20 32 29 2c 0a 20 20 20 20 22 31 .(0,.0),....."B":.(0,.2),....."1
2000 22 3a 20 28 30 2c 20 33 29 2c 0a 20 20 20 20 22 36 22 3a 20 28 31 2c 20 30 2e 37 35 29 2c 0a 20 ":.(0,.3),....."6":.(1,.0.75),..
2020 20 20 20 22 33 22 3a 20 28 31 2e 35 2c 20 31 2e 35 29 2c 0a 20 20 20 20 22 41 22 3a 20 28 32 2c ..."3":.(1.5,.1.5),....."A":.(2,
2040 20 30 29 2c 0a 20 20 20 20 22 43 22 3a 20 28 32 2c 20 33 29 2c 0a 20 20 20 20 22 34 22 3a 20 28 .0),....."C":.(2,.3),....."4":.(
2060 33 2c 20 31 2e 35 29 2c 0a 20 20 20 20 22 32 22 3a 20 28 33 2c 20 32 2e 35 29 2c 0a 7d 0a 63 5f 3,.1.5),....."2":.(3,.2.5),.}.c_
2080 6e 6f 64 65 73 20 3d 20 6c 69 73 74 28 63 6f 6d 70 72 65 73 73 69 6f 6e 5f 6e 6f 64 65 73 29 0a nodes.=.list(compression_nodes).
20a0 63 5f 6e 6f 64 65 73 2e 73 6f 72 74 28 29 0a 66 6f 72 20 73 70 6f 74 2c 20 6e 6f 64 65 20 69 6e c_nodes.sort().for.spot,.node.in
20c0 20 65 6e 75 6d 65 72 61 74 65 28 63 5f 6e 6f 64 65 73 29 3a 0a 20 20 20 20 6e 6f 6e 65 78 70 5f .enumerate(c_nodes):.....nonexp_
20e0 70 6f 73 5b 6e 6f 64 65 5d 20 3d 20 28 32 2c 20 73 70 6f 74 20 2b 20 32 29 0a 6e 78 2e 64 72 61 pos[node].=.(2,.spot.+.2).nx.dra
2100 77 5f 6e 65 74 77 6f 72 6b 78 28 0a 20 20 20 20 6e 6f 6e 65 78 70 5f 67 72 61 70 68 2c 0a 20 20 w_networkx(.....nonexp_graph,...
2120 20 20 70 6f 73 3d 6e 6f 6e 65 78 70 5f 70 6f 73 2c 0a 20 20 20 20 6e 6f 64 65 5f 63 6f 6c 6f 72 ..pos=nonexp_pos,.....node_color
2140 3d 6e 6f 6e 65 78 70 5f 6e 6f 64 65 5f 63 6f 6c 6f 72 73 2c 0a 20 20 20 20 6e 6f 64 65 5f 73 69 =nonexp_node_colors,.....node_si
2160 7a 65 3d 6e 6f 6e 65 78 70 5f 6e 6f 64 65 5f 73 69 7a 65 73 2c 0a 20 20 20 20 2a 2a 62 61 73 65 ze=nonexp_node_sizes,.....**base
2180 5f 6f 70 74 69 6f 6e 73 0a 29 0a 0a 70 6c 74 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 _options.)..plt.tight_layout().p
21a0 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0e 7b 57 56 06 cf c1 cd 7d 02 00 00 lt.show().PK.........{WV....}...
21c0 7d 02 00 00 28 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 6b 72 61 63 6b 68 61 72 }...(...algorithms/plot_krackhar
21e0 64 74 5f 63 65 6e 74 72 61 6c 69 74 79 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d dt_centrality.py""".============
2200 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4b 72 61 63 6b 68 61 72 64 74 20 43 65 6e 74 72 61 6c 69 74 79 0a =========.Krackhardt.Centrality.
2220 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 43 65 6e 74 72 61 6c 69 74 =====================..Centralit
2240 79 20 6d 65 61 73 75 72 65 73 20 6f 66 20 4b 72 61 63 6b 68 61 72 64 74 20 73 6f 63 69 61 6c 20 y.measures.of.Krackhardt.social.
2260 6e 65 74 77 6f 72 6b 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e network.."""..import.matplotlib.
2280 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 pyplot.as.plt.import.networkx.as
22a0 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 6b 72 61 63 6b 68 61 72 64 74 5f 6b 69 74 65 5f 67 72 61 70 .nx..G.=.nx.krackhardt_kite_grap
22c0 68 28 29 0a 0a 70 72 69 6e 74 28 22 42 65 74 77 65 65 6e 6e 65 73 73 22 29 0a 62 20 3d 20 6e 78 h()..print("Betweenness").b.=.nx
22e0 2e 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 28 47 29 0a 66 6f 72 20 76 .betweenness_centrality(G).for.v
2300 20 69 6e 20 47 2e 6e 6f 64 65 73 28 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 76 3a 32 7d .in.G.nodes():.....print(f"{v:2}
2320 20 7b 62 5b 76 5d 3a 2e 33 66 7d 22 29 0a 0a 70 72 69 6e 74 28 22 44 65 67 72 65 65 20 63 65 6e .{b[v]:.3f}")..print("Degree.cen
2340 74 72 61 6c 69 74 79 22 29 0a 64 20 3d 20 6e 78 2e 64 65 67 72 65 65 5f 63 65 6e 74 72 61 6c 69 trality").d.=.nx.degree_centrali
2360 74 79 28 47 29 0a 66 6f 72 20 76 20 69 6e 20 47 2e 6e 6f 64 65 73 28 29 3a 0a 20 20 20 20 70 72 ty(G).for.v.in.G.nodes():.....pr
2380 69 6e 74 28 66 22 7b 76 3a 32 7d 20 7b 64 5b 76 5d 3a 2e 33 66 7d 22 29 0a 0a 70 72 69 6e 74 28 int(f"{v:2}.{d[v]:.3f}")..print(
23a0 22 43 6c 6f 73 65 6e 65 73 73 20 63 65 6e 74 72 61 6c 69 74 79 22 29 0a 63 20 3d 20 6e 78 2e 63 "Closeness.centrality").c.=.nx.c
23c0 6c 6f 73 65 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 28 47 29 0a 66 6f 72 20 76 20 69 6e 20 loseness_centrality(G).for.v.in.
23e0 47 2e 6e 6f 64 65 73 28 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 76 3a 32 7d 20 7b 63 5b G.nodes():.....print(f"{v:2}.{c[
2400 76 5d 3a 2e 33 66 7d 22 29 0a 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 v]:.3f}")..pos.=.nx.spring_layou
2420 74 28 47 2c 20 73 65 65 64 3d 33 36 37 29 20 20 23 20 53 65 65 64 20 6c 61 79 6f 75 74 20 66 6f t(G,.seed=367)..#.Seed.layout.fo
2440 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 r.reproducibility.nx.draw(G,.pos
2460 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0e 7b 57 56 7b 7c 91 76 6c ).plt.show().PK.........{WV{|.vl
2480 17 00 00 6c 17 00 00 2d 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 69 74 65 72 61 ...l...-...algorithms/plot_itera
24a0 74 65 64 5f 64 79 6e 61 6d 69 63 61 6c 5f 73 79 73 74 65 6d 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d ted_dynamical_systems.py""".====
24c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 49 74 65 72 61 74 65 64 20 ======================.Iterated.
24e0 44 79 6e 61 6d 69 63 61 6c 20 53 79 73 74 65 6d 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d Dynamical.Systems.==============
2500 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 44 69 67 72 61 70 68 73 20 66 72 6f 6d 20 49 6e 74 65 ============..Digraphs.from.Inte
2520 67 65 72 2d 76 61 6c 75 65 64 20 49 74 65 72 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 73 0a 0a 53 ger-valued.Iterated.Functions..S
2540 75 6d 73 20 6f 66 20 63 75 62 65 73 20 6f 6e 20 33 4e 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ums.of.cubes.on.3N.-------------
2560 2d 2d 2d 2d 2d 2d 0a 0a 54 68 65 20 6e 75 6d 62 65 72 20 31 35 33 20 68 61 73 20 61 20 63 75 72 ------..The.number.153.has.a.cur
2580 69 6f 75 73 20 70 72 6f 70 65 72 74 79 2e 0a 0a 4c 65 74 20 33 4e 3d 7b 33 2c 36 2c 39 2c 31 32 ious.property...Let.3N={3,6,9,12
25a0 2c 2e 2e 2e 7d 20 62 65 20 74 68 65 20 73 65 74 20 6f 66 20 70 6f 73 69 74 69 76 65 20 6d 75 6c ,...}.be.the.set.of.positive.mul
25c0 74 69 70 6c 65 73 20 6f 66 20 33 2e 20 20 44 65 66 69 6e 65 20 61 6e 0a 69 74 65 72 61 74 69 76 tiples.of.3...Define.an.iterativ
25e0 65 20 70 72 6f 63 65 73 73 20 66 3a 33 4e 2d 3e 33 4e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 20 66 e.process.f:3N->3N.as.follows:.f
2600 6f 72 20 61 20 67 69 76 65 6e 20 6e 2c 20 74 61 6b 65 20 65 61 63 68 20 64 69 67 69 74 0a 6f 66 or.a.given.n,.take.each.digit.of
2620 20 6e 20 28 69 6e 20 62 61 73 65 20 31 30 29 2c 20 63 75 62 65 20 69 74 20 61 6e 64 20 74 68 65 .n.(in.base.10),.cube.it.and.the
2640 6e 20 73 75 6d 20 74 68 65 20 63 75 62 65 73 20 74 6f 20 6f 62 74 61 69 6e 20 66 28 6e 29 2e 0a n.sum.the.cubes.to.obtain.f(n)..
2660 0a 57 68 65 6e 20 74 68 69 73 20 70 72 6f 63 65 73 73 20 69 73 20 72 65 70 65 61 74 65 64 2c 20 .When.this.process.is.repeated,.
2680 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 73 65 72 69 65 73 20 6e 2c 20 66 28 6e 29 2c 20 66 28 the.resulting.series.n,.f(n),.f(
26a0 66 28 6e 29 29 2c 2e 2e 2e 0a 74 65 72 6d 69 6e 61 74 65 20 69 6e 20 31 35 33 20 61 66 74 65 72 f(n)),....terminate.in.153.after
26c0 20 61 20 66 69 6e 69 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 28 .a.finite.number.of.iterations.(
26e0 74 68 65 20 70 72 6f 63 65 73 73 20 65 6e 64 73 0a 62 65 63 61 75 73 65 20 31 35 33 20 3d 20 31 the.process.ends.because.153.=.1
2700 2a 2a 33 20 2b 20 35 2a 2a 33 20 2b 20 33 2a 2a 33 29 2e 0a 0a 49 6e 20 74 68 65 20 6c 61 6e 67 **3.+.5**3.+.3**3)...In.the.lang
2720 75 61 67 65 20 6f 66 20 64 69 73 63 72 65 74 65 20 64 79 6e 61 6d 69 63 61 6c 20 73 79 73 74 65 uage.of.discrete.dynamical.syste
2740 6d 73 2c 20 31 35 33 20 69 73 20 74 68 65 20 67 6c 6f 62 61 6c 0a 61 74 74 72 61 63 74 6f 72 20 ms,.153.is.the.global.attractor.
2760 66 6f 72 20 74 68 65 20 69 74 65 72 61 74 65 64 20 6d 61 70 20 66 20 72 65 73 74 72 69 63 74 65 for.the.iterated.map.f.restricte
2780 64 20 74 6f 20 74 68 65 20 73 65 74 20 33 4e 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20 74 d.to.the.set.3N...For.example:.t
27a0 61 6b 65 20 74 68 65 20 6e 75 6d 62 65 72 20 31 30 38 0a 0a 66 28 31 30 38 29 20 3d 20 31 2a 2a ake.the.number.108..f(108).=.1**
27c0 33 20 2b 20 30 2a 2a 33 20 2b 20 38 2a 2a 33 20 3d 20 35 31 33 0a 0a 61 6e 64 0a 0a 66 28 35 31 3.+.0**3.+.8**3.=.513..and..f(51
27e0 33 29 20 3d 20 35 2a 2a 33 20 2b 20 31 2a 2a 33 20 2b 20 33 2a 2a 33 20 3d 20 31 35 33 0a 0a 53 3).=.5**3.+.1**3.+.3**3.=.153..S
2800 6f 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 31 30 38 20 77 65 20 72 65 61 63 68 20 31 35 33 20 o,.starting.at.108.we.reach.153.
2820 69 6e 20 74 77 6f 20 69 74 65 72 61 74 69 6f 6e 73 2c 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 in.two.iterations,.represented.a
2840 73 3a 0a 0a 31 30 38 2d 3e 35 31 33 2d 3e 31 35 33 0a 0a 43 6f 6d 70 75 74 69 6e 67 20 61 6c 6c s:..108->513->153..Computing.all
2860 20 6f 72 62 69 74 73 20 6f 66 20 33 4e 20 75 70 20 74 6f 20 31 30 2a 2a 35 20 72 65 76 65 61 6c .orbits.of.3N.up.to.10**5.reveal
2880 73 20 74 68 61 74 20 74 68 65 20 61 74 74 72 61 63 74 6f 72 0a 31 35 33 20 69 73 20 72 65 61 63 s.that.the.attractor.153.is.reac
28a0 68 65 64 20 69 6e 20 61 20 6d 61 78 69 6d 75 6d 20 6f 66 20 31 34 20 69 74 65 72 61 74 69 6f 6e hed.in.a.maximum.of.14.iteration
28c0 73 2e 20 49 6e 20 74 68 69 73 20 63 6f 64 65 20 77 65 0a 73 68 6f 77 20 74 68 61 74 20 31 33 20 s..In.this.code.we.show.that.13.
28e0 63 79 63 6c 65 73 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 72 65 71 75 69 72 65 64 20 66 cycles.is.the.maximum.required.f
2900 6f 72 20 61 6c 6c 20 69 6e 74 65 67 65 72 73 20 28 69 6e 20 33 4e 29 0a 6c 65 73 73 20 74 68 61 or.all.integers.(in.3N).less.tha
2920 6e 20 31 30 2c 30 30 30 2e 0a 0a 54 68 65 20 73 6d 61 6c 6c 65 73 74 20 6e 75 6d 62 65 72 20 74 n.10,000...The.smallest.number.t
2940 68 61 74 20 72 65 71 75 69 72 65 73 20 31 33 20 69 74 65 72 61 74 69 6f 6e 73 20 74 6f 20 72 65 hat.requires.13.iterations.to.re
2960 61 63 68 20 31 35 33 2c 20 69 73 20 31 37 37 2c 20 69 2e 65 2e 2c 0a 0a 31 37 37 2d 3e 36 38 37 ach.153,.is.177,.i.e.,..177->687
2980 2d 3e 31 30 37 31 2d 3e 33 34 35 2d 3e 32 31 36 2d 3e 32 32 35 2d 3e 31 34 31 2d 3e 36 36 2d 3e ->1071->345->216->225->141->66->
29a0 34 33 32 2d 3e 39 39 2d 3e 31 34 35 38 2d 3e 37 30 32 2d 3e 33 35 31 2d 3e 31 35 33 0a 0a 54 68 432->99->1458->702->351->153..Th
29c0 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 61 72 67 65 20 64 69 67 72 61 70 68 73 20 61 72 65 20 75 e.resulting.large.digraphs.are.u
29e0 73 65 66 75 6c 20 66 6f 72 20 74 65 73 74 69 6e 67 20 6e 65 74 77 6f 72 6b 20 73 6f 66 74 77 61 seful.for.testing.network.softwa
2a00 72 65 2e 0a 0a 54 68 65 20 67 65 6e 65 72 61 6c 20 70 72 6f 62 6c 65 6d 0a 2d 2d 2d 2d 2d 2d 2d re...The.general.problem.-------
2a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 47 69 76 65 6e 20 6e 75 6d 62 65 72 73 20 6e 2c 20 61 ------------..Given.numbers.n,.a
2a40 20 70 6f 77 65 72 20 70 20 61 6e 64 20 62 61 73 65 20 62 2c 20 64 65 66 69 6e 65 20 46 28 6e 3b .power.p.and.base.b,.define.F(n;
2a60 20 70 2c 20 62 29 20 61 73 20 74 68 65 20 73 75 6d 20 6f 66 0a 74 68 65 20 64 69 67 69 74 73 20 .p,.b).as.the.sum.of.the.digits.
2a80 6f 66 20 6e 20 28 69 6e 20 62 61 73 65 20 62 29 20 72 61 69 73 65 64 20 74 6f 20 74 68 65 20 70 of.n.(in.base.b).raised.to.the.p
2aa0 6f 77 65 72 20 70 2e 20 54 68 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c 65 0a 63 6f 72 72 65 73 ower.p..The.above.example.corres
2ac0 70 6f 6e 64 73 20 74 6f 20 66 28 6e 29 3d 46 28 6e 3b 20 33 2c 31 30 29 2c 20 61 6e 64 20 62 65 ponds.to.f(n)=F(n;.3,10),.and.be
2ae0 6c 6f 77 20 46 28 6e 3b 20 70 2c 20 62 29 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 low.F(n;.p,.b).is.implemented.as
2b00 0a 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 77 65 72 73 75 6d 28 6e 2c 70 2c 62 29 2e 20 54 .the.function.powersum(n,p,b)..T
2b20 68 65 20 69 74 65 72 61 74 69 76 65 20 64 79 6e 61 6d 69 63 61 6c 20 73 79 73 74 65 6d 20 64 65 he.iterative.dynamical.system.de
2b40 66 69 6e 65 64 20 62 79 0a 74 68 65 20 6d 61 70 70 69 6e 67 20 6e 3a 2d 3e 66 28 6e 29 20 61 62 fined.by.the.mapping.n:->f(n).ab
2b60 6f 76 65 20 28 6f 76 65 72 20 33 4e 29 20 63 6f 6e 76 65 72 67 65 73 20 74 6f 20 61 20 73 69 6e ove.(over.3N).converges.to.a.sin
2b80 67 6c 65 20 66 69 78 65 64 20 70 6f 69 6e 74 3b 0a 31 35 33 2e 20 41 70 70 6c 79 69 6e 67 20 74 gle.fixed.point;.153..Applying.t
2ba0 68 65 20 6d 61 70 20 74 6f 20 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 73 20 he.map.to.all.positive.integers.
2bc0 4e 2c 20 6c 65 61 64 73 20 74 6f 20 61 20 64 69 73 63 72 65 74 65 0a 64 79 6e 61 6d 69 63 61 6c N,.leads.to.a.discrete.dynamical
2be0 20 70 72 6f 63 65 73 73 20 77 69 74 68 20 35 20 66 69 78 65 64 20 70 6f 69 6e 74 73 3a 20 31 2c .process.with.5.fixed.points:.1,
2c00 20 31 35 33 2c 20 33 37 30 2c 20 33 37 31 2c 20 34 30 37 2e 20 4d 6f 64 75 6c 6f 20 33 0a 74 68 .153,.370,.371,.407..Modulo.3.th
2c20 6f 73 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 31 2c 20 30 2c 20 31 2c 20 32 2c 20 32 2e 20 54 ose.numbers.are.1,.0,.1,.2,.2..T
2c40 68 65 20 66 75 6e 63 74 69 6f 6e 20 66 20 61 62 6f 76 65 20 68 61 73 20 74 68 65 20 61 64 64 65 he.function.f.above.has.the.adde
2c60 64 0a 70 72 6f 70 65 72 74 79 20 74 68 61 74 20 69 74 20 6d 61 70 73 20 61 20 6d 75 6c 74 69 70 d.property.that.it.maps.a.multip
2c80 6c 65 20 6f 66 20 33 20 74 6f 20 61 6e 6f 74 68 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 33 le.of.3.to.another.multiple.of.3
2ca0 3b 20 69 2e 65 2e 20 69 74 0a 69 73 20 69 6e 76 61 72 69 61 6e 74 20 6f 6e 20 74 68 65 20 73 75 ;.i.e..it.is.invariant.on.the.su
2cc0 62 73 65 74 20 33 4e 2e 0a 0a 0a 54 68 65 20 73 71 75 61 72 69 6e 67 20 6f 66 20 64 69 67 69 74 bset.3N....The.squaring.of.digit
2ce0 73 20 28 69 6e 20 62 61 73 65 20 31 30 29 20 72 65 73 75 6c 74 20 69 6e 20 63 79 63 6c 65 73 20 s.(in.base.10).result.in.cycles.
2d00 61 6e 64 20 74 68 65 0a 73 69 6e 67 6c 65 20 66 69 78 65 64 20 70 6f 69 6e 74 20 31 2e 20 49 2e and.the.single.fixed.point.1..I.
2d20 65 2e 2c 20 66 72 6f 6d 20 61 20 63 65 72 74 61 69 6e 20 70 6f 69 6e 74 20 6f 6e 2c 20 74 68 65 e.,.from.a.certain.point.on,.the
2d40 20 70 72 6f 63 65 73 73 0a 73 74 61 72 74 73 20 72 65 70 65 61 74 69 6e 67 20 69 74 73 65 6c 66 .process.starts.repeating.itself
2d60 2e 0a 0a 6b 65 79 77 6f 72 64 73 3a 20 22 52 65 63 75 72 72 69 6e 67 20 44 69 67 69 74 61 6c 20 ...keywords:."Recurring.Digital.
2d80 49 6e 76 61 72 69 61 6e 74 22 2c 20 22 4e 61 72 63 69 73 73 69 73 74 69 63 20 4e 75 6d 62 65 72 Invariant",."Narcissistic.Number
2da0 22 2c 0a 22 48 61 70 70 79 20 4e 75 6d 62 65 72 22 0a 0a 54 68 65 20 33 6e 2b 31 20 70 72 6f 62 ",."Happy.Number"..The.3n+1.prob
2dc0 6c 65 6d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 54 68 65 72 65 20 69 73 20 61 lem.----------------..There.is.a
2de0 20 72 69 63 68 20 68 69 73 74 6f 72 79 20 6f 66 20 6d 61 74 68 65 6d 61 74 69 63 61 6c 20 72 65 .rich.history.of.mathematical.re
2e00 63 72 65 61 74 69 6f 6e 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 64 69 73 63 72 65 creations.associated.with.discre
2e20 74 65 20 64 79 6e 61 6d 69 63 61 6c 20 73 79 73 74 65 6d 73 2e 20 20 54 68 65 20 6d 6f 73 74 20 te.dynamical.systems...The.most.
2e40 66 61 6d 6f 75 73 0a 69 73 20 74 68 65 20 43 6f 6c 6c 61 74 7a 20 33 6e 2b 31 20 70 72 6f 62 6c famous.is.the.Collatz.3n+1.probl
2e60 65 6d 2e 20 53 65 65 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 63 6f 6c 6c 61 74 7a 5f 70 72 6f em..See.the.function.collatz_pro
2e80 62 6c 65 6d 5f 64 69 67 72 61 70 68 20 62 65 6c 6f 77 2e 20 54 68 65 20 43 6f 6c 6c 61 74 7a 20 blem_digraph.below..The.Collatz.
2ea0 63 6f 6e 6a 65 63 74 75 72 65 0a 2d 2d 2d 20 74 68 61 74 20 65 76 65 72 79 20 6f 72 62 69 74 20 conjecture.---.that.every.orbit.
2ec0 72 65 74 75 72 6e 73 20 74 6f 20 74 68 65 20 66 69 78 65 64 20 70 6f 69 6e 74 20 31 20 69 6e 20 returns.to.the.fixed.point.1.in.
2ee0 66 69 6e 69 74 65 20 74 69 6d 65 0a 2d 2d 2d 20 69 73 20 73 74 69 6c 6c 20 75 6e 70 72 6f 76 65 finite.time.---.is.still.unprove
2f00 6e 2e 20 45 76 65 6e 20 74 68 65 20 67 72 65 61 74 20 50 61 75 6c 20 45 72 64 6f 73 20 73 61 69 n..Even.the.great.Paul.Erdos.sai
2f20 64 20 22 4d 61 74 68 65 6d 61 74 69 63 73 0a 69 73 20 6e 6f 74 20 79 65 74 20 72 65 61 64 79 20 d."Mathematics.is.not.yet.ready.
2f40 66 6f 72 20 73 75 63 68 20 70 72 6f 62 6c 65 6d 73 22 2c 20 61 6e 64 20 6f 66 66 65 72 65 64 20 for.such.problems",.and.offered.
2f60 24 35 30 30 0a 66 6f 72 20 69 74 73 20 73 6f 6c 75 74 69 6f 6e 2e 0a 0a 6b 65 79 77 6f 72 64 73 $500.for.its.solution...keywords
2f80 3a 20 22 33 6e 2b 31 22 2c 20 22 33 78 2b 31 22 2c 20 22 43 6f 6c 6c 61 74 7a 20 70 72 6f 62 6c :."3n+1",."3x+1",."Collatz.probl
2fa0 65 6d 22 2c 20 22 54 68 77 61 69 74 65 27 73 20 63 6f 6e 6a 65 63 74 75 72 65 22 0a 22 22 22 0a em",."Thwaite's.conjecture".""".
2fc0 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 6e 6d 61 78 20 3d 20 31 .import.networkx.as.nx..nmax.=.1
2fe0 30 30 30 30 0a 70 20 3d 20 33 0a 0a 0a 64 65 66 20 64 69 67 69 74 73 72 65 70 28 6e 2c 20 62 3d 0000.p.=.3...def.digitsrep(n,.b=
3000 31 30 29 3a 0a 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 6c 69 73 74 20 6f 66 20 64 69 67 69 74 10):....."""Return.list.of.digit
3020 73 20 63 6f 6d 70 72 69 73 69 6e 67 20 6e 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 62 61 s.comprising.n.represented.in.ba
3040 73 65 20 62 2e 0a 20 20 20 20 6e 20 6d 75 73 74 20 62 65 20 61 20 6e 6f 6e 6e 65 67 61 74 69 76 se.b......n.must.be.a.nonnegativ
3060 65 20 69 6e 74 65 67 65 72 22 22 22 0a 0a 20 20 20 20 69 66 20 6e 20 3c 3d 20 30 3a 0a 20 20 20 e.integer"""......if.n.<=.0:....
3080 20 20 20 20 20 72 65 74 75 72 6e 20 5b 30 5d 0a 0a 20 20 20 20 64 6c 69 73 74 20 3d 20 5b 5d 0a .....return.[0]......dlist.=.[].
30a0 20 20 20 20 77 68 69 6c 65 20 6e 20 3e 20 30 3a 0a 20 20 20 20 20 20 20 20 23 20 50 72 65 70 65 ....while.n.>.0:.........#.Prepe
30c0 6e 64 20 6e 65 78 74 20 6c 65 61 73 74 2d 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 0a nd.next.least-significant.digit.
30e0 20 20 20 20 20 20 20 20 64 6c 69 73 74 20 3d 20 5b 6e 20 25 20 62 5d 20 2b 20 64 6c 69 73 74 0a ........dlist.=.[n.%.b].+.dlist.
3100 20 20 20 20 20 20 20 20 23 20 46 6c 6f 6f 72 2d 64 69 76 69 73 69 6f 6e 0a 20 20 20 20 20 20 20 ........#.Floor-division........
3120 20 6e 20 3d 20 6e 20 2f 2f 20 62 0a 20 20 20 20 72 65 74 75 72 6e 20 64 6c 69 73 74 0a 0a 0a 64 .n.=.n.//.b.....return.dlist...d
3140 65 66 20 70 6f 77 65 72 73 75 6d 28 6e 2c 20 70 2c 20 62 3d 31 30 29 3a 0a 20 20 20 20 22 22 22 ef.powersum(n,.p,.b=10):....."""
3160 52 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 64 69 67 69 74 73 20 6f 66 20 6e 20 28 69 6e 20 62 61 Return.sum.of.digits.of.n.(in.ba
3180 73 65 20 62 29 20 72 61 69 73 65 64 20 74 6f 20 74 68 65 20 70 6f 77 65 72 20 70 2e 22 22 22 0a se.b).raised.to.the.power.p.""".
31a0 20 20 20 20 64 6c 69 73 74 20 3d 20 64 69 67 69 74 73 72 65 70 28 6e 2c 20 62 29 0a 20 20 20 20 ....dlist.=.digitsrep(n,.b).....
31c0 73 75 6d 20 3d 20 30 0a 20 20 20 20 66 6f 72 20 6b 20 69 6e 20 64 6c 69 73 74 3a 0a 20 20 20 20 sum.=.0.....for.k.in.dlist:.....
31e0 20 20 20 20 73 75 6d 20 2b 3d 20 6b 2a 2a 70 0a 20 20 20 20 72 65 74 75 72 6e 20 73 75 6d 0a 0a ....sum.+=.k**p.....return.sum..
3200 0a 64 65 66 20 61 74 74 72 61 63 74 6f 72 31 35 33 5f 67 72 61 70 68 28 6e 2c 20 70 2c 20 6d 75 .def.attractor153_graph(n,.p,.mu
3220 6c 74 69 70 6c 65 3d 33 2c 20 62 3d 31 30 29 3a 0a 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 64 ltiple=3,.b=10):....."""Return.d
3240 69 67 72 61 70 68 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 70 6f 77 65 72 73 75 6d igraph.of.iterations.of.powersum
3260 28 6e 2c 33 2c 31 30 29 2e 22 22 22 0a 20 20 20 20 47 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 (n,3,10).""".....G.=.nx.DiGraph(
3280 29 0a 20 20 20 20 66 6f 72 20 6b 20 69 6e 20 72 61 6e 67 65 28 31 2c 20 6e 20 2b 20 31 29 3a 0a ).....for.k.in.range(1,.n.+.1):.
32a0 20 20 20 20 20 20 20 20 69 66 20 6b 20 25 20 6d 75 6c 74 69 70 6c 65 20 3d 3d 20 30 20 61 6e 64 ........if.k.%.multiple.==.0.and
32c0 20 6b 20 6e 6f 74 20 69 6e 20 47 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 31 20 3d 20 6b 0a .k.not.in.G:.............k1.=.k.
32e0 20 20 20 20 20 20 20 20 20 20 20 20 6b 6e 65 78 74 20 3d 20 70 6f 77 65 72 73 75 6d 28 6b 31 2c ............knext.=.powersum(k1,
3300 20 70 2c 20 62 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 6b 31 20 21 3d 20 6b .p,.b).............while.k1.!=.k
3320 6e 65 78 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 next:.................G.add_edge
3340 28 6b 31 2c 20 6b 6e 65 78 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 31 20 3d (k1,.knext).................k1.=
3360 20 6b 6e 65 78 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 6e 65 78 74 20 3d 20 70 .knext.................knext.=.p
3380 6f 77 65 72 73 75 6d 28 6b 31 2c 20 70 2c 20 62 29 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a owersum(k1,.p,.b).....return.G..
33a0 0a 64 65 66 20 73 71 75 61 72 69 6e 67 5f 63 79 63 6c 65 5f 67 72 61 70 68 5f 6f 6c 64 28 6e 2c .def.squaring_cycle_graph_old(n,
33c0 20 62 3d 31 30 29 3a 0a 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 64 69 67 72 61 70 68 20 6f 66 .b=10):....."""Return.digraph.of
33e0 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 70 6f 77 65 72 73 75 6d 28 6e 2c 32 2c 31 30 29 2e .iterations.of.powersum(n,2,10).
3400 22 22 22 0a 20 20 20 20 47 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 0a 20 20 20 20 66 6f 72 """.....G.=.nx.DiGraph().....for
3420 20 6b 20 69 6e 20 72 61 6e 67 65 28 31 2c 20 6e 20 2b 20 31 29 3a 0a 20 20 20 20 20 20 20 20 6b .k.in.range(1,.n.+.1):.........k
3440 31 20 3d 20 6b 0a 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 6e 6f 64 65 28 6b 31 29 20 20 23 20 1.=.k.........G.add_node(k1)..#.
3460 63 61 73 65 20 6b 31 3d 3d 6b 6e 65 78 74 2c 20 61 74 20 6c 65 61 73 74 20 61 64 64 20 6e 6f 64 case.k1==knext,.at.least.add.nod
3480 65 0a 20 20 20 20 20 20 20 20 6b 6e 65 78 74 20 3d 20 70 6f 77 65 72 73 75 6d 28 6b 31 2c 20 32 e.........knext.=.powersum(k1,.2
34a0 2c 20 62 29 0a 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 6b 31 2c 20 6b 6e 65 78 ,.b).........G.add_edge(k1,.knex
34c0 74 29 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 6b 31 20 21 3d 20 6b 6e 65 78 74 3a 20 20 23 t).........while.k1.!=.knext:..#
34e0 20 73 74 6f 70 20 69 66 20 66 69 78 65 64 20 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 .stop.if.fixed.point............
3500 20 6b 31 20 3d 20 6b 6e 65 78 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 6e 65 78 74 20 3d 20 .k1.=.knext.............knext.=.
3520 70 6f 77 65 72 73 75 6d 28 6b 31 2c 20 32 2c 20 62 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 powersum(k1,.2,.b).............G
3540 2e 61 64 64 5f 65 64 67 65 28 6b 31 2c 20 6b 6e 65 78 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 .add_edge(k1,.knext)............
3560 20 69 66 20 47 2e 6f 75 74 5f 64 65 67 72 65 65 28 6b 6e 65 78 74 29 20 3e 3d 20 31 3a 0a 20 20 .if.G.out_degree(knext).>=.1:...
3580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6b 6e 65 78 74 20 68 61 73 20 61 6c 72 65 61 64 ..............#.knext.has.alread
35a0 79 20 62 65 65 6e 20 69 74 65 72 61 74 65 64 20 69 6e 20 61 6e 64 20 6f 75 74 0a 20 20 20 20 20 y.been.iterated.in.and.out......
35c0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a ...........break.....return.G...
35e0 64 65 66 20 73 75 6d 5f 6f 66 5f 64 69 67 69 74 73 5f 67 72 61 70 68 28 6e 6d 61 78 2c 20 62 3d def.sum_of_digits_graph(nmax,.b=
3600 31 30 29 3a 0a 20 20 20 20 64 65 66 20 66 28 6e 29 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 10):.....def.f(n):.........retur
3620 6e 20 70 6f 77 65 72 73 75 6d 28 6e 2c 20 31 2c 20 62 29 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 n.powersum(n,.1,.b)......return.
3640 64 69 73 63 72 65 74 65 5f 64 79 6e 61 6d 69 63 73 5f 64 69 67 72 61 70 68 28 6e 6d 61 78 2c 20 discrete_dynamics_digraph(nmax,.
3660 66 29 0a 0a 0a 64 65 66 20 73 71 75 61 72 69 6e 67 5f 63 79 63 6c 65 5f 64 69 67 72 61 70 68 28 f)...def.squaring_cycle_digraph(
3680 6e 6d 61 78 2c 20 62 3d 31 30 29 3a 0a 20 20 20 20 64 65 66 20 66 28 6e 29 3a 0a 20 20 20 20 20 nmax,.b=10):.....def.f(n):......
36a0 20 20 20 72 65 74 75 72 6e 20 70 6f 77 65 72 73 75 6d 28 6e 2c 20 32 2c 20 62 29 0a 0a 20 20 20 ...return.powersum(n,.2,.b).....
36c0 20 72 65 74 75 72 6e 20 64 69 73 63 72 65 74 65 5f 64 79 6e 61 6d 69 63 73 5f 64 69 67 72 61 70 .return.discrete_dynamics_digrap
36e0 68 28 6e 6d 61 78 2c 20 66 29 0a 0a 0a 64 65 66 20 63 75 62 69 6e 67 5f 31 35 33 5f 64 69 67 72 h(nmax,.f)...def.cubing_153_digr
3700 61 70 68 28 6e 6d 61 78 29 3a 0a 20 20 20 20 64 65 66 20 66 28 6e 29 3a 0a 20 20 20 20 20 20 20 aph(nmax):.....def.f(n):........
3720 20 72 65 74 75 72 6e 20 70 6f 77 65 72 73 75 6d 28 6e 2c 20 33 2c 20 31 30 29 0a 0a 20 20 20 20 .return.powersum(n,.3,.10)......
3740 72 65 74 75 72 6e 20 64 69 73 63 72 65 74 65 5f 64 79 6e 61 6d 69 63 73 5f 64 69 67 72 61 70 68 return.discrete_dynamics_digraph
3760 28 6e 6d 61 78 2c 20 66 29 0a 0a 0a 64 65 66 20 64 69 73 63 72 65 74 65 5f 64 79 6e 61 6d 69 63 (nmax,.f)...def.discrete_dynamic
3780 73 5f 64 69 67 72 61 70 68 28 6e 6d 61 78 2c 20 66 2c 20 69 74 65 72 6d 61 78 3d 35 30 30 30 30 s_digraph(nmax,.f,.itermax=50000
37a0 29 3a 0a 20 20 20 20 47 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 0a 20 20 20 20 66 6f 72 20 ):.....G.=.nx.DiGraph().....for.
37c0 6b 20 69 6e 20 72 61 6e 67 65 28 31 2c 20 6e 6d 61 78 20 2b 20 31 29 3a 0a 20 20 20 20 20 20 20 k.in.range(1,.nmax.+.1):........
37e0 20 6b 6f 6c 64 20 3d 20 6b 0a 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 6e 6f 64 65 28 6b 6f 6c .kold.=.k.........G.add_node(kol
3800 64 29 0a 20 20 20 20 20 20 20 20 6b 6e 65 77 20 3d 20 66 28 6b 6f 6c 64 29 0a 20 20 20 20 20 20 d).........knew.=.f(kold).......
3820 20 20 47 2e 61 64 64 5f 65 64 67 65 28 6b 6f 6c 64 2c 20 6b 6e 65 77 29 0a 20 20 20 20 20 20 20 ..G.add_edge(kold,.knew)........
3840 20 77 68 69 6c 65 20 6b 6f 6c 64 20 21 3d 20 6b 6e 65 77 20 61 6e 64 20 6b 6f 6c 64 20 3c 3c 20 .while.kold.!=.knew.and.kold.<<.
3860 69 74 65 72 6d 61 78 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69 74 65 72 61 74 65 20 75 itermax:.............#.iterate.u
3880 6e 74 69 6c 20 66 69 78 65 64 20 70 6f 69 6e 74 20 72 65 61 63 68 65 64 20 6f 72 20 69 74 65 72 ntil.fixed.point.reached.or.iter
38a0 6d 61 78 20 69 73 20 65 78 63 65 65 64 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 6f 6c 64 max.is.exceeded.............kold
38c0 20 3d 20 6b 6e 65 77 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 6e 65 77 20 3d 20 66 28 6b 6f 6c .=.knew.............knew.=.f(kol
38e0 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 6b 6f 6c 64 2c 20 d).............G.add_edge(kold,.
3900 6b 6e 65 77 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 47 2e 6f 75 74 5f 64 65 67 72 65 knew).............if.G.out_degre
3920 65 28 6b 6e 65 77 29 20 3e 3d 20 31 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 e(knew).>=.1:.................#.
3940 6b 6e 65 77 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 74 65 72 61 74 65 64 20 69 knew.has.already.been.iterated.i
3960 6e 20 61 6e 64 20 6f 75 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0a n.and.out.................break.
3980 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 64 65 66 20 63 6f 6c 6c 61 74 7a 5f 70 72 6f 62 6c ....return.G...def.collatz_probl
39a0 65 6d 5f 64 69 67 72 61 70 68 28 6e 6d 61 78 29 3a 0a 20 20 20 20 64 65 66 20 66 28 6e 29 3a 0a em_digraph(nmax):.....def.f(n):.
39c0 20 20 20 20 20 20 20 20 69 66 20 6e 20 25 20 32 20 3d 3d 20 30 3a 0a 20 20 20 20 20 20 20 20 20 ........if.n.%.2.==.0:..........
39e0 20 20 20 72 65 74 75 72 6e 20 6e 20 2f 2f 20 32 0a 20 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 ...return.n.//.2.........else:..
3a00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 33 20 2a 20 6e 20 2b 20 31 0a 0a 20 20 20 ...........return.3.*.n.+.1.....
3a20 20 72 65 74 75 72 6e 20 64 69 73 63 72 65 74 65 5f 64 79 6e 61 6d 69 63 73 5f 64 69 67 72 61 70 .return.discrete_dynamics_digrap
3a40 68 28 6e 6d 61 78 2c 20 66 29 0a 0a 0a 64 65 66 20 66 69 78 65 64 5f 70 6f 69 6e 74 73 28 47 29 h(nmax,.f)...def.fixed_points(G)
3a60 3a 0a 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 66 69 78 65 64 20 :....."""Return.a.list.of.fixed.
3a80 70 6f 69 6e 74 73 20 66 6f 72 20 74 68 65 20 64 69 73 63 72 65 74 65 20 64 79 6e 61 6d 69 63 61 points.for.the.discrete.dynamica
3aa0 6c 0a 20 20 20 20 73 79 73 74 65 6d 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 74 68 65 20 l.....system.represented.by.the.
3ac0 64 69 67 72 61 70 68 20 47 2e 0a 20 20 20 20 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 6e digraph.G......""".....return.[n
3ae0 20 66 6f 72 20 6e 20 69 6e 20 47 20 69 66 20 47 2e 6f 75 74 5f 64 65 67 72 65 65 28 6e 29 20 3d .for.n.in.G.if.G.out_degree(n).=
3b00 3d 20 30 5d 0a 0a 0a 6e 6d 61 78 20 3d 20 31 30 30 30 30 0a 70 72 69 6e 74 28 66 22 42 75 69 6c =.0]...nmax.=.10000.print(f"Buil
3b20 64 69 6e 67 20 63 75 62 69 6e 67 5f 31 35 33 5f 64 69 67 72 61 70 68 28 7b 6e 6d 61 78 7d 29 22 ding.cubing_153_digraph({nmax})"
3b40 29 0a 47 20 3d 20 63 75 62 69 6e 67 5f 31 35 33 5f 64 69 67 72 61 70 68 28 6e 6d 61 78 29 0a 70 ).G.=.cubing_153_digraph(nmax).p
3b60 72 69 6e 74 28 22 52 65 73 75 6c 74 69 6e 67 20 64 69 67 72 61 70 68 20 68 61 73 22 2c 20 6c 65 rint("Resulting.digraph.has",.le
3b80 6e 28 47 29 2c 20 22 6e 6f 64 65 73 20 61 6e 64 22 2c 20 47 2e 73 69 7a 65 28 29 2c 20 22 20 65 n(G),."nodes.and",.G.size(),.".e
3ba0 64 67 65 73 22 29 0a 70 72 69 6e 74 28 22 53 68 6f 72 74 65 73 74 20 70 61 74 68 20 66 72 6f 6d dges").print("Shortest.path.from
3bc0 20 31 37 37 20 74 6f 20 31 35 33 20 69 73 3a 22 29 0a 70 72 69 6e 74 28 6e 78 2e 73 68 6f 72 74 .177.to.153.is:").print(nx.short
3be0 65 73 74 5f 70 61 74 68 28 47 2c 20 31 37 37 2c 20 31 35 33 29 29 0a 70 72 69 6e 74 28 66 22 66 est_path(G,.177,.153)).print(f"f
3c00 69 78 65 64 20 70 6f 69 6e 74 73 20 61 72 65 20 7b 66 69 78 65 64 5f 70 6f 69 6e 74 73 28 47 29 ixed.points.are.{fixed_points(G)
3c20 7d 22 29 0a 50 4b 03 04 14 00 00 00 00 00 0e 7b 57 56 e2 9f eb 7c 8c 09 00 00 8c 09 00 00 27 00 }").PK.........{WV...|........'.
3c40 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 70 61 72 61 6c 6c 65 6c 5f 62 65 74 77 65 ..algorithms/plot_parallel_betwe
3c60 65 6e 6e 65 73 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d enness.py""".===================
3c80 3d 0a 50 61 72 61 6c 6c 65 6c 20 42 65 74 77 65 65 6e 6e 65 73 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d =.Parallel.Betweenness.=========
3ca0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 6c 65 20 6f 66 20 70 61 72 61 6c 6c 65 6c ===========..Example.of.parallel
3cc0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 62 65 74 77 65 65 6e 6e 65 73 73 20 63 .implementation.of.betweenness.c
3ce0 65 6e 74 72 61 6c 69 74 79 20 75 73 69 6e 67 20 74 68 65 0a 6d 75 6c 74 69 70 72 6f 63 65 73 73 entrality.using.the.multiprocess
3d00 69 6e 67 20 6d 6f 64 75 6c 65 20 66 72 6f 6d 20 50 79 74 68 6f 6e 20 53 74 61 6e 64 61 72 64 20 ing.module.from.Python.Standard.
3d20 4c 69 62 72 61 72 79 2e 0a 0a 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 6e 65 Library...The.function.betweenne
3d40 73 73 20 63 65 6e 74 72 61 6c 69 74 79 20 61 63 63 65 70 74 73 20 61 20 62 75 6e 63 68 20 6f 66 ss.centrality.accepts.a.bunch.of
3d60 20 6e 6f 64 65 73 20 61 6e 64 20 63 6f 6d 70 75 74 65 73 0a 74 68 65 20 63 6f 6e 74 72 69 62 75 .nodes.and.computes.the.contribu
3d80 74 69 6f 6e 20 6f 66 20 74 68 6f 73 65 20 6e 6f 64 65 73 20 74 6f 20 74 68 65 20 62 65 74 77 65 tion.of.those.nodes.to.the.betwe
3da0 65 6e 6e 65 73 73 20 63 65 6e 74 72 61 6c 69 74 79 20 6f 66 20 74 68 65 20 77 68 6f 6c 65 0a 6e enness.centrality.of.the.whole.n
3dc0 65 74 77 6f 72 6b 2e 20 48 65 72 65 20 77 65 20 64 69 76 69 64 65 20 74 68 65 20 6e 65 74 77 6f etwork..Here.we.divide.the.netwo
3de0 72 6b 20 69 6e 20 63 68 75 6e 6b 73 20 6f 66 20 6e 6f 64 65 73 20 61 6e 64 20 77 65 20 63 6f 6d rk.in.chunks.of.nodes.and.we.com
3e00 70 75 74 65 20 74 68 65 69 72 0a 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 74 6f 20 74 68 65 20 62 pute.their.contribution.to.the.b
3e20 65 74 77 65 65 6e 6e 65 73 73 20 63 65 6e 74 72 61 6c 69 74 79 20 6f 66 20 74 68 65 20 77 68 6f etweenness.centrality.of.the.who
3e40 6c 65 20 6e 65 74 77 6f 72 6b 2e 0a 0a 4e 6f 74 65 3a 20 54 68 65 20 65 78 61 6d 70 6c 65 20 6f le.network...Note:.The.example.o
3e60 75 74 70 75 74 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 70 utput.below.shows.that.the.non-p
3e80 61 72 61 6c 6c 65 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 0a 66 61 73 74 65 72 arallel.implementation.is.faster
3ea0 2e 20 54 68 69 73 20 69 73 20 61 20 6c 69 6d 69 74 61 74 69 6f 6e 20 6f 66 20 6f 75 72 20 43 49 ..This.is.a.limitation.of.our.CI
3ec0 2f 43 44 20 70 69 70 65 6c 69 6e 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 73 69 6e 67 6c 65 /CD.pipeline.running.on.a.single
3ee0 20 63 6f 72 65 2e 0a 0a 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 79 6f 75 72 20 73 65 74 75 70 2c .core...Depending.on.your.setup,
3f00 20 79 6f 75 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 6f 62 73 65 72 76 65 20 61 20 73 70 65 65 64 .you.will.likely.observe.a.speed
3f20 75 70 2e 0a 22 22 22 0a 66 72 6f 6d 20 6d 75 6c 74 69 70 72 6f 63 65 73 73 69 6e 67 20 69 6d 70 up..""".from.multiprocessing.imp
3f40 6f 72 74 20 50 6f 6f 6c 0a 69 6d 70 6f 72 74 20 74 69 6d 65 0a 69 6d 70 6f 72 74 20 69 74 65 72 ort.Pool.import.time.import.iter
3f60 74 6f 6f 6c 73 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 tools..import.matplotlib.pyplot.
3f80 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 0a 64 as.plt.import.networkx.as.nx...d
3fa0 65 66 20 63 68 75 6e 6b 73 28 6c 2c 20 6e 29 3a 0a 20 20 20 20 22 22 22 44 69 76 69 64 65 20 61 ef.chunks(l,.n):....."""Divide.a
3fc0 20 6c 69 73 74 20 6f 66 20 6e 6f 64 65 73 20 60 6c 60 20 69 6e 20 60 6e 60 20 63 68 75 6e 6b 73 .list.of.nodes.`l`.in.`n`.chunks
3fe0 22 22 22 0a 20 20 20 20 6c 5f 63 20 3d 20 69 74 65 72 28 6c 29 0a 20 20 20 20 77 68 69 6c 65 20 """.....l_c.=.iter(l).....while.
4000 31 3a 0a 20 20 20 20 20 20 20 20 78 20 3d 20 74 75 70 6c 65 28 69 74 65 72 74 6f 6f 6c 73 2e 69 1:.........x.=.tuple(itertools.i
4020 73 6c 69 63 65 28 6c 5f 63 2c 20 6e 29 29 0a 20 20 20 20 20 20 20 20 69 66 20 6e 6f 74 20 78 3a slice(l_c,.n)).........if.not.x:
4040 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 20 79 69 65 6c .............return.........yiel
4060 64 20 78 0a 0a 0a 64 65 66 20 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 d.x...def.betweenness_centrality
4080 5f 70 61 72 61 6c 6c 65 6c 28 47 2c 20 70 72 6f 63 65 73 73 65 73 3d 4e 6f 6e 65 29 3a 0a 20 20 _parallel(G,.processes=None):...
40a0 20 20 22 22 22 50 61 72 61 6c 6c 65 6c 20 62 65 74 77 65 65 6e 6e 65 73 73 20 63 65 6e 74 72 61 .."""Parallel.betweenness.centra
40c0 6c 69 74 79 20 20 66 75 6e 63 74 69 6f 6e 22 22 22 0a 20 20 20 20 70 20 3d 20 50 6f 6f 6c 28 70 lity..function""".....p.=.Pool(p
40e0 72 6f 63 65 73 73 65 73 3d 70 72 6f 63 65 73 73 65 73 29 0a 20 20 20 20 6e 6f 64 65 5f 64 69 76 rocesses=processes).....node_div
4100 69 73 6f 72 20 3d 20 6c 65 6e 28 70 2e 5f 70 6f 6f 6c 29 20 2a 20 34 0a 20 20 20 20 6e 6f 64 65 isor.=.len(p._pool).*.4.....node
4120 5f 63 68 75 6e 6b 73 20 3d 20 6c 69 73 74 28 63 68 75 6e 6b 73 28 47 2e 6e 6f 64 65 73 28 29 2c _chunks.=.list(chunks(G.nodes(),
4140 20 47 2e 6f 72 64 65 72 28 29 20 2f 2f 20 6e 6f 64 65 5f 64 69 76 69 73 6f 72 29 29 0a 20 20 20 .G.order().//.node_divisor))....
4160 20 6e 75 6d 5f 63 68 75 6e 6b 73 20 3d 20 6c 65 6e 28 6e 6f 64 65 5f 63 68 75 6e 6b 73 29 0a 20 .num_chunks.=.len(node_chunks)..
4180 20 20 20 62 74 5f 73 63 20 3d 20 70 2e 73 74 61 72 6d 61 70 28 0a 20 20 20 20 20 20 20 20 6e 78 ...bt_sc.=.p.starmap(.........nx
41a0 2e 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 5f 73 75 62 73 65 74 2c 0a .betweenness_centrality_subset,.
41c0 20 20 20 20 20 20 20 20 7a 69 70 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 47 5d 20 2a 20 6e ........zip(.............[G].*.n
41e0 75 6d 5f 63 68 75 6e 6b 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 5f 63 68 75 6e um_chunks,.............node_chun
4200 6b 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 28 47 29 5d 20 2a 20 6e 75 6d 5f ks,.............[list(G)].*.num_
4220 63 68 75 6e 6b 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 54 72 75 65 5d 20 2a 20 6e 75 6d chunks,.............[True].*.num
4240 5f 63 68 75 6e 6b 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4e 6f 6e 65 5d 20 2a 20 6e 75 _chunks,.............[None].*.nu
4260 6d 5f 63 68 75 6e 6b 73 2c 0a 20 20 20 20 20 20 20 20 29 2c 0a 20 20 20 20 29 0a 0a 20 20 20 20 m_chunks,.........),.....)......
4280 23 20 52 65 64 75 63 65 20 74 68 65 20 70 61 72 74 69 61 6c 20 73 6f 6c 75 74 69 6f 6e 73 0a 20 #.Reduce.the.partial.solutions..
42a0 20 20 20 62 74 5f 63 20 3d 20 62 74 5f 73 63 5b 30 5d 0a 20 20 20 20 66 6f 72 20 62 74 20 69 6e ...bt_c.=.bt_sc[0].....for.bt.in
42c0 20 62 74 5f 73 63 5b 31 3a 5d 3a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 62 74 3a .bt_sc[1:]:.........for.n.in.bt:
42e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 74 5f 63 5b 6e 5d 20 2b 3d 20 62 74 5b 6e 5d 0a 20 20 .............bt_c[n].+=.bt[n]...
4300 20 20 72 65 74 75 72 6e 20 62 74 5f 63 0a 0a 0a 47 5f 62 61 20 3d 20 6e 78 2e 62 61 72 61 62 61 ..return.bt_c...G_ba.=.nx.baraba
4320 73 69 5f 61 6c 62 65 72 74 5f 67 72 61 70 68 28 31 30 30 30 2c 20 33 29 0a 47 5f 65 72 20 3d 20 si_albert_graph(1000,.3).G_er.=.
4340 6e 78 2e 67 6e 70 5f 72 61 6e 64 6f 6d 5f 67 72 61 70 68 28 31 30 30 30 2c 20 30 2e 30 31 29 0a nx.gnp_random_graph(1000,.0.01).
4360 47 5f 77 73 20 3d 20 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f 77 61 74 74 73 5f 73 74 72 6f 67 61 G_ws.=.nx.connected_watts_stroga
4380 74 7a 5f 67 72 61 70 68 28 31 30 30 30 2c 20 34 2c 20 30 2e 31 29 0a 66 6f 72 20 47 20 69 6e 20 tz_graph(1000,.4,.0.1).for.G.in.
43a0 5b 47 5f 62 61 2c 20 47 5f 65 72 2c 20 47 5f 77 73 5d 3a 0a 20 20 20 20 70 72 69 6e 74 28 22 22 [G_ba,.G_er,.G_ws]:.....print(""
43c0 29 0a 20 20 20 20 70 72 69 6e 74 28 22 43 6f 6d 70 75 74 69 6e 67 20 62 65 74 77 65 65 6e 6e 65 ).....print("Computing.betweenne
43e0 73 73 20 63 65 6e 74 72 61 6c 69 74 79 20 66 6f 72 3a 22 29 0a 20 20 20 20 70 72 69 6e 74 28 47 ss.centrality.for:").....print(G
4400 29 0a 20 20 20 20 70 72 69 6e 74 28 22 5c 74 50 61 72 61 6c 6c 65 6c 20 76 65 72 73 69 6f 6e 22 ).....print("\tParallel.version"
4420 29 0a 20 20 20 20 73 74 61 72 74 20 3d 20 74 69 6d 65 2e 74 69 6d 65 28 29 0a 20 20 20 20 62 74 ).....start.=.time.time().....bt
4440 20 3d 20 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 5f 70 61 72 61 6c 6c .=.betweenness_centrality_parall
4460 65 6c 28 47 29 0a 20 20 20 20 70 72 69 6e 74 28 66 22 5c 74 5c 74 54 69 6d 65 3a 20 7b 28 74 69 el(G).....print(f"\t\tTime:.{(ti
4480 6d 65 2e 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 29 3a 2e 34 46 7d 20 73 65 63 6f 6e 64 73 22 me.time().-.start):.4F}.seconds"
44a0 29 0a 20 20 20 20 70 72 69 6e 74 28 66 22 5c 74 5c 74 42 65 74 77 65 65 6e 6e 65 73 73 20 63 65 ).....print(f"\t\tBetweenness.ce
44c0 6e 74 72 61 6c 69 74 79 20 66 6f 72 20 6e 6f 64 65 20 30 3a 20 7b 62 74 5b 30 5d 3a 2e 35 66 7d ntrality.for.node.0:.{bt[0]:.5f}
44e0 22 29 0a 20 20 20 20 70 72 69 6e 74 28 22 5c 74 4e 6f 6e 2d 50 61 72 61 6c 6c 65 6c 20 76 65 72 ").....print("\tNon-Parallel.ver
4500 73 69 6f 6e 22 29 0a 20 20 20 20 73 74 61 72 74 20 3d 20 74 69 6d 65 2e 74 69 6d 65 28 29 0a 20 sion").....start.=.time.time()..
4520 20 20 20 62 74 20 3d 20 6e 78 2e 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 ...bt.=.nx.betweenness_centralit
4540 79 28 47 29 0a 20 20 20 20 70 72 69 6e 74 28 66 22 5c 74 5c 74 54 69 6d 65 3a 20 7b 28 74 69 6d y(G).....print(f"\t\tTime:.{(tim
4560 65 2e 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 29 3a 2e 34 46 7d 20 73 65 63 6f 6e 64 73 22 29 e.time().-.start):.4F}.seconds")
4580 0a 20 20 20 20 70 72 69 6e 74 28 66 22 5c 74 5c 74 42 65 74 77 65 65 6e 6e 65 73 73 20 63 65 6e .....print(f"\t\tBetweenness.cen
45a0 74 72 61 6c 69 74 79 20 66 6f 72 20 6e 6f 64 65 20 30 3a 20 7b 62 74 5b 30 5d 3a 2e 35 66 7d 22 trality.for.node.0:.{bt[0]:.5f}"
45c0 29 0a 70 72 69 6e 74 28 22 22 29 0a 0a 6e 78 2e 64 72 61 77 28 47 5f 62 61 2c 20 6e 6f 64 65 5f ).print("")..nx.draw(G_ba,.node_
45e0 73 69 7a 65 3d 31 30 30 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0a size=100).plt.show().PK.........
4600 7b 57 56 28 8a 4a da 4e 08 00 00 4e 08 00 00 29 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c {WV(.J.N...N...)...algorithms/pl
4620 6f 74 5f 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 2e 70 79 22 22 22 0a ot_betweenness_centrality.py""".
4640 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 42 65 74 77 65 65 6e 6e 65 ======================.Betweenne
4660 73 73 20 43 65 6e 74 72 61 6c 69 74 79 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ss.Centrality.==================
4680 3d 3d 3d 3d 0a 0a 42 65 74 77 65 65 6e 6e 65 73 73 20 63 65 6e 74 72 61 6c 69 74 79 20 6d 65 61 ====..Betweenness.centrality.mea
46a0 73 75 72 65 73 20 6f 66 20 70 6f 73 69 74 69 76 65 20 67 65 6e 65 20 66 75 6e 63 74 69 6f 6e 61 sures.of.positive.gene.functiona
46c0 6c 20 61 73 73 6f 63 69 61 74 69 6f 6e 73 0a 75 73 69 6e 67 20 57 6f 72 6d 4e 65 74 20 76 2e 33 l.associations.using.WormNet.v.3
46e0 2d 47 53 2e 0a 0a 44 61 74 61 20 66 72 6f 6d 3a 20 68 74 74 70 73 3a 2f 2f 77 77 77 2e 69 6e 65 -GS...Data.from:.https://www.ine
4700 74 62 69 6f 2e 6f 72 67 2f 77 6f 72 6d 6e 65 74 2f 64 6f 77 6e 6c 6f 61 64 6e 65 74 77 6f 72 6b tbio.org/wormnet/downloadnetwork
4720 2e 70 68 70 0a 22 22 22 0a 0a 66 72 6f 6d 20 72 61 6e 64 6f 6d 20 69 6d 70 6f 72 74 20 73 61 6d .php."""..from.random.import.sam
4740 70 6c 65 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 ple.import.networkx.as.nx.import
4760 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 0a 23 20 47 6f 6c .matplotlib.pyplot.as.plt..#.Gol
4780 64 20 73 74 61 6e 64 61 72 64 20 64 61 74 61 20 6f 66 20 70 6f 73 69 74 69 76 65 20 67 65 6e 65 d.standard.data.of.positive.gene
47a0 20 66 75 6e 63 74 69 6f 6e 61 6c 20 61 73 73 6f 63 69 61 74 69 6f 6e 73 0a 23 20 66 72 6f 6d 20 .functional.associations.#.from.
47c0 68 74 74 70 73 3a 2f 2f 77 77 77 2e 69 6e 65 74 62 69 6f 2e 6f 72 67 2f 77 6f 72 6d 6e 65 74 2f https://www.inetbio.org/wormnet/
47e0 64 6f 77 6e 6c 6f 61 64 6e 65 74 77 6f 72 6b 2e 70 68 70 0a 47 20 3d 20 6e 78 2e 72 65 61 64 5f downloadnetwork.php.G.=.nx.read_
4800 65 64 67 65 6c 69 73 74 28 22 57 6f 72 6d 4e 65 74 2e 76 33 2e 62 65 6e 63 68 6d 61 72 6b 2e 74 edgelist("WormNet.v3.benchmark.t
4820 78 74 22 29 0a 0a 23 20 72 65 6d 6f 76 65 20 72 61 6e 64 6f 6d 6c 79 20 73 65 6c 65 63 74 65 64 xt")..#.remove.randomly.selected
4840 20 6e 6f 64 65 73 20 28 74 6f 20 6d 61 6b 65 20 65 78 61 6d 70 6c 65 20 66 61 73 74 29 0a 6e 75 .nodes.(to.make.example.fast).nu
4860 6d 5f 74 6f 5f 72 65 6d 6f 76 65 20 3d 20 69 6e 74 28 6c 65 6e 28 47 29 20 2f 20 31 2e 35 29 0a m_to_remove.=.int(len(G)./.1.5).
4880 6e 6f 64 65 73 20 3d 20 73 61 6d 70 6c 65 28 6c 69 73 74 28 47 2e 6e 6f 64 65 73 29 2c 20 6e 75 nodes.=.sample(list(G.nodes),.nu
48a0 6d 5f 74 6f 5f 72 65 6d 6f 76 65 29 0a 47 2e 72 65 6d 6f 76 65 5f 6e 6f 64 65 73 5f 66 72 6f 6d m_to_remove).G.remove_nodes_from
48c0 28 6e 6f 64 65 73 29 0a 0a 23 20 72 65 6d 6f 76 65 20 6c 6f 77 2d 64 65 67 72 65 65 20 6e 6f 64 (nodes)..#.remove.low-degree.nod
48e0 65 73 0a 6c 6f 77 5f 64 65 67 72 65 65 20 3d 20 5b 6e 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 47 es.low_degree.=.[n.for.n,.d.in.G
4900 2e 64 65 67 72 65 65 28 29 20 69 66 20 64 20 3c 20 31 30 5d 0a 47 2e 72 65 6d 6f 76 65 5f 6e 6f .degree().if.d.<.10].G.remove_no
4920 64 65 73 5f 66 72 6f 6d 28 6c 6f 77 5f 64 65 67 72 65 65 29 0a 0a 23 20 6c 61 72 67 65 73 74 20 des_from(low_degree)..#.largest.
4940 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 0a 63 6f 6d 70 6f 6e 65 6e 74 73 20 3d connected.component.components.=
4960 20 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 0a 6c 61 72 67 .nx.connected_components(G).larg
4980 65 73 74 5f 63 6f 6d 70 6f 6e 65 6e 74 20 3d 20 6d 61 78 28 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 est_component.=.max(components,.
49a0 6b 65 79 3d 6c 65 6e 29 0a 48 20 3d 20 47 2e 73 75 62 67 72 61 70 68 28 6c 61 72 67 65 73 74 5f key=len).H.=.G.subgraph(largest_
49c0 63 6f 6d 70 6f 6e 65 6e 74 29 0a 0a 23 20 63 6f 6d 70 75 74 65 20 63 65 6e 74 72 61 6c 69 74 79 component)..#.compute.centrality
49e0 0a 63 65 6e 74 72 61 6c 69 74 79 20 3d 20 6e 78 2e 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e .centrality.=.nx.betweenness_cen
4a00 74 72 61 6c 69 74 79 28 48 2c 20 6b 3d 31 30 2c 20 65 6e 64 70 6f 69 6e 74 73 3d 54 72 75 65 29 trality(H,.k=10,.endpoints=True)
4a20 0a 0a 23 20 63 6f 6d 70 75 74 65 20 63 6f 6d 6d 75 6e 69 74 79 20 73 74 72 75 63 74 75 72 65 0a ..#.compute.community.structure.
4a40 6c 70 63 20 3d 20 6e 78 2e 63 6f 6d 6d 75 6e 69 74 79 2e 6c 61 62 65 6c 5f 70 72 6f 70 61 67 61 lpc.=.nx.community.label_propaga
4a60 74 69 6f 6e 5f 63 6f 6d 6d 75 6e 69 74 69 65 73 28 48 29 0a 63 6f 6d 6d 75 6e 69 74 79 5f 69 6e tion_communities(H).community_in
4a80 64 65 78 20 3d 20 7b 6e 3a 20 69 20 66 6f 72 20 69 2c 20 63 6f 6d 20 69 6e 20 65 6e 75 6d 65 72 dex.=.{n:.i.for.i,.com.in.enumer
4aa0 61 74 65 28 6c 70 63 29 20 66 6f 72 20 6e 20 69 6e 20 63 6f 6d 7d 0a 0a 23 23 23 23 20 64 72 61 ate(lpc).for.n.in.com}..####.dra
4ac0 77 20 67 72 61 70 68 20 23 23 23 23 0a 66 69 67 2c 20 61 78 20 3d 20 70 6c 74 2e 73 75 62 70 6c w.graph.####.fig,.ax.=.plt.subpl
4ae0 6f 74 73 28 66 69 67 73 69 7a 65 3d 28 32 30 2c 20 31 35 29 29 0a 70 6f 73 20 3d 20 6e 78 2e 73 ots(figsize=(20,.15)).pos.=.nx.s
4b00 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 48 2c 20 6b 3d 30 2e 31 35 2c 20 73 65 65 64 3d 34 35 37 pring_layout(H,.k=0.15,.seed=457
4b20 32 33 32 31 29 0a 6e 6f 64 65 5f 63 6f 6c 6f 72 20 3d 20 5b 63 6f 6d 6d 75 6e 69 74 79 5f 69 6e 2321).node_color.=.[community_in
4b40 64 65 78 5b 6e 5d 20 66 6f 72 20 6e 20 69 6e 20 48 5d 0a 6e 6f 64 65 5f 73 69 7a 65 20 3d 20 5b dex[n].for.n.in.H].node_size.=.[
4b60 76 20 2a 20 32 30 30 30 30 20 66 6f 72 20 76 20 69 6e 20 63 65 6e 74 72 61 6c 69 74 79 2e 76 61 v.*.20000.for.v.in.centrality.va
4b80 6c 75 65 73 28 29 5d 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 0a 20 20 20 20 48 2c lues()].nx.draw_networkx(.....H,
4ba0 0a 20 20 20 20 70 6f 73 3d 70 6f 73 2c 0a 20 20 20 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 .....pos=pos,.....with_labels=Fa
4bc0 6c 73 65 2c 0a 20 20 20 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c 6f 72 2c 0a lse,.....node_color=node_color,.
4be0 20 20 20 20 6e 6f 64 65 5f 73 69 7a 65 3d 6e 6f 64 65 5f 73 69 7a 65 2c 0a 20 20 20 20 65 64 67 ....node_size=node_size,.....edg
4c00 65 5f 63 6f 6c 6f 72 3d 22 67 61 69 6e 73 62 6f 72 6f 22 2c 0a 20 20 20 20 61 6c 70 68 61 3d 30 e_color="gainsboro",.....alpha=0
4c20 2e 34 2c 0a 29 0a 0a 23 20 54 69 74 6c 65 2f 6c 65 67 65 6e 64 0a 66 6f 6e 74 20 3d 20 7b 22 63 .4,.)..#.Title/legend.font.=.{"c
4c40 6f 6c 6f 72 22 3a 20 22 6b 22 2c 20 22 66 6f 6e 74 77 65 69 67 68 74 22 3a 20 22 62 6f 6c 64 22 olor":."k",."fontweight":."bold"
4c60 2c 20 22 66 6f 6e 74 73 69 7a 65 22 3a 20 32 30 7d 0a 61 78 2e 73 65 74 5f 74 69 74 6c 65 28 22 ,."fontsize":.20}.ax.set_title("
4c80 47 65 6e 65 20 66 75 6e 63 74 69 6f 6e 61 6c 20 61 73 73 6f 63 69 61 74 69 6f 6e 20 6e 65 74 77 Gene.functional.association.netw
4ca0 6f 72 6b 20 28 43 2e 20 65 6c 65 67 61 6e 73 29 22 2c 20 66 6f 6e 74 29 0a 23 20 43 68 61 6e 67 ork.(C..elegans)",.font).#.Chang
4cc0 65 20 66 6f 6e 74 20 63 6f 6c 6f 72 20 66 6f 72 20 6c 65 67 65 6e 64 0a 66 6f 6e 74 5b 22 63 6f e.font.color.for.legend.font["co
4ce0 6c 6f 72 22 5d 20 3d 20 22 72 22 0a 0a 61 78 2e 74 65 78 74 28 0a 20 20 20 20 30 2e 38 30 2c 0a lor"].=."r"..ax.text(.....0.80,.
4d00 20 20 20 20 30 2e 31 30 2c 0a 20 20 20 20 22 6e 6f 64 65 20 63 6f 6c 6f 72 20 3d 20 63 6f 6d 6d ....0.10,....."node.color.=.comm
4d20 75 6e 69 74 79 20 73 74 72 75 63 74 75 72 65 22 2c 0a 20 20 20 20 68 6f 72 69 7a 6f 6e 74 61 6c unity.structure",.....horizontal
4d40 61 6c 69 67 6e 6d 65 6e 74 3d 22 63 65 6e 74 65 72 22 2c 0a 20 20 20 20 74 72 61 6e 73 66 6f 72 alignment="center",.....transfor
4d60 6d 3d 61 78 2e 74 72 61 6e 73 41 78 65 73 2c 0a 20 20 20 20 66 6f 6e 74 64 69 63 74 3d 66 6f 6e m=ax.transAxes,.....fontdict=fon
4d80 74 2c 0a 29 0a 61 78 2e 74 65 78 74 28 0a 20 20 20 20 30 2e 38 30 2c 0a 20 20 20 20 30 2e 30 36 t,.).ax.text(.....0.80,.....0.06
4da0 2c 0a 20 20 20 20 22 6e 6f 64 65 20 73 69 7a 65 20 3d 20 62 65 74 77 65 65 6e 6e 65 73 73 20 63 ,....."node.size.=.betweenness.c
4dc0 65 6e 74 72 61 6c 69 74 79 22 2c 0a 20 20 20 20 68 6f 72 69 7a 6f 6e 74 61 6c 61 6c 69 67 6e 6d entrality",.....horizontalalignm
4de0 65 6e 74 3d 22 63 65 6e 74 65 72 22 2c 0a 20 20 20 20 74 72 61 6e 73 66 6f 72 6d 3d 61 78 2e 74 ent="center",.....transform=ax.t
4e00 72 61 6e 73 41 78 65 73 2c 0a 20 20 20 20 66 6f 6e 74 64 69 63 74 3d 66 6f 6e 74 2c 0a 29 0a 0a ransAxes,.....fontdict=font,.)..
4e20 23 20 52 65 73 69 7a 65 20 66 69 67 75 72 65 20 66 6f 72 20 6c 61 62 65 6c 20 72 65 61 64 61 62 #.Resize.figure.for.label.readab
4e40 69 6c 69 74 79 0a 61 78 2e 6d 61 72 67 69 6e 73 28 30 2e 31 2c 20 30 2e 30 35 29 0a 66 69 67 2e ility.ax.margins(0.1,.0.05).fig.
4e60 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 tight_layout().plt.axis("off").p
4e80 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0e 7b 57 56 1c 5a 38 01 a9 04 00 00 lt.show().PK.........{WV.Z8.....
4ea0 a9 04 00 00 1d 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 64 61 76 69 73 5f 63 6c ........algorithms/plot_davis_cl
4ec0 75 62 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 44 61 76 69 73 20 43 6c 75 62 0a 3d ub.py""".==========.Davis.Club.=
4ee0 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 44 61 76 69 73 20 53 6f 75 74 68 65 72 6e 20 43 6c 75 62 20 57 =========..Davis.Southern.Club.W
4f00 6f 6d 65 6e 0a 0a 53 68 6f 77 73 20 68 6f 77 20 74 6f 20 6d 61 6b 65 20 75 6e 69 70 61 72 74 69 omen..Shows.how.to.make.uniparti
4f20 74 65 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 67 72 61 70 68 20 61 6e 64 20 te.projections.of.the.graph.and.
4f40 63 6f 6d 70 75 74 65 20 74 68 65 0a 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 74 68 6f 73 65 20 compute.the.properties.of.those.
4f60 67 72 61 70 68 73 2e 0a 0a 54 68 65 73 65 20 64 61 74 61 20 77 65 72 65 20 63 6f 6c 6c 65 63 74 graphs...These.data.were.collect
4f80 65 64 20 62 79 20 44 61 76 69 73 20 65 74 20 61 6c 2e 20 69 6e 20 74 68 65 20 31 39 33 30 73 2e ed.by.Davis.et.al..in.the.1930s.
4fa0 0a 54 68 65 79 20 72 65 70 72 65 73 65 6e 74 20 6f 62 73 65 72 76 65 64 20 61 74 74 65 6e 64 61 .They.represent.observed.attenda
4fc0 6e 63 65 20 61 74 20 31 34 20 73 6f 63 69 61 6c 20 65 76 65 6e 74 73 20 62 79 20 31 38 20 53 6f nce.at.14.social.events.by.18.So
4fe0 75 74 68 65 72 6e 20 77 6f 6d 65 6e 2e 0a 54 68 65 20 67 72 61 70 68 20 69 73 20 62 69 70 61 72 uthern.women..The.graph.is.bipar
5000 74 69 74 65 20 28 63 6c 75 62 73 2c 20 77 6f 6d 65 6e 29 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 tite.(clubs,.women)..""".import.
5020 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 matplotlib.pyplot.as.plt.import.
5040 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 66 72 6f 6d 20 6e 65 74 77 6f 72 6b 78 2e 61 6c 67 networkx.as.nx.from.networkx.alg
5060 6f 72 69 74 68 6d 73 20 69 6d 70 6f 72 74 20 62 69 70 61 72 74 69 74 65 0a 0a 47 20 3d 20 6e 78 orithms.import.bipartite..G.=.nx
5080 2e 64 61 76 69 73 5f 73 6f 75 74 68 65 72 6e 5f 77 6f 6d 65 6e 5f 67 72 61 70 68 28 29 0a 77 6f .davis_southern_women_graph().wo
50a0 6d 65 6e 20 3d 20 47 2e 67 72 61 70 68 5b 22 74 6f 70 22 5d 0a 63 6c 75 62 73 20 3d 20 47 2e 67 men.=.G.graph["top"].clubs.=.G.g
50c0 72 61 70 68 5b 22 62 6f 74 74 6f 6d 22 5d 0a 0a 70 72 69 6e 74 28 22 42 69 61 64 6a 61 63 65 6e raph["bottom"]..print("Biadjacen
50e0 63 79 20 6d 61 74 72 69 78 22 29 0a 70 72 69 6e 74 28 62 69 70 61 72 74 69 74 65 2e 62 69 61 64 cy.matrix").print(bipartite.biad
5100 6a 61 63 65 6e 63 79 5f 6d 61 74 72 69 78 28 47 2c 20 77 6f 6d 65 6e 2c 20 63 6c 75 62 73 29 29 jacency_matrix(G,.women,.clubs))
5120 0a 0a 23 20 70 72 6f 6a 65 63 74 20 62 69 70 61 72 74 69 74 65 20 67 72 61 70 68 20 6f 6e 74 6f ..#.project.bipartite.graph.onto
5140 20 77 6f 6d 65 6e 20 6e 6f 64 65 73 0a 57 20 3d 20 62 69 70 61 72 74 69 74 65 2e 70 72 6f 6a 65 .women.nodes.W.=.bipartite.proje
5160 63 74 65 64 5f 67 72 61 70 68 28 47 2c 20 77 6f 6d 65 6e 29 0a 70 72 69 6e 74 28 29 0a 70 72 69 cted_graph(G,.women).print().pri
5180 6e 74 28 22 23 46 72 69 65 6e 64 73 2c 20 4d 65 6d 62 65 72 22 29 0a 66 6f 72 20 77 20 69 6e 20 nt("#Friends,.Member").for.w.in.
51a0 77 6f 6d 65 6e 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 57 2e 64 65 67 72 65 65 28 77 29 7d women:.....print(f"{W.degree(w)}
51c0 20 7b 77 7d 22 29 0a 0a 23 20 70 72 6f 6a 65 63 74 20 62 69 70 61 72 74 69 74 65 20 67 72 61 70 .{w}")..#.project.bipartite.grap
51e0 68 20 6f 6e 74 6f 20 77 6f 6d 65 6e 20 6e 6f 64 65 73 20 6b 65 65 70 69 6e 67 20 6e 75 6d 62 65 h.onto.women.nodes.keeping.numbe
5200 72 20 6f 66 20 63 6f 2d 6f 63 63 75 72 65 6e 63 65 0a 23 20 74 68 65 20 64 65 67 72 65 65 20 63 r.of.co-occurence.#.the.degree.c
5220 6f 6d 70 75 74 65 64 20 69 73 20 77 65 69 67 68 74 65 64 20 61 6e 64 20 63 6f 75 6e 74 73 20 74 omputed.is.weighted.and.counts.t
5240 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 73 68 61 72 65 64 20 63 6f 6e 74 61 63 he.total.number.of.shared.contac
5260 74 73 0a 57 20 3d 20 62 69 70 61 72 74 69 74 65 2e 77 65 69 67 68 74 65 64 5f 70 72 6f 6a 65 63 ts.W.=.bipartite.weighted_projec
5280 74 65 64 5f 67 72 61 70 68 28 47 2c 20 77 6f 6d 65 6e 29 0a 70 72 69 6e 74 28 29 0a 70 72 69 6e ted_graph(G,.women).print().prin
52a0 74 28 22 23 46 72 69 65 6e 64 20 6d 65 65 74 69 6e 67 73 2c 20 4d 65 6d 62 65 72 22 29 0a 66 6f t("#Friend.meetings,.Member").fo
52c0 72 20 77 20 69 6e 20 77 6f 6d 65 6e 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 57 2e 64 65 67 r.w.in.women:.....print(f"{W.deg
52e0 72 65 65 28 77 2c 20 77 65 69 67 68 74 3d 27 77 65 69 67 68 74 27 29 7d 20 7b 77 7d 22 29 0a 0a ree(w,.weight='weight')}.{w}")..
5300 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 36 pos.=.nx.spring_layout(G,.seed=6
5320 34 38 29 20 20 23 20 53 65 65 64 20 6c 61 79 6f 75 74 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 48)..#.Seed.layout.for.reproduci
5340 62 6c 65 20 6e 6f 64 65 20 70 6f 73 69 74 69 6f 6e 73 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f ble.node.positions.nx.draw(G,.po
5360 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0d 7b 57 56 39 4e 07 68 s).plt.show().PK.........{WV9N.h
5380 a8 0d 00 00 a8 0d 00 00 1b 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 63 69 72 63 ............algorithms/plot_circ
53a0 75 69 74 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 0a 43 69 72 63 75 69 74 73 0a 3d 3d 3d uits.py""".========.Circuits.===
53c0 3d 3d 3d 3d 3d 0a 0a 43 6f 6e 76 65 72 74 20 61 20 42 6f 6f 6c 65 61 6e 20 63 69 72 63 75 69 74 =====..Convert.a.Boolean.circuit
53e0 20 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 42 6f 6f 6c 65 61 6e 20 66 6f 72 6d 75 6c .to.an.equivalent.Boolean.formul
5400 61 2e 0a 0a 41 20 42 6f 6f 6c 65 61 6e 20 63 69 72 63 75 69 74 20 63 61 6e 20 62 65 20 65 78 70 a...A.Boolean.circuit.can.be.exp
5420 6f 6e 65 6e 74 69 61 6c 6c 79 20 6d 6f 72 65 20 65 78 70 72 65 73 73 69 76 65 20 74 68 61 6e 20 onentially.more.expressive.than.
5440 61 6e 0a 65 71 75 69 76 61 6c 65 6e 74 20 66 6f 72 6d 75 6c 61 20 69 6e 20 74 68 65 20 77 6f 72 an.equivalent.formula.in.the.wor
5460 73 74 20 63 61 73 65 2c 20 73 69 6e 63 65 20 74 68 65 20 63 69 72 63 75 69 74 20 63 61 6e 20 72 st.case,.since.the.circuit.can.r
5480 65 75 73 65 0a 73 75 62 63 69 72 63 75 69 74 73 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2c euse.subcircuits.multiple.times,
54a0 20 77 68 65 72 65 61 73 20 61 20 66 6f 72 6d 75 6c 61 20 63 61 6e 6e 6f 74 20 72 65 75 73 65 20 .whereas.a.formula.cannot.reuse.
54c0 73 75 62 66 6f 72 6d 75 6c 61 73 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 2e 20 54 68 75 73 subformulas.more.than.once..Thus
54e0 20 63 72 65 61 74 69 6e 67 20 61 20 42 6f 6f 6c 65 61 6e 20 66 6f 72 6d 75 6c 61 20 66 72 6f 6d .creating.a.Boolean.formula.from
5500 20 61 20 42 6f 6f 6c 65 61 6e 20 63 69 72 63 75 69 74 0a 69 6e 20 74 68 69 73 20 77 61 79 20 6d .a.Boolean.circuit.in.this.way.m
5520 61 79 20 62 65 20 69 6e 66 65 61 73 69 62 6c 65 20 69 66 20 74 68 65 20 63 69 72 63 75 69 74 20 ay.be.infeasible.if.the.circuit.
5540 69 73 20 6c 61 72 67 65 2e 0a 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 is.large...""".import.matplotlib
5560 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 .pyplot.as.plt.import.networkx.a
5580 73 20 6e 78 0a 0a 0a 64 65 66 20 63 69 72 63 75 69 74 5f 74 6f 5f 66 6f 72 6d 75 6c 61 28 63 69 s.nx...def.circuit_to_formula(ci
55a0 72 63 75 69 74 29 3a 0a 20 20 20 20 23 20 43 6f 6e 76 65 72 74 20 74 68 65 20 63 69 72 63 75 69 rcuit):.....#.Convert.the.circui
55c0 74 20 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 66 6f 72 6d 75 6c 61 2e 0a 20 20 20 20 t.to.an.equivalent.formula......
55e0 66 6f 72 6d 75 6c 61 20 3d 20 6e 78 2e 64 61 67 5f 74 6f 5f 62 72 61 6e 63 68 69 6e 67 28 63 69 formula.=.nx.dag_to_branching(ci
5600 72 63 75 69 74 29 0a 20 20 20 20 23 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 6f 70 65 72 61 74 rcuit).....#.Transfer.the.operat
5620 6f 72 20 6f 72 20 76 61 72 69 61 62 6c 65 20 6c 61 62 65 6c 73 20 66 6f 72 20 65 61 63 68 20 6e or.or.variable.labels.for.each.n
5640 6f 64 65 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 23 20 63 69 72 63 75 69 74 20 74 6f 20 74 68 ode.from.the.....#.circuit.to.th
5660 65 20 66 6f 72 6d 75 6c 61 2e 0a 20 20 20 20 66 6f 72 20 76 20 69 6e 20 66 6f 72 6d 75 6c 61 3a e.formula......for.v.in.formula:
5680 0a 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 20 3d 20 66 6f 72 6d 75 6c 61 2e 6e 6f 64 65 73 5b .........source.=.formula.nodes[
56a0 76 5d 5b 22 73 6f 75 72 63 65 22 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 6d 75 6c 61 2e 6e 6f 64 v]["source"].........formula.nod
56c0 65 73 5b 76 5d 5b 22 6c 61 62 65 6c 22 5d 20 3d 20 63 69 72 63 75 69 74 2e 6e 6f 64 65 73 5b 73 es[v]["label"].=.circuit.nodes[s
56e0 6f 75 72 63 65 5d 5b 22 6c 61 62 65 6c 22 5d 0a 20 20 20 20 72 65 74 75 72 6e 20 66 6f 72 6d 75 ource]["label"].....return.formu
5700 6c 61 0a 0a 0a 64 65 66 20 66 6f 72 6d 75 6c 61 5f 74 6f 5f 73 74 72 69 6e 67 28 66 6f 72 6d 75 la...def.formula_to_string(formu
5720 6c 61 29 3a 0a 20 20 20 20 64 65 66 20 5f 74 6f 5f 73 74 72 69 6e 67 28 66 6f 72 6d 75 6c 61 2c la):.....def._to_string(formula,
5740 20 72 6f 6f 74 29 3a 0a 20 20 20 20 20 20 20 20 23 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e .root):.........#.If.there.are.n
5760 6f 20 63 68 69 6c 64 72 65 6e 2c 20 74 68 69 73 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 6e o.children,.this.is.a.variable.n
5780 6f 64 65 2e 0a 20 20 20 20 20 20 20 20 6c 61 62 65 6c 20 3d 20 66 6f 72 6d 75 6c 61 2e 6e 6f 64 ode..........label.=.formula.nod
57a0 65 73 5b 72 6f 6f 74 5d 5b 22 6c 61 62 65 6c 22 5d 0a 20 20 20 20 20 20 20 20 69 66 20 6e 6f 74 es[root]["label"].........if.not
57c0 20 66 6f 72 6d 75 6c 61 5b 72 6f 6f 74 5d 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .formula[root]:.............retu
57e0 72 6e 20 6c 61 62 65 6c 0a 20 20 20 20 20 20 20 20 23 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 rn.label.........#.Otherwise,.th
5800 69 73 20 69 73 20 61 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 20 20 20 20 20 20 63 68 69 6c 64 is.is.an.operator..........child
5820 72 65 6e 20 3d 20 66 6f 72 6d 75 6c 61 5b 72 6f 6f 74 5d 0a 20 20 20 20 20 20 20 20 23 20 49 66 ren.=.formula[root].........#.If
5840 20 6f 6e 65 20 63 68 69 6c 64 2c 20 74 68 65 20 6c 61 62 65 6c 20 6d 75 73 74 20 62 65 20 61 20 .one.child,.the.label.must.be.a.
5860 4e 4f 54 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 20 20 20 20 20 20 69 66 20 6c 65 6e 28 63 68 69 NOT.operator..........if.len(chi
5880 6c 64 72 65 6e 29 20 3d 3d 20 31 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 69 6c 64 20 3d ldren).==.1:.............child.=
58a0 20 6e 78 2e 75 74 69 6c 73 2e 61 72 62 69 74 72 61 72 79 5f 65 6c 65 6d 65 6e 74 28 63 68 69 6c .nx.utils.arbitrary_element(chil
58c0 64 72 65 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 22 7b 6c 61 62 65 dren).............return.f"{labe
58e0 6c 7d 28 7b 5f 74 6f 5f 73 74 72 69 6e 67 28 66 6f 72 6d 75 6c 61 2c 20 63 68 69 6c 64 29 7d 29 l}({_to_string(formula,.child)})
5900 22 0a 20 20 20 20 20 20 20 20 23 20 4e 42 20 22 6c 65 66 74 22 20 61 6e 64 20 22 72 69 67 68 74 ".........#.NB."left".and."right
5920 22 20 68 65 72 65 20 61 72 65 20 61 20 6c 69 74 74 6c 65 20 6d 69 73 6c 65 61 64 69 6e 67 3a 20 ".here.are.a.little.misleading:.
5940 74 68 65 72 65 20 69 73 0a 20 20 20 20 20 20 20 20 23 20 6e 6f 20 6f 72 64 65 72 20 6f 6e 20 74 there.is.........#.no.order.on.t
5960 68 65 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 20 6e 6f 64 65 2e 20 54 68 61 74 27 73 20 6f 6b he.children.of.a.node..That's.ok
5980 61 79 20 62 65 63 61 75 73 65 20 74 68 65 0a 20 20 20 20 20 20 20 20 23 20 42 6f 6f 6c 65 61 6e ay.because.the.........#.Boolean
59a0 20 41 4e 44 20 61 6e 64 20 4f 52 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 73 79 6d 6d 65 74 .AND.and.OR.operators.are.symmet
59c0 72 69 63 2e 20 49 74 20 6a 75 73 74 20 6d 65 61 6e 73 20 74 68 61 74 0a 20 20 20 20 20 20 20 20 ric..It.just.means.that.........
59e0 23 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 63 61 6e 6e #.the.order.of.the.operands.cann
5a00 6f 74 20 62 65 20 70 72 65 64 69 63 74 65 64 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 0a 20 20 ot.be.predicted.and.hence.the...
5a20 20 20 20 20 20 20 23 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6e 65 63 65 73 73 ......#.function.does.not.necess
5a40 61 72 69 6c 79 20 62 65 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 6f 6e 20 65 76 65 arily.behave.the.same.way.on.eve
5a60 72 79 0a 20 20 20 20 20 20 20 20 23 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 20 ry.........#.invocation.........
5a80 20 6c 65 66 74 2c 20 72 69 67 68 74 20 3d 20 66 6f 72 6d 75 6c 61 5b 72 6f 6f 74 5d 0a 20 20 20 .left,.right.=.formula[root]....
5aa0 20 20 20 20 20 6c 65 66 74 5f 73 75 62 66 6f 72 6d 75 6c 61 20 3d 20 5f 74 6f 5f 73 74 72 69 6e .....left_subformula.=._to_strin
5ac0 67 28 66 6f 72 6d 75 6c 61 2c 20 6c 65 66 74 29 0a 20 20 20 20 20 20 20 20 72 69 67 68 74 5f 73 g(formula,.left).........right_s
5ae0 75 62 66 6f 72 6d 75 6c 61 20 3d 20 5f 74 6f 5f 73 74 72 69 6e 67 28 66 6f 72 6d 75 6c 61 2c 20 ubformula.=._to_string(formula,.
5b00 72 69 67 68 74 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 22 28 7b 6c 65 66 74 5f 73 right).........return.f"({left_s
5b20 75 62 66 6f 72 6d 75 6c 61 7d 20 7b 6c 61 62 65 6c 7d 20 7b 72 69 67 68 74 5f 73 75 62 66 6f 72 ubformula}.{label}.{right_subfor
5b40 6d 75 6c 61 7d 29 22 0a 0a 20 20 20 20 72 6f 6f 74 20 3d 20 6e 65 78 74 28 76 20 66 6f 72 20 76 mula})"......root.=.next(v.for.v
5b60 2c 20 64 20 69 6e 20 66 6f 72 6d 75 6c 61 2e 69 6e 5f 64 65 67 72 65 65 28 29 20 69 66 20 64 20 ,.d.in.formula.in_degree().if.d.
5b80 3d 3d 20 30 29 0a 20 20 20 20 72 65 74 75 72 6e 20 5f 74 6f 5f 73 74 72 69 6e 67 28 66 6f 72 6d ==.0).....return._to_string(form
5ba0 75 6c 61 2c 20 72 6f 6f 74 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ula,.root)...###################
5bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 ############################.#.C
5c00 72 65 61 74 65 20 61 6e 20 65 78 61 6d 70 6c 65 20 42 6f 6f 6c 65 61 6e 20 63 69 72 63 75 69 74 reate.an.example.Boolean.circuit
5c20 2e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#.----------------------------
5c40 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 54 68 69 73 20 63 69 72 63 75 69 74 20 68 61 73 20 61 20 e2 88 ------.#.#.This.circuit.has.a...
5c60 a7 20 61 74 20 74 68 65 20 6f 75 74 70 75 74 20 61 6e 64 20 74 77 6f 20 e2 88 a8 73 20 61 74 20 ..at.the.output.and.two....s.at.
5c80 74 68 65 20 6e 65 78 74 20 6c 61 79 65 72 2e 0a 23 20 54 68 65 20 74 68 69 72 64 20 6c 61 79 65 the.next.layer..#.The.third.laye
5ca0 72 20 68 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 78 20 74 68 61 74 20 61 70 70 65 61 72 73 20 r.has.a.variable.x.that.appears.
5cc0 69 6e 20 74 68 65 20 6c 65 66 74 20 e2 88 a8 2c 20 61 0a 23 20 76 61 72 69 61 62 6c 65 20 79 20 in.the.left....,.a.#.variable.y.
5ce0 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e that.appears.in.both.the.left.an
5d00 64 20 72 69 67 68 74 20 e2 88 a8 73 2c 20 61 6e 64 20 61 0a 23 20 6e 65 67 61 74 69 6f 6e 20 66 d.right....s,.and.a.#.negation.f
5d20 6f 72 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 7a 20 74 68 61 74 20 61 70 70 65 61 72 73 20 61 or.the.variable.z.that.appears.a
5d40 73 20 74 68 65 20 73 6f 6c 65 20 6e 6f 64 65 20 69 6e 20 74 68 65 0a 23 20 66 6f 75 72 74 68 20 s.the.sole.node.in.the.#.fourth.
5d60 6c 61 79 65 72 2e 0a 63 69 72 63 75 69 74 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 0a 23 20 layer..circuit.=.nx.DiGraph().#.
5d80 4c 61 79 65 72 20 30 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 6e 6f 64 65 28 30 2c 20 6c 61 62 65 Layer.0.circuit.add_node(0,.labe
5da0 6c 3d 22 e2 88 a7 22 2c 20 6c 61 79 65 72 3d 30 29 0a 23 20 4c 61 79 65 72 20 31 0a 63 69 72 63 l="...",.layer=0).#.Layer.1.circ
5dc0 75 69 74 2e 61 64 64 5f 6e 6f 64 65 28 31 2c 20 6c 61 62 65 6c 3d 22 e2 88 a8 22 2c 20 6c 61 79 uit.add_node(1,.label="...",.lay
5de0 65 72 3d 31 29 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 6e 6f 64 65 28 32 2c 20 6c 61 62 65 6c 3d er=1).circuit.add_node(2,.label=
5e00 22 e2 88 a8 22 2c 20 6c 61 79 65 72 3d 31 29 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 65 64 67 65 "...",.layer=1).circuit.add_edge
5e20 28 30 2c 20 31 29 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 65 64 67 65 28 30 2c 20 32 29 0a 23 20 (0,.1).circuit.add_edge(0,.2).#.
5e40 4c 61 79 65 72 20 32 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 6e 6f 64 65 28 33 2c 20 6c 61 62 65 Layer.2.circuit.add_node(3,.labe
5e60 6c 3d 22 78 22 2c 20 6c 61 79 65 72 3d 32 29 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 6e 6f 64 65 l="x",.layer=2).circuit.add_node
5e80 28 34 2c 20 6c 61 62 65 6c 3d 22 79 22 2c 20 6c 61 79 65 72 3d 32 29 0a 63 69 72 63 75 69 74 2e (4,.label="y",.layer=2).circuit.
5ea0 61 64 64 5f 6e 6f 64 65 28 35 2c 20 6c 61 62 65 6c 3d 22 c2 ac 22 2c 20 6c 61 79 65 72 3d 32 29 add_node(5,.label="..",.layer=2)
5ec0 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 65 64 67 65 28 31 2c 20 33 29 0a 63 69 72 63 75 69 74 2e .circuit.add_edge(1,.3).circuit.
5ee0 61 64 64 5f 65 64 67 65 28 31 2c 20 34 29 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 65 64 67 65 28 add_edge(1,.4).circuit.add_edge(
5f00 32 2c 20 34 29 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 65 64 67 65 28 32 2c 20 35 29 0a 23 20 4c 2,.4).circuit.add_edge(2,.5).#.L
5f20 61 79 65 72 20 33 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 6e 6f 64 65 28 36 2c 20 6c 61 62 65 6c ayer.3.circuit.add_node(6,.label
5f40 3d 22 7a 22 2c 20 6c 61 79 65 72 3d 33 29 0a 63 69 72 63 75 69 74 2e 61 64 64 5f 65 64 67 65 28 ="z",.layer=3).circuit.add_edge(
5f60 35 2c 20 36 29 0a 23 20 43 6f 6e 76 65 72 74 20 74 68 65 20 63 69 72 63 75 69 74 20 74 6f 20 61 5,.6).#.Convert.the.circuit.to.a
5f80 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 66 6f 72 6d 75 6c 61 2e 0a 66 6f 72 6d 75 6c 61 20 3d 20 n.equivalent.formula..formula.=.
5fa0 63 69 72 63 75 69 74 5f 74 6f 5f 66 6f 72 6d 75 6c 61 28 63 69 72 63 75 69 74 29 0a 70 72 69 6e circuit_to_formula(circuit).prin
5fc0 74 28 66 6f 72 6d 75 6c 61 5f 74 6f 5f 73 74 72 69 6e 67 28 66 6f 72 6d 75 6c 61 29 29 0a 0a 0a t(formula_to_string(formula))...
5fe0 6c 61 62 65 6c 73 20 3d 20 6e 78 2e 67 65 74 5f 6e 6f 64 65 5f 61 74 74 72 69 62 75 74 65 73 28 labels.=.nx.get_node_attributes(
6000 63 69 72 63 75 69 74 2c 20 22 6c 61 62 65 6c 22 29 0a 6f 70 74 69 6f 6e 73 20 3d 20 7b 0a 20 20 circuit,."label").options.=.{...
6020 20 20 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 36 30 30 2c 0a 20 20 20 20 22 61 6c 70 68 61 22 3a .."node_size":.600,....."alpha":
6040 20 30 2e 35 2c 0a 20 20 20 20 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 3a 20 22 62 6c 75 65 22 2c 0a .0.5,....."node_color":."blue",.
6060 20 20 20 20 22 6c 61 62 65 6c 73 22 3a 20 6c 61 62 65 6c 73 2c 0a 20 20 20 20 22 66 6f 6e 74 5f ...."labels":.labels,....."font_
6080 73 69 7a 65 22 3a 20 32 32 2c 0a 7d 0a 70 6c 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d size":.22,.}.plt.figure(figsize=
60a0 28 38 2c 20 38 29 29 0a 70 6f 73 20 3d 20 6e 78 2e 6d 75 6c 74 69 70 61 72 74 69 74 65 5f 6c 61 (8,.8)).pos.=.nx.multipartite_la
60c0 79 6f 75 74 28 63 69 72 63 75 69 74 2c 20 73 75 62 73 65 74 5f 6b 65 79 3d 22 6c 61 79 65 72 22 yout(circuit,.subset_key="layer"
60e0 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 63 69 72 63 75 69 74 2c 20 70 6f 73 2c ).nx.draw_networkx(circuit,.pos,
6100 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 70 6c 74 2e 74 69 74 6c 65 28 66 6f 72 6d 75 6c 61 5f 74 6f .**options).plt.title(formula_to
6120 5f 73 74 72 69 6e 67 28 66 6f 72 6d 75 6c 61 29 29 0a 70 6c 74 2e 61 78 69 73 28 22 65 71 75 61 _string(formula)).plt.axis("equa
6140 6c 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0d 7b 57 56 a4 7c 15 l").plt.show().PK.........{WV.|.
6160 e2 76 0a 00 00 76 0a 00 00 1d 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 62 6c 6f .v...v.......algorithms/plot_blo
6180 63 6b 6d 6f 64 65 6c 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 42 6c 6f 63 6b 6d 6f ckmodel.py""".==========.Blockmo
61a0 64 65 6c 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 6c 65 20 6f 66 20 63 72 65 61 74 del.==========..Example.of.creat
61c0 69 6e 67 20 61 20 62 6c 6f 63 6b 20 6d 6f 64 65 6c 20 75 73 69 6e 67 20 74 68 65 20 71 75 6f 74 ing.a.block.model.using.the.quot
61e0 69 65 6e 74 5f 67 72 61 70 68 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 4e 58 2e 20 20 44 61 74 61 ient_graph.function.in.NX...Data
6200 0a 75 73 65 64 20 69 73 20 74 68 65 20 48 61 72 74 66 6f 72 64 2c 20 43 54 20 64 72 75 67 20 75 .used.is.the.Hartford,.CT.drug.u
6220 73 65 72 73 20 6e 65 74 77 6f 72 6b 3a 3a 0a 0a 20 20 20 20 40 61 72 74 69 63 6c 65 7b 77 65 65 sers.network::......@article{wee
6240 6b 73 32 30 30 32 73 6f 63 69 61 6c 2c 0a 20 20 20 20 20 20 74 69 74 6c 65 3d 7b 53 6f 63 69 61 ks2002social,.......title={Socia
6260 6c 20 6e 65 74 77 6f 72 6b 73 20 6f 66 20 64 72 75 67 20 75 73 65 72 73 20 69 6e 20 68 69 67 68 l.networks.of.drug.users.in.high
6280 2d 72 69 73 6b 20 73 69 74 65 73 3a 20 46 69 6e 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 -risk.sites:.Finding.the.connect
62a0 69 6f 6e 73 7d 2c 0a 20 20 20 20 20 20 75 72 6c 20 3d 20 7b 68 74 74 70 73 3a 2f 2f 64 6f 69 2e ions},.......url.=.{https://doi.
62c0 6f 72 67 2f 31 30 2e 31 30 32 33 2f 41 3a 31 30 31 35 34 35 37 34 30 30 38 39 37 7d 2c 0a 20 20 org/10.1023/A:1015457400897},...
62e0 20 20 20 20 64 6f 69 20 3d 20 7b 31 30 2e 31 30 32 33 2f 41 3a 31 30 31 35 34 35 37 34 30 30 38 ....doi.=.{10.1023/A:10154574008
6300 39 37 7d 2c 0a 20 20 20 20 20 20 61 75 74 68 6f 72 3d 7b 57 65 65 6b 73 2c 20 4d 61 72 67 61 72 97},.......author={Weeks,.Margar
6320 65 74 20 52 20 61 6e 64 20 43 6c 61 69 72 2c 20 53 63 6f 74 74 20 61 6e 64 20 42 6f 72 67 61 74 et.R.and.Clair,.Scott.and.Borgat
6340 74 69 2c 20 53 74 65 70 68 65 6e 20 50 20 61 6e 64 20 52 61 64 64 61 2c 20 4b 69 6d 20 61 6e 64 ti,.Stephen.P.and.Radda,.Kim.and
6360 20 53 63 68 65 6e 73 75 6c 2c 20 4a 65 61 6e 20 4a 7d 2c 0a 20 20 20 20 20 20 6a 6f 75 72 6e 61 .Schensul,.Jean.J},.......journa
6380 6c 3d 7b 7b 41 49 44 53 20 61 6e 64 20 42 65 68 61 76 69 6f 72 7d 7d 2c 0a 20 20 20 20 20 20 76 l={{AIDS.and.Behavior}},.......v
63a0 6f 6c 75 6d 65 3d 7b 36 7d 2c 0a 20 20 20 20 20 20 6e 75 6d 62 65 72 3d 7b 32 7d 2c 0a 20 20 20 olume={6},.......number={2},....
63c0 20 20 20 70 61 67 65 73 3d 7b 31 39 33 2d 2d 32 30 36 7d 2c 0a 20 20 20 20 20 20 79 65 61 72 3d ...pages={193--206},.......year=
63e0 7b 32 30 30 32 7d 2c 0a 20 20 20 20 20 20 70 75 62 6c 69 73 68 65 72 3d 7b 53 70 72 69 6e 67 65 {2002},.......publisher={Springe
6400 72 7d 0a 20 20 20 20 7d 0a 0a 22 22 22 0a 0a 66 72 6f 6d 20 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 r}.....}.."""..from.collections.
6420 69 6d 70 6f 72 74 20 64 65 66 61 75 6c 74 64 69 63 74 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c import.defaultdict..import.matpl
6440 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f otlib.pyplot.as.plt.import.netwo
6460 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 66 72 6f rkx.as.nx.import.numpy.as.np.fro
6480 6d 20 73 63 69 70 79 2e 63 6c 75 73 74 65 72 20 69 6d 70 6f 72 74 20 68 69 65 72 61 72 63 68 79 m.scipy.cluster.import.hierarchy
64a0 0a 66 72 6f 6d 20 73 63 69 70 79 2e 73 70 61 74 69 61 6c 20 69 6d 70 6f 72 74 20 64 69 73 74 61 .from.scipy.spatial.import.dista
64c0 6e 63 65 0a 0a 0a 64 65 66 20 63 72 65 61 74 65 5f 68 63 28 47 29 3a 0a 20 20 20 20 22 22 22 43 nce...def.create_hc(G):....."""C
64e0 72 65 61 74 65 73 20 68 69 65 72 61 72 63 68 69 63 61 6c 20 63 6c 75 73 74 65 72 20 6f 66 20 67 reates.hierarchical.cluster.of.g
6500 72 61 70 68 20 47 20 66 72 6f 6d 20 64 69 73 74 61 6e 63 65 20 6d 61 74 72 69 78 22 22 22 0a 20 raph.G.from.distance.matrix"""..
6520 20 20 20 70 61 74 68 5f 6c 65 6e 67 74 68 20 3d 20 6e 78 2e 61 6c 6c 5f 70 61 69 72 73 5f 73 68 ...path_length.=.nx.all_pairs_sh
6540 6f 72 74 65 73 74 5f 70 61 74 68 5f 6c 65 6e 67 74 68 28 47 29 0a 20 20 20 20 64 69 73 74 61 6e ortest_path_length(G).....distan
6560 63 65 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6c 65 6e 28 47 29 2c 20 6c 65 6e 28 47 29 29 29 ces.=.np.zeros((len(G),.len(G)))
6580 0a 20 20 20 20 66 6f 72 20 75 2c 20 70 20 69 6e 20 70 61 74 68 5f 6c 65 6e 67 74 68 3a 0a 20 20 .....for.u,.p.in.path_length:...
65a0 20 20 20 20 20 20 66 6f 72 20 76 2c 20 64 20 69 6e 20 70 2e 69 74 65 6d 73 28 29 3a 0a 20 20 20 ......for.v,.d.in.p.items():....
65c0 20 20 20 20 20 20 20 20 20 64 69 73 74 61 6e 63 65 73 5b 75 5d 5b 76 5d 20 3d 20 64 0a 20 20 20 .........distances[u][v].=.d....
65e0 20 23 20 43 72 65 61 74 65 20 68 69 65 72 61 72 63 68 69 63 61 6c 20 63 6c 75 73 74 65 72 0a 20 .#.Create.hierarchical.cluster..
6600 20 20 20 59 20 3d 20 64 69 73 74 61 6e 63 65 2e 73 71 75 61 72 65 66 6f 72 6d 28 64 69 73 74 61 ...Y.=.distance.squareform(dista
6620 6e 63 65 73 29 0a 20 20 20 20 5a 20 3d 20 68 69 65 72 61 72 63 68 79 2e 63 6f 6d 70 6c 65 74 65 nces).....Z.=.hierarchy.complete
6640 28 59 29 20 20 23 20 43 72 65 61 74 65 73 20 48 43 20 75 73 69 6e 67 20 66 61 72 74 68 65 73 74 (Y)..#.Creates.HC.using.farthest
6660 20 70 6f 69 6e 74 20 6c 69 6e 6b 61 67 65 0a 20 20 20 20 23 20 54 68 69 73 20 70 61 72 74 69 74 .point.linkage.....#.This.partit
6680 69 6f 6e 20 73 65 6c 65 63 74 69 6f 6e 20 69 73 20 61 72 62 69 74 72 61 72 79 2c 20 66 6f 72 20 ion.selection.is.arbitrary,.for.
66a0 69 6c 6c 75 73 74 72 69 76 65 20 70 75 72 70 6f 73 65 73 0a 20 20 20 20 6d 65 6d 62 65 72 73 68 illustrive.purposes.....membersh
66c0 69 70 20 3d 20 6c 69 73 74 28 68 69 65 72 61 72 63 68 79 2e 66 63 6c 75 73 74 65 72 28 5a 2c 20 ip.=.list(hierarchy.fcluster(Z,.
66e0 74 3d 31 2e 31 35 29 29 0a 20 20 20 20 23 20 43 72 65 61 74 65 20 63 6f 6c 6c 65 63 74 69 6f 6e t=1.15)).....#.Create.collection
6700 20 6f 66 20 6c 69 73 74 73 20 66 6f 72 20 62 6c 6f 63 6b 6d 6f 64 65 6c 0a 20 20 20 20 70 61 72 .of.lists.for.blockmodel.....par
6720 74 69 74 69 6f 6e 20 3d 20 64 65 66 61 75 6c 74 64 69 63 74 28 6c 69 73 74 29 0a 20 20 20 20 66 tition.=.defaultdict(list).....f
6740 6f 72 20 6e 2c 20 70 20 69 6e 20 7a 69 70 28 6c 69 73 74 28 72 61 6e 67 65 28 6c 65 6e 28 47 29 or.n,.p.in.zip(list(range(len(G)
6760 29 29 2c 20 6d 65 6d 62 65 72 73 68 69 70 29 3a 0a 20 20 20 20 20 20 20 20 70 61 72 74 69 74 69 )),.membership):.........partiti
6780 6f 6e 5b 70 5d 2e 61 70 70 65 6e 64 28 6e 29 0a 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 74 28 on[p].append(n).....return.list(
67a0 70 61 72 74 69 74 69 6f 6e 2e 76 61 6c 75 65 73 28 29 29 0a 0a 0a 47 20 3d 20 6e 78 2e 72 65 61 partition.values())...G.=.nx.rea
67c0 64 5f 65 64 67 65 6c 69 73 74 28 22 68 61 72 74 66 6f 72 64 5f 64 72 75 67 2e 65 64 67 65 6c 69 d_edgelist("hartford_drug.edgeli
67e0 73 74 22 29 0a 0a 23 20 45 78 74 72 61 63 74 20 6c 61 72 67 65 73 74 20 63 6f 6e 6e 65 63 74 65 st")..#.Extract.largest.connecte
6800 64 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 74 6f 20 67 72 61 70 68 20 48 0a 48 20 3d 20 47 2e 73 d.component.into.graph.H.H.=.G.s
6820 75 62 67 72 61 70 68 28 6e 65 78 74 28 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e ubgraph(next(nx.connected_compon
6840 65 6e 74 73 28 47 29 29 29 0a 23 20 4d 61 6b 65 73 20 6c 69 66 65 20 65 61 73 69 65 72 20 74 6f ents(G))).#.Makes.life.easier.to
6860 20 68 61 76 65 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 20 6c 61 62 65 6c 65 64 20 69 6e 74 65 .have.consecutively.labeled.inte
6880 67 65 72 20 6e 6f 64 65 73 0a 48 20 3d 20 6e 78 2e 63 6f 6e 76 65 72 74 5f 6e 6f 64 65 5f 6c 61 ger.nodes.H.=.nx.convert_node_la
68a0 62 65 6c 73 5f 74 6f 5f 69 6e 74 65 67 65 72 73 28 48 29 0a 23 20 43 72 65 61 74 65 20 70 61 72 bels_to_integers(H).#.Create.par
68c0 74 69 74 69 6f 6e 73 20 77 69 74 68 20 68 69 65 72 61 72 63 68 69 63 61 6c 20 63 6c 75 73 74 65 titions.with.hierarchical.cluste
68e0 72 69 6e 67 0a 70 61 72 74 69 74 69 6f 6e 73 20 3d 20 63 72 65 61 74 65 5f 68 63 28 48 29 0a 23 ring.partitions.=.create_hc(H).#
6900 20 42 75 69 6c 64 20 62 6c 6f 63 6b 6d 6f 64 65 6c 20 67 72 61 70 68 0a 42 4d 20 3d 20 6e 78 2e .Build.blockmodel.graph.BM.=.nx.
6920 71 75 6f 74 69 65 6e 74 5f 67 72 61 70 68 28 48 2c 20 70 61 72 74 69 74 69 6f 6e 73 2c 20 72 65 quotient_graph(H,.partitions,.re
6940 6c 61 62 65 6c 3d 54 72 75 65 29 0a 0a 23 20 44 72 61 77 20 6f 72 69 67 69 6e 61 6c 20 67 72 61 label=True)..#.Draw.original.gra
6960 70 68 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 48 2c 20 69 74 65 ph.pos.=.nx.spring_layout(H,.ite
6980 72 61 74 69 6f 6e 73 3d 31 30 30 2c 20 73 65 65 64 3d 38 33 29 20 20 23 20 53 65 65 64 20 66 6f rations=100,.seed=83)..#.Seed.fo
69a0 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 32 31 r.reproducibility.plt.subplot(21
69c0 31 29 0a 6e 78 2e 64 72 61 77 28 48 2c 20 70 6f 73 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 1).nx.draw(H,.pos,.with_labels=F
69e0 61 6c 73 65 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 31 30 29 0a 0a 23 20 44 72 61 77 20 62 6c 6f 63 alse,.node_size=10)..#.Draw.bloc
6a00 6b 20 6d 6f 64 65 6c 20 77 69 74 68 20 77 65 69 67 68 74 65 64 20 65 64 67 65 73 20 61 6e 64 20 k.model.with.weighted.edges.and.
6a20 6e 6f 64 65 73 20 73 69 7a 65 64 20 62 79 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 74 65 72 6e 61 nodes.sized.by.number.of.interna
6a40 6c 20 6e 6f 64 65 73 0a 6e 6f 64 65 5f 73 69 7a 65 20 3d 20 5b 42 4d 2e 6e 6f 64 65 73 5b 78 5d l.nodes.node_size.=.[BM.nodes[x]
6a60 5b 22 6e 6e 6f 64 65 73 22 5d 20 2a 20 31 30 20 66 6f 72 20 78 20 69 6e 20 42 4d 2e 6e 6f 64 65 ["nnodes"].*.10.for.x.in.BM.node
6a80 73 28 29 5d 0a 65 64 67 65 5f 77 69 64 74 68 20 3d 20 5b 28 32 20 2a 20 64 5b 22 77 65 69 67 68 s()].edge_width.=.[(2.*.d["weigh
6aa0 74 22 5d 29 20 66 6f 72 20 28 75 2c 20 76 2c 20 64 29 20 69 6e 20 42 4d 2e 65 64 67 65 73 28 64 t"]).for.(u,.v,.d).in.BM.edges(d
6ac0 61 74 61 3d 54 72 75 65 29 5d 0a 23 20 53 65 74 20 70 6f 73 69 74 69 6f 6e 73 20 74 6f 20 6d 65 ata=True)].#.Set.positions.to.me
6ae0 61 6e 20 6f 66 20 70 6f 73 69 74 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20 6e 6f 64 65 an.of.positions.of.internal.node
6b00 73 20 66 72 6f 6d 20 6f 72 69 67 69 6e 61 6c 20 67 72 61 70 68 0a 70 6f 73 42 4d 20 3d 20 7b 7d s.from.original.graph.posBM.=.{}
6b20 0a 66 6f 72 20 6e 20 69 6e 20 42 4d 3a 0a 20 20 20 20 78 79 20 3d 20 6e 70 2e 61 72 72 61 79 28 .for.n.in.BM:.....xy.=.np.array(
6b40 5b 70 6f 73 5b 75 5d 20 66 6f 72 20 75 20 69 6e 20 42 4d 2e 6e 6f 64 65 73 5b 6e 5d 5b 22 67 72 [pos[u].for.u.in.BM.nodes[n]["gr
6b60 61 70 68 22 5d 5d 29 0a 20 20 20 20 70 6f 73 42 4d 5b 6e 5d 20 3d 20 78 79 2e 6d 65 61 6e 28 61 aph"]]).....posBM[n].=.xy.mean(a
6b80 78 69 73 3d 30 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 32 31 32 29 0a 6e 78 2e 64 72 61 77 28 xis=0).plt.subplot(212).nx.draw(
6ba0 42 4d 2c 20 70 6f 73 42 4d 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 6e 6f 64 65 5f 73 69 7a 65 2c 20 BM,.posBM,.node_size=node_size,.
6bc0 77 69 64 74 68 3d 65 64 67 65 5f 77 69 64 74 68 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 width=edge_width,.with_labels=Fa
6be0 6c 73 65 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a lse).plt.axis("off").plt.show().
6c00 50 4b 03 04 14 00 00 00 00 00 0a 7b 57 56 d2 bd 8b 1b 17 10 00 00 17 10 00 00 1e 00 00 00 61 6c PK.........{WV................al
6c20 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 62 65 61 6d 5f 73 65 61 72 63 68 2e 70 79 22 22 22 0a gorithms/plot_beam_search.py""".
6c40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 42 65 61 6d 20 53 65 61 72 63 68 0a 3d 3d 3d 3d 3d 3d 3d 3d ===========.Beam.Search.========
6c60 3d 3d 3d 0a 0a 42 65 61 6d 20 73 65 61 72 63 68 20 77 69 74 68 20 64 79 6e 61 6d 69 63 20 62 65 ===..Beam.search.with.dynamic.be
6c80 61 6d 20 77 69 64 74 68 2e 0a 0a 54 68 65 20 70 72 6f 67 72 65 73 73 69 76 65 20 77 69 64 65 6e am.width...The.progressive.widen
6ca0 69 6e 67 20 62 65 61 6d 20 73 65 61 72 63 68 20 72 65 70 65 61 74 65 64 6c 79 20 65 78 65 63 75 ing.beam.search.repeatedly.execu
6cc0 74 65 73 20 61 20 62 65 61 6d 20 73 65 61 72 63 68 0a 77 69 74 68 20 69 6e 63 72 65 61 73 69 6e tes.a.beam.search.with.increasin
6ce0 67 20 62 65 61 6d 20 77 69 64 74 68 20 75 6e 74 69 6c 20 74 68 65 20 74 61 72 67 65 74 20 6e 6f g.beam.width.until.the.target.no
6d00 64 65 20 69 73 20 66 6f 75 6e 64 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 68 0a 0a 69 6d de.is.found..""".import.math..im
6d20 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d port.matplotlib.pyplot.as.plt.im
6d40 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 0a 64 65 66 20 70 72 6f 67 72 65 port.networkx.as.nx...def.progre
6d60 73 73 69 76 65 5f 77 69 64 65 6e 69 6e 67 5f 73 65 61 72 63 68 28 47 2c 20 73 6f 75 72 63 65 2c ssive_widening_search(G,.source,
6d80 20 76 61 6c 75 65 2c 20 63 6f 6e 64 69 74 69 6f 6e 2c 20 69 6e 69 74 69 61 6c 5f 77 69 64 74 68 .value,.condition,.initial_width
6da0 3d 31 29 3a 0a 20 20 20 20 22 22 22 50 72 6f 67 72 65 73 73 69 76 65 20 77 69 64 65 6e 69 6e 67 =1):....."""Progressive.widening
6dc0 20 62 65 61 6d 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 61 20 6e 6f 64 65 2e 0a 0a 20 20 .beam.search.to.find.a.node.....
6de0 20 20 54 68 65 20 70 72 6f 67 72 65 73 73 69 76 65 20 77 69 64 65 6e 69 6e 67 20 62 65 61 6d 20 ..The.progressive.widening.beam.
6e00 73 65 61 72 63 68 20 69 6e 76 6f 6c 76 65 73 20 61 20 72 65 70 65 61 74 65 64 20 62 65 61 6d 0a search.involves.a.repeated.beam.
6e20 20 20 20 20 73 65 61 72 63 68 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 61 20 73 6d 61 6c ....search,.starting.with.a.smal
6e40 6c 20 62 65 61 6d 20 77 69 64 74 68 20 74 68 65 6e 20 65 78 74 65 6e 64 69 6e 67 20 74 6f 0a 20 l.beam.width.then.extending.to..
6e60 20 20 20 70 72 6f 67 72 65 73 73 69 76 65 6c 79 20 6c 61 72 67 65 72 20 62 65 61 6d 20 77 69 64 ...progressively.larger.beam.wid
6e80 74 68 73 20 69 66 20 74 68 65 20 74 61 72 67 65 74 20 6e 6f 64 65 20 69 73 20 6e 6f 74 0a 20 20 ths.if.the.target.node.is.not...
6ea0 20 20 66 6f 75 6e 64 2e 20 54 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 69 6d ..found..This.implementation.sim
6ec0 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 64 65 20 66 6f 75 6e 64 ply.returns.the.first.node.found
6ee0 20 74 68 61 74 0a 20 20 20 20 6d 61 74 63 68 65 73 20 74 68 65 20 74 65 72 6d 69 6e 61 74 69 6f .that.....matches.the.terminatio
6f00 6e 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 0a 20 20 20 20 60 47 60 20 69 73 20 61 20 4e 65 74 77 6f n.condition.......`G`.is.a.Netwo
6f20 72 6b 58 20 67 72 61 70 68 2e 0a 0a 20 20 20 20 60 73 6f 75 72 63 65 60 20 69 73 20 61 20 6e 6f rkX.graph.......`source`.is.a.no
6f40 64 65 20 69 6e 20 74 68 65 20 67 72 61 70 68 2e 20 54 68 65 20 73 65 61 72 63 68 20 66 6f 72 20 de.in.the.graph..The.search.for.
6f60 74 68 65 20 6e 6f 64 65 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 20 20 20 20 62 65 67 69 6e 73 20 the.node.of.interest.....begins.
6f80 68 65 72 65 20 61 6e 64 20 65 78 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74 68 6f 73 65 20 6e here.and.extends.only.to.those.n
6fa0 6f 64 65 73 20 69 6e 20 74 68 65 20 28 77 65 61 6b 6c 79 29 0a 20 20 20 20 63 6f 6e 6e 65 63 74 odes.in.the.(weakly).....connect
6fc0 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 20 6f 66 20 74 68 69 73 20 6e 6f 64 65 2e 0a 0a 20 20 20 20 ed.component.of.this.node.......
6fe0 60 76 61 6c 75 65 60 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 65 74 75 72 `value`.is.a.function.that.retur
7000 6e 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 68 6f 77 20 ns.a.real.number.indicating.how.
7020 67 6f 6f 64 0a 20 20 20 20 61 20 70 6f 74 65 6e 74 69 61 6c 20 6e 65 69 67 68 62 6f 72 20 6e 6f good.....a.potential.neighbor.no
7040 64 65 20 69 73 20 77 68 65 6e 20 64 65 63 69 64 69 6e 67 20 77 68 69 63 68 20 6e 65 69 67 68 62 de.is.when.deciding.which.neighb
7060 6f 72 20 6e 6f 64 65 73 20 74 6f 0a 20 20 20 20 65 6e 71 75 65 75 65 20 69 6e 20 74 68 65 20 62 or.nodes.to.....enqueue.in.the.b
7080 72 65 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 20 4f 6e 6c 79 20 74 68 65 20 62 65 readth-first.search..Only.the.be
70a0 73 74 20 6e 6f 64 65 73 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20 20 20 63 75 72 72 65 6e 74 20 st.nodes.within.the.....current.
70c0 62 65 61 6d 20 77 69 64 74 68 20 77 69 6c 6c 20 62 65 20 65 6e 71 75 65 75 65 64 20 61 74 20 65 beam.width.will.be.enqueued.at.e
70e0 61 63 68 20 73 74 65 70 2e 0a 0a 20 20 20 20 60 63 6f 6e 64 69 74 69 6f 6e 60 20 69 73 20 74 68 ach.step.......`condition`.is.th
7100 65 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20 63 6f 6e 64 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 e.termination.condition.for.the.
7120 73 65 61 72 63 68 2e 20 54 68 69 73 20 69 73 20 61 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 74 search..This.is.a.....function.t
7140 68 61 74 20 74 61 6b 65 73 20 61 20 6e 6f 64 65 20 61 73 20 69 6e 70 75 74 20 61 6e 64 20 72 65 hat.takes.a.node.as.input.and.re
7160 74 75 72 6e 20 61 20 42 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 77 68 turn.a.Boolean.indicating.....wh
7180 65 74 68 65 72 20 74 68 65 20 6e 6f 64 65 20 69 73 20 74 68 65 20 74 61 72 67 65 74 2e 20 49 66 ether.the.node.is.the.target..If
71a0 20 6e 6f 20 6e 6f 64 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 74 65 72 6d 69 6e 61 74 69 6f 6e .no.node.matches.the.termination
71c0 0a 20 20 20 20 63 6f 6e 64 69 74 69 6f 6e 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 61 .....condition,.this.function.ra
71e0 69 73 65 73 20 3a 65 78 63 3a 60 4e 6f 64 65 4e 6f 74 46 6f 75 6e 64 60 2e 0a 0a 20 20 20 20 60 ises.:exc:`NodeNotFound`.......`
7200 69 6e 69 74 69 61 6c 5f 77 69 64 74 68 60 20 69 73 20 74 68 65 20 73 74 61 72 74 69 6e 67 20 62 initial_width`.is.the.starting.b
7220 65 61 6d 20 77 69 64 74 68 20 66 6f 72 20 74 68 65 20 62 65 61 6d 20 73 65 61 72 63 68 20 28 74 eam.width.for.the.beam.search.(t
7240 68 65 0a 20 20 20 20 64 65 66 61 75 6c 74 20 69 73 20 6f 6e 65 29 2e 20 49 66 20 6e 6f 20 6e 6f he.....default.is.one)..If.no.no
7260 64 65 20 6d 61 74 63 68 69 6e 67 20 74 68 65 20 60 63 6f 6e 64 69 74 69 6f 6e 60 20 69 73 20 66 de.matching.the.`condition`.is.f
7280 6f 75 6e 64 20 77 69 74 68 0a 20 20 20 20 74 68 69 73 20 62 65 61 6d 20 77 69 64 74 68 2c 20 74 ound.with.....this.beam.width,.t
72a0 68 65 20 62 65 61 6d 20 73 65 61 72 63 68 20 69 73 20 72 65 73 74 61 72 74 65 64 20 66 72 6f 6d he.beam.search.is.restarted.from
72c0 20 74 68 65 20 60 73 6f 75 72 63 65 60 20 6e 6f 64 65 0a 20 20 20 20 77 69 74 68 20 61 20 62 65 .the.`source`.node.....with.a.be
72e0 61 6d 20 77 69 64 74 68 20 74 68 61 74 20 69 73 20 74 77 69 63 65 20 61 73 20 6c 61 72 67 65 20 am.width.that.is.twice.as.large.
7300 28 73 6f 20 74 68 65 20 62 65 61 6d 20 77 69 64 74 68 0a 20 20 20 20 69 6e 63 72 65 61 73 65 73 (so.the.beam.width.....increases
7320 20 65 78 70 6f 6e 65 6e 74 69 61 6c 6c 79 29 2e 20 54 68 65 20 73 65 61 72 63 68 20 74 65 72 6d .exponentially)..The.search.term
7340 69 6e 61 74 65 73 20 61 66 74 65 72 20 74 68 65 20 62 65 61 6d 20 77 69 64 74 68 0a 20 20 20 20 inates.after.the.beam.width.....
7360 65 78 63 65 65 64 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 64 65 73 20 69 6e 20 74 exceeds.the.number.of.nodes.in.t
7380 68 65 20 67 72 61 70 68 2e 0a 0a 20 20 20 20 22 22 22 0a 20 20 20 20 23 20 43 68 65 63 6b 20 66 he.graph.......""".....#.Check.f
73a0 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65 or.the.special.case.in.which.the
73c0 20 73 6f 75 72 63 65 20 6e 6f 64 65 20 73 61 74 69 73 66 69 65 73 20 74 68 65 0a 20 20 20 20 23 .source.node.satisfies.the.....#
73e0 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 20 20 20 20 69 66 20 63 .termination.condition......if.c
7400 6f 6e 64 69 74 69 6f 6e 28 73 6f 75 72 63 65 29 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e ondition(source):.........return
7420 20 73 6f 75 72 63 65 0a 20 20 20 20 23 20 54 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 .source.....#.The.largest.possib
7440 6c 65 20 76 61 6c 75 65 20 6f 66 20 60 69 60 20 69 6e 20 74 68 69 73 20 72 61 6e 67 65 20 79 69 le.value.of.`i`.in.this.range.yi
7460 65 6c 64 73 20 61 20 77 69 64 74 68 20 61 74 0a 20 20 20 20 23 20 6c 65 61 73 74 20 74 68 65 20 elds.a.width.at.....#.least.the.
7480 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 64 65 73 20 69 6e 20 74 68 65 20 67 72 61 70 68 2c 20 73 6f number.of.nodes.in.the.graph,.so
74a0 20 74 68 65 20 66 69 6e 61 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 23 20 60 .the.final.invocation.of.....#.`
74c0 62 66 73 5f 62 65 61 6d 5f 65 64 67 65 73 60 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f bfs_beam_edges`.is.equivalent.to
74e0 20 61 20 70 6c 61 69 6e 20 6f 6c 64 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 0a 20 20 20 20 23 .a.plain.old.breadth-first.....#
7500 20 73 65 61 72 63 68 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 61 6c 6c 20 6e 6f 64 65 73 20 77 69 .search..Therefore,.all.nodes.wi
7520 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 62 65 20 76 69 73 69 74 65 64 2e 0a 20 20 20 20 6c 6f ll.eventually.be.visited......lo
7540 67 5f 6d 20 3d 20 6d 61 74 68 2e 63 65 69 6c 28 6d 61 74 68 2e 6c 6f 67 32 28 6c 65 6e 28 47 29 g_m.=.math.ceil(math.log2(len(G)
7560 29 29 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 6f 67 5f 6d 29 3a 0a 20 20 )).....for.i.in.range(log_m):...
7580 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 69 6e 69 74 69 61 6c 5f 77 69 64 74 68 20 2a 20 70 6f ......width.=.initial_width.*.po
75a0 77 28 32 2c 20 69 29 0a 20 20 20 20 20 20 20 20 23 20 53 69 6e 63 65 20 77 65 20 61 72 65 20 61 w(2,.i).........#.Since.we.are.a
75c0 6c 77 61 79 73 20 73 74 61 72 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 73 6f 75 lways.starting.from.the.same.sou
75e0 72 63 65 20 6e 6f 64 65 2c 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 23 20 73 65 61 72 63 68 20 rce.node,.this.........#.search.
7600 6d 61 79 20 76 69 73 69 74 20 74 68 65 20 73 61 6d 65 20 6e 6f 64 65 73 20 6d 61 6e 79 20 74 69 may.visit.the.same.nodes.many.ti
7620 6d 65 73 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 23 20 mes.(depending.on.the.........#.
7640 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 60 76 61 6c 75 65 60 20 66 75 implementation.of.the.`value`.fu
7660 6e 63 74 69 6f 6e 29 2e 0a 20 20 20 20 20 20 20 20 66 6f 72 20 75 2c 20 76 20 69 6e 20 6e 78 2e nction)..........for.u,.v.in.nx.
7680 62 66 73 5f 62 65 61 6d 5f 65 64 67 65 73 28 47 2c 20 73 6f 75 72 63 65 2c 20 76 61 6c 75 65 2c bfs_beam_edges(G,.source,.value,
76a0 20 77 69 64 74 68 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 63 6f 6e 64 69 74 69 6f .width):.............if.conditio
76c0 6e 28 76 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 0a 20 n(v):.................return.v..
76e0 20 20 20 23 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 73 69 6e 63 65 20 61 6c 6c 20 6e 6f ...#.At.this.point,.since.all.no
7700 64 65 73 20 68 61 76 65 20 62 65 65 6e 20 76 69 73 69 74 65 64 2c 20 77 65 20 6b 6e 6f 77 20 74 des.have.been.visited,.we.know.t
7720 68 61 74 0a 20 20 20 20 23 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6e 6f 64 65 73 20 73 61 74 69 hat.....#.none.of.the.nodes.sati
7740 73 66 69 65 64 20 74 68 65 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20 63 6f 6e 64 69 74 69 6f 6e 2e sfied.the.termination.condition.
7760 0a 20 20 20 20 72 61 69 73 65 20 6e 78 2e 4e 6f 64 65 4e 6f 74 46 6f 75 6e 64 28 22 6e 6f 20 6e .....raise.nx.NodeNotFound("no.n
7780 6f 64 65 20 73 61 74 69 73 66 69 65 64 20 74 68 65 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20 63 6f ode.satisfied.the.termination.co
77a0 6e 64 69 74 69 6f 6e 22 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ndition")...####################
77c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
77e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 65 ###########################.#.Se
7800 61 72 63 68 20 66 6f 72 20 61 20 6e 6f 64 65 20 77 69 74 68 20 68 69 67 68 20 63 65 6e 74 72 61 arch.for.a.node.with.high.centra
7820 6c 69 74 79 2e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d lity..#.------------------------
7840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 57 65 20 67 65 6e 65 72 61 74 65 20 ---------------.#.#.We.generate.
7860 61 20 72 61 6e 64 6f 6d 20 67 72 61 70 68 2c 20 63 6f 6d 70 75 74 65 20 74 68 65 20 63 65 6e 74 a.random.graph,.compute.the.cent
7880 72 61 6c 69 74 79 20 6f 66 20 65 61 63 68 20 6e 6f 64 65 2c 20 74 68 65 6e 20 70 65 72 66 6f 72 rality.of.each.node,.then.perfor
78a0 6d 0a 23 20 74 68 65 20 70 72 6f 67 72 65 73 73 69 76 65 20 77 69 64 65 6e 69 6e 67 20 73 65 61 m.#.the.progressive.widening.sea
78c0 72 63 68 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 69 6e 64 20 61 20 6e 6f 64 65 20 6f 66 20 68 rch.in.order.to.find.a.node.of.h
78e0 69 67 68 20 63 65 6e 74 72 61 6c 69 74 79 2e 0a 0a 23 20 53 65 74 20 61 20 73 65 65 64 20 66 6f igh.centrality...#.Set.a.seed.fo
7900 72 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61 74 69 6f 6e 20 73 6f 20 74 68 r.random.number.generation.so.th
7920 65 20 65 78 61 6d 70 6c 65 20 69 73 20 72 65 70 72 6f 64 75 63 69 62 6c 65 0a 73 65 65 64 20 3d e.example.is.reproducible.seed.=
7940 20 38 39 0a 0a 47 20 3d 20 6e 78 2e 67 6e 70 5f 72 61 6e 64 6f 6d 5f 67 72 61 70 68 28 31 30 30 .89..G.=.nx.gnp_random_graph(100
7960 2c 20 30 2e 35 2c 20 73 65 65 64 3d 73 65 65 64 29 0a 63 65 6e 74 72 61 6c 69 74 79 20 3d 20 6e ,.0.5,.seed=seed).centrality.=.n
7980 78 2e 65 69 67 65 6e 76 65 63 74 6f 72 5f 63 65 6e 74 72 61 6c 69 74 79 28 47 29 0a 61 76 67 5f x.eigenvector_centrality(G).avg_
79a0 63 65 6e 74 72 61 6c 69 74 79 20 3d 20 73 75 6d 28 63 65 6e 74 72 61 6c 69 74 79 2e 76 61 6c 75 centrality.=.sum(centrality.valu
79c0 65 73 28 29 29 20 2f 20 6c 65 6e 28 47 29 0a 0a 0a 64 65 66 20 68 61 73 5f 68 69 67 68 5f 63 65 es())./.len(G)...def.has_high_ce
79e0 6e 74 72 61 6c 69 74 79 28 76 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 63 65 6e 74 72 61 6c 69 ntrality(v):.....return.centrali
7a00 74 79 5b 76 5d 20 3e 3d 20 61 76 67 5f 63 65 6e 74 72 61 6c 69 74 79 0a 0a 0a 73 6f 75 72 63 65 ty[v].>=.avg_centrality...source
7a20 20 3d 20 30 0a 76 61 6c 75 65 20 3d 20 63 65 6e 74 72 61 6c 69 74 79 2e 67 65 74 0a 63 6f 6e 64 .=.0.value.=.centrality.get.cond
7a40 69 74 69 6f 6e 20 3d 20 68 61 73 5f 68 69 67 68 5f 63 65 6e 74 72 61 6c 69 74 79 0a 0a 66 6f 75 ition.=.has_high_centrality..fou
7a60 6e 64 5f 6e 6f 64 65 20 3d 20 70 72 6f 67 72 65 73 73 69 76 65 5f 77 69 64 65 6e 69 6e 67 5f 73 nd_node.=.progressive_widening_s
7a80 65 61 72 63 68 28 47 2c 20 73 6f 75 72 63 65 2c 20 76 61 6c 75 65 2c 20 63 6f 6e 64 69 74 69 6f earch(G,.source,.value,.conditio
7aa0 6e 29 0a 63 20 3d 20 63 65 6e 74 72 61 6c 69 74 79 5b 66 6f 75 6e 64 5f 6e 6f 64 65 5d 0a 70 72 n).c.=.centrality[found_node].pr
7ac0 69 6e 74 28 66 22 66 6f 75 6e 64 20 6e 6f 64 65 20 7b 66 6f 75 6e 64 5f 6e 6f 64 65 7d 20 77 69 int(f"found.node.{found_node}.wi
7ae0 74 68 20 63 65 6e 74 72 61 6c 69 74 79 20 7b 63 7d 22 29 0a 0a 0a 23 20 44 72 61 77 20 67 72 61 th.centrality.{c}")...#.Draw.gra
7b00 70 68 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 ph.pos.=.nx.spring_layout(G,.see
7b20 64 3d 73 65 65 64 29 0a 6f 70 74 69 6f 6e 73 20 3d 20 7b 0a 20 20 20 20 22 6e 6f 64 65 5f 63 6f d=seed).options.=.{....."node_co
7b40 6c 6f 72 22 3a 20 22 62 6c 75 65 22 2c 0a 20 20 20 20 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 32 lor":."blue",....."node_size":.2
7b60 30 2c 0a 20 20 20 20 22 65 64 67 65 5f 63 6f 6c 6f 72 22 3a 20 22 67 72 65 79 22 2c 0a 20 20 20 0,....."edge_color":."grey",....
7b80 20 22 6c 69 6e 65 77 69 64 74 68 73 22 3a 20 30 2c 0a 20 20 20 20 22 77 69 64 74 68 22 3a 20 30 ."linewidths":.0,....."width":.0
7ba0 2e 31 2c 0a 7d 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 .1,.}.nx.draw(G,.pos,.**options)
7bc0 0a 23 20 44 72 61 77 20 6e 6f 64 65 20 77 69 74 68 20 68 69 67 68 20 63 65 6e 74 72 61 6c 69 74 .#.Draw.node.with.high.centralit
7be0 79 20 61 73 20 6c 61 72 67 65 20 61 6e 64 20 72 65 64 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f y.as.large.and.red.nx.draw_netwo
7c00 72 6b 78 5f 6e 6f 64 65 73 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 6c 69 73 74 3d 5b 66 6f 75 6e rkx_nodes(G,.pos,.nodelist=[foun
7c20 64 5f 6e 6f 64 65 5d 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 31 30 30 2c 20 6e 6f 64 65 5f 63 6f 6c d_node],.node_size=100,.node_col
7c40 6f 72 3d 22 72 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 20 7b 57 or="r").plt.show().PK.........{W
7c60 56 40 59 d4 42 4a 19 00 00 4a 19 00 00 1c 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 V@Y.BJ...J.......algorithms/plot
7c80 5f 73 75 62 67 72 61 70 68 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 53 75 62 67 72 _subgraphs.py""".=========.Subgr
7ca0 61 70 68 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 45 78 61 6d 70 6c 65 20 6f 66 20 70 61 72 74 69 74 aphs.=========.Example.of.partit
7cc0 69 6f 6e 69 6e 67 20 61 20 64 69 72 65 63 74 65 64 20 67 72 61 70 68 20 77 69 74 68 20 6e 6f 64 ioning.a.directed.graph.with.nod
7ce0 65 73 20 6c 61 62 65 6c 65 64 20 61 73 0a 73 75 70 70 6f 72 74 65 64 20 61 6e 64 20 75 6e 73 75 es.labeled.as.supported.and.unsu
7d00 70 70 6f 72 74 65 64 20 6e 6f 64 65 73 20 69 6e 74 6f 20 61 20 6c 69 73 74 20 6f 66 20 73 75 62 pported.nodes.into.a.list.of.sub
7d20 67 72 61 70 68 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20 65 6e 74 69 72 65 6c graphs.that.contain.only.entirel
7d40 79 20 73 75 70 70 6f 72 74 65 64 20 6f 72 20 65 6e 74 69 72 65 6c 79 20 75 6e 73 75 70 70 6f 72 y.supported.or.entirely.unsuppor
7d60 74 65 64 20 6e 6f 64 65 73 2e 0a 41 64 6f 70 74 65 64 20 66 72 6f 6d 20 0a 68 74 74 70 73 3a 2f ted.nodes..Adopted.from..https:/
7d80 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6c 6f 62 70 63 67 2f 70 79 74 68 6f 6e 5f 65 78 61 6d 70 6c /github.com/lobpcg/python_exampl
7da0 65 73 2f 62 6c 6f 62 2f 6d 61 73 74 65 72 2f 6e 65 74 77 6f 72 6b 78 5f 65 78 61 6d 70 6c 65 2e es/blob/master/networkx_example.
7dc0 70 79 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d py."""..import.networkx.as.nx.im
7de0 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 0a 0a port.matplotlib.pyplot.as.plt...
7e00 64 65 66 20 67 72 61 70 68 5f 70 61 72 74 69 74 69 6f 6e 69 6e 67 28 47 2c 20 70 6c 6f 74 74 69 def.graph_partitioning(G,.plotti
7e20 6e 67 3d 54 72 75 65 29 3a 0a 20 20 20 20 22 22 22 50 61 72 74 69 74 69 6f 6e 20 61 20 64 69 72 ng=True):....."""Partition.a.dir
7e40 65 63 74 65 64 20 67 72 61 70 68 20 69 6e 74 6f 20 61 20 6c 69 73 74 20 6f 66 20 73 75 62 67 72 ected.graph.into.a.list.of.subgr
7e60 61 70 68 73 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 6f 6e 6c 79 20 65 6e 74 69 72 aphs.that.contain.....only.entir
7e80 65 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 72 20 65 6e 74 69 72 65 6c 79 20 75 6e 73 75 70 70 ely.supported.or.entirely.unsupp
7ea0 6f 72 74 65 64 20 6e 6f 64 65 73 2e 0a 20 20 20 20 22 22 22 0a 20 20 20 20 23 20 43 61 74 65 67 orted.nodes......""".....#.Categ
7ec0 6f 72 69 7a 65 20 6e 6f 64 65 73 20 62 79 20 74 68 65 69 72 20 6e 6f 64 65 5f 74 79 70 65 20 61 orize.nodes.by.their.node_type.a
7ee0 74 74 72 69 62 75 74 65 0a 20 20 20 20 73 75 70 70 6f 72 74 65 64 5f 6e 6f 64 65 73 20 3d 20 7b ttribute.....supported_nodes.=.{
7f00 6e 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 47 2e 6e 6f 64 65 73 28 64 61 74 61 3d 22 6e 6f 64 65 n.for.n,.d.in.G.nodes(data="node
7f20 5f 74 79 70 65 22 29 20 69 66 20 64 20 3d 3d 20 22 73 75 70 70 6f 72 74 65 64 22 7d 0a 20 20 20 _type").if.d.==."supported"}....
7f40 20 75 6e 73 75 70 70 6f 72 74 65 64 5f 6e 6f 64 65 73 20 3d 20 7b 6e 20 66 6f 72 20 6e 2c 20 64 .unsupported_nodes.=.{n.for.n,.d
7f60 20 69 6e 20 47 2e 6e 6f 64 65 73 28 64 61 74 61 3d 22 6e 6f 64 65 5f 74 79 70 65 22 29 20 69 66 .in.G.nodes(data="node_type").if
7f80 20 64 20 3d 3d 20 22 75 6e 73 75 70 70 6f 72 74 65 64 22 7d 0a 0a 20 20 20 20 23 20 4d 61 6b 65 .d.==."unsupported"}......#.Make
7fa0 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 67 72 61 70 68 2e 0a 20 20 20 20 48 20 3d 20 47 2e .a.copy.of.the.graph......H.=.G.
7fc0 63 6f 70 79 28 29 0a 20 20 20 20 23 20 52 65 6d 6f 76 65 20 61 6c 6c 20 65 64 67 65 73 20 63 6f copy().....#.Remove.all.edges.co
7fe0 6e 6e 65 63 74 69 6e 67 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64 20 75 6e 73 75 70 70 6f 72 74 nnecting.supported.and.unsupport
8000 65 64 20 6e 6f 64 65 73 2e 0a 20 20 20 20 48 2e 72 65 6d 6f 76 65 5f 65 64 67 65 73 5f 66 72 6f ed.nodes......H.remove_edges_fro
8020 6d 28 0a 20 20 20 20 20 20 20 20 28 6e 2c 20 6e 62 72 2c 20 64 29 0a 20 20 20 20 20 20 20 20 66 m(.........(n,.nbr,.d).........f
8040 6f 72 20 6e 2c 20 6e 62 72 73 20 69 6e 20 47 2e 61 64 6a 2e 69 74 65 6d 73 28 29 0a 20 20 20 20 or.n,.nbrs.in.G.adj.items().....
8060 20 20 20 20 69 66 20 6e 20 69 6e 20 73 75 70 70 6f 72 74 65 64 5f 6e 6f 64 65 73 0a 20 20 20 20 ....if.n.in.supported_nodes.....
8080 20 20 20 20 66 6f 72 20 6e 62 72 2c 20 64 20 69 6e 20 6e 62 72 73 2e 69 74 65 6d 73 28 29 0a 20 ....for.nbr,.d.in.nbrs.items()..
80a0 20 20 20 20 20 20 20 69 66 20 6e 62 72 20 69 6e 20 75 6e 73 75 70 70 6f 72 74 65 64 5f 6e 6f 64 .......if.nbr.in.unsupported_nod
80c0 65 73 0a 20 20 20 20 29 0a 20 20 20 20 48 2e 72 65 6d 6f 76 65 5f 65 64 67 65 73 5f 66 72 6f 6d es.....).....H.remove_edges_from
80e0 28 0a 20 20 20 20 20 20 20 20 28 6e 2c 20 6e 62 72 2c 20 64 29 0a 20 20 20 20 20 20 20 20 66 6f (.........(n,.nbr,.d).........fo
8100 72 20 6e 2c 20 6e 62 72 73 20 69 6e 20 47 2e 61 64 6a 2e 69 74 65 6d 73 28 29 0a 20 20 20 20 20 r.n,.nbrs.in.G.adj.items()......
8120 20 20 20 69 66 20 6e 20 69 6e 20 75 6e 73 75 70 70 6f 72 74 65 64 5f 6e 6f 64 65 73 0a 20 20 20 ...if.n.in.unsupported_nodes....
8140 20 20 20 20 20 66 6f 72 20 6e 62 72 2c 20 64 20 69 6e 20 6e 62 72 73 2e 69 74 65 6d 73 28 29 0a .....for.nbr,.d.in.nbrs.items().
8160 20 20 20 20 20 20 20 20 69 66 20 6e 62 72 20 69 6e 20 73 75 70 70 6f 72 74 65 64 5f 6e 6f 64 65 ........if.nbr.in.supported_node
8180 73 0a 20 20 20 20 29 0a 0a 20 20 20 20 23 20 43 6f 6c 6c 65 63 74 20 61 6c 6c 20 72 65 6d 6f 76 s.....)......#.Collect.all.remov
81a0 65 64 20 65 64 67 65 73 20 66 6f 72 20 72 65 63 6f 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 20 20 20 ed.edges.for.reconstruction.....
81c0 20 47 5f 6d 69 6e 75 73 5f 48 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 0a 20 20 20 20 47 5f .G_minus_H.=.nx.DiGraph().....G_
81e0 6d 69 6e 75 73 5f 48 2e 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d 28 73 65 74 28 47 2e 65 64 67 minus_H.add_edges_from(set(G.edg
8200 65 73 29 20 2d 20 73 65 74 28 48 2e 65 64 67 65 73 29 29 0a 0a 20 20 20 20 69 66 20 70 6c 6f 74 es).-.set(H.edges))......if.plot
8220 74 69 6e 67 3a 0a 20 20 20 20 20 20 20 20 23 20 50 6c 6f 74 20 74 68 65 20 73 74 72 69 70 70 65 ting:.........#.Plot.the.strippe
8240 64 20 67 72 61 70 68 20 77 69 74 68 20 74 68 65 20 65 64 67 65 73 20 72 65 6d 6f 76 65 64 2e 0a d.graph.with.the.edges.removed..
8260 20 20 20 20 20 20 20 20 5f 6e 6f 64 65 5f 63 6f 6c 6f 72 73 20 3d 20 5b 63 20 66 6f 72 20 5f 2c ........_node_colors.=.[c.for._,
8280 20 63 20 69 6e 20 48 2e 6e 6f 64 65 73 28 64 61 74 61 3d 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 29 .c.in.H.nodes(data="node_color")
82a0 5d 0a 20 20 20 20 20 20 20 20 5f 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 ]........._pos.=.nx.spring_layou
82c0 74 28 48 29 0a 20 20 20 20 20 20 20 20 70 6c 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d t(H).........plt.figure(figsize=
82e0 28 38 2c 20 38 29 29 0a 20 20 20 20 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 (8,.8)).........nx.draw_networkx
8300 5f 65 64 67 65 73 28 48 2c 20 5f 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 33 2c 20 65 64 67 65 5f _edges(H,._pos,.alpha=0.3,.edge_
8320 63 6f 6c 6f 72 3d 22 6b 22 29 0a 20 20 20 20 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f color="k").........nx.draw_netwo
8340 72 6b 78 5f 6e 6f 64 65 73 28 48 2c 20 5f 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 5f 6e rkx_nodes(H,._pos,.node_color=_n
8360 6f 64 65 5f 63 6f 6c 6f 72 73 29 0a 20 20 20 20 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 ode_colors).........nx.draw_netw
8380 6f 72 6b 78 5f 6c 61 62 65 6c 73 28 48 2c 20 5f 70 6f 73 2c 20 66 6f 6e 74 5f 73 69 7a 65 3d 31 orkx_labels(H,._pos,.font_size=1
83a0 34 29 0a 20 20 20 20 20 20 20 20 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 20 20 20 20 20 4).........plt.axis("off")......
83c0 20 20 20 70 6c 74 2e 74 69 74 6c 65 28 22 54 68 65 20 73 74 72 69 70 70 65 64 20 67 72 61 70 68 ...plt.title("The.stripped.graph
83e0 20 77 69 74 68 20 74 68 65 20 65 64 67 65 73 20 72 65 6d 6f 76 65 64 2e 22 29 0a 20 20 20 20 20 .with.the.edges.removed.")......
8400 20 20 20 70 6c 74 2e 73 68 6f 77 28 29 0a 20 20 20 20 20 20 20 20 23 20 50 6c 6f 74 20 74 68 65 ...plt.show().........#.Plot.the
8420 20 74 68 65 20 65 64 67 65 73 20 72 65 6d 6f 76 65 64 2e 0a 20 20 20 20 20 20 20 20 5f 70 6f 73 .the.edges.removed.........._pos
8440 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 5f 6d 69 6e 75 73 5f 48 29 0a 20 .=.nx.spring_layout(G_minus_H)..
8460 20 20 20 20 20 20 20 70 6c 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 29 .......plt.figure(figsize=(8,.8)
8480 29 0a 20 20 20 20 20 20 20 20 6e 63 6c 20 3d 20 5b 47 2e 6e 6f 64 65 73 5b 6e 5d 5b 22 6e 6f 64 ).........ncl.=.[G.nodes[n]["nod
84a0 65 5f 63 6f 6c 6f 72 22 5d 20 66 6f 72 20 6e 20 69 6e 20 47 5f 6d 69 6e 75 73 5f 48 2e 6e 6f 64 e_color"].for.n.in.G_minus_H.nod
84c0 65 73 5d 0a 20 20 20 20 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 es].........nx.draw_networkx_edg
84e0 65 73 28 47 5f 6d 69 6e 75 73 5f 48 2c 20 5f 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 33 2c 20 65 es(G_minus_H,._pos,.alpha=0.3,.e
8500 64 67 65 5f 63 6f 6c 6f 72 3d 22 6b 22 29 0a 20 20 20 20 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e dge_color="k").........nx.draw_n
8520 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 47 5f 6d 69 6e 75 73 5f 48 2c 20 5f 70 6f 73 2c 20 6e etworkx_nodes(G_minus_H,._pos,.n
8540 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 63 6c 29 0a 20 20 20 20 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e ode_color=ncl).........nx.draw_n
8560 65 74 77 6f 72 6b 78 5f 6c 61 62 65 6c 73 28 47 5f 6d 69 6e 75 73 5f 48 2c 20 5f 70 6f 73 2c 20 etworkx_labels(G_minus_H,._pos,.
8580 66 6f 6e 74 5f 73 69 7a 65 3d 31 34 29 0a 20 20 20 20 20 20 20 20 70 6c 74 2e 61 78 69 73 28 22 font_size=14).........plt.axis("
85a0 6f 66 66 22 29 0a 20 20 20 20 20 20 20 20 70 6c 74 2e 74 69 74 6c 65 28 22 54 68 65 20 72 65 6d off").........plt.title("The.rem
85c0 6f 76 65 64 20 65 64 67 65 73 2e 22 29 0a 20 20 20 20 20 20 20 20 70 6c 74 2e 73 68 6f 77 28 29 oved.edges.").........plt.show()
85e0 0a 0a 20 20 20 20 23 20 46 69 6e 64 20 74 68 65 20 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f ......#.Find.the.connected.compo
8600 6e 65 6e 74 73 20 69 6e 20 74 68 65 20 73 74 72 69 70 70 65 64 20 75 6e 64 69 72 65 63 74 65 64 nents.in.the.stripped.undirected
8620 20 67 72 61 70 68 2e 0a 20 20 20 20 23 20 41 6e 64 20 75 73 65 20 74 68 65 20 73 65 74 73 2c 20 .graph......#.And.use.the.sets,.
8640 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 74 6f 20 70 61 specifying.the.components,.to.pa
8660 72 74 69 74 69 6f 6e 0a 20 20 20 20 23 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 69 72 65 63 rtition.....#.the.original.direc
8680 74 65 64 20 67 72 61 70 68 20 69 6e 74 6f 20 61 20 6c 69 73 74 20 6f 66 20 64 69 72 65 63 74 65 ted.graph.into.a.list.of.directe
86a0 64 20 73 75 62 67 72 61 70 68 73 0a 20 20 20 20 23 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 6f d.subgraphs.....#.that.contain.o
86c0 6e 6c 79 20 65 6e 74 69 72 65 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 72 20 65 6e 74 69 72 65 nly.entirely.supported.or.entire
86e0 6c 79 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6e 6f 64 65 73 2e 0a 20 20 20 20 73 75 62 67 72 61 ly.unsupported.nodes......subgra
8700 70 68 73 20 3d 20 5b 0a 20 20 20 20 20 20 20 20 48 2e 73 75 62 67 72 61 70 68 28 63 29 2e 63 6f phs.=.[.........H.subgraph(c).co
8720 70 79 28 29 20 66 6f 72 20 63 20 69 6e 20 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f py().for.c.in.nx.connected_compo
8740 6e 65 6e 74 73 28 48 2e 74 6f 5f 75 6e 64 69 72 65 63 74 65 64 28 29 29 0a 20 20 20 20 5d 0a 0a nents(H.to_undirected()).....]..
8760 20 20 20 20 72 65 74 75 72 6e 20 73 75 62 67 72 61 70 68 73 2c 20 47 5f 6d 69 6e 75 73 5f 48 0a ....return.subgraphs,.G_minus_H.
8780 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ..##############################
87a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
87c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 72 65 61 74 65 20 61 6e 20 65 78 #################.#.Create.an.ex
87e0 61 6d 70 6c 65 20 64 69 72 65 63 74 65 64 20 67 72 61 70 68 2e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d ample.directed.graph..#.--------
8800 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 54 68 -------------------------.#.#.Th
8820 69 73 20 64 69 72 65 63 74 65 64 20 67 72 61 70 68 20 68 61 73 20 6f 6e 65 20 69 6e 70 75 74 20 is.directed.graph.has.one.input.
8840 6e 6f 64 65 20 6c 61 62 65 6c 65 64 20 60 69 6e 60 20 61 6e 64 20 70 6c 6f 74 74 65 64 20 69 6e node.labeled.`in`.and.plotted.in
8860 20 62 6c 75 65 20 63 6f 6c 6f 72 0a 23 20 61 6e 64 20 6f 6e 65 20 6f 75 74 70 75 74 20 6e 6f 64 .blue.color.#.and.one.output.nod
8880 65 20 6c 61 62 65 6c 65 64 20 60 6f 75 74 60 20 61 6e 64 20 70 6c 6f 74 74 65 64 20 69 6e 20 6d e.labeled.`out`.and.plotted.in.m
88a0 61 67 65 6e 74 61 20 63 6f 6c 6f 72 2e 0a 23 20 54 68 65 20 6f 74 68 65 72 20 73 69 78 20 6e 6f agenta.color..#.The.other.six.no
88c0 64 65 73 20 61 72 65 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20 66 6f 75 72 20 60 73 75 70 70 des.are.classified.as.four.`supp
88e0 6f 72 74 65 64 60 20 70 6c 6f 74 74 65 64 20 69 6e 20 67 72 65 65 6e 20 63 6f 6c 6f 72 0a 23 20 orted`.plotted.in.green.color.#.
8900 61 6e 64 20 74 77 6f 20 60 75 6e 73 75 70 70 6f 72 74 65 64 60 20 70 6c 6f 74 74 65 64 20 69 6e and.two.`unsupported`.plotted.in
8920 20 72 65 64 20 63 6f 6c 6f 72 2e 20 54 68 65 20 67 6f 61 6c 20 69 73 20 63 6f 6d 70 75 74 69 6e .red.color..The.goal.is.computin
8940 67 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 73 75 62 67 72 61 70 68 73 20 74 68 61 74 20 63 6f 6e g.a.list.#.of.subgraphs.that.con
8960 74 61 69 6e 20 6f 6e 6c 79 20 65 6e 74 69 72 65 6c 79 20 60 73 75 70 70 6f 72 74 65 64 60 20 6f tain.only.entirely.`supported`.o
8980 72 20 60 75 6e 73 75 70 70 6f 72 74 65 64 60 20 6e 6f 64 65 73 2e 0a 47 5f 65 78 20 3d 20 6e 78 r.`unsupported`.nodes..G_ex.=.nx
89a0 2e 44 69 47 72 61 70 68 28 29 0a 47 5f 65 78 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 5b .DiGraph().G_ex.add_nodes_from([
89c0 22 49 6e 22 5d 2c 20 6e 6f 64 65 5f 74 79 70 65 3d 22 69 6e 70 75 74 22 2c 20 6e 6f 64 65 5f 63 "In"],.node_type="input",.node_c
89e0 6f 6c 6f 72 3d 22 62 22 29 0a 47 5f 65 78 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 5b 22 olor="b").G_ex.add_nodes_from(["
8a00 41 22 2c 20 22 43 22 2c 20 22 45 22 2c 20 22 46 22 5d 2c 20 6e 6f 64 65 5f 74 79 70 65 3d 22 73 A",."C",."E",."F"],.node_type="s
8a20 75 70 70 6f 72 74 65 64 22 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 67 22 29 0a 47 5f 65 78 2e upported",.node_color="g").G_ex.
8a40 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 5b 22 42 22 2c 20 22 44 22 5d 2c 20 6e 6f 64 65 5f add_nodes_from(["B",."D"],.node_
8a60 74 79 70 65 3d 22 75 6e 73 75 70 70 6f 72 74 65 64 22 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 type="unsupported",.node_color="
8a80 72 22 29 0a 47 5f 65 78 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 5b 22 4f 75 74 22 5d 2c r").G_ex.add_nodes_from(["Out"],
8aa0 20 6e 6f 64 65 5f 74 79 70 65 3d 22 6f 75 74 70 75 74 22 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d .node_type="output",.node_color=
8ac0 22 6d 22 29 0a 47 5f 65 78 2e 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d 28 0a 20 20 20 20 5b 0a "m").G_ex.add_edges_from(.....[.
8ae0 20 20 20 20 20 20 20 20 28 22 49 6e 22 2c 20 22 41 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 41 ........("In",."A"),.........("A
8b00 22 2c 20 22 42 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 42 22 2c 20 22 43 22 29 2c 0a 20 20 20 ",."B"),.........("B",."C"),....
8b20 20 20 20 20 20 28 22 42 22 2c 20 22 44 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 44 22 2c 20 22 .....("B",."D"),.........("D",."
8b40 45 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 43 22 2c 20 22 46 22 29 2c 0a 20 20 20 20 20 20 20 E"),.........("C",."F"),........
8b60 20 28 22 45 22 2c 20 22 46 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 46 22 2c 20 22 4f 75 74 22 .("E",."F"),.........("F",."Out"
8b80 29 2c 0a 20 20 20 20 5d 0a 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ),.....].)..####################
8ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c ###########################.#.Pl
8be0 6f 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 67 72 61 70 68 2e 0a 23 20 2d 2d 2d 2d 2d 2d 2d ot.the.original.graph..#.-------
8c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 6e 6f 64 65 5f 63 6f 6c 6f 72 5f 6c -----------------.#.node_color_l
8c20 69 73 74 20 3d 20 5b 6e 63 20 66 6f 72 20 5f 2c 20 6e 63 20 69 6e 20 47 5f 65 78 2e 6e 6f 64 65 ist.=.[nc.for._,.nc.in.G_ex.node
8c40 73 28 64 61 74 61 3d 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 29 5d 0a 70 6f 73 20 3d 20 6e 78 2e 73 s(data="node_color")].pos.=.nx.s
8c60 70 65 63 74 72 61 6c 5f 6c 61 79 6f 75 74 28 47 5f 65 78 29 0a 70 6c 74 2e 66 69 67 75 72 65 28 pectral_layout(G_ex).plt.figure(
8c80 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 29 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 figsize=(8,.8)).nx.draw_networkx
8ca0 5f 65 64 67 65 73 28 47 5f 65 78 2c 20 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 33 2c 20 65 64 67 _edges(G_ex,.pos,.alpha=0.3,.edg
8cc0 65 5f 63 6f 6c 6f 72 3d 22 6b 22 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f e_color="k").nx.draw_networkx_no
8ce0 64 65 73 28 47 5f 65 78 2c 20 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 38 2c 20 6e 6f 64 65 5f 63 des(G_ex,.pos,.alpha=0.8,.node_c
8d00 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c 6f 72 5f 6c 69 73 74 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 olor=node_color_list).nx.draw_ne
8d20 74 77 6f 72 6b 78 5f 6c 61 62 65 6c 73 28 47 5f 65 78 2c 20 70 6f 73 2c 20 66 6f 6e 74 5f 73 69 tworkx_labels(G_ex,.pos,.font_si
8d40 7a 65 3d 31 34 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 6c 74 2e 74 69 74 6c 65 ze=14).plt.axis("off").plt.title
8d60 28 22 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 67 72 61 70 68 2e 22 29 0a 70 6c 74 2e 73 68 6f 77 ("The.original.graph.").plt.show
8d80 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ()..############################
8da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 61 6c 63 75 6c 61 74 65 20 ###################.#.Calculate.
8de0 74 68 65 20 73 75 62 67 72 61 70 68 73 20 77 69 74 68 20 70 6c 6f 74 74 69 6e 67 20 61 6c 6c 20 the.subgraphs.with.plotting.all.
8e00 72 65 73 75 6c 74 73 20 6f 66 20 69 6e 74 65 6d 65 64 69 61 74 65 20 73 74 65 70 73 2e 0a 23 20 results.of.intemediate.steps..#.
8e20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
8e40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
8e60 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 73 75 62 67 72 61 70 68 73 5f 6f 66 5f 47 5f 65 78 2c 20 72 65 6d -------.#.subgraphs_of_G_ex,.rem
8e80 6f 76 65 64 5f 65 64 67 65 73 20 3d 20 67 72 61 70 68 5f 70 61 72 74 69 74 69 6f 6e 69 6e 67 28 oved_edges.=.graph_partitioning(
8ea0 47 5f 65 78 2c 20 70 6c 6f 74 74 69 6e 67 3d 54 72 75 65 29 0a 0a 23 23 23 23 23 23 23 23 23 23 G_ex,.plotting=True)..##########
8ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8f00 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 68 65 20 72 65 73 75 6c 74 73 3a 20 65 76 65 72 79 20 #####.#.Plot.the.results:.every.
8f20 73 75 62 67 72 61 70 68 20 69 6e 20 74 68 65 20 6c 69 73 74 2e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d subgraph.in.the.list..#.--------
8f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
8f60 2d 2d 2d 2d 2d 0a 23 0a 66 6f 72 20 73 75 62 67 72 61 70 68 20 69 6e 20 73 75 62 67 72 61 70 68 -----.#.for.subgraph.in.subgraph
8f80 73 5f 6f 66 5f 47 5f 65 78 3a 0a 20 20 20 20 5f 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f s_of_G_ex:....._pos.=.nx.spring_
8fa0 6c 61 79 6f 75 74 28 73 75 62 67 72 61 70 68 29 0a 20 20 20 20 70 6c 74 2e 66 69 67 75 72 65 28 layout(subgraph).....plt.figure(
8fc0 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 29 29 0a 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 figsize=(8,.8)).....nx.draw_netw
8fe0 6f 72 6b 78 5f 65 64 67 65 73 28 73 75 62 67 72 61 70 68 2c 20 5f 70 6f 73 2c 20 61 6c 70 68 61 orkx_edges(subgraph,._pos,.alpha
9000 3d 30 2e 33 2c 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 6b 22 29 0a 20 20 20 20 6e 6f 64 65 5f 63 =0.3,.edge_color="k").....node_c
9020 6f 6c 6f 72 5f 6c 69 73 74 5f 63 20 3d 20 5b 6e 63 20 66 6f 72 20 5f 2c 20 6e 63 20 69 6e 20 73 olor_list_c.=.[nc.for._,.nc.in.s
9040 75 62 67 72 61 70 68 2e 6e 6f 64 65 73 28 64 61 74 61 3d 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 29 ubgraph.nodes(data="node_color")
9060 5d 0a 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 73 75 62 ].....nx.draw_networkx_nodes(sub
9080 67 72 61 70 68 2c 20 5f 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c graph,._pos,.node_color=node_col
90a0 6f 72 5f 6c 69 73 74 5f 63 29 0a 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f or_list_c).....nx.draw_networkx_
90c0 6c 61 62 65 6c 73 28 73 75 62 67 72 61 70 68 2c 20 5f 70 6f 73 2c 20 66 6f 6e 74 5f 73 69 7a 65 labels(subgraph,._pos,.font_size
90e0 3d 31 34 29 0a 20 20 20 20 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 20 20 20 20 70 6c 74 =14).....plt.axis("off").....plt
9100 2e 74 69 74 6c 65 28 22 4f 6e 65 20 6f 66 20 74 68 65 20 73 75 62 67 72 61 70 68 73 2e 22 29 0a .title("One.of.the.subgraphs.").
9120 20 20 20 20 70 6c 74 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ....plt.show()..################
9140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############################.
9180 23 20 50 75 74 20 74 68 65 20 67 72 61 70 68 20 62 61 63 6b 20 66 72 6f 6d 20 74 68 65 20 6c 69 #.Put.the.graph.back.from.the.li
91a0 73 74 20 6f 66 20 73 75 62 67 72 61 70 68 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d st.of.subgraphs.#.--------------
91c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a -------------------------------.
91e0 23 0a 47 5f 65 78 5f 72 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 0a 23 20 43 6f 6d 70 6f 73 #.G_ex_r.=.nx.DiGraph().#.Compos
9200 69 6e 67 20 61 6c 6c 20 73 75 62 67 72 61 70 68 73 2e 0a 66 6f 72 20 73 75 62 67 72 61 70 68 20 ing.all.subgraphs..for.subgraph.
9220 69 6e 20 73 75 62 67 72 61 70 68 73 5f 6f 66 5f 47 5f 65 78 3a 0a 20 20 20 20 47 5f 65 78 5f 72 in.subgraphs_of_G_ex:.....G_ex_r
9240 20 3d 20 6e 78 2e 63 6f 6d 70 6f 73 65 28 47 5f 65 78 5f 72 2c 20 73 75 62 67 72 61 70 68 29 0a .=.nx.compose(G_ex_r,.subgraph).
9260 23 20 41 64 64 69 6e 67 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 73 74 6f 72 65 64 20 65 #.Adding.the.previously.stored.e
9280 64 67 65 73 2e 0a 47 5f 65 78 5f 72 2e 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d 28 72 65 6d 6f dges..G_ex_r.add_edges_from(remo
92a0 76 65 64 5f 65 64 67 65 73 2e 65 64 67 65 73 28 29 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 ved_edges.edges())..############
92c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
92e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9300 23 23 23 0a 23 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 67 72 ###.#.Check.that.the.original.gr
9320 61 70 68 20 61 6e 64 20 74 68 65 20 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20 67 72 61 70 68 73 aph.and.the.reconstructed.graphs
9340 20 61 72 65 20 69 73 6f 6d 6f 72 70 68 69 63 2e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .are.isomorphic..#.-------------
9360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
9380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a -----------------------------.#.
93a0 61 73 73 65 72 74 20 6e 78 2e 69 73 5f 69 73 6f 6d 6f 72 70 68 69 63 28 47 5f 65 78 2c 20 47 5f assert.nx.is_isomorphic(G_ex,.G_
93c0 65 78 5f 72 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ex_r)..#########################
93e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 68 ######################.#.Plot.th
9420 65 20 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20 67 72 61 70 68 2e 0a 23 20 2d 2d 2d 2d 2d 2d 2d e.reconstructed.graph..#.-------
9440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 6e 6f 64 65 5f 63 6f ----------------------.#.node_co
9460 6c 6f 72 5f 6c 69 73 74 20 3d 20 5b 6e 63 20 66 6f 72 20 5f 2c 20 6e 63 20 69 6e 20 47 5f 65 78 lor_list.=.[nc.for._,.nc.in.G_ex
9480 5f 72 2e 6e 6f 64 65 73 28 64 61 74 61 3d 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 29 5d 0a 70 6f 73 _r.nodes(data="node_color")].pos
94a0 20 3d 20 6e 78 2e 73 70 65 63 74 72 61 6c 5f 6c 61 79 6f 75 74 28 47 5f 65 78 5f 72 29 0a 70 6c .=.nx.spectral_layout(G_ex_r).pl
94c0 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 29 29 0a 6e 78 2e 64 72 61 77 t.figure(figsize=(8,.8)).nx.draw
94e0 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 47 5f 65 78 5f 72 2c 20 70 6f 73 2c 20 61 6c 70 _networkx_edges(G_ex_r,.pos,.alp
9500 68 61 3d 30 2e 33 2c 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 6b 22 29 0a 6e 78 2e 64 72 61 77 5f ha=0.3,.edge_color="k").nx.draw_
9520 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 47 5f 65 78 5f 72 2c 20 70 6f 73 2c 20 61 6c 70 68 networkx_nodes(G_ex_r,.pos,.alph
9540 61 3d 30 2e 38 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c 6f 72 5f 6c 69 73 a=0.8,.node_color=node_color_lis
9560 74 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6c 61 62 65 6c 73 28 47 5f 65 78 5f t).nx.draw_networkx_labels(G_ex_
9580 72 2c 20 70 6f 73 2c 20 66 6f 6e 74 5f 73 69 7a 65 3d 31 34 29 0a 70 6c 74 2e 61 78 69 73 28 22 r,.pos,.font_size=14).plt.axis("
95a0 6f 66 66 22 29 0a 70 6c 74 2e 74 69 74 6c 65 28 22 54 68 65 20 72 65 63 6f 6e 73 74 72 75 63 74 off").plt.title("The.reconstruct
95c0 65 64 20 67 72 61 70 68 2e 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 ed.graph.").plt.show().PK.......
95e0 00 1d 7b 57 56 bf 97 02 92 0f 04 00 00 0f 04 00 00 16 00 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f ..{WV................algorithms/
9600 70 6c 6f 74 5f 72 63 6d 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d plot_rcm.py""".=================
9620 3d 3d 3d 3d 3d 0a 52 65 76 65 72 73 65 20 43 75 74 68 69 6c 6c 2d 2d 4d 63 4b 65 65 0a 3d 3d 3d =====.Reverse.Cuthill--McKee.===
9640 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 43 75 74 68 69 6c 6c 2d 4d 63 4b ===================..Cuthill-McK
9660 65 65 20 6f 72 64 65 72 69 6e 67 20 6f 66 20 6d 61 74 72 69 63 65 73 0a 0a 54 68 65 20 72 65 76 ee.ordering.of.matrices..The.rev
9680 65 72 73 65 20 43 75 74 68 69 6c 6c 2d 2d 4d 63 4b 65 65 20 61 6c 67 6f 72 69 74 68 6d 20 67 69 erse.Cuthill--McKee.algorithm.gi
96a0 76 65 73 20 61 20 73 70 61 72 73 65 20 6d 61 74 72 69 78 20 6f 72 64 65 72 69 6e 67 20 74 68 61 ves.a.sparse.matrix.ordering.tha
96c0 74 0a 72 65 64 75 63 65 73 20 74 68 65 20 6d 61 74 72 69 78 20 62 61 6e 64 77 69 64 74 68 2e 0a t.reduces.the.matrix.bandwidth..
96e0 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d """..import.numpy.as.np.import.m
9700 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 73 atplotlib.pyplot.as.plt.import.s
9720 65 61 62 6f 72 6e 20 61 73 20 73 6e 73 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 eaborn.as.sns.import.networkx.as
9740 20 6e 78 0a 0a 0a 23 20 62 75 69 6c 64 20 6c 6f 77 2d 62 61 6e 64 77 69 64 74 68 20 6d 61 74 72 .nx...#.build.low-bandwidth.matr
9760 69 78 0a 47 20 3d 20 6e 78 2e 67 72 69 64 5f 32 64 5f 67 72 61 70 68 28 33 2c 20 33 29 0a 72 63 ix.G.=.nx.grid_2d_graph(3,.3).rc
9780 6d 20 3d 20 6c 69 73 74 28 6e 78 2e 75 74 69 6c 73 2e 72 65 76 65 72 73 65 5f 63 75 74 68 69 6c m.=.list(nx.utils.reverse_cuthil
97a0 6c 5f 6d 63 6b 65 65 5f 6f 72 64 65 72 69 6e 67 28 47 29 29 0a 70 72 69 6e 74 28 22 6f 72 64 65 l_mckee_ordering(G)).print("orde
97c0 72 69 6e 67 22 2c 20 72 63 6d 29 0a 0a 70 72 69 6e 74 28 22 75 6e 6f 72 64 65 72 65 64 20 4c 61 ring",.rcm)..print("unordered.La
97e0 70 6c 61 63 69 61 6e 20 6d 61 74 72 69 78 22 29 0a 41 20 3d 20 6e 78 2e 6c 61 70 6c 61 63 69 61 placian.matrix").A.=.nx.laplacia
9800 6e 5f 6d 61 74 72 69 78 28 47 29 0a 78 2c 20 79 20 3d 20 6e 70 2e 6e 6f 6e 7a 65 72 6f 28 41 29 n_matrix(G).x,.y.=.np.nonzero(A)
9820 0a 23 20 70 72 69 6e 74 28 66 22 6c 6f 77 65 72 20 62 61 6e 64 77 69 64 74 68 3a 20 7b 28 79 20 .#.print(f"lower.bandwidth:.{(y.
9840 2d 20 78 29 2e 6d 61 78 28 29 7d 22 29 0a 23 20 70 72 69 6e 74 28 66 22 75 70 70 65 72 20 62 61 -.x).max()}").#.print(f"upper.ba
9860 6e 64 77 69 64 74 68 3a 20 7b 28 78 20 2d 20 79 29 2e 6d 61 78 28 29 7d 22 29 0a 70 72 69 6e 74 ndwidth:.{(x.-.y).max()}").print
9880 28 66 22 62 61 6e 64 77 69 64 74 68 3a 20 7b 28 79 20 2d 20 78 29 2e 6d 61 78 28 29 20 2b 20 28 (f"bandwidth:.{(y.-.x).max().+.(
98a0 78 20 2d 20 79 29 2e 6d 61 78 28 29 20 2b 20 31 7d 22 29 0a 70 72 69 6e 74 28 41 29 0a 0a 42 20 x.-.y).max().+.1}").print(A)..B.
98c0 3d 20 6e 78 2e 6c 61 70 6c 61 63 69 61 6e 5f 6d 61 74 72 69 78 28 47 2c 20 6e 6f 64 65 6c 69 73 =.nx.laplacian_matrix(G,.nodelis
98e0 74 3d 72 63 6d 29 0a 70 72 69 6e 74 28 22 6c 6f 77 2d 62 61 6e 64 77 69 64 74 68 20 4c 61 70 6c t=rcm).print("low-bandwidth.Lapl
9900 61 63 69 61 6e 20 6d 61 74 72 69 78 22 29 0a 78 2c 20 79 20 3d 20 6e 70 2e 6e 6f 6e 7a 65 72 6f acian.matrix").x,.y.=.np.nonzero
9920 28 42 29 0a 23 20 70 72 69 6e 74 28 66 22 6c 6f 77 65 72 20 62 61 6e 64 77 69 64 74 68 3a 20 7b (B).#.print(f"lower.bandwidth:.{
9940 28 79 20 2d 20 78 29 2e 6d 61 78 28 29 7d 22 29 0a 23 20 70 72 69 6e 74 28 66 22 75 70 70 65 72 (y.-.x).max()}").#.print(f"upper
9960 20 62 61 6e 64 77 69 64 74 68 3a 20 7b 28 78 20 2d 20 79 29 2e 6d 61 78 28 29 7d 22 29 0a 70 72 .bandwidth:.{(x.-.y).max()}").pr
9980 69 6e 74 28 66 22 62 61 6e 64 77 69 64 74 68 3a 20 7b 28 79 20 2d 20 78 29 2e 6d 61 78 28 29 20 int(f"bandwidth:.{(y.-.x).max().
99a0 2b 20 28 78 20 2d 20 79 29 2e 6d 61 78 28 29 20 2b 20 31 7d 22 29 0a 70 72 69 6e 74 28 42 29 0a +.(x.-.y).max().+.1}").print(B).
99c0 0a 73 6e 73 2e 68 65 61 74 6d 61 70 28 42 2e 74 6f 64 65 6e 73 65 28 29 2c 20 63 62 61 72 3d 46 .sns.heatmap(B.todense(),.cbar=F
99e0 61 6c 73 65 2c 20 73 71 75 61 72 65 3d 54 72 75 65 2c 20 6c 69 6e 65 77 69 64 74 68 73 3d 30 2e alse,.square=True,.linewidths=0.
9a00 35 2c 20 61 6e 6e 6f 74 3d 54 72 75 65 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 5,.annot=True).plt.show().PK....
9a20 00 00 00 00 fb 7a 57 56 cd e1 fa d2 29 04 00 00 29 04 00 00 18 00 00 00 62 61 73 69 63 2f 70 6c .....zWV....)...).......basic/pl
9a40 6f 74 5f 70 72 6f 70 65 72 74 69 65 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 ot_properties.py""".==========.P
9a60 72 6f 70 65 72 74 69 65 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 43 6f 6d 70 75 74 65 20 73 6f roperties.==========..Compute.so
9a80 6d 65 20 6e 65 74 77 6f 72 6b 20 70 72 6f 70 65 72 74 69 65 73 20 66 6f 72 20 74 68 65 20 6c 6f me.network.properties.for.the.lo
9aa0 6c 6c 69 70 6f 70 20 67 72 61 70 68 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f llipop.graph.."""..import.matplo
9ac0 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 tlib.pyplot.as.plt.import.networ
9ae0 6b 78 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 6c 6f 6c 6c 69 70 6f 70 5f 67 72 61 70 68 28 kx.as.nx..G.=.nx.lollipop_graph(
9b00 34 2c 20 36 29 0a 0a 70 61 74 68 6c 65 6e 67 74 68 73 20 3d 20 5b 5d 0a 0a 70 72 69 6e 74 28 22 4,.6)..pathlengths.=.[]..print("
9b20 73 6f 75 72 63 65 20 76 65 72 74 65 78 20 7b 74 61 72 67 65 74 3a 6c 65 6e 67 74 68 2c 20 7d 22 source.vertex.{target:length,.}"
9b40 29 0a 66 6f 72 20 76 20 69 6e 20 47 2e 6e 6f 64 65 73 28 29 3a 0a 20 20 20 20 73 70 6c 20 3d 20 ).for.v.in.G.nodes():.....spl.=.
9b60 64 69 63 74 28 6e 78 2e 73 69 6e 67 6c 65 5f 73 6f 75 72 63 65 5f 73 68 6f 72 74 65 73 74 5f 70 dict(nx.single_source_shortest_p
9b80 61 74 68 5f 6c 65 6e 67 74 68 28 47 2c 20 76 29 29 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 76 ath_length(G,.v)).....print(f"{v
9ba0 7d 20 7b 73 70 6c 7d 20 22 29 0a 20 20 20 20 66 6f 72 20 70 20 69 6e 20 73 70 6c 3a 0a 20 20 20 }.{spl}.").....for.p.in.spl:....
9bc0 20 20 20 20 20 70 61 74 68 6c 65 6e 67 74 68 73 2e 61 70 70 65 6e 64 28 73 70 6c 5b 70 5d 29 0a .....pathlengths.append(spl[p]).
9be0 0a 70 72 69 6e 74 28 29 0a 70 72 69 6e 74 28 66 22 61 76 65 72 61 67 65 20 73 68 6f 72 74 65 73 .print().print(f"average.shortes
9c00 74 20 70 61 74 68 20 6c 65 6e 67 74 68 20 7b 73 75 6d 28 70 61 74 68 6c 65 6e 67 74 68 73 29 20 t.path.length.{sum(pathlengths).
9c20 2f 20 6c 65 6e 28 70 61 74 68 6c 65 6e 67 74 68 73 29 7d 22 29 0a 0a 23 20 68 69 73 74 6f 67 72 /.len(pathlengths)}")..#.histogr
9c40 61 6d 20 6f 66 20 70 61 74 68 20 6c 65 6e 67 74 68 73 0a 64 69 73 74 20 3d 20 7b 7d 0a 66 6f 72 am.of.path.lengths.dist.=.{}.for
9c60 20 70 20 69 6e 20 70 61 74 68 6c 65 6e 67 74 68 73 3a 0a 20 20 20 20 69 66 20 70 20 69 6e 20 64 .p.in.pathlengths:.....if.p.in.d
9c80 69 73 74 3a 0a 20 20 20 20 20 20 20 20 64 69 73 74 5b 70 5d 20 2b 3d 20 31 0a 20 20 20 20 65 6c ist:.........dist[p].+=.1.....el
9ca0 73 65 3a 0a 20 20 20 20 20 20 20 20 64 69 73 74 5b 70 5d 20 3d 20 31 0a 0a 70 72 69 6e 74 28 29 se:.........dist[p].=.1..print()
9cc0 0a 70 72 69 6e 74 28 22 6c 65 6e 67 74 68 20 23 70 61 74 68 73 22 29 0a 76 65 72 74 73 20 3d 20 .print("length.#paths").verts.=.
9ce0 64 69 73 74 2e 6b 65 79 73 28 29 0a 66 6f 72 20 64 20 69 6e 20 73 6f 72 74 65 64 28 76 65 72 74 dist.keys().for.d.in.sorted(vert
9d00 73 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 64 7d 20 7b 64 69 73 74 5b 64 5d 7d 22 29 0a s):.....print(f"{d}.{dist[d]}").
9d20 0a 70 72 69 6e 74 28 66 22 72 61 64 69 75 73 3a 20 7b 6e 78 2e 72 61 64 69 75 73 28 47 29 7d 22 .print(f"radius:.{nx.radius(G)}"
9d40 29 0a 70 72 69 6e 74 28 66 22 64 69 61 6d 65 74 65 72 3a 20 7b 6e 78 2e 64 69 61 6d 65 74 65 72 ).print(f"diameter:.{nx.diameter
9d60 28 47 29 7d 22 29 0a 70 72 69 6e 74 28 66 22 65 63 63 65 6e 74 72 69 63 69 74 79 3a 20 7b 6e 78 (G)}").print(f"eccentricity:.{nx
9d80 2e 65 63 63 65 6e 74 72 69 63 69 74 79 28 47 29 7d 22 29 0a 70 72 69 6e 74 28 66 22 63 65 6e 74 .eccentricity(G)}").print(f"cent
9da0 65 72 3a 20 7b 6e 78 2e 63 65 6e 74 65 72 28 47 29 7d 22 29 0a 70 72 69 6e 74 28 66 22 70 65 72 er:.{nx.center(G)}").print(f"per
9dc0 69 70 68 65 72 79 3a 20 7b 6e 78 2e 70 65 72 69 70 68 65 72 79 28 47 29 7d 22 29 0a 70 72 69 6e iphery:.{nx.periphery(G)}").prin
9de0 74 28 66 22 64 65 6e 73 69 74 79 3a 20 7b 6e 78 2e 64 65 6e 73 69 74 79 28 47 29 7d 22 29 0a 0a t(f"density:.{nx.density(G)}")..
9e00 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 33 pos.=.nx.spring_layout(G,.seed=3
9e20 30 36 38 29 20 20 23 20 53 65 65 64 20 6c 61 79 6f 75 74 20 66 6f 72 20 72 65 70 72 6f 64 75 63 068)..#.Seed.layout.for.reproduc
9e40 69 62 69 6c 69 74 79 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 3d 70 6f 73 2c 20 77 69 74 68 ibility.nx.draw(G,.pos=pos,.with
9e60 5f 6c 61 62 65 6c 73 3d 54 72 75 65 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 _labels=True).plt.show().PK.....
9e80 00 00 00 fb 7a 57 56 e7 2e 09 89 0d 02 00 00 0d 02 00 00 18 00 00 00 62 61 73 69 63 2f 70 6c 6f ....zWV................basic/plo
9ea0 74 5f 72 65 61 64 5f 77 72 69 74 65 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d t_read_write.py""".=============
9ec0 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 67 72 61 70 68 73 2e =========.Read.and.write.graphs.
9ee0 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 52 65 61 64 20 61 6e .======================..Read.an
9f00 64 20 77 72 69 74 65 20 67 72 61 70 68 73 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 d.write.graphs.."""..import.matp
9f20 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 lotlib.pyplot.as.plt.import.netw
9f40 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 67 72 69 64 5f 32 64 5f 67 72 61 70 68 orkx.as.nx..G.=.nx.grid_2d_graph
9f60 28 35 2c 20 35 29 20 20 23 20 35 78 35 20 67 72 69 64 0a 0a 23 20 70 72 69 6e 74 20 74 68 65 20 (5,.5)..#.5x5.grid..#.print.the.
9f80 61 64 6a 61 63 65 6e 63 79 20 6c 69 73 74 0a 66 6f 72 20 6c 69 6e 65 20 69 6e 20 6e 78 2e 67 65 adjacency.list.for.line.in.nx.ge
9fa0 6e 65 72 61 74 65 5f 61 64 6a 6c 69 73 74 28 47 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 6c 69 6e nerate_adjlist(G):.....print(lin
9fc0 65 29 0a 23 20 77 72 69 74 65 20 65 64 67 65 6c 69 73 74 20 74 6f 20 67 72 69 64 2e 65 64 67 65 e).#.write.edgelist.to.grid.edge
9fe0 6c 69 73 74 0a 6e 78 2e 77 72 69 74 65 5f 65 64 67 65 6c 69 73 74 28 47 2c 20 70 61 74 68 3d 22 list.nx.write_edgelist(G,.path="
a000 67 72 69 64 2e 65 64 67 65 6c 69 73 74 22 2c 20 64 65 6c 69 6d 69 74 65 72 3d 22 3a 22 29 0a 23 grid.edgelist",.delimiter=":").#
a020 20 72 65 61 64 20 65 64 67 65 6c 69 73 74 20 66 72 6f 6d 20 67 72 69 64 2e 65 64 67 65 6c 69 73 .read.edgelist.from.grid.edgelis
a040 74 0a 48 20 3d 20 6e 78 2e 72 65 61 64 5f 65 64 67 65 6c 69 73 74 28 70 61 74 68 3d 22 67 72 69 t.H.=.nx.read_edgelist(path="gri
a060 64 2e 65 64 67 65 6c 69 73 74 22 2c 20 64 65 6c 69 6d 69 74 65 72 3d 22 3a 22 29 0a 0a 70 6f 73 d.edgelist",.delimiter=":")..pos
a080 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 48 2c 20 73 65 65 64 3d 32 30 30 29 .=.nx.spring_layout(H,.seed=200)
a0a0 0a 6e 78 2e 64 72 61 77 28 48 2c 20 70 6f 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 .nx.draw(H,.pos).plt.show().PK..
a0c0 14 00 00 00 00 00 fb 7a 57 56 46 e4 8f 07 d8 04 00 00 d8 04 00 00 1a 00 00 00 62 61 73 69 63 2f .......zWVF...............basic/
a0e0 70 6c 6f 74 5f 73 69 6d 70 6c 65 5f 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d plot_simple_graph.py""".========
a100 3d 3d 3d 3d 0a 53 69 6d 70 6c 65 20 67 72 61 70 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ====.Simple.graph.============..
a120 44 72 61 77 20 73 69 6d 70 6c 65 20 67 72 61 70 68 20 77 69 74 68 20 6d 61 6e 75 61 6c 20 6c 61 Draw.simple.graph.with.manual.la
a140 79 6f 75 74 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 yout.."""..import.networkx.as.nx
a160 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 .import.matplotlib.pyplot.as.plt
a180 0a 0a 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 31 2c 20 32 ..G.=.nx.Graph().G.add_edge(1,.2
a1a0 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 31 2c 20 33 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 31 2c ).G.add_edge(1,.3).G.add_edge(1,
a1c0 20 35 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 32 2c 20 33 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 .5).G.add_edge(2,.3).G.add_edge(
a1e0 33 2c 20 34 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 34 2c 20 35 29 0a 0a 23 20 65 78 70 6c 69 63 3,.4).G.add_edge(4,.5)..#.explic
a200 69 74 6c 79 20 73 65 74 20 70 6f 73 69 74 69 6f 6e 73 0a 70 6f 73 20 3d 20 7b 31 3a 20 28 30 2c itly.set.positions.pos.=.{1:.(0,
a220 20 30 29 2c 20 32 3a 20 28 2d 31 2c 20 30 2e 33 29 2c 20 33 3a 20 28 32 2c 20 30 2e 31 37 29 2c .0),.2:.(-1,.0.3),.3:.(2,.0.17),
a240 20 34 3a 20 28 34 2c 20 30 2e 32 35 35 29 2c 20 35 3a 20 28 35 2c 20 30 2e 30 33 29 7d 0a 0a 6f .4:.(4,.0.255),.5:.(5,.0.03)}..o
a260 70 74 69 6f 6e 73 20 3d 20 7b 0a 20 20 20 20 22 66 6f 6e 74 5f 73 69 7a 65 22 3a 20 33 36 2c 0a ptions.=.{....."font_size":.36,.
a280 20 20 20 20 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 33 30 30 30 2c 0a 20 20 20 20 22 6e 6f 64 65 ...."node_size":.3000,....."node
a2a0 5f 63 6f 6c 6f 72 22 3a 20 22 77 68 69 74 65 22 2c 0a 20 20 20 20 22 65 64 67 65 63 6f 6c 6f 72 _color":."white",....."edgecolor
a2c0 73 22 3a 20 22 62 6c 61 63 6b 22 2c 0a 20 20 20 20 22 6c 69 6e 65 77 69 64 74 68 73 22 3a 20 35 s":."black",....."linewidths":.5
a2e0 2c 0a 20 20 20 20 22 77 69 64 74 68 22 3a 20 35 2c 0a 7d 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 ,....."width":.5,.}.nx.draw_netw
a300 6f 72 6b 78 28 47 2c 20 70 6f 73 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 0a 23 20 53 65 74 20 6d orkx(G,.pos,.**options)..#.Set.m
a320 61 72 67 69 6e 73 20 66 6f 72 20 74 68 65 20 61 78 65 73 20 73 6f 20 74 68 61 74 20 6e 6f 64 65 argins.for.the.axes.so.that.node
a340 73 20 61 72 65 6e 27 74 20 63 6c 69 70 70 65 64 0a 61 78 20 3d 20 70 6c 74 2e 67 63 61 28 29 0a s.aren't.clipped.ax.=.plt.gca().
a360 61 78 2e 6d 61 72 67 69 6e 73 28 30 2e 32 30 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 ax.margins(0.20).plt.axis("off")
a380 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 0a 23 20 25 25 0a 23 20 41 20 64 69 72 65 63 74 65 64 20 67 .plt.show()..#.%%.#.A.directed.g
a3a0 72 61 70 68 0a 0a 47 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 5b 28 30 2c 20 33 29 2c 20 28 31 raph..G.=.nx.DiGraph([(0,.3),.(1
a3c0 2c 20 33 29 2c 20 28 32 2c 20 34 29 2c 20 28 33 2c 20 35 29 2c 20 28 33 2c 20 36 29 2c 20 28 34 ,.3),.(2,.4),.(3,.5),.(3,.6),.(4
a3e0 2c 20 36 29 2c 20 28 35 2c 20 36 29 5d 29 0a 0a 23 20 67 72 6f 75 70 20 6e 6f 64 65 73 20 62 79 ,.6),.(5,.6)])..#.group.nodes.by
a400 20 63 6f 6c 75 6d 6e 0a 6c 65 66 74 5f 6e 6f 64 65 73 20 3d 20 5b 30 2c 20 31 2c 20 32 5d 0a 6d .column.left_nodes.=.[0,.1,.2].m
a420 69 64 64 6c 65 5f 6e 6f 64 65 73 20 3d 20 5b 33 2c 20 34 5d 0a 72 69 67 68 74 5f 6e 6f 64 65 73 iddle_nodes.=.[3,.4].right_nodes
a440 20 3d 20 5b 35 2c 20 36 5d 0a 0a 23 20 73 65 74 20 74 68 65 20 70 6f 73 69 74 69 6f 6e 20 61 63 .=.[5,.6]..#.set.the.position.ac
a460 63 6f 72 64 69 6e 67 20 74 6f 20 63 6f 6c 75 6d 6e 20 28 78 2d 63 6f 6f 72 64 29 0a 70 6f 73 20 cording.to.column.(x-coord).pos.
a480 3d 20 7b 6e 3a 20 28 30 2c 20 69 29 20 66 6f 72 20 69 2c 20 6e 20 69 6e 20 65 6e 75 6d 65 72 61 =.{n:.(0,.i).for.i,.n.in.enumera
a4a0 74 65 28 6c 65 66 74 5f 6e 6f 64 65 73 29 7d 0a 70 6f 73 2e 75 70 64 61 74 65 28 7b 6e 3a 20 28 te(left_nodes)}.pos.update({n:.(
a4c0 31 2c 20 69 20 2b 20 30 2e 35 29 20 66 6f 72 20 69 2c 20 6e 20 69 6e 20 65 6e 75 6d 65 72 61 74 1,.i.+.0.5).for.i,.n.in.enumerat
a4e0 65 28 6d 69 64 64 6c 65 5f 6e 6f 64 65 73 29 7d 29 0a 70 6f 73 2e 75 70 64 61 74 65 28 7b 6e 3a e(middle_nodes)}).pos.update({n:
a500 20 28 32 2c 20 69 20 2b 20 30 2e 35 29 20 66 6f 72 20 69 2c 20 6e 20 69 6e 20 65 6e 75 6d 65 72 .(2,.i.+.0.5).for.i,.n.in.enumer
a520 61 74 65 28 72 69 67 68 74 5f 6e 6f 64 65 73 29 7d 29 0a 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 ate(right_nodes)})..nx.draw_netw
a540 6f 72 6b 78 28 47 2c 20 70 6f 73 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 0a 23 20 53 65 74 20 6d orkx(G,.pos,.**options)..#.Set.m
a560 61 72 67 69 6e 73 20 66 6f 72 20 74 68 65 20 61 78 65 73 20 73 6f 20 74 68 61 74 20 6e 6f 64 65 argins.for.the.axes.so.that.node
a580 73 20 61 72 65 6e 27 74 20 63 6c 69 70 70 65 64 0a 61 78 20 3d 20 70 6c 74 2e 67 63 61 28 29 0a s.aren't.clipped.ax.=.plt.gca().
a5a0 61 78 2e 6d 61 72 67 69 6e 73 28 30 2e 32 30 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 ax.margins(0.20).plt.axis("off")
a5c0 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 02 7b 57 56 97 66 db 6e 64 04 .plt.show().PK.........{WV.f.nd.
a5e0 00 00 64 04 00 00 1e 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 77 65 69 67 68 74 65 64 5f ..d.......drawing/plot_weighted_
a600 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 57 65 69 67 68 graph.py""".==============.Weigh
a620 74 65 64 20 47 72 61 70 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 41 6e 20 65 78 61 ted.Graph.==============..An.exa
a640 6d 70 6c 65 20 75 73 69 6e 67 20 47 72 61 70 68 20 61 73 20 61 20 77 65 69 67 68 74 65 64 20 6e mple.using.Graph.as.a.weighted.n
a660 65 74 77 6f 72 6b 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 etwork..""".import.matplotlib.py
a680 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e plot.as.plt.import.networkx.as.n
a6a0 78 0a 0a 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 0a 47 2e 61 64 64 5f 65 64 67 65 28 22 61 x..G.=.nx.Graph()..G.add_edge("a
a6c0 22 2c 20 22 62 22 2c 20 77 65 69 67 68 74 3d 30 2e 36 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 22 ",."b",.weight=0.6).G.add_edge("
a6e0 61 22 2c 20 22 63 22 2c 20 77 65 69 67 68 74 3d 30 2e 32 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 a",."c",.weight=0.2).G.add_edge(
a700 22 63 22 2c 20 22 64 22 2c 20 77 65 69 67 68 74 3d 30 2e 31 29 0a 47 2e 61 64 64 5f 65 64 67 65 "c",."d",.weight=0.1).G.add_edge
a720 28 22 63 22 2c 20 22 65 22 2c 20 77 65 69 67 68 74 3d 30 2e 37 29 0a 47 2e 61 64 64 5f 65 64 67 ("c",."e",.weight=0.7).G.add_edg
a740 65 28 22 63 22 2c 20 22 66 22 2c 20 77 65 69 67 68 74 3d 30 2e 39 29 0a 47 2e 61 64 64 5f 65 64 e("c",."f",.weight=0.9).G.add_ed
a760 67 65 28 22 61 22 2c 20 22 64 22 2c 20 77 65 69 67 68 74 3d 30 2e 33 29 0a 0a 65 6c 61 72 67 65 ge("a",."d",.weight=0.3)..elarge
a780 20 3d 20 5b 28 75 2c 20 76 29 20 66 6f 72 20 28 75 2c 20 76 2c 20 64 29 20 69 6e 20 47 2e 65 64 .=.[(u,.v).for.(u,.v,.d).in.G.ed
a7a0 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 20 69 66 20 64 5b 22 77 65 69 67 68 74 22 5d 20 3e 20 ges(data=True).if.d["weight"].>.
a7c0 30 2e 35 5d 0a 65 73 6d 61 6c 6c 20 3d 20 5b 28 75 2c 20 76 29 20 66 6f 72 20 28 75 2c 20 76 2c 0.5].esmall.=.[(u,.v).for.(u,.v,
a7e0 20 64 29 20 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 20 69 66 20 64 5b 22 .d).in.G.edges(data=True).if.d["
a800 77 65 69 67 68 74 22 5d 20 3c 3d 20 30 2e 35 5d 0a 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e weight"].<=.0.5]..pos.=.nx.sprin
a820 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 37 29 20 20 23 20 70 6f 73 69 74 69 6f 6e 73 g_layout(G,.seed=7)..#.positions
a840 20 66 6f 72 20 61 6c 6c 20 6e 6f 64 65 73 20 2d 20 73 65 65 64 20 66 6f 72 20 72 65 70 72 6f 64 .for.all.nodes.-.seed.for.reprod
a860 75 63 69 62 69 6c 69 74 79 0a 0a 23 20 6e 6f 64 65 73 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f ucibility..#.nodes.nx.draw_netwo
a880 72 6b 78 5f 6e 6f 64 65 73 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 37 30 30 29 rkx_nodes(G,.pos,.node_size=700)
a8a0 0a 0a 23 20 65 64 67 65 73 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 ..#.edges.nx.draw_networkx_edges
a8c0 28 47 2c 20 70 6f 73 2c 20 65 64 67 65 6c 69 73 74 3d 65 6c 61 72 67 65 2c 20 77 69 64 74 68 3d (G,.pos,.edgelist=elarge,.width=
a8e0 36 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 0a 20 20 20 20 47 6).nx.draw_networkx_edges(.....G
a900 2c 20 70 6f 73 2c 20 65 64 67 65 6c 69 73 74 3d 65 73 6d 61 6c 6c 2c 20 77 69 64 74 68 3d 36 2c ,.pos,.edgelist=esmall,.width=6,
a920 20 61 6c 70 68 61 3d 30 2e 35 2c 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 62 22 2c 20 73 74 79 6c .alpha=0.5,.edge_color="b",.styl
a940 65 3d 22 64 61 73 68 65 64 22 0a 29 0a 0a 23 20 6e 6f 64 65 20 6c 61 62 65 6c 73 0a 6e 78 2e 64 e="dashed".)..#.node.labels.nx.d
a960 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6c 61 62 65 6c 73 28 47 2c 20 70 6f 73 2c 20 66 6f 6e 74 raw_networkx_labels(G,.pos,.font
a980 5f 73 69 7a 65 3d 32 30 2c 20 66 6f 6e 74 5f 66 61 6d 69 6c 79 3d 22 73 61 6e 73 2d 73 65 72 69 _size=20,.font_family="sans-seri
a9a0 66 22 29 0a 23 20 65 64 67 65 20 77 65 69 67 68 74 20 6c 61 62 65 6c 73 0a 65 64 67 65 5f 6c 61 f").#.edge.weight.labels.edge_la
a9c0 62 65 6c 73 20 3d 20 6e 78 2e 67 65 74 5f 65 64 67 65 5f 61 74 74 72 69 62 75 74 65 73 28 47 2c bels.=.nx.get_edge_attributes(G,
a9e0 20 22 77 65 69 67 68 74 22 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 ."weight").nx.draw_networkx_edge
aa00 5f 6c 61 62 65 6c 73 28 47 2c 20 70 6f 73 2c 20 65 64 67 65 5f 6c 61 62 65 6c 73 29 0a 0a 61 78 _labels(G,.pos,.edge_labels)..ax
aa20 20 3d 20 70 6c 74 2e 67 63 61 28 29 0a 61 78 2e 6d 61 72 67 69 6e 73 28 30 2e 30 38 29 0a 70 6c .=.plt.gca().ax.margins(0.08).pl
aa40 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 6c 74 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 t.axis("off").plt.tight_layout()
aa60 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 01 7b 57 56 2e 68 51 b1 fc 00 .plt.show().PK.........{WV.hQ...
aa80 00 00 fc 00 00 00 1b 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 73 69 6d 70 6c 65 5f 70 61 ..........drawing/plot_simple_pa
aaa0 74 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 53 69 6d 70 6c 65 20 50 61 74 68 th.py""".===========.Simple.Path
aac0 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 44 72 61 77 20 61 20 67 72 61 70 68 20 77 69 74 68 20 .===========..Draw.a.graph.with.
aae0 6d 61 74 70 6c 6f 74 6c 69 62 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 matplotlib..""".import.matplotli
ab00 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 b.pyplot.as.plt.import.networkx.
ab20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 70 61 74 68 5f 67 72 61 70 68 28 38 29 0a 70 6f 73 20 as.nx..G.=.nx.path_graph(8).pos.
ab40 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 34 37 29 20 20 =.nx.spring_layout(G,.seed=47)..
ab60 23 20 53 65 65 64 20 6c 61 79 6f 75 74 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 #.Seed.layout.for.reproducibilit
ab80 79 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 3d 70 6f 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 y.nx.draw(G,.pos=pos).plt.show()
aba0 0a 50 4b 03 04 14 00 00 00 00 00 fc 7a 57 56 d2 66 e0 26 5b 08 00 00 5b 08 00 00 21 00 00 00 64 .PK.........zWV.f.&[...[...!...d
abc0 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 63 75 73 74 6f 6d 5f 6e 6f 64 65 5f 69 63 6f 6e 73 2e 70 79 rawing/plot_custom_node_icons.py
abe0 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 43 75 73 74 6f 6d 20 6e 6f 64 """.=================.Custom.nod
ac00 65 20 69 63 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 e.icons.=================..Examp
ac20 6c 65 20 6f 66 20 75 73 69 6e 67 20 63 75 73 74 6f 6d 20 69 63 6f 6e 73 20 74 6f 20 72 65 70 72 le.of.using.custom.icons.to.repr
ac40 65 73 65 6e 74 20 6e 6f 64 65 73 20 77 69 74 68 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 0a 0a 49 6d esent.nodes.with.matplotlib...Im
ac60 61 67 65 73 20 66 6f 72 20 6e 6f 64 65 20 69 63 6f 6e 73 20 63 6f 75 72 74 65 73 79 20 6f 66 20 ages.for.node.icons.courtesy.of.
ac80 77 77 77 2e 6d 61 74 65 72 69 61 6c 75 69 2e 63 6f 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 www.materialui.co."""..import.ma
aca0 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 tplotlib.pyplot.as.plt.import.ne
acc0 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 50 49 4c 0a 0a 23 20 49 6d 61 67 65 tworkx.as.nx.import.PIL..#.Image
ace0 20 55 52 4c 73 20 66 6f 72 20 67 72 61 70 68 20 6e 6f 64 65 73 0a 69 63 6f 6e 73 20 3d 20 7b 0a .URLs.for.graph.nodes.icons.=.{.
ad00 20 20 20 20 22 72 6f 75 74 65 72 22 3a 20 22 69 63 6f 6e 73 2f 72 6f 75 74 65 72 5f 62 6c 61 63 ...."router":."icons/router_blac
ad20 6b 5f 31 34 34 78 31 34 34 2e 70 6e 67 22 2c 0a 20 20 20 20 22 73 77 69 74 63 68 22 3a 20 22 69 k_144x144.png",....."switch":."i
ad40 63 6f 6e 73 2f 73 77 69 74 63 68 5f 62 6c 61 63 6b 5f 31 34 34 78 31 34 34 2e 70 6e 67 22 2c 0a cons/switch_black_144x144.png",.
ad60 20 20 20 20 22 50 43 22 3a 20 22 69 63 6f 6e 73 2f 63 6f 6d 70 75 74 65 72 5f 62 6c 61 63 6b 5f ...."PC":."icons/computer_black_
ad80 31 34 34 78 31 34 34 2e 70 6e 67 22 2c 0a 7d 0a 0a 23 20 4c 6f 61 64 20 69 6d 61 67 65 73 0a 69 144x144.png",.}..#.Load.images.i
ada0 6d 61 67 65 73 20 3d 20 7b 6b 3a 20 50 49 4c 2e 49 6d 61 67 65 2e 6f 70 65 6e 28 66 6e 61 6d 65 mages.=.{k:.PIL.Image.open(fname
adc0 29 20 66 6f 72 20 6b 2c 20 66 6e 61 6d 65 20 69 6e 20 69 63 6f 6e 73 2e 69 74 65 6d 73 28 29 7d ).for.k,.fname.in.icons.items()}
ade0 0a 0a 23 20 47 65 6e 65 72 61 74 65 20 74 68 65 20 63 6f 6d 70 75 74 65 72 20 6e 65 74 77 6f 72 ..#.Generate.the.computer.networ
ae00 6b 20 67 72 61 70 68 0a 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 0a 47 2e 61 64 64 5f 6e 6f k.graph.G.=.nx.Graph()..G.add_no
ae20 64 65 28 22 72 6f 75 74 65 72 22 2c 20 69 6d 61 67 65 3d 69 6d 61 67 65 73 5b 22 72 6f 75 74 65 de("router",.image=images["route
ae40 72 22 5d 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 31 2c 20 34 29 3a 0a 20 20 20 20 47 r"]).for.i.in.range(1,.4):.....G
ae60 2e 61 64 64 5f 6e 6f 64 65 28 66 22 73 77 69 74 63 68 5f 7b 69 7d 22 2c 20 69 6d 61 67 65 3d 69 .add_node(f"switch_{i}",.image=i
ae80 6d 61 67 65 73 5b 22 73 77 69 74 63 68 22 5d 29 0a 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 mages["switch"]).....for.j.in.ra
aea0 6e 67 65 28 31 2c 20 34 29 3a 0a 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 6e 6f 64 65 28 22 50 nge(1,.4):.........G.add_node("P
aec0 43 5f 22 20 2b 20 73 74 72 28 69 29 20 2b 20 22 5f 22 20 2b 20 73 74 72 28 6a 29 2c 20 69 6d 61 C_".+.str(i).+."_".+.str(j),.ima
aee0 67 65 3d 69 6d 61 67 65 73 5b 22 50 43 22 5d 29 0a 0a 47 2e 61 64 64 5f 65 64 67 65 28 22 72 6f ge=images["PC"])..G.add_edge("ro
af00 75 74 65 72 22 2c 20 22 73 77 69 74 63 68 5f 31 22 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 22 72 uter",."switch_1").G.add_edge("r
af20 6f 75 74 65 72 22 2c 20 22 73 77 69 74 63 68 5f 32 22 29 0a 47 2e 61 64 64 5f 65 64 67 65 28 22 outer",."switch_2").G.add_edge("
af40 72 6f 75 74 65 72 22 2c 20 22 73 77 69 74 63 68 5f 33 22 29 0a 66 6f 72 20 75 20 69 6e 20 72 61 router",."switch_3").for.u.in.ra
af60 6e 67 65 28 31 2c 20 34 29 3a 0a 20 20 20 20 66 6f 72 20 76 20 69 6e 20 72 61 6e 67 65 28 31 2c nge(1,.4):.....for.v.in.range(1,
af80 20 34 29 3a 0a 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 22 73 77 69 74 63 68 5f .4):.........G.add_edge("switch_
afa0 22 20 2b 20 73 74 72 28 75 29 2c 20 22 50 43 5f 22 20 2b 20 73 74 72 28 75 29 20 2b 20 22 5f 22 ".+.str(u),."PC_".+.str(u).+."_"
afc0 20 2b 20 73 74 72 28 76 29 29 0a 0a 23 20 47 65 74 20 61 20 72 65 70 72 6f 64 75 63 69 62 6c 65 .+.str(v))..#.Get.a.reproducible
afe0 20 6c 61 79 6f 75 74 20 61 6e 64 20 63 72 65 61 74 65 20 66 69 67 75 72 65 0a 70 6f 73 20 3d 20 .layout.and.create.figure.pos.=.
b000 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 31 37 33 34 32 38 39 nx.spring_layout(G,.seed=1734289
b020 32 33 30 29 0a 66 69 67 2c 20 61 78 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 29 0a 0a 23 230).fig,.ax.=.plt.subplots()..#
b040 20 4e 6f 74 65 3a 20 74 68 65 20 6d 69 6e 5f 73 6f 75 72 63 65 2f 74 61 72 67 65 74 5f 6d 61 72 .Note:.the.min_source/target_mar
b060 67 69 6e 20 6b 77 61 72 67 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20 46 61 6e 63 79 41 gin.kwargs.only.work.with.FancyA
b080 72 72 6f 77 50 61 74 63 68 20 6f 62 6a 65 63 74 73 2e 0a 23 20 46 6f 72 63 65 20 74 68 65 20 75 rrowPatch.objects..#.Force.the.u
b0a0 73 65 20 6f 66 20 46 61 6e 63 79 41 72 72 6f 77 50 61 74 63 68 20 66 6f 72 20 65 64 67 65 20 64 se.of.FancyArrowPatch.for.edge.d
b0c0 72 61 77 69 6e 67 20 62 79 20 73 65 74 74 69 6e 67 20 60 61 72 72 6f 77 73 3d 54 72 75 65 60 2c rawing.by.setting.`arrows=True`,
b0e0 0a 23 20 62 75 74 20 73 75 70 70 72 65 73 73 20 61 72 72 6f 77 68 65 61 64 73 20 77 69 74 68 20 .#.but.suppress.arrowheads.with.
b100 60 61 72 72 6f 77 73 74 79 6c 65 3d 22 2d 22 60 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b `arrowstyle="-"`.nx.draw_network
b120 78 5f 65 64 67 65 73 28 0a 20 20 20 20 47 2c 0a 20 20 20 20 70 6f 73 3d 70 6f 73 2c 0a 20 20 20 x_edges(.....G,.....pos=pos,....
b140 20 61 78 3d 61 78 2c 0a 20 20 20 20 61 72 72 6f 77 73 3d 54 72 75 65 2c 0a 20 20 20 20 61 72 72 .ax=ax,.....arrows=True,.....arr
b160 6f 77 73 74 79 6c 65 3d 22 2d 22 2c 0a 20 20 20 20 6d 69 6e 5f 73 6f 75 72 63 65 5f 6d 61 72 67 owstyle="-",.....min_source_marg
b180 69 6e 3d 31 35 2c 0a 20 20 20 20 6d 69 6e 5f 74 61 72 67 65 74 5f 6d 61 72 67 69 6e 3d 31 35 2c in=15,.....min_target_margin=15,
b1a0 0a 29 0a 0a 23 20 54 72 61 6e 73 66 6f 72 6d 20 66 72 6f 6d 20 64 61 74 61 20 63 6f 6f 72 64 69 .)..#.Transform.from.data.coordi
b1c0 6e 61 74 65 73 20 28 73 63 61 6c 65 64 20 62 65 74 77 65 65 6e 20 78 6c 69 6d 20 61 6e 64 20 79 nates.(scaled.between.xlim.and.y
b1e0 6c 69 6d 29 20 74 6f 20 64 69 73 70 6c 61 79 20 63 6f 6f 72 64 69 6e 61 74 65 73 0a 74 72 5f 66 lim).to.display.coordinates.tr_f
b200 69 67 75 72 65 20 3d 20 61 78 2e 74 72 61 6e 73 44 61 74 61 2e 74 72 61 6e 73 66 6f 72 6d 0a 23 igure.=.ax.transData.transform.#
b220 20 54 72 61 6e 73 66 6f 72 6d 20 66 72 6f 6d 20 64 69 73 70 6c 61 79 20 74 6f 20 66 69 67 75 72 .Transform.from.display.to.figur
b240 65 20 63 6f 6f 72 64 69 6e 61 74 65 73 0a 74 72 5f 61 78 65 73 20 3d 20 66 69 67 2e 74 72 61 6e e.coordinates.tr_axes.=.fig.tran
b260 73 46 69 67 75 72 65 2e 69 6e 76 65 72 74 65 64 28 29 2e 74 72 61 6e 73 66 6f 72 6d 0a 0a 23 20 sFigure.inverted().transform..#.
b280 53 65 6c 65 63 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 69 6d 61 67 65 20 28 72 65 Select.the.size.of.the.image.(re
b2a0 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 58 20 61 78 69 73 29 0a 69 63 6f 6e 5f 73 69 7a 65 20 lative.to.the.X.axis).icon_size.
b2c0 3d 20 28 61 78 2e 67 65 74 5f 78 6c 69 6d 28 29 5b 31 5d 20 2d 20 61 78 2e 67 65 74 5f 78 6c 69 =.(ax.get_xlim()[1].-.ax.get_xli
b2e0 6d 28 29 5b 30 5d 29 20 2a 20 30 2e 30 32 35 0a 69 63 6f 6e 5f 63 65 6e 74 65 72 20 3d 20 69 63 m()[0]).*.0.025.icon_center.=.ic
b300 6f 6e 5f 73 69 7a 65 20 2f 20 32 2e 30 0a 0a 23 20 41 64 64 20 74 68 65 20 72 65 73 70 65 63 74 on_size./.2.0..#.Add.the.respect
b320 69 76 65 20 69 6d 61 67 65 20 74 6f 20 65 61 63 68 20 6e 6f 64 65 0a 66 6f 72 20 6e 20 69 6e 20 ive.image.to.each.node.for.n.in.
b340 47 2e 6e 6f 64 65 73 3a 0a 20 20 20 20 78 66 2c 20 79 66 20 3d 20 74 72 5f 66 69 67 75 72 65 28 G.nodes:.....xf,.yf.=.tr_figure(
b360 70 6f 73 5b 6e 5d 29 0a 20 20 20 20 78 61 2c 20 79 61 20 3d 20 74 72 5f 61 78 65 73 28 28 78 66 pos[n]).....xa,.ya.=.tr_axes((xf
b380 2c 20 79 66 29 29 0a 20 20 20 20 23 20 67 65 74 20 6f 76 65 72 6c 61 70 70 65 64 20 61 78 65 73 ,.yf)).....#.get.overlapped.axes
b3a0 20 61 6e 64 20 70 6c 6f 74 20 69 63 6f 6e 0a 20 20 20 20 61 20 3d 20 70 6c 74 2e 61 78 65 73 28 .and.plot.icon.....a.=.plt.axes(
b3c0 5b 78 61 20 2d 20 69 63 6f 6e 5f 63 65 6e 74 65 72 2c 20 79 61 20 2d 20 69 63 6f 6e 5f 63 65 6e [xa.-.icon_center,.ya.-.icon_cen
b3e0 74 65 72 2c 20 69 63 6f 6e 5f 73 69 7a 65 2c 20 69 63 6f 6e 5f 73 69 7a 65 5d 29 0a 20 20 20 20 ter,.icon_size,.icon_size]).....
b400 61 2e 69 6d 73 68 6f 77 28 47 2e 6e 6f 64 65 73 5b 6e 5d 5b 22 69 6d 61 67 65 22 5d 29 0a 20 20 a.imshow(G.nodes[n]["image"])...
b420 20 20 61 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 ..a.axis("off").plt.show().PK...
b440 00 00 00 00 00 fc 7a 57 56 1f 79 51 49 5b 04 00 00 5b 04 00 00 18 00 00 00 64 72 61 77 69 6e 67 ......zWV.yQI[...[.......drawing
b460 2f 70 6c 6f 74 5f 64 69 72 65 63 74 65 64 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d /plot_directed.py""".===========
b480 3d 3d 3d 0a 44 69 72 65 63 74 65 64 20 47 72 61 70 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ===.Directed.Graph.=============
b4a0 3d 0a 0a 44 72 61 77 20 61 20 67 72 61 70 68 20 77 69 74 68 20 64 69 72 65 63 74 65 64 20 65 64 =..Draw.a.graph.with.directed.ed
b4c0 67 65 73 20 75 73 69 6e 67 20 61 20 63 6f 6c 6f 72 6d 61 70 20 61 6e 64 20 64 69 66 66 65 72 65 ges.using.a.colormap.and.differe
b4e0 6e 74 20 6e 6f 64 65 20 73 69 7a 65 73 2e 0a 0a 45 64 67 65 73 20 68 61 76 65 20 64 69 66 66 65 nt.node.sizes...Edges.have.diffe
b500 72 65 6e 74 20 63 6f 6c 6f 72 73 20 61 6e 64 20 61 6c 70 68 61 73 20 28 6f 70 61 63 69 74 79 29 rent.colors.and.alphas.(opacity)
b520 2e 20 44 72 61 77 6e 20 75 73 69 6e 67 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 0a 22 22 22 0a 0a 69 ..Drawn.using.matplotlib.."""..i
b540 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 20 61 73 20 6d 70 6c 0a 69 6d 70 6f 72 74 20 6d mport.matplotlib.as.mpl.import.m
b560 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e atplotlib.pyplot.as.plt.import.n
b580 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 73 65 65 64 20 3d 20 31 33 36 34 38 20 20 23 20 53 etworkx.as.nx..seed.=.13648..#.S
b5a0 65 65 64 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72 73 20 66 6f 72 eed.random.number.generators.for
b5c0 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 0a 47 20 3d 20 6e 78 2e 72 61 6e 64 6f 6d 5f 6b .reproducibility.G.=.nx.random_k
b5e0 5f 6f 75 74 5f 67 72 61 70 68 28 31 30 2c 20 33 2c 20 30 2e 35 2c 20 73 65 65 64 3d 73 65 65 64 _out_graph(10,.3,.0.5,.seed=seed
b600 29 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 ).pos.=.nx.spring_layout(G,.seed
b620 3d 73 65 65 64 29 0a 0a 6e 6f 64 65 5f 73 69 7a 65 73 20 3d 20 5b 33 20 2b 20 31 30 20 2a 20 69 =seed)..node_sizes.=.[3.+.10.*.i
b640 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 47 29 29 5d 0a 4d 20 3d 20 47 2e 6e .for.i.in.range(len(G))].M.=.G.n
b660 75 6d 62 65 72 5f 6f 66 5f 65 64 67 65 73 28 29 0a 65 64 67 65 5f 63 6f 6c 6f 72 73 20 3d 20 72 umber_of_edges().edge_colors.=.r
b680 61 6e 67 65 28 32 2c 20 4d 20 2b 20 32 29 0a 65 64 67 65 5f 61 6c 70 68 61 73 20 3d 20 5b 28 35 ange(2,.M.+.2).edge_alphas.=.[(5
b6a0 20 2b 20 69 29 20 2f 20 28 4d 20 2b 20 34 29 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 4d .+.i)./.(M.+.4).for.i.in.range(M
b6c0 29 5d 0a 63 6d 61 70 20 3d 20 70 6c 74 2e 63 6d 2e 70 6c 61 73 6d 61 0a 0a 6e 6f 64 65 73 20 3d )].cmap.=.plt.cm.plasma..nodes.=
b6e0 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 47 2c 20 70 6f 73 2c 20 .nx.draw_networkx_nodes(G,.pos,.
b700 6e 6f 64 65 5f 73 69 7a 65 3d 6e 6f 64 65 5f 73 69 7a 65 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 node_size=node_sizes,.node_color
b720 3d 22 69 6e 64 69 67 6f 22 29 0a 65 64 67 65 73 20 3d 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f ="indigo").edges.=.nx.draw_netwo
b740 72 6b 78 5f 65 64 67 65 73 28 0a 20 20 20 20 47 2c 0a 20 20 20 20 70 6f 73 2c 0a 20 20 20 20 6e rkx_edges(.....G,.....pos,.....n
b760 6f 64 65 5f 73 69 7a 65 3d 6e 6f 64 65 5f 73 69 7a 65 73 2c 0a 20 20 20 20 61 72 72 6f 77 73 74 ode_size=node_sizes,.....arrowst
b780 79 6c 65 3d 22 2d 3e 22 2c 0a 20 20 20 20 61 72 72 6f 77 73 69 7a 65 3d 31 30 2c 0a 20 20 20 20 yle="->",.....arrowsize=10,.....
b7a0 65 64 67 65 5f 63 6f 6c 6f 72 3d 65 64 67 65 5f 63 6f 6c 6f 72 73 2c 0a 20 20 20 20 65 64 67 65 edge_color=edge_colors,.....edge
b7c0 5f 63 6d 61 70 3d 63 6d 61 70 2c 0a 20 20 20 20 77 69 64 74 68 3d 32 2c 0a 29 0a 23 20 73 65 74 _cmap=cmap,.....width=2,.).#.set
b7e0 20 61 6c 70 68 61 20 76 61 6c 75 65 20 66 6f 72 20 65 61 63 68 20 65 64 67 65 0a 66 6f 72 20 69 .alpha.value.for.each.edge.for.i
b800 20 69 6e 20 72 61 6e 67 65 28 4d 29 3a 0a 20 20 20 20 65 64 67 65 73 5b 69 5d 2e 73 65 74 5f 61 .in.range(M):.....edges[i].set_a
b820 6c 70 68 61 28 65 64 67 65 5f 61 6c 70 68 61 73 5b 69 5d 29 0a 0a 70 63 20 3d 20 6d 70 6c 2e 63 lpha(edge_alphas[i])..pc.=.mpl.c
b840 6f 6c 6c 65 63 74 69 6f 6e 73 2e 50 61 74 63 68 43 6f 6c 6c 65 63 74 69 6f 6e 28 65 64 67 65 73 ollections.PatchCollection(edges
b860 2c 20 63 6d 61 70 3d 63 6d 61 70 29 0a 70 63 2e 73 65 74 5f 61 72 72 61 79 28 65 64 67 65 5f 63 ,.cmap=cmap).pc.set_array(edge_c
b880 6f 6c 6f 72 73 29 0a 0a 61 78 20 3d 20 70 6c 74 2e 67 63 61 28 29 0a 61 78 2e 73 65 74 5f 61 78 olors)..ax.=.plt.gca().ax.set_ax
b8a0 69 73 5f 6f 66 66 28 29 0a 70 6c 74 2e 63 6f 6c 6f 72 62 61 72 28 70 63 2c 20 61 78 3d 61 78 29 is_off().plt.colorbar(pc,.ax=ax)
b8c0 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 02 7b 57 56 5d b9 c3 0e 15 05 .plt.show().PK.........{WV].....
b8e0 00 00 15 05 00 00 13 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 74 73 70 2e 70 79 22 22 22 ..........drawing/plot_tsp.py"""
b900 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 54 72 61 76 .==========================.Trav
b920 65 6c 69 6e 67 20 53 61 6c 65 73 6d 61 6e 20 50 72 6f 62 6c 65 6d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d eling.Salesman.Problem.=========
b940 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 69 73 20 61 6e 20 65 78 =================..This.is.an.ex
b960 61 6d 70 6c 65 20 6f 66 20 61 20 64 72 61 77 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 20 6f 66 20 74 ample.of.a.drawing.solution.of.t
b980 68 65 20 74 72 61 76 65 6c 69 6e 67 20 73 61 6c 65 73 6d 61 6e 20 70 72 6f 62 6c 65 6d 0a 0a 54 he.traveling.salesman.problem..T
b9a0 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 70 72 6f 64 75 63 65 20 74 he.function.is.used.to.produce.t
b9c0 68 65 20 73 6f 6c 75 74 69 6f 6e 20 69 73 20 63 68 72 69 73 74 6f 66 69 64 65 73 2c 0a 77 68 65 he.solution.is.christofides,.whe
b9e0 72 65 20 67 69 76 65 6e 20 61 20 73 65 74 20 6f 66 20 6e 6f 64 65 73 2c 20 69 74 20 63 61 6c 63 re.given.a.set.of.nodes,.it.calc
ba00 75 6c 61 74 65 73 20 74 68 65 20 72 6f 75 74 65 20 6f 66 20 74 68 65 20 6e 6f 64 65 73 0a 74 68 ulates.the.route.of.the.nodes.th
ba20 61 74 20 74 68 65 20 74 72 61 76 65 6c 65 72 20 68 61 73 20 74 6f 20 66 6f 6c 6c 6f 77 20 69 6e at.the.traveler.has.to.follow.in
ba40 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 74 6f 74 61 6c 20 63 6f 73 .order.to.minimize.the.total.cos
ba60 74 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 t.."""..import.matplotlib.pyplot
ba80 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d .as.plt.import.networkx.as.nx.im
baa0 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 2e 61 6c 67 6f 72 69 74 68 6d 73 2e 61 70 70 72 6f 78 69 port.networkx.algorithms.approxi
bac0 6d 61 74 69 6f 6e 20 61 73 20 6e 78 5f 61 70 70 0a 69 6d 70 6f 72 74 20 6d 61 74 68 0a 0a 47 20 mation.as.nx_app.import.math..G.
bae0 3d 20 6e 78 2e 72 61 6e 64 6f 6d 5f 67 65 6f 6d 65 74 72 69 63 5f 67 72 61 70 68 28 32 30 2c 20 =.nx.random_geometric_graph(20,.
bb00 72 61 64 69 75 73 3d 30 2e 34 2c 20 73 65 65 64 3d 33 29 0a 70 6f 73 20 3d 20 6e 78 2e 67 65 74 radius=0.4,.seed=3).pos.=.nx.get
bb20 5f 6e 6f 64 65 5f 61 74 74 72 69 62 75 74 65 73 28 47 2c 20 22 70 6f 73 22 29 0a 0a 23 20 44 65 _node_attributes(G,."pos")..#.De
bb40 70 6f 74 20 73 68 6f 75 6c 64 20 62 65 20 61 74 20 28 30 2c 30 29 0a 70 6f 73 5b 30 5d 20 3d 20 pot.should.be.at.(0,0).pos[0].=.
bb60 28 30 2e 35 2c 20 30 2e 35 29 0a 0a 48 20 3d 20 47 2e 63 6f 70 79 28 29 0a 0a 0a 23 20 43 61 6c (0.5,.0.5)..H.=.G.copy()...#.Cal
bb80 63 75 6c 61 74 69 6e 67 20 74 68 65 20 64 69 73 74 61 6e 63 65 73 20 62 65 74 77 65 65 6e 20 74 culating.the.distances.between.t
bba0 68 65 20 6e 6f 64 65 73 20 61 73 20 65 64 67 65 27 73 20 77 65 69 67 68 74 2e 0a 66 6f 72 20 69 he.nodes.as.edge's.weight..for.i
bbc0 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 70 6f 73 29 29 3a 0a 20 20 20 20 66 6f 72 20 6a 20 69 .in.range(len(pos)):.....for.j.i
bbe0 6e 20 72 61 6e 67 65 28 69 20 2b 20 31 2c 20 6c 65 6e 28 70 6f 73 29 29 3a 0a 20 20 20 20 20 20 n.range(i.+.1,.len(pos)):.......
bc00 20 20 64 69 73 74 20 3d 20 6d 61 74 68 2e 68 79 70 6f 74 28 70 6f 73 5b 69 5d 5b 30 5d 20 2d 20 ..dist.=.math.hypot(pos[i][0].-.
bc20 70 6f 73 5b 6a 5d 5b 30 5d 2c 20 70 6f 73 5b 69 5d 5b 31 5d 20 2d 20 70 6f 73 5b 6a 5d 5b 31 5d pos[j][0],.pos[i][1].-.pos[j][1]
bc40 29 0a 20 20 20 20 20 20 20 20 64 69 73 74 20 3d 20 64 69 73 74 0a 20 20 20 20 20 20 20 20 47 2e ).........dist.=.dist.........G.
bc60 61 64 64 5f 65 64 67 65 28 69 2c 20 6a 2c 20 77 65 69 67 68 74 3d 64 69 73 74 29 0a 0a 63 79 63 add_edge(i,.j,.weight=dist)..cyc
bc80 6c 65 20 3d 20 6e 78 5f 61 70 70 2e 63 68 72 69 73 74 6f 66 69 64 65 73 28 47 2c 20 77 65 69 67 le.=.nx_app.christofides(G,.weig
bca0 68 74 3d 22 77 65 69 67 68 74 22 29 0a 65 64 67 65 5f 6c 69 73 74 20 3d 20 6c 69 73 74 28 6e 78 ht="weight").edge_list.=.list(nx
bcc0 2e 75 74 69 6c 73 2e 70 61 69 72 77 69 73 65 28 63 79 63 6c 65 29 29 0a 0a 23 20 44 72 61 77 20 .utils.pairwise(cycle))..#.Draw.
bce0 63 6c 6f 73 65 73 74 20 65 64 67 65 73 20 6f 6e 20 65 61 63 68 20 6e 6f 64 65 20 6f 6e 6c 79 0a closest.edges.on.each.node.only.
bd00 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 48 2c 20 70 6f 73 2c 20 65 nx.draw_networkx_edges(H,.pos,.e
bd20 64 67 65 5f 63 6f 6c 6f 72 3d 22 62 6c 75 65 22 2c 20 77 69 64 74 68 3d 30 2e 35 29 0a 0a 23 20 dge_color="blue",.width=0.5)..#.
bd40 44 72 61 77 20 74 68 65 20 72 6f 75 74 65 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 Draw.the.route.nx.draw_networkx(
bd60 0a 20 20 20 20 47 2c 0a 20 20 20 20 70 6f 73 2c 0a 20 20 20 20 77 69 74 68 5f 6c 61 62 65 6c 73 .....G,.....pos,.....with_labels
bd80 3d 54 72 75 65 2c 0a 20 20 20 20 65 64 67 65 6c 69 73 74 3d 65 64 67 65 5f 6c 69 73 74 2c 0a 20 =True,.....edgelist=edge_list,..
bda0 20 20 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 72 65 64 22 2c 0a 20 20 20 20 6e 6f 64 65 5f 73 69 ...edge_color="red",.....node_si
bdc0 7a 65 3d 32 30 30 2c 0a 20 20 20 20 77 69 64 74 68 3d 33 2c 0a 29 0a 0a 70 72 69 6e 74 28 22 54 ze=200,.....width=3,.)..print("T
bde0 68 65 20 72 6f 75 74 65 20 6f 66 20 74 68 65 20 74 72 61 76 65 6c 6c 65 72 20 69 73 3a 22 2c 20 he.route.of.the.traveller.is:",.
be00 63 79 63 6c 65 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 00 7b 57 56 cycle).plt.show().PK.........{WV
be20 d4 74 ef ce db 04 00 00 db 04 00 00 21 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 6c 61 62 .t..........!...drawing/plot_lab
be40 65 6c 73 5f 61 6e 64 5f 63 6f 6c 6f 72 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d els_and_colors.py""".===========
be60 3d 3d 3d 3d 3d 3d 0a 4c 61 62 65 6c 73 20 41 6e 64 20 43 6f 6c 6f 72 73 0a 3d 3d 3d 3d 3d 3d 3d ======.Labels.And.Colors.=======
be80 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 55 73 65 20 60 6e 6f 64 65 6c 69 73 74 60 20 61 6e 64 20 60 ==========..Use.`nodelist`.and.`
bea0 65 64 67 65 6c 69 73 74 60 20 74 6f 20 61 70 70 6c 79 20 63 75 73 74 6f 6d 20 63 6f 6c 6f 72 69 edgelist`.to.apply.custom.colori
bec0 6e 67 20 61 6e 64 20 6c 61 62 65 6c 73 20 74 6f 20 76 61 72 69 6f 75 73 0a 63 6f 6d 70 6f 6e 65 ng.and.labels.to.various.compone
bee0 6e 74 73 20 6f 66 20 61 20 67 72 61 70 68 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c nts.of.a.graph..""".import.matpl
bf00 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f otlib.pyplot.as.plt.import.netwo
bf20 72 6b 78 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 63 75 62 69 63 61 6c 5f 67 72 61 70 68 28 rkx.as.nx..G.=.nx.cubical_graph(
bf40 29 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 ).pos.=.nx.spring_layout(G,.seed
bf60 3d 33 31 31 33 37 39 34 36 35 32 29 20 20 23 20 70 6f 73 69 74 69 6f 6e 73 20 66 6f 72 20 61 6c =3113794652)..#.positions.for.al
bf80 6c 20 6e 6f 64 65 73 0a 0a 23 20 6e 6f 64 65 73 0a 6f 70 74 69 6f 6e 73 20 3d 20 7b 22 65 64 67 l.nodes..#.nodes.options.=.{"edg
bfa0 65 63 6f 6c 6f 72 73 22 3a 20 22 74 61 62 3a 67 72 61 79 22 2c 20 22 6e 6f 64 65 5f 73 69 7a 65 ecolors":."tab:gray",."node_size
bfc0 22 3a 20 38 30 30 2c 20 22 61 6c 70 68 61 22 3a 20 30 2e 39 7d 0a 6e 78 2e 64 72 61 77 5f 6e 65 ":.800,."alpha":.0.9}.nx.draw_ne
bfe0 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 6c 69 73 74 3d 5b 30 tworkx_nodes(G,.pos,.nodelist=[0
c000 2c 20 31 2c 20 32 2c 20 33 5d 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 74 61 62 3a 72 65 64 22 ,.1,.2,.3],.node_color="tab:red"
c020 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f ,.**options).nx.draw_networkx_no
c040 64 65 73 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 6c 69 73 74 3d 5b 34 2c 20 35 2c 20 36 2c 20 37 des(G,.pos,.nodelist=[4,.5,.6,.7
c060 5d 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 74 61 62 3a 62 6c 75 65 22 2c 20 2a 2a 6f 70 74 69 ],.node_color="tab:blue",.**opti
c080 6f 6e 73 29 0a 0a 23 20 65 64 67 65 73 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 ons)..#.edges.nx.draw_networkx_e
c0a0 64 67 65 73 28 47 2c 20 70 6f 73 2c 20 77 69 64 74 68 3d 31 2e 30 2c 20 61 6c 70 68 61 3d 30 2e dges(G,.pos,.width=1.0,.alpha=0.
c0c0 35 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 0a 20 20 20 20 47 5).nx.draw_networkx_edges(.....G
c0e0 2c 0a 20 20 20 20 70 6f 73 2c 0a 20 20 20 20 65 64 67 65 6c 69 73 74 3d 5b 28 30 2c 20 31 29 2c ,.....pos,.....edgelist=[(0,.1),
c100 20 28 31 2c 20 32 29 2c 20 28 32 2c 20 33 29 2c 20 28 33 2c 20 30 29 5d 2c 0a 20 20 20 20 77 69 .(1,.2),.(2,.3),.(3,.0)],.....wi
c120 64 74 68 3d 38 2c 0a 20 20 20 20 61 6c 70 68 61 3d 30 2e 35 2c 0a 20 20 20 20 65 64 67 65 5f 63 dth=8,.....alpha=0.5,.....edge_c
c140 6f 6c 6f 72 3d 22 74 61 62 3a 72 65 64 22 2c 0a 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 olor="tab:red",.).nx.draw_networ
c160 6b 78 5f 65 64 67 65 73 28 0a 20 20 20 20 47 2c 0a 20 20 20 20 70 6f 73 2c 0a 20 20 20 20 65 64 kx_edges(.....G,.....pos,.....ed
c180 67 65 6c 69 73 74 3d 5b 28 34 2c 20 35 29 2c 20 28 35 2c 20 36 29 2c 20 28 36 2c 20 37 29 2c 20 gelist=[(4,.5),.(5,.6),.(6,.7),.
c1a0 28 37 2c 20 34 29 5d 2c 0a 20 20 20 20 77 69 64 74 68 3d 38 2c 0a 20 20 20 20 61 6c 70 68 61 3d (7,.4)],.....width=8,.....alpha=
c1c0 30 2e 35 2c 0a 20 20 20 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 74 61 62 3a 62 6c 75 65 22 2c 0a 0.5,.....edge_color="tab:blue",.
c1e0 29 0a 0a 0a 23 20 73 6f 6d 65 20 6d 61 74 68 20 6c 61 62 65 6c 73 0a 6c 61 62 65 6c 73 20 3d 20 )...#.some.math.labels.labels.=.
c200 7b 7d 0a 6c 61 62 65 6c 73 5b 30 5d 20 3d 20 72 22 24 61 24 22 0a 6c 61 62 65 6c 73 5b 31 5d 20 {}.labels[0].=.r"$a$".labels[1].
c220 3d 20 72 22 24 62 24 22 0a 6c 61 62 65 6c 73 5b 32 5d 20 3d 20 72 22 24 63 24 22 0a 6c 61 62 65 =.r"$b$".labels[2].=.r"$c$".labe
c240 6c 73 5b 33 5d 20 3d 20 72 22 24 64 24 22 0a 6c 61 62 65 6c 73 5b 34 5d 20 3d 20 72 22 24 5c 61 ls[3].=.r"$d$".labels[4].=.r"$\a
c260 6c 70 68 61 24 22 0a 6c 61 62 65 6c 73 5b 35 5d 20 3d 20 72 22 24 5c 62 65 74 61 24 22 0a 6c 61 lpha$".labels[5].=.r"$\beta$".la
c280 62 65 6c 73 5b 36 5d 20 3d 20 72 22 24 5c 67 61 6d 6d 61 24 22 0a 6c 61 62 65 6c 73 5b 37 5d 20 bels[6].=.r"$\gamma$".labels[7].
c2a0 3d 20 72 22 24 5c 64 65 6c 74 61 24 22 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6c =.r"$\delta$".nx.draw_networkx_l
c2c0 61 62 65 6c 73 28 47 2c 20 70 6f 73 2c 20 6c 61 62 65 6c 73 2c 20 66 6f 6e 74 5f 73 69 7a 65 3d abels(G,.pos,.labels,.font_size=
c2e0 32 32 2c 20 66 6f 6e 74 5f 63 6f 6c 6f 72 3d 22 77 68 69 74 65 73 6d 6f 6b 65 22 29 0a 0a 70 6c 22,.font_color="whitesmoke")..pl
c300 74 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 t.tight_layout().plt.axis("off")
c320 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 fd 7a 57 56 4e c6 76 b2 28 02 .plt.show().PK.........zWVN.v.(.
c340 00 00 28 02 00 00 1b 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 65 69 67 65 6e 76 61 6c 75 ..(.......drawing/plot_eigenvalu
c360 65 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 45 69 67 65 6e 76 61 6c 75 65 73 es.py""".===========.Eigenvalues
c380 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 43 72 65 61 74 65 20 61 6e 20 47 7b 6e 2c 6d 7d 20 72 .===========..Create.an.G{n,m}.r
c3a0 61 6e 64 6f 6d 20 67 72 61 70 68 20 61 6e 64 20 63 6f 6d 70 75 74 65 20 74 68 65 20 65 69 67 65 andom.graph.and.compute.the.eige
c3c0 6e 76 61 6c 75 65 73 2e 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 nvalues..""".import.matplotlib.p
c3e0 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 yplot.as.plt.import.networkx.as.
c400 6e 78 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 2e 6c 69 6e 61 6c 67 0a 0a 6e 20 3d 20 31 30 30 30 nx.import.numpy.linalg..n.=.1000
c420 20 20 23 20 31 30 30 30 20 6e 6f 64 65 73 0a 6d 20 3d 20 35 30 30 30 20 20 23 20 35 30 30 30 20 ..#.1000.nodes.m.=.5000..#.5000.
c440 65 64 67 65 73 0a 47 20 3d 20 6e 78 2e 67 6e 6d 5f 72 61 6e 64 6f 6d 5f 67 72 61 70 68 28 6e 2c edges.G.=.nx.gnm_random_graph(n,
c460 20 6d 2c 20 73 65 65 64 3d 35 30 34 30 29 20 20 23 20 53 65 65 64 20 66 6f 72 20 72 65 70 72 6f .m,.seed=5040)..#.Seed.for.repro
c480 64 75 63 69 62 69 6c 69 74 79 0a 0a 4c 20 3d 20 6e 78 2e 6e 6f 72 6d 61 6c 69 7a 65 64 5f 6c 61 ducibility..L.=.nx.normalized_la
c4a0 70 6c 61 63 69 61 6e 5f 6d 61 74 72 69 78 28 47 29 0a 65 20 3d 20 6e 75 6d 70 79 2e 6c 69 6e 61 placian_matrix(G).e.=.numpy.lina
c4c0 6c 67 2e 65 69 67 76 61 6c 73 28 4c 2e 74 6f 61 72 72 61 79 28 29 29 0a 70 72 69 6e 74 28 22 4c lg.eigvals(L.toarray()).print("L
c4e0 61 72 67 65 73 74 20 65 69 67 65 6e 76 61 6c 75 65 3a 22 2c 20 6d 61 78 28 65 29 29 0a 70 72 69 argest.eigenvalue:",.max(e)).pri
c500 6e 74 28 22 53 6d 61 6c 6c 65 73 74 20 65 69 67 65 6e 76 61 6c 75 65 3a 22 2c 20 6d 69 6e 28 65 nt("Smallest.eigenvalue:",.min(e
c520 29 29 0a 70 6c 74 2e 68 69 73 74 28 65 2c 20 62 69 6e 73 3d 31 30 30 29 20 20 23 20 68 69 73 74 )).plt.hist(e,.bins=100)..#.hist
c540 6f 67 72 61 6d 20 77 69 74 68 20 31 30 30 20 62 69 6e 73 0a 70 6c 74 2e 78 6c 69 6d 28 30 2c 20 ogram.with.100.bins.plt.xlim(0,.
c560 32 29 20 20 23 20 65 69 67 65 6e 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 2)..#.eigenvalues.between.0.and.
c580 32 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 01 7b 57 56 b0 0b f0 aa 38 2.plt.show().PK.........{WV....8
c5a0 06 00 00 38 06 00 00 1d 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 73 70 65 63 74 72 61 6c ...8.......drawing/plot_spectral
c5c0 5f 67 72 69 64 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 53 _grid.py""".==================.S
c5e0 70 65 63 74 72 61 6c 20 45 6d 62 65 64 64 69 6e 67 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d pectral.Embedding.==============
c600 3d 3d 3d 3d 0a 0a 54 68 65 20 73 70 65 63 74 72 61 6c 20 6c 61 79 6f 75 74 20 70 6f 73 69 74 69 ====..The.spectral.layout.positi
c620 6f 6e 73 20 74 68 65 20 6e 6f 64 65 73 20 6f 66 20 74 68 65 20 67 72 61 70 68 20 62 61 73 65 64 ons.the.nodes.of.the.graph.based
c640 20 6f 6e 20 74 68 65 0a 65 69 67 65 6e 76 65 63 74 6f 72 73 20 6f 66 20 74 68 65 20 67 72 61 70 .on.the.eigenvectors.of.the.grap
c660 68 20 4c 61 70 6c 61 63 69 61 6e 20 24 4c 20 3d 20 44 20 2d 20 41 24 2c 20 77 68 65 72 65 20 24 h.Laplacian.$L.=.D.-.A$,.where.$
c680 41 24 20 69 73 20 74 68 65 0a 61 64 6a 61 63 65 6e 63 79 20 6d 61 74 72 69 78 20 61 6e 64 20 24 A$.is.the.adjacency.matrix.and.$
c6a0 44 24 20 69 73 20 74 68 65 20 64 65 67 72 65 65 20 6d 61 74 72 69 78 20 6f 66 20 74 68 65 20 67 D$.is.the.degree.matrix.of.the.g
c6c0 72 61 70 68 2e 0a 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 20 73 70 65 63 74 72 61 6c 20 6c raph..By.default,.the.spectral.l
c6e0 61 79 6f 75 74 20 77 69 6c 6c 20 65 6d 62 65 64 20 74 68 65 20 67 72 61 70 68 20 69 6e 20 74 77 ayout.will.embed.the.graph.in.tw
c700 6f 0a 64 69 6d 65 6e 73 69 6f 6e 73 20 28 79 6f 75 20 63 61 6e 20 65 6d 62 65 64 20 79 6f 75 72 o.dimensions.(you.can.embed.your
c720 20 67 72 61 70 68 20 69 6e 20 6f 74 68 65 72 20 64 69 6d 65 6e 73 69 6f 6e 73 20 75 73 69 6e 67 .graph.in.other.dimensions.using
c740 20 74 68 65 0a 60 60 64 69 6d 60 60 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 65 69 74 68 65 72 20 .the.``dim``.argument.to.either.
c760 3a 66 75 6e 63 3a 60 7e 64 72 61 77 69 6e 67 2e 6e 78 5f 70 79 6c 61 62 2e 64 72 61 77 5f 73 70 :func:`~drawing.nx_pylab.draw_sp
c780 65 63 74 72 61 6c 60 20 6f 72 0a 3a 66 75 6e 63 3a 60 7e 64 72 61 77 69 6e 67 2e 6c 61 79 6f 75 ectral`.or.:func:`~drawing.layou
c7a0 74 2e 73 70 65 63 74 72 61 6c 5f 6c 61 79 6f 75 74 60 29 2e 0a 0a 57 68 65 6e 20 74 68 65 20 65 t.spectral_layout`)...When.the.e
c7c0 64 67 65 73 20 6f 66 20 74 68 65 20 67 72 61 70 68 20 72 65 70 72 65 73 65 6e 74 20 73 69 6d 69 dges.of.the.graph.represent.simi
c7e0 6c 61 72 69 74 79 20 62 65 74 77 65 65 6e 20 74 68 65 20 69 6e 63 69 64 65 6e 74 0a 6e 6f 64 65 larity.between.the.incident.node
c800 73 2c 20 74 68 65 20 73 70 65 63 74 72 61 6c 20 65 6d 62 65 64 64 69 6e 67 20 77 69 6c 6c 20 70 s,.the.spectral.embedding.will.p
c820 6c 61 63 65 20 68 69 67 68 6c 79 20 73 69 6d 69 6c 61 72 20 6e 6f 64 65 73 20 63 6c 6f 73 65 72 lace.highly.similar.nodes.closer
c840 0a 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20 74 68 61 6e 20 6e 6f 64 65 73 20 77 68 69 63 68 .to.one.another.than.nodes.which
c860 20 61 72 65 20 6c 65 73 73 20 73 69 6d 69 6c 61 72 2e 0a 0a 54 68 69 73 20 69 73 20 70 61 72 74 .are.less.similar...This.is.part
c880 69 63 75 6c 61 72 6c 79 20 73 74 72 69 6b 69 6e 67 20 77 68 65 6e 20 79 6f 75 20 73 70 65 63 74 icularly.striking.when.you.spect
c8a0 72 61 6c 6c 79 20 65 6d 62 65 64 20 61 20 67 72 69 64 0a 67 72 61 70 68 2e 20 20 49 6e 20 74 68 rally.embed.a.grid.graph...In.th
c8c0 65 20 66 75 6c 6c 20 67 72 69 64 20 67 72 61 70 68 2c 20 74 68 65 20 6e 6f 64 65 73 20 69 6e 20 e.full.grid.graph,.the.nodes.in.
c8e0 74 68 65 20 63 65 6e 74 65 72 20 6f 66 20 74 68 65 0a 67 72 61 70 68 20 61 72 65 20 70 75 6c 6c the.center.of.the.graph.are.pull
c900 65 64 20 61 70 61 72 74 20 6d 6f 72 65 20 74 68 61 6e 20 6e 6f 64 65 73 20 6f 6e 20 74 68 65 20 ed.apart.more.than.nodes.on.the.
c920 70 65 72 69 70 68 65 72 79 2e 0a 41 73 20 79 6f 75 20 72 65 6d 6f 76 65 20 69 6e 74 65 72 6e 61 periphery..As.you.remove.interna
c940 6c 20 6e 6f 64 65 73 2c 20 74 68 69 73 20 65 66 66 65 63 74 20 69 6e 63 72 65 61 73 65 73 2e 0a l.nodes,.this.effect.increases..
c960 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 """..import.matplotlib.pyplot.as
c980 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 0a 6f 70 74 .plt.import.networkx.as.nx...opt
c9a0 69 6f 6e 73 20 3d 20 7b 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 3a 20 22 43 30 22 2c 20 22 6e 6f 64 ions.=.{"node_color":."C0",."nod
c9c0 65 5f 73 69 7a 65 22 3a 20 31 30 30 7d 0a 0a 47 20 3d 20 6e 78 2e 67 72 69 64 5f 32 64 5f 67 72 e_size":.100}..G.=.nx.grid_2d_gr
c9e0 61 70 68 28 36 2c 20 36 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 33 33 32 29 0a 6e 78 2e 64 72 aph(6,.6).plt.subplot(332).nx.dr
ca00 61 77 5f 73 70 65 63 74 72 61 6c 28 47 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 0a 47 2e 72 65 6d aw_spectral(G,.**options)..G.rem
ca20 6f 76 65 5f 65 64 67 65 28 28 32 2c 20 32 29 2c 20 28 32 2c 20 33 29 29 0a 70 6c 74 2e 73 75 62 ove_edge((2,.2),.(2,.3)).plt.sub
ca40 70 6c 6f 74 28 33 33 34 29 0a 6e 78 2e 64 72 61 77 5f 73 70 65 63 74 72 61 6c 28 47 2c 20 2a 2a plot(334).nx.draw_spectral(G,.**
ca60 6f 70 74 69 6f 6e 73 29 0a 0a 47 2e 72 65 6d 6f 76 65 5f 65 64 67 65 28 28 33 2c 20 32 29 2c 20 options)..G.remove_edge((3,.2),.
ca80 28 33 2c 20 33 29 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 33 33 35 29 0a 6e 78 2e 64 72 61 77 (3,.3)).plt.subplot(335).nx.draw
caa0 5f 73 70 65 63 74 72 61 6c 28 47 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 0a 47 2e 72 65 6d 6f 76 _spectral(G,.**options)..G.remov
cac0 65 5f 65 64 67 65 28 28 32 2c 20 32 29 2c 20 28 33 2c 20 32 29 29 0a 70 6c 74 2e 73 75 62 70 6c e_edge((2,.2),.(3,.2)).plt.subpl
cae0 6f 74 28 33 33 36 29 0a 6e 78 2e 64 72 61 77 5f 73 70 65 63 74 72 61 6c 28 47 2c 20 2a 2a 6f 70 ot(336).nx.draw_spectral(G,.**op
cb00 74 69 6f 6e 73 29 0a 0a 47 2e 72 65 6d 6f 76 65 5f 65 64 67 65 28 28 32 2c 20 33 29 2c 20 28 33 tions)..G.remove_edge((2,.3),.(3
cb20 2c 20 33 29 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 33 33 37 29 0a 6e 78 2e 64 72 61 77 5f 73 ,.3)).plt.subplot(337).nx.draw_s
cb40 70 65 63 74 72 61 6c 28 47 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 0a 47 2e 72 65 6d 6f 76 65 5f pectral(G,.**options)..G.remove_
cb60 65 64 67 65 28 28 31 2c 20 32 29 2c 20 28 31 2c 20 33 29 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 edge((1,.2),.(1,.3)).plt.subplot
cb80 28 33 33 38 29 0a 6e 78 2e 64 72 61 77 5f 73 70 65 63 74 72 61 6c 28 47 2c 20 2a 2a 6f 70 74 69 (338).nx.draw_spectral(G,.**opti
cba0 6f 6e 73 29 0a 0a 47 2e 72 65 6d 6f 76 65 5f 65 64 67 65 28 28 34 2c 20 32 29 2c 20 28 34 2c 20 ons)..G.remove_edge((4,.2),.(4,.
cbc0 33 29 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 33 33 39 29 0a 6e 78 2e 64 72 61 77 5f 73 70 65 3)).plt.subplot(339).nx.draw_spe
cbe0 63 74 72 61 6c 28 47 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 0a 70 6c 74 2e 73 68 6f 77 28 29 0a ctral(G,.**options)..plt.show().
cc00 50 4b 03 04 14 00 00 00 00 00 00 7b 57 56 11 ef 87 aa 7c 08 00 00 7c 08 00 00 20 00 00 00 64 72 PK.........{WV....|...|.......dr
cc20 61 77 69 6e 67 2f 70 6c 6f 74 5f 72 61 69 6e 62 6f 77 5f 63 6f 6c 6f 72 69 6e 67 2e 70 79 22 22 awing/plot_rainbow_coloring.py""
cc40 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 61 69 6e 62 6f 77 20 43 6f 6c 6f 72 ".================.Rainbow.Color
cc60 69 6e 67 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 47 65 6e 65 72 61 74 65 20 61 ing.================..Generate.a
cc80 20 63 6f 6d 70 6c 65 74 65 20 67 72 61 70 68 20 77 69 74 68 20 31 33 20 6e 6f 64 65 73 20 69 6e .complete.graph.with.13.nodes.in
cca0 20 61 20 63 69 72 63 75 6c 61 72 20 6c 61 79 6f 75 74 20 77 69 74 68 20 74 68 65 0a 65 64 67 65 .a.circular.layout.with.the.edge
ccc0 73 20 63 6f 6c 6f 72 65 64 20 62 79 20 6e 6f 64 65 20 64 69 73 74 61 6e 63 65 2e 20 54 68 65 20 s.colored.by.node.distance..The.
cce0 6e 6f 64 65 20 64 69 73 74 61 6e 63 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 6d 69 node.distance.is.given.by.the.mi
cd00 6e 69 6d 75 6d 0a 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 64 65 73 20 74 72 61 76 65 72 73 65 64 20 nimum.number.of.nodes.traversed.
cd20 61 6c 6f 6e 67 20 61 6e 20 61 72 63 20 62 65 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20 6e 6f 64 along.an.arc.between.any.two.nod
cd40 65 73 20 6f 6e 20 74 68 65 20 63 69 72 63 6c 65 2e 0a 0a 53 75 63 68 20 67 72 61 70 68 73 20 61 es.on.the.circle...Such.graphs.a
cd60 72 65 20 74 68 65 20 73 75 62 6a 65 63 74 20 6f 66 20 52 69 6e 67 65 6c 27 73 20 63 6f 6e 6a 65 re.the.subject.of.Ringel's.conje
cd80 63 74 75 72 65 2c 20 77 68 69 63 68 20 73 74 61 74 65 73 3a 20 61 6e 79 20 63 6f 6d 70 6c 65 74 cture,.which.states:.any.complet
cda0 65 0a 67 72 61 70 68 20 77 69 74 68 20 60 60 32 6e 20 2b 20 31 60 60 20 6e 6f 64 65 73 20 63 61 e.graph.with.``2n.+.1``.nodes.ca
cdc0 6e 20 62 65 20 74 69 6c 65 64 20 62 79 20 61 6e 79 20 74 72 65 65 20 77 69 74 68 20 60 60 6e 20 n.be.tiled.by.any.tree.with.``n.
cde0 2b 20 31 60 60 20 6e 6f 64 65 73 0a 28 69 2e 65 2e 20 63 6f 70 69 65 73 20 6f 66 20 74 68 65 20 +.1``.nodes.(i.e..copies.of.the.
ce00 74 72 65 65 20 63 61 6e 20 62 65 20 70 6c 61 63 65 64 20 6f 76 65 72 20 74 68 65 20 63 6f 6d 70 tree.can.be.placed.over.the.comp
ce20 6c 65 74 65 20 67 72 61 70 68 20 73 75 63 68 20 74 68 61 74 20 65 61 63 68 0a 65 64 67 65 20 69 lete.graph.such.that.each.edge.i
ce40 6e 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 67 72 61 70 68 20 69 73 20 63 6f 76 65 72 65 64 20 n.the.complete.graph.is.covered.
ce60 65 78 61 63 74 6c 79 20 6f 6e 63 65 29 2e 20 54 68 65 20 65 64 67 65 20 63 6f 6c 6f 72 69 6e 67 exactly.once)..The.edge.coloring
ce80 20 69 73 0a 68 65 6c 70 66 75 6c 20 69 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 68 6f 77 20 74 .is.helpful.in.determining.how.t
cea0 6f 20 70 6c 61 63 65 20 74 68 65 20 74 72 65 65 20 63 6f 70 69 65 73 2e 0a 0a 52 65 66 65 72 65 o.place.the.tree.copies...Refere
cec0 6e 63 65 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 68 74 74 70 73 3a 2f 2f 77 77 77 2e 71 75 61 6e nces.----------.https://www.quan
cee0 74 61 6d 61 67 61 7a 69 6e 65 2e 6f 72 67 2f 6d 61 74 68 65 6d 61 74 69 63 69 61 6e 73 2d 70 72 tamagazine.org/mathematicians-pr
cf00 6f 76 65 2d 72 69 6e 67 65 6c 73 2d 67 72 61 70 68 2d 74 68 65 6f 72 79 2d 63 6f 6e 6a 65 63 74 ove-ringels-graph-theory-conject
cf20 75 72 65 2d 32 30 32 30 30 32 31 39 2f 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 ure-20200219/.""".import.matplot
cf40 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b lib.pyplot.as.plt.import.network
cf60 78 20 61 73 20 6e 78 0a 0a 23 20 41 20 72 61 69 6e 62 6f 77 20 63 6f 6c 6f 72 20 6d 61 70 70 69 x.as.nx..#.A.rainbow.color.mappi
cf80 6e 67 20 75 73 69 6e 67 20 6d 61 74 70 6c 6f 74 6c 69 62 27 73 20 74 61 62 6c 65 61 75 20 63 6f ng.using.matplotlib's.tableau.co
cfa0 6c 6f 72 73 0a 6e 6f 64 65 5f 64 69 73 74 5f 74 6f 5f 63 6f 6c 6f 72 20 3d 20 7b 0a 20 20 20 20 lors.node_dist_to_color.=.{.....
cfc0 31 3a 20 22 74 61 62 3a 72 65 64 22 2c 0a 20 20 20 20 32 3a 20 22 74 61 62 3a 6f 72 61 6e 67 65 1:."tab:red",.....2:."tab:orange
cfe0 22 2c 0a 20 20 20 20 33 3a 20 22 74 61 62 3a 6f 6c 69 76 65 22 2c 0a 20 20 20 20 34 3a 20 22 74 ",.....3:."tab:olive",.....4:."t
d000 61 62 3a 67 72 65 65 6e 22 2c 0a 20 20 20 20 35 3a 20 22 74 61 62 3a 62 6c 75 65 22 2c 0a 20 20 ab:green",.....5:."tab:blue",...
d020 20 20 36 3a 20 22 74 61 62 3a 70 75 72 70 6c 65 22 2c 0a 7d 0a 0a 23 20 43 72 65 61 74 65 20 61 ..6:."tab:purple",.}..#.Create.a
d040 20 63 6f 6d 70 6c 65 74 65 20 67 72 61 70 68 20 77 69 74 68 20 61 6e 20 6f 64 64 20 6e 75 6d 62 .complete.graph.with.an.odd.numb
d060 65 72 20 6f 66 20 6e 6f 64 65 73 0a 6e 6e 6f 64 65 73 20 3d 20 31 33 0a 47 20 3d 20 6e 78 2e 63 er.of.nodes.nnodes.=.13.G.=.nx.c
d080 6f 6d 70 6c 65 74 65 5f 67 72 61 70 68 28 6e 6e 6f 64 65 73 29 0a 0a 23 20 41 20 67 72 61 70 68 omplete_graph(nnodes)..#.A.graph
d0a0 20 77 69 74 68 20 28 32 6e 20 2b 20 31 29 20 6e 6f 64 65 73 20 72 65 71 75 69 72 65 73 20 6e 20 .with.(2n.+.1).nodes.requires.n.
d0c0 63 6f 6c 6f 72 73 20 66 6f 72 20 74 68 65 20 65 64 67 65 73 0a 6e 20 3d 20 28 6e 6e 6f 64 65 73 colors.for.the.edges.n.=.(nnodes
d0e0 20 2d 20 31 29 20 2f 2f 20 32 0a 6e 64 69 73 74 5f 69 74 65 72 20 3d 20 6c 69 73 74 28 72 61 6e .-.1).//.2.ndist_iter.=.list(ran
d100 67 65 28 31 2c 20 6e 20 2b 20 31 29 29 0a 0a 23 20 54 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 ge(1,.n.+.1))..#.Take.advantage.
d120 6f 66 20 63 69 72 63 75 6c 61 72 20 73 79 6d 6d 65 74 72 79 20 69 6e 20 64 65 74 65 72 6d 69 6e of.circular.symmetry.in.determin
d140 69 6e 67 20 6e 6f 64 65 20 64 69 73 74 61 6e 63 65 73 0a 6e 64 69 73 74 5f 69 74 65 72 20 2b 3d ing.node.distances.ndist_iter.+=
d160 20 6e 64 69 73 74 5f 69 74 65 72 5b 3a 3a 2d 31 5d 0a 0a 0a 64 65 66 20 63 79 63 6c 65 28 6e 6c .ndist_iter[::-1]...def.cycle(nl
d180 69 73 74 2c 20 6e 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 6c 69 73 74 5b 2d 6e 3a 5d 20 2b ist,.n):.....return.nlist[-n:].+
d1a0 20 6e 6c 69 73 74 5b 3a 2d 6e 5d 0a 0a 0a 23 20 52 6f 74 61 74 65 20 6e 6f 64 65 73 20 61 72 6f .nlist[:-n]...#.Rotate.nodes.aro
d1c0 75 6e 64 20 74 68 65 20 63 69 72 63 6c 65 20 61 6e 64 20 61 73 73 69 67 6e 20 63 6f 6c 6f 72 73 und.the.circle.and.assign.colors
d1e0 20 66 6f 72 20 65 61 63 68 20 65 64 67 65 20 62 61 73 65 64 20 6f 6e 0a 23 20 6e 6f 64 65 20 64 .for.each.edge.based.on.#.node.d
d200 69 73 74 61 6e 63 65 0a 6e 6f 64 65 73 20 3d 20 6c 69 73 74 28 47 2e 6e 6f 64 65 73 28 29 29 0a istance.nodes.=.list(G.nodes()).
d220 66 6f 72 20 69 2c 20 6e 64 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 6e 64 69 73 74 5f 69 74 65 for.i,.nd.in.enumerate(ndist_ite
d240 72 29 3a 0a 20 20 20 20 66 6f 72 20 75 2c 20 76 20 69 6e 20 7a 69 70 28 6e 6f 64 65 73 2c 20 63 r):.....for.u,.v.in.zip(nodes,.c
d260 79 63 6c 65 28 6e 6f 64 65 73 2c 20 69 20 2b 20 31 29 29 3a 0a 20 20 20 20 20 20 20 20 47 5b 75 ycle(nodes,.i.+.1)):.........G[u
d280 5d 5b 76 5d 5b 22 63 6f 6c 6f 72 22 5d 20 3d 20 6e 6f 64 65 5f 64 69 73 74 5f 74 6f 5f 63 6f 6c ][v]["color"].=.node_dist_to_col
d2a0 6f 72 5b 6e 64 5d 0a 0a 70 6f 73 20 3d 20 6e 78 2e 63 69 72 63 75 6c 61 72 5f 6c 61 79 6f 75 74 or[nd]..pos.=.nx.circular_layout
d2c0 28 47 29 0a 23 20 43 72 65 61 74 65 20 61 20 66 69 67 75 72 65 20 77 69 74 68 20 31 3a 31 20 61 (G).#.Create.a.figure.with.1:1.a
d2e0 73 70 65 63 74 20 72 61 74 69 6f 20 74 6f 20 70 72 65 73 65 72 76 65 20 74 68 65 20 63 69 72 63 spect.ratio.to.preserve.the.circ
d300 6c 65 2e 0a 66 69 67 2c 20 61 78 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 66 69 67 73 69 le..fig,.ax.=.plt.subplots(figsi
d320 7a 65 3d 28 38 2c 20 38 29 29 0a 6e 6f 64 65 5f 6f 70 74 73 20 3d 20 7b 22 6e 6f 64 65 5f 73 69 ze=(8,.8)).node_opts.=.{"node_si
d340 7a 65 22 3a 20 35 30 30 2c 20 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 3a 20 22 77 22 2c 20 22 65 64 ze":.500,."node_color":."w",."ed
d360 67 65 63 6f 6c 6f 72 73 22 3a 20 22 6b 22 2c 20 22 6c 69 6e 65 77 69 64 74 68 73 22 3a 20 32 2e gecolors":."k",."linewidths":.2.
d380 30 7d 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 47 2c 20 70 6f 73 0}.nx.draw_networkx_nodes(G,.pos
d3a0 2c 20 2a 2a 6e 6f 64 65 5f 6f 70 74 73 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f ,.**node_opts).nx.draw_networkx_
d3c0 6c 61 62 65 6c 73 28 47 2c 20 70 6f 73 2c 20 66 6f 6e 74 5f 73 69 7a 65 3d 31 34 29 0a 23 20 45 labels(G,.pos,.font_size=14).#.E
d3e0 78 74 72 61 63 74 20 63 6f 6c 6f 72 20 66 72 6f 6d 20 65 64 67 65 20 64 61 74 61 0a 65 64 67 65 xtract.color.from.edge.data.edge
d400 5f 63 6f 6c 6f 72 73 20 3d 20 5b 65 64 67 65 64 61 74 61 5b 22 63 6f 6c 6f 72 22 5d 20 66 6f 72 _colors.=.[edgedata["color"].for
d420 20 5f 2c 20 5f 2c 20 65 64 67 65 64 61 74 61 20 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d ._,._,.edgedata.in.G.edges(data=
d440 54 72 75 65 29 5d 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 47 2c True)].nx.draw_networkx_edges(G,
d460 20 70 6f 73 2c 20 77 69 64 74 68 3d 32 2e 30 2c 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 65 64 67 65 .pos,.width=2.0,.edge_color=edge
d480 5f 63 6f 6c 6f 72 73 29 0a 0a 61 78 2e 73 65 74 5f 61 78 69 73 5f 6f 66 66 28 29 0a 66 69 67 2e _colors)..ax.set_axis_off().fig.
d4a0 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 tight_layout().plt.show().PK....
d4c0 00 00 00 00 fd 7a 57 56 bf 3e 32 8a 1e 04 00 00 1e 04 00 00 1a 00 00 00 64 72 61 77 69 6e 67 2f .....zWV.>2.............drawing/
d4e0 70 6c 6f 74 5f 66 6f 75 72 5f 67 72 69 64 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d plot_four_grids.py""".==========
d500 0a 46 6f 75 72 20 47 72 69 64 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 44 72 61 77 20 61 20 34 .Four.Grids.==========..Draw.a.4
d520 78 34 20 67 72 61 70 68 20 77 69 74 68 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 0a 0a 54 68 69 73 20 x4.graph.with.matplotlib...This.
d540 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 75 73 65 20 6f 66 20 6b example.illustrates.the.use.of.k
d560 65 79 77 6f 72 64 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 60 6e 65 74 77 6f 72 6b 78 2e 64 72 eyword.arguments.to.`networkx.dr
d580 61 77 60 20 74 6f 0a 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20 76 69 73 75 61 6c 69 7a 61 74 69 aw`.to.customize.the.visualizati
d5a0 6f 6e 20 6f 66 20 61 20 73 69 6d 70 6c 65 20 47 72 61 70 68 20 63 6f 6d 70 72 69 73 69 6e 67 20 on.of.a.simple.Graph.comprising.
d5c0 61 20 34 78 34 20 67 72 69 64 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c a.4x4.grid.."""..import.matplotl
d5e0 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 ib.pyplot.as.plt.import.networkx
d600 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 67 72 69 64 5f 32 64 5f 67 72 61 70 68 28 34 2c 20 .as.nx..G.=.nx.grid_2d_graph(4,.
d620 34 29 20 20 23 20 34 78 34 20 67 72 69 64 0a 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 4)..#.4x4.grid..pos.=.nx.spring_
d640 6c 61 79 6f 75 74 28 47 2c 20 69 74 65 72 61 74 69 6f 6e 73 3d 31 30 30 2c 20 73 65 65 64 3d 33 layout(G,.iterations=100,.seed=3
d660 39 37 37 35 29 0a 0a 23 20 43 72 65 61 74 65 20 61 20 32 78 32 20 73 75 62 70 6c 6f 74 0a 66 69 9775)..#.Create.a.2x2.subplot.fi
d680 67 2c 20 61 6c 6c 5f 61 78 65 73 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 32 2c 20 32 29 g,.all_axes.=.plt.subplots(2,.2)
d6a0 0a 61 78 20 3d 20 61 6c 6c 5f 61 78 65 73 2e 66 6c 61 74 0a 0a 6e 78 2e 64 72 61 77 28 47 2c 20 .ax.=.all_axes.flat..nx.draw(G,.
d6c0 70 6f 73 2c 20 61 78 3d 61 78 5b 30 5d 2c 20 66 6f 6e 74 5f 73 69 7a 65 3d 38 29 0a 6e 78 2e 64 pos,.ax=ax[0],.font_size=8).nx.d
d6e0 72 61 77 28 47 2c 20 70 6f 73 2c 20 61 78 3d 61 78 5b 31 5d 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d raw(G,.pos,.ax=ax[1],.node_size=
d700 30 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a 6e 78 2e 64 72 61 77 28 0a 20 0,.with_labels=False).nx.draw(..
d720 20 20 20 47 2c 0a 20 20 20 20 70 6f 73 2c 0a 20 20 20 20 61 78 3d 61 78 5b 32 5d 2c 0a 20 20 20 ...G,.....pos,.....ax=ax[2],....
d740 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 74 61 62 3a 67 72 65 65 6e 22 2c 0a 20 20 20 20 65 64 67 .node_color="tab:green",.....edg
d760 65 63 6f 6c 6f 72 73 3d 22 74 61 62 3a 67 72 61 79 22 2c 20 20 23 20 4e 6f 64 65 20 73 75 72 66 ecolors="tab:gray",..#.Node.surf
d780 61 63 65 20 63 6f 6c 6f 72 0a 20 20 20 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 74 61 62 3a 67 72 ace.color.....edge_color="tab:gr
d7a0 61 79 22 2c 20 20 23 20 43 6f 6c 6f 72 20 6f 66 20 67 72 61 70 68 20 65 64 67 65 73 0a 20 20 20 ay",..#.Color.of.graph.edges....
d7c0 20 6e 6f 64 65 5f 73 69 7a 65 3d 32 35 30 2c 0a 20 20 20 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d .node_size=250,.....with_labels=
d7e0 46 61 6c 73 65 2c 0a 20 20 20 20 77 69 64 74 68 3d 36 2c 0a 29 0a 48 20 3d 20 47 2e 74 6f 5f 64 False,.....width=6,.).H.=.G.to_d
d800 69 72 65 63 74 65 64 28 29 0a 6e 78 2e 64 72 61 77 28 0a 20 20 20 20 48 2c 0a 20 20 20 20 70 6f irected().nx.draw(.....H,.....po
d820 73 2c 0a 20 20 20 20 61 78 3d 61 78 5b 33 5d 2c 0a 20 20 20 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d s,.....ax=ax[3],.....node_color=
d840 22 74 61 62 3a 6f 72 61 6e 67 65 22 2c 0a 20 20 20 20 6e 6f 64 65 5f 73 69 7a 65 3d 32 30 2c 0a "tab:orange",.....node_size=20,.
d860 20 20 20 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 2c 0a 20 20 20 20 61 72 72 6f 77 ....with_labels=False,.....arrow
d880 73 69 7a 65 3d 31 30 2c 0a 20 20 20 20 77 69 64 74 68 3d 32 2c 0a 29 0a 0a 23 20 53 65 74 20 6d size=10,.....width=2,.)..#.Set.m
d8a0 61 72 67 69 6e 73 20 66 6f 72 20 74 68 65 20 61 78 65 73 20 73 6f 20 74 68 61 74 20 6e 6f 64 65 argins.for.the.axes.so.that.node
d8c0 73 20 61 72 65 6e 27 74 20 63 6c 69 70 70 65 64 0a 66 6f 72 20 61 20 69 6e 20 61 78 3a 0a 20 20 s.aren't.clipped.for.a.in.ax:...
d8e0 20 20 61 2e 6d 61 72 67 69 6e 73 28 30 2e 31 30 29 0a 66 69 67 2e 74 69 67 68 74 5f 6c 61 79 6f ..a.margins(0.10).fig.tight_layo
d900 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 00 7b 57 56 85 72 ut().plt.show().PK.........{WV.r
d920 37 d3 06 10 00 00 06 10 00 00 1b 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 6b 6e 75 74 68 7.............drawing/plot_knuth
d940 5f 6d 69 6c 65 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4b 6e 75 74 68 20 4d _miles.py""".===========.Knuth.M
d960 69 6c 65 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 60 6d 69 6c 65 73 5f 67 72 61 70 68 28 29 iles.===========..`miles_graph()
d980 60 20 72 65 74 75 72 6e 73 20 61 6e 20 75 6e 64 69 72 65 63 74 65 64 20 67 72 61 70 68 20 6f 76 `.returns.an.undirected.graph.ov
d9a0 65 72 20 31 32 38 20 55 53 20 63 69 74 69 65 73 2e 20 54 68 65 0a 63 69 74 69 65 73 20 65 61 63 er.128.US.cities..The.cities.eac
d9c0 68 20 68 61 76 65 20 6c 6f 63 61 74 69 6f 6e 20 61 6e 64 20 70 6f 70 75 6c 61 74 69 6f 6e 20 64 h.have.location.and.population.d
d9e0 61 74 61 2e 20 20 54 68 65 20 65 64 67 65 73 20 61 72 65 20 6c 61 62 65 6c 65 64 20 77 69 74 68 ata...The.edges.are.labeled.with
da00 20 74 68 65 0a 64 69 73 74 61 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 77 6f 20 63 69 .the.distance.between.the.two.ci
da20 74 69 65 73 2e 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 63 72 69 62 65 64 ties...This.example.is.described
da40 20 69 6e 20 53 65 63 74 69 6f 6e 20 31 2e 31 20 6f 66 0a 0a 20 20 20 20 44 6f 6e 61 6c 64 20 45 .in.Section.1.1.of......Donald.E
da60 2e 20 4b 6e 75 74 68 2c 20 22 54 68 65 20 53 74 61 6e 66 6f 72 64 20 47 72 61 70 68 42 61 73 65 ..Knuth,."The.Stanford.GraphBase
da80 3a 20 41 20 50 6c 61 74 66 6f 72 6d 20 66 6f 72 20 43 6f 6d 62 69 6e 61 74 6f 72 69 61 6c 0a 20 :.A.Platform.for.Combinatorial..
daa0 20 20 20 43 6f 6d 70 75 74 69 6e 67 22 2c 20 41 43 4d 20 50 72 65 73 73 2c 20 4e 65 77 20 59 6f ...Computing",.ACM.Press,.New.Yo
dac0 72 6b 2c 20 31 39 39 33 2e 0a 20 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2d 63 73 2d 66 61 63 75 rk,.1993......http://www-cs-facu
dae0 6c 74 79 2e 73 74 61 6e 66 6f 72 64 2e 65 64 75 2f 7e 6b 6e 75 74 68 2f 73 67 62 2e 68 74 6d 6c lty.stanford.edu/~knuth/sgb.html
db00 0a 0a 54 68 65 20 64 61 74 61 20 66 69 6c 65 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 61 74 3a ..The.data.file.can.be.found.at:
db20 0a 0a 2d 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6e 65 74 77 6f 72 6b 78 2f ..-.https://github.com/networkx/
db40 6e 65 74 77 6f 72 6b 78 2f 62 6c 6f 62 2f 6d 61 69 6e 2f 65 78 61 6d 70 6c 65 73 2f 64 72 61 77 networkx/blob/main/examples/draw
db60 69 6e 67 2f 6b 6e 75 74 68 5f 6d 69 6c 65 73 2e 74 78 74 2e 67 7a 0a 22 22 22 0a 0a 69 6d 70 6f ing/knuth_miles.txt.gz."""..impo
db80 72 74 20 67 7a 69 70 0a 69 6d 70 6f 72 74 20 72 65 0a 0a 23 20 49 67 6e 6f 72 65 20 61 6e 79 20 rt.gzip.import.re..#.Ignore.any.
dba0 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 69 6e 67 20 warnings.related.to.downloading.
dbc0 73 68 70 66 69 6c 65 73 20 77 69 74 68 20 63 61 72 74 6f 70 79 0a 69 6d 70 6f 72 74 20 77 61 72 shpfiles.with.cartopy.import.war
dbe0 6e 69 6e 67 73 0a 0a 77 61 72 6e 69 6e 67 73 2e 73 69 6d 70 6c 65 66 69 6c 74 65 72 28 22 69 67 nings..warnings.simplefilter("ig
dc00 6e 6f 72 65 22 29 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 nore")..import.numpy.as.np.impor
dc20 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 t.matplotlib.pyplot.as.plt.impor
dc40 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 0a 64 65 66 20 6d 69 6c 65 73 5f 67 72 61 t.networkx.as.nx...def.miles_gra
dc60 70 68 28 29 3a 0a 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 74 68 65 20 63 69 74 65 73 20 65 78 ph():....."""Return.the.cites.ex
dc80 61 6d 70 6c 65 20 67 72 61 70 68 20 69 6e 20 6d 69 6c 65 73 5f 64 61 74 2e 74 78 74 0a 20 20 20 ample.graph.in.miles_dat.txt....
dca0 20 66 72 6f 6d 20 74 68 65 20 53 74 61 6e 66 6f 72 64 20 47 72 61 70 68 42 61 73 65 2e 0a 20 20 .from.the.Stanford.GraphBase....
dcc0 20 20 22 22 22 0a 20 20 20 20 23 20 6f 70 65 6e 20 66 69 6c 65 20 6d 69 6c 65 73 5f 64 61 74 2e ..""".....#.open.file.miles_dat.
dce0 74 78 74 2e 67 7a 20 28 6f 72 20 6d 69 6c 65 73 5f 64 61 74 2e 74 78 74 29 0a 0a 20 20 20 20 66 txt.gz.(or.miles_dat.txt)......f
dd00 68 20 3d 20 67 7a 69 70 2e 6f 70 65 6e 28 22 6b 6e 75 74 68 5f 6d 69 6c 65 73 2e 74 78 74 2e 67 h.=.gzip.open("knuth_miles.txt.g
dd20 7a 22 2c 20 22 72 22 29 0a 0a 20 20 20 20 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 20 20 20 z",."r")......G.=.nx.Graph()....
dd40 20 47 2e 70 6f 73 69 74 69 6f 6e 20 3d 20 7b 7d 0a 20 20 20 20 47 2e 70 6f 70 75 6c 61 74 69 6f .G.position.=.{}.....G.populatio
dd60 6e 20 3d 20 7b 7d 0a 0a 20 20 20 20 63 69 74 69 65 73 20 3d 20 5b 5d 0a 20 20 20 20 66 6f 72 20 n.=.{}......cities.=.[].....for.
dd80 6c 69 6e 65 20 69 6e 20 66 68 2e 72 65 61 64 6c 69 6e 65 73 28 29 3a 0a 20 20 20 20 20 20 20 20 line.in.fh.readlines():.........
dda0 6c 69 6e 65 20 3d 20 6c 69 6e 65 2e 64 65 63 6f 64 65 28 29 0a 20 20 20 20 20 20 20 20 69 66 20 line.=.line.decode().........if.
ddc0 6c 69 6e 65 2e 73 74 61 72 74 73 77 69 74 68 28 22 2a 22 29 3a 20 20 23 20 73 6b 69 70 20 63 6f line.startswith("*"):..#.skip.co
dde0 6d 6d 65 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 0a 20 20 20 mments.............continue.....
de00 20 20 20 20 20 6e 75 6d 66 69 6e 64 20 3d 20 72 65 2e 63 6f 6d 70 69 6c 65 28 72 22 5e 5c 64 2b .....numfind.=.re.compile(r"^\d+
de20 22 29 0a 0a 20 20 20 20 20 20 20 20 69 66 20 6e 75 6d 66 69 6e 64 2e 6d 61 74 63 68 28 6c 69 6e ")..........if.numfind.match(lin
de40 65 29 3a 20 20 23 20 74 68 69 73 20 6c 69 6e 65 20 69 73 20 64 69 73 74 61 6e 63 65 73 0a 20 20 e):..#.this.line.is.distances...
de60 20 20 20 20 20 20 20 20 20 20 64 69 73 74 20 3d 20 6c 69 6e 65 2e 73 70 6c 69 74 28 29 0a 20 20 ..........dist.=.line.split()...
de80 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 64 20 69 6e 20 64 69 73 74 3a 0a 20 20 20 20 20 20 20 ..........for.d.in.dist:........
dea0 20 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 63 69 74 79 2c 20 63 69 74 69 65 73 .........G.add_edge(city,.cities
dec0 5b 69 5d 2c 20 77 65 69 67 68 74 3d 69 6e 74 28 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 [i],.weight=int(d)).............
dee0 20 20 20 20 69 20 3d 20 69 20 2b 20 31 0a 20 20 20 20 20 20 20 20 65 6c 73 65 3a 20 20 23 20 74 ....i.=.i.+.1.........else:..#.t
df00 68 69 73 20 6c 69 6e 65 20 69 73 20 61 20 63 69 74 79 2c 20 70 6f 73 69 74 69 6f 6e 2c 20 70 6f his.line.is.a.city,.position,.po
df20 70 75 6c 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 20 3d 20 31 0a 20 20 20 20 20 pulation.............i.=.1......
df40 20 20 20 20 20 20 20 28 63 69 74 79 2c 20 63 6f 6f 72 64 70 6f 70 29 20 3d 20 6c 69 6e 65 2e 73 .......(city,.coordpop).=.line.s
df60 70 6c 69 74 28 22 5b 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 69 74 69 65 73 2e 69 6e 73 plit("[").............cities.ins
df80 65 72 74 28 30 2c 20 63 69 74 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6f 72 64 2c ert(0,.city).............(coord,
dfa0 20 70 6f 70 29 20 3d 20 63 6f 6f 72 64 70 6f 70 2e 73 70 6c 69 74 28 22 5d 22 29 0a 20 20 20 20 .pop).=.coordpop.split("]").....
dfc0 20 20 20 20 20 20 20 20 28 79 2c 20 78 29 20 3d 20 63 6f 6f 72 64 2e 73 70 6c 69 74 28 22 2c 22 ........(y,.x).=.coord.split(","
dfe0 29 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 6e 6f 64 65 28 63 69 74 79 29 0a )..............G.add_node(city).
e000 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 73 73 69 67 6e 20 70 6f 73 69 74 69 6f 6e 20 2d 20 ............#.assign.position.-.
e020 43 6f 6e 76 65 72 74 20 73 74 72 69 6e 67 20 74 6f 20 6c 61 74 2f 6c 6f 6e 67 0a 20 20 20 20 20 Convert.string.to.lat/long......
e040 20 20 20 20 20 20 20 47 2e 70 6f 73 69 74 69 6f 6e 5b 63 69 74 79 5d 20 3d 20 28 2d 66 6c 6f 61 .......G.position[city].=.(-floa
e060 74 28 78 29 20 2f 20 31 30 30 2c 20 66 6c 6f 61 74 28 79 29 20 2f 20 31 30 30 29 0a 20 20 20 20 t(x)./.100,.float(y)./.100).....
e080 20 20 20 20 20 20 20 20 47 2e 70 6f 70 75 6c 61 74 69 6f 6e 5b 63 69 74 79 5d 20 3d 20 66 6c 6f ........G.population[city].=.flo
e0a0 61 74 28 70 6f 70 29 20 2f 20 31 30 30 30 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 47 20 at(pop)./.1000.....return.G...G.
e0c0 3d 20 6d 69 6c 65 73 5f 67 72 61 70 68 28 29 0a 0a 70 72 69 6e 74 28 22 4c 6f 61 64 65 64 20 6d =.miles_graph()..print("Loaded.m
e0e0 69 6c 65 73 5f 64 61 74 2e 74 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 31 32 38 20 63 69 74 69 iles_dat.txt.containing.128.citi
e100 65 73 2e 22 29 0a 70 72 69 6e 74 28 47 29 0a 0a 23 20 6d 61 6b 65 20 6e 65 77 20 67 72 61 70 68 es.").print(G)..#.make.new.graph
e120 20 6f 66 20 63 69 74 65 73 2c 20 65 64 67 65 20 69 66 20 6c 65 73 73 20 74 68 65 6e 20 33 30 30 .of.cites,.edge.if.less.then.300
e140 20 6d 69 6c 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 6d 0a 48 20 3d 20 6e 78 2e 47 72 61 70 68 .miles.between.them.H.=.nx.Graph
e160 28 29 0a 66 6f 72 20 76 20 69 6e 20 47 3a 0a 20 20 20 20 48 2e 61 64 64 5f 6e 6f 64 65 28 76 29 ().for.v.in.G:.....H.add_node(v)
e180 0a 66 6f 72 20 75 2c 20 76 2c 20 64 20 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 .for.u,.v,.d.in.G.edges(data=Tru
e1a0 65 29 3a 0a 20 20 20 20 69 66 20 64 5b 22 77 65 69 67 68 74 22 5d 20 3c 20 33 30 30 3a 0a 20 20 e):.....if.d["weight"].<.300:...
e1c0 20 20 20 20 20 20 48 2e 61 64 64 5f 65 64 67 65 28 75 2c 20 76 29 0a 0a 23 20 64 72 61 77 20 77 ......H.add_edge(u,.v)..#.draw.w
e1e0 69 74 68 20 6d 61 74 70 6c 6f 74 6c 69 62 2f 70 79 6c 61 62 0a 66 69 67 20 3d 20 70 6c 74 2e 66 ith.matplotlib/pylab.fig.=.plt.f
e200 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 38 2c 20 36 29 29 0a 0a 23 20 6e 6f 64 65 73 20 63 igure(figsize=(8,.6))..#.nodes.c
e220 6f 6c 6f 72 65 64 20 62 79 20 64 65 67 72 65 65 20 73 69 7a 65 64 20 62 79 20 70 6f 70 75 6c 61 olored.by.degree.sized.by.popula
e240 74 69 6f 6e 0a 6e 6f 64 65 5f 63 6f 6c 6f 72 20 3d 20 5b 66 6c 6f 61 74 28 48 2e 64 65 67 72 65 tion.node_color.=.[float(H.degre
e260 65 28 76 29 29 20 66 6f 72 20 76 20 69 6e 20 48 5d 0a 0a 23 20 55 73 65 20 63 61 72 74 6f 70 79 e(v)).for.v.in.H]..#.Use.cartopy
e280 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 62 61 63 6b 64 72 6f 70 20 66 6f 72 20 74 68 65 20 76 .to.provide.a.backdrop.for.the.v
e2a0 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0a 74 72 79 3a 0a 20 20 20 20 69 6d 70 6f 72 74 20 63 61 72 isualization.try:.....import.car
e2c0 74 6f 70 79 2e 63 72 73 20 61 73 20 63 63 72 73 0a 20 20 20 20 69 6d 70 6f 72 74 20 63 61 72 74 topy.crs.as.ccrs.....import.cart
e2e0 6f 70 79 2e 69 6f 2e 73 68 61 70 65 72 65 61 64 65 72 20 61 73 20 73 68 70 72 65 61 64 65 72 0a opy.io.shapereader.as.shpreader.
e300 0a 20 20 20 20 61 78 20 3d 20 66 69 67 2e 61 64 64 5f 61 78 65 73 28 5b 30 2c 20 30 2c 20 31 2c .....ax.=.fig.add_axes([0,.0,.1,
e320 20 31 5d 2c 20 70 72 6f 6a 65 63 74 69 6f 6e 3d 63 63 72 73 2e 4c 61 6d 62 65 72 74 43 6f 6e 66 .1],.projection=ccrs.LambertConf
e340 6f 72 6d 61 6c 28 29 2c 20 66 72 61 6d 65 6f 6e 3d 46 61 6c 73 65 29 0a 20 20 20 20 61 78 2e 73 ormal(),.frameon=False).....ax.s
e360 65 74 5f 65 78 74 65 6e 74 28 5b 2d 31 32 35 2c 20 2d 36 36 2e 35 2c 20 32 30 2c 20 35 30 5d 2c et_extent([-125,.-66.5,.20,.50],
e380 20 63 63 72 73 2e 47 65 6f 64 65 74 69 63 28 29 29 0a 20 20 20 20 23 20 41 64 64 20 6d 61 70 20 .ccrs.Geodetic()).....#.Add.map.
e3a0 6f 66 20 63 6f 75 6e 74 72 69 65 73 20 26 20 55 53 20 73 74 61 74 65 73 20 61 73 20 61 20 62 61 of.countries.&.US.states.as.a.ba
e3c0 63 6b 64 72 6f 70 0a 20 20 20 20 66 6f 72 20 73 68 61 70 65 6e 61 6d 65 20 69 6e 20 28 22 61 64 ckdrop.....for.shapename.in.("ad
e3e0 6d 69 6e 5f 31 5f 73 74 61 74 65 73 5f 70 72 6f 76 69 6e 63 65 73 5f 6c 61 6b 65 73 5f 73 68 70 min_1_states_provinces_lakes_shp
e400 22 2c 20 22 61 64 6d 69 6e 5f 30 5f 63 6f 75 6e 74 72 69 65 73 22 29 3a 0a 20 20 20 20 20 20 20 ",."admin_0_countries"):........
e420 20 73 68 70 20 3d 20 73 68 70 72 65 61 64 65 72 2e 6e 61 74 75 72 61 6c 5f 65 61 72 74 68 28 0a .shp.=.shpreader.natural_earth(.
e440 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 6f 6c 75 74 69 6f 6e 3d 22 31 31 30 6d 22 2c 20 63 ............resolution="110m",.c
e460 61 74 65 67 6f 72 79 3d 22 63 75 6c 74 75 72 61 6c 22 2c 20 6e 61 6d 65 3d 73 68 61 70 65 6e 61 ategory="cultural",.name=shapena
e480 6d 65 0a 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20 20 20 20 61 78 2e 61 64 64 5f 67 65 6f 6d me.........).........ax.add_geom
e4a0 65 74 72 69 65 73 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 68 70 72 65 61 64 65 72 2e 52 65 etries(.............shpreader.Re
e4c0 61 64 65 72 28 73 68 70 29 2e 67 65 6f 6d 65 74 72 69 65 73 28 29 2c 0a 20 20 20 20 20 20 20 20 ader(shp).geometries(),.........
e4e0 20 20 20 20 63 63 72 73 2e 50 6c 61 74 65 43 61 72 72 65 65 28 29 2c 0a 20 20 20 20 20 20 20 20 ....ccrs.PlateCarree(),.........
e500 20 20 20 20 66 61 63 65 63 6f 6c 6f 72 3d 22 6e 6f 6e 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 ....facecolor="none",...........
e520 20 20 65 64 67 65 63 6f 6c 6f 72 3d 22 6b 22 2c 0a 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 23 ..edgecolor="k",.........).....#
e540 20 4e 4f 54 45 3a 20 57 68 65 6e 20 75 73 69 6e 67 20 63 61 72 74 6f 70 79 2c 20 75 73 65 20 6d .NOTE:.When.using.cartopy,.use.m
e560 61 74 70 6c 6f 74 6c 69 62 20 64 69 72 65 63 74 6c 79 20 72 61 74 68 65 72 20 74 68 61 6e 20 6e atplotlib.directly.rather.than.n
e580 78 2e 64 72 61 77 0a 20 20 20 20 23 20 74 6f 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 6f x.draw.....#.to.take.advantage.o
e5a0 66 20 74 68 65 20 63 61 72 74 6f 70 79 20 74 72 61 6e 73 66 6f 72 6d 73 0a 20 20 20 20 61 78 2e f.the.cartopy.transforms.....ax.
e5c0 73 63 61 74 74 65 72 28 0a 20 20 20 20 20 20 20 20 2a 6e 70 2e 61 72 72 61 79 28 6c 69 73 74 28 scatter(.........*np.array(list(
e5e0 47 2e 70 6f 73 69 74 69 6f 6e 2e 76 61 6c 75 65 73 28 29 29 29 2e 54 2c 0a 20 20 20 20 20 20 20 G.position.values())).T,........
e600 20 73 3d 5b 47 2e 70 6f 70 75 6c 61 74 69 6f 6e 5b 76 5d 20 66 6f 72 20 76 20 69 6e 20 48 5d 2c .s=[G.population[v].for.v.in.H],
e620 0a 20 20 20 20 20 20 20 20 63 3d 6e 6f 64 65 5f 63 6f 6c 6f 72 2c 0a 20 20 20 20 20 20 20 20 74 .........c=node_color,.........t
e640 72 61 6e 73 66 6f 72 6d 3d 63 63 72 73 2e 50 6c 61 74 65 43 61 72 72 65 65 28 29 2c 0a 20 20 20 ransform=ccrs.PlateCarree(),....
e660 20 20 20 20 20 7a 6f 72 64 65 72 3d 31 30 30 20 20 23 20 45 6e 73 75 72 65 20 6e 6f 64 65 73 20 .....zorder=100..#.Ensure.nodes.
e680 6c 69 65 20 6f 6e 20 74 6f 70 20 6f 66 20 65 64 67 65 73 2f 73 74 61 74 65 20 6c 69 6e 65 73 0a lie.on.top.of.edges/state.lines.
e6a0 20 20 20 20 29 0a 20 20 20 20 23 20 50 6c 6f 74 20 65 64 67 65 73 20 62 65 74 77 65 65 6e 20 74 ....).....#.Plot.edges.between.t
e6c0 68 65 20 63 69 74 69 65 73 0a 20 20 20 20 66 6f 72 20 65 64 67 65 20 69 6e 20 48 2e 65 64 67 65 he.cities.....for.edge.in.H.edge
e6e0 73 28 29 3a 0a 20 20 20 20 20 20 20 20 65 64 67 65 5f 63 6f 6f 72 64 73 20 3d 20 6e 70 2e 61 72 s():.........edge_coords.=.np.ar
e700 72 61 79 28 5b 47 2e 70 6f 73 69 74 69 6f 6e 5b 76 5d 20 66 6f 72 20 76 20 69 6e 20 65 64 67 65 ray([G.position[v].for.v.in.edge
e720 5d 29 0a 20 20 20 20 20 20 20 20 61 78 2e 70 6c 6f 74 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 ]).........ax.plot(.............
e740 65 64 67 65 5f 63 6f 6f 72 64 73 5b 3a 2c 20 30 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 edge_coords[:,.0],.............e
e760 64 67 65 5f 63 6f 6f 72 64 73 5b 3a 2c 20 31 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 dge_coords[:,.1],.............tr
e780 61 6e 73 66 6f 72 6d 3d 63 63 72 73 2e 50 6c 61 74 65 43 61 72 72 65 65 28 29 2c 0a 20 20 20 20 ansform=ccrs.PlateCarree(),.....
e7a0 20 20 20 20 20 20 20 20 6c 69 6e 65 77 69 64 74 68 3d 30 2e 37 35 2c 0a 20 20 20 20 20 20 20 20 ........linewidth=0.75,.........
e7c0 20 20 20 20 63 6f 6c 6f 72 3d 22 6b 22 2c 0a 20 20 20 20 20 20 20 20 29 0a 0a 65 78 63 65 70 74 ....color="k",.........)..except
e7e0 20 49 6d 70 6f 72 74 45 72 72 6f 72 3a 0a 20 20 20 20 23 20 49 66 20 63 61 72 74 6f 70 79 20 69 .ImportError:.....#.If.cartopy.i
e800 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 20 62 61 63 6b 64 72 6f 70 20 66 6f 72 20 s.unavailable,.the.backdrop.for.
e820 74 68 65 20 70 6c 6f 74 20 77 69 6c 6c 20 62 65 20 62 6c 61 6e 6b 3b 0a 20 20 20 20 23 20 74 68 the.plot.will.be.blank;.....#.th
e840 6f 75 67 68 20 79 6f 75 20 73 68 6f 75 6c 64 20 73 74 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f ough.you.should.still.be.able.to
e860 20 64 69 73 63 65 72 6e 20 74 68 65 20 67 65 6e 65 72 61 6c 20 73 68 61 70 65 20 6f 66 20 74 68 .discern.the.general.shape.of.th
e880 65 20 55 53 0a 20 20 20 20 23 20 66 72 6f 6d 20 67 72 61 70 68 20 6e 6f 64 65 73 20 61 6e 64 20 e.US.....#.from.graph.nodes.and.
e8a0 65 64 67 65 73 21 0a 20 20 20 20 6e 78 2e 64 72 61 77 28 0a 20 20 20 20 20 20 20 20 48 2c 0a 20 edges!.....nx.draw(.........H,..
e8c0 20 20 20 20 20 20 20 47 2e 70 6f 73 69 74 69 6f 6e 2c 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 5f .......G.position,.........node_
e8e0 73 69 7a 65 3d 5b 47 2e 70 6f 70 75 6c 61 74 69 6f 6e 5b 76 5d 20 66 6f 72 20 76 20 69 6e 20 48 size=[G.population[v].for.v.in.H
e900 5d 2c 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 6f 64 65 5f 63 6f 6c 6f 72 ],.........node_color=node_color
e920 2c 0a 20 20 20 20 20 20 20 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 2c 0a 20 20 20 ,.........with_labels=False,....
e940 20 29 0a 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 fb 7a 57 56 c9 61 01 .)..plt.show().PK.........zWV.a.
e960 95 e3 11 00 00 e3 11 00 00 1d 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 63 68 65 73 73 5f .............drawing/plot_chess_
e980 6d 61 73 74 65 72 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 43 68 65 73 masters.py""".=============.Ches
e9a0 73 20 4d 61 73 74 65 72 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 41 6e 20 65 78 61 6d s.Masters.=============..An.exam
e9c0 70 6c 65 20 6f 66 20 74 68 65 20 4d 75 6c 74 69 44 69 47 72 61 70 68 20 63 6c 61 73 73 2e 0a 0a ple.of.the.MultiDiGraph.class...
e9e0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 60 63 68 65 73 73 5f 70 67 6e 5f 67 72 61 70 68 60 20 72 The.function.`chess_pgn_graph`.r
ea00 65 61 64 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 63 68 65 73 73 20 6d 61 74 63 68 eads.a.collection.of.chess.match
ea20 65 73 20 73 74 6f 72 65 64 20 69 6e 0a 74 68 65 20 73 70 65 63 69 66 69 65 64 20 50 47 4e 20 66 es.stored.in.the.specified.PGN.f
ea40 69 6c 65 20 28 50 47 4e 20 3d 22 50 6f 72 74 61 62 6c 65 20 47 61 6d 65 20 4e 6f 74 61 74 69 6f ile.(PGN.="Portable.Game.Notatio
ea60 6e 22 29 2e 20 20 48 65 72 65 20 74 68 65 20 28 63 6f 6d 70 72 65 73 73 65 64 29 0a 64 65 66 61 n")...Here.the.(compressed).defa
ea80 75 6c 74 20 66 69 6c 65 3a 3a 0a 0a 20 20 20 20 63 68 65 73 73 5f 6d 61 73 74 65 72 73 5f 57 43 ult.file::......chess_masters_WC
eaa0 43 2e 70 67 6e 2e 62 7a 32 0a 0a 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 36 38 35 20 57 6f 72 6c C.pgn.bz2..contains.all.685.Worl
eac0 64 20 43 68 65 73 73 20 43 68 61 6d 70 69 6f 6e 73 68 69 70 20 6d 61 74 63 68 65 73 20 66 72 6f d.Chess.Championship.matches.fro
eae0 6d 20 31 38 38 36 2d 2d 31 39 38 35 2e 0a 28 64 61 74 61 20 66 72 6f 6d 20 68 74 74 70 3a 2f 2f m.1886--1985..(data.from.http://
eb00 63 68 65 73 73 70 72 6f 62 6c 65 6d 2e 6d 79 2d 66 72 65 65 2d 67 61 6d 65 73 2e 63 6f 6d 2f 63 chessproblem.my-free-games.com/c
eb20 68 65 73 73 2f 67 61 6d 65 73 2f 44 6f 77 6e 6c 6f 61 64 2d 50 47 4e 2e 70 68 70 29 0a 0a 54 68 hess/games/Download-PGN.php)..Th
eb40 65 20 60 63 68 65 73 73 5f 70 67 6e 5f 67 72 61 70 68 28 29 60 20 66 75 6e 63 74 69 6f 6e 20 72 e.`chess_pgn_graph()`.function.r
eb60 65 74 75 72 6e 73 20 61 20 60 4d 75 6c 74 69 44 69 47 72 61 70 68 60 20 77 69 74 68 20 6d 75 6c eturns.a.`MultiDiGraph`.with.mul
eb80 74 69 70 6c 65 20 65 64 67 65 73 2e 0a 45 61 63 68 20 6e 6f 64 65 20 69 73 20 74 68 65 20 6c 61 tiple.edges..Each.node.is.the.la
eba0 73 74 20 6e 61 6d 65 20 6f 66 20 61 20 63 68 65 73 73 20 6d 61 73 74 65 72 2e 20 45 61 63 68 20 st.name.of.a.chess.master..Each.
ebc0 65 64 67 65 20 69 73 20 64 69 72 65 63 74 65 64 20 66 72 6f 6d 20 77 68 69 74 65 0a 74 6f 20 62 edge.is.directed.from.white.to.b
ebe0 6c 61 63 6b 20 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 73 65 6c 65 63 74 65 64 20 67 61 6d 65 20 lack.and.contains.selected.game.
ec00 69 6e 66 6f 2e 0a 0a 54 68 65 20 6b 65 79 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 60 63 68 65 info...The.key.statement.in.`che
ec20 73 73 5f 70 67 6e 5f 67 72 61 70 68 60 20 62 65 6c 6f 77 20 69 73 3a 3a 0a 0a 20 20 20 20 47 2e ss_pgn_graph`.below.is::......G.
ec40 61 64 64 5f 65 64 67 65 28 77 68 69 74 65 2c 20 62 6c 61 63 6b 2c 20 67 61 6d 65 5f 69 6e 66 6f add_edge(white,.black,.game_info
ec60 29 0a 0a 77 68 65 72 65 20 60 67 61 6d 65 5f 69 6e 66 6f 60 20 69 73 20 61 20 60 64 69 63 74 60 )..where.`game_info`.is.a.`dict`
ec80 20 64 65 73 63 72 69 62 69 6e 67 20 65 61 63 68 20 67 61 6d 65 2e 0a 22 22 22 0a 0a 69 6d 70 6f .describing.each.game.."""..impo
eca0 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f rt.matplotlib.pyplot.as.plt.impo
ecc0 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 23 20 74 61 67 20 6e 61 6d 65 73 20 73 rt.networkx.as.nx..#.tag.names.s
ece0 70 65 63 69 66 79 69 6e 67 20 77 68 61 74 20 67 61 6d 65 20 69 6e 66 6f 20 73 68 6f 75 6c 64 20 pecifying.what.game.info.should.
ed00 62 65 0a 23 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 69 63 74 20 6f 6e 20 65 61 63 68 20 be.#.stored.in.the.dict.on.each.
ed20 64 69 67 72 61 70 68 20 65 64 67 65 0a 67 61 6d 65 5f 64 65 74 61 69 6c 73 20 3d 20 5b 22 45 76 digraph.edge.game_details.=.["Ev
ed40 65 6e 74 22 2c 20 22 44 61 74 65 22 2c 20 22 52 65 73 75 6c 74 22 2c 20 22 45 43 4f 22 2c 20 22 ent",."Date",."Result",."ECO",."
ed60 53 69 74 65 22 5d 0a 0a 0a 64 65 66 20 63 68 65 73 73 5f 70 67 6e 5f 67 72 61 70 68 28 70 67 6e Site"]...def.chess_pgn_graph(pgn
ed80 5f 66 69 6c 65 3d 22 63 68 65 73 73 5f 6d 61 73 74 65 72 73 5f 57 43 43 2e 70 67 6e 2e 62 7a 32 _file="chess_masters_WCC.pgn.bz2
eda0 22 29 3a 0a 20 20 20 20 22 22 22 52 65 61 64 20 63 68 65 73 73 20 67 61 6d 65 73 20 69 6e 20 70 "):....."""Read.chess.games.in.p
edc0 67 6e 20 66 6f 72 6d 61 74 20 69 6e 20 70 67 6e 5f 66 69 6c 65 2e 0a 0a 20 20 20 20 46 69 6c 65 gn.format.in.pgn_file.......File
ede0 6e 61 6d 65 73 20 65 6e 64 69 6e 67 20 69 6e 20 2e 62 7a 32 20 77 69 6c 6c 20 62 65 20 75 6e 63 names.ending.in..bz2.will.be.unc
ee00 6f 6d 70 72 65 73 73 65 64 2e 0a 0a 20 20 20 20 52 65 74 75 72 6e 20 74 68 65 20 4d 75 6c 74 69 ompressed.......Return.the.Multi
ee20 44 69 47 72 61 70 68 20 6f 66 20 70 6c 61 79 65 72 73 20 63 6f 6e 6e 65 63 74 65 64 20 62 79 20 DiGraph.of.players.connected.by.
ee40 61 20 63 68 65 73 73 20 67 61 6d 65 2e 0a 20 20 20 20 45 64 67 65 73 20 63 6f 6e 74 61 69 6e 20 a.chess.game......Edges.contain.
ee60 67 61 6d 65 20 64 61 74 61 20 69 6e 20 61 20 64 69 63 74 2e 0a 0a 20 20 20 20 22 22 22 0a 20 20 game.data.in.a.dict......."""...
ee80 20 20 69 6d 70 6f 72 74 20 62 7a 32 0a 0a 20 20 20 20 47 20 3d 20 6e 78 2e 4d 75 6c 74 69 44 69 ..import.bz2......G.=.nx.MultiDi
eea0 47 72 61 70 68 28 29 0a 20 20 20 20 67 61 6d 65 20 3d 20 7b 7d 0a 20 20 20 20 77 69 74 68 20 62 Graph().....game.=.{}.....with.b
eec0 7a 32 2e 42 5a 32 46 69 6c 65 28 70 67 6e 5f 66 69 6c 65 29 20 61 73 20 64 61 74 61 66 69 6c 65 z2.BZ2File(pgn_file).as.datafile
eee0 3a 0a 20 20 20 20 20 20 20 20 6c 69 6e 65 73 20 3d 20 5b 6c 69 6e 65 2e 64 65 63 6f 64 65 28 29 :.........lines.=.[line.decode()
ef00 2e 72 73 74 72 69 70 28 22 5c 72 5c 6e 22 29 20 66 6f 72 20 6c 69 6e 65 20 69 6e 20 64 61 74 61 .rstrip("\r\n").for.line.in.data
ef20 66 69 6c 65 5d 0a 20 20 20 20 66 6f 72 20 6c 69 6e 65 20 69 6e 20 6c 69 6e 65 73 3a 0a 20 20 20 file].....for.line.in.lines:....
ef40 20 20 20 20 20 69 66 20 6c 69 6e 65 2e 73 74 61 72 74 73 77 69 74 68 28 22 5b 22 29 3a 0a 20 20 .....if.line.startswith("["):...
ef60 20 20 20 20 20 20 20 20 20 20 74 61 67 2c 20 76 61 6c 75 65 20 3d 20 6c 69 6e 65 5b 31 3a 2d 31 ..........tag,.value.=.line[1:-1
ef80 5d 2e 73 70 6c 69 74 28 22 20 22 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 61 6d 65 ].split(".",.1).............game
efa0 5b 73 74 72 28 74 61 67 29 5d 20 3d 20 76 61 6c 75 65 2e 73 74 72 69 70 28 27 22 27 29 0a 20 20 [str(tag)].=.value.strip('"')...
efc0 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 65 6d 70 74 79 20 ......else:.............#.empty.
efe0 6c 69 6e 65 20 61 66 74 65 72 20 74 61 67 20 73 65 74 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 line.after.tag.set.indicates....
f000 20 20 20 20 20 20 20 20 20 23 20 77 65 20 66 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 20 67 .........#.we.finished.reading.g
f020 61 6d 65 20 69 6e 66 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 67 61 6d 65 3a 0a 20 20 ame.info.............if.game:...
f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 74 65 20 3d 20 67 61 6d 65 2e 70 6f 70 28 22 ..............white.=.game.pop("
f060 57 68 69 74 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 61 63 6b 20 3d 20 White").................black.=.
f080 67 61 6d 65 2e 70 6f 70 28 22 42 6c 61 63 6b 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 game.pop("Black")...............
f0a0 20 20 47 2e 61 64 64 5f 65 64 67 65 28 77 68 69 74 65 2c 20 62 6c 61 63 6b 2c 20 2a 2a 67 61 6d ..G.add_edge(white,.black,.**gam
f0c0 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 61 6d 65 20 3d 20 7b 7d 0a 20 20 20 e).................game.=.{}....
f0e0 20 72 65 74 75 72 6e 20 47 0a 0a 0a 47 20 3d 20 63 68 65 73 73 5f 70 67 6e 5f 67 72 61 70 68 28 .return.G...G.=.chess_pgn_graph(
f100 29 0a 0a 70 72 69 6e 74 28 0a 20 20 20 20 66 22 4c 6f 61 64 65 64 20 7b 47 2e 6e 75 6d 62 65 72 )..print(.....f"Loaded.{G.number
f120 5f 6f 66 5f 65 64 67 65 73 28 29 7d 20 63 68 65 73 73 20 67 61 6d 65 73 20 62 65 74 77 65 65 6e _of_edges()}.chess.games.between
f140 20 7b 47 2e 6e 75 6d 62 65 72 5f 6f 66 5f 6e 6f 64 65 73 28 29 7d 20 70 6c 61 79 65 72 73 5c 6e .{G.number_of_nodes()}.players\n
f160 22 0a 29 0a 0a 23 20 69 64 65 6e 74 69 66 79 20 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e ".)..#.identify.connected.compon
f180 65 6e 74 73 20 6f 66 20 74 68 65 20 75 6e 64 69 72 65 63 74 65 64 20 76 65 72 73 69 6f 6e 0a 48 ents.of.the.undirected.version.H
f1a0 20 3d 20 47 2e 74 6f 5f 75 6e 64 69 72 65 63 74 65 64 28 29 0a 47 63 63 20 3d 20 5b 48 2e 73 75 .=.G.to_undirected().Gcc.=.[H.su
f1c0 62 67 72 61 70 68 28 63 29 20 66 6f 72 20 63 20 69 6e 20 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f bgraph(c).for.c.in.nx.connected_
f1e0 63 6f 6d 70 6f 6e 65 6e 74 73 28 48 29 5d 0a 69 66 20 6c 65 6e 28 47 63 63 29 20 3e 20 31 3a 0a components(H)].if.len(Gcc).>.1:.
f200 20 20 20 20 70 72 69 6e 74 28 66 22 4e 6f 74 65 20 74 68 65 20 64 69 73 63 6f 6e 6e 65 63 74 65 ....print(f"Note.the.disconnecte
f220 64 20 63 6f 6d 70 6f 6e 65 6e 74 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 3a 5c 6e 7b 47 63 63 d.component.consisting.of:\n{Gcc
f240 5b 31 5d 2e 6e 6f 64 65 73 28 29 7d 22 29 0a 0a 23 20 66 69 6e 64 20 61 6c 6c 20 67 61 6d 65 73 [1].nodes()}")..#.find.all.games
f260 20 77 69 74 68 20 42 39 37 20 6f 70 65 6e 69 6e 67 20 28 61 73 20 64 65 73 63 72 69 62 65 64 20 .with.B97.opening.(as.described.
f280 69 6e 20 45 43 4f 29 0a 6f 70 65 6e 69 6e 67 73 20 3d 20 7b 67 61 6d 65 5f 69 6e 66 6f 5b 22 45 in.ECO).openings.=.{game_info["E
f2a0 43 4f 22 5d 20 66 6f 72 20 28 77 68 69 74 65 2c 20 62 6c 61 63 6b 2c 20 67 61 6d 65 5f 69 6e 66 CO"].for.(white,.black,.game_inf
f2c0 6f 29 20 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 7d 0a 70 72 69 6e 74 28 o).in.G.edges(data=True)}.print(
f2e0 66 22 5c 6e 46 72 6f 6d 20 61 20 74 6f 74 61 6c 20 6f 66 20 7b 6c 65 6e 28 6f 70 65 6e 69 6e 67 f"\nFrom.a.total.of.{len(opening
f300 73 29 7d 20 64 69 66 66 65 72 65 6e 74 20 6f 70 65 6e 69 6e 67 73 2c 22 29 0a 70 72 69 6e 74 28 s)}.different.openings,").print(
f320 22 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 61 6d 65 73 20 75 73 65 64 20 74 68 65 20 53 69 "the.following.games.used.the.Si
f340 63 69 6c 69 61 6e 20 6f 70 65 6e 69 6e 67 22 29 0a 70 72 69 6e 74 28 27 77 69 74 68 20 74 68 65 cilian.opening").print('with.the
f360 20 4e 61 6a 64 6f 72 66 66 20 37 2e 2e 2e 51 62 36 20 22 50 6f 69 73 6f 6e 65 64 20 50 61 77 6e .Najdorff.7...Qb6."Poisoned.Pawn
f380 22 20 76 61 72 69 61 74 69 6f 6e 2e 5c 6e 27 29 0a 0a 66 6f 72 20 77 68 69 74 65 2c 20 62 6c 61 ".variation.\n')..for.white,.bla
f3a0 63 6b 2c 20 67 61 6d 65 5f 69 6e 66 6f 20 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 ck,.game_info.in.G.edges(data=Tr
f3c0 75 65 29 3a 0a 20 20 20 20 69 66 20 67 61 6d 65 5f 69 6e 66 6f 5b 22 45 43 4f 22 5d 20 3d 3d 20 ue):.....if.game_info["ECO"].==.
f3e0 22 42 39 37 22 3a 0a 20 20 20 20 20 20 20 20 73 75 6d 6d 61 72 79 20 3d 20 66 22 7b 77 68 69 74 "B97":.........summary.=.f"{whit
f400 65 7d 20 76 73 20 7b 62 6c 61 63 6b 7d 5c 6e 22 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6b 2c 20 e}.vs.{black}\n".........for.k,.
f420 76 20 69 6e 20 67 61 6d 65 5f 69 6e 66 6f 2e 69 74 65 6d 73 28 29 3a 0a 20 20 20 20 20 20 20 20 v.in.game_info.items():.........
f440 20 20 20 20 73 75 6d 6d 61 72 79 20 2b 3d 20 66 22 20 20 20 7b 6b 7d 3a 20 7b 76 7d 5c 6e 22 0a ....summary.+=.f"...{k}:.{v}\n".
f460 20 20 20 20 20 20 20 20 73 75 6d 6d 61 72 79 20 2b 3d 20 22 5c 6e 22 0a 20 20 20 20 20 20 20 20 ........summary.+=."\n".........
f480 70 72 69 6e 74 28 73 75 6d 6d 61 72 79 29 0a 0a 23 20 6d 61 6b 65 20 6e 65 77 20 75 6e 64 69 72 print(summary)..#.make.new.undir
f4a0 65 63 74 65 64 20 67 72 61 70 68 20 48 20 77 69 74 68 6f 75 74 20 6d 75 6c 74 69 2d 65 64 67 65 ected.graph.H.without.multi-edge
f4c0 73 0a 48 20 3d 20 6e 78 2e 47 72 61 70 68 28 47 29 0a 0a 23 20 65 64 67 65 20 77 69 64 74 68 20 s.H.=.nx.Graph(G)..#.edge.width.
f4e0 69 73 20 70 72 6f 70 6f 72 74 69 6f 6e 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 67 61 6d 65 73 20 is.proportional.number.of.games.
f500 70 6c 61 79 65 64 0a 65 64 67 65 77 69 64 74 68 20 3d 20 5b 6c 65 6e 28 47 2e 67 65 74 5f 65 64 played.edgewidth.=.[len(G.get_ed
f520 67 65 5f 64 61 74 61 28 75 2c 20 76 29 29 20 66 6f 72 20 75 2c 20 76 20 69 6e 20 48 2e 65 64 67 ge_data(u,.v)).for.u,.v.in.H.edg
f540 65 73 28 29 5d 0a 0a 23 20 6e 6f 64 65 20 73 69 7a 65 20 69 73 20 70 72 6f 70 6f 72 74 69 6f 6e es()]..#.node.size.is.proportion
f560 61 6c 20 74 6f 20 6e 75 6d 62 65 72 20 6f 66 20 67 61 6d 65 73 20 77 6f 6e 0a 77 69 6e 73 20 3d al.to.number.of.games.won.wins.=
f580 20 64 69 63 74 2e 66 72 6f 6d 6b 65 79 73 28 47 2e 6e 6f 64 65 73 28 29 2c 20 30 2e 30 29 0a 66 .dict.fromkeys(G.nodes(),.0.0).f
f5a0 6f 72 20 75 2c 20 76 2c 20 64 20 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 or.u,.v,.d.in.G.edges(data=True)
f5c0 3a 0a 20 20 20 20 72 20 3d 20 64 5b 22 52 65 73 75 6c 74 22 5d 2e 73 70 6c 69 74 28 22 2d 22 29 :.....r.=.d["Result"].split("-")
f5e0 0a 20 20 20 20 69 66 20 72 5b 30 5d 20 3d 3d 20 22 31 22 3a 0a 20 20 20 20 20 20 20 20 77 69 6e .....if.r[0].==."1":.........win
f600 73 5b 75 5d 20 2b 3d 20 31 2e 30 0a 20 20 20 20 65 6c 69 66 20 72 5b 30 5d 20 3d 3d 20 22 31 2f s[u].+=.1.0.....elif.r[0].==."1/
f620 32 22 3a 0a 20 20 20 20 20 20 20 20 77 69 6e 73 5b 75 5d 20 2b 3d 20 30 2e 35 0a 20 20 20 20 20 2":.........wins[u].+=.0.5......
f640 20 20 20 77 69 6e 73 5b 76 5d 20 2b 3d 20 30 2e 35 0a 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 ...wins[v].+=.0.5.....else:.....
f660 20 20 20 20 77 69 6e 73 5b 76 5d 20 2b 3d 20 31 2e 30 0a 6e 6f 64 65 73 69 7a 65 20 3d 20 5b 77 ....wins[v].+=.1.0.nodesize.=.[w
f680 69 6e 73 5b 76 5d 20 2a 20 35 30 20 66 6f 72 20 76 20 69 6e 20 48 5d 0a 0a 23 20 47 65 6e 65 72 ins[v].*.50.for.v.in.H]..#.Gener
f6a0 61 74 65 20 6c 61 79 6f 75 74 20 66 6f 72 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0a 70 6f 73 ate.layout.for.visualization.pos
f6c0 20 3d 20 6e 78 2e 6b 61 6d 61 64 61 5f 6b 61 77 61 69 5f 6c 61 79 6f 75 74 28 48 29 0a 23 20 4d .=.nx.kamada_kawai_layout(H).#.M
f6e0 61 6e 75 61 6c 20 74 77 65 61 6b 69 6e 67 20 74 6f 20 6c 69 6d 69 74 20 6e 6f 64 65 20 6c 61 62 anual.tweaking.to.limit.node.lab
f700 65 6c 20 6f 76 65 72 6c 61 70 20 69 6e 20 74 68 65 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0a el.overlap.in.the.visualization.
f720 70 6f 73 5b 22 52 65 73 68 65 76 73 6b 79 2c 20 53 61 6d 75 65 6c 20 48 22 5d 20 2b 3d 20 28 30 pos["Reshevsky,.Samuel.H"].+=.(0
f740 2e 30 35 2c 20 2d 30 2e 31 30 29 0a 70 6f 73 5b 22 42 6f 74 76 69 6e 6e 69 6b 2c 20 4d 69 6b 68 .05,.-0.10).pos["Botvinnik,.Mikh
f760 61 69 6c 20 4d 22 5d 20 2b 3d 20 28 30 2e 30 33 2c 20 2d 30 2e 30 36 29 0a 70 6f 73 5b 22 53 6d ail.M"].+=.(0.03,.-0.06).pos["Sm
f780 79 73 6c 6f 76 2c 20 56 61 73 73 69 6c 79 20 56 22 5d 20 2b 3d 20 28 30 2e 30 35 2c 20 2d 30 2e yslov,.Vassily.V"].+=.(0.05,.-0.
f7a0 30 33 29 0a 0a 66 69 67 2c 20 61 78 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 66 69 67 73 03)..fig,.ax.=.plt.subplots(figs
f7c0 69 7a 65 3d 28 31 32 2c 20 31 32 29 29 0a 23 20 56 69 73 75 61 6c 69 7a 65 20 67 72 61 70 68 20 ize=(12,.12)).#.Visualize.graph.
f7e0 63 6f 6d 70 6f 6e 65 6e 74 73 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 components.nx.draw_networkx_edge
f800 73 28 48 2c 20 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 33 2c 20 77 69 64 74 68 3d 65 64 67 65 77 s(H,.pos,.alpha=0.3,.width=edgew
f820 69 64 74 68 2c 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 6d 22 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 idth,.edge_color="m").nx.draw_ne
f840 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 48 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 6e tworkx_nodes(H,.pos,.node_size=n
f860 6f 64 65 73 69 7a 65 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 23 32 31 30 30 37 30 22 2c 20 61 odesize,.node_color="#210070",.a
f880 6c 70 68 61 3d 30 2e 39 29 0a 6c 61 62 65 6c 5f 6f 70 74 69 6f 6e 73 20 3d 20 7b 22 65 63 22 3a lpha=0.9).label_options.=.{"ec":
f8a0 20 22 6b 22 2c 20 22 66 63 22 3a 20 22 77 68 69 74 65 22 2c 20 22 61 6c 70 68 61 22 3a 20 30 2e ."k",."fc":."white",."alpha":.0.
f8c0 37 7d 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6c 61 62 65 6c 73 28 48 2c 20 70 6f 7}.nx.draw_networkx_labels(H,.po
f8e0 73 2c 20 66 6f 6e 74 5f 73 69 7a 65 3d 31 34 2c 20 62 62 6f 78 3d 6c 61 62 65 6c 5f 6f 70 74 69 s,.font_size=14,.bbox=label_opti
f900 6f 6e 73 29 0a 0a 23 20 54 69 74 6c 65 2f 6c 65 67 65 6e 64 0a 66 6f 6e 74 20 3d 20 7b 22 66 6f ons)..#.Title/legend.font.=.{"fo
f920 6e 74 6e 61 6d 65 22 3a 20 22 48 65 6c 76 65 74 69 63 61 22 2c 20 22 63 6f 6c 6f 72 22 3a 20 22 ntname":."Helvetica",."color":."
f940 6b 22 2c 20 22 66 6f 6e 74 77 65 69 67 68 74 22 3a 20 22 62 6f 6c 64 22 2c 20 22 66 6f 6e 74 73 k",."fontweight":."bold",."fonts
f960 69 7a 65 22 3a 20 31 34 7d 0a 61 78 2e 73 65 74 5f 74 69 74 6c 65 28 22 57 6f 72 6c 64 20 43 68 ize":.14}.ax.set_title("World.Ch
f980 65 73 73 20 43 68 61 6d 70 69 6f 6e 73 68 69 70 20 47 61 6d 65 73 3a 20 31 38 38 36 20 2d 20 31 ess.Championship.Games:.1886.-.1
f9a0 39 38 35 22 2c 20 66 6f 6e 74 29 0a 23 20 43 68 61 6e 67 65 20 66 6f 6e 74 20 63 6f 6c 6f 72 20 985",.font).#.Change.font.color.
f9c0 66 6f 72 20 6c 65 67 65 6e 64 0a 66 6f 6e 74 5b 22 63 6f 6c 6f 72 22 5d 20 3d 20 22 72 22 0a 0a for.legend.font["color"].=."r"..
f9e0 61 78 2e 74 65 78 74 28 0a 20 20 20 20 30 2e 38 30 2c 0a 20 20 20 20 30 2e 31 30 2c 0a 20 20 20 ax.text(.....0.80,.....0.10,....
fa00 20 22 65 64 67 65 20 77 69 64 74 68 20 3d 20 23 20 67 61 6d 65 73 20 70 6c 61 79 65 64 22 2c 0a ."edge.width.=.#.games.played",.
fa20 20 20 20 20 68 6f 72 69 7a 6f 6e 74 61 6c 61 6c 69 67 6e 6d 65 6e 74 3d 22 63 65 6e 74 65 72 22 ....horizontalalignment="center"
fa40 2c 0a 20 20 20 20 74 72 61 6e 73 66 6f 72 6d 3d 61 78 2e 74 72 61 6e 73 41 78 65 73 2c 0a 20 20 ,.....transform=ax.transAxes,...
fa60 20 20 66 6f 6e 74 64 69 63 74 3d 66 6f 6e 74 2c 0a 29 0a 61 78 2e 74 65 78 74 28 0a 20 20 20 20 ..fontdict=font,.).ax.text(.....
fa80 30 2e 38 30 2c 0a 20 20 20 20 30 2e 30 36 2c 0a 20 20 20 20 22 6e 6f 64 65 20 73 69 7a 65 20 3d 0.80,.....0.06,....."node.size.=
faa0 20 23 20 67 61 6d 65 73 20 77 6f 6e 22 2c 0a 20 20 20 20 68 6f 72 69 7a 6f 6e 74 61 6c 61 6c 69 .#.games.won",.....horizontalali
fac0 67 6e 6d 65 6e 74 3d 22 63 65 6e 74 65 72 22 2c 0a 20 20 20 20 74 72 61 6e 73 66 6f 72 6d 3d 61 gnment="center",.....transform=a
fae0 78 2e 74 72 61 6e 73 41 78 65 73 2c 0a 20 20 20 20 66 6f 6e 74 64 69 63 74 3d 66 6f 6e 74 2c 0a x.transAxes,.....fontdict=font,.
fb00 29 0a 0a 23 20 52 65 73 69 7a 65 20 66 69 67 75 72 65 20 66 6f 72 20 6c 61 62 65 6c 20 72 65 61 )..#.Resize.figure.for.label.rea
fb20 64 61 62 69 6c 69 74 79 0a 61 78 2e 6d 61 72 67 69 6e 73 28 30 2e 31 2c 20 30 2e 30 35 29 0a 66 dability.ax.margins(0.1,.0.05).f
fb40 69 67 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 ig.tight_layout().plt.axis("off"
fb60 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 00 7b 57 56 52 90 4b e1 20 ).plt.show().PK.........{WVR.K..
fb80 01 00 00 20 01 00 00 1d 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 6e 6f 64 65 5f 63 6f 6c ...........drawing/plot_node_col
fba0 6f 72 6d 61 70 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4e 6f 64 65 20 43 ormap.py""".=============.Node.C
fbc0 6f 6c 6f 72 6d 61 70 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 44 72 61 77 20 61 20 67 72 olormap.=============..Draw.a.gr
fbe0 61 70 68 20 77 69 74 68 20 6d 61 74 70 6c 6f 74 6c 69 62 2c 20 63 6f 6c 6f 72 20 62 79 20 64 65 aph.with.matplotlib,.color.by.de
fc00 67 72 65 65 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 gree.."""..import.matplotlib.pyp
fc20 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 lot.as.plt.import.networkx.as.nx
fc40 0a 0a 47 20 3d 20 6e 78 2e 63 79 63 6c 65 5f 67 72 61 70 68 28 32 34 29 0a 70 6f 73 20 3d 20 6e ..G.=.nx.cycle_graph(24).pos.=.n
fc60 78 2e 63 69 72 63 75 6c 61 72 5f 6c 61 79 6f 75 74 28 47 29 0a 6e 78 2e 64 72 61 77 28 47 2c 20 x.circular_layout(G).nx.draw(G,.
fc80 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 72 61 6e 67 65 28 32 34 29 2c 20 6e 6f 64 65 5f pos,.node_color=range(24),.node_
fca0 73 69 7a 65 3d 38 30 30 2c 20 63 6d 61 70 3d 70 6c 74 2e 63 6d 2e 42 6c 75 65 73 29 0a 70 6c 74 size=800,.cmap=plt.cm.Blues).plt
fcc0 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 fb 7a 57 56 2c 86 d6 29 6d 02 00 00 6d 02 .show().PK.........zWV,..)m...m.
fce0 00 00 1b 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 63 65 6e 74 65 72 5f 6e 6f 64 65 2e 70 ......drawing/plot_center_node.p
fd00 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 43 75 73 74 6f 6d y""".====================.Custom
fd20 20 4e 6f 64 65 20 50 6f 73 69 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .Node.Position.=================
fd40 3d 3d 3d 0a 0a 44 72 61 77 20 61 20 67 72 61 70 68 20 77 69 74 68 20 6e 6f 64 65 28 73 29 20 6c ===..Draw.a.graph.with.node(s).l
fd60 6f 63 61 74 65 64 20 61 74 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 70 6f 73 69 74 69 6f 6e 73 ocated.at.user-defined.positions
fd80 2e 0a 0a 57 68 65 6e 20 61 20 70 6f 73 69 74 69 6f 6e 20 69 73 20 73 65 74 20 62 79 20 74 68 65 ...When.a.position.is.set.by.the
fda0 20 75 73 65 72 2c 20 74 68 65 20 6f 74 68 65 72 20 6e 6f 64 65 73 20 63 61 6e 20 73 74 69 6c 6c .user,.the.other.nodes.can.still
fdc0 20 62 65 20 6e 65 61 74 6c 79 20 6f 72 67 61 6e 69 73 65 64 20 69 6e 20 61 20 6c 61 79 6f 75 74 .be.neatly.organised.in.a.layout
fde0 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 .."""..import.networkx.as.nx.imp
fe00 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 0a 47 20 3d 20 6e 78 2e 70 61 74 68 5f 67 72 61 ort.numpy.as.np..G.=.nx.path_gra
fe20 70 68 28 32 30 29 20 20 23 20 41 6e 20 65 78 61 6d 70 6c 65 20 67 72 61 70 68 0a 63 65 6e 74 65 ph(20)..#.An.example.graph.cente
fe40 72 5f 6e 6f 64 65 20 3d 20 35 20 20 23 20 4f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 64 65 20 r_node.=.5..#.Or.any.other.node.
fe60 74 6f 20 62 65 20 69 6e 20 74 68 65 20 63 65 6e 74 65 72 0a 65 64 67 65 5f 6e 6f 64 65 73 20 3d to.be.in.the.center.edge_nodes.=
fe80 20 73 65 74 28 47 29 20 2d 20 7b 63 65 6e 74 65 72 5f 6e 6f 64 65 7d 0a 23 20 45 6e 73 75 72 65 .set(G).-.{center_node}.#.Ensure
fea0 73 20 74 68 65 20 6e 6f 64 65 73 20 61 72 6f 75 6e 64 20 74 68 65 20 63 69 72 63 6c 65 20 61 72 s.the.nodes.around.the.circle.ar
fec0 65 20 65 76 65 6e 6c 79 20 64 69 73 74 72 69 62 75 74 65 64 0a 70 6f 73 20 3d 20 6e 78 2e 63 69 e.evenly.distributed.pos.=.nx.ci
fee0 72 63 75 6c 61 72 5f 6c 61 79 6f 75 74 28 47 2e 73 75 62 67 72 61 70 68 28 65 64 67 65 5f 6e 6f rcular_layout(G.subgraph(edge_no
ff00 64 65 73 29 29 0a 70 6f 73 5b 63 65 6e 74 65 72 5f 6e 6f 64 65 5d 20 3d 20 6e 70 2e 61 72 72 61 des)).pos[center_node].=.np.arra
ff20 79 28 5b 30 2c 20 30 5d 29 20 20 23 20 6d 61 6e 75 61 6c 6c 79 20 73 70 65 63 69 66 79 20 6e 6f y([0,.0])..#.manually.specify.no
ff40 64 65 20 70 6f 73 69 74 69 6f 6e 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 77 69 74 68 de.position.nx.draw(G,.pos,.with
ff60 5f 6c 61 62 65 6c 73 3d 54 72 75 65 29 0a 50 4b 03 04 14 00 00 00 00 00 01 7b 57 56 cb c7 a6 62 _labels=True).PK.........{WV...b
ff80 aa 03 00 00 aa 03 00 00 26 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 72 61 6e 64 6f 6d 5f ........&...drawing/plot_random_
ffa0 67 65 6f 6d 65 74 72 69 63 5f 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d geometric_graph.py""".==========
ffc0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 61 6e 64 6f 6d 20 47 65 6f 6d 65 74 72 69 63 20 47 72 ============.Random.Geometric.Gr
ffe0 61 70 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d aph.======================..Exam
10000 70 6c 65 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f ple."""..import.matplotlib.pyplo
10020 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a t.as.plt.import.networkx.as.nx..
10040 23 20 55 73 65 20 73 65 65 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 67 72 61 #.Use.seed.when.creating.the.gra
10060 70 68 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 0a 47 20 3d 20 6e 78 2e 72 61 ph.for.reproducibility.G.=.nx.ra
10080 6e 64 6f 6d 5f 67 65 6f 6d 65 74 72 69 63 5f 67 72 61 70 68 28 32 30 30 2c 20 30 2e 31 32 35 2c ndom_geometric_graph(200,.0.125,
100a0 20 73 65 65 64 3d 38 39 36 38 30 33 29 0a 23 20 70 6f 73 69 74 69 6f 6e 20 69 73 20 73 74 6f 72 .seed=896803).#.position.is.stor
100c0 65 64 20 61 73 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 20 64 61 74 61 20 66 6f 72 20 72 61 ed.as.node.attribute.data.for.ra
100e0 6e 64 6f 6d 5f 67 65 6f 6d 65 74 72 69 63 5f 67 72 61 70 68 0a 70 6f 73 20 3d 20 6e 78 2e 67 65 ndom_geometric_graph.pos.=.nx.ge
10100 74 5f 6e 6f 64 65 5f 61 74 74 72 69 62 75 74 65 73 28 47 2c 20 22 70 6f 73 22 29 0a 0a 23 20 66 t_node_attributes(G,."pos")..#.f
10120 69 6e 64 20 6e 6f 64 65 20 6e 65 61 72 20 63 65 6e 74 65 72 20 28 30 2e 35 2c 30 2e 35 29 0a 64 ind.node.near.center.(0.5,0.5).d
10140 6d 69 6e 20 3d 20 31 0a 6e 63 65 6e 74 65 72 20 3d 20 30 0a 66 6f 72 20 6e 20 69 6e 20 70 6f 73 min.=.1.ncenter.=.0.for.n.in.pos
10160 3a 0a 20 20 20 20 78 2c 20 79 20 3d 20 70 6f 73 5b 6e 5d 0a 20 20 20 20 64 20 3d 20 28 78 20 2d :.....x,.y.=.pos[n].....d.=.(x.-
10180 20 30 2e 35 29 20 2a 2a 20 32 20 2b 20 28 79 20 2d 20 30 2e 35 29 20 2a 2a 20 32 0a 20 20 20 20 .0.5).**.2.+.(y.-.0.5).**.2.....
101a0 69 66 20 64 20 3c 20 64 6d 69 6e 3a 0a 20 20 20 20 20 20 20 20 6e 63 65 6e 74 65 72 20 3d 20 6e if.d.<.dmin:.........ncenter.=.n
101c0 0a 20 20 20 20 20 20 20 20 64 6d 69 6e 20 3d 20 64 0a 0a 23 20 63 6f 6c 6f 72 20 62 79 20 70 61 .........dmin.=.d..#.color.by.pa
101e0 74 68 20 6c 65 6e 67 74 68 20 66 72 6f 6d 20 6e 6f 64 65 20 6e 65 61 72 20 63 65 6e 74 65 72 0a th.length.from.node.near.center.
10200 70 20 3d 20 64 69 63 74 28 6e 78 2e 73 69 6e 67 6c 65 5f 73 6f 75 72 63 65 5f 73 68 6f 72 74 65 p.=.dict(nx.single_source_shorte
10220 73 74 5f 70 61 74 68 5f 6c 65 6e 67 74 68 28 47 2c 20 6e 63 65 6e 74 65 72 29 29 0a 0a 70 6c 74 st_path_length(G,.ncenter))..plt
10240 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 29 29 0a 6e 78 2e 64 72 61 77 5f .figure(figsize=(8,.8)).nx.draw_
10260 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 47 2c 20 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 34 networkx_edges(G,.pos,.alpha=0.4
10280 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 0a 20 20 20 20 47 2c ).nx.draw_networkx_nodes(.....G,
102a0 0a 20 20 20 20 70 6f 73 2c 0a 20 20 20 20 6e 6f 64 65 6c 69 73 74 3d 6c 69 73 74 28 70 2e 6b 65 .....pos,.....nodelist=list(p.ke
102c0 79 73 28 29 29 2c 0a 20 20 20 20 6e 6f 64 65 5f 73 69 7a 65 3d 38 30 2c 0a 20 20 20 20 6e 6f 64 ys()),.....node_size=80,.....nod
102e0 65 5f 63 6f 6c 6f 72 3d 6c 69 73 74 28 70 2e 76 61 6c 75 65 73 28 29 29 2c 0a 20 20 20 20 63 6d e_color=list(p.values()),.....cm
10300 61 70 3d 70 6c 74 2e 63 6d 2e 52 65 64 73 5f 72 2c 0a 29 0a 0a 70 6c 74 2e 78 6c 69 6d 28 2d 30 ap=plt.cm.Reds_r,.)..plt.xlim(-0
10320 2e 30 35 2c 20 31 2e 30 35 29 0a 70 6c 74 2e 79 6c 69 6d 28 2d 30 2e 30 35 2c 20 31 2e 30 35 29 .05,.1.05).plt.ylim(-0.05,.1.05)
10340 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 .plt.axis("off").plt.show().PK..
10360 14 00 00 00 00 00 02 7b 57 56 1a 64 80 3d ac 07 00 00 ac 07 00 00 1a 00 00 00 64 72 61 77 69 6e .......{WV.d.=............drawin
10380 67 2f 70 6c 6f 74 5f 75 6e 69 78 5f 65 6d 61 69 6c 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d g/plot_unix_email.py""".========
103a0 3d 3d 0a 55 6e 69 78 20 45 6d 61 69 6c 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 43 72 65 61 74 65 ==.Unix.Email.==========..Create
103c0 20 61 20 64 69 72 65 63 74 65 64 20 67 72 61 70 68 2c 20 61 6c 6c 6f 77 69 6e 67 20 6d 75 6c 74 .a.directed.graph,.allowing.mult
103e0 69 70 6c 65 20 65 64 67 65 73 20 61 6e 64 20 73 65 6c 66 20 6c 6f 6f 70 73 2c 20 66 72 6f 6d 20 iple.edges.and.self.loops,.from.
10400 61 20 75 6e 69 78 0a 6d 61 69 6c 62 6f 78 2e 20 20 54 68 65 20 6e 6f 64 65 73 20 61 72 65 20 65 a.unix.mailbox...The.nodes.are.e
10420 6d 61 69 6c 20 61 64 64 72 65 73 73 65 73 20 77 69 74 68 20 6c 69 6e 6b 73 20 74 68 61 74 20 70 mail.addresses.with.links.that.p
10440 6f 69 6e 74 20 66 72 6f 6d 20 74 68 65 20 73 65 6e 64 65 72 0a 74 6f 20 74 68 65 20 72 65 63 65 oint.from.the.sender.to.the.rece
10460 69 76 65 72 73 2e 20 20 54 68 65 20 65 64 67 65 20 64 61 74 61 20 69 73 20 61 20 50 79 74 68 6f ivers...The.edge.data.is.a.Pytho
10480 6e 20 65 6d 61 69 6c 2e 4d 65 73 73 61 67 65 20 6f 62 6a 65 63 74 20 77 68 69 63 68 0a 63 6f 6e n.email.Message.object.which.con
104a0 74 61 69 6e 73 20 61 6c 6c 20 6f 66 20 74 68 65 20 65 6d 61 69 6c 20 6d 65 73 73 61 67 65 20 64 tains.all.of.the.email.message.d
104c0 61 74 61 2e 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 74 68 65 20 70 6f 77 ata...This.example.shows.the.pow
104e0 65 72 20 6f 66 20 60 44 69 47 72 61 70 68 60 20 74 6f 20 68 6f 6c 64 20 65 64 67 65 20 64 61 74 er.of.`DiGraph`.to.hold.edge.dat
10500 61 20 6f 66 20 61 72 62 69 74 72 61 72 79 20 50 79 74 68 6f 6e 0a 6f 62 6a 65 63 74 73 20 28 69 a.of.arbitrary.Python.objects.(i
10520 6e 20 74 68 69 73 20 63 61 73 65 20 61 20 6c 69 73 74 20 6f 66 20 65 6d 61 69 6c 20 6d 65 73 73 n.this.case.a.list.of.email.mess
10540 61 67 65 73 29 2e 0a 0a 0a 54 68 65 20 73 61 6d 70 6c 65 20 75 6e 69 78 20 65 6d 61 69 6c 20 6d ages)....The.sample.unix.email.m
10560 61 69 6c 62 6f 78 20 63 61 6c 6c 65 64 20 22 75 6e 69 78 5f 65 6d 61 69 6c 2e 6d 62 6f 78 22 20 ailbox.called."unix_email.mbox".
10580 6d 61 79 20 62 65 20 66 6f 75 6e 64 20 68 65 72 65 3a 0a 0a 2d 20 68 74 74 70 73 3a 2f 2f 67 69 may.be.found.here:..-.https://gi
105a0 74 68 75 62 2e 63 6f 6d 2f 6e 65 74 77 6f 72 6b 78 2f 6e 65 74 77 6f 72 6b 78 2f 62 6c 6f 62 2f thub.com/networkx/networkx/blob/
105c0 6d 61 69 6e 2f 65 78 61 6d 70 6c 65 73 2f 64 72 61 77 69 6e 67 2f 75 6e 69 78 5f 65 6d 61 69 6c main/examples/drawing/unix_email
105e0 2e 6d 62 6f 78 0a 22 22 22 0a 0a 66 72 6f 6d 20 65 6d 61 69 6c 2e 75 74 69 6c 73 20 69 6d 70 6f .mbox."""..from.email.utils.impo
10600 72 74 20 67 65 74 61 64 64 72 65 73 73 65 73 2c 20 70 61 72 73 65 61 64 64 72 0a 69 6d 70 6f 72 rt.getaddresses,.parseaddr.impor
10620 74 20 6d 61 69 6c 62 6f 78 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 t.mailbox..import.matplotlib.pyp
10640 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 lot.as.plt.import.networkx.as.nx
10660 0a 0a 23 20 75 6e 69 78 20 6d 61 69 6c 62 6f 78 20 72 65 63 69 70 65 0a 23 20 73 65 65 20 68 74 ..#.unix.mailbox.recipe.#.see.ht
10680 74 70 73 3a 2f 2f 64 6f 63 73 2e 70 79 74 68 6f 6e 2e 6f 72 67 2f 33 2f 6c 69 62 72 61 72 79 2f tps://docs.python.org/3/library/
106a0 6d 61 69 6c 62 6f 78 2e 68 74 6d 6c 0a 0a 0a 64 65 66 20 6d 62 6f 78 5f 67 72 61 70 68 28 29 3a mailbox.html...def.mbox_graph():
106c0 0a 20 20 20 20 6d 62 6f 78 20 3d 20 6d 61 69 6c 62 6f 78 2e 6d 62 6f 78 28 22 75 6e 69 78 5f 65 .....mbox.=.mailbox.mbox("unix_e
106e0 6d 61 69 6c 2e 6d 62 6f 78 22 29 20 20 23 20 70 61 72 73 65 20 75 6e 69 78 20 6d 61 69 6c 62 6f mail.mbox")..#.parse.unix.mailbo
10700 78 0a 0a 20 20 20 20 47 20 3d 20 6e 78 2e 4d 75 6c 74 69 44 69 47 72 61 70 68 28 29 20 20 23 20 x......G.=.nx.MultiDiGraph()..#.
10720 63 72 65 61 74 65 20 65 6d 70 74 79 20 67 72 61 70 68 0a 0a 20 20 20 20 23 20 70 61 72 73 65 20 create.empty.graph......#.parse.
10740 65 61 63 68 20 6d 65 73 73 61 67 65 73 20 61 6e 64 20 62 75 69 6c 64 20 67 72 61 70 68 0a 20 20 each.messages.and.build.graph...
10760 20 20 66 6f 72 20 6d 73 67 20 69 6e 20 6d 62 6f 78 3a 20 20 23 20 6d 73 67 20 69 73 20 70 79 74 ..for.msg.in.mbox:..#.msg.is.pyt
10780 68 6f 6e 20 65 6d 61 69 6c 2e 4d 65 73 73 61 67 65 2e 4d 65 73 73 61 67 65 20 6f 62 6a 65 63 74 hon.email.Message.Message.object
107a0 0a 20 20 20 20 20 20 20 20 28 73 6f 75 72 63 65 5f 6e 61 6d 65 2c 20 73 6f 75 72 63 65 5f 61 64 .........(source_name,.source_ad
107c0 64 72 29 20 3d 20 70 61 72 73 65 61 64 64 72 28 6d 73 67 5b 22 46 72 6f 6d 22 5d 29 20 20 23 20 dr).=.parseaddr(msg["From"])..#.
107e0 73 65 6e 64 65 72 0a 20 20 20 20 20 20 20 20 23 20 67 65 74 20 61 6c 6c 20 72 65 63 69 70 69 65 sender.........#.get.all.recipie
10800 6e 74 73 0a 20 20 20 20 20 20 20 20 23 20 73 65 65 20 68 74 74 70 73 3a 2f 2f 64 6f 63 73 2e 70 nts.........#.see.https://docs.p
10820 79 74 68 6f 6e 2e 6f 72 67 2f 33 2f 6c 69 62 72 61 72 79 2f 65 6d 61 69 6c 2e 68 74 6d 6c 0a 20 ython.org/3/library/email.html..
10840 20 20 20 20 20 20 20 74 6f 73 20 3d 20 6d 73 67 2e 67 65 74 5f 61 6c 6c 28 22 74 6f 22 2c 20 5b .......tos.=.msg.get_all("to",.[
10860 5d 29 0a 20 20 20 20 20 20 20 20 63 63 73 20 3d 20 6d 73 67 2e 67 65 74 5f 61 6c 6c 28 22 63 63 ]).........ccs.=.msg.get_all("cc
10880 22 2c 20 5b 5d 29 0a 20 20 20 20 20 20 20 20 72 65 73 65 6e 74 5f 74 6f 73 20 3d 20 6d 73 67 2e ",.[]).........resent_tos.=.msg.
108a0 67 65 74 5f 61 6c 6c 28 22 72 65 73 65 6e 74 2d 74 6f 22 2c 20 5b 5d 29 0a 20 20 20 20 20 20 20 get_all("resent-to",.[])........
108c0 20 72 65 73 65 6e 74 5f 63 63 73 20 3d 20 6d 73 67 2e 67 65 74 5f 61 6c 6c 28 22 72 65 73 65 6e .resent_ccs.=.msg.get_all("resen
108e0 74 2d 63 63 22 2c 20 5b 5d 29 0a 20 20 20 20 20 20 20 20 61 6c 6c 5f 72 65 63 69 70 69 65 6e 74 t-cc",.[]).........all_recipient
10900 73 20 3d 20 67 65 74 61 64 64 72 65 73 73 65 73 28 74 6f 73 20 2b 20 63 63 73 20 2b 20 72 65 73 s.=.getaddresses(tos.+.ccs.+.res
10920 65 6e 74 5f 74 6f 73 20 2b 20 72 65 73 65 6e 74 5f 63 63 73 29 0a 20 20 20 20 20 20 20 20 23 20 ent_tos.+.resent_ccs).........#.
10940 6e 6f 77 20 61 64 64 20 74 68 65 20 65 64 67 65 73 20 66 6f 72 20 74 68 69 73 20 6d 61 69 6c 20 now.add.the.edges.for.this.mail.
10960 6d 65 73 73 61 67 65 0a 20 20 20 20 20 20 20 20 66 6f 72 20 74 61 72 67 65 74 5f 6e 61 6d 65 2c message.........for.target_name,
10980 20 74 61 72 67 65 74 5f 61 64 64 72 20 69 6e 20 61 6c 6c 5f 72 65 63 69 70 69 65 6e 74 73 3a 0a .target_addr.in.all_recipients:.
109a0 20 20 20 20 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 73 6f 75 72 63 65 5f 61 64 ............G.add_edge(source_ad
109c0 64 72 2c 20 74 61 72 67 65 74 5f 61 64 64 72 2c 20 6d 65 73 73 61 67 65 3d 6d 73 67 29 0a 0a 20 dr,.target_addr,.message=msg)...
109e0 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 47 20 3d 20 6d 62 6f 78 5f 67 72 61 70 68 28 29 0a 0a ...return.G...G.=.mbox_graph()..
10a00 23 20 70 72 69 6e 74 20 65 64 67 65 73 20 77 69 74 68 20 6d 65 73 73 61 67 65 20 73 75 62 6a 65 #.print.edges.with.message.subje
10a20 63 74 0a 66 6f 72 20 75 2c 20 76 2c 20 64 20 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 ct.for.u,.v,.d.in.G.edges(data=T
10a40 72 75 65 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 46 72 6f 6d 3a 20 7b 75 7d 20 54 6f 3a 20 rue):.....print(f"From:.{u}.To:.
10a60 7b 76 7d 20 53 75 62 6a 65 63 74 3a 20 7b 64 5b 27 6d 65 73 73 61 67 65 27 5d 5b 27 53 75 62 6a {v}.Subject:.{d['message']['Subj
10a80 65 63 74 27 5d 7d 22 29 0a 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 ect']}")..pos.=.nx.spring_layout
10aa0 28 47 2c 20 69 74 65 72 61 74 69 6f 6e 73 3d 31 30 2c 20 73 65 65 64 3d 32 32 37 29 0a 6e 78 2e (G,.iterations=10,.seed=227).nx.
10ac0 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 30 2c 20 61 6c 70 68 61 3d draw(G,.pos,.node_size=0,.alpha=
10ae0 30 2e 34 2c 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 72 22 2c 20 66 6f 6e 74 5f 73 69 7a 65 3d 31 0.4,.edge_color="r",.font_size=1
10b00 36 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 54 72 75 65 29 0a 61 78 20 3d 20 70 6c 74 2e 67 63 6,.with_labels=True).ax.=.plt.gc
10b20 61 28 29 0a 61 78 2e 6d 61 72 67 69 6e 73 28 30 2e 30 38 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a a().ax.margins(0.08).plt.show().
10b40 50 4b 03 04 14 00 00 00 00 00 00 7b 57 56 df c6 01 9e 99 02 00 00 99 02 00 00 21 00 00 00 64 72 PK.........{WV............!...dr
10b60 61 77 69 6e 67 2f 70 6c 6f 74 5f 68 6f 75 73 65 5f 77 69 74 68 5f 63 6f 6c 6f 72 73 2e 70 79 22 awing/plot_house_with_colors.py"
10b80 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 48 6f 75 73 65 20 57 69 74 68 20 "".=================.House.With.
10ba0 43 6f 6c 6f 72 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 44 72 61 77 20 61 Colors.=================..Draw.a
10bc0 20 67 72 61 70 68 20 77 69 74 68 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 0a 22 22 22 0a 69 6d 70 6f .graph.with.matplotlib..""".impo
10be0 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f rt.matplotlib.pyplot.as.plt.impo
10c00 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 68 6f 75 73 65 5f rt.networkx.as.nx..G.=.nx.house_
10c20 67 72 61 70 68 28 29 0a 23 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74 20 70 6f 73 69 74 69 6f graph().#.explicitly.set.positio
10c40 6e 73 0a 70 6f 73 20 3d 20 7b 30 3a 20 28 30 2c 20 30 29 2c 20 31 3a 20 28 31 2c 20 30 29 2c 20 ns.pos.=.{0:.(0,.0),.1:.(1,.0),.
10c60 32 3a 20 28 30 2c 20 31 29 2c 20 33 3a 20 28 31 2c 20 31 29 2c 20 34 3a 20 28 30 2e 35 2c 20 32 2:.(0,.1),.3:.(1,.1),.4:.(0.5,.2
10c80 2e 30 29 7d 0a 0a 23 20 50 6c 6f 74 20 6e 6f 64 65 73 20 77 69 74 68 20 64 69 66 66 65 72 65 6e .0)}..#.Plot.nodes.with.differen
10ca0 74 20 70 72 6f 70 65 72 74 69 65 73 20 66 6f 72 20 74 68 65 20 22 77 61 6c 6c 22 20 61 6e 64 20 t.properties.for.the."wall".and.
10cc0 22 72 6f 6f 66 22 20 6e 6f 64 65 73 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f "roof".nodes.nx.draw_networkx_no
10ce0 64 65 73 28 0a 20 20 20 20 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 33 30 30 30 2c des(.....G,.pos,.node_size=3000,
10d00 20 6e 6f 64 65 6c 69 73 74 3d 5b 30 2c 20 31 2c 20 32 2c 20 33 5d 2c 20 6e 6f 64 65 5f 63 6f 6c .nodelist=[0,.1,.2,.3],.node_col
10d20 6f 72 3d 22 74 61 62 3a 62 6c 75 65 22 0a 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 or="tab:blue".).nx.draw_networkx
10d40 5f 6e 6f 64 65 73 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 32 30 30 30 2c 20 6e _nodes(G,.pos,.node_size=2000,.n
10d60 6f 64 65 6c 69 73 74 3d 5b 34 5d 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 74 61 62 3a 6f 72 61 odelist=[4],.node_color="tab:ora
10d80 6e 67 65 22 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 47 2c 20 nge").nx.draw_networkx_edges(G,.
10da0 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 35 2c 20 77 69 64 74 68 3d 36 29 0a 23 20 43 75 73 74 6f pos,.alpha=0.5,.width=6).#.Custo
10dc0 6d 69 7a 65 20 61 78 65 73 0a 61 78 20 3d 20 70 6c 74 2e 67 63 61 28 29 0a 61 78 2e 6d 61 72 67 mize.axes.ax.=.plt.gca().ax.marg
10de0 69 6e 73 28 30 2e 31 31 29 0a 70 6c 74 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 ins(0.11).plt.tight_layout().plt
10e00 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 .axis("off").plt.show().PK......
10e20 00 00 fc 7a 57 56 99 7c b8 07 14 06 00 00 14 06 00 00 16 00 00 00 64 72 61 77 69 6e 67 2f 70 6c ...zWV.|..............drawing/pl
10e40 6f 74 5f 64 65 67 72 65 65 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ot_degree.py""".===============.
10e60 44 65 67 72 65 65 20 41 6e 61 6c 79 73 69 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a Degree.Analysis.===============.
10e80 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 73 65 76 65 72 61 6c 20 77 61 79 73 .This.example.shows.several.ways
10ea0 20 74 6f 20 76 69 73 75 61 6c 69 7a 65 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f .to.visualize.the.distribution.o
10ec0 66 20 74 68 65 20 64 65 67 72 65 65 20 6f 66 0a 6e 6f 64 65 73 20 77 69 74 68 20 74 77 6f 20 63 f.the.degree.of.nodes.with.two.c
10ee0 6f 6d 6d 6f 6e 20 74 65 63 68 6e 69 71 75 65 73 3a 20 61 20 2a 64 65 67 72 65 65 2d 72 61 6e 6b ommon.techniques:.a.*degree-rank
10f00 20 70 6c 6f 74 2a 20 61 6e 64 20 61 0a 2a 64 65 67 72 65 65 20 68 69 73 74 6f 67 72 61 6d 2a 2e .plot*.and.a.*degree.histogram*.
10f20 0a 0a 49 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 2c 20 61 20 72 61 6e 64 6f 6d 20 47 72 61 70 ..In.this.example,.a.random.Grap
10f40 68 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 77 69 74 68 20 31 30 30 20 6e 6f 64 65 73 2e 20 54 h.is.generated.with.100.nodes..T
10f60 68 65 20 64 65 67 72 65 65 20 6f 66 0a 65 61 63 68 20 6e 6f 64 65 20 69 73 20 64 65 74 65 72 6d he.degree.of.each.node.is.determ
10f80 69 6e 65 64 2c 20 61 6e 64 20 61 20 66 69 67 75 72 65 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 ined,.and.a.figure.is.generated.
10fa0 73 68 6f 77 69 6e 67 20 74 68 72 65 65 20 74 68 69 6e 67 73 3a 0a 31 2e 20 54 68 65 20 73 75 62 showing.three.things:.1..The.sub
10fc0 67 72 61 70 68 20 6f 66 20 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 0a 32 2e graph.of.connected.components.2.
10fe0 20 54 68 65 20 64 65 67 72 65 65 2d 72 61 6e 6b 20 70 6c 6f 74 20 66 6f 72 20 74 68 65 20 47 72 .The.degree-rank.plot.for.the.Gr
11000 61 70 68 2c 20 61 6e 64 0a 33 2e 20 54 68 65 20 64 65 67 72 65 65 20 68 69 73 74 6f 67 72 61 6d aph,.and.3..The.degree.histogram
11020 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 .""".import.networkx.as.nx.impor
11040 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e t.numpy.as.np.import.matplotlib.
11060 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 0a 47 20 3d 20 6e 78 2e 67 6e 70 5f 72 61 6e 64 6f 6d pyplot.as.plt..G.=.nx.gnp_random
11080 5f 67 72 61 70 68 28 31 30 30 2c 20 30 2e 30 32 2c 20 73 65 65 64 3d 31 30 33 37 34 31 39 36 29 _graph(100,.0.02,.seed=10374196)
110a0 0a 0a 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 65 20 3d 20 73 6f 72 74 65 64 28 28 64 20 66 6f ..degree_sequence.=.sorted((d.fo
110c0 72 20 6e 2c 20 64 20 69 6e 20 47 2e 64 65 67 72 65 65 28 29 29 2c 20 72 65 76 65 72 73 65 3d 54 r.n,.d.in.G.degree()),.reverse=T
110e0 72 75 65 29 0a 64 6d 61 78 20 3d 20 6d 61 78 28 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 65 29 rue).dmax.=.max(degree_sequence)
11100 0a 0a 66 69 67 20 3d 20 70 6c 74 2e 66 69 67 75 72 65 28 22 44 65 67 72 65 65 20 6f 66 20 61 20 ..fig.=.plt.figure("Degree.of.a.
11120 72 61 6e 64 6f 6d 20 67 72 61 70 68 22 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 29 29 0a 23 random.graph",.figsize=(8,.8)).#
11140 20 43 72 65 61 74 65 20 61 20 67 72 69 64 73 70 65 63 20 66 6f 72 20 61 64 64 69 6e 67 20 73 75 .Create.a.gridspec.for.adding.su
11160 62 70 6c 6f 74 73 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 73 0a 61 78 67 72 69 64 bplots.of.different.sizes.axgrid
11180 20 3d 20 66 69 67 2e 61 64 64 5f 67 72 69 64 73 70 65 63 28 35 2c 20 34 29 0a 0a 61 78 30 20 3d .=.fig.add_gridspec(5,.4)..ax0.=
111a0 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 61 78 67 72 69 64 5b 30 3a 33 2c 20 3a 5d 29 .fig.add_subplot(axgrid[0:3,.:])
111c0 0a 47 63 63 20 3d 20 47 2e 73 75 62 67 72 61 70 68 28 73 6f 72 74 65 64 28 6e 78 2e 63 6f 6e 6e .Gcc.=.G.subgraph(sorted(nx.conn
111e0 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 2c 20 6b 65 79 3d 6c 65 6e 2c 20 72 65 ected_components(G),.key=len,.re
11200 76 65 72 73 65 3d 54 72 75 65 29 5b 30 5d 29 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f verse=True)[0]).pos.=.nx.spring_
11220 6c 61 79 6f 75 74 28 47 63 63 2c 20 73 65 65 64 3d 31 30 33 39 36 39 35 33 29 0a 6e 78 2e 64 72 layout(Gcc,.seed=10396953).nx.dr
11240 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 47 63 63 2c 20 70 6f 73 2c 20 61 78 3d 61 aw_networkx_nodes(Gcc,.pos,.ax=a
11260 78 30 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 32 30 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 x0,.node_size=20).nx.draw_networ
11280 6b 78 5f 65 64 67 65 73 28 47 63 63 2c 20 70 6f 73 2c 20 61 78 3d 61 78 30 2c 20 61 6c 70 68 61 kx_edges(Gcc,.pos,.ax=ax0,.alpha
112a0 3d 30 2e 34 29 0a 61 78 30 2e 73 65 74 5f 74 69 74 6c 65 28 22 43 6f 6e 6e 65 63 74 65 64 20 63 =0.4).ax0.set_title("Connected.c
112c0 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 47 22 29 0a 61 78 30 2e 73 65 74 5f 61 78 69 73 5f 6f 66 omponents.of.G").ax0.set_axis_of
112e0 66 28 29 0a 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 61 78 67 72 69 f()..ax1.=.fig.add_subplot(axgri
11300 64 5b 33 3a 2c 20 3a 32 5d 29 0a 61 78 31 2e 70 6c 6f 74 28 64 65 67 72 65 65 5f 73 65 71 75 65 d[3:,.:2]).ax1.plot(degree_seque
11320 6e 63 65 2c 20 22 62 2d 22 2c 20 6d 61 72 6b 65 72 3d 22 6f 22 29 0a 61 78 31 2e 73 65 74 5f 74 nce,."b-",.marker="o").ax1.set_t
11340 69 74 6c 65 28 22 44 65 67 72 65 65 20 52 61 6e 6b 20 50 6c 6f 74 22 29 0a 61 78 31 2e 73 65 74 itle("Degree.Rank.Plot").ax1.set
11360 5f 79 6c 61 62 65 6c 28 22 44 65 67 72 65 65 22 29 0a 61 78 31 2e 73 65 74 5f 78 6c 61 62 65 6c _ylabel("Degree").ax1.set_xlabel
11380 28 22 52 61 6e 6b 22 29 0a 0a 61 78 32 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 ("Rank")..ax2.=.fig.add_subplot(
113a0 61 78 67 72 69 64 5b 33 3a 2c 20 32 3a 5d 29 0a 61 78 32 2e 62 61 72 28 2a 6e 70 2e 75 6e 69 71 axgrid[3:,.2:]).ax2.bar(*np.uniq
113c0 75 65 28 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 65 2c 20 72 65 74 75 72 6e 5f 63 6f 75 6e 74 ue(degree_sequence,.return_count
113e0 73 3d 54 72 75 65 29 29 0a 61 78 32 2e 73 65 74 5f 74 69 74 6c 65 28 22 44 65 67 72 65 65 20 68 s=True)).ax2.set_title("Degree.h
11400 69 73 74 6f 67 72 61 6d 22 29 0a 61 78 32 2e 73 65 74 5f 78 6c 61 62 65 6c 28 22 44 65 67 72 65 istogram").ax2.set_xlabel("Degre
11420 65 22 29 0a 61 78 32 2e 73 65 74 5f 79 6c 61 62 65 6c 28 22 23 20 6f 66 20 4e 6f 64 65 73 22 29 e").ax2.set_ylabel("#.of.Nodes")
11440 0a 0a 66 69 67 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a ..fig.tight_layout().plt.show().
11460 50 4b 03 04 14 00 00 00 00 00 fc 7a 57 56 c2 48 7c 27 b9 01 00 00 b9 01 00 00 1d 00 00 00 64 72 PK.........zWV.H|'............dr
11480 61 77 69 6e 67 2f 70 6c 6f 74 5f 65 64 67 65 5f 63 6f 6c 6f 72 6d 61 70 2e 70 79 22 22 22 0a 3d awing/plot_edge_colormap.py""".=
114a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 45 64 67 65 20 43 6f 6c 6f 72 6d 61 70 0a 3d 3d 3d 3d 3d ============.Edge.Colormap.=====
114c0 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 44 72 61 77 20 61 20 67 72 61 70 68 20 77 69 74 68 20 6d 61 74 70 ========..Draw.a.graph.with.matp
114e0 6c 6f 74 6c 69 62 2c 20 63 6f 6c 6f 72 20 65 64 67 65 73 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 lotlib,.color.edges.."""..import
11500 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 .matplotlib.pyplot.as.plt.import
11520 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 73 74 61 72 5f 67 72 61 .networkx.as.nx..G.=.nx.star_gra
11540 70 68 28 32 30 29 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c ph(20).pos.=.nx.spring_layout(G,
11560 20 73 65 65 64 3d 36 33 29 20 20 23 20 53 65 65 64 20 6c 61 79 6f 75 74 20 66 6f 72 20 72 65 70 .seed=63)..#.Seed.layout.for.rep
11580 72 6f 64 75 63 69 62 69 6c 69 74 79 0a 63 6f 6c 6f 72 73 20 3d 20 72 61 6e 67 65 28 32 30 29 0a roducibility.colors.=.range(20).
115a0 6f 70 74 69 6f 6e 73 20 3d 20 7b 0a 20 20 20 20 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 3a 20 22 23 options.=.{....."node_color":."#
115c0 41 30 43 42 45 32 22 2c 0a 20 20 20 20 22 65 64 67 65 5f 63 6f 6c 6f 72 22 3a 20 63 6f 6c 6f 72 A0CBE2",....."edge_color":.color
115e0 73 2c 0a 20 20 20 20 22 77 69 64 74 68 22 3a 20 34 2c 0a 20 20 20 20 22 65 64 67 65 5f 63 6d 61 s,....."width":.4,....."edge_cma
11600 70 22 3a 20 70 6c 74 2e 63 6d 2e 42 6c 75 65 73 2c 0a 20 20 20 20 22 77 69 74 68 5f 6c 61 62 65 p":.plt.cm.Blues,....."with_labe
11620 6c 73 22 3a 20 46 61 6c 73 65 2c 0a 7d 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 2a 2a ls":.False,.}.nx.draw(G,.pos,.**
11640 6f 70 74 69 6f 6e 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 00 7b options).plt.show().PK.........{
11660 57 56 b2 f9 30 8f e1 03 00 00 e1 03 00 00 22 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 6d WV..0........."...drawing/plot_m
11680 75 6c 74 69 70 61 72 74 69 74 65 5f 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d ultipartite_graph.py""".========
116a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4d 75 6c 74 69 70 61 72 74 69 74 65 20 4c 61 79 6f 75 74 0a ===========.Multipartite.Layout.
116c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 ===================."""..import.
116e0 69 74 65 72 74 6f 6f 6c 73 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c itertools.import.matplotlib.pypl
11700 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a ot.as.plt.import.networkx.as.nx.
11720 0a 73 75 62 73 65 74 5f 73 69 7a 65 73 20 3d 20 5b 35 2c 20 35 2c 20 34 2c 20 33 2c 20 32 2c 20 .subset_sizes.=.[5,.5,.4,.3,.2,.
11740 34 2c 20 34 2c 20 33 5d 0a 73 75 62 73 65 74 5f 63 6f 6c 6f 72 20 3d 20 5b 0a 20 20 20 20 22 67 4,.4,.3].subset_color.=.[....."g
11760 6f 6c 64 22 2c 0a 20 20 20 20 22 76 69 6f 6c 65 74 22 2c 0a 20 20 20 20 22 76 69 6f 6c 65 74 22 old",....."violet",....."violet"
11780 2c 0a 20 20 20 20 22 76 69 6f 6c 65 74 22 2c 0a 20 20 20 20 22 76 69 6f 6c 65 74 22 2c 0a 20 20 ,....."violet",....."violet",...
117a0 20 20 22 6c 69 6d 65 67 72 65 65 6e 22 2c 0a 20 20 20 20 22 6c 69 6d 65 67 72 65 65 6e 22 2c 0a .."limegreen",....."limegreen",.
117c0 20 20 20 20 22 64 61 72 6b 6f 72 61 6e 67 65 22 2c 0a 5d 0a 0a 0a 64 65 66 20 6d 75 6c 74 69 6c ...."darkorange",.]...def.multil
117e0 61 79 65 72 65 64 5f 67 72 61 70 68 28 2a 73 75 62 73 65 74 5f 73 69 7a 65 73 29 3a 0a 20 20 20 ayered_graph(*subset_sizes):....
11800 20 65 78 74 65 6e 74 73 20 3d 20 6e 78 2e 75 74 69 6c 73 2e 70 61 69 72 77 69 73 65 28 69 74 65 .extents.=.nx.utils.pairwise(ite
11820 72 74 6f 6f 6c 73 2e 61 63 63 75 6d 75 6c 61 74 65 28 28 30 2c 29 20 2b 20 73 75 62 73 65 74 5f rtools.accumulate((0,).+.subset_
11840 73 69 7a 65 73 29 29 0a 20 20 20 20 6c 61 79 65 72 73 20 3d 20 5b 72 61 6e 67 65 28 73 74 61 72 sizes)).....layers.=.[range(star
11860 74 2c 20 65 6e 64 29 20 66 6f 72 20 73 74 61 72 74 2c 20 65 6e 64 20 69 6e 20 65 78 74 65 6e 74 t,.end).for.start,.end.in.extent
11880 73 5d 0a 20 20 20 20 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 20 20 20 20 66 6f 72 20 69 2c s].....G.=.nx.Graph().....for.i,
118a0 20 6c 61 79 65 72 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 61 79 65 72 73 29 3a 0a 20 20 20 .layer.in.enumerate(layers):....
118c0 20 20 20 20 20 47 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 6c 61 79 65 72 2c 20 6c 61 79 .....G.add_nodes_from(layer,.lay
118e0 65 72 3d 69 29 0a 20 20 20 20 66 6f 72 20 6c 61 79 65 72 31 2c 20 6c 61 79 65 72 32 20 69 6e 20 er=i).....for.layer1,.layer2.in.
11900 6e 78 2e 75 74 69 6c 73 2e 70 61 69 72 77 69 73 65 28 6c 61 79 65 72 73 29 3a 0a 20 20 20 20 20 nx.utils.pairwise(layers):......
11920 20 20 20 47 2e 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d 28 69 74 65 72 74 6f 6f 6c 73 2e 70 72 ...G.add_edges_from(itertools.pr
11940 6f 64 75 63 74 28 6c 61 79 65 72 31 2c 20 6c 61 79 65 72 32 29 29 0a 20 20 20 20 72 65 74 75 72 oduct(layer1,.layer2)).....retur
11960 6e 20 47 0a 0a 0a 47 20 3d 20 6d 75 6c 74 69 6c 61 79 65 72 65 64 5f 67 72 61 70 68 28 2a 73 75 n.G...G.=.multilayered_graph(*su
11980 62 73 65 74 5f 73 69 7a 65 73 29 0a 63 6f 6c 6f 72 20 3d 20 5b 73 75 62 73 65 74 5f 63 6f 6c 6f bset_sizes).color.=.[subset_colo
119a0 72 5b 64 61 74 61 5b 22 6c 61 79 65 72 22 5d 5d 20 66 6f 72 20 76 2c 20 64 61 74 61 20 69 6e 20 r[data["layer"]].for.v,.data.in.
119c0 47 2e 6e 6f 64 65 73 28 64 61 74 61 3d 54 72 75 65 29 5d 0a 70 6f 73 20 3d 20 6e 78 2e 6d 75 6c G.nodes(data=True)].pos.=.nx.mul
119e0 74 69 70 61 72 74 69 74 65 5f 6c 61 79 6f 75 74 28 47 2c 20 73 75 62 73 65 74 5f 6b 65 79 3d 22 tipartite_layout(G,.subset_key="
11a00 6c 61 79 65 72 22 29 0a 70 6c 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 layer").plt.figure(figsize=(8,.8
11a20 29 29 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 63 6f )).nx.draw(G,.pos,.node_color=co
11a40 6c 6f 72 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a 70 6c 74 2e 61 78 69 73 lor,.with_labels=False).plt.axis
11a60 28 22 65 71 75 61 6c 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 fd ("equal").plt.show().PK.........
11a80 7a 57 56 a5 8c 2c 3b 8e 03 00 00 8e 03 00 00 19 00 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f zWV..,;............drawing/plot_
11aa0 65 67 6f 5f 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 45 67 6f 20 47 72 ego_graph.py""".=========.Ego.Gr
11ac0 61 70 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 6c 65 20 75 73 69 6e 67 20 74 68 65 aph.=========..Example.using.the
11ae0 20 4e 65 74 77 6f 72 6b 58 20 65 67 6f 5f 67 72 61 70 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 .NetworkX.ego_graph().function.t
11b00 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6d 61 69 6e 20 65 67 6f 6e 65 74 20 6f 66 0a 74 68 65 20 o.return.the.main.egonet.of.the.
11b20 6c 61 72 67 65 73 74 20 68 75 62 20 69 6e 20 61 20 42 61 72 61 62 c3 a1 73 69 2d 41 6c 62 65 72 largest.hub.in.a.Barab..si-Alber
11b40 74 20 6e 65 74 77 6f 72 6b 2e 0a 22 22 22 0a 0a 66 72 6f 6d 20 6f 70 65 72 61 74 6f 72 20 69 6d t.network.."""..from.operator.im
11b60 70 6f 72 74 20 69 74 65 6d 67 65 74 74 65 72 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c port.itemgetter..import.matplotl
11b80 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 ib.pyplot.as.plt.import.networkx
11ba0 20 61 73 20 6e 78 0a 0a 23 20 43 72 65 61 74 65 20 61 20 42 41 20 6d 6f 64 65 6c 20 67 72 61 70 .as.nx..#.Create.a.BA.model.grap
11bc0 68 20 2d 20 75 73 65 20 73 65 65 64 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 h.-.use.seed.for.reproducibility
11be0 0a 6e 20 3d 20 31 30 30 30 0a 6d 20 3d 20 32 0a 73 65 65 64 20 3d 20 32 30 35 33 32 0a 47 20 3d .n.=.1000.m.=.2.seed.=.20532.G.=
11c00 20 6e 78 2e 62 61 72 61 62 61 73 69 5f 61 6c 62 65 72 74 5f 67 72 61 70 68 28 6e 2c 20 6d 2c 20 .nx.barabasi_albert_graph(n,.m,.
11c20 73 65 65 64 3d 73 65 65 64 29 0a 0a 23 20 66 69 6e 64 20 6e 6f 64 65 20 77 69 74 68 20 6c 61 72 seed=seed)..#.find.node.with.lar
11c40 67 65 73 74 20 64 65 67 72 65 65 0a 6e 6f 64 65 5f 61 6e 64 5f 64 65 67 72 65 65 20 3d 20 47 2e gest.degree.node_and_degree.=.G.
11c60 64 65 67 72 65 65 28 29 0a 28 6c 61 72 67 65 73 74 5f 68 75 62 2c 20 64 65 67 72 65 65 29 20 3d degree().(largest_hub,.degree).=
11c80 20 73 6f 72 74 65 64 28 6e 6f 64 65 5f 61 6e 64 5f 64 65 67 72 65 65 2c 20 6b 65 79 3d 69 74 65 .sorted(node_and_degree,.key=ite
11ca0 6d 67 65 74 74 65 72 28 31 29 29 5b 2d 31 5d 0a 0a 23 20 43 72 65 61 74 65 20 65 67 6f 20 67 72 mgetter(1))[-1]..#.Create.ego.gr
11cc0 61 70 68 20 6f 66 20 6d 61 69 6e 20 68 75 62 0a 68 75 62 5f 65 67 6f 20 3d 20 6e 78 2e 65 67 6f aph.of.main.hub.hub_ego.=.nx.ego
11ce0 5f 67 72 61 70 68 28 47 2c 20 6c 61 72 67 65 73 74 5f 68 75 62 29 0a 0a 23 20 44 72 61 77 20 67 _graph(G,.largest_hub)..#.Draw.g
11d00 72 61 70 68 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 68 75 62 5f raph.pos.=.nx.spring_layout(hub_
11d20 65 67 6f 2c 20 73 65 65 64 3d 73 65 65 64 29 20 20 23 20 53 65 65 64 20 6c 61 79 6f 75 74 20 66 ego,.seed=seed)..#.Seed.layout.f
11d40 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 0a 6e 78 2e 64 72 61 77 28 68 75 62 5f 65 or.reproducibility.nx.draw(hub_e
11d60 67 6f 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 62 22 2c 20 6e 6f 64 65 5f 73 69 go,.pos,.node_color="b",.node_si
11d80 7a 65 3d 35 30 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a 0a 23 20 44 72 61 ze=50,.with_labels=False)..#.Dra
11da0 77 20 65 67 6f 20 61 73 20 6c 61 72 67 65 20 61 6e 64 20 72 65 64 0a 6f 70 74 69 6f 6e 73 20 3d w.ego.as.large.and.red.options.=
11dc0 20 7b 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 33 30 30 2c 20 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 .{"node_size":.300,."node_color"
11de0 3a 20 22 72 22 7d 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 68 75 :."r"}.nx.draw_networkx_nodes(hu
11e00 62 5f 65 67 6f 2c 20 70 6f 73 2c 20 6e 6f 64 65 6c 69 73 74 3d 5b 6c 61 72 67 65 73 74 5f 68 75 b_ego,.pos,.nodelist=[largest_hu
11e20 62 5d 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 b],.**options).plt.show().PK....
11e40 00 00 00 00 01 7b 57 56 c3 cc b5 fe f1 02 00 00 f1 02 00 00 19 00 00 00 64 72 61 77 69 6e 67 2f .....{WV................drawing/
11e60 70 6c 6f 74 5f 73 65 6c 66 6c 6f 6f 70 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a plot_selfloops.py""".==========.
11e80 53 65 6c 66 2d 6c 6f 6f 70 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 41 20 73 65 6c 66 2d 6c 6f Self-loops.==========..A.self-lo
11ea0 6f 70 20 69 73 20 61 6e 20 65 64 67 65 20 74 68 61 74 20 6f 72 69 67 69 6e 61 74 65 73 20 66 72 op.is.an.edge.that.originates.fr
11ec0 6f 6d 20 61 6e 64 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 73 61 6d 65 20 6e 6f 64 65 2e om.and.terminates.the.same.node.
11ee0 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 68 6f 77 20 74 6f 20 64 72 61 77 20 .This.example.shows.how.to.draw.
11f00 73 65 6c 66 2d 6c 6f 6f 70 73 20 77 69 74 68 20 60 6e 78 5f 70 79 6c 61 62 60 2e 0a 0a 22 22 22 self-loops.with.`nx_pylab`..."""
11f20 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6d 61 .import.networkx.as.nx.import.ma
11f40 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 0a 23 20 43 72 65 61 74 65 tplotlib.pyplot.as.plt..#.Create
11f60 20 61 20 67 72 61 70 68 20 61 6e 64 20 61 64 64 20 61 20 73 65 6c 66 2d 6c 6f 6f 70 20 74 6f 20 .a.graph.and.add.a.self-loop.to.
11f80 6e 6f 64 65 20 30 0a 47 20 3d 20 6e 78 2e 63 6f 6d 70 6c 65 74 65 5f 67 72 61 70 68 28 33 2c 20 node.0.G.=.nx.complete_graph(3,.
11fa0 63 72 65 61 74 65 5f 75 73 69 6e 67 3d 6e 78 2e 44 69 47 72 61 70 68 29 0a 47 2e 61 64 64 5f 65 create_using=nx.DiGraph).G.add_e
11fc0 64 67 65 28 30 2c 20 30 29 0a 70 6f 73 20 3d 20 6e 78 2e 63 69 72 63 75 6c 61 72 5f 6c 61 79 6f dge(0,.0).pos.=.nx.circular_layo
11fe0 75 74 28 47 29 0a 0a 23 20 41 73 20 6f 66 20 76 65 72 73 69 6f 6e 20 32 2e 36 2c 20 73 65 6c 66 ut(G)..#.As.of.version.2.6,.self
12000 2d 6c 6f 6f 70 73 20 61 72 65 20 64 72 61 77 6e 20 62 79 20 64 65 66 61 75 6c 74 20 77 69 74 68 -loops.are.drawn.by.default.with
12020 20 74 68 65 20 73 61 6d 65 20 73 74 79 6c 69 6e 67 20 61 73 0a 23 20 6f 74 68 65 72 20 65 64 67 .the.same.styling.as.#.other.edg
12040 65 73 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 54 es.nx.draw(G,.pos,.with_labels=T
12060 72 75 65 29 0a 0a 23 20 41 64 64 20 73 65 6c 66 2d 6c 6f 6f 70 73 20 74 6f 20 74 68 65 20 72 65 rue)..#.Add.self-loops.to.the.re
12080 6d 61 69 6e 69 6e 67 20 6e 6f 64 65 73 0a 65 64 67 65 6c 69 73 74 20 3d 20 5b 28 31 2c 20 31 29 maining.nodes.edgelist.=.[(1,.1)
120a0 2c 20 28 32 2c 20 32 29 5d 0a 47 2e 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d 28 65 64 67 65 6c ,.(2,.2)].G.add_edges_from(edgel
120c0 69 73 74 29 0a 0a 23 20 44 72 61 77 20 74 68 65 20 6e 65 77 6c 79 20 61 64 64 65 64 20 73 65 6c ist)..#.Draw.the.newly.added.sel
120e0 66 2d 6c 6f 6f 70 73 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 61 74 74 69 6e f-loops.with.different.formattin
12100 67 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 47 2c 20 70 6f 73 2c g.nx.draw_networkx_edges(G,.pos,
12120 20 65 64 67 65 6c 69 73 74 3d 65 64 67 65 6c 69 73 74 2c 20 61 72 72 6f 77 73 74 79 6c 65 3d 22 .edgelist=edgelist,.arrowstyle="
12140 3c 7c 2d 22 2c 20 73 74 79 6c 65 3d 22 64 61 73 68 65 64 22 29 0a 0a 70 6c 74 2e 73 68 6f 77 28 <|-",.style="dashed")..plt.show(
12160 29 0a 50 4b 03 04 14 00 00 00 00 00 01 7b 57 56 a6 98 11 54 cc 04 00 00 cc 04 00 00 17 00 00 00 ).PK.........{WV...T............
12180 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 73 61 6d 70 73 6f 6e 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d drawing/plot_sampson.py""".=====
121a0 3d 3d 0a 53 61 6d 70 73 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 61 6d 70 73 6f 6e 27 73 20 6d 6f ==.Sampson.=======..Sampson's.mo
121c0 6e 61 73 74 65 72 79 20 64 61 74 61 2e 0a 0a 53 68 6f 77 73 20 68 6f 77 20 74 6f 20 72 65 61 64 nastery.data...Shows.how.to.read
121e0 20 64 61 74 61 20 66 72 6f 6d 20 61 20 7a 69 70 20 66 69 6c 65 20 61 6e 64 20 70 6c 6f 74 20 6d .data.from.a.zip.file.and.plot.m
12200 75 6c 74 69 70 6c 65 20 66 72 61 6d 65 73 2e 0a 0a 54 68 65 20 64 61 74 61 20 66 69 6c 65 20 63 ultiple.frames...The.data.file.c
12220 61 6e 20 62 65 20 66 6f 75 6e 64 20 61 74 3a 0a 0a 2d 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 an.be.found.at:..-.https://githu
12240 62 2e 63 6f 6d 2f 6e 65 74 77 6f 72 6b 78 2f 6e 65 74 77 6f 72 6b 78 2f 62 6c 6f 62 2f 6d 61 69 b.com/networkx/networkx/blob/mai
12260 6e 2f 65 78 61 6d 70 6c 65 73 2f 64 72 61 77 69 6e 67 2f 73 61 6d 70 73 6f 6e 5f 64 61 74 61 2e n/examples/drawing/sampson_data.
12280 7a 69 70 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 7a 69 70 66 69 6c 65 0a 66 72 6f 6d 20 69 6f 20 zip."""..import.zipfile.from.io.
122a0 69 6d 70 6f 72 74 20 42 79 74 65 73 49 4f 20 61 73 20 53 74 72 69 6e 67 49 4f 0a 0a 69 6d 70 6f import.BytesIO.as.StringIO..impo
122c0 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f rt.matplotlib.pyplot.as.plt.impo
122e0 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 77 69 74 68 20 7a 69 70 66 69 6c 65 2e rt.networkx.as.nx..with.zipfile.
12300 5a 69 70 46 69 6c 65 28 22 73 61 6d 70 73 6f 6e 5f 64 61 74 61 2e 7a 69 70 22 29 20 61 73 20 7a ZipFile("sampson_data.zip").as.z
12320 66 3a 0a 20 20 20 20 65 31 20 3d 20 53 74 72 69 6e 67 49 4f 28 7a 66 2e 72 65 61 64 28 22 73 61 f:.....e1.=.StringIO(zf.read("sa
12340 6d 70 6c 69 6b 65 31 2e 74 78 74 22 29 29 0a 20 20 20 20 65 32 20 3d 20 53 74 72 69 6e 67 49 4f mplike1.txt")).....e2.=.StringIO
12360 28 7a 66 2e 72 65 61 64 28 22 73 61 6d 70 6c 69 6b 65 32 2e 74 78 74 22 29 29 0a 20 20 20 20 65 (zf.read("samplike2.txt")).....e
12380 33 20 3d 20 53 74 72 69 6e 67 49 4f 28 7a 66 2e 72 65 61 64 28 22 73 61 6d 70 6c 69 6b 65 33 2e 3.=.StringIO(zf.read("samplike3.
123a0 74 78 74 22 29 29 0a 0a 47 31 20 3d 20 6e 78 2e 72 65 61 64 5f 65 64 67 65 6c 69 73 74 28 65 31 txt"))..G1.=.nx.read_edgelist(e1
123c0 2c 20 64 65 6c 69 6d 69 74 65 72 3d 22 5c 74 22 29 0a 47 32 20 3d 20 6e 78 2e 72 65 61 64 5f 65 ,.delimiter="\t").G2.=.nx.read_e
123e0 64 67 65 6c 69 73 74 28 65 32 2c 20 64 65 6c 69 6d 69 74 65 72 3d 22 5c 74 22 29 0a 47 33 20 3d dgelist(e2,.delimiter="\t").G3.=
12400 20 6e 78 2e 72 65 61 64 5f 65 64 67 65 6c 69 73 74 28 65 33 2c 20 64 65 6c 69 6d 69 74 65 72 3d .nx.read_edgelist(e3,.delimiter=
12420 22 5c 74 22 29 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 33 2c "\t").pos.=.nx.spring_layout(G3,
12440 20 69 74 65 72 61 74 69 6f 6e 73 3d 31 30 30 2c 20 73 65 65 64 3d 31 37 33 29 0a 70 6c 74 2e 63 .iterations=100,.seed=173).plt.c
12460 6c 66 28 29 0a 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 32 32 31 29 0a 70 6c 74 2e 74 69 74 6c 65 lf()..plt.subplot(221).plt.title
12480 28 22 73 61 6d 70 6c 69 6b 65 31 22 29 0a 6e 78 2e 64 72 61 77 28 47 31 2c 20 70 6f 73 2c 20 6e ("samplike1").nx.draw(G1,.pos,.n
124a0 6f 64 65 5f 73 69 7a 65 3d 35 30 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a ode_size=50,.with_labels=False).
124c0 70 6c 74 2e 73 75 62 70 6c 6f 74 28 32 32 32 29 0a 70 6c 74 2e 74 69 74 6c 65 28 22 73 61 6d 70 plt.subplot(222).plt.title("samp
124e0 6c 69 6b 65 32 22 29 0a 6e 78 2e 64 72 61 77 28 47 32 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 like2").nx.draw(G2,.pos,.node_si
12500 7a 65 3d 35 30 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a 70 6c 74 2e 73 75 ze=50,.with_labels=False).plt.su
12520 62 70 6c 6f 74 28 32 32 33 29 0a 70 6c 74 2e 74 69 74 6c 65 28 22 73 61 6d 70 6c 69 6b 65 33 22 bplot(223).plt.title("samplike3"
12540 29 0a 6e 78 2e 64 72 61 77 28 47 33 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 30 2c ).nx.draw(G3,.pos,.node_size=50,
12560 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a 70 6c 74 2e 73 75 62 70 6c 6f 74 28 .with_labels=False).plt.subplot(
12580 32 32 34 29 0a 70 6c 74 2e 74 69 74 6c 65 28 22 73 61 6d 70 6c 69 6b 65 31 2c 32 2c 33 22 29 0a 224).plt.title("samplike1,2,3").
125a0 6e 78 2e 64 72 61 77 28 47 33 2c 20 70 6f 73 2c 20 65 64 67 65 6c 69 73 74 3d 6c 69 73 74 28 47 nx.draw(G3,.pos,.edgelist=list(G
125c0 33 2e 65 64 67 65 73 28 29 29 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 30 2c 20 77 69 74 68 5f 6c 3.edges()),.node_size=50,.with_l
125e0 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 abels=False).nx.draw_networkx_ed
12600 67 65 73 28 47 31 2c 20 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 32 35 29 0a 6e 78 2e 64 72 61 77 ges(G1,.pos,.alpha=0.25).nx.draw
12620 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 47 32 2c 20 70 6f 73 2c 20 61 6c 70 68 61 3d 30 _networkx_edges(G2,.pos,.alpha=0
12640 2e 32 35 29 0a 70 6c 74 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 .25).plt.tight_layout().plt.show
12660 28 29 0a 50 4b 03 04 14 00 00 00 00 00 21 7b 57 56 48 43 5f 48 da 03 00 00 da 03 00 00 1c 00 00 ().PK........!{WVHC_H...........
12680 00 65 78 74 65 72 6e 61 6c 2f 6a 61 76 61 73 63 72 69 70 74 5f 66 6f 72 63 65 2e 70 79 22 22 22 .external/javascript_force.py"""
126a0 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4a 61 76 61 73 63 72 69 70 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d .==========.Javascript.=========
126c0 3d 0a 0a 45 78 61 6d 70 6c 65 20 6f 66 20 77 72 69 74 69 6e 67 20 4a 53 4f 4e 20 66 6f 72 6d 61 =..Example.of.writing.JSON.forma
126e0 74 20 67 72 61 70 68 20 64 61 74 61 20 61 6e 64 20 75 73 69 6e 67 20 74 68 65 20 44 33 20 4a 61 t.graph.data.and.using.the.D3.Ja
12700 76 61 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 0a 74 6f 20 70 72 6f 64 75 63 65 20 61 6e 20 48 vascript.library.to.produce.an.H
12720 54 4d 4c 2f 4a 61 76 61 73 63 72 69 70 74 20 64 72 61 77 69 6e 67 2e 0a 0a 59 6f 75 20 77 69 6c TML/Javascript.drawing...You.wil
12740 6c 20 6e 65 65 64 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 l.need.to.download.the.following
12760 20 64 69 72 65 63 74 6f 72 79 3a 0a 0a 2d 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f .directory:..-.https://github.co
12780 6d 2f 6e 65 74 77 6f 72 6b 78 2f 6e 65 74 77 6f 72 6b 78 2f 74 72 65 65 2f 6d 61 69 6e 2f 65 78 m/networkx/networkx/tree/main/ex
127a0 61 6d 70 6c 65 73 2f 65 78 74 65 72 6e 61 6c 2f 66 6f 72 63 65 0a 22 22 22 0a 69 6d 70 6f 72 74 amples/external/force.""".import
127c0 20 6a 73 6f 6e 0a 0a 69 6d 70 6f 72 74 20 66 6c 61 73 6b 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f .json..import.flask.import.netwo
127e0 72 6b 78 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 62 61 72 62 65 6c 6c 5f 67 72 61 70 68 28 rkx.as.nx..G.=.nx.barbell_graph(
12800 36 2c 20 33 29 0a 23 20 74 68 69 73 20 64 33 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74 68 65 6,.3).#.this.d3.example.uses.the
12820 20 6e 61 6d 65 20 61 74 74 72 69 62 75 74 65 20 66 6f 72 20 74 68 65 20 6d 6f 75 73 65 2d 68 6f .name.attribute.for.the.mouse-ho
12840 76 65 72 20 76 61 6c 75 65 2c 0a 23 20 73 6f 20 61 64 64 20 61 20 6e 61 6d 65 20 74 6f 20 65 61 ver.value,.#.so.add.a.name.to.ea
12860 63 68 20 6e 6f 64 65 0a 66 6f 72 20 6e 20 69 6e 20 47 3a 0a 20 20 20 20 47 2e 6e 6f 64 65 73 5b ch.node.for.n.in.G:.....G.nodes[
12880 6e 5d 5b 22 6e 61 6d 65 22 5d 20 3d 20 6e 0a 23 20 77 72 69 74 65 20 6a 73 6f 6e 20 66 6f 72 6d n]["name"].=.n.#.write.json.form
128a0 61 74 74 65 64 20 64 61 74 61 0a 64 20 3d 20 6e 78 2e 6a 73 6f 6e 5f 67 72 61 70 68 2e 6e 6f 64 atted.data.d.=.nx.json_graph.nod
128c0 65 5f 6c 69 6e 6b 5f 64 61 74 61 28 47 29 20 20 23 20 6e 6f 64 65 2d 6c 69 6e 6b 20 66 6f 72 6d e_link_data(G)..#.node-link.form
128e0 61 74 20 74 6f 20 73 65 72 69 61 6c 69 7a 65 0a 23 20 77 72 69 74 65 20 6a 73 6f 6e 0a 6a 73 6f at.to.serialize.#.write.json.jso
12900 6e 2e 64 75 6d 70 28 64 2c 20 6f 70 65 6e 28 22 66 6f 72 63 65 2f 66 6f 72 63 65 2e 6a 73 6f 6e n.dump(d,.open("force/force.json
12920 22 2c 20 22 77 22 29 29 0a 70 72 69 6e 74 28 22 57 72 6f 74 65 20 6e 6f 64 65 2d 6c 69 6e 6b 20 ",."w")).print("Wrote.node-link.
12940 4a 53 4f 4e 20 64 61 74 61 20 74 6f 20 66 6f 72 63 65 2f 66 6f 72 63 65 2e 6a 73 6f 6e 22 29 0a JSON.data.to.force/force.json").
12960 0a 23 20 53 65 72 76 65 20 74 68 65 20 66 69 6c 65 20 6f 76 65 72 20 68 74 74 70 20 74 6f 20 61 .#.Serve.the.file.over.http.to.a
12980 6c 6c 6f 77 20 66 6f 72 20 63 72 6f 73 73 20 6f 72 69 67 69 6e 20 72 65 71 75 65 73 74 73 0a 61 llow.for.cross.origin.requests.a
129a0 70 70 20 3d 20 66 6c 61 73 6b 2e 46 6c 61 73 6b 28 5f 5f 6e 61 6d 65 5f 5f 2c 20 73 74 61 74 69 pp.=.flask.Flask(__name__,.stati
129c0 63 5f 66 6f 6c 64 65 72 3d 22 66 6f 72 63 65 22 29 0a 0a 0a 40 61 70 70 2e 72 6f 75 74 65 28 22 c_folder="force")...@app.route("
129e0 2f 22 29 0a 64 65 66 20 73 74 61 74 69 63 5f 70 72 6f 78 79 28 29 3a 0a 20 20 20 20 72 65 74 75 /").def.static_proxy():.....retu
12a00 72 6e 20 61 70 70 2e 73 65 6e 64 5f 73 74 61 74 69 63 5f 66 69 6c 65 28 22 66 6f 72 63 65 2e 68 rn.app.send_static_file("force.h
12a20 74 6d 6c 22 29 0a 0a 0a 70 72 69 6e 74 28 22 5c 6e 47 6f 20 74 6f 20 68 74 74 70 3a 2f 2f 6c 6f tml")...print("\nGo.to.http://lo
12a40 63 61 6c 68 6f 73 74 3a 38 30 30 30 20 74 6f 20 73 65 65 20 74 68 65 20 65 78 61 6d 70 6c 65 5c calhost:8000.to.see.the.example\
12a60 6e 22 29 0a 61 70 70 2e 72 75 6e 28 70 6f 72 74 3d 38 30 30 30 29 0a 50 4b 03 04 14 00 00 00 00 n").app.run(port=8000).PK.......
12a80 00 21 7b 57 56 fb 9b b3 8f 1d 04 00 00 1d 04 00 00 17 00 00 00 65 78 74 65 72 6e 61 6c 2f 70 6c .!{WV................external/pl
12aa0 6f 74 5f 69 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 0a 69 67 72 61 70 68 0a 3d 3d ot_igraph.py""".======.igraph.==
12ac0 3d 3d 3d 3d 0a 0a 69 67 72 61 70 68 20 28 68 74 74 70 73 3a 2f 2f 69 67 72 61 70 68 2e 6f 72 67 ====..igraph.(https://igraph.org
12ae0 2f 29 20 69 73 20 61 20 70 6f 70 75 6c 61 72 20 6e 65 74 77 6f 72 6b 20 61 6e 61 6c 79 73 69 73 /).is.a.popular.network.analysis
12b00 20 70 61 63 6b 61 67 65 20 74 68 61 74 0a 70 72 6f 76 69 64 65 73 20 28 61 6d 6f 6e 67 20 6d 61 .package.that.provides.(among.ma
12b20 6e 79 20 6f 74 68 65 72 20 74 68 69 6e 67 73 29 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 63 6f ny.other.things).functions.to.co
12b40 6e 76 65 72 74 20 74 6f 2f 66 72 6f 6d 20 4e 65 74 77 6f 72 6b 58 2e 0a 22 22 22 0a 0a 69 6d 70 nvert.to/from.NetworkX.."""..imp
12b60 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 ort.matplotlib.pyplot.as.plt.imp
12b80 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 69 67 72 61 70 68 ort.networkx.as.nx.import.igraph
12ba0 20 61 73 20 69 67 0a 0a 23 20 25 25 0a 23 20 4e 65 74 77 6f 72 6b 58 20 74 6f 20 69 67 72 61 70 .as.ig..#.%%.#.NetworkX.to.igrap
12bc0 68 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 47 20 3d 20 6e 78 2e 64 h.#.------------------..G.=.nx.d
12be0 65 6e 73 65 5f 67 6e 6d 5f 72 61 6e 64 6f 6d 5f 67 72 61 70 68 28 33 30 2c 20 34 30 2c 20 73 65 ense_gnm_random_graph(30,.40,.se
12c00 65 64 3d 34 32 29 0a 0a 23 20 6c 61 72 67 65 73 74 20 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 ed=42)..#.largest.connected.comp
12c20 6f 6e 65 6e 74 0a 63 6f 6d 70 6f 6e 65 6e 74 73 20 3d 20 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f onent.components.=.nx.connected_
12c40 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 0a 6c 61 72 67 65 73 74 5f 63 6f 6d 70 6f 6e 65 6e 74 20 components(G).largest_component.
12c60 3d 20 6d 61 78 28 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 6b 65 79 3d 6c 65 6e 29 0a 48 20 3d 20 47 =.max(components,.key=len).H.=.G
12c80 2e 73 75 62 67 72 61 70 68 28 6c 61 72 67 65 73 74 5f 63 6f 6d 70 6f 6e 65 6e 74 29 0a 0a 23 20 .subgraph(largest_component)..#.
12ca0 63 6f 6e 76 65 72 74 20 74 6f 20 69 67 72 61 70 68 0a 68 20 3d 20 69 67 2e 47 72 61 70 68 2e 66 convert.to.igraph.h.=.ig.Graph.f
12cc0 72 6f 6d 5f 6e 65 74 77 6f 72 6b 78 28 48 29 0a 0a 0a 23 20 50 6c 6f 74 20 74 68 65 20 73 61 6d rom_networkx(H)...#.Plot.the.sam
12ce0 65 20 6e 65 74 77 6f 72 6b 20 77 69 74 68 20 4e 65 74 77 6f 72 6b 58 20 61 6e 64 20 69 67 72 61 e.network.with.NetworkX.and.igra
12d00 70 68 0a 66 69 67 2c 20 28 61 78 30 2c 20 61 78 31 29 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 ph.fig,.(ax0,.ax1).=.plt.subplot
12d20 73 28 6e 72 6f 77 73 3d 31 2c 20 6e 63 6f 6c 73 3d 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 32 2c s(nrows=1,.ncols=2,.figsize=(12,
12d40 20 36 29 29 0a 0a 23 20 4e 65 74 77 6f 72 6b 58 20 64 72 61 77 0a 61 78 30 2e 73 65 74 5f 74 69 .6))..#.NetworkX.draw.ax0.set_ti
12d60 74 6c 65 28 22 50 6c 6f 74 20 77 69 74 68 20 4e 65 74 77 6f 72 6b 58 20 64 72 61 77 22 29 0a 6e tle("Plot.with.NetworkX.draw").n
12d80 78 2e 64 72 61 77 5f 6b 61 6d 61 64 61 5f 6b 61 77 61 69 28 48 2c 20 6e 6f 64 65 5f 73 69 7a 65 x.draw_kamada_kawai(H,.node_size
12da0 3d 35 30 2c 20 61 78 3d 61 78 30 29 0a 0a 23 20 69 67 72 61 70 68 20 64 72 61 77 0a 61 78 31 2e =50,.ax=ax0)..#.igraph.draw.ax1.
12dc0 73 65 74 5f 74 69 74 6c 65 28 22 50 6c 6f 74 20 77 69 74 68 20 69 67 72 61 70 68 20 70 6c 6f 74 set_title("Plot.with.igraph.plot
12de0 22 29 0a 6c 61 79 6f 75 74 20 3d 20 68 2e 6c 61 79 6f 75 74 5f 6b 61 6d 61 64 61 5f 6b 61 77 61 ").layout.=.h.layout_kamada_kawa
12e00 69 28 29 0a 69 67 2e 70 6c 6f 74 28 68 2c 20 6c 61 79 6f 75 74 3d 6c 61 79 6f 75 74 2c 20 74 61 i().ig.plot(h,.layout=layout,.ta
12e20 72 67 65 74 3d 61 78 31 29 0a 70 6c 74 2e 61 78 69 73 28 22 6f 66 66 22 29 0a 70 6c 74 2e 73 68 rget=ax1).plt.axis("off").plt.sh
12e40 6f 77 28 29 0a 0a 0a 23 20 25 25 0a 23 20 69 67 72 61 70 68 20 74 6f 20 4e 65 74 77 6f 72 6b 58 ow()...#.%%.#.igraph.to.NetworkX
12e60 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 67 20 3d 20 69 67 2e 47 72 .#.------------------..g.=.ig.Gr
12e80 61 70 68 2e 47 52 47 28 33 30 2c 20 30 2e 32 29 0a 47 20 3d 20 67 2e 74 6f 5f 6e 65 74 77 6f 72 aph.GRG(30,.0.2).G.=.g.to_networ
12ea0 6b 78 28 29 0a 6e 78 2e 64 72 61 77 28 47 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 30 29 0a 70 6c kx().nx.draw(G,.node_size=50).pl
12ec0 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 26 7b 57 56 1d 30 9c dd 80 07 00 00 80 t.show().PK........&{WV.0.......
12ee0 07 00 00 18 00 00 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f 6f 73 6d 6e 78 2e 70 79 22 .......geospatial/plot_osmnx.py"
12f00 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 70 65 6e "".========================.Open
12f20 53 74 72 65 65 74 4d 61 70 20 77 69 74 68 20 4f 53 4d 6e 78 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d StreetMap.with.OSMnx.===========
12f40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 =============..This.example.show
12f60 73 20 68 6f 77 20 74 6f 20 75 73 65 20 4f 53 4d 6e 78 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 20 61 s.how.to.use.OSMnx.to.download.a
12f80 6e 64 20 6d 6f 64 65 6c 20 61 20 73 74 72 65 65 74 20 6e 65 74 77 6f 72 6b 0a 66 72 6f 6d 20 4f nd.model.a.street.network.from.O
12fa0 70 65 6e 53 74 72 65 65 74 4d 61 70 2c 20 76 69 73 75 61 6c 69 7a 65 20 63 65 6e 74 72 61 6c 69 penStreetMap,.visualize.centrali
12fc0 74 79 2c 20 61 6e 64 20 73 61 76 65 20 74 68 65 20 67 72 61 70 68 20 61 73 20 61 20 73 68 61 70 ty,.and.save.the.graph.as.a.shap
12fe0 65 66 69 6c 65 2c 0a 61 20 47 65 6f 50 61 63 6b 61 67 65 2c 20 6f 72 20 47 72 61 70 68 4d 4c 2e efile,.a.GeoPackage,.or.GraphML.
13000 0a 0a 4f 53 4d 6e 78 20 69 73 20 61 20 50 79 74 68 6f 6e 20 70 61 63 6b 61 67 65 20 74 6f 20 72 ..OSMnx.is.a.Python.package.to.r
13020 65 74 72 69 65 76 65 2c 20 6d 6f 64 65 6c 2c 20 61 6e 61 6c 79 7a 65 2c 20 61 6e 64 20 76 69 73 etrieve,.model,.analyze,.and.vis
13040 75 61 6c 69 7a 65 0a 4f 70 65 6e 53 74 72 65 65 74 4d 61 70 20 73 74 72 65 65 74 20 6e 65 74 77 ualize.OpenStreetMap.street.netw
13060 6f 72 6b 73 20 61 73 20 4e 65 74 77 6f 72 6b 58 20 4d 75 6c 74 69 44 69 47 72 61 70 68 20 6f 62 orks.as.NetworkX.MultiDiGraph.ob
13080 6a 65 63 74 73 2e 20 49 74 20 63 61 6e 20 61 6c 73 6f 0a 72 65 74 72 69 65 76 65 20 61 6e 79 20 jects..It.can.also.retrieve.any.
130a0 6f 74 68 65 72 20 73 70 61 74 69 61 6c 20 64 61 74 61 20 66 72 6f 6d 20 4f 53 4d 20 61 73 20 67 other.spatial.data.from.OSM.as.g
130c0 65 6f 70 61 6e 64 61 73 20 47 65 6f 44 61 74 61 46 72 61 6d 65 73 2e 20 53 65 65 0a 68 74 74 70 eopandas.GeoDataFrames..See.http
130e0 73 3a 2f 2f 6f 73 6d 6e 78 2e 72 65 61 64 74 68 65 64 6f 63 73 2e 69 6f 2f 20 66 6f 72 20 4f 53 s://osmnx.readthedocs.io/.for.OS
13100 4d 6e 78 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 64 20 75 73 61 67 65 2e 0a 22 22 22 Mnx.documentation.and.usage.."""
13120 0a 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6f ..import.networkx.as.nx.import.o
13140 73 6d 6e 78 20 61 73 20 6f 78 0a 0a 6f 78 2e 63 6f 6e 66 69 67 28 75 73 65 5f 63 61 63 68 65 3d smnx.as.ox..ox.config(use_cache=
13160 54 72 75 65 2c 20 6c 6f 67 5f 63 6f 6e 73 6f 6c 65 3d 54 72 75 65 29 0a 0a 23 20 64 6f 77 6e 6c True,.log_console=True)..#.downl
13180 6f 61 64 20 73 74 72 65 65 74 20 6e 65 74 77 6f 72 6b 20 64 61 74 61 20 66 72 6f 6d 20 4f 53 4d oad.street.network.data.from.OSM
131a0 20 61 6e 64 20 63 6f 6e 73 74 72 75 63 74 20 61 20 4d 75 6c 74 69 44 69 47 72 61 70 68 20 6d 6f .and.construct.a.MultiDiGraph.mo
131c0 64 65 6c 0a 47 20 3d 20 6f 78 2e 67 72 61 70 68 5f 66 72 6f 6d 5f 70 6f 69 6e 74 28 28 33 37 2e del.G.=.ox.graph_from_point((37.
131e0 37 39 2c 20 2d 31 32 32 2e 34 31 29 2c 20 64 69 73 74 3d 37 35 30 2c 20 6e 65 74 77 6f 72 6b 5f 79,.-122.41),.dist=750,.network_
13200 74 79 70 65 3d 22 64 72 69 76 65 22 29 0a 0a 23 20 69 6d 70 75 74 65 20 65 64 67 65 20 28 64 72 type="drive")..#.impute.edge.(dr
13220 69 76 69 6e 67 29 20 73 70 65 65 64 73 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 65 20 65 64 67 65 iving).speeds.and.calculate.edge
13240 20 74 72 61 76 65 72 73 61 6c 20 74 69 6d 65 73 0a 47 20 3d 20 6f 78 2e 61 64 64 5f 65 64 67 65 .traversal.times.G.=.ox.add_edge
13260 5f 73 70 65 65 64 73 28 47 29 0a 47 20 3d 20 6f 78 2e 61 64 64 5f 65 64 67 65 5f 74 72 61 76 65 _speeds(G).G.=.ox.add_edge_trave
13280 6c 5f 74 69 6d 65 73 28 47 29 0a 0a 23 20 79 6f 75 20 63 61 6e 20 63 6f 6e 76 65 72 74 20 4d 75 l_times(G)..#.you.can.convert.Mu
132a0 6c 74 69 44 69 47 72 61 70 68 20 74 6f 2f 66 72 6f 6d 20 67 65 6f 70 61 6e 64 61 73 20 47 65 6f ltiDiGraph.to/from.geopandas.Geo
132c0 44 61 74 61 46 72 61 6d 65 73 0a 67 64 66 5f 6e 6f 64 65 73 2c 20 67 64 66 5f 65 64 67 65 73 20 DataFrames.gdf_nodes,.gdf_edges.
132e0 3d 20 6f 78 2e 67 72 61 70 68 5f 74 6f 5f 67 64 66 73 28 47 29 0a 47 20 3d 20 6f 78 2e 67 72 61 =.ox.graph_to_gdfs(G).G.=.ox.gra
13300 70 68 5f 66 72 6f 6d 5f 67 64 66 73 28 67 64 66 5f 6e 6f 64 65 73 2c 20 67 64 66 5f 65 64 67 65 ph_from_gdfs(gdf_nodes,.gdf_edge
13320 73 2c 20 67 72 61 70 68 5f 61 74 74 72 73 3d 47 2e 67 72 61 70 68 29 0a 0a 23 20 63 6f 6e 76 65 s,.graph_attrs=G.graph)..#.conve
13340 72 74 20 4d 75 6c 74 69 44 69 47 72 61 70 68 20 74 6f 20 44 69 47 72 61 70 68 20 74 6f 20 75 73 rt.MultiDiGraph.to.DiGraph.to.us
13360 65 20 6e 78 2e 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 20 66 75 6e 63 e.nx.betweenness_centrality.func
13380 74 69 6f 6e 0a 23 20 63 68 6f 6f 73 65 20 62 65 74 77 65 65 6e 20 70 61 72 61 6c 6c 65 6c 20 65 tion.#.choose.between.parallel.e
133a0 64 67 65 73 20 62 79 20 6d 69 6e 69 6d 69 7a 69 6e 67 20 74 72 61 76 65 6c 5f 74 69 6d 65 20 61 dges.by.minimizing.travel_time.a
133c0 74 74 72 69 62 75 74 65 20 76 61 6c 75 65 0a 44 20 3d 20 6f 78 2e 75 74 69 6c 73 5f 67 72 61 70 ttribute.value.D.=.ox.utils_grap
133e0 68 2e 67 65 74 5f 64 69 67 72 61 70 68 28 47 2c 20 77 65 69 67 68 74 3d 22 74 72 61 76 65 6c 5f h.get_digraph(G,.weight="travel_
13400 74 69 6d 65 22 29 0a 0a 23 20 63 61 6c 63 75 6c 61 74 65 20 6e 6f 64 65 20 62 65 74 77 65 65 6e time")..#.calculate.node.between
13420 6e 65 73 73 20 63 65 6e 74 72 61 6c 69 74 79 2c 20 77 65 69 67 68 74 65 64 20 62 79 20 74 72 61 ness.centrality,.weighted.by.tra
13440 76 65 6c 20 74 69 6d 65 0a 62 63 20 3d 20 6e 78 2e 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e vel.time.bc.=.nx.betweenness_cen
13460 74 72 61 6c 69 74 79 28 44 2c 20 77 65 69 67 68 74 3d 22 74 72 61 76 65 6c 5f 74 69 6d 65 22 2c trality(D,.weight="travel_time",
13480 20 6e 6f 72 6d 61 6c 69 7a 65 64 3d 54 72 75 65 29 0a 6e 78 2e 73 65 74 5f 6e 6f 64 65 5f 61 74 .normalized=True).nx.set_node_at
134a0 74 72 69 62 75 74 65 73 28 47 2c 20 76 61 6c 75 65 73 3d 62 63 2c 20 6e 61 6d 65 3d 22 62 63 22 tributes(G,.values=bc,.name="bc"
134c0 29 0a 0a 23 20 70 6c 6f 74 20 74 68 65 20 67 72 61 70 68 2c 20 63 6f 6c 6f 72 69 6e 67 20 6e 6f )..#.plot.the.graph,.coloring.no
134e0 64 65 73 20 62 79 20 62 65 74 77 65 65 6e 6e 65 73 73 20 63 65 6e 74 72 61 6c 69 74 79 0a 6e 63 des.by.betweenness.centrality.nc
13500 20 3d 20 6f 78 2e 70 6c 6f 74 2e 67 65 74 5f 6e 6f 64 65 5f 63 6f 6c 6f 72 73 5f 62 79 5f 61 74 .=.ox.plot.get_node_colors_by_at
13520 74 72 28 47 2c 20 22 62 63 22 2c 20 63 6d 61 70 3d 22 70 6c 61 73 6d 61 22 29 0a 66 69 67 2c 20 tr(G,."bc",.cmap="plasma").fig,.
13540 61 78 20 3d 20 6f 78 2e 70 6c 6f 74 5f 67 72 61 70 68 28 0a 20 20 20 20 47 2c 20 62 67 63 6f 6c ax.=.ox.plot_graph(.....G,.bgcol
13560 6f 72 3d 22 6b 22 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 6e 63 2c 20 6e 6f 64 65 5f 73 69 7a 65 or="k",.node_color=nc,.node_size
13580 3d 35 30 2c 20 65 64 67 65 5f 6c 69 6e 65 77 69 64 74 68 3d 32 2c 20 65 64 67 65 5f 63 6f 6c 6f =50,.edge_linewidth=2,.edge_colo
135a0 72 3d 22 23 33 33 33 33 33 33 22 0a 29 0a 0a 23 20 73 61 76 65 20 67 72 61 70 68 20 74 6f 20 73 r="#333333".)..#.save.graph.to.s
135c0 68 61 70 65 66 69 6c 65 2c 20 67 65 6f 70 61 63 6b 61 67 65 2c 20 6f 72 20 67 72 61 70 68 6d 6c hapefile,.geopackage,.or.graphml
135e0 0a 6f 78 2e 73 61 76 65 5f 67 72 61 70 68 5f 73 68 61 70 65 66 69 6c 65 28 47 2c 20 66 69 6c 65 .ox.save_graph_shapefile(G,.file
13600 70 61 74 68 3d 22 2e 2f 67 72 61 70 68 5f 73 68 61 70 65 66 69 6c 65 2f 22 29 0a 6f 78 2e 73 61 path="./graph_shapefile/").ox.sa
13620 76 65 5f 67 72 61 70 68 5f 67 65 6f 70 61 63 6b 61 67 65 28 47 2c 20 66 69 6c 65 70 61 74 68 3d ve_graph_geopackage(G,.filepath=
13640 22 2e 2f 67 72 61 70 68 2e 67 70 6b 67 22 29 0a 6f 78 2e 73 61 76 65 5f 67 72 61 70 68 6d 6c 28 "./graph.gpkg").ox.save_graphml(
13660 47 2c 20 66 69 6c 65 70 61 74 68 3d 22 2e 2f 67 72 61 70 68 2e 67 72 61 70 68 6d 6c 22 29 0a 50 G,.filepath="./graph.graphml").P
13680 4b 03 04 14 00 00 00 00 00 24 7b 57 56 9f de 91 4c 38 0f 00 00 38 0f 00 00 18 00 00 00 67 65 6f K........${WV...L8...8.......geo
136a0 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f 6c 69 6e 65 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d spatial/plot_lines.py""".=======
136c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 47 72 61 70 68 73 20 66 72 6f 6d 20 ===================.Graphs.from.
136e0 61 20 73 65 74 20 6f 66 20 6c 69 6e 65 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d a.set.of.lines.=================
13700 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 68 6f =========..This.example.shows.ho
13720 77 20 74 6f 20 62 75 69 6c 64 20 61 20 67 72 61 70 68 20 66 72 6f 6d 20 61 20 73 65 74 20 6f 66 w.to.build.a.graph.from.a.set.of
13740 20 67 65 6f 67 72 61 70 68 69 63 20 6c 69 6e 65 73 0a 28 73 6f 6d 65 74 69 6d 65 73 20 63 61 6c .geographic.lines.(sometimes.cal
13760 6c 65 64 20 22 6c 69 6e 65 73 74 72 69 6e 67 73 22 29 20 75 73 69 6e 67 20 47 65 6f 50 61 6e 64 led."linestrings").using.GeoPand
13780 61 73 2c 20 6d 6f 6d 65 70 79 20 61 6e 64 20 61 6c 74 65 72 6e 61 74 69 76 65 6c 79 0a 50 79 53 as,.momepy.and.alternatively.PyS
137a0 41 4c 2e 20 57 65 27 6c 6c 20 70 6c 6f 74 20 73 6f 6d 65 20 72 69 76 65 72 73 20 61 6e 64 20 73 AL..We'll.plot.some.rivers.and.s
137c0 74 72 65 65 74 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 69 72 20 67 72 61 70 68 73 20 treets,.as.well.as.their.graphs.
137e0 66 6f 72 6d 65 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 67 6d 65 6e 74 73 2e 0a 0a 54 68 65 72 65 formed.from.the.segments...There
13800 20 61 72 65 20 67 65 6e 65 72 61 6c 6c 79 20 74 77 6f 20 77 61 79 73 20 6f 66 20 63 72 65 61 74 .are.generally.two.ways.of.creat
13820 69 6e 67 20 67 72 61 70 68 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 6c 69 6e 65 20 67 65 6f 6d 65 ing.graph.object.from.line.geome
13840 74 72 79 2e 0a 4c 65 74 27 73 20 75 73 65 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 73 74 72 try..Let's.use.an.example.of.str
13860 65 65 74 20 6e 65 74 77 6f 72 6b 20 74 6f 20 69 6c 6c 75 73 74 72 61 74 65 20 62 6f 74 68 3a 0a eet.network.to.illustrate.both:.
13880 0a 54 68 65 20 66 69 72 73 74 20 77 61 79 20 69 73 20 61 20 73 6f 2d 63 61 6c 6c 65 64 20 70 72 .The.first.way.is.a.so-called.pr
138a0 69 6d 61 6c 20 61 70 70 72 6f 61 63 68 2c 20 77 68 65 72 65 20 65 61 63 68 20 69 6e 74 65 72 73 imal.approach,.where.each.inters
138c0 65 63 74 69 6f 6e 20 69 73 0a 61 20 6e 6f 64 65 20 61 6e 64 20 65 61 63 68 20 6c 69 6e 65 73 74 ection.is.a.node.and.each.linest
138e0 72 69 6e 67 20 73 65 67 6d 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6e 67 20 74 77 6f 20 69 6e 74 65 ring.segment.connecting.two.inte
13900 72 73 65 63 74 69 6f 6e 73 20 69 73 20 61 6e 20 65 64 67 65 2e 0a 0a 54 68 65 20 73 65 63 6f 6e rsections.is.an.edge...The.secon
13920 64 20 77 61 79 20 69 73 20 73 6f 2d 63 61 6c 6c 65 64 20 64 75 61 6c 20 61 70 70 72 6f 61 63 68 d.way.is.so-called.dual.approach
13940 2c 20 77 68 65 72 65 20 65 61 63 68 20 6c 69 6e 65 20 69 73 20 61 20 6e 6f 64 65 20 61 6e 64 0a ,.where.each.line.is.a.node.and.
13960 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 74 6f 70 6f 6c 6f 67 79 20 69 73 20 74 75 72 6e 65 64 20 intersection.topology.is.turned.
13980 69 6e 74 6f 20 65 64 67 65 73 2e 20 4f 6e 65 20 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e 73 20 68 into.edges..One.of.the.options.h
139a0 6f 77 20 74 68 69 73 20 69 73 0a 75 73 65 64 20 66 6f 72 20 73 74 72 65 65 74 20 6e 65 74 77 6f ow.this.is.used.for.street.netwo
139c0 72 6b 20 61 6e 61 6c 79 73 69 73 20 69 73 20 61 6e 20 61 6e 67 75 6c 61 72 20 61 6e 61 6c 79 73 rk.analysis.is.an.angular.analys
139e0 69 73 2c 20 77 68 65 72 65 20 79 6f 75 72 20 72 6f 75 74 69 6e 67 0a 69 73 20 77 65 69 67 68 74 is,.where.your.routing.is.weight
13a00 65 64 20 76 69 61 20 61 6e 67 6c 65 73 20 62 65 74 77 65 65 6e 20 73 74 72 65 65 74 20 73 65 67 ed.via.angles.between.street.seg
13a20 6d 65 6e 74 73 20 6f 6e 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 73 2e 0a 0a 57 65 20 77 69 6c 6c ments.on.intersections...We.will
13a40 20 75 73 65 20 47 65 6f 50 61 6e 64 61 73 20 74 6f 20 72 65 61 64 20 73 70 61 74 69 61 6c 20 64 .use.GeoPandas.to.read.spatial.d
13a60 61 74 61 20 61 6e 64 20 6d 6f 6d 65 70 79 20 74 6f 20 67 65 6e 65 72 61 74 65 20 66 69 72 73 74 ata.and.momepy.to.generate.first
13a80 0a 70 72 69 6d 61 6c 20 67 72 61 70 68 20 61 6e 64 20 74 68 65 6e 20 64 75 61 6c 20 67 72 61 70 .primal.graph.and.then.dual.grap
13aa0 68 2e 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20 50 79 53 41 h..Furthermore,.we.will.use.PySA
13ac0 4c 20 74 6f 0a 69 6c 6c 75 73 74 72 61 74 65 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 77 L.to.illustrate.an.alternative.w
13ae0 61 79 20 6f 66 20 63 72 65 61 74 69 6e 67 20 72 61 77 20 64 75 61 6c 20 67 72 61 70 68 2e 0a 22 ay.of.creating.raw.dual.graph.."
13b00 22 22 0a 0a 0a 69 6d 70 6f 72 74 20 67 65 6f 70 61 6e 64 61 73 0a 69 6d 70 6f 72 74 20 6d 61 74 ""...import.geopandas.import.mat
13b20 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6d 6f 6d plotlib.pyplot.as.plt.import.mom
13b40 65 70 79 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 66 72 6f 6d 20 63 epy.import.networkx.as.nx.from.c
13b60 6f 6e 74 65 78 74 69 6c 79 20 69 6d 70 6f 72 74 20 61 64 64 5f 62 61 73 65 6d 61 70 0a 66 72 6f ontextily.import.add_basemap.fro
13b80 6d 20 6c 69 62 70 79 73 61 6c 20 69 6d 70 6f 72 74 20 77 65 69 67 68 74 73 0a 0a 23 20 25 25 0a m.libpysal.import.weights..#.%%.
13ba0 23 20 52 65 61 64 20 69 6e 20 65 78 61 6d 70 6c 65 20 72 69 76 65 72 20 67 65 6f 6d 65 74 72 79 #.Read.in.example.river.geometry
13bc0 20 66 72 6f 6d 20 47 65 6f 4a 53 4f 4e 2e 20 53 6f 75 72 63 65 20 6f 66 20 65 78 61 6d 70 6c 65 .from.GeoJSON..Source.of.example
13be0 20 64 61 74 61 3a 0a 23 20 68 74 74 70 73 3a 2f 2f 64 6f 69 2e 6f 72 67 2f 31 30 2e 33 33 39 30 .data:.#.https://doi.org/10.3390
13c00 2f 64 61 74 61 35 30 31 30 30 30 38 20 28 4e 69 63 6f 6c 61 73 20 43 61 64 69 65 75 78 29 0a 72 /data5010008.(Nicolas.Cadieux).r
13c20 69 76 65 72 73 20 3d 20 67 65 6f 70 61 6e 64 61 73 2e 72 65 61 64 5f 66 69 6c 65 28 22 72 69 76 ivers.=.geopandas.read_file("riv
13c40 65 72 73 2e 67 65 6f 6a 73 6f 6e 22 29 0a 0a 23 20 25 25 0a 23 20 43 6f 6e 73 74 72 75 63 74 20 ers.geojson")..#.%%.#.Construct.
13c60 74 68 65 20 70 72 69 6d 61 6c 20 67 72 61 70 68 2e 20 6d 6f 6d 65 70 79 20 61 75 74 6f 6d 61 74 the.primal.graph..momepy.automat
13c80 69 63 61 6c 6c 79 20 70 72 65 73 65 72 76 65 73 20 61 6c 6c 20 61 74 74 72 69 62 75 74 65 73 0a ically.preserves.all.attributes.
13ca0 23 20 66 72 6f 6d 20 47 65 6f 44 61 74 61 46 72 61 6d 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 #.from.GeoDataFrame.and.stores.t
13cc0 68 65 6e 20 61 73 20 65 64 67 65 20 61 74 74 72 69 62 75 74 65 73 2e 0a 47 20 3d 20 6d 6f 6d 65 hen.as.edge.attributes..G.=.mome
13ce0 70 79 2e 67 64 66 5f 74 6f 5f 6e 78 28 72 69 76 65 72 73 2c 20 61 70 70 72 6f 61 63 68 3d 22 70 py.gdf_to_nx(rivers,.approach="p
13d00 72 69 6d 61 6c 22 29 0a 0a 23 20 25 25 0a 23 20 45 61 63 68 20 6e 6f 64 65 20 69 73 20 65 6e 63 rimal")..#.%%.#.Each.node.is.enc
13d20 6f 64 65 64 20 62 79 20 69 74 73 20 63 6f 6f 72 64 69 6e 61 74 65 73 2c 20 77 68 69 63 68 20 61 oded.by.its.coordinates,.which.a
13d40 6c 6c 6f 77 73 20 75 73 20 74 6f 20 75 73 65 20 74 68 65 6d 0a 23 20 69 6e 20 70 6c 6f 74 74 69 llows.us.to.use.them.#.in.plotti
13d60 6e 67 2e 0a 70 6f 73 69 74 69 6f 6e 73 20 3d 20 7b 6e 3a 20 5b 6e 5b 30 5d 2c 20 6e 5b 31 5d 5d ng..positions.=.{n:.[n[0],.n[1]]
13d80 20 66 6f 72 20 6e 20 69 6e 20 6c 69 73 74 28 47 2e 6e 6f 64 65 73 29 7d 0a 0a 23 20 50 6c 6f 74 .for.n.in.list(G.nodes)}..#.Plot
13da0 0a 66 2c 20 61 78 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 31 2c 20 32 2c 20 66 69 67 73 .f,.ax.=.plt.subplots(1,.2,.figs
13dc0 69 7a 65 3d 28 31 32 2c 20 36 29 2c 20 73 68 61 72 65 78 3d 54 72 75 65 2c 20 73 68 61 72 65 79 ize=(12,.6),.sharex=True,.sharey
13de0 3d 54 72 75 65 29 0a 72 69 76 65 72 73 2e 70 6c 6f 74 28 63 6f 6c 6f 72 3d 22 6b 22 2c 20 61 78 =True).rivers.plot(color="k",.ax
13e00 3d 61 78 5b 30 5d 29 0a 66 6f 72 20 69 2c 20 66 61 63 65 74 20 69 6e 20 65 6e 75 6d 65 72 61 74 =ax[0]).for.i,.facet.in.enumerat
13e20 65 28 61 78 29 3a 0a 20 20 20 20 66 61 63 65 74 2e 73 65 74 5f 74 69 74 6c 65 28 28 22 52 69 76 e(ax):.....facet.set_title(("Riv
13e40 65 72 73 22 2c 20 22 47 72 61 70 68 22 29 5b 69 5d 29 0a 20 20 20 20 66 61 63 65 74 2e 61 78 69 ers",."Graph")[i]).....facet.axi
13e60 73 28 22 6f 66 66 22 29 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 69 74 69 6f 6e 73 2c 20 61 s("off").nx.draw(G,.positions,.a
13e80 78 3d 61 78 5b 31 5d 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 29 0a 0a 23 20 25 25 0a 23 20 4f 6e x=ax[1],.node_size=5)..#.%%.#.On
13ea0 63 65 20 77 65 20 66 69 6e 69 73 68 20 67 72 61 70 68 2d 62 61 73 65 64 20 61 6e 61 6c 79 73 69 ce.we.finish.graph-based.analysi
13ec0 73 2c 20 77 65 20 63 61 6e 20 63 6f 6e 76 65 72 74 20 67 72 61 70 68 20 62 61 63 6b 0a 23 20 74 s,.we.can.convert.graph.back.#.t
13ee0 6f 20 47 65 6f 44 61 74 61 46 72 61 6d 65 73 2e 20 6d 6f 6d 65 70 79 20 63 61 6e 20 72 65 74 75 o.GeoDataFrames..momepy.can.retu
13f00 72 6e 20 6e 6f 64 65 73 20 61 73 20 70 6f 69 6e 74 20 67 65 6f 6d 65 74 72 79 2c 0a 23 20 65 64 rn.nodes.as.point.geometry,.#.ed
13f20 67 65 73 20 61 73 20 6f 72 69 67 69 6e 61 6c 20 6c 69 6e 65 20 67 65 6f 6d 65 74 72 79 20 61 6e ges.as.original.line.geometry.an
13f40 64 20 57 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 50 79 53 41 4c 0a 23 20 73 70 61 d.W.object,.which.is.PySAL.#.spa
13f60 74 69 61 6c 20 77 65 69 67 68 74 73 20 6d 61 74 72 69 78 20 65 6e 63 6f 64 69 6e 67 20 6f 72 69 tial.weights.matrix.encoding.ori
13f80 67 69 6e 61 6c 20 67 72 61 70 68 20 73 6f 20 77 65 20 63 61 6e 20 75 73 65 0a 23 20 69 74 20 77 ginal.graph.so.we.can.use.#.it.w
13fa0 69 74 68 20 6e 6f 64 65 20 47 65 6f 44 61 74 61 46 72 61 6d 65 2e 0a 6e 6f 64 65 73 2c 20 65 64 ith.node.GeoDataFrame..nodes,.ed
13fc0 67 65 73 2c 20 57 20 3d 20 6d 6f 6d 65 70 79 2e 6e 78 5f 74 6f 5f 67 64 66 28 47 2c 20 73 70 61 ges,.W.=.momepy.nx_to_gdf(G,.spa
13fe0 74 69 61 6c 5f 77 65 69 67 68 74 73 3d 54 72 75 65 29 0a 0a 0a 23 20 52 65 61 64 20 69 6e 20 65 tial_weights=True)...#.Read.in.e
14000 78 61 6d 70 6c 65 20 73 74 72 65 65 74 20 6e 65 74 77 6f 72 6b 20 66 72 6f 6d 20 47 65 6f 50 61 xample.street.network.from.GeoPa
14020 63 6b 61 67 65 0a 73 74 72 65 65 74 73 20 3d 20 67 65 6f 70 61 6e 64 61 73 2e 72 65 61 64 5f 66 ckage.streets.=.geopandas.read_f
14040 69 6c 65 28 6d 6f 6d 65 70 79 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 70 61 74 68 28 22 62 75 ile(momepy.datasets.get_path("bu
14060 62 65 6e 65 63 22 29 2c 20 6c 61 79 65 72 3d 22 73 74 72 65 65 74 73 22 29 0a 0a 23 20 43 6f 6e benec"),.layer="streets")..#.Con
14080 73 74 72 75 63 74 20 74 68 65 20 70 72 69 6d 61 6c 20 67 72 61 70 68 0a 47 5f 70 72 69 6d 61 6c struct.the.primal.graph.G_primal
140a0 20 3d 20 6d 6f 6d 65 70 79 2e 67 64 66 5f 74 6f 5f 6e 78 28 73 74 72 65 65 74 73 2c 20 61 70 70 .=.momepy.gdf_to_nx(streets,.app
140c0 72 6f 61 63 68 3d 22 70 72 69 6d 61 6c 22 29 0a 0a 23 20 50 6c 6f 74 0a 66 2c 20 61 78 20 3d 20 roach="primal")..#.Plot.f,.ax.=.
140e0 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 31 2c 20 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 32 2c 20 plt.subplots(1,.2,.figsize=(12,.
14100 36 29 2c 20 73 68 61 72 65 78 3d 54 72 75 65 2c 20 73 68 61 72 65 79 3d 54 72 75 65 29 0a 73 74 6),.sharex=True,.sharey=True).st
14120 72 65 65 74 73 2e 70 6c 6f 74 28 63 6f 6c 6f 72 3d 22 6b 22 2c 20 61 78 3d 61 78 5b 30 5d 29 0a reets.plot(color="k",.ax=ax[0]).
14140 66 6f 72 20 69 2c 20 66 61 63 65 74 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 61 78 29 3a 0a 20 for.i,.facet.in.enumerate(ax):..
14160 20 20 20 66 61 63 65 74 2e 73 65 74 5f 74 69 74 6c 65 28 28 22 53 74 72 65 65 74 73 22 2c 20 22 ...facet.set_title(("Streets",."
14180 47 72 61 70 68 22 29 5b 69 5d 29 0a 20 20 20 20 66 61 63 65 74 2e 61 78 69 73 28 22 6f 66 66 22 Graph")[i]).....facet.axis("off"
141a0 29 0a 20 20 20 20 61 64 64 5f 62 61 73 65 6d 61 70 28 66 61 63 65 74 29 0a 6e 78 2e 64 72 61 77 ).....add_basemap(facet).nx.draw
141c0 28 0a 20 20 20 20 47 5f 70 72 69 6d 61 6c 2c 20 7b 6e 3a 20 5b 6e 5b 30 5d 2c 20 6e 5b 31 5d 5d (.....G_primal,.{n:.[n[0],.n[1]]
141e0 20 66 6f 72 20 6e 20 69 6e 20 6c 69 73 74 28 47 5f 70 72 69 6d 61 6c 2e 6e 6f 64 65 73 29 7d 2c .for.n.in.list(G_primal.nodes)},
14200 20 61 78 3d 61 78 5b 31 5d 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 30 0a 29 0a 0a 23 20 25 25 0a .ax=ax[1],.node_size=50.)..#.%%.
14220 23 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 64 75 61 6c 20 67 72 61 70 68 2e 20 6d 6f 6d 65 #.Construct.the.dual.graph..mome
14240 70 79 20 77 69 6c 6c 20 73 74 6f 72 65 20 72 6f 77 20 61 74 74 72 69 62 75 74 65 73 20 61 73 20 py.will.store.row.attributes.as.
14260 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 73 20 61 6e 64 0a 23 20 61 75 74 6f 6d 61 74 69 63 61 node.attributes.and.#.automatica
14280 6c 6c 79 20 6d 65 61 73 75 72 65 73 20 61 6e 67 6c 65 20 62 65 74 77 65 65 6e 20 6c 69 6e 65 73 lly.measures.angle.between.lines
142a0 2e 0a 47 5f 64 75 61 6c 20 3d 20 6d 6f 6d 65 70 79 2e 67 64 66 5f 74 6f 5f 6e 78 28 73 74 72 65 ..G_dual.=.momepy.gdf_to_nx(stre
142c0 65 74 73 2c 20 61 70 70 72 6f 61 63 68 3d 22 64 75 61 6c 22 29 0a 0a 23 20 50 6c 6f 74 0a 66 2c ets,.approach="dual")..#.Plot.f,
142e0 20 61 78 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 31 2c 20 32 2c 20 66 69 67 73 69 7a 65 .ax.=.plt.subplots(1,.2,.figsize
14300 3d 28 31 32 2c 20 36 29 2c 20 73 68 61 72 65 78 3d 54 72 75 65 2c 20 73 68 61 72 65 79 3d 54 72 =(12,.6),.sharex=True,.sharey=Tr
14320 75 65 29 0a 73 74 72 65 65 74 73 2e 70 6c 6f 74 28 63 6f 6c 6f 72 3d 22 6b 22 2c 20 61 78 3d 61 ue).streets.plot(color="k",.ax=a
14340 78 5b 30 5d 29 0a 66 6f 72 20 69 2c 20 66 61 63 65 74 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 x[0]).for.i,.facet.in.enumerate(
14360 61 78 29 3a 0a 20 20 20 20 66 61 63 65 74 2e 73 65 74 5f 74 69 74 6c 65 28 28 22 53 74 72 65 65 ax):.....facet.set_title(("Stree
14380 74 73 22 2c 20 22 47 72 61 70 68 22 29 5b 69 5d 29 0a 20 20 20 20 66 61 63 65 74 2e 61 78 69 73 ts",."Graph")[i]).....facet.axis
143a0 28 22 6f 66 66 22 29 0a 20 20 20 20 61 64 64 5f 62 61 73 65 6d 61 70 28 66 61 63 65 74 29 0a 6e ("off").....add_basemap(facet).n
143c0 78 2e 64 72 61 77 28 47 5f 64 75 61 6c 2c 20 7b 6e 3a 20 5b 6e 5b 30 5d 2c 20 6e 5b 31 5d 5d 20 x.draw(G_dual,.{n:.[n[0],.n[1]].
143e0 66 6f 72 20 6e 20 69 6e 20 6c 69 73 74 28 47 5f 64 75 61 6c 2e 6e 6f 64 65 73 29 7d 2c 20 61 78 for.n.in.list(G_dual.nodes)},.ax
14400 3d 61 78 5b 31 5d 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 30 29 0a 70 6c 74 2e 73 68 6f 77 28 29 =ax[1],.node_size=50).plt.show()
14420 0a 0a 23 20 43 6f 6e 76 65 72 74 20 64 75 61 6c 20 67 72 61 70 68 20 62 61 63 6b 20 74 6f 20 47 ..#.Convert.dual.graph.back.to.G
14440 65 6f 44 61 74 61 46 72 61 6d 65 2e 20 52 65 74 75 72 6e 73 20 6f 6e 6c 79 20 6f 72 69 67 69 6e eoDataFrame..Returns.only.origin
14460 61 6c 20 6c 69 6e 65 20 67 65 6f 6d 65 74 72 79 2e 0a 6c 69 6e 65 73 20 3d 20 6d 6f 6d 65 70 79 al.line.geometry..lines.=.momepy
14480 2e 6e 78 5f 74 6f 5f 67 64 66 28 47 5f 64 75 61 6c 29 0a 0a 23 20 25 25 0a 23 20 57 65 20 63 61 .nx_to_gdf(G_dual)..#.%%.#.We.ca
144a0 6e 20 61 6c 73 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 64 75 61 6c 20 67 72 61 70 68 20 n.also.construct.the.dual.graph.
144c0 75 73 69 6e 67 20 50 79 53 41 4c 2e 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 6f 6e 6c 79 20 65 using.PySAL..Note.that.it.only.e
144e0 6e 63 6f 64 65 73 0a 23 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20 62 65 74 77 65 65 6e 20 67 65 ncodes.#.relationship.between.ge
14500 6f 6d 65 74 72 69 65 73 20 61 6e 64 20 64 6f 20 6e 6f 74 20 61 6e 79 20 73 74 6f 72 65 20 61 74 ometries.and.do.not.any.store.at
14520 74 72 69 62 75 74 65 73 2e 20 48 6f 77 65 76 65 72 2c 20 69 74 20 69 73 0a 23 20 73 69 67 6e 69 tributes..However,.it.is.#.signi
14540 66 69 63 61 6e 74 6c 79 20 66 61 73 74 65 72 20 74 68 61 6e 20 6d 6f 6d 65 70 79 2e 67 64 66 5f ficantly.faster.than.momepy.gdf_
14560 74 6f 5f 6e 78 28 29 2e 0a 23 20 43 72 65 61 74 65 20 50 79 53 41 4c 20 77 65 69 67 68 74 73 20 to_nx()..#.Create.PySAL.weights.
14580 28 67 72 61 70 68 29 2e 0a 57 20 3d 20 77 65 69 67 68 74 73 2e 51 75 65 65 6e 2e 66 72 6f 6d 5f (graph)..W.=.weights.Queen.from_
145a0 64 61 74 61 66 72 61 6d 65 28 73 74 72 65 65 74 73 29 0a 0a 23 20 43 6f 6e 76 65 72 74 20 74 68 dataframe(streets)..#.Convert.th
145c0 65 20 67 72 61 70 68 20 74 6f 20 6e 65 74 77 6f 72 6b 78 0a 47 5f 64 75 61 6c 20 3d 20 57 2e 74 e.graph.to.networkx.G_dual.=.W.t
145e0 6f 5f 6e 65 74 77 6f 72 6b 78 28 29 0a 50 4b 03 04 14 00 00 00 00 00 2c 7b 57 56 ae 9b 92 8f cc o_networkx().PK........,{WV.....
14600 08 00 00 cc 08 00 00 1b 00 00 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f 70 6f 6c 79 67 ...........geospatial/plot_polyg
14620 6f 6e 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 47 ons.py""".====================.G
14640 72 61 70 68 73 20 66 72 6f 6d 20 50 6f 6c 79 67 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d raphs.from.Polygons.============
14660 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 68 6f 77 ========..This.example.shows.how
14680 20 74 6f 20 62 75 69 6c 64 20 61 20 67 72 61 70 68 20 66 72 6f 6d 20 61 20 73 65 74 20 6f 66 20 .to.build.a.graph.from.a.set.of.
146a0 70 6f 6c 79 67 6f 6e 73 0a 75 73 69 6e 67 20 50 79 53 41 4c 20 61 6e 64 20 67 65 6f 70 61 6e 64 polygons.using.PySAL.and.geopand
146c0 61 73 2e 20 57 65 27 6c 6c 20 66 6f 63 75 73 20 6f 6e 20 74 68 65 20 51 75 65 65 6e 20 63 6f 6e as..We'll.focus.on.the.Queen.con
146e0 74 69 67 75 69 74 79 20 0a 67 72 61 70 68 2c 20 62 75 74 20 63 6f 6e 73 74 72 75 63 74 6f 72 73 tiguity..graph,.but.constructors
14700 20 61 72 65 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 52 6f 6f 6b 20 63 6f 6e 74 .are.also.provided.for.Rook.cont
14720 69 67 75 69 74 79 2c 20 0a 61 73 20 77 65 6c 6c 20 61 73 20 6f 74 68 65 72 20 6b 69 6e 64 73 20 iguity,..as.well.as.other.kinds.
14740 6f 66 20 67 72 61 70 68 73 20 66 72 6f 6d 20 74 68 65 20 70 6f 6c 79 67 6f 6e 20 63 65 6e 74 72 of.graphs.from.the.polygon.centr
14760 6f 69 64 73 2e 20 0a 22 22 22 0a 0a 66 72 6f 6d 20 6c 69 62 70 79 73 61 6c 20 69 6d 70 6f 72 74 oids..."""..from.libpysal.import
14780 20 77 65 69 67 68 74 73 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f .weights.import.matplotlib.pyplo
147a0 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 t.as.plt.import.networkx.as.nx.i
147c0 6d 70 6f 72 74 20 67 65 6f 70 61 6e 64 61 73 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 mport.geopandas.import.numpy.as.
147e0 6e 70 0a 0a 23 20 72 65 61 64 20 69 6e 20 65 78 61 6d 70 6c 65 20 64 61 74 61 20 66 72 6f 6d 20 np..#.read.in.example.data.from.
14800 67 65 6f 6a 73 6f 6e 2e 20 47 65 6f 4a 53 4f 4e 20 69 73 20 61 20 66 69 6c 65 20 66 6f 72 6d 61 geojson..GeoJSON.is.a.file.forma
14820 74 0a 23 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 67 65 6f 67 72 61 70 68 69 63 20 64 61 74 61 t.#.for.encoding.geographic.data
14840 20 62 61 73 65 64 20 6f 6e 20 4a 53 4f 4e 2e 20 49 74 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 .based.on.JSON..It.is.useful.for
14860 0a 23 20 70 72 65 73 65 6e 74 69 6e 67 20 67 65 6f 67 72 61 70 68 69 63 20 64 61 74 61 20 6f 6e .#.presenting.geographic.data.on
14880 20 74 68 65 20 77 65 62 2c 20 61 6e 64 20 69 73 20 69 6e 63 72 65 61 73 69 6e 67 6c 79 0a 23 20 .the.web,.and.is.increasingly.#.
148a0 75 73 65 64 20 61 73 20 61 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 67 65 6f 67 72 61 used.as.a.file.format.for.geogra
148c0 70 68 69 63 20 64 61 74 61 2e 0a 66 69 6c 65 70 61 74 68 20 3d 20 22 6e 75 74 73 31 2e 67 65 6f phic.data..filepath.=."nuts1.geo
148e0 6a 73 6f 6e 22 0a 65 75 72 6f 70 65 61 6e 5f 72 65 67 69 6f 6e 73 20 3d 20 67 65 6f 70 61 6e 64 json".european_regions.=.geopand
14900 61 73 2e 72 65 61 64 5f 66 69 6c 65 28 66 69 6c 65 70 61 74 68 29 0a 0a 23 20 65 78 74 72 61 63 as.read_file(filepath)..#.extrac
14920 74 20 74 68 65 20 63 65 6e 74 72 6f 69 64 73 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69 6e 67 20 74 t.the.centroids.for.connecting.t
14940 68 65 20 72 65 67 69 6f 6e 73 2c 20 77 68 69 63 68 20 69 73 0a 23 20 74 68 65 20 61 76 65 72 61 he.regions,.which.is.#.the.avera
14960 67 65 20 6f 66 20 74 68 65 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 74 68 61 74 20 64 65 66 69 6e ge.of.the.coordinates.that.defin
14980 65 20 74 68 65 20 70 6f 6c 79 67 6f 6e 27 73 20 62 6f 75 6e 64 61 72 79 0a 63 65 6e 74 72 6f 69 e.the.polygon's.boundary.centroi
149a0 64 73 20 3d 20 6e 70 2e 63 6f 6c 75 6d 6e 5f 73 74 61 63 6b 28 28 65 75 72 6f 70 65 61 6e 5f 72 ds.=.np.column_stack((european_r
149c0 65 67 69 6f 6e 73 2e 63 65 6e 74 72 6f 69 64 2e 78 2c 20 65 75 72 6f 70 65 61 6e 5f 72 65 67 69 egions.centroid.x,.european_regi
149e0 6f 6e 73 2e 63 65 6e 74 72 6f 69 64 2e 79 29 29 0a 0a 23 20 63 6f 6e 73 74 72 75 63 74 20 74 68 ons.centroid.y))..#.construct.th
14a00 65 20 22 51 75 65 65 6e 22 20 61 64 6a 61 63 65 6e 63 79 20 67 72 61 70 68 2e 20 49 6e 20 67 65 e."Queen".adjacency.graph..In.ge
14a20 6f 67 72 61 70 68 69 63 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 0a 23 20 74 68 65 20 22 ographical.applications,.#.the."
14a40 51 75 65 65 6e 22 20 61 64 6a 61 63 65 6e 63 79 20 67 72 61 70 68 20 63 6f 6e 73 69 64 65 72 73 Queen".adjacency.graph.considers
14a60 20 74 77 6f 20 70 6f 6c 79 67 6f 6e 73 20 61 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 66 0a 23 20 .two.polygons.as.connected.if.#.
14a80 74 68 65 79 20 73 68 61 72 65 20 61 20 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20 6f 6e 20 74 68 65 they.share.a.single.point.on.the
14aa0 69 72 20 62 6f 75 6e 64 61 72 79 2e 20 54 68 69 73 20 69 73 20 61 6e 20 61 6e 61 6c 6f 67 75 65 ir.boundary..This.is.an.analogue
14ac0 20 74 6f 0a 23 20 74 68 65 20 22 4d 6f 6f 72 65 22 20 6e 65 69 67 68 62 6f 72 68 6f 6f 64 20 6e .to.#.the."Moore".neighborhood.n
14ae0 69 6e 65 20 73 75 72 72 6f 75 6e 64 69 6e 67 20 63 65 6c 6c 73 20 69 6e 20 61 20 72 65 67 75 6c ine.surrounding.cells.in.a.regul
14b00 61 72 20 67 72 69 64 2e 0a 71 75 65 65 6e 20 3d 20 77 65 69 67 68 74 73 2e 51 75 65 65 6e 2e 66 ar.grid..queen.=.weights.Queen.f
14b20 72 6f 6d 5f 64 61 74 61 66 72 61 6d 65 28 65 75 72 6f 70 65 61 6e 5f 72 65 67 69 6f 6e 73 29 0a rom_dataframe(european_regions).
14b40 0a 23 20 54 68 65 6e 2c 20 77 65 20 63 61 6e 20 63 6f 6e 76 65 72 74 20 74 68 65 20 67 72 61 70 .#.Then,.we.can.convert.the.grap
14b60 68 20 74 6f 20 6e 65 74 77 6f 72 6b 78 20 6f 62 6a 65 63 74 20 75 73 69 6e 67 20 74 68 65 0a 23 h.to.networkx.object.using.the.#
14b80 20 2e 74 6f 5f 6e 65 74 77 6f 72 6b 78 28 29 20 6d 65 74 68 6f 64 2e 0a 67 72 61 70 68 20 3d 20 ..to_networkx().method..graph.=.
14ba0 71 75 65 65 6e 2e 74 6f 5f 6e 65 74 77 6f 72 6b 78 28 29 0a 0a 23 20 54 6f 20 70 6c 6f 74 20 77 queen.to_networkx()..#.To.plot.w
14bc0 69 74 68 20 6e 65 74 77 6f 72 6b 78 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 6d 65 72 67 65 20 74 ith.networkx,.we.need.to.merge.t
14be0 68 65 20 6e 6f 64 65 73 20 62 61 63 6b 20 74 6f 0a 23 20 74 68 65 69 72 20 70 6f 73 69 74 69 6f he.nodes.back.to.#.their.positio
14c00 6e 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 6c 6f 74 20 69 6e 20 6e 65 74 77 6f 72 6b 78 0a ns.in.order.to.plot.in.networkx.
14c20 70 6f 73 69 74 69 6f 6e 73 20 3d 20 64 69 63 74 28 7a 69 70 28 67 72 61 70 68 2e 6e 6f 64 65 73 positions.=.dict(zip(graph.nodes
14c40 2c 20 63 65 6e 74 72 6f 69 64 73 29 29 0a 0a 23 20 70 6c 6f 74 20 77 69 74 68 20 61 20 6e 69 63 ,.centroids))..#.plot.with.a.nic
14c60 65 20 62 61 73 65 6d 61 70 0a 61 78 20 3d 20 65 75 72 6f 70 65 61 6e 5f 72 65 67 69 6f 6e 73 2e e.basemap.ax.=.european_regions.
14c80 70 6c 6f 74 28 6c 69 6e 65 77 69 64 74 68 3d 31 2c 20 65 64 67 65 63 6f 6c 6f 72 3d 22 67 72 65 plot(linewidth=1,.edgecolor="gre
14ca0 79 22 2c 20 66 61 63 65 63 6f 6c 6f 72 3d 22 6c 69 67 68 74 62 6c 75 65 22 29 0a 61 78 2e 61 78 y",.facecolor="lightblue").ax.ax
14cc0 69 73 28 5b 2d 31 32 2c 20 34 35 2c 20 33 33 2c 20 36 36 5d 29 0a 61 78 2e 61 78 69 73 28 22 6f is([-12,.45,.33,.66]).ax.axis("o
14ce0 66 66 22 29 0a 6e 78 2e 64 72 61 77 28 67 72 61 70 68 2c 20 70 6f 73 69 74 69 6f 6e 73 2c 20 61 ff").nx.draw(graph,.positions,.a
14d00 78 3d 61 78 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 72 x=ax,.node_size=5,.node_color="r
14d20 22 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 0a 23 20 41 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 ").plt.show()..#.An.alternative.
14d40 6d 65 74 68 6f 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 67 72 61 70 68 73 20 66 72 6f 6d 20 method.to.construct.graphs.from.
14d60 70 6f 6c 79 67 6f 6e 73 20 6d 61 79 20 75 73 65 0a 23 20 70 79 67 65 6f 73 2e 20 54 68 69 73 20 polygons.may.use.#.pygeos..This.
14d80 70 61 63 6b 61 67 65 20 69 73 20 61 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6e package.is.a.high-performance.in
14da0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 47 45 4f 53 20 43 0a 23 20 6c 69 62 72 61 72 79 2c terface.to.the.GEOS.C.#.library,
14dc0 20 75 73 65 64 20 69 6e 20 63 6f 6d 70 75 74 69 6e 67 20 67 65 6f 67 72 61 70 68 69 63 61 6c 20 .used.in.computing.geographical.
14de0 72 65 6c 61 74 69 6f 6e 73 68 69 70 73 2e 20 54 68 65 73 65 20 6c 65 74 20 75 73 0a 23 20 64 65 relationships..These.let.us.#.de
14e00 73 63 72 69 62 65 20 74 68 65 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 73 20 62 65 74 77 65 65 6e scribe.the.relationships.between
14e20 20 22 70 6f 69 6e 74 20 73 65 74 73 2c 22 20 6c 69 6b 65 20 70 6f 6c 79 67 6f 6e 73 20 77 68 65 ."point.sets,".like.polygons.whe
14e40 74 68 65 72 0a 23 20 6f 72 20 6e 6f 74 20 61 20 6c 69 6e 65 20 22 63 72 6f 73 73 65 73 22 20 61 ther.#.or.not.a.line."crosses".a
14e60 20 70 6f 6c 79 67 6f 6e 2c 20 6f 72 20 77 68 65 74 68 65 72 20 74 77 6f 20 70 6f 6c 79 67 6f 6e .polygon,.or.whether.two.polygon
14e80 73 20 22 74 6f 75 63 68 2e 22 0a 23 20 54 68 65 73 65 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 73 s."touch.".#.These.relationships
14ea0 2c 20 63 61 6c 6c 65 64 20 22 70 72 65 64 69 63 61 74 65 73 22 2c 20 61 72 65 20 65 78 74 65 6e ,.called."predicates",.are.exten
14ec0 73 69 76 65 2c 20 61 6e 64 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 0a 23 20 62 79 20 74 68 sive,.and.are.documented.#.by.th
14ee0 65 20 70 79 67 65 6f 73 20 70 61 63 6b 61 67 65 2e 0a 50 4b 03 04 14 00 00 00 00 00 21 7b 57 56 e.pygeos.package..PK........!{WV
14f00 46 4d ec 62 07 0c 00 00 07 0c 00 00 1b 00 00 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f FM.b............geospatial/plot_
14f20 64 65 6c 61 75 6e 61 79 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d delaunay.py""".=================
14f40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 44 65 6c 61 75 6e 61 79 20 67 =====================.Delaunay.g
14f60 72 61 70 68 73 20 66 72 6f 6d 20 67 65 6f 67 72 61 70 68 69 63 20 70 6f 69 6e 74 73 0a 3d 3d 3d raphs.from.geographic.points.===
14f80 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
14fa0 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 68 6f 77 20 74 6f 20 62 ===..This.example.shows.how.to.b
14fc0 75 69 6c 64 20 61 20 64 65 6c 61 75 6e 61 79 20 67 72 61 70 68 20 28 70 6c 75 73 20 69 74 73 20 uild.a.delaunay.graph.(plus.its.
14fe0 64 75 61 6c 2c 0a 74 68 65 20 73 65 74 20 6f 66 20 56 6f 72 6f 6e 6f 69 20 70 6f 6c 79 67 6f 6e dual,.the.set.of.Voronoi.polygon
15000 73 29 20 66 72 6f 6d 20 61 20 73 65 74 20 6f 66 20 70 6f 69 6e 74 73 2e 0a 46 6f 72 20 74 68 69 s).from.a.set.of.points..For.thi
15020 73 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20 73 65 74 20 6f 66 20 63 68 6f 6c 65 72 s,.we.will.use.the.set.of.choler
15040 61 20 63 61 73 65 73 20 61 74 20 74 68 65 20 42 72 6f 61 64 20 53 74 72 65 65 74 20 50 75 6d 70 a.cases.at.the.Broad.Street.Pump
15060 2c 20 0a 72 65 63 6f 72 64 65 64 20 62 79 20 4a 6f 68 6e 20 53 6e 6f 77 20 69 6e 20 31 38 35 33 ,..recorded.by.John.Snow.in.1853
15080 2e 20 54 68 65 20 6d 65 74 68 6f 64 73 20 73 68 6f 77 6e 20 68 65 72 65 20 63 61 6e 20 61 6c 73 ..The.methods.shown.here.can.als
150a0 6f 20 77 6f 72 6b 20 0a 64 69 72 65 63 74 6c 79 20 77 69 74 68 20 70 6f 6c 79 67 6f 6e 61 6c 20 o.work..directly.with.polygonal.
150c0 64 61 74 61 20 75 73 69 6e 67 20 74 68 65 69 72 20 63 65 6e 74 72 6f 69 64 73 20 61 73 20 72 65 data.using.their.centroids.as.re
150e0 70 72 65 73 65 6e 74 61 74 69 76 65 20 70 6f 69 6e 74 73 2e 20 0a 22 22 22 0a 0a 66 72 6f 6d 20 presentative.points..."""..from.
15100 6c 69 62 70 79 73 61 6c 20 69 6d 70 6f 72 74 20 77 65 69 67 68 74 73 2c 20 65 78 61 6d 70 6c 65 libpysal.import.weights,.example
15120 73 0a 66 72 6f 6d 20 6c 69 62 70 79 73 61 6c 2e 63 67 20 69 6d 70 6f 72 74 20 76 6f 72 6f 6e 6f s.from.libpysal.cg.import.vorono
15140 69 5f 66 72 61 6d 65 73 0a 66 72 6f 6d 20 63 6f 6e 74 65 78 74 69 6c 79 20 69 6d 70 6f 72 74 20 i_frames.from.contextily.import.
15160 61 64 64 5f 62 61 73 65 6d 61 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 add_basemap.import.matplotlib.py
15180 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e plot.as.plt.import.networkx.as.n
151a0 78 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 67 65 6f 70 x.import.numpy.as.np.import.geop
151c0 61 6e 64 61 73 0a 0a 23 20 72 65 61 64 20 69 6e 20 65 78 61 6d 70 6c 65 20 64 61 74 61 20 66 72 andas..#.read.in.example.data.fr
151e0 6f 6d 20 61 20 67 65 6f 70 61 63 6b 61 67 65 20 66 69 6c 65 2e 20 47 65 6f 70 61 63 6b 61 67 65 om.a.geopackage.file..Geopackage
15200 73 0a 23 20 61 72 65 20 61 20 66 6f 72 6d 61 74 20 66 6f 72 20 73 74 6f 72 69 6e 67 20 67 65 6f s.#.are.a.format.for.storing.geo
15220 67 72 61 70 68 69 63 20 64 61 74 61 20 74 68 61 74 20 69 73 20 62 61 63 6b 65 64 0a 23 20 62 79 graphic.data.that.is.backed.#.by
15240 20 73 71 6c 69 74 65 2e 20 67 65 6f 70 61 6e 64 61 73 20 72 65 61 64 73 20 64 61 74 61 20 72 65 .sqlite..geopandas.reads.data.re
15260 6c 79 69 6e 67 20 6f 6e 20 74 68 65 20 66 69 6f 6e 61 20 70 61 63 6b 61 67 65 2c 0a 23 20 70 72 lying.on.the.fiona.package,.#.pr
15280 6f 76 69 64 69 6e 67 20 61 20 68 69 67 68 2d 6c 65 76 65 6c 20 70 61 6e 64 61 73 2d 73 74 79 6c oviding.a.high-level.pandas-styl
152a0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 67 65 6f 67 72 61 70 68 69 63 20 64 61 74 61 2e 0a e.interface.to.geographic.data..
152c0 23 20 4d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 67 65 6f 67 72 61 #.Many.different.kinds.of.geogra
152e0 70 68 69 63 20 64 61 74 61 20 66 6f 72 6d 61 74 73 20 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 phic.data.formats.can.be.read.by
15300 20 67 65 6f 70 61 6e 64 61 73 2e 0a 63 61 73 65 73 20 3d 20 67 65 6f 70 61 6e 64 61 73 2e 72 65 .geopandas..cases.=.geopandas.re
15320 61 64 5f 66 69 6c 65 28 22 63 68 6f 6c 65 72 61 5f 63 61 73 65 73 2e 67 70 6b 67 22 29 0a 0a 23 ad_file("cholera_cases.gpkg")..#
15340 20 49 6e 20 6f 72 64 65 72 20 66 6f 72 20 6e 65 74 77 6f 72 6b 78 20 74 6f 20 70 6c 6f 74 20 74 .In.order.for.networkx.to.plot.t
15360 68 65 20 6e 6f 64 65 73 20 6f 66 20 6f 75 72 20 67 72 61 70 68 20 63 6f 72 72 65 63 74 6c 79 2c he.nodes.of.our.graph.correctly,
15380 20 77 65 0a 23 20 6e 65 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 61 72 72 61 .we.#.need.to.construct.the.arra
153a0 79 20 6f 66 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 66 6f 72 20 65 61 63 68 20 70 6f 69 6e 74 20 y.of.coordinates.for.each.point.
153c0 69 6e 20 6f 75 72 20 64 61 74 61 73 65 74 2e 0a 23 20 54 6f 20 67 65 74 20 74 68 69 73 20 61 73 in.our.dataset..#.To.get.this.as
153e0 20 61 20 6e 75 6d 70 79 20 61 72 72 61 79 2c 20 77 65 20 65 78 74 72 61 63 74 20 74 68 65 20 78 .a.numpy.array,.we.extract.the.x
15400 20 61 6e 64 20 79 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 66 72 6f 6d 20 74 68 65 0a 23 20 67 65 .and.y.coordinates.from.the.#.ge
15420 6f 6d 65 74 72 79 20 63 6f 6c 75 6d 6e 2e 0a 63 6f 6f 72 64 69 6e 61 74 65 73 20 3d 20 6e 70 2e ometry.column..coordinates.=.np.
15440 63 6f 6c 75 6d 6e 5f 73 74 61 63 6b 28 28 63 61 73 65 73 2e 67 65 6f 6d 65 74 72 79 2e 78 2c 20 column_stack((cases.geometry.x,.
15460 63 61 73 65 73 2e 67 65 6f 6d 65 74 72 79 2e 79 29 29 0a 0a 23 20 57 68 69 6c 65 20 77 65 20 63 cases.geometry.y))..#.While.we.c
15480 6f 75 6c 64 20 73 69 6d 70 6c 79 20 70 72 65 73 65 6e 74 20 74 68 65 20 44 65 6c 61 75 6e 61 79 ould.simply.present.the.Delaunay
154a0 20 67 72 61 70 68 20 64 69 72 65 63 74 6c 79 2c 20 69 74 20 69 73 20 75 73 65 66 75 6c 20 74 6f .graph.directly,.it.is.useful.to
154c0 0a 23 20 76 69 73 75 61 6c 69 7a 65 20 74 68 65 20 44 65 6c 61 75 6e 61 79 20 67 72 61 70 68 20 .#.visualize.the.Delaunay.graph.
154e0 61 6c 6f 6e 67 73 69 64 65 20 74 68 65 20 56 6f 72 6f 6e 6f 69 20 64 69 61 67 72 61 6d 2e 20 54 alongside.the.Voronoi.diagram..T
15500 68 69 73 20 69 73 20 62 65 63 61 75 73 65 0a 23 20 74 68 65 20 74 77 6f 20 61 72 65 20 69 6e 74 his.is.because.#.the.two.are.int
15520 72 69 6e 73 69 63 61 6c 6c 79 20 6c 69 6e 6b 65 64 3a 20 74 68 65 20 61 64 6a 61 63 65 6e 63 79 rinsically.linked:.the.adjacency
15540 20 67 72 61 70 68 20 6f 66 20 74 68 65 20 56 6f 72 6f 6e 6f 69 20 64 69 61 67 72 61 6d 0a 23 20 .graph.of.the.Voronoi.diagram.#.
15560 69 73 20 74 68 65 20 44 65 6c 61 75 6e 61 79 20 67 72 61 70 68 20 66 6f 72 20 74 68 65 20 73 65 is.the.Delaunay.graph.for.the.se
15580 74 20 6f 66 20 67 65 6e 65 72 61 74 6f 72 20 70 6f 69 6e 74 73 21 20 50 75 74 20 73 69 6d 70 6c t.of.generator.points!.Put.simpl
155a0 79 2c 20 74 68 69 73 20 6d 65 61 6e 73 0a 23 20 77 65 20 63 61 6e 20 62 75 69 6c 64 20 74 68 65 y,.this.means.#.we.can.build.the
155c0 20 56 6f 72 6f 6e 6f 69 20 64 69 61 67 72 61 6d 20 28 72 65 6c 79 69 6e 67 20 6f 6e 20 73 63 69 .Voronoi.diagram.(relying.on.sci
155e0 70 79 2e 73 70 61 74 69 61 6c 20 66 6f 72 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 0a 23 20 py.spatial.for.the.underlying.#.
15600 63 6f 6d 70 75 74 61 74 69 6f 6e 73 29 2c 20 61 6e 64 20 74 68 65 6e 20 63 6f 6e 76 65 72 74 20 computations),.and.then.convert.
15620 74 68 65 73 65 20 70 6f 6c 79 67 6f 6e 73 20 71 75 69 63 6b 6c 79 20 69 6e 74 6f 20 74 68 65 20 these.polygons.quickly.into.the.
15640 44 65 6c 61 75 6e 61 79 20 67 72 61 70 68 2e 0a 23 20 42 65 20 63 61 72 65 66 75 6c 2c 20 74 68 Delaunay.graph..#.Be.careful,.th
15660 6f 75 67 68 3b 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 2c 20 62 79 20 64 65 66 61 75 6c 74 2c ough;.our.algorithm,.by.default,
15680 20 77 69 6c 6c 20 63 6c 69 70 20 74 68 65 20 76 6f 72 6f 6e 6f 69 20 64 69 61 67 72 61 6d 20 74 .will.clip.the.voronoi.diagram.t
156a0 6f 0a 23 20 74 68 65 20 62 6f 75 6e 64 69 6e 67 20 62 6f 78 20 6f 66 20 74 68 65 20 70 6f 69 6e o.#.the.bounding.box.of.the.poin
156c0 74 20 70 61 74 74 65 72 6e 2e 20 54 68 69 73 20 69 73 20 63 6f 6e 74 72 6f 6c 6c 65 64 20 62 79 t.pattern..This.is.controlled.by
156e0 20 74 68 65 20 22 63 6c 69 70 22 20 61 72 67 75 6d 65 6e 74 2e 0a 63 65 6c 6c 73 2c 20 67 65 6e .the."clip".argument..cells,.gen
15700 65 72 61 74 6f 72 73 20 3d 20 76 6f 72 6f 6e 6f 69 5f 66 72 61 6d 65 73 28 63 6f 6f 72 64 69 6e erators.=.voronoi_frames(coordin
15720 61 74 65 73 2c 20 63 6c 69 70 3d 22 63 6f 6e 76 65 78 20 68 75 6c 6c 22 29 0a 0a 23 20 57 69 74 ates,.clip="convex.hull")..#.Wit
15740 68 20 74 68 65 20 76 6f 72 6f 6e 6f 69 20 70 6f 6c 79 67 6f 6e 73 2c 20 77 65 20 63 61 6e 20 63 h.the.voronoi.polygons,.we.can.c
15760 6f 6e 73 74 72 75 63 74 20 74 68 65 20 61 64 6a 61 63 65 6e 63 79 20 67 72 61 70 68 20 62 65 74 onstruct.the.adjacency.graph.bet
15780 77 65 65 6e 20 74 68 65 6d 20 75 73 69 6e 67 0a 23 20 22 52 6f 6f 6b 22 20 63 6f 6e 74 69 67 75 ween.them.using.#."Rook".contigu
157a0 69 74 79 2e 20 54 68 69 73 20 72 65 70 72 65 73 65 6e 74 73 20 76 6f 72 6f 6e 6f 69 20 63 65 6c ity..This.represents.voronoi.cel
157c0 6c 73 20 61 73 20 62 65 69 6e 67 20 61 64 6a 61 63 65 6e 74 20 69 66 20 74 68 65 79 20 73 68 61 ls.as.being.adjacent.if.they.sha
157e0 72 65 0a 23 20 61 6e 20 65 64 67 65 2f 66 61 63 65 2e 20 54 68 69 73 20 69 73 20 61 6e 20 61 6e re.#.an.edge/face..This.is.an.an
15800 61 6c 6f 67 75 65 20 74 6f 20 74 68 65 20 22 76 6f 6e 20 4e 65 75 6d 61 6e 22 20 6e 65 69 67 68 alogue.to.the."von.Neuman".neigh
15820 62 6f 72 68 6f 6f 64 2c 20 6f 72 20 74 68 65 20 34 20 63 61 72 64 69 6e 61 6c 0a 23 20 6e 65 69 borhood,.or.the.4.cardinal.#.nei
15840 67 68 62 6f 72 73 20 69 6e 20 61 20 72 65 67 75 6c 61 72 20 67 72 69 64 2e 20 54 68 65 20 6e 61 ghbors.in.a.regular.grid..The.na
15860 6d 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e 73 20 61 20 52 me.comes.from.the.directions.a.R
15880 6f 6f 6b 20 70 69 65 63 65 20 63 61 6e 20 6d 6f 76 65 0a 23 20 6f 6e 20 61 20 63 68 65 73 73 62 ook.piece.can.move.#.on.a.chessb
158a0 6f 61 72 64 2e 0a 64 65 6c 61 75 6e 61 79 20 3d 20 77 65 69 67 68 74 73 2e 52 6f 6f 6b 2e 66 72 oard..delaunay.=.weights.Rook.fr
158c0 6f 6d 5f 64 61 74 61 66 72 61 6d 65 28 63 65 6c 6c 73 29 0a 0a 23 20 4f 6e 63 65 20 74 68 65 20 om_dataframe(cells)..#.Once.the.
158e0 67 72 61 70 68 20 69 73 20 62 75 69 6c 74 2c 20 77 65 20 63 61 6e 20 63 6f 6e 76 65 72 74 20 74 graph.is.built,.we.can.convert.t
15900 68 65 20 67 72 61 70 68 73 20 74 6f 20 6e 65 74 77 6f 72 6b 78 20 6f 62 6a 65 63 74 73 20 75 73 he.graphs.to.networkx.objects.us
15920 69 6e 67 20 74 68 65 0a 23 20 72 65 6c 65 76 61 6e 74 20 6d 65 74 68 6f 64 2e 0a 64 65 6c 61 75 ing.the.#.relevant.method..delau
15940 6e 61 79 5f 67 72 61 70 68 20 3d 20 64 65 6c 61 75 6e 61 79 2e 74 6f 5f 6e 65 74 77 6f 72 6b 78 nay_graph.=.delaunay.to_networkx
15960 28 29 0a 0a 23 20 54 6f 20 70 6c 6f 74 20 77 69 74 68 20 6e 65 74 77 6f 72 6b 78 2c 20 77 65 20 ()..#.To.plot.with.networkx,.we.
15980 6e 65 65 64 20 74 6f 20 6d 65 72 67 65 20 74 68 65 20 6e 6f 64 65 73 20 62 61 63 6b 20 74 6f 0a need.to.merge.the.nodes.back.to.
159a0 23 20 74 68 65 69 72 20 70 6f 73 69 74 69 6f 6e 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 6c #.their.positions.in.order.to.pl
159c0 6f 74 20 69 6e 20 6e 65 74 77 6f 72 6b 78 0a 70 6f 73 69 74 69 6f 6e 73 20 3d 20 64 69 63 74 28 ot.in.networkx.positions.=.dict(
159e0 7a 69 70 28 64 65 6c 61 75 6e 61 79 5f 67 72 61 70 68 2e 6e 6f 64 65 73 2c 20 63 6f 6f 72 64 69 zip(delaunay_graph.nodes,.coordi
15a00 6e 61 74 65 73 29 29 0a 0a 23 20 4e 6f 77 2c 20 77 65 20 63 61 6e 20 70 6c 6f 74 20 77 69 74 68 nates))..#.Now,.we.can.plot.with
15a20 20 61 20 6e 69 63 65 20 62 61 73 65 6d 61 70 2e 0a 61 78 20 3d 20 63 65 6c 6c 73 2e 70 6c 6f 74 .a.nice.basemap..ax.=.cells.plot
15a40 28 66 61 63 65 63 6f 6c 6f 72 3d 22 6c 69 67 68 74 62 6c 75 65 22 2c 20 61 6c 70 68 61 3d 30 2e (facecolor="lightblue",.alpha=0.
15a60 35 30 2c 20 65 64 67 65 63 6f 6c 6f 72 3d 22 63 6f 72 6e 73 69 6c 6b 22 2c 20 6c 69 6e 65 77 69 50,.edgecolor="cornsilk",.linewi
15a80 64 74 68 3d 32 29 0a 61 64 64 5f 62 61 73 65 6d 61 70 28 61 78 29 0a 61 78 2e 61 78 69 73 28 22 dth=2).add_basemap(ax).ax.axis("
15aa0 6f 66 66 22 29 0a 6e 78 2e 64 72 61 77 28 0a 20 20 20 20 64 65 6c 61 75 6e 61 79 5f 67 72 61 70 off").nx.draw(.....delaunay_grap
15ac0 68 2c 0a 20 20 20 20 70 6f 73 69 74 69 6f 6e 73 2c 0a 20 20 20 20 61 78 3d 61 78 2c 0a 20 20 20 h,.....positions,.....ax=ax,....
15ae0 20 6e 6f 64 65 5f 73 69 7a 65 3d 32 2c 0a 20 20 20 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 6b 22 .node_size=2,.....node_color="k"
15b00 2c 0a 20 20 20 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 22 6b 22 2c 0a 20 20 20 20 61 6c 70 68 61 3d ,.....edge_color="k",.....alpha=
15b20 30 2e 38 2c 0a 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 29 7b 57 56 0.8,.).plt.show().PK........){WV
15b40 65 4d 6f 7e b9 08 00 00 b9 08 00 00 19 00 00 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f eMo~............geospatial/plot_
15b60 70 6f 69 6e 74 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d points.py""".===================
15b80 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 47 72 61 70 68 73 20 66 72 6f 6d 20 67 65 6f 67 72 61 70 68 69 ==========.Graphs.from.geographi
15ba0 63 20 70 6f 69 6e 74 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d c.points.=======================
15bc0 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 68 6f 77 20 74 ======..This.example.shows.how.t
15be0 6f 20 62 75 69 6c 64 20 61 20 67 72 61 70 68 20 66 72 6f 6d 20 61 20 73 65 74 20 6f 66 20 70 6f o.build.a.graph.from.a.set.of.po
15c00 69 6e 74 73 0a 75 73 69 6e 67 20 50 79 53 41 4c 20 61 6e 64 20 67 65 6f 70 61 6e 64 61 73 2e 20 ints.using.PySAL.and.geopandas..
15c20 49 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 2c 20 77 65 27 6c 6c 20 75 73 65 20 74 68 65 20 66 In.this.example,.we'll.use.the.f
15c40 61 6d 6f 75 73 0a 73 65 74 20 6f 66 20 63 68 6f 6c 65 72 61 20 63 61 73 65 73 20 61 74 20 74 68 amous.set.of.cholera.cases.at.th
15c60 65 20 42 72 6f 61 64 20 53 74 72 65 65 74 20 50 75 6d 70 2c 20 72 65 63 6f 72 64 65 64 20 62 79 e.Broad.Street.Pump,.recorded.by
15c80 20 4a 6f 68 6e 20 53 6e 6f 77 20 69 6e 20 31 38 35 33 2e 0a 54 68 65 20 6d 65 74 68 6f 64 73 20 .John.Snow.in.1853..The.methods.
15ca0 73 68 6f 77 6e 20 68 65 72 65 20 63 61 6e 20 61 6c 73 6f 20 77 6f 72 6b 20 64 69 72 65 63 74 6c shown.here.can.also.work.directl
15cc0 79 20 77 69 74 68 20 70 6f 6c 79 67 6f 6e 61 6c 20 64 61 74 61 20 75 73 69 6e 67 20 74 68 65 69 y.with.polygonal.data.using.thei
15ce0 72 0a 63 65 6e 74 72 6f 69 64 73 20 61 73 20 72 65 70 72 65 73 65 6e 74 61 74 69 76 65 20 70 6f r.centroids.as.representative.po
15d00 69 6e 74 73 2e 20 0a 22 22 22 0a 0a 66 72 6f 6d 20 6c 69 62 70 79 73 61 6c 20 69 6d 70 6f 72 74 ints..."""..from.libpysal.import
15d20 20 77 65 69 67 68 74 73 2c 20 65 78 61 6d 70 6c 65 73 0a 66 72 6f 6d 20 63 6f 6e 74 65 78 74 69 .weights,.examples.from.contexti
15d40 6c 79 20 69 6d 70 6f 72 74 20 61 64 64 5f 62 61 73 65 6d 61 70 0a 69 6d 70 6f 72 74 20 6d 61 74 ly.import.add_basemap.import.mat
15d60 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 plotlib.pyplot.as.plt.import.net
15d80 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 workx.as.nx.import.numpy.as.np.i
15da0 6d 70 6f 72 74 20 67 65 6f 70 61 6e 64 61 73 0a 0a 23 20 72 65 61 64 20 69 6e 20 65 78 61 6d 70 mport.geopandas..#.read.in.examp
15dc0 6c 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 67 65 6f 70 61 63 6b 61 67 65 20 66 69 6c 65 2e 20 le.data.from.a.geopackage.file..
15de0 47 65 6f 70 61 63 6b 61 67 65 73 0a 23 20 61 72 65 20 61 20 66 6f 72 6d 61 74 20 66 6f 72 20 73 Geopackages.#.are.a.format.for.s
15e00 74 6f 72 69 6e 67 20 67 65 6f 67 72 61 70 68 69 63 20 64 61 74 61 20 74 68 61 74 20 69 73 20 62 toring.geographic.data.that.is.b
15e20 61 63 6b 65 64 0a 23 20 62 79 20 73 71 6c 69 74 65 2e 20 67 65 6f 70 61 6e 64 61 73 20 72 65 61 acked.#.by.sqlite..geopandas.rea
15e40 64 73 20 64 61 74 61 20 72 65 6c 79 69 6e 67 20 6f 6e 20 74 68 65 20 66 69 6f 6e 61 20 70 61 63 ds.data.relying.on.the.fiona.pac
15e60 6b 61 67 65 2c 0a 23 20 70 72 6f 76 69 64 69 6e 67 20 61 20 68 69 67 68 2d 6c 65 76 65 6c 20 70 kage,.#.providing.a.high-level.p
15e80 61 6e 64 61 73 2d 73 74 79 6c 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 67 65 6f 67 72 61 70 andas-style.interface.to.geograp
15ea0 68 69 63 20 64 61 74 61 2e 0a 63 61 73 65 73 20 3d 20 67 65 6f 70 61 6e 64 61 73 2e 72 65 61 64 hic.data..cases.=.geopandas.read
15ec0 5f 66 69 6c 65 28 22 63 68 6f 6c 65 72 61 5f 63 61 73 65 73 2e 67 70 6b 67 22 29 0a 0a 23 20 63 _file("cholera_cases.gpkg")..#.c
15ee0 6f 6e 73 74 72 75 63 74 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 63 6f 6f 72 64 69 6e 61 74 65 onstruct.the.array.of.coordinate
15f00 73 20 66 6f 72 20 74 68 65 20 63 65 6e 74 72 6f 69 64 0a 63 6f 6f 72 64 69 6e 61 74 65 73 20 3d s.for.the.centroid.coordinates.=
15f20 20 6e 70 2e 63 6f 6c 75 6d 6e 5f 73 74 61 63 6b 28 28 63 61 73 65 73 2e 67 65 6f 6d 65 74 72 79 .np.column_stack((cases.geometry
15f40 2e 78 2c 20 63 61 73 65 73 2e 67 65 6f 6d 65 74 72 79 2e 79 29 29 0a 0a 23 20 63 6f 6e 73 74 72 .x,.cases.geometry.y))..#.constr
15f60 75 63 74 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 67 72 61 70 68 uct.two.different.kinds.of.graph
15f80 73 3a 0a 0a 23 23 20 33 2d 6e 65 61 72 65 73 74 20 6e 65 69 67 68 62 6f 72 20 67 72 61 70 68 2c s:..##.3-nearest.neighbor.graph,
15fa0 20 6d 65 61 6e 69 6e 67 20 74 68 61 74 20 70 6f 69 6e 74 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 .meaning.that.points.are.connect
15fc0 65 64 0a 23 23 20 74 6f 20 74 68 65 20 74 68 72 65 65 20 63 6c 6f 73 65 73 74 20 6f 74 68 65 72 ed.##.to.the.three.closest.other
15fe0 20 70 6f 69 6e 74 73 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 65 76 65 72 79 20 70 6f 69 6e 74 0a .points..This.means.every.point.
16000 23 23 20 77 69 6c 6c 20 68 61 76 65 20 65 78 61 63 74 6c 79 20 74 68 72 65 65 20 6e 65 69 67 68 ##.will.have.exactly.three.neigh
16020 62 6f 72 73 2e 0a 6b 6e 6e 33 20 3d 20 77 65 69 67 68 74 73 2e 4b 4e 4e 2e 66 72 6f 6d 5f 64 61 bors..knn3.=.weights.KNN.from_da
16040 74 61 66 72 61 6d 65 28 63 61 73 65 73 2c 20 6b 3d 33 29 0a 0a 23 23 20 54 68 65 20 35 30 2d 6d taframe(cases,.k=3)..##.The.50-m
16060 65 74 65 72 20 64 69 73 74 61 6e 63 65 20 62 61 6e 64 20 67 72 61 70 68 20 77 69 6c 6c 20 63 6f eter.distance.band.graph.will.co
16080 6e 6e 65 63 74 20 61 6c 6c 20 70 61 69 72 73 20 6f 66 20 70 6f 69 6e 74 73 0a 23 23 20 74 68 61 nnect.all.pairs.of.points.##.tha
160a0 74 20 61 72 65 20 77 69 74 68 69 6e 20 35 30 20 6d 65 74 65 72 73 20 66 72 6f 6d 20 6f 6e 65 20 t.are.within.50.meters.from.one.
160c0 61 6e 6f 74 68 65 72 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 70 6f 69 6e 74 73 0a another..This.means.that.points.
160e0 23 23 20 6d 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 73 20 6f 66 ##.may.have.different.numbers.of
16100 20 6e 65 69 67 68 62 6f 72 73 2e 0a 64 69 73 74 20 3d 20 77 65 69 67 68 74 73 2e 44 69 73 74 61 .neighbors..dist.=.weights.Dista
16120 6e 63 65 42 61 6e 64 2e 66 72 6f 6d 5f 61 72 72 61 79 28 63 6f 6f 72 64 69 6e 61 74 65 73 2c 20 nceBand.from_array(coordinates,.
16140 74 68 72 65 73 68 6f 6c 64 3d 35 30 29 0a 0a 23 20 54 68 65 6e 2c 20 77 65 20 63 61 6e 20 63 6f threshold=50)..#.Then,.we.can.co
16160 6e 76 65 72 74 20 74 68 65 20 67 72 61 70 68 20 74 6f 20 6e 65 74 77 6f 72 6b 78 20 6f 62 6a 65 nvert.the.graph.to.networkx.obje
16180 63 74 20 75 73 69 6e 67 20 74 68 65 0a 23 20 2e 74 6f 5f 6e 65 74 77 6f 72 6b 78 28 29 20 6d 65 ct.using.the.#..to_networkx().me
161a0 74 68 6f 64 2e 0a 6b 6e 6e 5f 67 72 61 70 68 20 3d 20 6b 6e 6e 33 2e 74 6f 5f 6e 65 74 77 6f 72 thod..knn_graph.=.knn3.to_networ
161c0 6b 78 28 29 0a 64 69 73 74 5f 67 72 61 70 68 20 3d 20 64 69 73 74 2e 74 6f 5f 6e 65 74 77 6f 72 kx().dist_graph.=.dist.to_networ
161e0 6b 78 28 29 0a 0a 23 20 54 6f 20 70 6c 6f 74 20 77 69 74 68 20 6e 65 74 77 6f 72 6b 78 2c 20 77 kx()..#.To.plot.with.networkx,.w
16200 65 20 6e 65 65 64 20 74 6f 20 6d 65 72 67 65 20 74 68 65 20 6e 6f 64 65 73 20 62 61 63 6b 20 74 e.need.to.merge.the.nodes.back.t
16220 6f 0a 23 20 74 68 65 69 72 20 70 6f 73 69 74 69 6f 6e 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 o.#.their.positions.in.order.to.
16240 70 6c 6f 74 20 69 6e 20 6e 65 74 77 6f 72 6b 78 0a 70 6f 73 69 74 69 6f 6e 73 20 3d 20 64 69 63 plot.in.networkx.positions.=.dic
16260 74 28 7a 69 70 28 6b 6e 6e 5f 67 72 61 70 68 2e 6e 6f 64 65 73 2c 20 63 6f 6f 72 64 69 6e 61 74 t(zip(knn_graph.nodes,.coordinat
16280 65 73 29 29 0a 0a 23 20 70 6c 6f 74 20 77 69 74 68 20 61 20 6e 69 63 65 20 62 61 73 65 6d 61 70 es))..#.plot.with.a.nice.basemap
162a0 0a 66 2c 20 61 78 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 31 2c 20 32 2c 20 66 69 67 73 .f,.ax.=.plt.subplots(1,.2,.figs
162c0 69 7a 65 3d 28 38 2c 20 34 29 29 0a 66 6f 72 20 69 2c 20 66 61 63 65 74 20 69 6e 20 65 6e 75 6d ize=(8,.4)).for.i,.facet.in.enum
162e0 65 72 61 74 65 28 61 78 29 3a 0a 20 20 20 20 63 61 73 65 73 2e 70 6c 6f 74 28 6d 61 72 6b 65 72 erate(ax):.....cases.plot(marker
16300 3d 22 2e 22 2c 20 63 6f 6c 6f 72 3d 22 6f 72 61 6e 67 65 72 65 64 22 2c 20 61 78 3d 66 61 63 65 =".",.color="orangered",.ax=face
16320 74 29 0a 20 20 20 20 61 64 64 5f 62 61 73 65 6d 61 70 28 66 61 63 65 74 29 0a 20 20 20 20 66 61 t).....add_basemap(facet).....fa
16340 63 65 74 2e 73 65 74 5f 74 69 74 6c 65 28 28 22 4b 4e 4e 2d 33 22 2c 20 22 35 30 2d 6d 65 74 65 cet.set_title(("KNN-3",."50-mete
16360 72 20 44 69 73 74 61 6e 63 65 20 42 61 6e 64 22 29 5b 69 5d 29 0a 20 20 20 20 66 61 63 65 74 2e r.Distance.Band")[i]).....facet.
16380 61 78 69 73 28 22 6f 66 66 22 29 0a 6e 78 2e 64 72 61 77 28 6b 6e 6e 5f 67 72 61 70 68 2c 20 70 axis("off").nx.draw(knn_graph,.p
163a0 6f 73 69 74 69 6f 6e 73 2c 20 61 78 3d 61 78 5b 30 5d 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 2c ositions,.ax=ax[0],.node_size=5,
163c0 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 62 22 29 0a 6e 78 2e 64 72 61 77 28 64 69 73 74 5f 67 72 .node_color="b").nx.draw(dist_gr
163e0 61 70 68 2c 20 70 6f 73 69 74 69 6f 6e 73 2c 20 61 78 3d 61 78 5b 31 5d 2c 20 6e 6f 64 65 5f 73 aph,.positions,.ax=ax[1],.node_s
16400 69 7a 65 3d 35 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 62 22 29 0a 70 6c 74 2e 73 68 6f 77 28 ize=5,.node_color="b").plt.show(
16420 29 0a 50 4b 03 04 14 00 00 00 00 00 08 7b 57 56 cf e3 c7 3b 4e 08 00 00 4e 08 00 00 13 00 00 00 ).PK.........{WV...;N...N.......
16440 67 72 61 70 68 2f 70 6c 6f 74 5f 72 6f 67 65 74 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 0a 52 6f 67 graph/plot_roget.py""".=====.Rog
16460 65 74 0a 3d 3d 3d 3d 3d 0a 0a 42 75 69 6c 64 20 61 20 64 69 72 65 63 74 65 64 20 67 72 61 70 68 et.=====..Build.a.directed.graph
16480 20 6f 66 20 31 30 32 32 20 63 61 74 65 67 6f 72 69 65 73 20 61 6e 64 20 35 30 37 35 20 63 72 6f .of.1022.categories.and.5075.cro
164a0 73 73 2d 72 65 66 65 72 65 6e 63 65 73 20 61 73 20 64 65 66 69 6e 65 64 0a 69 6e 20 74 68 65 20 ss-references.as.defined.in.the.
164c0 31 38 37 39 20 76 65 72 73 69 6f 6e 20 6f 66 20 52 6f 67 65 74 27 73 20 54 68 65 73 61 75 72 75 1879.version.of.Roget's.Thesauru
164e0 73 2e 20 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 s..This.example.is.described.in.
16500 53 65 63 74 69 6f 6e 0a 31 2e 32 20 6f 66 0a 0a 20 20 20 20 44 6f 6e 61 6c 64 20 45 2e 20 4b 6e Section.1.2.of......Donald.E..Kn
16520 75 74 68 2c 20 22 54 68 65 20 53 74 61 6e 66 6f 72 64 20 47 72 61 70 68 42 61 73 65 3a 20 41 20 uth,."The.Stanford.GraphBase:.A.
16540 50 6c 61 74 66 6f 72 6d 20 66 6f 72 20 43 6f 6d 62 69 6e 61 74 6f 72 69 61 6c 0a 20 20 20 20 43 Platform.for.Combinatorial.....C
16560 6f 6d 70 75 74 69 6e 67 22 2c 20 41 43 4d 20 50 72 65 73 73 2c 20 4e 65 77 20 59 6f 72 6b 2c 20 omputing",.ACM.Press,.New.York,.
16580 31 39 39 33 2e 0a 20 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2d 63 73 2d 66 61 63 75 6c 74 79 2e 1993......http://www-cs-faculty.
165a0 73 74 61 6e 66 6f 72 64 2e 65 64 75 2f 7e 6b 6e 75 74 68 2f 73 67 62 2e 68 74 6d 6c 0a 0a 4e 6f stanford.edu/~knuth/sgb.html..No
165c0 74 65 20 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68 65 20 35 30 37 35 20 63 72 6f 73 73 20 72 65 te.that.one.of.the.5075.cross.re
165e0 66 65 72 65 6e 63 65 73 20 69 73 20 61 20 73 65 6c 66 20 6c 6f 6f 70 20 79 65 74 20 69 74 20 69 ferences.is.a.self.loop.yet.it.i
16600 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 67 72 61 70 68 20 62 75 69 6c 74 20 68 65 s.included.in.the.graph.built.he
16620 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6e 65 74 77 6f 72 6b 78 re.because.the.standard.networkx
16640 20 60 44 69 47 72 61 70 68 60 20 63 6c 61 73 73 20 61 6c 6c 6f 77 73 20 73 65 6c 66 0a 6c 6f 6f .`DiGraph`.class.allows.self.loo
16660 70 73 2e 20 20 28 63 66 2e 20 34 30 30 70 75 6e 67 65 6e 63 79 3a 34 30 30 20 34 30 31 20 34 30 ps...(cf..400pungency:400.401.40
16680 33 20 34 30 35 29 2e 0a 0a 54 68 65 20 64 61 74 61 20 66 69 6c 65 20 63 61 6e 20 62 65 20 66 6f 3.405)...The.data.file.can.be.fo
166a0 75 6e 64 20 61 74 3a 0a 0a 2d 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6e 65 und.at:..-.https://github.com/ne
166c0 74 77 6f 72 6b 78 2f 6e 65 74 77 6f 72 6b 78 2f 62 6c 6f 62 2f 6d 61 69 6e 2f 65 78 61 6d 70 6c tworkx/networkx/blob/main/exampl
166e0 65 73 2f 67 72 61 70 68 2f 72 6f 67 65 74 5f 64 61 74 2e 74 78 74 2e 67 7a 0a 22 22 22 0a 0a 69 es/graph/roget_dat.txt.gz."""..i
16700 6d 70 6f 72 74 20 67 7a 69 70 0a 69 6d 70 6f 72 74 20 72 65 0a 69 6d 70 6f 72 74 20 73 79 73 0a mport.gzip.import.re.import.sys.
16720 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 .import.matplotlib.pyplot.as.plt
16740 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 0a 64 65 66 20 72 6f 67 .import.networkx.as.nx...def.rog
16760 65 74 5f 67 72 61 70 68 28 29 3a 0a 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 74 68 65 20 74 68 et_graph():....."""Return.the.th
16780 65 73 61 75 72 75 73 20 67 72 61 70 68 20 66 72 6f 6d 20 74 68 65 20 72 6f 67 65 74 2e 64 61 74 esaurus.graph.from.the.roget.dat
167a0 20 65 78 61 6d 70 6c 65 20 69 6e 0a 20 20 20 20 74 68 65 20 53 74 61 6e 66 6f 72 64 20 47 72 61 .example.in.....the.Stanford.Gra
167c0 70 68 20 42 61 73 65 2e 0a 20 20 20 20 22 22 22 0a 20 20 20 20 23 20 6f 70 65 6e 20 66 69 6c 65 ph.Base......""".....#.open.file
167e0 20 72 6f 67 65 74 5f 64 61 74 2e 74 78 74 2e 67 7a 0a 20 20 20 20 66 68 20 3d 20 67 7a 69 70 2e .roget_dat.txt.gz.....fh.=.gzip.
16800 6f 70 65 6e 28 22 72 6f 67 65 74 5f 64 61 74 2e 74 78 74 2e 67 7a 22 2c 20 22 72 22 29 0a 0a 20 open("roget_dat.txt.gz",."r")...
16820 20 20 20 47 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 0a 0a 20 20 20 20 66 6f 72 20 6c 69 6e ...G.=.nx.DiGraph()......for.lin
16840 65 20 69 6e 20 66 68 2e 72 65 61 64 6c 69 6e 65 73 28 29 3a 0a 20 20 20 20 20 20 20 20 6c 69 6e e.in.fh.readlines():.........lin
16860 65 20 3d 20 6c 69 6e 65 2e 64 65 63 6f 64 65 28 29 0a 20 20 20 20 20 20 20 20 69 66 20 6c 69 6e e.=.line.decode().........if.lin
16880 65 2e 73 74 61 72 74 73 77 69 74 68 28 22 2a 22 29 3a 20 20 23 20 73 6b 69 70 20 63 6f 6d 6d 65 e.startswith("*"):..#.skip.comme
168a0 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20 nts.............continue........
168c0 20 69 66 20 6c 69 6e 65 2e 73 74 61 72 74 73 77 69 74 68 28 22 20 22 29 3a 20 20 23 20 74 68 69 .if.line.startswith("."):..#.thi
168e0 73 20 69 73 20 61 20 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 6c 69 6e 65 2c 20 61 70 70 65 6e 64 s.is.a.continuation.line,.append
16900 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65 20 3d 20 6f 6c 64 6c 69 6e 65 20 2b 20 6c 69 .............line.=.oldline.+.li
16920 6e 65 0a 20 20 20 20 20 20 20 20 69 66 20 6c 69 6e 65 2e 65 6e 64 73 77 69 74 68 28 22 5c 5c 5c ne.........if.line.endswith("\\\
16940 6e 22 29 3a 20 20 23 20 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 6c 69 6e 65 2c 20 62 75 66 66 65 n"):..#.continuation.line,.buffe
16960 72 2c 20 67 6f 74 6f 20 6e 65 78 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 6c 64 6c 69 6e 65 r,.goto.next.............oldline
16980 20 3d 20 6c 69 6e 65 2e 73 74 72 69 70 28 22 5c 5c 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 .=.line.strip("\\\n")...........
169a0 20 20 63 6f 6e 74 69 6e 75 65 0a 0a 20 20 20 20 20 20 20 20 28 68 65 61 64 6e 61 6d 65 2c 20 74 ..continue..........(headname,.t
169c0 61 69 6c 73 29 20 3d 20 6c 69 6e 65 2e 73 70 6c 69 74 28 22 3a 22 29 0a 0a 20 20 20 20 20 20 20 ails).=.line.split(":").........
169e0 20 23 20 68 65 61 64 0a 20 20 20 20 20 20 20 20 6e 75 6d 66 69 6e 64 20 3d 20 72 65 2e 63 6f 6d .#.head.........numfind.=.re.com
16a00 70 69 6c 65 28 72 22 5e 5c 64 2b 22 29 20 20 23 20 72 65 20 74 6f 20 66 69 6e 64 20 74 68 65 20 pile(r"^\d+")..#.re.to.find.the.
16a20 6e 75 6d 62 65 72 20 6f 66 20 74 68 69 73 20 77 6f 72 64 0a 20 20 20 20 20 20 20 20 68 65 61 64 number.of.this.word.........head
16a40 20 3d 20 6e 75 6d 66 69 6e 64 2e 66 69 6e 64 61 6c 6c 28 68 65 61 64 6e 61 6d 65 29 5b 30 5d 20 .=.numfind.findall(headname)[0].
16a60 20 23 20 67 65 74 20 74 68 65 20 6e 75 6d 62 65 72 0a 0a 20 20 20 20 20 20 20 20 47 2e 61 64 64 .#.get.the.number..........G.add
16a80 5f 6e 6f 64 65 28 68 65 61 64 29 0a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 74 61 69 6c 20 69 6e _node(head)..........for.tail.in
16aa0 20 74 61 69 6c 73 2e 73 70 6c 69 74 28 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 68 .tails.split():.............if.h
16ac0 65 61 64 20 3d 3d 20 74 61 69 6c 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 ead.==.tail:.................pri
16ae0 6e 74 28 22 73 6b 69 70 70 69 6e 67 20 73 65 6c 66 20 6c 6f 6f 70 22 2c 20 68 65 61 64 2c 20 74 nt("skipping.self.loop",.head,.t
16b00 61 69 6c 2c 20 66 69 6c 65 3d 73 79 73 2e 73 74 64 65 72 72 29 0a 20 20 20 20 20 20 20 20 20 20 ail,.file=sys.stderr)...........
16b20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 68 65 61 64 2c 20 74 61 69 6c 29 0a 0a 20 20 20 20 72 65 ..G.add_edge(head,.tail)......re
16b40 74 75 72 6e 20 47 0a 0a 0a 47 20 3d 20 72 6f 67 65 74 5f 67 72 61 70 68 28 29 0a 70 72 69 6e 74 turn.G...G.=.roget_graph().print
16b60 28 22 4c 6f 61 64 65 64 20 72 6f 67 65 74 5f 64 61 74 2e 74 78 74 20 63 6f 6e 74 61 69 6e 69 6e ("Loaded.roget_dat.txt.containin
16b80 67 20 31 30 32 32 20 63 61 74 65 67 6f 72 69 65 73 2e 22 29 0a 70 72 69 6e 74 28 47 29 0a 55 47 g.1022.categories.").print(G).UG
16ba0 20 3d 20 47 2e 74 6f 5f 75 6e 64 69 72 65 63 74 65 64 28 29 0a 70 72 69 6e 74 28 6e 78 2e 6e 75 .=.G.to_undirected().print(nx.nu
16bc0 6d 62 65 72 5f 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 55 47 29 2c 20 22 mber_connected_components(UG),."
16be0 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 22 29 0a 0a 6f 70 74 69 6f 6e 73 20 connected.components")..options.
16c00 3d 20 7b 0a 20 20 20 20 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 3a 20 22 62 6c 61 63 6b 22 2c 0a 20 =.{....."node_color":."black",..
16c20 20 20 20 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 31 2c 0a 20 20 20 20 22 65 64 67 65 5f 63 6f 6c ..."node_size":.1,....."edge_col
16c40 6f 72 22 3a 20 22 67 72 61 79 22 2c 0a 20 20 20 20 22 6c 69 6e 65 77 69 64 74 68 73 22 3a 20 30 or":."gray",....."linewidths":.0
16c60 2c 0a 20 20 20 20 22 77 69 64 74 68 22 3a 20 30 2e 31 2c 0a 7d 0a 6e 78 2e 64 72 61 77 5f 63 69 ,....."width":.0.1,.}.nx.draw_ci
16c80 72 63 75 6c 61 72 28 55 47 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 rcular(UG,.**options).plt.show()
16ca0 0a 50 4b 03 04 14 00 00 00 00 00 09 7b 57 56 3c 44 85 f0 79 0a 00 00 79 0a 00 00 13 00 00 00 67 .PK.........{WV<D..y...y.......g
16cc0 72 61 70 68 2f 70 6c 6f 74 5f 77 6f 72 64 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d raph/plot_words.py""".==========
16ce0 3d 3d 3d 3d 3d 3d 3d 3d 0a 57 6f 72 64 73 2f 4c 61 64 64 65 72 20 47 72 61 70 68 0a 3d 3d 3d 3d ========.Words/Ladder.Graph.====
16d00 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 47 65 6e 65 72 61 74 65 20 20 61 6e 20 75 6e 64 ==============..Generate..an.und
16d20 69 72 65 63 74 65 64 20 67 72 61 70 68 20 6f 76 65 72 20 74 68 65 20 35 37 35 37 20 35 2d 6c 65 irected.graph.over.the.5757.5-le
16d40 74 74 65 72 20 77 6f 72 64 73 20 69 6e 20 74 68 65 20 64 61 74 61 66 69 6c 65 0a 60 77 6f 72 64 tter.words.in.the.datafile.`word
16d60 73 5f 64 61 74 2e 74 78 74 2e 67 7a 60 2e 20 20 54 77 6f 20 77 6f 72 64 73 20 61 72 65 20 63 6f s_dat.txt.gz`...Two.words.are.co
16d80 6e 6e 65 63 74 65 64 20 62 79 20 61 6e 20 65 64 67 65 20 69 66 20 74 68 65 79 20 64 69 66 66 65 nnected.by.an.edge.if.they.diffe
16da0 72 20 69 6e 20 6f 6e 65 0a 6c 65 74 74 65 72 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 31 34 r.in.one.letter,.resulting.in.14
16dc0 2c 31 33 35 20 65 64 67 65 73 2e 20 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 63 ,135.edges..This.example.is.desc
16de0 72 69 62 65 64 20 69 6e 20 53 65 63 74 69 6f 6e 20 31 2e 31 20 6f 66 0a 0a 20 20 20 20 44 6f 6e ribed.in.Section.1.1.of......Don
16e00 61 6c 64 20 45 2e 20 4b 6e 75 74 68 2c 20 22 54 68 65 20 53 74 61 6e 66 6f 72 64 20 47 72 61 70 ald.E..Knuth,."The.Stanford.Grap
16e20 68 42 61 73 65 3a 20 41 20 50 6c 61 74 66 6f 72 6d 20 66 6f 72 20 43 6f 6d 62 69 6e 61 74 6f 72 hBase:.A.Platform.for.Combinator
16e40 69 61 6c 0a 20 20 20 20 43 6f 6d 70 75 74 69 6e 67 22 2c 20 41 43 4d 20 50 72 65 73 73 2c 20 4e ial.....Computing",.ACM.Press,.N
16e60 65 77 20 59 6f 72 6b 2c 20 31 39 39 33 2e 0a 20 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2d 63 73 ew.York,.1993......http://www-cs
16e80 2d 66 61 63 75 6c 74 79 2e 73 74 61 6e 66 6f 72 64 2e 65 64 75 2f 7e 6b 6e 75 74 68 2f 73 67 62 -faculty.stanford.edu/~knuth/sgb
16ea0 2e 68 74 6d 6c 0a 0a 54 68 65 20 64 61 74 61 20 66 69 6c 65 20 63 61 6e 20 62 65 20 66 6f 75 6e .html..The.data.file.can.be.foun
16ec0 64 20 61 74 3a 0a 0a 2d 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6e 65 74 77 d.at:..-.https://github.com/netw
16ee0 6f 72 6b 78 2f 6e 65 74 77 6f 72 6b 78 2f 62 6c 6f 62 2f 6d 61 69 6e 2f 65 78 61 6d 70 6c 65 73 orkx/networkx/blob/main/examples
16f00 2f 67 72 61 70 68 2f 77 6f 72 64 73 5f 64 61 74 2e 74 78 74 2e 67 7a 0a 22 22 22 0a 0a 69 6d 70 /graph/words_dat.txt.gz."""..imp
16f20 6f 72 74 20 67 7a 69 70 0a 66 72 6f 6d 20 73 74 72 69 6e 67 20 69 6d 70 6f 72 74 20 61 73 63 69 ort.gzip.from.string.import.asci
16f40 69 5f 6c 6f 77 65 72 63 61 73 65 20 61 73 20 6c 6f 77 65 72 63 61 73 65 0a 0a 69 6d 70 6f 72 74 i_lowercase.as.lowercase..import
16f60 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 .matplotlib.pyplot.as.plt.import
16f80 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 0a 64 65 66 20 67 65 6e 65 72 61 74 65 5f 67 .networkx.as.nx...def.generate_g
16fa0 72 61 70 68 28 77 6f 72 64 73 29 3a 0a 20 20 20 20 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 6e 61 raph(words):.....G.=.nx.Graph(na
16fc0 6d 65 3d 22 77 6f 72 64 73 22 29 0a 20 20 20 20 6c 6f 6f 6b 75 70 20 3d 20 7b 63 3a 20 6c 6f 77 me="words").....lookup.=.{c:.low
16fe0 65 72 63 61 73 65 2e 69 6e 64 65 78 28 63 29 20 66 6f 72 20 63 20 69 6e 20 6c 6f 77 65 72 63 61 ercase.index(c).for.c.in.lowerca
17000 73 65 7d 0a 0a 20 20 20 20 64 65 66 20 65 64 69 74 5f 64 69 73 74 61 6e 63 65 5f 6f 6e 65 28 77 se}......def.edit_distance_one(w
17020 6f 72 64 29 3a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e ord):.........for.i.in.range(len
17040 28 77 6f 72 64 29 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 66 74 2c 20 63 2c 20 72 69 (word)):.............left,.c,.ri
17060 67 68 74 20 3d 20 77 6f 72 64 5b 30 3a 69 5d 2c 20 77 6f 72 64 5b 69 5d 2c 20 77 6f 72 64 5b 69 ght.=.word[0:i],.word[i],.word[i
17080 20 2b 20 31 20 3a 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a 20 3d 20 6c 6f 6f 6b 75 70 5b 63 .+.1.:].............j.=.lookup[c
170a0 5d 20 20 23 20 6c 6f 77 65 72 63 61 73 65 2e 69 6e 64 65 78 28 63 29 0a 20 20 20 20 20 20 20 20 ]..#.lowercase.index(c).........
170c0 20 20 20 20 66 6f 72 20 63 63 20 69 6e 20 6c 6f 77 65 72 63 61 73 65 5b 6a 20 2b 20 31 20 3a 5d ....for.cc.in.lowercase[j.+.1.:]
170e0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 79 69 65 6c 64 20 6c 65 66 74 20 2b 20 63 :.................yield.left.+.c
17100 63 20 2b 20 72 69 67 68 74 0a 0a 20 20 20 20 63 61 6e 64 67 65 6e 20 3d 20 28 0a 20 20 20 20 20 c.+.right......candgen.=.(......
17120 20 20 20 28 77 6f 72 64 2c 20 63 61 6e 64 29 0a 20 20 20 20 20 20 20 20 66 6f 72 20 77 6f 72 64 ...(word,.cand).........for.word
17140 20 69 6e 20 73 6f 72 74 65 64 28 77 6f 72 64 73 29 0a 20 20 20 20 20 20 20 20 66 6f 72 20 63 61 .in.sorted(words).........for.ca
17160 6e 64 20 69 6e 20 65 64 69 74 5f 64 69 73 74 61 6e 63 65 5f 6f 6e 65 28 77 6f 72 64 29 0a 20 20 nd.in.edit_distance_one(word)...
17180 20 20 20 20 20 20 69 66 20 63 61 6e 64 20 69 6e 20 77 6f 72 64 73 0a 20 20 20 20 29 0a 20 20 20 ......if.cand.in.words.....)....
171a0 20 47 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 77 6f 72 64 73 29 0a 20 20 20 20 66 6f 72 .G.add_nodes_from(words).....for
171c0 20 77 6f 72 64 2c 20 63 61 6e 64 20 69 6e 20 63 61 6e 64 67 65 6e 3a 0a 20 20 20 20 20 20 20 20 .word,.cand.in.candgen:.........
171e0 47 2e 61 64 64 5f 65 64 67 65 28 77 6f 72 64 2c 20 63 61 6e 64 29 0a 20 20 20 20 72 65 74 75 72 G.add_edge(word,.cand).....retur
17200 6e 20 47 0a 0a 0a 64 65 66 20 77 6f 72 64 73 5f 67 72 61 70 68 28 29 3a 0a 20 20 20 20 22 22 22 n.G...def.words_graph():....."""
17220 52 65 74 75 72 6e 20 74 68 65 20 77 6f 72 64 73 20 65 78 61 6d 70 6c 65 20 67 72 61 70 68 20 66 Return.the.words.example.graph.f
17240 72 6f 6d 20 74 68 65 20 53 74 61 6e 66 6f 72 64 20 47 72 61 70 68 42 61 73 65 22 22 22 0a 20 20 rom.the.Stanford.GraphBase"""...
17260 20 20 66 68 20 3d 20 67 7a 69 70 2e 6f 70 65 6e 28 22 77 6f 72 64 73 5f 64 61 74 2e 74 78 74 2e ..fh.=.gzip.open("words_dat.txt.
17280 67 7a 22 2c 20 22 72 22 29 0a 20 20 20 20 77 6f 72 64 73 20 3d 20 73 65 74 28 29 0a 20 20 20 20 gz",."r").....words.=.set().....
172a0 66 6f 72 20 6c 69 6e 65 20 69 6e 20 66 68 2e 72 65 61 64 6c 69 6e 65 73 28 29 3a 0a 20 20 20 20 for.line.in.fh.readlines():.....
172c0 20 20 20 20 6c 69 6e 65 20 3d 20 6c 69 6e 65 2e 64 65 63 6f 64 65 28 29 0a 20 20 20 20 20 20 20 ....line.=.line.decode()........
172e0 20 69 66 20 6c 69 6e 65 2e 73 74 61 72 74 73 77 69 74 68 28 22 2a 22 29 3a 0a 20 20 20 20 20 20 .if.line.startswith("*"):.......
17300 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20 77 20 3d 20 73 74 72 28 6c ......continue.........w.=.str(l
17320 69 6e 65 5b 30 3a 35 5d 29 0a 20 20 20 20 20 20 20 20 77 6f 72 64 73 2e 61 64 64 28 77 29 0a 20 ine[0:5]).........words.add(w)..
17340 20 20 20 72 65 74 75 72 6e 20 67 65 6e 65 72 61 74 65 5f 67 72 61 70 68 28 77 6f 72 64 73 29 0a ...return.generate_graph(words).
17360 0a 0a 47 20 3d 20 77 6f 72 64 73 5f 67 72 61 70 68 28 29 0a 70 72 69 6e 74 28 22 4c 6f 61 64 65 ..G.=.words_graph().print("Loade
17380 64 20 77 6f 72 64 73 5f 64 61 74 2e 74 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 35 37 35 37 20 d.words_dat.txt.containing.5757.
173a0 66 69 76 65 2d 6c 65 74 74 65 72 20 45 6e 67 6c 69 73 68 20 77 6f 72 64 73 2e 22 29 0a 70 72 69 five-letter.English.words.").pri
173c0 6e 74 28 22 54 77 6f 20 77 6f 72 64 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 66 20 74 nt("Two.words.are.connected.if.t
173e0 68 65 79 20 64 69 66 66 65 72 20 69 6e 20 6f 6e 65 20 6c 65 74 74 65 72 2e 22 29 0a 70 72 69 6e hey.differ.in.one.letter.").prin
17400 74 28 47 29 0a 70 72 69 6e 74 28 66 22 7b 6e 78 2e 6e 75 6d 62 65 72 5f 63 6f 6e 6e 65 63 74 65 t(G).print(f"{nx.number_connecte
17420 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 7d 20 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f d_components(G)}.connected.compo
17440 6e 65 6e 74 73 22 29 0a 0a 66 6f 72 20 73 6f 75 72 63 65 2c 20 74 61 72 67 65 74 20 69 6e 20 5b nents")..for.source,.target.in.[
17460 28 22 63 68 61 6f 73 22 2c 20 22 6f 72 64 65 72 22 29 2c 20 28 22 6e 6f 64 65 73 22 2c 20 22 67 ("chaos",."order"),.("nodes",."g
17480 72 61 70 68 22 29 2c 20 28 22 70 6f 75 6e 64 22 2c 20 22 6d 61 72 6b 73 22 29 5d 3a 0a 20 20 20 raph"),.("pound",."marks")]:....
174a0 20 70 72 69 6e 74 28 66 22 53 68 6f 72 74 65 73 74 20 70 61 74 68 20 62 65 74 77 65 65 6e 20 7b .print(f"Shortest.path.between.{
174c0 73 6f 75 72 63 65 7d 20 61 6e 64 20 7b 74 61 72 67 65 74 7d 20 69 73 22 29 0a 20 20 20 20 74 72 source}.and.{target}.is").....tr
174e0 79 3a 0a 20 20 20 20 20 20 20 20 73 68 6f 72 74 65 73 74 5f 70 61 74 68 20 3d 20 6e 78 2e 73 68 y:.........shortest_path.=.nx.sh
17500 6f 72 74 65 73 74 5f 70 61 74 68 28 47 2c 20 73 6f 75 72 63 65 2c 20 74 61 72 67 65 74 29 0a 20 ortest_path(G,.source,.target)..
17520 20 20 20 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 73 68 6f 72 74 65 73 74 5f 70 61 74 68 3a 0a 20 .......for.n.in.shortest_path:..
17540 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 28 6e 29 0a 20 20 20 20 65 78 63 65 70 74 20 6e ...........print(n).....except.n
17560 78 2e 4e 65 74 77 6f 72 6b 58 4e 6f 50 61 74 68 3a 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 28 x.NetworkXNoPath:.........print(
17580 22 4e 6f 6e 65 22 29 0a 0a 0a 23 20 64 72 61 77 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 "None")...#.draw.a.subset.of.the
175a0 20 67 72 61 70 68 0a 62 6f 75 6e 64 61 72 79 20 3d 20 6c 69 73 74 28 6e 78 2e 6e 6f 64 65 5f 62 .graph.boundary.=.list(nx.node_b
175c0 6f 75 6e 64 61 72 79 28 47 2c 20 73 68 6f 72 74 65 73 74 5f 70 61 74 68 29 29 0a 47 2e 61 64 64 oundary(G,.shortest_path)).G.add
175e0 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 73 68 6f 72 74 65 73 74 5f 70 61 74 68 2c 20 63 6f 6c 6f 72 _nodes_from(shortest_path,.color
17600 3d 22 72 65 64 22 29 0a 47 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 62 6f 75 6e 64 61 72 ="red").G.add_nodes_from(boundar
17620 79 2c 20 63 6f 6c 6f 72 3d 22 62 6c 75 65 22 29 0a 48 20 3d 20 47 2e 73 75 62 67 72 61 70 68 28 y,.color="blue").H.=.G.subgraph(
17640 73 68 6f 72 74 65 73 74 5f 70 61 74 68 20 2b 20 62 6f 75 6e 64 61 72 79 29 0a 63 6f 6c 6f 72 73 shortest_path.+.boundary).colors
17660 20 3d 20 6e 78 2e 67 65 74 5f 6e 6f 64 65 5f 61 74 74 72 69 62 75 74 65 73 28 48 2c 20 22 63 6f .=.nx.get_node_attributes(H,."co
17680 6c 6f 72 22 29 0a 6f 70 74 69 6f 6e 73 20 3d 20 7b 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 31 35 lor").options.=.{"node_size":.15
176a0 30 30 2c 20 22 61 6c 70 68 61 22 3a 20 30 2e 33 2c 20 22 6e 6f 64 65 5f 63 6f 6c 6f 72 22 3a 20 00,."alpha":.0.3,."node_color":.
176c0 63 6f 6c 6f 72 73 2e 76 61 6c 75 65 73 28 29 7d 0a 70 6f 73 20 3d 20 6e 78 2e 6b 61 6d 61 64 61 colors.values()}.pos.=.nx.kamada
176e0 5f 6b 61 77 61 69 5f 6c 61 79 6f 75 74 28 48 29 0a 6e 78 2e 64 72 61 77 28 48 2c 20 70 6f 73 2c _kawai_layout(H).nx.draw(H,.pos,
17700 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6c 61 62 .**options).nx.draw_networkx_lab
17720 65 6c 73 28 48 2c 20 70 6f 73 2c 20 66 6f 6e 74 5f 77 65 69 67 68 74 3d 22 62 6f 6c 64 22 29 0a els(H,.pos,.font_weight="bold").
17740 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 07 7b 57 56 0f 9f 6b e9 49 03 00 plt.show().PK.........{WV..k.I..
17760 00 49 03 00 00 19 00 00 00 67 72 61 70 68 2f 70 6c 6f 74 5f 65 72 64 6f 73 5f 72 65 6e 79 69 2e .I.......graph/plot_erdos_renyi.
17780 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 45 72 64 6f 73 20 52 65 6e 79 69 0a 3d 3d py""".===========.Erdos.Renyi.==
177a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 43 72 65 61 74 65 20 61 6e 20 47 7b 6e 2c 6d 7d 20 72 61 6e 64 =========..Create.an.G{n,m}.rand
177c0 6f 6d 20 67 72 61 70 68 20 77 69 74 68 20 6e 20 6e 6f 64 65 73 20 61 6e 64 20 6d 20 65 64 67 65 om.graph.with.n.nodes.and.m.edge
177e0 73 0a 61 6e 64 20 72 65 70 6f 72 74 20 73 6f 6d 65 20 70 72 6f 70 65 72 74 69 65 73 2e 0a 0a 54 s.and.report.some.properties...T
17800 68 69 73 20 67 72 61 70 68 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 his.graph.is.sometimes.called.th
17820 65 20 45 72 64 c5 91 73 2d 52 c3 a9 6e 79 69 20 67 72 61 70 68 0a 62 75 74 20 69 73 20 64 69 66 e.Erd..s-R..nyi.graph.but.is.dif
17840 66 65 72 65 6e 74 20 66 72 6f 6d 20 47 7b 6e 2c 70 7d 20 6f 72 20 62 69 6e 6f 6d 69 61 6c 5f 67 ferent.from.G{n,p}.or.binomial_g
17860 72 61 70 68 20 77 68 69 63 68 20 69 73 20 61 6c 73 6f 0a 73 6f 6d 65 74 69 6d 65 73 20 63 61 6c raph.which.is.also.sometimes.cal
17880 6c 65 64 20 74 68 65 20 45 72 64 c5 91 73 2d 52 c3 a9 6e 79 69 20 67 72 61 70 68 2e 0a 22 22 22 led.the.Erd..s-R..nyi.graph.."""
178a0 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c ..import.matplotlib.pyplot.as.pl
178c0 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 6e 20 3d 20 31 30 20 t.import.networkx.as.nx..n.=.10.
178e0 20 23 20 31 30 20 6e 6f 64 65 73 0a 6d 20 3d 20 32 30 20 20 23 20 32 30 20 65 64 67 65 73 0a 73 .#.10.nodes.m.=.20..#.20.edges.s
17900 65 65 64 20 3d 20 32 30 31 36 30 20 20 23 20 73 65 65 64 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 eed.=.20160..#.seed.random.numbe
17920 72 20 67 65 6e 65 72 61 74 6f 72 73 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 r.generators.for.reproducibility
17940 0a 0a 23 20 55 73 65 20 73 65 65 64 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 ..#.Use.seed.for.reproducibility
17960 0a 47 20 3d 20 6e 78 2e 67 6e 6d 5f 72 61 6e 64 6f 6d 5f 67 72 61 70 68 28 6e 2c 20 6d 2c 20 73 .G.=.nx.gnm_random_graph(n,.m,.s
17980 65 65 64 3d 73 65 65 64 29 0a 0a 23 20 73 6f 6d 65 20 70 72 6f 70 65 72 74 69 65 73 0a 70 72 69 eed=seed)..#.some.properties.pri
179a0 6e 74 28 22 6e 6f 64 65 20 64 65 67 72 65 65 20 63 6c 75 73 74 65 72 69 6e 67 22 29 0a 66 6f 72 nt("node.degree.clustering").for
179c0 20 76 20 69 6e 20 6e 78 2e 6e 6f 64 65 73 28 47 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b .v.in.nx.nodes(G):.....print(f"{
179e0 76 7d 20 7b 6e 78 2e 64 65 67 72 65 65 28 47 2c 20 76 29 7d 20 7b 6e 78 2e 63 6c 75 73 74 65 72 v}.{nx.degree(G,.v)}.{nx.cluster
17a00 69 6e 67 28 47 2c 20 76 29 7d 22 29 0a 0a 70 72 69 6e 74 28 29 0a 70 72 69 6e 74 28 22 74 68 65 ing(G,.v)}")..print().print("the
17a20 20 61 64 6a 61 63 65 6e 63 79 20 6c 69 73 74 22 29 0a 66 6f 72 20 6c 69 6e 65 20 69 6e 20 6e 78 .adjacency.list").for.line.in.nx
17a40 2e 67 65 6e 65 72 61 74 65 5f 61 64 6a 6c 69 73 74 28 47 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 .generate_adjlist(G):.....print(
17a60 6c 69 6e 65 29 0a 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c line)..pos.=.nx.spring_layout(G,
17a80 20 73 65 65 64 3d 73 65 65 64 29 20 20 23 20 53 65 65 64 20 66 6f 72 20 72 65 70 72 6f 64 75 63 .seed=seed)..#.Seed.for.reproduc
17aa0 69 62 6c 65 20 6c 61 79 6f 75 74 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 3d 70 6f 73 29 0a ible.layout.nx.draw(G,.pos=pos).
17ac0 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 08 7b 57 56 61 9a b2 f5 96 0b 00 plt.show().PK.........{WVa......
17ae0 00 96 0b 00 00 18 00 00 00 67 72 61 70 68 2f 70 6c 6f 74 5f 6d 6f 72 73 65 5f 74 72 69 65 2e 70 .........graph/plot_morse_trie.p
17b00 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4d 6f 72 73 65 20 54 72 69 65 0a 3d 3d 3d 3d 3d y""".==========.Morse.Trie.=====
17b20 3d 3d 3d 3d 3d 0a 0a 41 20 70 72 65 66 69 78 20 74 72 65 65 20 28 61 6b 61 20 61 20 22 74 72 69 =====..A.prefix.tree.(aka.a."tri
17b40 65 22 29 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 4d 6f 72 73 65 20 65 6e 63 6f 64 e").representing.the.Morse.encod
17b60 69 6e 67 20 6f 66 20 74 68 65 20 61 6c 70 68 61 62 65 74 2e 0a 41 20 6c 65 74 74 65 72 20 63 61 ing.of.the.alphabet..A.letter.ca
17b80 6e 20 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 74 72 61 63 69 6e 67 20 74 68 65 20 70 61 74 68 n.be.encoded.by.tracing.the.path
17ba0 20 66 72 6f 6d 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6e 6f 64 65 20 69 6e 20 .from.the.corresponding.node.in.
17bc0 74 68 65 0a 74 72 65 65 20 74 6f 20 74 68 65 20 72 6f 6f 74 20 6e 6f 64 65 2c 20 72 65 76 65 72 the.tree.to.the.root.node,.rever
17be0 73 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 73 20 65 6e sing.the.order.of.the.symbols.en
17c00 63 6f 75 6e 74 65 72 65 64 20 61 6c 6f 6e 67 0a 74 68 65 20 70 61 74 68 2e 0a 22 22 22 0a 69 6d countered.along.the.path..""".im
17c20 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 23 20 55 6e 69 63 6f 64 65 20 63 port.networkx.as.nx..#.Unicode.c
17c40 68 61 72 61 63 74 65 72 73 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 64 6f 74 73 2f haracters.to.represent.the.dots/
17c60 64 61 73 68 65 73 20 28 6f 72 20 64 69 74 73 2f 64 61 68 73 29 20 6f 66 20 4d 6f 72 73 65 20 63 dashes.(or.dits/dahs).of.Morse.c
17c80 6f 64 65 0a 64 6f 74 20 3d 20 22 e2 80 a2 22 0a 64 61 73 68 20 3d 20 22 e2 80 94 22 0a 0a 23 20 ode.dot.=."...".dash.=."..."..#.
17ca0 53 74 61 72 74 20 77 69 74 68 20 74 68 65 20 64 69 72 65 63 74 20 6d 61 70 70 69 6e 67 20 6f 66 Start.with.the.direct.mapping.of
17cc0 20 6c 65 74 74 65 72 20 2d 3e 20 63 6f 64 65 0a 6d 6f 72 73 65 5f 64 69 72 65 63 74 5f 6d 61 70 .letter.->.code.morse_direct_map
17ce0 70 69 6e 67 20 3d 20 7b 0a 20 20 20 20 22 61 22 3a 20 64 6f 74 20 2b 20 64 61 73 68 2c 0a 20 20 ping.=.{....."a":.dot.+.dash,...
17d00 20 20 22 62 22 3a 20 64 61 73 68 20 2b 20 64 6f 74 20 2a 20 33 2c 0a 20 20 20 20 22 63 22 3a 20 .."b":.dash.+.dot.*.3,....."c":.
17d20 64 61 73 68 20 2b 20 64 6f 74 20 2b 20 64 61 73 68 20 2b 20 64 6f 74 2c 0a 20 20 20 20 22 64 22 dash.+.dot.+.dash.+.dot,....."d"
17d40 3a 20 64 61 73 68 20 2b 20 64 6f 74 20 2a 20 32 2c 0a 20 20 20 20 22 65 22 3a 20 64 6f 74 2c 0a :.dash.+.dot.*.2,....."e":.dot,.
17d60 20 20 20 20 22 66 22 3a 20 64 6f 74 20 2a 20 32 20 2b 20 64 61 73 68 20 2b 20 64 6f 74 2c 0a 20 ...."f":.dot.*.2.+.dash.+.dot,..
17d80 20 20 20 22 67 22 3a 20 64 61 73 68 20 2a 20 32 20 2b 20 64 6f 74 2c 0a 20 20 20 20 22 68 22 3a ..."g":.dash.*.2.+.dot,....."h":
17da0 20 64 6f 74 20 2a 20 34 2c 0a 20 20 20 20 22 69 22 3a 20 64 6f 74 20 2a 20 32 2c 0a 20 20 20 20 .dot.*.4,....."i":.dot.*.2,.....
17dc0 22 6a 22 3a 20 64 6f 74 20 2b 20 64 61 73 68 20 2a 20 33 2c 0a 20 20 20 20 22 6b 22 3a 20 64 61 "j":.dot.+.dash.*.3,....."k":.da
17de0 73 68 20 2b 20 64 6f 74 20 2b 20 64 61 73 68 2c 0a 20 20 20 20 22 6c 22 3a 20 64 6f 74 20 2b 20 sh.+.dot.+.dash,....."l":.dot.+.
17e00 64 61 73 68 20 2b 20 64 6f 74 20 2a 20 32 2c 0a 20 20 20 20 22 6d 22 3a 20 64 61 73 68 20 2a 20 dash.+.dot.*.2,....."m":.dash.*.
17e20 32 2c 0a 20 20 20 20 22 6e 22 3a 20 64 61 73 68 20 2b 20 64 6f 74 2c 0a 20 20 20 20 22 6f 22 3a 2,....."n":.dash.+.dot,....."o":
17e40 20 64 61 73 68 20 2a 20 33 2c 0a 20 20 20 20 22 70 22 3a 20 64 6f 74 20 2b 20 64 61 73 68 20 2a .dash.*.3,....."p":.dot.+.dash.*
17e60 20 32 20 2b 20 64 6f 74 2c 0a 20 20 20 20 22 71 22 3a 20 64 61 73 68 20 2a 20 32 20 2b 20 64 6f .2.+.dot,....."q":.dash.*.2.+.do
17e80 74 20 2b 20 64 61 73 68 2c 0a 20 20 20 20 22 72 22 3a 20 64 6f 74 20 2b 20 64 61 73 68 20 2b 20 t.+.dash,....."r":.dot.+.dash.+.
17ea0 64 6f 74 2c 0a 20 20 20 20 22 73 22 3a 20 64 6f 74 20 2a 20 33 2c 0a 20 20 20 20 22 74 22 3a 20 dot,....."s":.dot.*.3,....."t":.
17ec0 64 61 73 68 2c 0a 20 20 20 20 22 75 22 3a 20 64 6f 74 20 2a 20 32 20 2b 20 64 61 73 68 2c 0a 20 dash,....."u":.dot.*.2.+.dash,..
17ee0 20 20 20 22 76 22 3a 20 64 6f 74 20 2a 20 33 20 2b 20 64 61 73 68 2c 0a 20 20 20 20 22 77 22 3a ..."v":.dot.*.3.+.dash,....."w":
17f00 20 64 6f 74 20 2b 20 64 61 73 68 20 2a 20 32 2c 0a 20 20 20 20 22 78 22 3a 20 64 61 73 68 20 2b .dot.+.dash.*.2,....."x":.dash.+
17f20 20 64 6f 74 20 2a 20 32 20 2b 20 64 61 73 68 2c 0a 20 20 20 20 22 79 22 3a 20 64 61 73 68 20 2b .dot.*.2.+.dash,....."y":.dash.+
17f40 20 64 6f 74 20 2b 20 64 61 73 68 20 2a 20 32 2c 0a 20 20 20 20 22 7a 22 3a 20 64 61 73 68 20 2a .dot.+.dash.*.2,....."z":.dash.*
17f60 20 32 20 2b 20 64 6f 74 20 2a 20 32 2c 0a 7d 0a 0a 23 23 23 20 4d 61 6e 75 61 6c 6c 79 20 63 6f .2.+.dot.*.2,.}..###.Manually.co
17f80 6e 73 74 72 75 63 74 20 74 68 65 20 70 72 65 66 69 78 20 74 72 65 65 20 66 72 6f 6d 20 74 68 69 nstruct.the.prefix.tree.from.thi
17fa0 73 20 6d 61 70 70 69 6e 67 0a 0a 23 20 53 6f 6d 65 20 70 72 65 70 72 6f 63 65 73 73 69 6e 67 3a s.mapping..#.Some.preprocessing:
17fc0 20 73 6f 72 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 61 70 70 69 6e 67 20 62 79 20 63 6f .sort.the.original.mapping.by.co
17fe0 64 65 20 6c 65 6e 67 74 68 20 61 6e 64 20 63 68 61 72 61 63 74 65 72 0a 23 20 76 61 6c 75 65 0a de.length.and.character.#.value.
18000 6d 6f 72 73 65 5f 6d 61 70 70 69 6e 67 5f 73 6f 72 74 65 64 20 3d 20 64 69 63 74 28 0a 20 20 20 morse_mapping_sorted.=.dict(....
18020 20 73 6f 72 74 65 64 28 6d 6f 72 73 65 5f 64 69 72 65 63 74 5f 6d 61 70 70 69 6e 67 2e 69 74 65 .sorted(morse_direct_mapping.ite
18040 6d 73 28 29 2c 20 6b 65 79 3d 6c 61 6d 62 64 61 20 69 74 65 6d 3a 20 28 6c 65 6e 28 69 74 65 6d ms(),.key=lambda.item:.(len(item
18060 5b 31 5d 29 2c 20 69 74 65 6d 5b 31 5d 29 29 0a 29 0a 0a 23 20 4d 6f 72 65 20 70 72 65 70 72 6f [1]),.item[1])).)..#.More.prepro
18080 63 65 73 73 69 6e 67 3a 20 63 72 65 61 74 65 20 74 68 65 20 72 65 76 65 72 73 65 20 6d 61 70 70 cessing:.create.the.reverse.mapp
180a0 69 6e 67 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 6c 6f 6f 6b 75 70 0a 72 65 76 65 72 73 65 5f 6d ing.to.simplify.lookup.reverse_m
180c0 61 70 70 69 6e 67 20 3d 20 7b 76 3a 20 6b 20 66 6f 72 20 6b 2c 20 76 20 69 6e 20 6d 6f 72 73 65 apping.=.{v:.k.for.k,.v.in.morse
180e0 5f 64 69 72 65 63 74 5f 6d 61 70 70 69 6e 67 2e 69 74 65 6d 73 28 29 7d 0a 72 65 76 65 72 73 65 _direct_mapping.items()}.reverse
18100 5f 6d 61 70 70 69 6e 67 5b 22 22 5d 20 3d 20 22 22 20 20 23 20 52 65 70 72 65 73 65 6e 74 20 74 _mapping[""].=.""..#.Represent.t
18120 68 65 20 22 72 6f 6f 74 22 20 6e 6f 64 65 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 73 74 72 he."root".node.with.an.empty.str
18140 69 6e 67 0a 0a 23 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 70 72 65 66 69 78 20 74 72 65 65 ing..#.Construct.the.prefix.tree
18160 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 64 20 6d 61 70 70 69 6e 67 0a 47 20 3d 20 6e 78 2e .from.the.sorted.mapping.G.=.nx.
18180 44 69 47 72 61 70 68 28 29 0a 66 6f 72 20 6e 6f 64 65 2c 20 63 68 61 72 20 69 6e 20 6d 6f 72 73 DiGraph().for.node,.char.in.mors
181a0 65 5f 6d 61 70 70 69 6e 67 5f 73 6f 72 74 65 64 2e 69 74 65 6d 73 28 29 3a 0a 20 20 20 20 70 72 e_mapping_sorted.items():.....pr
181c0 65 64 20 3d 20 63 68 61 72 5b 3a 2d 31 5d 0a 20 20 20 20 23 20 53 74 6f 72 65 20 74 68 65 20 64 ed.=.char[:-1].....#.Store.the.d
181e0 6f 74 2f 64 61 73 68 20 72 65 6c 61 74 69 6e 67 20 74 68 65 20 74 77 6f 20 6c 65 74 74 65 72 73 ot/dash.relating.the.two.letters
18200 20 61 73 20 61 6e 20 65 64 67 65 20 61 74 74 72 69 62 75 74 65 20 22 63 68 61 72 22 0a 20 20 20 .as.an.edge.attribute."char"....
18220 20 47 2e 61 64 64 5f 65 64 67 65 28 72 65 76 65 72 73 65 5f 6d 61 70 70 69 6e 67 5b 70 72 65 64 .G.add_edge(reverse_mapping[pred
18240 5d 2c 20 6e 6f 64 65 2c 20 63 68 61 72 3d 63 68 61 72 5b 2d 31 5d 29 0a 0a 23 20 46 6f 72 20 76 ],.node,.char=char[-1])..#.For.v
18260 69 73 75 61 6c 69 7a 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 6c 61 79 6f 75 74 20 74 68 isualization.purposes,.layout.th
18280 65 20 6e 6f 64 65 73 20 69 6e 20 74 6f 70 6f 6c 6f 67 69 63 61 6c 20 6f 72 64 65 72 0a 66 6f 72 e.nodes.in.topological.order.for
182a0 20 69 2c 20 6c 61 79 65 72 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 6e 78 2e 74 6f 70 6f 6c 6f .i,.layer.in.enumerate(nx.topolo
182c0 67 69 63 61 6c 5f 67 65 6e 65 72 61 74 69 6f 6e 73 28 47 29 29 3a 0a 20 20 20 20 66 6f 72 20 6e gical_generations(G)):.....for.n
182e0 20 69 6e 20 6c 61 79 65 72 3a 0a 20 20 20 20 20 20 20 20 47 2e 6e 6f 64 65 73 5b 6e 5d 5b 22 6c .in.layer:.........G.nodes[n]["l
18300 61 79 65 72 22 5d 20 3d 20 69 0a 70 6f 73 20 3d 20 6e 78 2e 6d 75 6c 74 69 70 61 72 74 69 74 65 ayer"].=.i.pos.=.nx.multipartite
18320 5f 6c 61 79 6f 75 74 28 47 2c 20 73 75 62 73 65 74 5f 6b 65 79 3d 22 6c 61 79 65 72 22 2c 20 61 _layout(G,.subset_key="layer",.a
18340 6c 69 67 6e 3d 22 68 6f 72 69 7a 6f 6e 74 61 6c 22 29 0a 23 20 46 6c 69 70 20 74 68 65 20 6c 61 lign="horizontal").#.Flip.the.la
18360 79 6f 75 74 20 73 6f 20 74 68 65 20 72 6f 6f 74 20 6e 6f 64 65 20 69 73 20 6f 6e 20 74 6f 70 0a yout.so.the.root.node.is.on.top.
18380 66 6f 72 20 6b 20 69 6e 20 70 6f 73 3a 0a 20 20 20 20 70 6f 73 5b 6b 5d 5b 2d 31 5d 20 2a 3d 20 for.k.in.pos:.....pos[k][-1].*=.
183a0 2d 31 0a 0a 23 20 56 69 73 75 61 6c 69 7a 65 20 74 68 65 20 74 72 69 65 0a 6e 78 2e 64 72 61 77 -1..#.Visualize.the.trie.nx.draw
183c0 28 47 2c 20 70 6f 73 3d 70 6f 73 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 54 72 75 65 29 0a 65 (G,.pos=pos,.with_labels=True).e
183e0 6c 61 62 65 6c 73 20 3d 20 7b 28 75 2c 20 76 29 3a 20 6c 20 66 6f 72 20 75 2c 20 76 2c 20 6c 20 labels.=.{(u,.v):.l.for.u,.v,.l.
18400 69 6e 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 22 63 68 61 72 22 29 7d 0a 6e 78 2e 64 72 61 77 in.G.edges(data="char")}.nx.draw
18420 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 5f 6c 61 62 65 6c 73 28 47 2c 20 70 6f 73 2c 20 65 64 _networkx_edge_labels(G,.pos,.ed
18440 67 65 5f 6c 61 62 65 6c 73 3d 65 6c 61 62 65 6c 73 29 0a 0a 0a 23 20 41 20 6c 65 74 74 65 72 20 ge_labels=elabels)...#.A.letter.
18460 63 61 6e 20 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 can.be.encoded.by.following.the.
18480 70 61 74 68 20 66 72 6f 6d 20 74 68 65 20 67 69 76 65 6e 20 6c 65 74 74 65 72 20 28 6e 6f 64 65 path.from.the.given.letter.(node
184a0 29 20 74 6f 0a 23 20 74 68 65 20 72 6f 6f 74 20 6e 6f 64 65 0a 64 65 66 20 6d 6f 72 73 65 5f 65 ).to.#.the.root.node.def.morse_e
184c0 6e 63 6f 64 65 28 6c 65 74 74 65 72 29 3a 0a 20 20 20 20 70 72 65 64 20 3d 20 6e 65 78 74 28 47 ncode(letter):.....pred.=.next(G
184e0 2e 70 72 65 64 65 63 65 73 73 6f 72 73 28 6c 65 74 74 65 72 29 29 20 20 23 20 45 61 63 68 20 6c .predecessors(letter))..#.Each.l
18500 65 74 74 65 72 20 68 61 73 20 6f 6e 6c 79 20 31 20 70 72 65 64 65 63 65 73 73 6f 72 0a 20 20 20 etter.has.only.1.predecessor....
18520 20 73 79 6d 62 6f 6c 20 3d 20 47 5b 70 72 65 64 5d 5b 6c 65 74 74 65 72 5d 5b 22 63 68 61 72 22 .symbol.=.G[pred][letter]["char"
18540 5d 0a 20 20 20 20 69 66 20 70 72 65 64 20 21 3d 20 22 22 3a 0a 20 20 20 20 20 20 20 20 72 65 74 ].....if.pred.!=."":.........ret
18560 75 72 6e 20 6d 6f 72 73 65 5f 65 6e 63 6f 64 65 28 70 72 65 64 29 20 2b 20 73 79 6d 62 6f 6c 20 urn.morse_encode(pred).+.symbol.
18580 20 23 20 54 72 61 76 65 72 73 69 6e 67 20 74 68 65 20 74 72 69 65 20 69 6e 20 72 65 76 65 72 73 .#.Traversing.the.trie.in.revers
185a0 65 0a 20 20 20 20 72 65 74 75 72 6e 20 73 79 6d 62 6f 6c 0a 0a 0a 23 20 56 65 72 69 66 79 20 74 e.....return.symbol...#.Verify.t
185c0 68 61 74 20 74 68 65 20 74 72 69 65 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 63 6f 72 72 65 63 74 hat.the.trie.encoding.is.correct
185e0 0a 69 6d 70 6f 72 74 20 73 74 72 69 6e 67 0a 0a 66 6f 72 20 6c 65 74 74 65 72 20 69 6e 20 73 74 .import.string..for.letter.in.st
18600 72 69 6e 67 2e 61 73 63 69 69 5f 6c 6f 77 65 72 63 61 73 65 3a 0a 20 20 20 20 61 73 73 65 72 74 ring.ascii_lowercase:.....assert
18620 20 6d 6f 72 73 65 5f 65 6e 63 6f 64 65 28 6c 65 74 74 65 72 29 20 3d 3d 20 6d 6f 72 73 65 5f 64 .morse_encode(letter).==.morse_d
18640 69 72 65 63 74 5f 6d 61 70 70 69 6e 67 5b 6c 65 74 74 65 72 5d 0a 0a 70 72 69 6e 74 28 22 20 22 irect_mapping[letter]..print("."
18660 2e 6a 6f 69 6e 28 5b 6d 6f 72 73 65 5f 65 6e 63 6f 64 65 28 6c 74 72 29 20 66 6f 72 20 6c 74 72 .join([morse_encode(ltr).for.ltr
18680 20 69 6e 20 22 69 6c 6f 76 65 6e 65 74 77 6f 72 6b 78 22 5d 29 29 0a 50 4b 03 04 14 00 00 00 00 .in."ilovenetworkx"])).PK.......
186a0 00 07 7b 57 56 ba ce f4 d5 f3 03 00 00 f3 03 00 00 18 00 00 00 67 72 61 70 68 2f 70 6c 6f 74 5f ..{WV................graph/plot_
186c0 64 61 67 5f 6c 61 79 6f 75 74 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d dag_layout.py""".===============
186e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 44 41 47 20 2d 20 54 6f 70 6f 6c 6f 67 69 63 61 6c 20 4c 61 79 6f =========.DAG.-.Topological.Layo
18700 75 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 ut.========================..Thi
18720 73 20 65 78 61 6d 70 6c 65 20 63 6f 6d 62 69 6e 65 73 20 74 68 65 20 60 74 6f 70 6f 6c 6f 67 69 s.example.combines.the.`topologi
18740 63 61 6c 5f 67 65 6e 65 72 61 74 69 6f 6e 73 60 20 67 65 6e 65 72 61 74 6f 72 20 77 69 74 68 0a cal_generations`.generator.with.
18760 60 6d 75 6c 74 69 70 61 72 74 69 74 65 5f 6c 61 79 6f 75 74 60 20 74 6f 20 73 68 6f 77 20 68 6f `multipartite_layout`.to.show.ho
18780 77 20 74 6f 20 76 69 73 75 61 6c 69 7a 65 20 61 20 44 41 47 20 69 6e 20 74 6f 70 6f 6c 6f 67 69 w.to.visualize.a.DAG.in.topologi
187a0 63 61 6c 6c 79 2d 73 6f 72 74 65 64 0a 6f 72 64 65 72 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 cally-sorted.order.."""..import.
187c0 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 networkx.as.nx.import.matplotlib
187e0 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 0a 0a 47 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 .pyplot.as.plt...G.=.nx.DiGraph(
18800 0a 20 20 20 20 5b 0a 20 20 20 20 20 20 20 20 28 22 66 22 2c 20 22 61 22 29 2c 0a 20 20 20 20 20 .....[.........("f",."a"),......
18820 20 20 20 28 22 61 22 2c 20 22 62 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 61 22 2c 20 22 65 22 ...("a",."b"),.........("a",."e"
18840 29 2c 0a 20 20 20 20 20 20 20 20 28 22 62 22 2c 20 22 63 22 29 2c 0a 20 20 20 20 20 20 20 20 28 ),.........("b",."c"),.........(
18860 22 62 22 2c 20 22 64 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 64 22 2c 20 22 65 22 29 2c 0a 20 "b",."d"),.........("d",."e"),..
18880 20 20 20 20 20 20 20 28 22 66 22 2c 20 22 63 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 66 22 2c .......("f",."c"),.........("f",
188a0 20 22 67 22 29 2c 0a 20 20 20 20 20 20 20 20 28 22 68 22 2c 20 22 66 22 29 2c 0a 20 20 20 20 5d ."g"),.........("h",."f"),.....]
188c0 0a 29 0a 0a 66 6f 72 20 6c 61 79 65 72 2c 20 6e 6f 64 65 73 20 69 6e 20 65 6e 75 6d 65 72 61 74 .)..for.layer,.nodes.in.enumerat
188e0 65 28 6e 78 2e 74 6f 70 6f 6c 6f 67 69 63 61 6c 5f 67 65 6e 65 72 61 74 69 6f 6e 73 28 47 29 29 e(nx.topological_generations(G))
18900 3a 0a 20 20 20 20 23 20 60 6d 75 6c 74 69 70 61 72 74 69 74 65 5f 6c 61 79 6f 75 74 60 20 65 78 :.....#.`multipartite_layout`.ex
18920 70 65 63 74 73 20 74 68 65 20 6c 61 79 65 72 20 61 73 20 61 20 6e 6f 64 65 20 61 74 74 72 69 62 pects.the.layer.as.a.node.attrib
18940 75 74 65 2c 20 73 6f 20 61 64 64 20 74 68 65 0a 20 20 20 20 23 20 6e 75 6d 65 72 69 63 20 6c 61 ute,.so.add.the.....#.numeric.la
18960 79 65 72 20 76 61 6c 75 65 20 61 73 20 61 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 0a 20 20 yer.value.as.a.node.attribute...
18980 20 20 66 6f 72 20 6e 6f 64 65 20 69 6e 20 6e 6f 64 65 73 3a 0a 20 20 20 20 20 20 20 20 47 2e 6e ..for.node.in.nodes:.........G.n
189a0 6f 64 65 73 5b 6e 6f 64 65 5d 5b 22 6c 61 79 65 72 22 5d 20 3d 20 6c 61 79 65 72 0a 0a 23 20 43 odes[node]["layer"].=.layer..#.C
189c0 6f 6d 70 75 74 65 20 74 68 65 20 6d 75 6c 74 69 70 61 72 74 69 74 65 5f 6c 61 79 6f 75 74 20 75 ompute.the.multipartite_layout.u
189e0 73 69 6e 67 20 74 68 65 20 22 6c 61 79 65 72 22 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 0a sing.the."layer".node.attribute.
18a00 70 6f 73 20 3d 20 6e 78 2e 6d 75 6c 74 69 70 61 72 74 69 74 65 5f 6c 61 79 6f 75 74 28 47 2c 20 pos.=.nx.multipartite_layout(G,.
18a20 73 75 62 73 65 74 5f 6b 65 79 3d 22 6c 61 79 65 72 22 29 0a 0a 66 69 67 2c 20 61 78 20 3d 20 70 subset_key="layer")..fig,.ax.=.p
18a40 6c 74 2e 73 75 62 70 6c 6f 74 73 28 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 47 lt.subplots().nx.draw_networkx(G
18a60 2c 20 70 6f 73 3d 70 6f 73 2c 20 61 78 3d 61 78 29 0a 61 78 2e 73 65 74 5f 74 69 74 6c 65 28 22 ,.pos=pos,.ax=ax).ax.set_title("
18a80 44 41 47 20 6c 61 79 6f 75 74 20 69 6e 20 74 6f 70 6f 6c 6f 67 69 63 61 6c 20 6f 72 64 65 72 22 DAG.layout.in.topological.order"
18aa0 29 0a 66 69 67 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a ).fig.tight_layout().plt.show().
18ac0 50 4b 03 04 14 00 00 00 00 00 07 7b 57 56 e2 92 f1 e1 26 03 00 00 26 03 00 00 1d 00 00 00 67 72 PK.........{WV....&...&.......gr
18ae0 61 70 68 2f 70 6c 6f 74 5f 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 65 2e 70 79 22 22 22 0a 3d aph/plot_degree_sequence.py""".=
18b00 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 44 65 67 72 65 65 20 53 65 71 75 65 6e 63 65 0a 3d ==============.Degree.Sequence.=
18b20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 52 61 6e 64 6f 6d 20 67 72 61 70 68 20 66 72 6f ==============..Random.graph.fro
18b40 6d 20 67 69 76 65 6e 20 64 65 67 72 65 65 20 73 65 71 75 65 6e 63 65 2e 0a 22 22 22 0a 69 6d 70 m.given.degree.sequence..""".imp
18b60 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 ort.matplotlib.pyplot.as.plt.imp
18b80 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 23 20 53 70 65 63 69 66 79 20 73 65 ort.networkx.as.nx..#.Specify.se
18ba0 65 64 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 79 0a 73 65 65 64 20 3d 20 36 36 ed.for.reproducibility.seed.=.66
18bc0 38 32 37 33 0a 0a 7a 20 3d 20 5b 35 2c 20 33 2c 20 33 2c 20 33 2c 20 33 2c 20 32 2c 20 32 2c 20 8273..z.=.[5,.3,.3,.3,.3,.2,.2,.
18be0 32 2c 20 31 2c 20 31 2c 20 31 5d 0a 70 72 69 6e 74 28 6e 78 2e 69 73 5f 67 72 61 70 68 69 63 61 2,.1,.1,.1].print(nx.is_graphica
18c00 6c 28 7a 29 29 0a 0a 70 72 69 6e 74 28 22 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6d 6f 64 65 l(z))..print("Configuration.mode
18c20 6c 22 29 0a 47 20 3d 20 6e 78 2e 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5f 6d 6f 64 65 6c 28 0a l").G.=.nx.configuration_model(.
18c40 20 20 20 20 7a 2c 20 73 65 65 64 3d 73 65 65 64 0a 29 20 20 23 20 63 6f 6e 66 69 67 75 72 61 74 ....z,.seed=seed.)..#.configurat
18c60 69 6f 6e 20 6d 6f 64 65 6c 2c 20 73 65 65 64 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c ion.model,.seed.for.reproducibil
18c80 69 74 79 0a 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 65 20 3d 20 5b 64 20 66 6f 72 20 6e 2c 20 ity.degree_sequence.=.[d.for.n,.
18ca0 64 20 69 6e 20 47 2e 64 65 67 72 65 65 28 29 5d 20 20 23 20 64 65 67 72 65 65 20 73 65 71 75 65 d.in.G.degree()]..#.degree.seque
18cc0 6e 63 65 0a 70 72 69 6e 74 28 66 22 44 65 67 72 65 65 20 73 65 71 75 65 6e 63 65 20 7b 64 65 67 nce.print(f"Degree.sequence.{deg
18ce0 72 65 65 5f 73 65 71 75 65 6e 63 65 7d 22 29 0a 70 72 69 6e 74 28 22 44 65 67 72 65 65 20 68 69 ree_sequence}").print("Degree.hi
18d00 73 74 6f 67 72 61 6d 22 29 0a 68 69 73 74 20 3d 20 7b 7d 0a 66 6f 72 20 64 20 69 6e 20 64 65 67 stogram").hist.=.{}.for.d.in.deg
18d20 72 65 65 5f 73 65 71 75 65 6e 63 65 3a 0a 20 20 20 20 69 66 20 64 20 69 6e 20 68 69 73 74 3a 0a ree_sequence:.....if.d.in.hist:.
18d40 20 20 20 20 20 20 20 20 68 69 73 74 5b 64 5d 20 2b 3d 20 31 0a 20 20 20 20 65 6c 73 65 3a 0a 20 ........hist[d].+=.1.....else:..
18d60 20 20 20 20 20 20 20 68 69 73 74 5b 64 5d 20 3d 20 31 0a 70 72 69 6e 74 28 22 64 65 67 72 65 65 .......hist[d].=.1.print("degree
18d80 20 23 6e 6f 64 65 73 22 29 0a 66 6f 72 20 64 20 69 6e 20 68 69 73 74 3a 0a 20 20 20 20 70 72 69 .#nodes").for.d.in.hist:.....pri
18da0 6e 74 28 66 22 7b 64 3a 34 7d 20 7b 68 69 73 74 5b 64 5d 3a 36 7d 22 29 0a 0a 70 6f 73 20 3d 20 nt(f"{d:4}.{hist[d]:6}")..pos.=.
18dc0 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 73 65 65 64 29 20 20 nx.spring_layout(G,.seed=seed)..
18de0 23 20 53 65 65 64 20 6c 61 79 6f 75 74 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 69 6c 69 74 #.Seed.layout.for.reproducibilit
18e00 79 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 3d 70 6f 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 y.nx.draw(G,.pos=pos).plt.show()
18e20 0a 50 4b 03 04 14 00 00 00 00 00 07 7b 57 56 60 b2 58 c9 93 04 00 00 93 04 00 00 16 00 00 00 67 .PK.........{WV`.X.............g
18e40 72 61 70 68 2f 70 6c 6f 74 5f 66 6f 6f 74 62 61 6c 6c 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d raph/plot_football.py""".=======
18e60 3d 0a 46 6f 6f 74 62 61 6c 6c 0a 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 4c 6f 61 64 20 66 6f 6f 74 62 61 =.Football.========..Load.footba
18e80 6c 6c 20 6e 65 74 77 6f 72 6b 20 69 6e 20 47 4d 4c 20 66 6f 72 6d 61 74 20 61 6e 64 20 63 6f 6d ll.network.in.GML.format.and.com
18ea0 70 75 74 65 20 73 6f 6d 65 20 6e 65 74 77 6f 72 6b 20 73 74 61 74 69 73 74 63 73 2e 0a 0a 53 68 pute.some.network.statistcs...Sh
18ec0 6f 77 73 20 68 6f 77 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 20 47 4d 4c 20 67 72 61 70 68 20 69 6e ows.how.to.download.GML.graph.in
18ee0 20 61 20 7a 69 70 70 65 64 20 66 69 6c 65 2c 20 75 6e 70 61 63 6b 20 69 74 2c 20 61 6e 64 20 6c .a.zipped.file,.unpack.it,.and.l
18f00 6f 61 64 0a 69 6e 74 6f 20 61 20 4e 65 74 77 6f 72 6b 58 20 67 72 61 70 68 2e 0a 0a 52 65 71 75 oad.into.a.NetworkX.graph...Requ
18f20 69 72 65 73 20 49 6e 74 65 72 6e 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 64 6f 77 6e ires.Internet.connection.to.down
18f40 6c 6f 61 64 20 74 68 65 20 55 52 4c 0a 68 74 74 70 3a 2f 2f 77 77 77 2d 70 65 72 73 6f 6e 61 6c load.the.URL.http://www-personal
18f60 2e 75 6d 69 63 68 2e 65 64 75 2f 7e 6d 65 6a 6e 2f 6e 65 74 64 61 74 61 2f 66 6f 6f 74 62 61 6c .umich.edu/~mejn/netdata/footbal
18f80 6c 2e 7a 69 70 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 75 72 6c 6c 69 62 2e 72 65 71 75 65 73 74 l.zip."""..import.urllib.request
18fa0 0a 69 6d 70 6f 72 74 20 69 6f 0a 69 6d 70 6f 72 74 20 7a 69 70 66 69 6c 65 0a 0a 69 6d 70 6f 72 .import.io.import.zipfile..impor
18fc0 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 t.matplotlib.pyplot.as.plt.impor
18fe0 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 75 72 6c 20 3d 20 22 68 74 74 70 3a 2f 2f t.networkx.as.nx..url.=."http://
19000 77 77 77 2d 70 65 72 73 6f 6e 61 6c 2e 75 6d 69 63 68 2e 65 64 75 2f 7e 6d 65 6a 6e 2f 6e 65 74 www-personal.umich.edu/~mejn/net
19020 64 61 74 61 2f 66 6f 6f 74 62 61 6c 6c 2e 7a 69 70 22 0a 0a 73 6f 63 6b 20 3d 20 75 72 6c 6c 69 data/football.zip"..sock.=.urlli
19040 62 2e 72 65 71 75 65 73 74 2e 75 72 6c 6f 70 65 6e 28 75 72 6c 29 20 20 23 20 6f 70 65 6e 20 55 b.request.urlopen(url)..#.open.U
19060 52 4c 0a 73 20 3d 20 69 6f 2e 42 79 74 65 73 49 4f 28 73 6f 63 6b 2e 72 65 61 64 28 29 29 20 20 RL.s.=.io.BytesIO(sock.read())..
19080 23 20 72 65 61 64 20 69 6e 74 6f 20 42 79 74 65 73 49 4f 20 22 66 69 6c 65 22 0a 73 6f 63 6b 2e #.read.into.BytesIO."file".sock.
190a0 63 6c 6f 73 65 28 29 0a 0a 7a 66 20 3d 20 7a 69 70 66 69 6c 65 2e 5a 69 70 46 69 6c 65 28 73 29 close()..zf.=.zipfile.ZipFile(s)
190c0 20 20 23 20 7a 69 70 66 69 6c 65 20 6f 62 6a 65 63 74 0a 74 78 74 20 3d 20 7a 66 2e 72 65 61 64 ..#.zipfile.object.txt.=.zf.read
190e0 28 22 66 6f 6f 74 62 61 6c 6c 2e 74 78 74 22 29 2e 64 65 63 6f 64 65 28 29 20 20 23 20 72 65 61 ("football.txt").decode()..#.rea
19100 64 20 69 6e 66 6f 20 66 69 6c 65 0a 67 6d 6c 20 3d 20 7a 66 2e 72 65 61 64 28 22 66 6f 6f 74 62 d.info.file.gml.=.zf.read("footb
19120 61 6c 6c 2e 67 6d 6c 22 29 2e 64 65 63 6f 64 65 28 29 20 20 23 20 72 65 61 64 20 67 6d 6c 20 64 all.gml").decode()..#.read.gml.d
19140 61 74 61 0a 23 20 74 68 72 6f 77 20 61 77 61 79 20 62 6f 67 75 73 20 66 69 72 73 74 20 6c 69 6e ata.#.throw.away.bogus.first.lin
19160 65 20 77 69 74 68 20 23 20 66 72 6f 6d 20 6d 65 6a 6e 20 66 69 6c 65 73 0a 67 6d 6c 20 3d 20 67 e.with.#.from.mejn.files.gml.=.g
19180 6d 6c 2e 73 70 6c 69 74 28 22 5c 6e 22 29 5b 31 3a 5d 0a 47 20 3d 20 6e 78 2e 70 61 72 73 65 5f ml.split("\n")[1:].G.=.nx.parse_
191a0 67 6d 6c 28 67 6d 6c 29 20 20 23 20 70 61 72 73 65 20 67 6d 6c 20 64 61 74 61 0a 0a 70 72 69 6e gml(gml)..#.parse.gml.data..prin
191c0 74 28 74 78 74 29 0a 23 20 70 72 69 6e 74 20 64 65 67 72 65 65 20 66 6f 72 20 65 61 63 68 20 74 t(txt).#.print.degree.for.each.t
191e0 65 61 6d 20 2d 20 6e 75 6d 62 65 72 20 6f 66 20 67 61 6d 65 73 0a 66 6f 72 20 6e 2c 20 64 20 69 eam.-.number.of.games.for.n,.d.i
19200 6e 20 47 2e 64 65 67 72 65 65 28 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 6e 3a 32 30 7d n.G.degree():.....print(f"{n:20}
19220 20 7b 64 3a 32 7d 22 29 0a 0a 6f 70 74 69 6f 6e 73 20 3d 20 7b 22 6e 6f 64 65 5f 63 6f 6c 6f 72 .{d:2}")..options.=.{"node_color
19240 22 3a 20 22 62 6c 61 63 6b 22 2c 20 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 35 30 2c 20 22 6c 69 ":."black",."node_size":.50,."li
19260 6e 65 77 69 64 74 68 73 22 3a 20 30 2c 20 22 77 69 64 74 68 22 3a 20 30 2e 31 7d 0a 0a 70 6f 73 newidths":.0,."width":.0.1}..pos
19280 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 31 39 36 39 .=.nx.spring_layout(G,.seed=1969
192a0 29 20 20 23 20 53 65 65 64 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 6c 65 20 6c 61 79 6f 75 )..#.Seed.for.reproducible.layou
192c0 74 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 70 6c 74 t.nx.draw(G,.pos,.**options).plt
192e0 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 08 7b 57 56 be b3 44 81 a0 07 00 00 a0 07 .show().PK.........{WV..D.......
19300 00 00 19 00 00 00 67 72 61 70 68 2f 70 6c 6f 74 5f 74 72 69 61 64 5f 74 79 70 65 73 2e 70 79 22 ......graph/plot_triad_types.py"
19320 22 22 0a 3d 3d 3d 3d 3d 3d 0a 54 72 69 61 64 73 0a 3d 3d 3d 3d 3d 3d 0a 41 63 63 6f 72 64 69 6e "".======.Triads.======.Accordin
19340 67 20 74 6f 20 74 68 65 20 70 61 70 65 72 20 62 79 20 53 6e 69 6a 64 65 72 73 2c 20 54 2e 20 28 g.to.the.paper.by.Snijders,.T..(
19360 32 30 31 32 29 2e 20 e2 80 9c 54 72 61 6e 73 69 74 69 76 69 74 79 20 61 6e 64 20 74 72 69 61 64 2012).....Transitivity.and.triad
19380 73 2e e2 80 9d 0a 55 6e 69 76 65 72 73 69 74 79 20 6f 66 20 4f 78 66 6f 72 64 2c 20 74 68 65 72 s.....University.of.Oxford,.ther
193a0 65 20 61 72 65 20 31 36 20 54 72 69 61 64 20 54 79 70 65 73 20 70 6f 73 73 69 62 6c 65 2e 20 54 e.are.16.Triad.Types.possible..T
193c0 68 69 73 20 70 6c 6f 74 20 73 68 6f 77 73 0a 74 68 65 20 31 36 20 54 72 69 61 64 20 54 79 70 65 his.plot.shows.the.16.Triad.Type
193e0 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 77 69 74 68 69 6e 20 s.that.can.be.identified.within.
19400 64 69 72 65 63 74 65 64 20 6e 65 74 77 6f 72 6b 73 2e 0a 54 72 69 61 64 69 63 20 72 65 6c 61 74 directed.networks..Triadic.relat
19420 69 6f 6e 73 68 69 70 73 20 61 72 65 20 65 73 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 20 77 ionships.are.especially.useful.w
19440 68 65 6e 20 61 6e 61 6c 79 73 69 6e 67 20 53 6f 63 69 61 6c 20 4e 65 74 77 6f 72 6b 73 2e 0a 54 hen.analysing.Social.Networks..T
19460 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20 64 69 67 69 74 73 20 72 65 66 65 72 20 74 6f 20 74 he.first.three.digits.refer.to.t
19480 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 75 74 75 61 6c 2c 20 61 73 79 6d 6d 65 74 72 69 63 20 he.number.of.mutual,.asymmetric.
194a0 61 6e 64 20 6e 75 6c 6c 0a 64 79 61 64 73 20 28 62 69 64 69 72 65 63 74 69 6f 6e 61 6c 2c 20 75 and.null.dyads.(bidirectional,.u
194c0 6e 69 64 69 72 65 63 74 69 6f 6e 20 61 6e 64 20 6e 6f 6e 65 64 67 65 73 29 20 61 6e 64 20 74 68 nidirection.and.nonedges).and.th
194e0 65 20 6c 65 74 74 65 72 20 67 69 76 65 73 0a 74 68 65 20 4f 72 69 65 6e 74 61 74 69 6f 6e 20 61 e.letter.gives.the.Orientation.a
19500 73 20 55 70 20 28 55 29 2c 20 44 6f 77 6e 20 28 44 29 20 2c 20 43 79 63 6c 69 63 61 6c 20 28 43 s.Up.(U),.Down.(D).,.Cyclical.(C
19520 29 20 6f 72 20 54 72 61 6e 73 69 74 69 76 65 20 28 54 29 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 ).or.Transitive.(T).."""..import
19540 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 .networkx.as.nx.import.matplotli
19560 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 0a 66 69 67 2c 20 61 78 65 73 20 3d 20 70 6c 74 b.pyplot.as.plt..fig,.axes.=.plt
19580 2e 73 75 62 70 6c 6f 74 73 28 34 2c 20 34 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 .subplots(4,.4,.figsize=(10,.10)
195a0 29 0a 74 72 69 61 64 73 20 3d 20 7b 0a 20 20 20 20 22 30 30 33 22 3a 20 5b 5d 2c 0a 20 20 20 20 ).triads.=.{....."003":.[],.....
195c0 22 30 31 32 22 3a 20 5b 28 31 2c 20 32 29 5d 2c 0a 20 20 20 20 22 31 30 32 22 3a 20 5b 28 31 2c "012":.[(1,.2)],....."102":.[(1,
195e0 20 32 29 2c 20 28 32 2c 20 31 29 5d 2c 0a 20 20 20 20 22 30 32 31 44 22 3a 20 5b 28 33 2c 20 31 .2),.(2,.1)],....."021D":.[(3,.1
19600 29 2c 20 28 33 2c 20 32 29 5d 2c 0a 20 20 20 20 22 30 32 31 55 22 3a 20 5b 28 31 2c 20 33 29 2c ),.(3,.2)],....."021U":.[(1,.3),
19620 20 28 32 2c 20 33 29 5d 2c 0a 20 20 20 20 22 30 32 31 43 22 3a 20 5b 28 31 2c 20 33 29 2c 20 28 .(2,.3)],....."021C":.[(1,.3),.(
19640 33 2c 20 32 29 5d 2c 0a 20 20 20 20 22 31 31 31 44 22 3a 20 5b 28 31 2c 20 32 29 2c 20 28 32 2c 3,.2)],....."111D":.[(1,.2),.(2,
19660 20 31 29 2c 20 28 33 2c 20 31 29 5d 2c 0a 20 20 20 20 22 31 31 31 55 22 3a 20 5b 28 31 2c 20 32 .1),.(3,.1)],....."111U":.[(1,.2
19680 29 2c 20 28 32 2c 20 31 29 2c 20 28 31 2c 20 33 29 5d 2c 0a 20 20 20 20 22 30 33 30 54 22 3a 20 ),.(2,.1),.(1,.3)],....."030T":.
196a0 5b 28 31 2c 20 32 29 2c 20 28 33 2c 20 32 29 2c 20 28 31 2c 20 33 29 5d 2c 0a 20 20 20 20 22 30 [(1,.2),.(3,.2),.(1,.3)],....."0
196c0 33 30 43 22 3a 20 5b 28 31 2c 20 33 29 2c 20 28 33 2c 20 32 29 2c 20 28 32 2c 20 31 29 5d 2c 0a 30C":.[(1,.3),.(3,.2),.(2,.1)],.
196e0 20 20 20 20 22 32 30 31 22 3a 20 5b 28 31 2c 20 32 29 2c 20 28 32 2c 20 31 29 2c 20 28 33 2c 20 ...."201":.[(1,.2),.(2,.1),.(3,.
19700 31 29 2c 20 28 31 2c 20 33 29 5d 2c 0a 20 20 20 20 22 31 32 30 44 22 3a 20 5b 28 31 2c 20 32 29 1),.(1,.3)],....."120D":.[(1,.2)
19720 2c 20 28 32 2c 20 31 29 2c 20 28 33 2c 20 31 29 2c 20 28 33 2c 20 32 29 5d 2c 0a 20 20 20 20 22 ,.(2,.1),.(3,.1),.(3,.2)],....."
19740 31 32 30 55 22 3a 20 5b 28 31 2c 20 32 29 2c 20 28 32 2c 20 31 29 2c 20 28 31 2c 20 33 29 2c 20 120U":.[(1,.2),.(2,.1),.(1,.3),.
19760 28 32 2c 20 33 29 5d 2c 0a 20 20 20 20 22 31 32 30 43 22 3a 20 5b 28 31 2c 20 32 29 2c 20 28 32 (2,.3)],....."120C":.[(1,.2),.(2
19780 2c 20 31 29 2c 20 28 31 2c 20 33 29 2c 20 28 33 2c 20 32 29 5d 2c 0a 20 20 20 20 22 32 31 30 22 ,.1),.(1,.3),.(3,.2)],....."210"
197a0 3a 20 5b 28 31 2c 20 32 29 2c 20 28 32 2c 20 31 29 2c 20 28 31 2c 20 33 29 2c 20 28 33 2c 20 32 :.[(1,.2),.(2,.1),.(1,.3),.(3,.2
197c0 29 2c 20 28 32 2c 20 33 29 5d 2c 0a 20 20 20 20 22 33 30 30 22 3a 20 5b 28 31 2c 20 32 29 2c 20 ),.(2,.3)],....."300":.[(1,.2),.
197e0 28 32 2c 20 31 29 2c 20 28 32 2c 20 33 29 2c 20 28 33 2c 20 32 29 2c 20 28 31 2c 20 33 29 2c 20 (2,.1),.(2,.3),.(3,.2),.(1,.3),.
19800 28 33 2c 20 31 29 5d 2c 0a 7d 0a 0a 66 6f 72 20 28 74 69 74 6c 65 2c 20 74 72 69 61 64 29 2c 20 (3,.1)],.}..for.(title,.triad),.
19820 61 78 20 69 6e 20 7a 69 70 28 74 72 69 61 64 73 2e 69 74 65 6d 73 28 29 2c 20 61 78 65 73 2e 66 ax.in.zip(triads.items(),.axes.f
19840 6c 61 74 74 65 6e 28 29 29 3a 0a 20 20 20 20 47 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 29 0a latten()):.....G.=.nx.DiGraph().
19860 20 20 20 20 47 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 5b 31 2c 20 32 2c 20 33 5d 29 0a ....G.add_nodes_from([1,.2,.3]).
19880 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d 28 74 72 69 61 64 29 0a 20 20 20 20 ....G.add_edges_from(triad).....
198a0 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 0a 20 20 20 20 20 20 20 20 47 2c 0a 20 20 20 nx.draw_networkx(.........G,....
198c0 20 20 20 20 20 61 78 3d 61 78 2c 0a 20 20 20 20 20 20 20 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d .....ax=ax,.........with_labels=
198e0 46 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 5b 22 67 72 65 65 False,.........node_color=["gree
19900 6e 22 5d 2c 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 5f 73 69 7a 65 3d 32 30 30 2c 0a 20 20 20 20 n"],.........node_size=200,.....
19920 20 20 20 20 61 72 72 6f 77 73 69 7a 65 3d 32 30 2c 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 3d ....arrowsize=20,.........width=
19940 32 2c 0a 20 20 20 20 20 20 20 20 70 6f 73 3d 6e 78 2e 70 6c 61 6e 61 72 5f 6c 61 79 6f 75 74 28 2,.........pos=nx.planar_layout(
19960 47 29 2c 0a 20 20 20 20 29 0a 20 20 20 20 61 78 2e 73 65 74 5f 78 6c 69 6d 28 76 61 6c 20 2a 20 G),.....).....ax.set_xlim(val.*.
19980 31 2e 32 20 66 6f 72 20 76 61 6c 20 69 6e 20 61 78 2e 67 65 74 5f 78 6c 69 6d 28 29 29 0a 20 20 1.2.for.val.in.ax.get_xlim())...
199a0 20 20 61 78 2e 73 65 74 5f 79 6c 69 6d 28 76 61 6c 20 2a 20 31 2e 32 20 66 6f 72 20 76 61 6c 20 ..ax.set_ylim(val.*.1.2.for.val.
199c0 69 6e 20 61 78 2e 67 65 74 5f 79 6c 69 6d 28 29 29 0a 20 20 20 20 61 78 2e 74 65 78 74 28 0a 20 in.ax.get_ylim()).....ax.text(..
199e0 20 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 20 20 74 69 74 .......0,.........0,.........tit
19a00 6c 65 2c 0a 20 20 20 20 20 20 20 20 66 6f 6e 74 73 69 7a 65 3d 31 35 2c 0a 20 20 20 20 20 20 20 le,.........fontsize=15,........
19a20 20 66 6f 6e 74 77 65 69 67 68 74 3d 22 65 78 74 72 61 20 62 6f 6c 64 22 2c 0a 20 20 20 20 20 20 .fontweight="extra.bold",.......
19a40 20 20 68 6f 72 69 7a 6f 6e 74 61 6c 61 6c 69 67 6e 6d 65 6e 74 3d 22 63 65 6e 74 65 72 22 2c 0a ..horizontalalignment="center",.
19a60 20 20 20 20 20 20 20 20 62 62 6f 78 3d 7b 22 62 6f 78 73 74 79 6c 65 22 3a 20 22 73 71 75 61 72 ........bbox={"boxstyle":."squar
19a80 65 2c 70 61 64 3d 30 2e 33 22 2c 20 22 66 63 22 3a 20 22 6e 6f 6e 65 22 7d 2c 0a 20 20 20 20 29 e,pad=0.3",."fc":."none"},.....)
19aa0 0a 66 69 67 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 .fig.tight_layout().plt.show().P
19ac0 4b 03 04 14 00 00 00 00 00 07 7b 57 56 ab 06 65 1a f0 01 00 00 f0 01 00 00 26 00 00 00 67 72 61 K.........{WV..e.........&...gra
19ae0 70 68 2f 70 6c 6f 74 5f 65 78 70 65 63 74 65 64 5f 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 65 ph/plot_expected_degree_sequence
19b00 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a .py""".========================.
19b20 45 78 70 65 63 74 65 64 20 44 65 67 72 65 65 20 53 65 71 75 65 6e 63 65 0a 3d 3d 3d 3d 3d 3d 3d Expected.Degree.Sequence.=======
19b40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 52 61 6e 64 6f 6d 20 67 72 61 70 68 20 =================..Random.graph.
19b60 66 72 6f 6d 20 67 69 76 65 6e 20 64 65 67 72 65 65 20 73 65 71 75 65 6e 63 65 2e 0a 22 22 22 0a from.given.degree.sequence..""".
19b80 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 23 20 6d 61 6b 65 20 61 .import.networkx.as.nx..#.make.a
19ba0 20 72 61 6e 64 6f 6d 20 67 72 61 70 68 20 6f 66 20 35 30 30 20 6e 6f 64 65 73 20 77 69 74 68 20 .random.graph.of.500.nodes.with.
19bc0 65 78 70 65 63 74 65 64 20 64 65 67 72 65 65 73 20 6f 66 20 35 30 0a 6e 20 3d 20 35 30 30 20 20 expected.degrees.of.50.n.=.500..
19be0 23 20 6e 20 6e 6f 64 65 73 0a 70 20 3d 20 30 2e 31 0a 77 20 3d 20 5b 70 20 2a 20 6e 20 66 6f 72 #.n.nodes.p.=.0.1.w.=.[p.*.n.for
19c00 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 29 5d 20 20 23 20 77 20 3d 20 70 2a 6e 20 66 6f 72 20 61 .i.in.range(n)]..#.w.=.p*n.for.a
19c20 6c 6c 20 6e 6f 64 65 73 0a 47 20 3d 20 6e 78 2e 65 78 70 65 63 74 65 64 5f 64 65 67 72 65 65 5f ll.nodes.G.=.nx.expected_degree_
19c40 67 72 61 70 68 28 77 29 20 20 23 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6d 6f 64 65 6c 0a graph(w)..#.configuration.model.
19c60 70 72 69 6e 74 28 22 44 65 67 72 65 65 20 68 69 73 74 6f 67 72 61 6d 22 29 0a 70 72 69 6e 74 28 print("Degree.histogram").print(
19c80 22 64 65 67 72 65 65 20 28 23 6e 6f 64 65 73 29 20 2a 2a 2a 2a 22 29 0a 64 68 20 3d 20 6e 78 2e "degree.(#nodes).****").dh.=.nx.
19ca0 64 65 67 72 65 65 5f 68 69 73 74 6f 67 72 61 6d 28 47 29 0a 66 6f 72 20 69 2c 20 64 20 69 6e 20 degree_histogram(G).for.i,.d.in.
19cc0 65 6e 75 6d 65 72 61 74 65 28 64 68 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 69 3a 32 7d enumerate(dh):.....print(f"{i:2}
19ce0 20 28 7b 64 3a 32 7d 29 20 7b 27 2a 27 2a 64 7d 22 29 0a 50 4b 03 04 14 00 00 00 00 00 08 7b 57 .({d:2}).{'*'*d}").PK.........{W
19d00 56 33 1a c8 eb ee 01 00 00 ee 01 00 00 19 00 00 00 67 72 61 70 68 2f 70 6c 6f 74 5f 6b 61 72 61 V3...............graph/plot_kara
19d20 74 65 5f 63 6c 75 62 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4b 61 72 61 74 65 te_club.py""".===========.Karate
19d40 20 43 6c 75 62 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 5a 61 63 68 61 72 79 27 73 20 4b 61 72 .Club.===========..Zachary's.Kar
19d60 61 74 65 20 43 6c 75 62 20 67 72 61 70 68 0a 0a 44 61 74 61 20 66 69 6c 65 20 66 72 6f 6d 3a 0a ate.Club.graph..Data.file.from:.
19d80 68 74 74 70 3a 2f 2f 76 6c 61 64 6f 2e 66 6d 66 2e 75 6e 69 2d 6c 6a 2e 73 69 2f 70 75 62 2f 6e http://vlado.fmf.uni-lj.si/pub/n
19da0 65 74 77 6f 72 6b 73 2f 64 61 74 61 2f 55 63 69 6e 65 74 2f 55 63 69 44 61 74 61 2e 68 74 6d 0a etworks/data/Ucinet/UciData.htm.
19dc0 0a 5a 61 63 68 61 72 79 20 57 2e 20 28 31 39 37 37 29 2e 0a 41 6e 20 69 6e 66 6f 72 6d 61 74 69 .Zachary.W..(1977)..An.informati
19de0 6f 6e 20 66 6c 6f 77 20 6d 6f 64 65 6c 20 66 6f 72 20 63 6f 6e 66 6c 69 63 74 20 61 6e 64 20 66 on.flow.model.for.conflict.and.f
19e00 69 73 73 69 6f 6e 20 69 6e 20 73 6d 61 6c 6c 20 67 72 6f 75 70 73 2e 0a 4a 6f 75 72 6e 61 6c 20 ission.in.small.groups..Journal.
19e20 6f 66 20 41 6e 74 68 72 6f 70 6f 6c 6f 67 69 63 61 6c 20 52 65 73 65 61 72 63 68 2c 20 33 33 2c of.Anthropological.Research,.33,
19e40 20 34 35 32 2d 34 37 33 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 .452-473.."""..import.matplotlib
19e60 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 .pyplot.as.plt.import.networkx.a
19e80 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 6b 61 72 61 74 65 5f 63 6c 75 62 5f 67 72 61 70 68 28 29 s.nx..G.=.nx.karate_club_graph()
19ea0 0a 70 72 69 6e 74 28 22 4e 6f 64 65 20 44 65 67 72 65 65 22 29 0a 66 6f 72 20 76 20 69 6e 20 47 .print("Node.Degree").for.v.in.G
19ec0 3a 0a 20 20 20 20 70 72 69 6e 74 28 66 22 7b 76 3a 34 7d 20 7b 47 2e 64 65 67 72 65 65 28 76 29 :.....print(f"{v:4}.{G.degree(v)
19ee0 3a 36 7d 22 29 0a 0a 6e 78 2e 64 72 61 77 5f 63 69 72 63 75 6c 61 72 28 47 2c 20 77 69 74 68 5f :6}")..nx.draw_circular(G,.with_
19f00 6c 61 62 65 6c 73 3d 54 72 75 65 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 labels=True).plt.show().PK......
19f20 00 00 08 7b 57 56 85 75 5f 5c 55 0b 00 00 55 0b 00 00 27 00 00 00 67 72 61 70 68 2f 70 6c 6f 74 ...{WV.u_\U...U...'...graph/plot
19f40 5f 6e 61 70 6f 6c 65 6f 6e 5f 72 75 73 73 69 61 6e 5f 63 61 6d 70 61 69 67 6e 2e 70 79 22 22 22 _napoleon_russian_campaign.py"""
19f60 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4e 61 70 6f 6c .=========================.Napol
19f80 65 6f 6e 20 52 75 73 73 69 61 6e 20 43 61 6d 70 61 69 67 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d eon.Russian.Campaign.===========
19fa0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 4d 69 6e 61 72 64 27 73 20 64 61 74 61 20 66 72 ==============..Minard's.data.fr
19fc0 6f 6d 20 4e 61 70 6f 6c 65 6f 6e 27 73 20 31 38 31 32 2d 31 38 31 33 20 20 52 75 73 73 69 61 6e om.Napoleon's.1812-1813..Russian
19fe0 20 43 61 6d 70 61 69 67 6e 2e 0a 68 74 74 70 73 3a 2f 2f 77 65 62 2e 61 72 63 68 69 76 65 2e 6f .Campaign..https://web.archive.o
1a000 72 67 2f 77 65 62 2f 32 30 30 38 30 31 31 32 30 34 32 36 35 36 2f 68 74 74 70 3a 2f 2f 77 77 77 rg/web/20080112042656/http://www
1a020 2e 6d 61 74 68 2e 79 6f 72 6b 75 2e 63 61 2f 53 43 53 2f 47 61 6c 6c 65 72 79 2f 6d 69 6e 61 72 .math.yorku.ca/SCS/Gallery/minar
1a040 64 2f 6d 69 6e 61 72 64 2e 74 78 74 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 d/minard.txt."""..import.matplot
1a060 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b lib.pyplot.as.plt.import.network
1a080 78 20 61 73 20 6e 78 0a 0a 0a 64 65 66 20 6d 69 6e 61 72 64 5f 67 72 61 70 68 28 29 3a 0a 20 20 x.as.nx...def.minard_graph():...
1a0a0 20 20 64 61 74 61 31 20 3d 20 22 22 22 5c 0a 32 34 2e 30 2c 35 34 2e 39 2c 33 34 30 30 30 30 2c ..data1.=."""\.24.0,54.9,340000,
1a0c0 41 2c 31 0a 32 34 2e 35 2c 35 35 2e 30 2c 33 34 30 30 30 30 2c 41 2c 31 0a 32 35 2e 35 2c 35 34 A,1.24.5,55.0,340000,A,1.25.5,54
1a0e0 2e 35 2c 33 34 30 30 30 30 2c 41 2c 31 0a 32 36 2e 30 2c 35 34 2e 37 2c 33 32 30 30 30 30 2c 41 .5,340000,A,1.26.0,54.7,320000,A
1a100 2c 31 0a 32 37 2e 30 2c 35 34 2e 38 2c 33 30 30 30 30 30 2c 41 2c 31 0a 32 38 2e 30 2c 35 34 2e ,1.27.0,54.8,300000,A,1.28.0,54.
1a120 39 2c 32 38 30 30 30 30 2c 41 2c 31 0a 32 38 2e 35 2c 35 35 2e 30 2c 32 34 30 30 30 30 2c 41 2c 9,280000,A,1.28.5,55.0,240000,A,
1a140 31 0a 32 39 2e 30 2c 35 35 2e 31 2c 32 31 30 30 30 30 2c 41 2c 31 0a 33 30 2e 30 2c 35 35 2e 32 1.29.0,55.1,210000,A,1.30.0,55.2
1a160 2c 31 38 30 30 30 30 2c 41 2c 31 0a 33 30 2e 33 2c 35 35 2e 33 2c 31 37 35 30 30 30 2c 41 2c 31 ,180000,A,1.30.3,55.3,175000,A,1
1a180 0a 33 32 2e 30 2c 35 34 2e 38 2c 31 34 35 30 30 30 2c 41 2c 31 0a 33 33 2e 32 2c 35 34 2e 39 2c .32.0,54.8,145000,A,1.33.2,54.9,
1a1a0 31 34 30 30 30 30 2c 41 2c 31 0a 33 34 2e 34 2c 35 35 2e 35 2c 31 32 37 31 30 30 2c 41 2c 31 0a 140000,A,1.34.4,55.5,127100,A,1.
1a1c0 33 35 2e 35 2c 35 35 2e 34 2c 31 30 30 30 30 30 2c 41 2c 31 0a 33 36 2e 30 2c 35 35 2e 35 2c 31 35.5,55.4,100000,A,1.36.0,55.5,1
1a1e0 30 30 30 30 30 2c 41 2c 31 0a 33 37 2e 36 2c 35 35 2e 38 2c 31 30 30 30 30 30 2c 41 2c 31 0a 33 00000,A,1.37.6,55.8,100000,A,1.3
1a200 37 2e 37 2c 35 35 2e 37 2c 31 30 30 30 30 30 2c 52 2c 31 0a 33 37 2e 35 2c 35 35 2e 37 2c 39 38 7.7,55.7,100000,R,1.37.5,55.7,98
1a220 30 30 30 2c 52 2c 31 0a 33 37 2e 30 2c 35 35 2e 30 2c 39 37 30 30 30 2c 52 2c 31 0a 33 36 2e 38 000,R,1.37.0,55.0,97000,R,1.36.8
1a240 2c 35 35 2e 30 2c 39 36 30 30 30 2c 52 2c 31 0a 33 35 2e 34 2c 35 35 2e 33 2c 38 37 30 30 30 2c ,55.0,96000,R,1.35.4,55.3,87000,
1a260 52 2c 31 0a 33 34 2e 33 2c 35 35 2e 32 2c 35 35 30 30 30 2c 52 2c 31 0a 33 33 2e 33 2c 35 34 2e R,1.34.3,55.2,55000,R,1.33.3,54.
1a280 38 2c 33 37 30 30 30 2c 52 2c 31 0a 33 32 2e 30 2c 35 34 2e 36 2c 32 34 30 30 30 2c 52 2c 31 0a 8,37000,R,1.32.0,54.6,24000,R,1.
1a2a0 33 30 2e 34 2c 35 34 2e 34 2c 32 30 30 30 30 2c 52 2c 31 0a 32 39 2e 32 2c 35 34 2e 33 2c 32 30 30.4,54.4,20000,R,1.29.2,54.3,20
1a2c0 30 30 30 2c 52 2c 31 0a 32 38 2e 35 2c 35 34 2e 32 2c 32 30 30 30 30 2c 52 2c 31 0a 32 38 2e 33 000,R,1.28.5,54.2,20000,R,1.28.3
1a2e0 2c 35 34 2e 33 2c 32 30 30 30 30 2c 52 2c 31 0a 32 37 2e 35 2c 35 34 2e 35 2c 32 30 30 30 30 2c ,54.3,20000,R,1.27.5,54.5,20000,
1a300 52 2c 31 0a 32 36 2e 38 2c 35 34 2e 33 2c 31 32 30 30 30 2c 52 2c 31 0a 32 36 2e 34 2c 35 34 2e R,1.26.8,54.3,12000,R,1.26.4,54.
1a320 34 2c 31 34 30 30 30 2c 52 2c 31 0a 32 35 2e 30 2c 35 34 2e 34 2c 38 30 30 30 2c 52 2c 31 0a 32 4,14000,R,1.25.0,54.4,8000,R,1.2
1a340 34 2e 34 2c 35 34 2e 34 2c 34 30 30 30 2c 52 2c 31 0a 32 34 2e 32 2c 35 34 2e 34 2c 34 30 30 30 4.4,54.4,4000,R,1.24.2,54.4,4000
1a360 2c 52 2c 31 0a 32 34 2e 31 2c 35 34 2e 34 2c 34 30 30 30 2c 52 2c 31 22 22 22 0a 20 20 20 20 64 ,R,1.24.1,54.4,4000,R,1""".....d
1a380 61 74 61 32 20 3d 20 22 22 22 5c 0a 32 34 2e 30 2c 35 35 2e 31 2c 36 30 30 30 30 2c 41 2c 32 0a ata2.=."""\.24.0,55.1,60000,A,2.
1a3a0 32 34 2e 35 2c 35 35 2e 32 2c 36 30 30 30 30 2c 41 2c 32 0a 32 35 2e 35 2c 35 34 2e 37 2c 36 30 24.5,55.2,60000,A,2.25.5,54.7,60
1a3c0 30 30 30 2c 41 2c 32 0a 32 36 2e 36 2c 35 35 2e 37 2c 34 30 30 30 30 2c 41 2c 32 0a 32 37 2e 34 000,A,2.26.6,55.7,40000,A,2.27.4
1a3e0 2c 35 35 2e 36 2c 33 33 30 30 30 2c 41 2c 32 0a 32 38 2e 37 2c 35 35 2e 35 2c 33 33 30 30 30 2c ,55.6,33000,A,2.28.7,55.5,33000,
1a400 52 2c 32 0a 32 39 2e 32 2c 35 34 2e 32 2c 33 30 30 30 30 2c 52 2c 32 0a 32 38 2e 35 2c 35 34 2e R,2.29.2,54.2,30000,R,2.28.5,54.
1a420 31 2c 33 30 30 30 30 2c 52 2c 32 0a 32 38 2e 33 2c 35 34 2e 32 2c 32 38 30 30 30 2c 52 2c 32 22 1,30000,R,2.28.3,54.2,28000,R,2"
1a440 22 22 0a 20 20 20 20 64 61 74 61 33 20 3d 20 22 22 22 5c 0a 32 34 2e 30 2c 35 35 2e 32 2c 32 32 "".....data3.=."""\.24.0,55.2,22
1a460 30 30 30 2c 41 2c 33 0a 32 34 2e 35 2c 35 35 2e 33 2c 32 32 30 30 30 2c 41 2c 33 0a 32 34 2e 36 000,A,3.24.5,55.3,22000,A,3.24.6
1a480 2c 35 35 2e 38 2c 36 30 30 30 2c 41 2c 33 0a 32 34 2e 36 2c 35 35 2e 38 2c 36 30 30 30 2c 52 2c ,55.8,6000,A,3.24.6,55.8,6000,R,
1a4a0 33 0a 32 34 2e 32 2c 35 34 2e 34 2c 36 30 30 30 2c 52 2c 33 0a 32 34 2e 31 2c 35 34 2e 34 2c 36 3.24.2,54.4,6000,R,3.24.1,54.4,6
1a4c0 30 30 30 2c 52 2c 33 22 22 22 0a 20 20 20 20 63 69 74 69 65 73 20 3d 20 22 22 22 5c 0a 32 34 2e 000,R,3""".....cities.=."""\.24.
1a4e0 30 2c 35 35 2e 30 2c 4b 6f 77 6e 6f 0a 32 35 2e 33 2c 35 34 2e 37 2c 57 69 6c 6e 61 0a 32 36 2e 0,55.0,Kowno.25.3,54.7,Wilna.26.
1a500 34 2c 35 34 2e 34 2c 53 6d 6f 72 67 6f 6e 69 0a 32 36 2e 38 2c 35 34 2e 33 2c 4d 6f 69 6f 64 65 4,54.4,Smorgoni.26.8,54.3,Moiode
1a520 78 6e 6f 0a 32 37 2e 37 2c 35 35 2e 32 2c 47 6c 6f 75 62 6f 6b 6f 65 0a 32 37 2e 36 2c 35 33 2e xno.27.7,55.2,Gloubokoe.27.6,53.
1a540 39 2c 4d 69 6e 73 6b 0a 32 38 2e 35 2c 35 34 2e 33 2c 53 74 75 64 69 65 6e 73 6b 61 0a 32 38 2e 9,Minsk.28.5,54.3,Studienska.28.
1a560 37 2c 35 35 2e 35 2c 50 6f 6c 6f 74 7a 6b 0a 32 39 2e 32 2c 35 34 2e 34 2c 42 6f 62 72 0a 33 30 7,55.5,Polotzk.29.2,54.4,Bobr.30
1a580 2e 32 2c 35 35 2e 33 2c 57 69 74 65 62 73 6b 0a 33 30 2e 34 2c 35 34 2e 35 2c 4f 72 73 63 68 61 .2,55.3,Witebsk.30.4,54.5,Orscha
1a5a0 0a 33 30 2e 34 2c 35 33 2e 39 2c 4d 6f 68 69 6c 6f 77 0a 33 32 2e 30 2c 35 34 2e 38 2c 53 6d 6f .30.4,53.9,Mohilow.32.0,54.8,Smo
1a5c0 6c 65 6e 73 6b 0a 33 33 2e 32 2c 35 34 2e 39 2c 44 6f 72 6f 67 6f 62 6f 75 67 65 0a 33 34 2e 33 lensk.33.2,54.9,Dorogobouge.34.3
1a5e0 2c 35 35 2e 32 2c 57 69 78 6d 61 0a 33 34 2e 34 2c 35 35 2e 35 2c 43 68 6a 61 74 0a 33 36 2e 30 ,55.2,Wixma.34.4,55.5,Chjat.36.0
1a600 2c 35 35 2e 35 2c 4d 6f 6a 61 69 73 6b 0a 33 37 2e 36 2c 35 35 2e 38 2c 4d 6f 73 63 6f 75 0a 33 ,55.5,Mojaisk.37.6,55.8,Moscou.3
1a620 36 2e 36 2c 35 35 2e 33 2c 54 61 72 61 6e 74 69 6e 6f 0a 33 36 2e 35 2c 35 35 2e 30 2c 4d 61 6c 6.6,55.3,Tarantino.36.5,55.0,Mal
1a640 6f 2d 4a 61 72 6f 73 65 77 69 69 22 22 22 0a 0a 20 20 20 20 63 20 3d 20 7b 7d 0a 20 20 20 20 66 o-Jarosewii"""......c.=.{}.....f
1a660 6f 72 20 6c 69 6e 65 20 69 6e 20 63 69 74 69 65 73 2e 73 70 6c 69 74 28 22 5c 6e 22 29 3a 0a 20 or.line.in.cities.split("\n"):..
1a680 20 20 20 20 20 20 20 78 2c 20 79 2c 20 6e 61 6d 65 20 3d 20 6c 69 6e 65 2e 73 70 6c 69 74 28 22 .......x,.y,.name.=.line.split("
1a6a0 2c 22 29 0a 20 20 20 20 20 20 20 20 63 5b 6e 61 6d 65 5d 20 3d 20 28 66 6c 6f 61 74 28 78 29 2c ,").........c[name].=.(float(x),
1a6c0 20 66 6c 6f 61 74 28 79 29 29 0a 0a 20 20 20 20 67 20 3d 20 5b 5d 0a 0a 20 20 20 20 66 6f 72 20 .float(y))......g.=.[]......for.
1a6e0 64 61 74 61 20 69 6e 20 5b 64 61 74 61 31 2c 20 64 61 74 61 32 2c 20 64 61 74 61 33 5d 3a 0a 20 data.in.[data1,.data2,.data3]:..
1a700 20 20 20 20 20 20 20 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 20 20 20 20 20 20 20 20 69 20 .......G.=.nx.Graph().........i.
1a720 3d 20 30 0a 20 20 20 20 20 20 20 20 47 2e 70 6f 73 20 3d 20 7b 7d 20 20 23 20 6c 6f 63 61 74 69 =.0.........G.pos.=.{}..#.locati
1a740 6f 6e 0a 20 20 20 20 20 20 20 20 47 2e 70 6f 70 20 3d 20 7b 7d 20 20 23 20 73 69 7a 65 0a 20 20 on.........G.pop.=.{}..#.size...
1a760 20 20 20 20 20 20 6c 61 73 74 20 3d 20 4e 6f 6e 65 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6c 69 ......last.=.None.........for.li
1a780 6e 65 20 69 6e 20 64 61 74 61 2e 73 70 6c 69 74 28 22 5c 6e 22 29 3a 0a 20 20 20 20 20 20 20 20 ne.in.data.split("\n"):.........
1a7a0 20 20 20 20 78 2c 20 79 2c 20 70 2c 20 72 2c 20 6e 20 3d 20 6c 69 6e 65 2e 73 70 6c 69 74 28 22 ....x,.y,.p,.r,.n.=.line.split("
1a7c0 2c 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 2e 70 6f 73 5b 69 5d 20 3d 20 28 66 6c 6f 61 ,").............G.pos[i].=.(floa
1a7e0 74 28 78 29 2c 20 66 6c 6f 61 74 28 79 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 2e 70 6f t(x),.float(y)).............G.po
1a800 70 5b 69 5d 20 3d 20 69 6e 74 28 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6c 61 73 p[i].=.int(p).............if.las
1a820 74 20 69 73 20 4e 6f 6e 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 20 t.is.None:.................last.
1a840 3d 20 69 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 =.i.............else:...........
1a860 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 69 2c 20 6c 61 73 74 2c 20 2a 2a 7b 72 3a 20 ......G.add_edge(i,.last,.**{r:.
1a880 69 6e 74 28 6e 29 7d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 20 3d 20 int(n)}).................last.=.
1a8a0 69 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 20 3d 20 69 20 2b 20 31 0a 20 20 20 20 20 20 20 20 i.............i.=.i.+.1.........
1a8c0 67 2e 61 70 70 65 6e 64 28 47 29 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 67 2c 20 63 0a 0a 0a 28 g.append(G)......return.g,.c...(
1a8e0 67 2c 20 63 69 74 79 29 20 3d 20 6d 69 6e 61 72 64 5f 67 72 61 70 68 28 29 0a 0a 70 6c 74 2e 66 g,.city).=.minard_graph()..plt.f
1a900 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 31 2c 20 35 29 29 0a 70 6c 74 2e 63 6c igure(1,.figsize=(11,.5)).plt.cl
1a920 66 28 29 0a 63 6f 6c 6f 72 73 20 3d 20 5b 22 62 22 2c 20 22 67 22 2c 20 22 72 22 5d 0a 66 6f 72 f().colors.=.["b",."g",."r"].for
1a940 20 47 20 69 6e 20 67 3a 0a 20 20 20 20 63 20 3d 20 63 6f 6c 6f 72 73 2e 70 6f 70 28 30 29 0a 20 .G.in.g:.....c.=.colors.pop(0)..
1a960 20 20 20 6e 6f 64 65 5f 73 69 7a 65 20 3d 20 5b 47 2e 70 6f 70 5b 6e 5d 20 2f 2f 20 33 30 30 20 ...node_size.=.[G.pop[n].//.300.
1a980 66 6f 72 20 6e 20 69 6e 20 47 5d 0a 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 for.n.in.G].....nx.draw_networkx
1a9a0 5f 65 64 67 65 73 28 47 2c 20 47 2e 70 6f 73 2c 20 65 64 67 65 5f 63 6f 6c 6f 72 3d 63 2c 20 77 _edges(G,.G.pos,.edge_color=c,.w
1a9c0 69 64 74 68 3d 34 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e idth=4,.alpha=0.5).....nx.draw_n
1a9e0 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 28 47 2c 20 47 2e 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a etworkx_nodes(G,.G.pos,.node_siz
1aa00 65 3d 6e 6f 64 65 5f 73 69 7a 65 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 63 2c 20 61 6c 70 68 61 e=node_size,.node_color=c,.alpha
1aa20 3d 30 2e 35 29 0a 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 6e 6f 64 65 73 =0.5).....nx.draw_networkx_nodes
1aa40 28 47 2c 20 47 2e 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 35 2c 20 6e 6f 64 65 5f 63 6f 6c (G,.G.pos,.node_size=5,.node_col
1aa60 6f 72 3d 22 6b 22 29 0a 0a 66 6f 72 20 63 20 69 6e 20 63 69 74 79 3a 0a 20 20 20 20 78 2c 20 79 or="k")..for.c.in.city:.....x,.y
1aa80 20 3d 20 63 69 74 79 5b 63 5d 0a 20 20 20 20 70 6c 74 2e 74 65 78 74 28 78 2c 20 79 20 2b 20 30 .=.city[c].....plt.text(x,.y.+.0
1aaa0 2e 31 2c 20 63 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 07 7b 57 56 .1,.c).plt.show().PK.........{WV
1aac0 0c 6c bc 07 cb 02 00 00 cb 02 00 00 1d 00 00 00 67 72 61 70 68 76 69 7a 5f 64 72 61 77 69 6e 67 .l..............graphviz_drawing
1aae0 2f 70 6c 6f 74 5f 67 72 69 64 2e 70 79 22 22 22 0a 32 44 20 47 72 69 64 0a 3d 3d 3d 3d 3d 3d 3d /plot_grid.py""".2D.Grid.=======
1ab00 0a 0a 49 6c 6c 75 73 74 72 61 74 65 20 60 7e 6e 65 74 77 6f 72 6b 78 2e 64 72 61 77 69 6e 67 2e ..Illustrate.`~networkx.drawing.
1ab20 6e 78 5f 61 67 72 61 70 68 2e 77 72 69 74 65 5f 64 6f 74 60 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 nx_agraph.write_dot`.in.conjunct
1ab40 69 6f 6e 20 77 69 74 68 20 74 68 65 0a 47 72 61 70 68 76 69 7a 20 63 6f 6d 6d 61 6e 64 20 6c 69 ion.with.the.Graphviz.command.li
1ab60 6e 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 63 72 65 61 74 65 20 76 69 73 75 61 6c 69 7a 61 ne.interface.to.create.visualiza
1ab80 74 69 6f 6e 73 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 tions.."""..import.matplotlib.py
1aba0 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e plot.as.plt.import.networkx.as.n
1abc0 78 0a 0a 23 20 25 25 0a 23 20 57 72 69 74 65 20 61 20 64 6f 74 20 66 69 6c 65 20 66 72 6f 6d 20 x..#.%%.#.Write.a.dot.file.from.
1abe0 61 20 6e 65 74 77 6f 72 6b 78 20 67 72 61 70 68 20 66 6f 72 20 66 75 72 74 68 65 72 20 70 72 6f a.networkx.graph.for.further.pro
1ac00 63 65 73 73 69 6e 67 20 77 69 74 68 20 67 72 61 70 68 76 69 7a 2e 0a 0a 47 20 3d 20 6e 78 2e 67 cessing.with.graphviz...G.=.nx.g
1ac20 72 69 64 5f 32 64 5f 67 72 61 70 68 28 35 2c 20 35 29 20 20 23 20 35 78 35 20 67 72 69 64 0a 23 rid_2d_graph(5,.5)..#.5x5.grid.#
1ac40 20 54 68 69 73 20 65 78 61 6d 70 6c 65 20 6e 65 65 64 73 20 47 72 61 70 68 76 69 7a 20 61 6e 64 .This.example.needs.Graphviz.and
1ac60 20 50 79 47 72 61 70 68 76 69 7a 0a 6e 78 2e 6e 78 5f 61 67 72 61 70 68 2e 77 72 69 74 65 5f 64 .PyGraphviz.nx.nx_agraph.write_d
1ac80 6f 74 28 47 2c 20 22 67 72 69 64 2e 64 6f 74 22 29 0a 23 20 48 61 76 69 6e 67 20 63 72 65 61 74 ot(G,."grid.dot").#.Having.creat
1aca0 65 64 20 74 68 65 20 64 6f 74 20 66 69 6c 65 2c 20 67 72 61 70 68 76 69 7a 20 63 61 6e 20 62 65 ed.the.dot.file,.graphviz.can.be
1acc0 20 69 6e 76 6f 6b 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0a 23 20 .invoked.via.the.command.line.#.
1ace0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6d 61 67 65 20 6f 6e 20 64 69 73 6b 2c 20 65 2e to.generate.an.image.on.disk,.e.
1ad00 67 2e 0a 70 72 69 6e 74 28 22 4e 6f 77 20 72 75 6e 3a 20 6e 65 61 74 6f 20 2d 54 70 73 20 67 72 g..print("Now.run:.neato.-Tps.gr
1ad20 69 64 2e 64 6f 74 20 3e 67 72 69 64 2e 70 73 22 29 0a 0a 23 20 41 6c 74 65 72 6e 61 74 69 76 65 id.dot.>grid.ps")..#.Alternative
1ad40 6c 79 2c 20 74 68 65 20 61 6e 64 20 69 6d 61 67 65 20 63 61 6e 20 62 65 20 63 72 65 61 74 65 64 ly,.the.and.image.can.be.created
1ad60 20 64 69 72 65 63 74 6c 79 20 76 69 61 20 41 47 72 61 70 68 2e 64 72 61 77 0a 41 20 3d 20 6e 78 .directly.via.AGraph.draw.A.=.nx
1ad80 2e 6e 78 5f 61 67 72 61 70 68 2e 74 6f 5f 61 67 72 61 70 68 28 47 29 0a 41 2e 64 72 61 77 28 22 .nx_agraph.to_agraph(G).A.draw("
1ada0 35 78 35 2e 70 6e 67 22 2c 20 70 72 6f 67 3d 22 6e 65 61 74 6f 22 29 0a 50 4b 03 04 14 00 00 00 5x5.png",.prog="neato").PK......
1adc0 00 00 06 7b 57 56 42 40 d4 07 62 02 00 00 62 02 00 00 23 00 00 00 67 72 61 70 68 76 69 7a 5f 64 ...{WVB@..b...b...#...graphviz_d
1ade0 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 63 6f 6e 76 65 72 73 69 6f 6e 2e 70 79 22 22 22 0a 43 6f 6e rawing/plot_conversion.py""".Con
1ae00 76 65 72 73 69 6f 6e 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 41 6e 20 65 78 61 6d 70 6c 65 20 73 version.----------..An.example.s
1ae20 68 6f 77 69 6e 67 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 howing.how.to.use.the.interface.
1ae40 74 6f 20 74 68 65 20 0a 60 70 79 67 72 61 70 68 76 69 7a 2e 41 47 72 61 70 68 60 20 63 6c 61 73 to.the..`pygraphviz.AGraph`.clas
1ae60 73 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 6f 20 61 6e 64 20 66 72 6f 6d 20 67 72 61 70 68 76 69 s.to.convert.to.and.from.graphvi
1ae80 7a 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 47 z.."""..import.networkx.as.nx..G
1aea0 20 3d 20 6e 78 2e 63 6f 6d 70 6c 65 74 65 5f 67 72 61 70 68 28 35 29 0a 41 20 3d 20 6e 78 2e 6e .=.nx.complete_graph(5).A.=.nx.n
1aec0 78 5f 61 67 72 61 70 68 2e 74 6f 5f 61 67 72 61 70 68 28 47 29 20 20 23 20 63 6f 6e 76 65 72 74 x_agraph.to_agraph(G)..#.convert
1aee0 20 74 6f 20 61 20 67 72 61 70 68 76 69 7a 20 67 72 61 70 68 0a 58 31 20 3d 20 6e 78 2e 6e 78 5f .to.a.graphviz.graph.X1.=.nx.nx_
1af00 61 67 72 61 70 68 2e 66 72 6f 6d 5f 61 67 72 61 70 68 28 41 29 20 20 23 20 63 6f 6e 76 65 72 74 agraph.from_agraph(A)..#.convert
1af20 20 62 61 63 6b 20 74 6f 20 6e 65 74 77 6f 72 6b 78 20 28 62 75 74 20 61 73 20 47 72 61 70 68 29 .back.to.networkx.(but.as.Graph)
1af40 0a 58 32 20 3d 20 6e 78 2e 47 72 61 70 68 28 41 29 20 20 23 20 66 61 6e 63 79 20 77 61 79 20 74 .X2.=.nx.Graph(A)..#.fancy.way.t
1af60 6f 20 64 6f 20 63 6f 6e 76 65 72 73 69 6f 6e 0a 47 31 20 3d 20 6e 78 2e 47 72 61 70 68 28 58 31 o.do.conversion.G1.=.nx.Graph(X1
1af80 29 20 20 23 20 6e 6f 77 20 6d 61 6b 65 20 69 74 20 61 20 47 72 61 70 68 0a 0a 41 2e 77 72 69 74 )..#.now.make.it.a.Graph..A.writ
1afa0 65 28 22 6b 35 2e 64 6f 74 22 29 20 20 23 20 77 72 69 74 65 20 74 6f 20 64 6f 74 20 66 69 6c 65 e("k5.dot")..#.write.to.dot.file
1afc0 0a 58 33 20 3d 20 6e 78 2e 6e 78 5f 61 67 72 61 70 68 2e 72 65 61 64 5f 64 6f 74 28 22 6b 35 2e .X3.=.nx.nx_agraph.read_dot("k5.
1afe0 64 6f 74 22 29 20 20 23 20 72 65 61 64 20 66 72 6f 6d 20 64 6f 74 66 69 6c 65 0a 0a 23 20 59 6f dot")..#.read.from.dotfile..#.Yo
1b000 75 20 63 61 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 20 2e 70 6e 67 20 64 69 72 65 63 74 6c 79 20 u.can.also.create..png.directly.
1b020 77 69 74 68 20 74 68 65 20 41 47 72 61 70 68 2e 64 72 61 77 20 6d 65 74 68 6f 64 0a 41 2e 64 72 with.the.AGraph.draw.method.A.dr
1b040 61 77 28 22 6b 35 2e 70 6e 67 22 2c 20 70 72 6f 67 3d 22 6e 65 61 74 6f 22 29 0a 50 4b 03 04 14 aw("k5.png",.prog="neato").PK...
1b060 00 00 00 00 00 06 7b 57 56 bd 2c e8 df b6 02 00 00 b6 02 00 00 23 00 00 00 67 72 61 70 68 76 69 ......{WV.,..........#...graphvi
1b080 7a 5f 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 61 74 74 72 69 62 75 74 65 73 2e 70 79 22 22 22 0a z_drawing/plot_attributes.py""".
1b0a0 41 74 74 72 69 62 75 74 65 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 6c 65 20 69 Attributes.==========..Example.i
1b0c0 6c 6c 75 73 74 72 61 74 69 6e 67 20 68 6f 77 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 6e 6f llustrating.how.attributes.of.no
1b0e0 64 65 73 2c 20 65 64 67 65 73 2c 20 61 6e 64 20 67 72 61 70 68 73 20 61 72 65 20 68 61 6e 64 6c des,.edges,.and.graphs.are.handl
1b100 65 64 0a 64 75 72 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 2f 66 72 6f 6d 20 60 7e 70 ed.during.conversion.to/from.`~p
1b120 79 67 72 61 70 68 76 69 7a 2e 41 47 72 61 70 68 60 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e ygraphviz.AGraph`.."""..import.n
1b140 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 47 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 0a 47 2e etworkx.as.nx..G.=.nx.Graph().G.
1b160 61 64 64 5f 65 64 67 65 28 31 2c 20 32 2c 20 63 6f 6c 6f 72 3d 22 72 65 64 22 29 0a 47 2e 61 64 add_edge(1,.2,.color="red").G.ad
1b180 64 5f 65 64 67 65 28 32 2c 20 33 2c 20 63 6f 6c 6f 72 3d 22 72 65 64 22 29 0a 47 2e 61 64 64 5f d_edge(2,.3,.color="red").G.add_
1b1a0 6e 6f 64 65 28 33 29 0a 47 2e 61 64 64 5f 6e 6f 64 65 28 34 29 0a 0a 41 20 3d 20 6e 78 2e 6e 78 node(3).G.add_node(4)..A.=.nx.nx
1b1c0 5f 61 67 72 61 70 68 2e 74 6f 5f 61 67 72 61 70 68 28 47 29 20 20 23 20 63 6f 6e 76 65 72 74 20 _agraph.to_agraph(G)..#.convert.
1b1e0 74 6f 20 61 20 67 72 61 70 68 76 69 7a 20 67 72 61 70 68 0a 41 2e 64 72 61 77 28 22 61 74 74 72 to.a.graphviz.graph.A.draw("attr
1b200 69 62 75 74 65 73 2e 70 6e 67 22 2c 20 70 72 6f 67 3d 22 6e 65 61 74 6f 22 29 20 20 23 20 44 72 ibutes.png",.prog="neato")..#.Dr
1b220 61 77 20 77 69 74 68 20 70 79 67 72 61 70 68 76 69 7a 0a 0a 23 20 63 6f 6e 76 65 72 74 20 62 61 aw.with.pygraphviz..#.convert.ba
1b240 63 6b 20 74 6f 20 6e 65 74 77 6f 72 6b 78 20 47 72 61 70 68 20 77 69 74 68 20 61 74 74 72 69 62 ck.to.networkx.Graph.with.attrib
1b260 75 74 65 73 20 6f 6e 20 65 64 67 65 73 20 61 6e 64 0a 23 20 64 65 66 61 75 6c 74 20 61 74 74 72 utes.on.edges.and.#.default.attr
1b280 69 62 75 74 65 73 20 61 73 20 64 69 63 74 69 6f 6e 61 72 79 20 64 61 74 61 0a 58 20 3d 20 6e 78 ibutes.as.dictionary.data.X.=.nx
1b2a0 2e 6e 78 5f 61 67 72 61 70 68 2e 66 72 6f 6d 5f 61 67 72 61 70 68 28 41 29 0a 70 72 69 6e 74 28 .nx_agraph.from_agraph(A).print(
1b2c0 22 65 64 67 65 73 22 29 0a 70 72 69 6e 74 28 6c 69 73 74 28 58 2e 65 64 67 65 73 28 64 61 74 61 "edges").print(list(X.edges(data
1b2e0 3d 54 72 75 65 29 29 29 0a 70 72 69 6e 74 28 22 64 65 66 61 75 6c 74 20 67 72 61 70 68 20 61 74 =True))).print("default.graph.at
1b300 74 72 69 62 75 74 65 73 22 29 0a 70 72 69 6e 74 28 58 2e 67 72 61 70 68 29 0a 70 72 69 6e 74 28 tributes").print(X.graph).print(
1b320 22 6e 6f 64 65 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 73 22 29 0a 70 72 69 6e 74 28 58 2e "node.node.attributes").print(X.
1b340 6e 6f 64 65 73 2e 64 61 74 61 28 54 72 75 65 29 29 0a 50 4b 03 04 14 00 00 00 00 00 07 7b 57 56 nodes.data(True)).PK.........{WV
1b360 c4 86 33 36 55 02 00 00 55 02 00 00 23 00 00 00 67 72 61 70 68 76 69 7a 5f 64 72 61 77 69 6e 67 ..36U...U...#...graphviz_drawing
1b380 2f 70 6c 6f 74 5f 6d 69 6e 69 5f 61 74 6c 61 73 2e 70 79 22 22 22 0a 41 74 6c 61 73 0a 3d 3d 3d /plot_mini_atlas.py""".Atlas.===
1b3a0 3d 3d 0a 0a 41 6e 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 69 6e 67 20 68 6f 77 20 74 6f 20 77 72 ==..An.example.showing.how.to.wr
1b3c0 69 74 65 20 66 69 72 73 74 20 32 30 20 67 72 61 70 68 73 20 66 72 6f 6d 20 74 68 65 20 67 72 61 ite.first.20.graphs.from.the.gra
1b3e0 70 68 20 61 74 6c 61 73 20 61 73 0a 67 72 61 70 68 76 69 7a 20 64 6f 74 20 66 69 6c 65 73 20 47 ph.atlas.as.graphviz.dot.files.G
1b400 6e 2e 64 6f 74 20 77 68 65 72 65 20 6e 3d 30 2c 31 39 2e 0a 0a 54 4f 44 4f 3a 20 64 6f 65 73 20 n.dot.where.n=0,19...TODO:.does.
1b420 6e 78 5f 61 67 72 61 70 68 2e 64 72 61 77 20 73 75 70 70 6f 72 74 20 6d 75 6c 74 69 70 6c 65 20 nx_agraph.draw.support.multiple.
1b440 67 72 61 70 68 73 20 69 6e 20 6f 6e 65 20 70 6e 67 3f 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e graphs.in.one.png?."""..import.n
1b460 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 61 74 6c 61 73 20 3d 20 6e 78 2e 67 72 61 70 68 5f etworkx.as.nx..atlas.=.nx.graph_
1b480 61 74 6c 61 73 5f 67 28 29 5b 30 3a 32 30 5d 0a 0a 66 6f 72 20 47 20 69 6e 20 61 74 6c 61 73 3a atlas_g()[0:20]..for.G.in.atlas:
1b4a0 0a 20 20 20 20 70 72 69 6e 74 28 47 29 0a 20 20 20 20 41 20 3d 20 6e 78 2e 6e 78 5f 61 67 72 61 .....print(G).....A.=.nx.nx_agra
1b4c0 70 68 2e 74 6f 5f 61 67 72 61 70 68 28 47 29 0a 20 20 20 20 41 2e 67 72 61 70 68 5f 61 74 74 72 ph.to_agraph(G).....A.graph_attr
1b4e0 5b 22 6c 61 62 65 6c 22 5d 20 3d 20 47 2e 6e 61 6d 65 0a 20 20 20 20 23 20 73 65 74 20 64 65 66 ["label"].=.G.name.....#.set.def
1b500 61 75 6c 74 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65 73 0a 20 20 20 20 41 2e 6e 6f 64 65 5f ault.node.attributes.....A.node_
1b520 61 74 74 72 5b 22 63 6f 6c 6f 72 22 5d 20 3d 20 22 72 65 64 22 0a 20 20 20 20 41 2e 6e 6f 64 65 attr["color"].=."red".....A.node
1b540 5f 61 74 74 72 5b 22 73 74 79 6c 65 22 5d 20 3d 20 22 66 69 6c 6c 65 64 22 0a 20 20 20 20 41 2e _attr["style"].=."filled".....A.
1b560 6e 6f 64 65 5f 61 74 74 72 5b 22 73 68 61 70 65 22 5d 20 3d 20 22 63 69 72 63 6c 65 22 0a 20 20 node_attr["shape"].=."circle"...
1b580 20 20 41 2e 77 72 69 74 65 28 47 2e 6e 61 6d 65 20 2b 20 22 2e 64 6f 74 22 29 0a 0a 23 20 44 72 ..A.write(G.name.+.".dot")..#.Dr
1b5a0 61 77 20 74 68 65 20 32 30 74 68 20 67 72 61 70 68 20 66 72 6f 6d 20 74 68 65 20 61 74 6c 61 73 aw.the.20th.graph.from.the.atlas
1b5c0 20 74 6f 20 70 6e 67 0a 41 2e 64 72 61 77 28 22 41 32 30 2e 70 6e 67 22 2c 20 70 72 6f 67 3d 22 .to.png.A.draw("A20.png",.prog="
1b5e0 6e 65 61 74 6f 22 29 0a 50 4b 03 04 14 00 00 00 00 00 05 7b 57 56 ce 9e 05 c7 50 04 00 00 50 04 neato").PK.........{WV....P...P.
1b600 00 00 25 00 00 00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 64 65 63 6f 6d ..%...graphviz_layout/plot_decom
1b620 70 6f 73 69 74 69 6f 6e 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 44 65 63 position.py""".=============.Dec
1b640 6f 6d 70 6f 73 69 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 6c omposition.=============..Exampl
1b660 65 20 6f 66 20 63 72 65 61 74 69 6e 67 20 61 20 6a 75 6e 63 74 69 6f 6e 20 74 72 65 65 20 66 72 e.of.creating.a.junction.tree.fr
1b680 6f 6d 20 61 20 64 69 72 65 63 74 65 64 20 67 72 61 70 68 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 om.a.directed.graph.."""..import
1b6a0 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 .matplotlib.pyplot.as.plt.import
1b6c0 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 42 20 3d 20 6e 78 2e 44 69 47 72 61 70 68 28 .networkx.as.nx..B.=.nx.DiGraph(
1b6e0 29 0a 42 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 5b 22 41 22 2c 20 22 42 22 2c 20 22 43 ).B.add_nodes_from(["A",."B",."C
1b700 22 2c 20 22 44 22 2c 20 22 45 22 2c 20 22 46 22 5d 29 0a 42 2e 61 64 64 5f 65 64 67 65 73 5f 66 ",."D",."E",."F"]).B.add_edges_f
1b720 72 6f 6d 28 0a 20 20 20 20 5b 28 22 41 22 2c 20 22 42 22 29 2c 20 28 22 41 22 2c 20 22 43 22 29 rom(.....[("A",."B"),.("A",."C")
1b740 2c 20 28 22 42 22 2c 20 22 44 22 29 2c 20 28 22 42 22 2c 20 22 46 22 29 2c 20 28 22 43 22 2c 20 ,.("B",."D"),.("B",."F"),.("C",.
1b760 22 45 22 29 2c 20 28 22 45 22 2c 20 22 46 22 29 5d 0a 29 0a 0a 6f 70 74 69 6f 6e 73 20 3d 20 7b "E"),.("E",."F")].)..options.=.{
1b780 22 77 69 74 68 5f 6c 61 62 65 6c 73 22 3a 20 54 72 75 65 2c 20 22 6e 6f 64 65 5f 63 6f 6c 6f 72 "with_labels":.True,."node_color
1b7a0 22 3a 20 22 77 68 69 74 65 22 2c 20 22 65 64 67 65 63 6f 6c 6f 72 73 22 3a 20 22 62 6c 75 65 22 ":."white",."edgecolors":."blue"
1b7c0 7d 0a 0a 66 69 67 20 3d 20 70 6c 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 36 2c 20 }..fig.=.plt.figure(figsize=(6,.
1b7e0 39 29 29 0a 61 78 67 72 69 64 20 3d 20 66 69 67 2e 61 64 64 5f 67 72 69 64 73 70 65 63 28 33 2c 9)).axgrid.=.fig.add_gridspec(3,
1b800 20 32 29 0a 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 61 78 67 72 69 .2)..ax1.=.fig.add_subplot(axgri
1b820 64 5b 30 2c 20 30 5d 29 0a 61 78 31 2e 73 65 74 5f 74 69 74 6c 65 28 22 42 61 79 65 73 69 61 6e d[0,.0]).ax1.set_title("Bayesian
1b840 20 4e 65 74 77 6f 72 6b 22 29 0a 70 6f 73 20 3d 20 6e 78 2e 6e 78 5f 61 67 72 61 70 68 2e 67 72 .Network").pos.=.nx.nx_agraph.gr
1b860 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 28 42 2c 20 70 72 6f 67 3d 22 6e 65 61 74 6f 22 29 0a 6e aphviz_layout(B,.prog="neato").n
1b880 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 42 2c 20 70 6f 73 3d 70 6f 73 2c 20 2a 2a 6f 70 x.draw_networkx(B,.pos=pos,.**op
1b8a0 74 69 6f 6e 73 29 0a 0a 6d 67 20 3d 20 6e 78 2e 6d 6f 72 61 6c 5f 67 72 61 70 68 28 42 29 0a 61 tions)..mg.=.nx.moral_graph(B).a
1b8c0 78 32 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 61 78 67 72 69 64 5b 30 2c 20 31 x2.=.fig.add_subplot(axgrid[0,.1
1b8e0 5d 2c 20 73 68 61 72 65 78 3d 61 78 31 2c 20 73 68 61 72 65 79 3d 61 78 31 29 0a 61 78 32 2e 73 ],.sharex=ax1,.sharey=ax1).ax2.s
1b900 65 74 5f 74 69 74 6c 65 28 22 4d 6f 72 61 6c 69 7a 65 64 20 47 72 61 70 68 22 29 0a 6e 78 2e 64 et_title("Moralized.Graph").nx.d
1b920 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 6d 67 2c 20 70 6f 73 3d 70 6f 73 2c 20 2a 2a 6f 70 74 69 raw_networkx(mg,.pos=pos,.**opti
1b940 6f 6e 73 29 0a 0a 6a 74 20 3d 20 6e 78 2e 6a 75 6e 63 74 69 6f 6e 5f 74 72 65 65 28 42 29 0a 61 ons)..jt.=.nx.junction_tree(B).a
1b960 78 33 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 61 78 67 72 69 64 5b 31 3a 2c 20 x3.=.fig.add_subplot(axgrid[1:,.
1b980 3a 5d 29 0a 61 78 33 2e 73 65 74 5f 74 69 74 6c 65 28 22 4a 75 6e 63 74 69 6f 6e 20 54 72 65 65 :]).ax3.set_title("Junction.Tree
1b9a0 22 29 0a 61 78 33 2e 6d 61 72 67 69 6e 73 28 30 2e 31 35 2c 20 30 2e 32 35 29 0a 6e 73 69 7a 65 ").ax3.margins(0.15,.0.25).nsize
1b9c0 20 3d 20 5b 32 30 30 30 20 2a 20 6c 65 6e 28 6e 29 20 66 6f 72 20 6e 20 69 6e 20 6c 69 73 74 28 .=.[2000.*.len(n).for.n.in.list(
1b9e0 6a 74 2e 6e 6f 64 65 73 28 29 29 5d 0a 70 6f 73 20 3d 20 6e 78 2e 6e 78 5f 61 67 72 61 70 68 2e jt.nodes())].pos.=.nx.nx_agraph.
1ba00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 28 6a 74 2c 20 70 72 6f 67 3d 22 6e 65 61 74 6f 22 graphviz_layout(jt,.prog="neato"
1ba20 29 0a 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 28 6a 74 2c 20 70 6f 73 3d 70 6f 73 2c 20 ).nx.draw_networkx(jt,.pos=pos,.
1ba40 6e 6f 64 65 5f 73 69 7a 65 3d 6e 73 69 7a 65 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 0a 70 6c 74 node_size=nsize,.**options)..plt
1ba60 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 .tight_layout().plt.show().PK...
1ba80 00 00 00 00 00 02 7b 57 56 3f 47 2f 07 94 05 00 00 94 05 00 00 1d 00 00 00 67 72 61 70 68 76 69 ......{WV?G/.............graphvi
1baa0 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 61 74 6c 61 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 0a z_layout/plot_atlas.py""".=====.
1bac0 41 74 6c 61 73 0a 3d 3d 3d 3d 3d 0a 0a 41 74 6c 61 73 20 6f 66 20 61 6c 6c 20 63 6f 6e 6e 65 63 Atlas.=====..Atlas.of.all.connec
1bae0 74 65 64 20 67 72 61 70 68 73 20 77 69 74 68 20 75 70 20 74 6f 20 36 20 6e 6f 64 65 73 2e 0a 0a ted.graphs.with.up.to.6.nodes...
1bb00 54 68 69 73 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 47 72 61 70 68 76 69 7a 20 76 69 61 20 50 This.example.uses.Graphviz.via.P
1bb20 79 47 72 61 70 68 76 69 7a 2e 0a 0a 54 68 65 20 69 6d 61 67 65 20 73 68 6f 75 6c 64 20 73 68 6f yGraphviz...The.image.should.sho
1bb40 77 20 31 34 32 20 67 72 61 70 68 73 2e 0a 57 65 20 64 6f 6e 27 74 20 70 6c 6f 74 20 74 68 65 20 w.142.graphs..We.don't.plot.the.
1bb60 65 6d 70 74 79 20 67 72 61 70 68 20 6e 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 6e 6f 64 65 20 empty.graph.nor.the.single.node.
1bb80 67 72 61 70 68 2e 0a 28 31 34 32 20 69 73 20 74 68 65 20 73 75 6d 20 6f 66 20 76 61 6c 75 65 73 graph..(142.is.the.sum.of.values
1bba0 20 32 20 74 6f 20 6e 3d 36 20 69 6e 20 73 65 71 75 65 6e 63 65 20 6f 65 69 73 2e 6f 72 67 2f 41 .2.to.n=6.in.sequence.oeis.org/A
1bbc0 30 30 31 33 34 39 29 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 72 61 6e 64 6f 6d 0a 0a 69 6d 70 001349).."""..import.random..imp
1bbe0 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 ort.matplotlib.pyplot.as.plt.imp
1bc00 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 0a 0a 47 72 61 70 68 4d 61 74 63 68 65 ort.networkx.as.nx...GraphMatche
1bc20 72 20 3d 20 6e 78 2e 69 73 6f 6d 6f 72 70 68 69 73 6d 2e 76 66 32 75 73 65 72 66 75 6e 63 2e 47 r.=.nx.isomorphism.vf2userfunc.G
1bc40 72 61 70 68 4d 61 74 63 68 65 72 0a 0a 0a 64 65 66 20 61 74 6c 61 73 36 28 29 3a 0a 20 20 20 20 raphMatcher...def.atlas6():.....
1bc60 22 22 22 52 65 74 75 72 6e 20 74 68 65 20 61 74 6c 61 73 20 6f 66 20 61 6c 6c 20 63 6f 6e 6e 65 """Return.the.atlas.of.all.conne
1bc80 63 74 65 64 20 67 72 61 70 68 73 20 77 69 74 68 20 61 74 20 6d 6f 73 74 20 36 20 6e 6f 64 65 73 cted.graphs.with.at.most.6.nodes
1bca0 22 22 22 0a 0a 20 20 20 20 41 74 6c 61 73 20 3d 20 6e 78 2e 67 72 61 70 68 5f 61 74 6c 61 73 5f """......Atlas.=.nx.graph_atlas_
1bcc0 67 28 29 5b 33 3a 32 30 39 5d 20 20 23 20 30 2c 20 31 2c 20 32 20 3d 3e 20 6e 6f 20 65 64 67 65 g()[3:209]..#.0,.1,.2.=>.no.edge
1bce0 73 2e 20 32 30 38 20 69 73 20 6c 61 73 74 20 36 20 6e 6f 64 65 20 67 72 61 70 68 0a 20 20 20 20 s..208.is.last.6.node.graph.....
1bd00 55 20 3d 20 6e 78 2e 47 72 61 70 68 28 29 20 20 23 20 67 72 61 70 68 20 66 6f 72 20 75 6e 69 6f U.=.nx.Graph()..#.graph.for.unio
1bd20 6e 20 6f 66 20 61 6c 6c 20 67 72 61 70 68 73 20 69 6e 20 61 74 6c 61 73 0a 20 20 20 20 66 6f 72 n.of.all.graphs.in.atlas.....for
1bd40 20 47 20 69 6e 20 41 74 6c 61 73 3a 0a 20 20 20 20 20 20 20 20 23 20 63 68 65 63 6b 20 69 66 20 .G.in.Atlas:.........#.check.if.
1bd60 63 6f 6e 6e 65 63 74 65 64 0a 20 20 20 20 20 20 20 20 69 66 20 6e 78 2e 6e 75 6d 62 65 72 5f 63 connected.........if.nx.number_c
1bd80 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 20 3d 3d 20 31 3a 0a 20 20 20 onnected_components(G).==.1:....
1bda0 20 20 20 20 20 20 20 20 20 23 20 63 68 65 63 6b 20 69 66 20 69 73 6f 6d 6f 72 70 68 69 63 20 74 .........#.check.if.isomorphic.t
1bdc0 6f 20 61 20 70 72 65 76 69 6f 75 73 20 67 72 61 70 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 o.a.previous.graph.............i
1bde0 66 20 6e 6f 74 20 47 72 61 70 68 4d 61 74 63 68 65 72 28 55 2c 20 47 29 2e 73 75 62 67 72 61 70 f.not.GraphMatcher(U,.G).subgrap
1be00 68 5f 69 73 5f 69 73 6f 6d 6f 72 70 68 69 63 28 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 h_is_isomorphic():..............
1be20 20 20 20 55 20 3d 20 6e 78 2e 64 69 73 6a 6f 69 6e 74 5f 75 6e 69 6f 6e 28 55 2c 20 47 29 0a 20 ...U.=.nx.disjoint_union(U,.G)..
1be40 20 20 20 72 65 74 75 72 6e 20 55 0a 0a 0a 47 20 3d 20 61 74 6c 61 73 36 28 29 0a 0a 70 72 69 6e ...return.U...G.=.atlas6()..prin
1be60 74 28 47 29 0a 70 72 69 6e 74 28 6e 78 2e 6e 75 6d 62 65 72 5f 63 6f 6e 6e 65 63 74 65 64 5f 63 t(G).print(nx.number_connected_c
1be80 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 2c 20 22 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 omponents(G),."connected.compone
1bea0 6e 74 73 22 29 0a 0a 70 6c 74 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c nts")..plt.figure(1,.figsize=(8,
1bec0 20 38 29 29 0a 23 20 6c 61 79 6f 75 74 20 67 72 61 70 68 73 20 77 69 74 68 20 70 6f 73 69 74 69 .8)).#.layout.graphs.with.positi
1bee0 6f 6e 73 20 75 73 69 6e 67 20 67 72 61 70 68 76 69 7a 20 6e 65 61 74 6f 0a 70 6f 73 20 3d 20 6e ons.using.graphviz.neato.pos.=.n
1bf00 78 2e 6e 78 5f 61 67 72 61 70 68 2e 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 28 47 2c 20 70 x.nx_agraph.graphviz_layout(G,.p
1bf20 72 6f 67 3d 22 6e 65 61 74 6f 22 29 0a 23 20 63 6f 6c 6f 72 20 6e 6f 64 65 73 20 74 68 65 20 73 rog="neato").#.color.nodes.the.s
1bf40 61 6d 65 20 69 6e 20 65 61 63 68 20 63 6f 6e 6e 65 63 74 65 64 20 73 75 62 67 72 61 70 68 0a 43 ame.in.each.connected.subgraph.C
1bf60 20 3d 20 28 47 2e 73 75 62 67 72 61 70 68 28 63 29 20 66 6f 72 20 63 20 69 6e 20 6e 78 2e 63 6f .=.(G.subgraph(c).for.c.in.nx.co
1bf80 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 29 0a 66 6f 72 20 67 20 69 6e 20 nnected_components(G)).for.g.in.
1bfa0 43 3a 0a 20 20 20 20 63 20 3d 20 5b 72 61 6e 64 6f 6d 2e 72 61 6e 64 6f 6d 28 29 5d 20 2a 20 6e C:.....c.=.[random.random()].*.n
1bfc0 78 2e 6e 75 6d 62 65 72 5f 6f 66 5f 6e 6f 64 65 73 28 67 29 20 20 23 20 72 61 6e 64 6f 6d 20 63 x.number_of_nodes(g)..#.random.c
1bfe0 6f 6c 6f 72 2e 2e 2e 0a 20 20 20 20 6e 78 2e 64 72 61 77 28 67 2c 20 70 6f 73 2c 20 6e 6f 64 65 olor........nx.draw(g,.pos,.node
1c000 5f 73 69 7a 65 3d 34 30 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 63 2c 20 76 6d 69 6e 3d 30 2e 30 _size=40,.node_color=c,.vmin=0.0
1c020 2c 20 76 6d 61 78 3d 31 2e 30 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 61 6c 73 65 29 0a 70 ,.vmax=1.0,.with_labels=False).p
1c040 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 05 7b 57 56 e6 71 7f ce bb 06 00 00 lt.show().PK.........{WV.q......
1c060 bb 06 00 00 27 00 00 00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 67 69 61 ....'...graphviz_layout/plot_gia
1c080 6e 74 5f 63 6f 6d 70 6f 6e 65 6e 74 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d nt_component.py""".=============
1c0a0 3d 3d 0a 47 69 61 6e 74 20 43 6f 6d 70 6f 6e 65 6e 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ==.Giant.Component.=============
1c0c0 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 ==..This.example.illustrates.the
1c0e0 20 73 75 64 64 65 6e 20 61 70 70 65 61 72 61 6e 63 65 20 6f 66 20 61 0a 67 69 61 6e 74 20 63 6f .sudden.appearance.of.a.giant.co
1c100 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 20 61 20 62 69 6e 6f 6d 69 61 6c 20 nnected.component.in.a.binomial.
1c120 72 61 6e 64 6f 6d 20 67 72 61 70 68 2e 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 6e 65 65 64 random.graph...This.example.need
1c140 73 20 47 72 61 70 68 76 69 7a 20 61 6e 64 20 50 79 47 72 61 70 68 76 69 7a 2e 0a 22 22 22 0a 0a s.Graphviz.and.PyGraphviz.."""..
1c160 69 6d 70 6f 72 74 20 6d 61 74 68 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 import.math..import.matplotlib.p
1c180 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 yplot.as.plt.import.networkx.as.
1c1a0 6e 78 0a 0a 6e 20 3d 20 31 35 30 20 20 23 20 31 35 30 20 6e 6f 64 65 73 0a 23 20 70 20 76 61 6c nx..n.=.150..#.150.nodes.#.p.val
1c1c0 75 65 20 61 74 20 77 68 69 63 68 20 67 69 61 6e 74 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 6f 66 20 ue.at.which.giant.component.(of.
1c1e0 73 69 7a 65 20 6c 6f 67 28 6e 29 20 6e 6f 64 65 73 29 20 69 73 20 65 78 70 65 63 74 65 64 0a 70 size.log(n).nodes).is.expected.p
1c200 5f 67 69 61 6e 74 20 3d 20 31 2e 30 20 2f 20 28 6e 20 2d 20 31 29 0a 23 20 70 20 76 61 6c 75 65 _giant.=.1.0./.(n.-.1).#.p.value
1c220 20 61 74 20 77 68 69 63 68 20 67 72 61 70 68 20 69 73 20 65 78 70 65 63 74 65 64 20 74 6f 20 62 .at.which.graph.is.expected.to.b
1c240 65 63 6f 6d 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 63 6f 6e 6e 65 63 74 65 64 0a 70 5f 63 6f 6e ecome.completely.connected.p_con
1c260 6e 20 3d 20 6d 61 74 68 2e 6c 6f 67 28 6e 29 20 2f 20 6e 0a 0a 23 20 74 68 65 20 66 6f 6c 6c 6f n.=.math.log(n)./.n..#.the.follo
1c280 77 69 6e 67 20 72 61 6e 67 65 20 6f 66 20 70 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 wing.range.of.p.values.should.be
1c2a0 20 63 6c 6f 73 65 20 74 6f 20 74 68 65 20 74 68 72 65 73 68 6f 6c 64 0a 70 76 61 6c 73 20 3d 20 .close.to.the.threshold.pvals.=.
1c2c0 5b 30 2e 30 30 33 2c 20 30 2e 30 30 36 2c 20 30 2e 30 30 38 2c 20 30 2e 30 31 35 5d 0a 0a 66 69 [0.003,.0.006,.0.008,.0.015]..fi
1c2e0 67 2c 20 61 78 65 73 20 3d 20 70 6c 74 2e 73 75 62 70 6c 6f 74 73 28 32 2c 20 32 29 0a 66 6f 72 g,.axes.=.plt.subplots(2,.2).for
1c300 20 70 2c 20 61 78 2c 20 73 65 65 64 20 69 6e 20 7a 69 70 28 70 76 61 6c 73 2c 20 61 78 65 73 2e .p,.ax,.seed.in.zip(pvals,.axes.
1c320 72 61 76 65 6c 28 29 2c 20 72 61 6e 67 65 28 6c 65 6e 28 70 76 61 6c 73 29 29 29 3a 0a 20 20 20 ravel(),.range(len(pvals))):....
1c340 20 23 23 23 23 20 67 65 6e 65 72 61 74 65 20 67 72 61 70 68 20 23 23 23 23 0a 20 20 20 20 47 20 .####.generate.graph.####.....G.
1c360 3d 20 6e 78 2e 62 69 6e 6f 6d 69 61 6c 5f 67 72 61 70 68 28 6e 2c 20 70 2c 20 73 65 65 64 3d 73 =.nx.binomial_graph(n,.p,.seed=s
1c380 65 65 64 29 0a 20 20 20 20 23 20 69 64 65 6e 74 69 66 79 20 63 6f 6e 6e 65 63 74 65 64 2f 64 69 eed).....#.identify.connected/di
1c3a0 73 63 6f 6e 6e 65 63 74 65 64 20 6e 6f 64 65 73 0a 20 20 20 20 63 6f 6e 6e 65 63 74 65 64 20 3d sconnected.nodes.....connected.=
1c3c0 20 5b 6e 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 47 2e 64 65 67 72 65 65 28 29 20 69 66 20 64 20 .[n.for.n,.d.in.G.degree().if.d.
1c3e0 3e 20 30 5d 0a 20 20 20 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 3d 20 6c 69 73 74 28 73 65 74 >.0].....disconnected.=.list(set
1c400 28 47 2e 6e 6f 64 65 73 28 29 29 20 2d 20 73 65 74 28 63 6f 6e 6e 65 63 74 65 64 29 29 0a 20 20 (G.nodes()).-.set(connected))...
1c420 20 20 23 20 69 64 65 6e 74 69 66 79 20 6c 61 72 67 65 73 74 20 63 6f 6e 6e 65 63 74 65 64 20 63 ..#.identify.largest.connected.c
1c440 6f 6d 70 6f 6e 65 6e 74 0a 20 20 20 20 47 63 63 20 3d 20 73 6f 72 74 65 64 28 6e 78 2e 63 6f 6e omponent.....Gcc.=.sorted(nx.con
1c460 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 2c 20 6b 65 79 3d 6c 65 6e 2c 20 72 nected_components(G),.key=len,.r
1c480 65 76 65 72 73 65 3d 54 72 75 65 29 0a 20 20 20 20 47 30 20 3d 20 47 2e 73 75 62 67 72 61 70 68 everse=True).....G0.=.G.subgraph
1c4a0 28 47 63 63 5b 30 5d 29 0a 20 20 20 20 23 23 23 23 20 64 72 61 77 20 67 72 61 70 68 20 23 23 23 (Gcc[0]).....####.draw.graph.###
1c4c0 23 0a 20 20 20 20 70 6f 73 20 3d 20 6e 78 2e 6e 78 5f 61 67 72 61 70 68 2e 67 72 61 70 68 76 69 #.....pos.=.nx.nx_agraph.graphvi
1c4e0 7a 5f 6c 61 79 6f 75 74 28 47 29 0a 20 20 20 20 61 78 2e 73 65 74 5f 74 69 74 6c 65 28 66 22 70 z_layout(G).....ax.set_title(f"p
1c500 20 3d 20 7b 70 3a 2e 33 66 7d 22 29 0a 20 20 20 20 23 20 64 72 61 77 20 6c 61 72 67 65 73 74 20 .=.{p:.3f}").....#.draw.largest.
1c520 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 0a 20 20 20 20 6f 70 74 69 6f 6e 73 20 connected.component.....options.
1c540 3d 20 7b 22 61 78 22 3a 20 61 78 2c 20 22 65 64 67 65 5f 63 6f 6c 6f 72 22 3a 20 22 74 61 62 3a =.{"ax":.ax,."edge_color":."tab:
1c560 72 65 64 22 7d 0a 20 20 20 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 red"}.....nx.draw_networkx_edges
1c580 28 47 30 2c 20 70 6f 73 2c 20 77 69 64 74 68 3d 36 2e 30 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a (G0,.pos,.width=6.0,.**options).
1c5a0 20 20 20 20 23 20 64 72 61 77 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f ....#.draw.other.connected.compo
1c5c0 6e 65 6e 74 73 0a 20 20 20 20 66 6f 72 20 47 69 20 69 6e 20 47 63 63 5b 31 3a 5d 3a 0a 20 20 20 nents.....for.Gi.in.Gcc[1:]:....
1c5e0 20 20 20 20 20 69 66 20 6c 65 6e 28 47 69 29 20 3e 20 31 3a 0a 20 20 20 20 20 20 20 20 20 20 20 .....if.len(Gi).>.1:............
1c600 20 6e 78 2e 64 72 61 77 5f 6e 65 74 77 6f 72 6b 78 5f 65 64 67 65 73 28 47 2e 73 75 62 67 72 61 .nx.draw_networkx_edges(G.subgra
1c620 70 68 28 47 69 29 2c 20 70 6f 73 2c 20 61 6c 70 68 61 3d 30 2e 33 2c 20 77 69 64 74 68 3d 35 2e ph(Gi),.pos,.alpha=0.3,.width=5.
1c640 30 2c 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 20 20 20 20 23 20 64 72 61 77 20 63 6f 6e 6e 65 63 74 0,.**options).....#.draw.connect
1c660 65 64 2f 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 6e 6f 64 65 73 0a 20 20 20 20 6f 70 74 69 6f 6e ed/disconnected.nodes.....option
1c680 73 20 3d 20 7b 22 61 78 22 3a 20 61 78 2c 20 22 6e 6f 64 65 5f 73 69 7a 65 22 3a 20 33 30 2c 20 s.=.{"ax":.ax,."node_size":.30,.
1c6a0 22 65 64 67 65 63 6f 6c 6f 72 73 22 3a 20 22 77 68 69 74 65 22 7d 0a 20 20 20 20 6e 78 2e 64 72 "edgecolors":."white"}.....nx.dr
1c6c0 61 77 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 65 6c 69 73 74 3d 63 6f 6e 6e 65 63 74 65 64 2c 20 2a aw(G,.pos,.nodelist=connected,.*
1c6e0 2a 6f 70 74 69 6f 6e 73 29 0a 20 20 20 20 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 6e 6f *options).....nx.draw(G,.pos,.no
1c700 64 65 6c 69 73 74 3d 64 69 73 63 6f 6e 6e 65 63 74 65 64 2c 20 61 6c 70 68 61 3d 30 2e 32 35 2c delist=disconnected,.alpha=0.25,
1c720 20 2a 2a 6f 70 74 69 6f 6e 73 29 0a 66 69 67 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 .**options).fig.tight_layout().p
1c740 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 05 7b 57 56 7d af ce 32 76 01 00 00 lt.show().PK.........{WV}..2v...
1c760 76 01 00 00 25 00 00 00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 63 69 72 v...%...graphviz_layout/plot_cir
1c780 63 75 6c 61 72 5f 74 72 65 65 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 43 cular_tree.py""".=============.C
1c7a0 69 72 63 75 6c 61 72 20 54 72 65 65 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 ircular.Tree.=============..This
1c7c0 20 65 78 61 6d 70 6c 65 20 6e 65 65 64 73 20 47 72 61 70 68 76 69 7a 20 61 6e 64 20 50 79 47 72 .example.needs.Graphviz.and.PyGr
1c7e0 61 70 68 76 69 7a 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 aphviz.."""..import.matplotlib.p
1c800 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 yplot.as.plt.import.networkx.as.
1c820 6e 78 0a 0a 47 20 3d 20 6e 78 2e 62 61 6c 61 6e 63 65 64 5f 74 72 65 65 28 33 2c 20 35 29 0a 70 nx..G.=.nx.balanced_tree(3,.5).p
1c840 6f 73 20 3d 20 6e 78 2e 6e 78 5f 61 67 72 61 70 68 2e 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 os.=.nx.nx_agraph.graphviz_layou
1c860 74 28 47 2c 20 70 72 6f 67 3d 22 74 77 6f 70 69 22 2c 20 61 72 67 73 3d 22 22 29 0a 70 6c 74 2e t(G,.prog="twopi",.args="").plt.
1c880 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 38 2c 20 38 29 29 0a 6e 78 2e 64 72 61 77 28 47 figure(figsize=(8,.8)).nx.draw(G
1c8a0 2c 20 70 6f 73 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 32 30 2c 20 61 6c 70 68 61 3d 30 2e 35 2c 20 ,.pos,.node_size=20,.alpha=0.5,.
1c8c0 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 22 62 6c 75 65 22 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 3d 46 node_color="blue",.with_labels=F
1c8e0 61 6c 73 65 29 0a 70 6c 74 2e 61 78 69 73 28 22 65 71 75 61 6c 22 29 0a 70 6c 74 2e 73 68 6f 77 alse).plt.axis("equal").plt.show
1c900 28 29 0a 50 4b 03 04 14 00 00 00 00 00 06 7b 57 56 7f 36 18 54 10 06 00 00 10 06 00 00 23 00 00 ().PK.........{WV.6.T........#..
1c920 00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 6c 61 6e 6c 5f 72 6f 75 74 65 .graphviz_layout/plot_lanl_route
1c940 73 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4c 61 6e 6c 20 52 6f 75 74 65 73 0a s.py""".===========.Lanl.Routes.
1c960 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 52 6f 75 74 65 73 20 74 6f 20 4c 41 4e 4c 20 66 72 6f 6d ===========..Routes.to.LANL.from
1c980 20 31 38 36 20 73 69 74 65 73 20 6f 6e 20 74 68 65 20 49 6e 74 65 72 6e 65 74 2e 0a 0a 54 68 65 .186.sites.on.the.Internet...The
1c9a0 20 64 61 74 61 20 66 69 6c 65 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 61 74 3a 0a 0a 2d 20 68 .data.file.can.be.found.at:..-.h
1c9c0 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6e 65 74 77 6f 72 6b 78 2f 6e 65 74 77 6f ttps://github.com/networkx/netwo
1c9e0 72 6b 78 2f 62 6c 6f 62 2f 6d 61 69 6e 2f 65 78 61 6d 70 6c 65 73 2f 67 72 61 70 68 76 69 7a 5f rkx/blob/main/examples/graphviz_
1ca00 6c 61 79 6f 75 74 2f 6c 61 6e 6c 5f 72 6f 75 74 65 73 2e 65 64 67 65 6c 69 73 74 0a 0a 54 68 69 layout/lanl_routes.edgelist..Thi
1ca20 73 20 65 78 61 6d 70 6c 65 20 6e 65 65 64 73 20 47 72 61 70 68 76 69 7a 20 61 6e 64 20 50 79 47 s.example.needs.Graphviz.and.PyG
1ca40 72 61 70 68 76 69 7a 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e raphviz.."""..import.matplotlib.
1ca60 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 pyplot.as.plt.import.networkx.as
1ca80 20 6e 78 0a 0a 0a 64 65 66 20 6c 61 6e 6c 5f 67 72 61 70 68 28 29 3a 0a 20 20 20 20 22 22 22 52 .nx...def.lanl_graph():....."""R
1caa0 65 74 75 72 6e 20 74 68 65 20 6c 61 6e 6c 20 69 6e 74 65 72 6e 65 74 20 76 69 65 77 20 67 72 61 eturn.the.lanl.internet.view.gra
1cac0 70 68 20 66 72 6f 6d 20 6c 61 6e 6c 2e 65 64 67 65 73 22 22 22 0a 20 20 20 20 74 72 79 3a 0a 20 ph.from.lanl.edges""".....try:..
1cae0 20 20 20 20 20 20 20 66 68 20 3d 20 6f 70 65 6e 28 22 6c 61 6e 6c 5f 72 6f 75 74 65 73 2e 65 64 .......fh.=.open("lanl_routes.ed
1cb00 67 65 6c 69 73 74 22 29 0a 20 20 20 20 65 78 63 65 70 74 20 4f 53 45 72 72 6f 72 3a 0a 20 20 20 gelist").....except.OSError:....
1cb20 20 20 20 20 20 70 72 69 6e 74 28 22 6c 61 6e 6c 2e 65 64 67 65 73 20 6e 6f 74 20 66 6f 75 6e 64 .....print("lanl.edges.not.found
1cb40 22 29 0a 20 20 20 20 20 20 20 20 72 61 69 73 65 0a 0a 20 20 20 20 47 20 3d 20 6e 78 2e 47 72 61 ").........raise......G.=.nx.Gra
1cb60 70 68 28 29 0a 0a 20 20 20 20 74 69 6d 65 20 3d 20 7b 7d 0a 20 20 20 20 74 69 6d 65 5b 30 5d 20 ph()......time.=.{}.....time[0].
1cb80 3d 20 30 20 20 23 20 61 73 73 69 67 6e 20 30 20 74 6f 20 63 65 6e 74 65 72 20 6e 6f 64 65 0a 20 =.0..#.assign.0.to.center.node..
1cba0 20 20 20 66 6f 72 20 6c 69 6e 65 20 69 6e 20 66 68 2e 72 65 61 64 6c 69 6e 65 73 28 29 3a 0a 20 ...for.line.in.fh.readlines():..
1cbc0 20 20 20 20 20 20 20 28 68 65 61 64 2c 20 74 61 69 6c 2c 20 72 74 74 29 20 3d 20 6c 69 6e 65 2e .......(head,.tail,.rtt).=.line.
1cbe0 73 70 6c 69 74 28 29 0a 20 20 20 20 20 20 20 20 47 2e 61 64 64 5f 65 64 67 65 28 69 6e 74 28 68 split().........G.add_edge(int(h
1cc00 65 61 64 29 2c 20 69 6e 74 28 74 61 69 6c 29 29 0a 20 20 20 20 20 20 20 20 74 69 6d 65 5b 69 6e ead),.int(tail)).........time[in
1cc20 74 28 68 65 61 64 29 5d 20 3d 20 66 6c 6f 61 74 28 72 74 74 29 0a 0a 20 20 20 20 23 20 67 65 74 t(head)].=.float(rtt)......#.get
1cc40 20 6c 61 72 67 65 73 74 20 63 6f 6d 70 6f 6e 65 6e 74 20 61 6e 64 20 61 73 73 69 67 6e 20 70 69 .largest.component.and.assign.pi
1cc60 6e 67 20 74 69 6d 65 73 20 74 6f 20 47 30 74 69 6d 65 20 64 69 63 74 69 6f 6e 61 72 79 0a 20 20 ng.times.to.G0time.dictionary...
1cc80 20 20 47 63 63 20 3d 20 73 6f 72 74 65 64 28 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 ..Gcc.=.sorted(nx.connected_comp
1cca0 6f 6e 65 6e 74 73 28 47 29 2c 20 6b 65 79 3d 6c 65 6e 2c 20 72 65 76 65 72 73 65 3d 54 72 75 65 onents(G),.key=len,.reverse=True
1ccc0 29 5b 30 5d 0a 20 20 20 20 47 30 20 3d 20 47 2e 73 75 62 67 72 61 70 68 28 47 63 63 29 0a 20 20 )[0].....G0.=.G.subgraph(Gcc)...
1cce0 20 20 47 30 2e 72 74 74 20 3d 20 7b 7d 0a 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 47 30 3a 0a 20 ..G0.rtt.=.{}.....for.n.in.G0:..
1cd00 20 20 20 20 20 20 20 47 30 2e 72 74 74 5b 6e 5d 20 3d 20 74 69 6d 65 5b 6e 5d 0a 0a 20 20 20 20 .......G0.rtt[n].=.time[n]......
1cd20 72 65 74 75 72 6e 20 47 30 0a 0a 0a 47 20 3d 20 6c 61 6e 6c 5f 67 72 61 70 68 28 29 0a 0a 70 72 return.G0...G.=.lanl_graph()..pr
1cd40 69 6e 74 28 47 29 0a 70 72 69 6e 74 28 6e 78 2e 6e 75 6d 62 65 72 5f 63 6f 6e 6e 65 63 74 65 64 int(G).print(nx.number_connected
1cd60 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 2c 20 22 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f _components(G),."connected.compo
1cd80 6e 65 6e 74 73 22 29 0a 0a 70 6c 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 38 2c 20 nents")..plt.figure(figsize=(8,.
1cda0 38 29 29 0a 23 20 75 73 65 20 67 72 61 70 68 76 69 7a 20 74 6f 20 66 69 6e 64 20 72 61 64 69 61 8)).#.use.graphviz.to.find.radia
1cdc0 6c 20 6c 61 79 6f 75 74 0a 70 6f 73 20 3d 20 6e 78 2e 6e 78 5f 61 67 72 61 70 68 2e 67 72 61 70 l.layout.pos.=.nx.nx_agraph.grap
1cde0 68 76 69 7a 5f 6c 61 79 6f 75 74 28 47 2c 20 70 72 6f 67 3d 22 74 77 6f 70 69 22 2c 20 72 6f 6f hviz_layout(G,.prog="twopi",.roo
1ce00 74 3d 30 29 0a 23 20 64 72 61 77 20 6e 6f 64 65 73 2c 20 63 6f 6c 6f 72 69 6e 67 20 62 79 20 72 t=0).#.draw.nodes,.coloring.by.r
1ce20 74 74 20 70 69 6e 67 20 74 69 6d 65 0a 6f 70 74 69 6f 6e 73 20 3d 20 7b 22 77 69 74 68 5f 6c 61 tt.ping.time.options.=.{"with_la
1ce40 62 65 6c 73 22 3a 20 46 61 6c 73 65 2c 20 22 61 6c 70 68 61 22 3a 20 30 2e 35 2c 20 22 6e 6f 64 bels":.False,."alpha":.0.5,."nod
1ce60 65 5f 73 69 7a 65 22 3a 20 31 35 7d 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 2c 20 6e 6f 64 e_size":.15}.nx.draw(G,.pos,.nod
1ce80 65 5f 63 6f 6c 6f 72 3d 5b 47 2e 72 74 74 5b 76 5d 20 66 6f 72 20 76 20 69 6e 20 47 5d 2c 20 2a e_color=[G.rtt[v].for.v.in.G],.*
1cea0 2a 6f 70 74 69 6f 6e 73 29 0a 23 20 61 64 6a 75 73 74 20 74 68 65 20 70 6c 6f 74 20 6c 69 6d 69 *options).#.adjust.the.plot.limi
1cec0 74 73 0a 78 6d 61 78 20 3d 20 31 2e 30 32 20 2a 20 6d 61 78 28 78 78 20 66 6f 72 20 78 78 2c 20 ts.xmax.=.1.02.*.max(xx.for.xx,.
1cee0 79 79 20 69 6e 20 70 6f 73 2e 76 61 6c 75 65 73 28 29 29 0a 79 6d 61 78 20 3d 20 31 2e 30 32 20 yy.in.pos.values()).ymax.=.1.02.
1cf00 2a 20 6d 61 78 28 79 79 20 66 6f 72 20 78 78 2c 20 79 79 20 69 6e 20 70 6f 73 2e 76 61 6c 75 65 *.max(yy.for.xx,.yy.in.pos.value
1cf20 73 28 29 29 0a 70 6c 74 2e 78 6c 69 6d 28 30 2c 20 78 6d 61 78 29 0a 70 6c 74 2e 79 6c 69 6d 28 s()).plt.xlim(0,.xmax).plt.ylim(
1cf40 30 2c 20 79 6d 61 78 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 2c 7b 0,.ymax).plt.show().PK........,{
1cf60 57 56 4a 68 e8 5f 87 17 00 00 87 17 00 00 1a 00 00 00 73 75 62 63 6c 61 73 73 2f 70 6c 6f 74 5f WVJh._............subclass/plot_
1cf80 61 6e 74 69 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 41 6e 74 69 67 72 antigraph.py""".=========.Antigr
1cfa0 61 70 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 43 6f 6d 70 6c 65 6d 65 6e 74 20 67 72 61 70 68 20 aph.=========..Complement.graph.
1cfc0 63 6c 61 73 73 20 66 6f 72 20 73 6d 61 6c 6c 20 66 6f 6f 74 70 72 69 6e 74 20 77 68 65 6e 20 77 class.for.small.footprint.when.w
1cfe0 6f 72 6b 69 6e 67 20 6f 6e 20 64 65 6e 73 65 20 67 72 61 70 68 73 2e 0a 0a 54 68 69 73 20 63 6c orking.on.dense.graphs...This.cl
1d000 61 73 73 20 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 61 64 64 20 74 68 65 20 65 64 67 65 73 20 ass.allows.you.to.add.the.edges.
1d020 74 68 61 74 20 2a 64 6f 20 6e 6f 74 20 65 78 69 73 74 2a 20 69 6e 20 74 68 65 20 64 65 6e 73 65 that.*do.not.exist*.in.the.dense
1d040 0a 67 72 61 70 68 2e 20 48 6f 77 65 76 65 72 2c 20 77 68 65 6e 20 61 70 70 6c 79 69 6e 67 20 61 .graph..However,.when.applying.a
1d060 6c 67 6f 72 69 74 68 6d 73 20 74 6f 20 74 68 69 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 67 72 61 lgorithms.to.this.complement.gra
1d080 70 68 20 64 61 74 61 0a 73 74 72 75 63 74 75 72 65 2c 20 69 74 20 62 65 68 61 76 65 73 20 61 73 ph.data.structure,.it.behaves.as
1d0a0 20 69 66 20 69 74 20 77 65 72 65 20 74 68 65 20 64 65 6e 73 65 20 76 65 72 73 69 6f 6e 2e 20 53 .if.it.were.the.dense.version..S
1d0c0 6f 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 64 69 72 65 63 74 6c 79 20 69 6e 20 73 65 76 o.it.can.be.used.directly.in.sev
1d0e0 65 72 61 6c 20 4e 65 74 77 6f 72 6b 58 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 0a 54 68 69 73 20 eral.NetworkX.algorithms...This.
1d100 73 75 62 63 6c 61 73 73 20 68 61 73 20 6f 6e 6c 79 20 62 65 65 6e 20 74 65 73 74 65 64 20 66 6f subclass.has.only.been.tested.fo
1d120 72 20 6b 2d 63 6f 72 65 2c 20 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0a r.k-core,.connected_components,.
1d140 61 6e 64 20 62 69 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 20 61 6c 67 6f 72 and.biconnected_components.algor
1d160 69 74 68 6d 73 20 62 75 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 77 6f 72 6b 20 66 6f 72 20 6f 74 ithms.but.might.also.work.for.ot
1d180 68 65 72 0a 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 0a 22 22 22 0a 69 6d 70 6f 72 74 20 6d 61 74 70 her.algorithms...""".import.matp
1d1a0 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 lotlib.pyplot.as.plt.import.netw
1d1c0 6f 72 6b 78 20 61 73 20 6e 78 0a 66 72 6f 6d 20 6e 65 74 77 6f 72 6b 78 20 69 6d 70 6f 72 74 20 orkx.as.nx.from.networkx.import.
1d1e0 47 72 61 70 68 0a 0a 0a 63 6c 61 73 73 20 41 6e 74 69 47 72 61 70 68 28 47 72 61 70 68 29 3a 0a Graph...class.AntiGraph(Graph):.
1d200 20 20 20 20 22 22 22 0a 20 20 20 20 43 6c 61 73 73 20 66 6f 72 20 63 6f 6d 70 6c 65 6d 65 6e 74 ....""".....Class.for.complement
1d220 20 67 72 61 70 68 73 2e 0a 0a 20 20 20 20 54 68 65 20 6d 61 69 6e 20 67 6f 61 6c 20 69 73 20 74 .graphs.......The.main.goal.is.t
1d240 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 77 6f 72 6b 20 77 69 74 68 20 62 69 67 20 61 6e 64 20 64 o.be.able.to.work.with.big.and.d
1d260 65 6e 73 65 20 67 72 61 70 68 73 20 77 69 74 68 0a 20 20 20 20 61 20 6c 6f 77 20 6d 65 6d 6f 72 ense.graphs.with.....a.low.memor
1d280 79 20 66 6f 6f 74 70 72 69 6e 74 2e 0a 0a 20 20 20 20 49 6e 20 74 68 69 73 20 63 6c 61 73 73 20 y.footprint.......In.this.class.
1d2a0 79 6f 75 20 61 64 64 20 74 68 65 20 65 64 67 65 73 20 74 68 61 74 20 2a 64 6f 20 6e 6f 74 20 65 you.add.the.edges.that.*do.not.e
1d2c0 78 69 73 74 2a 20 69 6e 20 74 68 65 20 64 65 6e 73 65 20 67 72 61 70 68 2c 0a 20 20 20 20 74 68 xist*.in.the.dense.graph,.....th
1d2e0 65 20 72 65 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 63 6c 61 73 73 20 72 65 e.report.methods.of.the.class.re
1d300 74 75 72 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 72 73 2c 20 74 68 65 20 65 64 67 65 73 20 61 6e turn.the.neighbors,.the.edges.an
1d320 64 0a 20 20 20 20 74 68 65 20 64 65 67 72 65 65 20 61 73 20 69 66 20 69 74 20 77 61 73 20 74 68 d.....the.degree.as.if.it.was.th
1d340 65 20 64 65 6e 73 65 20 67 72 61 70 68 2e 20 54 68 75 73 20 69 74 27 73 20 70 6f 73 73 69 62 6c e.dense.graph..Thus.it's.possibl
1d360 65 20 74 6f 20 75 73 65 0a 20 20 20 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 e.to.use.....an.instance.of.this
1d380 20 63 6c 61 73 73 20 77 69 74 68 20 73 6f 6d 65 20 6f 66 20 4e 65 74 77 6f 72 6b 58 20 66 75 6e .class.with.some.of.NetworkX.fun
1d3a0 63 74 69 6f 6e 73 2e 0a 20 20 20 20 22 22 22 0a 0a 20 20 20 20 61 6c 6c 5f 65 64 67 65 5f 64 69 ctions......"""......all_edge_di
1d3c0 63 74 20 3d 20 7b 22 77 65 69 67 68 74 22 3a 20 31 7d 0a 0a 20 20 20 20 64 65 66 20 73 69 6e 67 ct.=.{"weight":.1}......def.sing
1d3e0 6c 65 5f 65 64 67 65 5f 64 69 63 74 28 73 65 6c 66 29 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75 le_edge_dict(self):.........retu
1d400 72 6e 20 73 65 6c 66 2e 61 6c 6c 5f 65 64 67 65 5f 64 69 63 74 0a 0a 20 20 20 20 65 64 67 65 5f rn.self.all_edge_dict......edge_
1d420 61 74 74 72 5f 64 69 63 74 5f 66 61 63 74 6f 72 79 20 3d 20 73 69 6e 67 6c 65 5f 65 64 67 65 5f attr_dict_factory.=.single_edge_
1d440 64 69 63 74 0a 0a 20 20 20 20 64 65 66 20 5f 5f 67 65 74 69 74 65 6d 5f 5f 28 73 65 6c 66 2c 20 dict......def.__getitem__(self,.
1d460 6e 29 3a 0a 20 20 20 20 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 61 20 64 69 63 74 20 6f 66 20 n):........."""Return.a.dict.of.
1d480 6e 65 69 67 68 62 6f 72 73 20 6f 66 20 6e 6f 64 65 20 6e 20 69 6e 20 74 68 65 20 64 65 6e 73 65 neighbors.of.node.n.in.the.dense
1d4a0 20 67 72 61 70 68 2e 0a 0a 20 20 20 20 20 20 20 20 50 61 72 61 6d 65 74 65 72 73 0a 20 20 20 20 .graph...........Parameters.....
1d4c0 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 20 20 20 20 20 20 6e 20 3a 20 6e 6f 64 65 0a ....----------.........n.:.node.
1d4e0 20 20 20 20 20 20 20 20 20 20 20 41 20 6e 6f 64 65 20 69 6e 20 74 68 65 20 67 72 61 70 68 2e 0a ...........A.node.in.the.graph..
1d500 0a 20 20 20 20 20 20 20 20 52 65 74 75 72 6e 73 0a 20 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d .........Returns.........-------
1d520 0a 20 20 20 20 20 20 20 20 61 64 6a 5f 64 69 63 74 20 3a 20 64 69 63 74 69 6f 6e 61 72 79 0a 20 .........adj_dict.:.dictionary..
1d540 20 20 20 20 20 20 20 20 20 20 54 68 65 20 61 64 6a 61 63 65 6e 63 79 20 64 69 63 74 69 6f 6e 61 ..........The.adjacency.dictiona
1d560 72 79 20 66 6f 72 20 6e 6f 64 65 73 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 20 6e 2e 0a 0a 20 20 ry.for.nodes.connected.to.n.....
1d580 20 20 20 20 20 20 22 22 22 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 7b 0a 20 20 20 20 20 ......""".........return.{......
1d5a0 20 20 20 20 20 20 20 6e 6f 64 65 3a 20 73 65 6c 66 2e 61 6c 6c 5f 65 64 67 65 5f 64 69 63 74 20 .......node:.self.all_edge_dict.
1d5c0 66 6f 72 20 6e 6f 64 65 20 69 6e 20 73 65 74 28 73 65 6c 66 2e 61 64 6a 29 20 2d 20 73 65 74 28 for.node.in.set(self.adj).-.set(
1d5e0 73 65 6c 66 2e 61 64 6a 5b 6e 5d 29 20 2d 20 7b 6e 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 self.adj[n]).-.{n}.........}....
1d600 20 20 64 65 66 20 6e 65 69 67 68 62 6f 72 73 28 73 65 6c 66 2c 20 6e 29 3a 0a 20 20 20 20 20 20 ..def.neighbors(self,.n):.......
1d620 20 20 22 22 22 52 65 74 75 72 6e 20 61 6e 20 69 74 65 72 61 74 6f 72 20 6f 76 65 72 20 61 6c 6c .."""Return.an.iterator.over.all
1d640 20 6e 65 69 67 68 62 6f 72 73 20 6f 66 20 6e 6f 64 65 20 6e 20 69 6e 20 74 68 65 0a 20 20 20 20 .neighbors.of.node.n.in.the.....
1d660 20 20 20 20 64 65 6e 73 65 20 67 72 61 70 68 2e 0a 0a 20 20 20 20 20 20 20 20 22 22 22 0a 20 20 ....dense.graph..........."""...
1d680 20 20 20 20 20 20 74 72 79 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 74 ......try:.............return.it
1d6a0 65 72 28 73 65 74 28 73 65 6c 66 2e 61 64 6a 29 20 2d 20 73 65 74 28 73 65 6c 66 2e 61 64 6a 5b er(set(self.adj).-.set(self.adj[
1d6c0 6e 5d 29 20 2d 20 7b 6e 7d 29 0a 20 20 20 20 20 20 20 20 65 78 63 65 70 74 20 4b 65 79 45 72 72 n]).-.{n}).........except.KeyErr
1d6e0 6f 72 20 61 73 20 65 72 72 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 6e 78 2e or.as.err:.............raise.nx.
1d700 4e 65 74 77 6f 72 6b 58 45 72 72 6f 72 28 66 22 54 68 65 20 6e 6f 64 65 20 7b 6e 7d 20 69 73 20 NetworkXError(f"The.node.{n}.is.
1d720 6e 6f 74 20 69 6e 20 74 68 65 20 67 72 61 70 68 2e 22 29 20 66 72 6f 6d 20 65 72 72 0a 0a 20 20 not.in.the.graph.").from.err....
1d740 20 20 64 65 66 20 64 65 67 72 65 65 28 73 65 6c 66 2c 20 6e 62 75 6e 63 68 3d 4e 6f 6e 65 2c 20 ..def.degree(self,.nbunch=None,.
1d760 77 65 69 67 68 74 3d 4e 6f 6e 65 29 3a 0a 20 20 20 20 20 20 20 20 22 22 22 52 65 74 75 72 6e 20 weight=None):........."""Return.
1d780 61 6e 20 69 74 65 72 61 74 6f 72 20 66 6f 72 20 28 6e 6f 64 65 2c 20 64 65 67 72 65 65 29 20 69 an.iterator.for.(node,.degree).i
1d7a0 6e 20 74 68 65 20 64 65 6e 73 65 20 67 72 61 70 68 2e 0a 0a 20 20 20 20 20 20 20 20 54 68 65 20 n.the.dense.graph...........The.
1d7c0 6e 6f 64 65 20 64 65 67 72 65 65 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 64 67 node.degree.is.the.number.of.edg
1d7e0 65 73 20 61 64 6a 61 63 65 6e 74 20 74 6f 20 74 68 65 20 6e 6f 64 65 2e 0a 0a 20 20 20 20 20 20 es.adjacent.to.the.node.........
1d800 20 20 50 61 72 61 6d 65 74 65 72 73 0a 20 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ..Parameters.........----------.
1d820 20 20 20 20 20 20 20 20 6e 62 75 6e 63 68 20 3a 20 69 74 65 72 61 62 6c 65 20 63 6f 6e 74 61 69 ........nbunch.:.iterable.contai
1d840 6e 65 72 2c 20 6f 70 74 69 6f 6e 61 6c 20 28 64 65 66 61 75 6c 74 3d 61 6c 6c 20 6e 6f 64 65 73 ner,.optional.(default=all.nodes
1d860 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 20 63 6f 6e 74 61 69 6e 65 72 20 6f 66 20 6e 6f 64 ).............A.container.of.nod
1d880 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 77 69 6c 6c 20 62 65 20 69 74 65 72 61 es...The.container.will.be.itera
1d8a0 74 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 75 67 68 20 6f 6e 63 65 2e 0a 0a 20 ted.............through.once....
1d8c0 20 20 20 20 20 20 20 77 65 69 67 68 74 20 3a 20 73 74 72 69 6e 67 20 6f 72 20 4e 6f 6e 65 2c 20 .......weight.:.string.or.None,.
1d8e0 6f 70 74 69 6f 6e 61 6c 20 28 64 65 66 61 75 6c 74 3d 4e 6f 6e 65 29 0a 20 20 20 20 20 20 20 20 optional.(default=None).........
1d900 20 20 20 54 68 65 20 65 64 67 65 20 61 74 74 72 69 62 75 74 65 20 74 68 61 74 20 68 6f 6c 64 73 ...The.edge.attribute.that.holds
1d920 20 74 68 65 20 6e 75 6d 65 72 69 63 61 6c 20 76 61 6c 75 65 20 75 73 65 64 0a 20 20 20 20 20 20 .the.numerical.value.used.......
1d940 20 20 20 20 20 61 73 20 61 20 77 65 69 67 68 74 2e 20 20 49 66 20 4e 6f 6e 65 2c 20 74 68 65 6e .....as.a.weight...If.None,.then
1d960 20 65 61 63 68 20 65 64 67 65 20 68 61 73 20 77 65 69 67 68 74 20 31 2e 0a 20 20 20 20 20 20 20 .each.edge.has.weight.1.........
1d980 20 20 20 20 54 68 65 20 64 65 67 72 65 65 20 69 73 20 74 68 65 20 73 75 6d 20 6f 66 20 74 68 65 ....The.degree.is.the.sum.of.the
1d9a0 20 65 64 67 65 20 77 65 69 67 68 74 73 20 61 64 6a 61 63 65 6e 74 20 74 6f 20 74 68 65 20 6e 6f .edge.weights.adjacent.to.the.no
1d9c0 64 65 2e 0a 0a 20 20 20 20 20 20 20 20 52 65 74 75 72 6e 73 0a 20 20 20 20 20 20 20 20 2d 2d 2d de...........Returns.........---
1d9e0 2d 2d 2d 2d 0a 20 20 20 20 20 20 20 20 6e 64 5f 69 74 65 72 20 3a 20 69 74 65 72 61 74 6f 72 0a ----.........nd_iter.:.iterator.
1da00 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20 69 74 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 ............The.iterator.returns
1da20 20 74 77 6f 2d 74 75 70 6c 65 73 20 6f 66 20 28 6e 6f 64 65 2c 20 64 65 67 72 65 65 29 2e 0a 0a .two-tuples.of.(node,.degree)...
1da40 20 20 20 20 20 20 20 20 53 65 65 20 41 6c 73 6f 0a 20 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d ........See.Also.........-------
1da60 2d 0a 20 20 20 20 20 20 20 20 64 65 67 72 65 65 0a 0a 20 20 20 20 20 20 20 20 45 78 61 6d 70 6c -.........degree..........Exampl
1da80 65 73 0a 20 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 20 20 20 20 20 20 3e 3e 3e 20 es.........--------.........>>>.
1daa0 47 20 3d 20 6e 78 2e 70 61 74 68 5f 67 72 61 70 68 28 34 29 20 20 23 20 6f 72 20 44 69 47 72 61 G.=.nx.path_graph(4)..#.or.DiGra
1dac0 70 68 2c 20 4d 75 6c 74 69 47 72 61 70 68 2c 20 4d 75 6c 74 69 44 69 47 72 61 70 68 2c 20 65 74 ph,.MultiGraph,.MultiDiGraph,.et
1dae0 63 0a 20 20 20 20 20 20 20 20 3e 3e 3e 20 47 2e 64 65 67 72 65 65 28 30 29 20 20 23 20 6e 6f 64 c.........>>>.G.degree(0)..#.nod
1db00 65 20 30 20 77 69 74 68 20 64 65 67 72 65 65 20 31 0a 20 20 20 20 20 20 20 20 31 0a 20 20 20 20 e.0.with.degree.1.........1.....
1db20 20 20 20 20 3e 3e 3e 20 6c 69 73 74 28 47 2e 64 65 67 72 65 65 28 5b 30 2c 20 31 5d 29 29 0a 20 ....>>>.list(G.degree([0,.1]))..
1db40 20 20 20 20 20 20 20 5b 28 30 2c 20 31 29 2c 20 28 31 2c 20 32 29 5d 0a 0a 20 20 20 20 20 20 20 .......[(0,.1),.(1,.2)].........
1db60 20 22 22 22 0a 20 20 20 20 20 20 20 20 69 66 20 6e 62 75 6e 63 68 20 69 73 20 4e 6f 6e 65 3a 0a .""".........if.nbunch.is.None:.
1db80 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 73 5f 6e 62 72 73 20 3d 20 28 0a 20 20 20 20 20 ............nodes_nbrs.=.(......
1dba0 20 20 20 20 20 20 20 20 20 20 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........(....................
1dbc0 20 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 .n,.....................{.......
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 3a 20 73 65 6c 66 2e 61 6c 6c 5f 65 64 ..................v:.self.all_ed
1dc00 67 65 5f 64 69 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ge_dict.........................
1dc20 66 6f 72 20 76 20 69 6e 20 73 65 74 28 73 65 6c 66 2e 61 64 6a 29 20 2d 20 73 65 74 28 73 65 6c for.v.in.set(self.adj).-.set(sel
1dc40 66 2e 61 64 6a 5b 6e 5d 29 20 2d 20 7b 6e 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f.adj[n]).-.{n}.................
1dc60 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20 20 20 ....},.................)........
1dc80 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 73 65 6c 66 2e 6e 6f 64 65 73 28 29 0a 20 .........for.n.in.self.nodes()..
1dca0 20 20 20 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 6e 62 75 6e 63 68 ...........).........elif.nbunch
1dcc0 20 69 6e 20 73 65 6c 66 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 62 72 73 20 3d 20 73 65 74 .in.self:.............nbrs.=.set
1dce0 28 73 65 6c 66 2e 6e 6f 64 65 73 28 29 29 20 2d 20 73 65 74 28 73 65 6c 66 2e 61 64 6a 5b 6e 62 (self.nodes()).-.set(self.adj[nb
1dd00 75 6e 63 68 5d 29 20 2d 20 7b 6e 62 75 6e 63 68 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 unch]).-.{nbunch}.............re
1dd20 74 75 72 6e 20 6c 65 6e 28 6e 62 72 73 29 0a 20 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 turn.len(nbrs).........else:....
1dd40 20 20 20 20 20 20 20 20 20 6e 6f 64 65 73 5f 6e 62 72 73 20 3d 20 28 0a 20 20 20 20 20 20 20 20 .........nodes_nbrs.=.(.........
1dd60 20 20 20 20 20 20 20 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 2c ........(.....................n,
1dd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 .....................{..........
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 3a 20 73 65 6c 66 2e 61 6c 6c 5f 65 64 67 65 5f ...............v:.self.all_edge_
1ddc0 64 69 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 dict.........................for
1dde0 20 76 20 69 6e 20 73 65 74 28 73 65 6c 66 2e 6e 6f 64 65 73 28 29 29 20 2d 20 73 65 74 28 73 65 .v.in.set(self.nodes()).-.set(se
1de00 6c 66 2e 61 64 6a 5b 6e 5d 29 20 2d 20 7b 6e 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lf.adj[n]).-.{n}................
1de20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20 20 .....},.................).......
1de40 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 73 65 6c 66 2e 6e 62 75 6e 63 68 5f 69 ..........for.n.in.self.nbunch_i
1de60 74 65 72 28 6e 62 75 6e 63 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 0a 20 20 20 20 20 ter(nbunch).............).......
1de80 20 20 20 69 66 20 77 65 69 67 68 74 20 69 73 20 4e 6f 6e 65 3a 0a 20 20 20 20 20 20 20 20 20 20 ...if.weight.is.None:...........
1dea0 20 20 72 65 74 75 72 6e 20 28 28 6e 2c 20 6c 65 6e 28 6e 62 72 73 29 29 20 66 6f 72 20 6e 2c 20 ..return.((n,.len(nbrs)).for.n,.
1dec0 6e 62 72 73 20 69 6e 20 6e 6f 64 65 73 5f 6e 62 72 73 29 0a 20 20 20 20 20 20 20 20 65 6c 73 65 nbrs.in.nodes_nbrs).........else
1dee0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 41 6e 74 69 47 72 61 70 68 20 69 73 20 61 20 54 :.............#.AntiGraph.is.a.T
1df00 68 69 6e 47 72 61 70 68 20 73 6f 20 61 6c 6c 20 65 64 67 65 73 20 68 61 76 65 20 77 65 69 67 68 hinGraph.so.all.edges.have.weigh
1df20 74 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 0a 20 20 20 20 20 20 20 t.1.............return.(........
1df40 20 20 20 20 20 20 20 20 20 28 6e 2c 20 73 75 6d 28 28 6e 62 72 73 5b 6e 62 72 5d 2e 67 65 74 28 .........(n,.sum((nbrs[nbr].get(
1df60 77 65 69 67 68 74 2c 20 31 29 29 20 66 6f 72 20 6e 62 72 20 69 6e 20 6e 62 72 73 29 29 0a 20 20 weight,.1)).for.nbr.in.nbrs))...
1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 2c 20 6e 62 72 73 20 69 6e 20 6e 6f 64 ..............for.n,.nbrs.in.nod
1dfa0 65 73 5f 6e 62 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 0a 20 20 20 20 64 65 66 20 61 es_nbrs.............)......def.a
1dfc0 64 6a 61 63 65 6e 63 79 28 73 65 6c 66 29 3a 0a 20 20 20 20 20 20 20 20 22 22 22 52 65 74 75 72 djacency(self):........."""Retur
1dfe0 6e 20 61 6e 20 69 74 65 72 61 74 6f 72 20 6f 66 20 28 6e 6f 64 65 2c 20 61 64 6a 61 63 65 6e 63 n.an.iterator.of.(node,.adjacenc
1e000 79 20 73 65 74 29 20 74 75 70 6c 65 73 20 66 6f 72 20 61 6c 6c 20 6e 6f 64 65 73 0a 20 20 20 20 y.set).tuples.for.all.nodes.....
1e020 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 64 65 6e 73 65 20 67 72 61 70 68 2e 0a 0a 20 20 20 20 .......in.the.dense.graph.......
1e040 20 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20 66 61 73 74 65 73 74 20 77 61 79 20 74 6f 20 6c ....This.is.the.fastest.way.to.l
1e060 6f 6f 6b 20 61 74 20 65 76 65 72 79 20 65 64 67 65 2e 0a 20 20 20 20 20 20 20 20 46 6f 72 20 64 ook.at.every.edge..........For.d
1e080 69 72 65 63 74 65 64 20 67 72 61 70 68 73 2c 20 6f 6e 6c 79 20 6f 75 74 67 6f 69 6e 67 20 61 64 irected.graphs,.only.outgoing.ad
1e0a0 6a 61 63 65 6e 63 69 65 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 2e 0a 0a 20 20 20 20 20 20 20 jacencies.are.included..........
1e0c0 20 52 65 74 75 72 6e 73 0a 20 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 0a 20 20 20 20 20 20 20 .Returns.........-------........
1e0e0 20 61 64 6a 5f 69 74 65 72 20 3a 20 69 74 65 72 61 74 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 .adj_iter.:.iterator............
1e100 41 6e 20 69 74 65 72 61 74 6f 72 20 6f 66 20 28 6e 6f 64 65 2c 20 61 64 6a 61 63 65 6e 63 79 20 An.iterator.of.(node,.adjacency.
1e120 73 65 74 29 20 66 6f 72 20 61 6c 6c 20 6e 6f 64 65 73 20 69 6e 0a 20 20 20 20 20 20 20 20 20 20 set).for.all.nodes.in...........
1e140 20 74 68 65 20 67 72 61 70 68 2e 0a 20 20 20 20 20 20 20 20 22 22 22 0a 20 20 20 20 20 20 20 20 .the.graph..........""".........
1e160 6e 6f 64 65 73 20 3d 20 73 65 74 28 73 65 6c 66 2e 61 64 6a 29 0a 20 20 20 20 20 20 20 20 66 6f nodes.=.set(self.adj).........fo
1e180 72 20 6e 2c 20 6e 62 72 73 20 69 6e 20 73 65 6c 66 2e 61 64 6a 2e 69 74 65 6d 73 28 29 3a 0a 20 r.n,.nbrs.in.self.adj.items():..
1e1a0 20 20 20 20 20 20 20 20 20 20 20 79 69 65 6c 64 20 28 6e 2c 20 6e 6f 64 65 73 20 2d 20 73 65 74 ...........yield.(n,.nodes.-.set
1e1c0 28 6e 62 72 73 29 20 2d 20 7b 6e 7d 29 0a 0a 0a 23 20 42 75 69 6c 64 20 73 65 76 65 72 61 6c 20 (nbrs).-.{n})...#.Build.several.
1e1e0 70 61 69 72 73 20 6f 66 20 67 72 61 70 68 73 2c 20 61 20 72 65 67 75 6c 61 72 20 67 72 61 70 68 pairs.of.graphs,.a.regular.graph
1e200 0a 23 20 61 6e 64 20 74 68 65 20 41 6e 74 69 47 72 61 70 68 20 6f 66 20 69 74 27 73 20 63 6f 6d .#.and.the.AntiGraph.of.it's.com
1e220 70 6c 65 6d 65 6e 74 2c 20 77 68 69 63 68 20 62 65 68 61 76 65 73 0a 23 20 61 73 20 69 66 20 69 plement,.which.behaves.#.as.if.i
1e240 74 20 77 65 72 65 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 67 72 61 70 68 2e 0a 47 6e 70 20 3d t.were.the.original.graph..Gnp.=
1e260 20 6e 78 2e 67 6e 70 5f 72 61 6e 64 6f 6d 5f 67 72 61 70 68 28 32 30 2c 20 30 2e 38 2c 20 73 65 .nx.gnp_random_graph(20,.0.8,.se
1e280 65 64 3d 34 32 29 0a 41 6e 70 20 3d 20 41 6e 74 69 47 72 61 70 68 28 6e 78 2e 63 6f 6d 70 6c 65 ed=42).Anp.=.AntiGraph(nx.comple
1e2a0 6d 65 6e 74 28 47 6e 70 29 29 0a 47 64 20 3d 20 6e 78 2e 64 61 76 69 73 5f 73 6f 75 74 68 65 72 ment(Gnp)).Gd.=.nx.davis_souther
1e2c0 6e 5f 77 6f 6d 65 6e 5f 67 72 61 70 68 28 29 0a 41 64 20 3d 20 41 6e 74 69 47 72 61 70 68 28 6e n_women_graph().Ad.=.AntiGraph(n
1e2e0 78 2e 63 6f 6d 70 6c 65 6d 65 6e 74 28 47 64 29 29 0a 47 6b 20 3d 20 6e 78 2e 6b 61 72 61 74 65 x.complement(Gd)).Gk.=.nx.karate
1e300 5f 63 6c 75 62 5f 67 72 61 70 68 28 29 0a 41 6b 20 3d 20 41 6e 74 69 47 72 61 70 68 28 6e 78 2e _club_graph().Ak.=.AntiGraph(nx.
1e320 63 6f 6d 70 6c 65 6d 65 6e 74 28 47 6b 29 29 0a 70 61 69 72 73 20 3d 20 5b 28 47 6e 70 2c 20 41 complement(Gk)).pairs.=.[(Gnp,.A
1e340 6e 70 29 2c 20 28 47 64 2c 20 41 64 29 2c 20 28 47 6b 2c 20 41 6b 29 5d 0a 23 20 74 65 73 74 20 np),.(Gd,.Ad),.(Gk,.Ak)].#.test.
1e360 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 0a 66 6f 72 20 47 2c 20 41 20 69 6e connected.components.for.G,.A.in
1e380 20 70 61 69 72 73 3a 0a 20 20 20 20 67 63 20 3d 20 5b 73 65 74 28 63 29 20 66 6f 72 20 63 20 69 .pairs:.....gc.=.[set(c).for.c.i
1e3a0 6e 20 6e 78 2e 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 47 29 5d 0a 20 20 n.nx.connected_components(G)]...
1e3c0 20 20 61 63 20 3d 20 5b 73 65 74 28 63 29 20 66 6f 72 20 63 20 69 6e 20 6e 78 2e 63 6f 6e 6e 65 ..ac.=.[set(c).for.c.in.nx.conne
1e3e0 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 41 29 5d 0a 20 20 20 20 66 6f 72 20 63 6f 6d 70 cted_components(A)].....for.comp
1e400 20 69 6e 20 61 63 3a 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 20 63 6f 6d 70 20 69 6e 20 67 .in.ac:.........assert.comp.in.g
1e420 63 0a 23 20 74 65 73 74 20 62 69 63 6f 6e 6e 65 63 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 0a c.#.test.biconnected.components.
1e440 66 6f 72 20 47 2c 20 41 20 69 6e 20 70 61 69 72 73 3a 0a 20 20 20 20 67 63 20 3d 20 5b 73 65 74 for.G,.A.in.pairs:.....gc.=.[set
1e460 28 63 29 20 66 6f 72 20 63 20 69 6e 20 6e 78 2e 62 69 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 (c).for.c.in.nx.biconnected_comp
1e480 6f 6e 65 6e 74 73 28 47 29 5d 0a 20 20 20 20 61 63 20 3d 20 5b 73 65 74 28 63 29 20 66 6f 72 20 onents(G)].....ac.=.[set(c).for.
1e4a0 63 20 69 6e 20 6e 78 2e 62 69 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 41 c.in.nx.biconnected_components(A
1e4c0 29 5d 0a 20 20 20 20 66 6f 72 20 63 6f 6d 70 20 69 6e 20 61 63 3a 0a 20 20 20 20 20 20 20 20 61 )].....for.comp.in.ac:.........a
1e4e0 73 73 65 72 74 20 63 6f 6d 70 20 69 6e 20 67 63 0a 23 20 74 65 73 74 20 64 65 67 72 65 65 0a 66 ssert.comp.in.gc.#.test.degree.f
1e500 6f 72 20 47 2c 20 41 20 69 6e 20 70 61 69 72 73 3a 0a 20 20 20 20 6e 6f 64 65 20 3d 20 6c 69 73 or.G,.A.in.pairs:.....node.=.lis
1e520 74 28 47 2e 6e 6f 64 65 73 28 29 29 5b 30 5d 0a 20 20 20 20 6e 6f 64 65 73 20 3d 20 6c 69 73 74 t(G.nodes())[0].....nodes.=.list
1e540 28 47 2e 6e 6f 64 65 73 28 29 29 5b 31 3a 34 5d 0a 20 20 20 20 61 73 73 65 72 74 20 47 2e 64 65 (G.nodes())[1:4].....assert.G.de
1e560 67 72 65 65 28 6e 6f 64 65 29 20 3d 3d 20 41 2e 64 65 67 72 65 65 28 6e 6f 64 65 29 0a 20 20 20 gree(node).==.A.degree(node)....
1e580 20 61 73 73 65 72 74 20 73 75 6d 28 64 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 47 2e 64 65 67 72 .assert.sum(d.for.n,.d.in.G.degr
1e5a0 65 65 28 29 29 20 3d 3d 20 73 75 6d 28 64 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 41 2e 64 65 67 ee()).==.sum(d.for.n,.d.in.A.deg
1e5c0 72 65 65 28 29 29 0a 20 20 20 20 23 20 41 6e 74 69 47 72 61 70 68 20 69 73 20 61 20 54 68 69 6e ree()).....#.AntiGraph.is.a.Thin
1e5e0 47 72 61 70 68 2c 20 73 6f 20 61 6c 6c 20 74 68 65 20 77 65 69 67 68 74 73 20 61 72 65 20 31 0a Graph,.so.all.the.weights.are.1.
1e600 20 20 20 20 61 73 73 65 72 74 20 73 75 6d 28 64 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 41 2e 64 ....assert.sum(d.for.n,.d.in.A.d
1e620 65 67 72 65 65 28 29 29 20 3d 3d 20 73 75 6d 28 64 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 41 2e egree()).==.sum(d.for.n,.d.in.A.
1e640 64 65 67 72 65 65 28 77 65 69 67 68 74 3d 22 77 65 69 67 68 74 22 29 29 0a 20 20 20 20 61 73 73 degree(weight="weight")).....ass
1e660 65 72 74 20 73 75 6d 28 64 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 47 2e 64 65 67 72 65 65 28 6e ert.sum(d.for.n,.d.in.G.degree(n
1e680 6f 64 65 73 29 29 20 3d 3d 20 73 75 6d 28 64 20 66 6f 72 20 6e 2c 20 64 20 69 6e 20 41 2e 64 65 odes)).==.sum(d.for.n,.d.in.A.de
1e6a0 67 72 65 65 28 6e 6f 64 65 73 29 29 0a 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 gree(nodes))..pos.=.nx.spring_la
1e6c0 79 6f 75 74 28 47 2c 20 73 65 65 64 3d 32 36 38 29 20 20 23 20 53 65 65 64 20 66 6f 72 20 72 65 yout(G,.seed=268)..#.Seed.for.re
1e6e0 70 72 6f 64 75 63 69 62 6c 65 20 6c 61 79 6f 75 74 0a 6e 78 2e 64 72 61 77 28 47 6e 70 2c 20 70 producible.layout.nx.draw(Gnp,.p
1e700 6f 73 3d 70 6f 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 2c 7b 57 os=pos).plt.show().PK........,{W
1e720 56 b2 4b 1a 52 f4 08 00 00 f4 08 00 00 1b 00 00 00 73 75 62 63 6c 61 73 73 2f 70 6c 6f 74 5f 70 V.K.R............subclass/plot_p
1e740 72 69 6e 74 67 72 61 70 68 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 72 69 6e rintgraph.py""".===========.Prin
1e760 74 20 47 72 61 70 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 61 6d 70 6c 65 20 73 75 62 t.Graph.===========..Example.sub
1e780 63 6c 61 73 73 20 6f 66 20 74 68 65 20 47 72 61 70 68 20 63 6c 61 73 73 2e 0a 22 22 22 0a 0a 69 class.of.the.Graph.class.."""..i
1e7a0 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 mport.matplotlib.pyplot.as.plt.i
1e7c0 6d 70 6f 72 74 20 6e 65 74 77 6f 72 6b 78 20 61 73 20 6e 78 0a 66 72 6f 6d 20 6e 65 74 77 6f 72 mport.networkx.as.nx.from.networ
1e7e0 6b 78 20 69 6d 70 6f 72 74 20 47 72 61 70 68 0a 0a 0a 63 6c 61 73 73 20 50 72 69 6e 74 47 72 61 kx.import.Graph...class.PrintGra
1e800 70 68 28 47 72 61 70 68 29 3a 0a 20 20 20 20 22 22 22 0a 20 20 20 20 45 78 61 6d 70 6c 65 20 73 ph(Graph):.....""".....Example.s
1e820 75 62 63 6c 61 73 73 20 6f 66 20 74 68 65 20 47 72 61 70 68 20 63 6c 61 73 73 2e 0a 0a 20 20 20 ubclass.of.the.Graph.class......
1e840 20 50 72 69 6e 74 73 20 61 63 74 69 76 69 74 79 20 6c 6f 67 20 74 6f 20 66 69 6c 65 20 6f 72 20 .Prints.activity.log.to.file.or.
1e860 73 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 22 22 22 0a 0a 20 20 20 20 64 65 standard.output......"""......de
1e880 66 20 5f 5f 69 6e 69 74 5f 5f 28 73 65 6c 66 2c 20 64 61 74 61 3d 4e 6f 6e 65 2c 20 6e 61 6d 65 f.__init__(self,.data=None,.name
1e8a0 3d 22 22 2c 20 66 69 6c 65 3d 4e 6f 6e 65 2c 20 2a 2a 61 74 74 72 29 3a 0a 20 20 20 20 20 20 20 ="",.file=None,.**attr):........
1e8c0 20 73 75 70 65 72 28 29 2e 5f 5f 69 6e 69 74 5f 5f 28 64 61 74 61 3d 64 61 74 61 2c 20 6e 61 6d .super().__init__(data=data,.nam
1e8e0 65 3d 6e 61 6d 65 2c 20 2a 2a 61 74 74 72 29 0a 20 20 20 20 20 20 20 20 69 66 20 66 69 6c 65 20 e=name,.**attr).........if.file.
1e900 69 73 20 4e 6f 6e 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70 6f 72 74 20 73 79 73 0a is.None:.............import.sys.
1e920 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 66 68 20 3d 20 73 79 73 2e 73 74 64 6f 75 .............self.fh.=.sys.stdou
1e940 74 0a 20 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 t.........else:.............self
1e960 2e 66 68 20 3d 20 6f 70 65 6e 28 66 69 6c 65 2c 20 22 77 22 29 0a 0a 20 20 20 20 64 65 66 20 61 .fh.=.open(file,."w")......def.a
1e980 64 64 5f 6e 6f 64 65 28 73 65 6c 66 2c 20 6e 2c 20 61 74 74 72 5f 64 69 63 74 3d 4e 6f 6e 65 2c dd_node(self,.n,.attr_dict=None,
1e9a0 20 2a 2a 61 74 74 72 29 3a 0a 20 20 20 20 20 20 20 20 73 75 70 65 72 28 29 2e 61 64 64 5f 6e 6f .**attr):.........super().add_no
1e9c0 64 65 28 6e 2c 20 61 74 74 72 5f 64 69 63 74 3d 61 74 74 72 5f 64 69 63 74 2c 20 2a 2a 61 74 74 de(n,.attr_dict=attr_dict,.**att
1e9e0 72 29 0a 20 20 20 20 20 20 20 20 73 65 6c 66 2e 66 68 2e 77 72 69 74 65 28 66 22 41 64 64 20 6e r).........self.fh.write(f"Add.n
1ea00 6f 64 65 3a 20 7b 6e 7d 5c 6e 22 29 0a 0a 20 20 20 20 64 65 66 20 61 64 64 5f 6e 6f 64 65 73 5f ode:.{n}\n")......def.add_nodes_
1ea20 66 72 6f 6d 28 73 65 6c 66 2c 20 6e 6f 64 65 73 2c 20 2a 2a 61 74 74 72 29 3a 0a 20 20 20 20 20 from(self,.nodes,.**attr):......
1ea40 20 20 20 66 6f 72 20 6e 20 69 6e 20 6e 6f 64 65 73 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ...for.n.in.nodes:.............s
1ea60 65 6c 66 2e 61 64 64 5f 6e 6f 64 65 28 6e 2c 20 2a 2a 61 74 74 72 29 0a 0a 20 20 20 20 64 65 66 elf.add_node(n,.**attr)......def
1ea80 20 72 65 6d 6f 76 65 5f 6e 6f 64 65 28 73 65 6c 66 2c 20 6e 29 3a 0a 20 20 20 20 20 20 20 20 73 .remove_node(self,.n):.........s
1eaa0 75 70 65 72 28 29 2e 72 65 6d 6f 76 65 5f 6e 6f 64 65 28 6e 29 0a 20 20 20 20 20 20 20 20 73 65 uper().remove_node(n).........se
1eac0 6c 66 2e 66 68 2e 77 72 69 74 65 28 66 22 52 65 6d 6f 76 65 20 6e 6f 64 65 3a 20 7b 6e 7d 5c 6e lf.fh.write(f"Remove.node:.{n}\n
1eae0 22 29 0a 0a 20 20 20 20 64 65 66 20 72 65 6d 6f 76 65 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 73 65 ")......def.remove_nodes_from(se
1eb00 6c 66 2c 20 6e 6f 64 65 73 29 3a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 6e 6f 64 lf,.nodes):.........for.n.in.nod
1eb20 65 73 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 72 65 6d 6f 76 65 5f 6e 6f 64 65 es:.............self.remove_node
1eb40 28 6e 29 0a 0a 20 20 20 20 64 65 66 20 61 64 64 5f 65 64 67 65 28 73 65 6c 66 2c 20 75 2c 20 76 (n)......def.add_edge(self,.u,.v
1eb60 2c 20 61 74 74 72 5f 64 69 63 74 3d 4e 6f 6e 65 2c 20 2a 2a 61 74 74 72 29 3a 0a 20 20 20 20 20 ,.attr_dict=None,.**attr):......
1eb80 20 20 20 73 75 70 65 72 28 29 2e 61 64 64 5f 65 64 67 65 28 75 2c 20 76 2c 20 61 74 74 72 5f 64 ...super().add_edge(u,.v,.attr_d
1eba0 69 63 74 3d 61 74 74 72 5f 64 69 63 74 2c 20 2a 2a 61 74 74 72 29 0a 20 20 20 20 20 20 20 20 73 ict=attr_dict,.**attr).........s
1ebc0 65 6c 66 2e 66 68 2e 77 72 69 74 65 28 66 22 41 64 64 20 65 64 67 65 3a 20 7b 75 7d 2d 7b 76 7d elf.fh.write(f"Add.edge:.{u}-{v}
1ebe0 5c 6e 22 29 0a 0a 20 20 20 20 64 65 66 20 61 64 64 5f 65 64 67 65 73 5f 66 72 6f 6d 28 73 65 6c \n")......def.add_edges_from(sel
1ec00 66 2c 20 65 62 75 6e 63 68 2c 20 61 74 74 72 5f 64 69 63 74 3d 4e 6f 6e 65 2c 20 2a 2a 61 74 74 f,.ebunch,.attr_dict=None,.**att
1ec20 72 29 3a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 65 20 69 6e 20 65 62 75 6e 63 68 3a 0a 20 20 20 r):.........for.e.in.ebunch:....
1ec40 20 20 20 20 20 20 20 20 20 75 2c 20 76 20 3d 20 65 5b 30 3a 32 5d 0a 20 20 20 20 20 20 20 20 20 .........u,.v.=.e[0:2]..........
1ec60 20 20 20 73 65 6c 66 2e 61 64 64 5f 65 64 67 65 28 75 2c 20 76 2c 20 61 74 74 72 5f 64 69 63 74 ...self.add_edge(u,.v,.attr_dict
1ec80 3d 61 74 74 72 5f 64 69 63 74 2c 20 2a 2a 61 74 74 72 29 0a 0a 20 20 20 20 64 65 66 20 72 65 6d =attr_dict,.**attr)......def.rem
1eca0 6f 76 65 5f 65 64 67 65 28 73 65 6c 66 2c 20 75 2c 20 76 29 3a 0a 20 20 20 20 20 20 20 20 73 75 ove_edge(self,.u,.v):.........su
1ecc0 70 65 72 28 29 2e 72 65 6d 6f 76 65 5f 65 64 67 65 28 75 2c 20 76 29 0a 20 20 20 20 20 20 20 20 per().remove_edge(u,.v).........
1ece0 73 65 6c 66 2e 66 68 2e 77 72 69 74 65 28 66 22 52 65 6d 6f 76 65 20 65 64 67 65 3a 20 7b 75 7d self.fh.write(f"Remove.edge:.{u}
1ed00 2d 7b 76 7d 5c 6e 22 29 0a 0a 20 20 20 20 64 65 66 20 72 65 6d 6f 76 65 5f 65 64 67 65 73 5f 66 -{v}\n")......def.remove_edges_f
1ed20 72 6f 6d 28 73 65 6c 66 2c 20 65 62 75 6e 63 68 29 3a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 65 rom(self,.ebunch):.........for.e
1ed40 20 69 6e 20 65 62 75 6e 63 68 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 2c 20 76 20 3d 20 65 .in.ebunch:.............u,.v.=.e
1ed60 5b 30 3a 32 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 72 65 6d 6f 76 65 5f 65 64 [0:2].............self.remove_ed
1ed80 67 65 28 75 2c 20 76 29 0a 0a 20 20 20 20 64 65 66 20 63 6c 65 61 72 28 73 65 6c 66 29 3a 0a 20 ge(u,.v)......def.clear(self):..
1eda0 20 20 20 20 20 20 20 73 75 70 65 72 28 29 2e 63 6c 65 61 72 28 29 0a 20 20 20 20 20 20 20 20 73 .......super().clear().........s
1edc0 65 6c 66 2e 66 68 2e 77 72 69 74 65 28 22 43 6c 65 61 72 20 67 72 61 70 68 5c 6e 22 29 0a 0a 0a elf.fh.write("Clear.graph\n")...
1ede0 47 20 3d 20 50 72 69 6e 74 47 72 61 70 68 28 29 0a 47 2e 61 64 64 5f 6e 6f 64 65 28 22 66 6f 6f G.=.PrintGraph().G.add_node("foo
1ee00 22 29 0a 47 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 22 62 61 72 22 2c 20 77 65 69 67 68 ").G.add_nodes_from("bar",.weigh
1ee20 74 3d 38 29 0a 47 2e 72 65 6d 6f 76 65 5f 6e 6f 64 65 28 22 62 22 29 0a 47 2e 72 65 6d 6f 76 65 t=8).G.remove_node("b").G.remove
1ee40 5f 6e 6f 64 65 73 5f 66 72 6f 6d 28 22 61 72 22 29 0a 70 72 69 6e 74 28 22 4e 6f 64 65 73 20 69 _nodes_from("ar").print("Nodes.i
1ee60 6e 20 47 3a 20 22 2c 20 47 2e 6e 6f 64 65 73 28 64 61 74 61 3d 54 72 75 65 29 29 0a 47 2e 61 64 n.G:.",.G.nodes(data=True)).G.ad
1ee80 64 5f 65 64 67 65 28 30 2c 20 31 2c 20 77 65 69 67 68 74 3d 31 30 29 0a 70 72 69 6e 74 28 22 45 d_edge(0,.1,.weight=10).print("E
1eea0 64 67 65 73 20 69 6e 20 47 3a 20 22 2c 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 dges.in.G:.",.G.edges(data=True)
1eec0 29 0a 47 2e 72 65 6d 6f 76 65 5f 65 64 67 65 28 30 2c 20 31 29 0a 47 2e 61 64 64 5f 65 64 67 65 ).G.remove_edge(0,.1).G.add_edge
1eee0 73 5f 66 72 6f 6d 28 7a 69 70 28 72 61 6e 67 65 28 30 2c 20 33 29 2c 20 72 61 6e 67 65 28 31 2c s_from(zip(range(0,.3),.range(1,
1ef00 20 34 29 29 2c 20 77 65 69 67 68 74 3d 31 30 29 0a 70 72 69 6e 74 28 22 45 64 67 65 73 20 69 6e .4)),.weight=10).print("Edges.in
1ef20 20 47 3a 20 22 2c 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 29 0a 47 2e 72 65 6d .G:.",.G.edges(data=True)).G.rem
1ef40 6f 76 65 5f 65 64 67 65 73 5f 66 72 6f 6d 28 7a 69 70 28 72 61 6e 67 65 28 30 2c 20 33 29 2c 20 ove_edges_from(zip(range(0,.3),.
1ef60 72 61 6e 67 65 28 31 2c 20 34 29 29 29 0a 70 72 69 6e 74 28 22 45 64 67 65 73 20 69 6e 20 47 3a range(1,.4))).print("Edges.in.G:
1ef80 20 22 2c 20 47 2e 65 64 67 65 73 28 64 61 74 61 3d 54 72 75 65 29 29 0a 0a 47 20 3d 20 50 72 69 .",.G.edges(data=True))..G.=.Pri
1efa0 6e 74 47 72 61 70 68 28 29 0a 6e 78 2e 61 64 64 5f 70 61 74 68 28 47 2c 20 72 61 6e 67 65 28 31 ntGraph().nx.add_path(G,.range(1
1efc0 30 29 29 0a 6e 78 2e 61 64 64 5f 73 74 61 72 28 47 2c 20 72 61 6e 67 65 28 39 2c 20 31 33 29 29 0)).nx.add_star(G,.range(9,.13))
1efe0 0a 70 6f 73 20 3d 20 6e 78 2e 73 70 72 69 6e 67 5f 6c 61 79 6f 75 74 28 47 2c 20 73 65 65 64 3d .pos.=.nx.spring_layout(G,.seed=
1f000 32 32 35 29 20 20 23 20 53 65 65 64 20 66 6f 72 20 72 65 70 72 6f 64 75 63 69 62 6c 65 20 6c 61 225)..#.Seed.for.reproducible.la
1f020 79 6f 75 74 0a 6e 78 2e 64 72 61 77 28 47 2c 20 70 6f 73 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a yout.nx.draw(G,.pos).plt.show().
1f040 50 4b 01 02 14 03 14 00 00 00 00 00 02 7b 57 56 40 87 eb 83 a6 03 00 00 a6 03 00 00 1c 00 00 00 PK...........{WV@...............
1f060 00 00 00 00 00 00 00 00 a4 81 00 00 00 00 33 64 5f 64 72 61 77 69 6e 67 2f 6d 61 79 61 76 69 32 ..............3d_drawing/mayavi2
1f080 5f 73 70 72 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 02 7b 57 56 c4 33 ea 37 7d 04 _spring.pyPK...........{WV.3.7}.
1f0a0 00 00 7d 04 00 00 18 00 00 00 00 00 00 00 00 00 00 00 a4 81 e0 03 00 00 33 64 5f 64 72 61 77 69 ..}.....................3d_drawi
1f0c0 6e 67 2f 70 6c 6f 74 5f 62 61 73 69 63 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 20 7b 57 56 ng/plot_basic.pyPK...........{WV
1f0e0 58 f2 c2 60 09 0c 00 00 09 0c 00 00 17 00 00 00 00 00 00 00 00 00 00 00 a4 81 93 08 00 00 61 6c X..`..........................al
1f100 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 73 6e 61 70 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 gorithms/plot_snap.pyPK.........
1f120 00 0e 7b 57 56 7f c5 e1 aa 85 03 00 00 85 03 00 00 2a 00 00 00 00 00 00 00 00 00 00 00 a4 81 d1 ..{WV............*..............
1f140 14 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 6d 61 78 69 6d 75 6d 5f 69 6e 64 65 70 ...algorithms/plot_maximum_indep
1f160 65 6e 64 65 6e 74 5f 73 65 74 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0e 7b 57 56 7d 53 7b endent_set.pyPK...........{WV}S{
1f180 3e cc 08 00 00 cc 08 00 00 22 00 00 00 00 00 00 00 00 00 00 00 a4 81 9e 18 00 00 61 6c 67 6f 72 >........".................algor
1f1a0 69 74 68 6d 73 2f 70 6c 6f 74 5f 64 65 64 65 6e 73 69 66 69 63 61 74 69 6f 6e 2e 70 79 50 4b 01 ithms/plot_dedensification.pyPK.
1f1c0 02 14 03 14 00 00 00 00 00 0e 7b 57 56 06 cf c1 cd 7d 02 00 00 7d 02 00 00 28 00 00 00 00 00 00 ..........{WV....}...}...(......
1f1e0 00 00 00 00 00 a4 81 aa 21 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 6b 72 61 63 6b ........!..algorithms/plot_krack
1f200 68 61 72 64 74 5f 63 65 6e 74 72 61 6c 69 74 79 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0e hardt_centrality.pyPK...........
1f220 7b 57 56 7b 7c 91 76 6c 17 00 00 6c 17 00 00 2d 00 00 00 00 00 00 00 00 00 00 00 a4 81 6d 24 00 {WV{|.vl...l...-.............m$.
1f240 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 69 74 65 72 61 74 65 64 5f 64 79 6e 61 6d 69 .algorithms/plot_iterated_dynami
1f260 63 61 6c 5f 73 79 73 74 65 6d 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0e 7b 57 56 e2 9f cal_systems.pyPK...........{WV..
1f280 eb 7c 8c 09 00 00 8c 09 00 00 27 00 00 00 00 00 00 00 00 00 00 00 a4 81 24 3c 00 00 61 6c 67 6f .|........'.............$<..algo
1f2a0 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 70 61 72 61 6c 6c 65 6c 5f 62 65 74 77 65 65 6e 6e 65 73 73 rithms/plot_parallel_betweenness
1f2c0 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0a 7b 57 56 28 8a 4a da 4e 08 00 00 4e 08 00 00 29 .pyPK...........{WV(.J.N...N...)
1f2e0 00 00 00 00 00 00 00 00 00 00 00 a4 81 f5 45 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 ..............E..algorithms/plot
1f300 5f 62 65 74 77 65 65 6e 6e 65 73 73 5f 63 65 6e 74 72 61 6c 69 74 79 2e 70 79 50 4b 01 02 14 03 _betweenness_centrality.pyPK....
1f320 14 00 00 00 00 00 0e 7b 57 56 1c 5a 38 01 a9 04 00 00 a9 04 00 00 1d 00 00 00 00 00 00 00 00 00 .......{WV.Z8...................
1f340 00 00 a4 81 8a 4e 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 64 61 76 69 73 5f 63 6c .....N..algorithms/plot_davis_cl
1f360 75 62 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0d 7b 57 56 39 4e 07 68 a8 0d 00 00 a8 0d 00 ub.pyPK...........{WV9N.h.......
1f380 00 1b 00 00 00 00 00 00 00 00 00 00 00 a4 81 6e 53 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c ...............nS..algorithms/pl
1f3a0 6f 74 5f 63 69 72 63 75 69 74 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0d 7b 57 56 a4 7c ot_circuits.pyPK...........{WV.|
1f3c0 15 e2 76 0a 00 00 76 0a 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 a4 81 4f 61 00 00 61 6c 67 6f ..v...v.................Oa..algo
1f3e0 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 62 6c 6f 63 6b 6d 6f 64 65 6c 2e 70 79 50 4b 01 02 14 03 14 rithms/plot_blockmodel.pyPK.....
1f400 00 00 00 00 00 0a 7b 57 56 d2 bd 8b 1b 17 10 00 00 17 10 00 00 1e 00 00 00 00 00 00 00 00 00 00 ......{WV.......................
1f420 00 a4 81 00 6c 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 62 65 61 6d 5f 73 65 61 72 ....l..algorithms/plot_beam_sear
1f440 63 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 20 7b 57 56 40 59 d4 42 4a 19 00 00 4a 19 00 ch.pyPK...........{WV@Y.BJ...J..
1f460 00 1c 00 00 00 00 00 00 00 00 00 00 00 a4 81 53 7c 00 00 61 6c 67 6f 72 69 74 68 6d 73 2f 70 6c ...............S|..algorithms/pl
1f480 6f 74 5f 73 75 62 67 72 61 70 68 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 1d 7b 57 56 bf ot_subgraphs.pyPK...........{WV.
1f4a0 97 02 92 0f 04 00 00 0f 04 00 00 16 00 00 00 00 00 00 00 00 00 00 00 a4 81 d7 95 00 00 61 6c 67 .............................alg
1f4c0 6f 72 69 74 68 6d 73 2f 70 6c 6f 74 5f 72 63 6d 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 fb orithms/plot_rcm.pyPK...........
1f4e0 7a 57 56 cd e1 fa d2 29 04 00 00 29 04 00 00 18 00 00 00 00 00 00 00 00 00 00 00 a4 81 1a 9a 00 zWV....)...)....................
1f500 00 62 61 73 69 63 2f 70 6c 6f 74 5f 70 72 6f 70 65 72 74 69 65 73 2e 70 79 50 4b 01 02 14 03 14 .basic/plot_properties.pyPK.....
1f520 00 00 00 00 00 fb 7a 57 56 e7 2e 09 89 0d 02 00 00 0d 02 00 00 18 00 00 00 00 00 00 00 00 00 00 ......zWV.......................
1f540 00 a4 81 79 9e 00 00 62 61 73 69 63 2f 70 6c 6f 74 5f 72 65 61 64 5f 77 72 69 74 65 2e 70 79 50 ...y...basic/plot_read_write.pyP
1f560 4b 01 02 14 03 14 00 00 00 00 00 fb 7a 57 56 46 e4 8f 07 d8 04 00 00 d8 04 00 00 1a 00 00 00 00 K...........zWVF................
1f580 00 00 00 00 00 00 00 a4 81 bc a0 00 00 62 61 73 69 63 2f 70 6c 6f 74 5f 73 69 6d 70 6c 65 5f 67 .............basic/plot_simple_g
1f5a0 72 61 70 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 02 7b 57 56 97 66 db 6e 64 04 00 00 64 raph.pyPK...........{WV.f.nd...d
1f5c0 04 00 00 1e 00 00 00 00 00 00 00 00 00 00 00 a4 81 cc a5 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f .....................drawing/plo
1f5e0 74 5f 77 65 69 67 68 74 65 64 5f 67 72 61 70 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 01 t_weighted_graph.pyPK...........
1f600 7b 57 56 2e 68 51 b1 fc 00 00 00 fc 00 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 a4 81 6c aa 00 {WV.hQ.......................l..
1f620 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 73 69 6d 70 6c 65 5f 70 61 74 68 2e 70 79 50 4b 01 02 .drawing/plot_simple_path.pyPK..
1f640 14 03 14 00 00 00 00 00 fc 7a 57 56 d2 66 e0 26 5b 08 00 00 5b 08 00 00 21 00 00 00 00 00 00 00 .........zWV.f.&[...[...!.......
1f660 00 00 00 00 a4 81 a1 ab 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 63 75 73 74 6f 6d 5f 6e 6f ..........drawing/plot_custom_no
1f680 64 65 5f 69 63 6f 6e 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 fc 7a 57 56 1f 79 51 49 5b de_icons.pyPK...........zWV.yQI[
1f6a0 04 00 00 5b 04 00 00 18 00 00 00 00 00 00 00 00 00 00 00 a4 81 3b b4 00 00 64 72 61 77 69 6e 67 ...[.................;...drawing
1f6c0 2f 70 6c 6f 74 5f 64 69 72 65 63 74 65 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 02 7b 57 /plot_directed.pyPK...........{W
1f6e0 56 5d b9 c3 0e 15 05 00 00 15 05 00 00 13 00 00 00 00 00 00 00 00 00 00 00 a4 81 cc b8 00 00 64 V].............................d
1f700 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 74 73 70 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 00 7b rawing/plot_tsp.pyPK...........{
1f720 57 56 d4 74 ef ce db 04 00 00 db 04 00 00 21 00 00 00 00 00 00 00 00 00 00 00 a4 81 12 be 00 00 WV.t..........!.................
1f740 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 6c 61 62 65 6c 73 5f 61 6e 64 5f 63 6f 6c 6f 72 73 2e 70 drawing/plot_labels_and_colors.p
1f760 79 50 4b 01 02 14 03 14 00 00 00 00 00 fd 7a 57 56 4e c6 76 b2 28 02 00 00 28 02 00 00 1b 00 00 yPK...........zWVN.v.(...(......
1f780 00 00 00 00 00 00 00 00 00 a4 81 2c c3 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 65 69 67 65 ...........,...drawing/plot_eige
1f7a0 6e 76 61 6c 75 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 01 7b 57 56 b0 0b f0 aa 38 06 nvalues.pyPK...........{WV....8.
1f7c0 00 00 38 06 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 a4 81 8d c5 00 00 64 72 61 77 69 6e 67 2f ..8.....................drawing/
1f7e0 70 6c 6f 74 5f 73 70 65 63 74 72 61 6c 5f 67 72 69 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 plot_spectral_grid.pyPK.........
1f800 00 00 7b 57 56 11 ef 87 aa 7c 08 00 00 7c 08 00 00 20 00 00 00 00 00 00 00 00 00 00 00 a4 81 00 ..{WV....|...|..................
1f820 cc 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 72 61 69 6e 62 6f 77 5f 63 6f 6c 6f 72 69 6e 67 ...drawing/plot_rainbow_coloring
1f840 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 fd 7a 57 56 bf 3e 32 8a 1e 04 00 00 1e 04 00 00 1a .pyPK...........zWV.>2..........
1f860 00 00 00 00 00 00 00 00 00 00 00 a4 81 ba d4 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 66 6f .................drawing/plot_fo
1f880 75 72 5f 67 72 69 64 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 00 7b 57 56 85 72 37 d3 06 ur_grids.pyPK...........{WV.r7..
1f8a0 10 00 00 06 10 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 a4 81 10 d9 00 00 64 72 61 77 69 6e 67 .........................drawing
1f8c0 2f 70 6c 6f 74 5f 6b 6e 75 74 68 5f 6d 69 6c 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 /plot_knuth_miles.pyPK..........
1f8e0 fb 7a 57 56 c9 61 01 95 e3 11 00 00 e3 11 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 a4 81 4f e9 .zWV.a........................O.
1f900 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 63 68 65 73 73 5f 6d 61 73 74 65 72 73 2e 70 79 50 ..drawing/plot_chess_masters.pyP
1f920 4b 01 02 14 03 14 00 00 00 00 00 00 7b 57 56 52 90 4b e1 20 01 00 00 20 01 00 00 1d 00 00 00 00 K...........{WVR.K..............
1f940 00 00 00 00 00 00 00 a4 81 6d fb 00 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 6e 6f 64 65 5f 63 .........m...drawing/plot_node_c
1f960 6f 6c 6f 72 6d 61 70 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 fb 7a 57 56 2c 86 d6 29 6d 02 olormap.pyPK...........zWV,..)m.
1f980 00 00 6d 02 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 a4 81 c8 fc 00 00 64 72 61 77 69 6e 67 2f ..m.....................drawing/
1f9a0 70 6c 6f 74 5f 63 65 6e 74 65 72 5f 6e 6f 64 65 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 01 plot_center_node.pyPK...........
1f9c0 7b 57 56 cb c7 a6 62 aa 03 00 00 aa 03 00 00 26 00 00 00 00 00 00 00 00 00 00 00 a4 81 6e ff 00 {WV...b........&.............n..
1f9e0 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 72 61 6e 64 6f 6d 5f 67 65 6f 6d 65 74 72 69 63 5f 67 .drawing/plot_random_geometric_g
1fa00 72 61 70 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 02 7b 57 56 1a 64 80 3d ac 07 00 00 ac raph.pyPK...........{WV.d.=.....
1fa20 07 00 00 1a 00 00 00 00 00 00 00 00 00 00 00 a4 81 5c 03 01 00 64 72 61 77 69 6e 67 2f 70 6c 6f .................\...drawing/plo
1fa40 74 5f 75 6e 69 78 5f 65 6d 61 69 6c 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 00 7b 57 56 df t_unix_email.pyPK...........{WV.
1fa60 c6 01 9e 99 02 00 00 99 02 00 00 21 00 00 00 00 00 00 00 00 00 00 00 a4 81 40 0b 01 00 64 72 61 ...........!.............@...dra
1fa80 77 69 6e 67 2f 70 6c 6f 74 5f 68 6f 75 73 65 5f 77 69 74 68 5f 63 6f 6c 6f 72 73 2e 70 79 50 4b wing/plot_house_with_colors.pyPK
1faa0 01 02 14 03 14 00 00 00 00 00 fc 7a 57 56 99 7c b8 07 14 06 00 00 14 06 00 00 16 00 00 00 00 00 ...........zWV.|................
1fac0 00 00 00 00 00 00 a4 81 18 0e 01 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 64 65 67 72 65 65 2e ............drawing/plot_degree.
1fae0 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 fc 7a 57 56 c2 48 7c 27 b9 01 00 00 b9 01 00 00 1d 00 pyPK...........zWV.H|'..........
1fb00 00 00 00 00 00 00 00 00 00 00 a4 81 60 14 01 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 65 64 67 ............`...drawing/plot_edg
1fb20 65 5f 63 6f 6c 6f 72 6d 61 70 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 00 7b 57 56 b2 f9 30 e_colormap.pyPK...........{WV..0
1fb40 8f e1 03 00 00 e1 03 00 00 22 00 00 00 00 00 00 00 00 00 00 00 a4 81 54 16 01 00 64 72 61 77 69 .........".............T...drawi
1fb60 6e 67 2f 70 6c 6f 74 5f 6d 75 6c 74 69 70 61 72 74 69 74 65 5f 67 72 61 70 68 2e 70 79 50 4b 01 ng/plot_multipartite_graph.pyPK.
1fb80 02 14 03 14 00 00 00 00 00 fd 7a 57 56 a5 8c 2c 3b 8e 03 00 00 8e 03 00 00 19 00 00 00 00 00 00 ..........zWV..,;...............
1fba0 00 00 00 00 00 a4 81 75 1a 01 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 65 67 6f 5f 67 72 61 70 .......u...drawing/plot_ego_grap
1fbc0 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 01 7b 57 56 c3 cc b5 fe f1 02 00 00 f1 02 00 00 h.pyPK...........{WV............
1fbe0 19 00 00 00 00 00 00 00 00 00 00 00 a4 81 3a 1e 01 00 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 73 ..............:...drawing/plot_s
1fc00 65 6c 66 6c 6f 6f 70 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 01 7b 57 56 a6 98 11 54 cc elfloops.pyPK...........{WV...T.
1fc20 04 00 00 cc 04 00 00 17 00 00 00 00 00 00 00 00 00 00 00 a4 81 62 21 01 00 64 72 61 77 69 6e 67 .....................b!..drawing
1fc40 2f 70 6c 6f 74 5f 73 61 6d 70 73 6f 6e 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 21 7b 57 56 /plot_sampson.pyPK..........!{WV
1fc60 48 43 5f 48 da 03 00 00 da 03 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 a4 81 63 26 01 00 65 78 HC_H......................c&..ex
1fc80 74 65 72 6e 61 6c 2f 6a 61 76 61 73 63 72 69 70 74 5f 66 6f 72 63 65 2e 70 79 50 4b 01 02 14 03 ternal/javascript_force.pyPK....
1fca0 14 00 00 00 00 00 21 7b 57 56 fb 9b b3 8f 1d 04 00 00 1d 04 00 00 17 00 00 00 00 00 00 00 00 00 ......!{WV......................
1fcc0 00 00 a4 81 77 2a 01 00 65 78 74 65 72 6e 61 6c 2f 70 6c 6f 74 5f 69 67 72 61 70 68 2e 70 79 50 ....w*..external/plot_igraph.pyP
1fce0 4b 01 02 14 03 14 00 00 00 00 00 26 7b 57 56 1d 30 9c dd 80 07 00 00 80 07 00 00 18 00 00 00 00 K..........&{WV.0...............
1fd00 00 00 00 00 00 00 00 a4 81 c9 2e 01 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f 6f 73 6d .............geospatial/plot_osm
1fd20 6e 78 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 24 7b 57 56 9f de 91 4c 38 0f 00 00 38 0f 00 nx.pyPK..........${WV...L8...8..
1fd40 00 18 00 00 00 00 00 00 00 00 00 00 00 a4 81 7f 36 01 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c ................6..geospatial/pl
1fd60 6f 74 5f 6c 69 6e 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 2c 7b 57 56 ae 9b 92 8f cc ot_lines.pyPK..........,{WV.....
1fd80 08 00 00 cc 08 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 a4 81 ed 45 01 00 67 65 6f 73 70 61 74 ......................E..geospat
1fda0 69 61 6c 2f 70 6c 6f 74 5f 70 6f 6c 79 67 6f 6e 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 ial/plot_polygons.pyPK..........
1fdc0 21 7b 57 56 46 4d ec 62 07 0c 00 00 07 0c 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 a4 81 f2 4e !{WVFM.b.......................N
1fde0 01 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f 64 65 6c 61 75 6e 61 79 2e 70 79 50 4b 01 ..geospatial/plot_delaunay.pyPK.
1fe00 02 14 03 14 00 00 00 00 00 29 7b 57 56 65 4d 6f 7e b9 08 00 00 b9 08 00 00 19 00 00 00 00 00 00 .........){WVeMo~...............
1fe20 00 00 00 00 00 a4 81 32 5b 01 00 67 65 6f 73 70 61 74 69 61 6c 2f 70 6c 6f 74 5f 70 6f 69 6e 74 .......2[..geospatial/plot_point
1fe40 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 08 7b 57 56 cf e3 c7 3b 4e 08 00 00 4e 08 00 00 s.pyPK...........{WV...;N...N...
1fe60 13 00 00 00 00 00 00 00 00 00 00 00 a4 81 22 64 01 00 67 72 61 70 68 2f 70 6c 6f 74 5f 72 6f 67 .............."d..graph/plot_rog
1fe80 65 74 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 7b 57 56 3c 44 85 f0 79 0a 00 00 79 0a 00 et.pyPK...........{WV<D..y...y..
1fea0 00 13 00 00 00 00 00 00 00 00 00 00 00 a4 81 a1 6c 01 00 67 72 61 70 68 2f 70 6c 6f 74 5f 77 6f ................l..graph/plot_wo
1fec0 72 64 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 07 7b 57 56 0f 9f 6b e9 49 03 00 00 49 03 rds.pyPK...........{WV..k.I...I.
1fee0 00 00 19 00 00 00 00 00 00 00 00 00 00 00 a4 81 4b 77 01 00 67 72 61 70 68 2f 70 6c 6f 74 5f 65 ................Kw..graph/plot_e
1ff00 72 64 6f 73 5f 72 65 6e 79 69 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 08 7b 57 56 61 9a b2 rdos_renyi.pyPK...........{WVa..
1ff20 f5 96 0b 00 00 96 0b 00 00 18 00 00 00 00 00 00 00 00 00 00 00 a4 81 cb 7a 01 00 67 72 61 70 68 ........................z..graph
1ff40 2f 70 6c 6f 74 5f 6d 6f 72 73 65 5f 74 72 69 65 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 07 /plot_morse_trie.pyPK...........
1ff60 7b 57 56 ba ce f4 d5 f3 03 00 00 f3 03 00 00 18 00 00 00 00 00 00 00 00 00 00 00 a4 81 97 86 01 {WV.............................
1ff80 00 67 72 61 70 68 2f 70 6c 6f 74 5f 64 61 67 5f 6c 61 79 6f 75 74 2e 70 79 50 4b 01 02 14 03 14 .graph/plot_dag_layout.pyPK.....
1ffa0 00 00 00 00 00 07 7b 57 56 e2 92 f1 e1 26 03 00 00 26 03 00 00 1d 00 00 00 00 00 00 00 00 00 00 ......{WV....&...&..............
1ffc0 00 a4 81 c0 8a 01 00 67 72 61 70 68 2f 70 6c 6f 74 5f 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 .......graph/plot_degree_sequenc
1ffe0 65 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 07 7b 57 56 60 b2 58 c9 93 04 00 00 93 04 00 00 e.pyPK...........{WV`.X.........
20000 16 00 00 00 00 00 00 00 00 00 00 00 a4 81 21 8e 01 00 67 72 61 70 68 2f 70 6c 6f 74 5f 66 6f 6f ..............!...graph/plot_foo
20020 74 62 61 6c 6c 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 08 7b 57 56 be b3 44 81 a0 07 00 00 tball.pyPK...........{WV..D.....
20040 a0 07 00 00 19 00 00 00 00 00 00 00 00 00 00 00 a4 81 e8 92 01 00 67 72 61 70 68 2f 70 6c 6f 74 ......................graph/plot
20060 5f 74 72 69 61 64 5f 74 79 70 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 07 7b 57 56 ab _triad_types.pyPK...........{WV.
20080 06 65 1a f0 01 00 00 f0 01 00 00 26 00 00 00 00 00 00 00 00 00 00 00 a4 81 bf 9a 01 00 67 72 61 .e.........&.................gra
200a0 70 68 2f 70 6c 6f 74 5f 65 78 70 65 63 74 65 64 5f 64 65 67 72 65 65 5f 73 65 71 75 65 6e 63 65 ph/plot_expected_degree_sequence
200c0 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 08 7b 57 56 33 1a c8 eb ee 01 00 00 ee 01 00 00 19 .pyPK...........{WV3............
200e0 00 00 00 00 00 00 00 00 00 00 00 a4 81 f3 9c 01 00 67 72 61 70 68 2f 70 6c 6f 74 5f 6b 61 72 61 .................graph/plot_kara
20100 74 65 5f 63 6c 75 62 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 08 7b 57 56 85 75 5f 5c 55 0b te_club.pyPK...........{WV.u_\U.
20120 00 00 55 0b 00 00 27 00 00 00 00 00 00 00 00 00 00 00 a4 81 18 9f 01 00 67 72 61 70 68 2f 70 6c ..U...'.................graph/pl
20140 6f 74 5f 6e 61 70 6f 6c 65 6f 6e 5f 72 75 73 73 69 61 6e 5f 63 61 6d 70 61 69 67 6e 2e 70 79 50 ot_napoleon_russian_campaign.pyP
20160 4b 01 02 14 03 14 00 00 00 00 00 07 7b 57 56 0c 6c bc 07 cb 02 00 00 cb 02 00 00 1d 00 00 00 00 K...........{WV.l...............
20180 00 00 00 00 00 00 00 a4 81 b2 aa 01 00 67 72 61 70 68 76 69 7a 5f 64 72 61 77 69 6e 67 2f 70 6c .............graphviz_drawing/pl
201a0 6f 74 5f 67 72 69 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 06 7b 57 56 42 40 d4 07 62 02 ot_grid.pyPK...........{WVB@..b.
201c0 00 00 62 02 00 00 23 00 00 00 00 00 00 00 00 00 00 00 a4 81 b8 ad 01 00 67 72 61 70 68 76 69 7a ..b...#.................graphviz
201e0 5f 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 63 6f 6e 76 65 72 73 69 6f 6e 2e 70 79 50 4b 01 02 14 _drawing/plot_conversion.pyPK...
20200 03 14 00 00 00 00 00 06 7b 57 56 bd 2c e8 df b6 02 00 00 b6 02 00 00 23 00 00 00 00 00 00 00 00 ........{WV.,..........#........
20220 00 00 00 a4 81 5b b0 01 00 67 72 61 70 68 76 69 7a 5f 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 61 .....[...graphviz_drawing/plot_a
20240 74 74 72 69 62 75 74 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 07 7b 57 56 c4 86 33 36 ttributes.pyPK...........{WV..36
20260 55 02 00 00 55 02 00 00 23 00 00 00 00 00 00 00 00 00 00 00 a4 81 52 b3 01 00 67 72 61 70 68 76 U...U...#.............R...graphv
20280 69 7a 5f 64 72 61 77 69 6e 67 2f 70 6c 6f 74 5f 6d 69 6e 69 5f 61 74 6c 61 73 2e 70 79 50 4b 01 iz_drawing/plot_mini_atlas.pyPK.
202a0 02 14 03 14 00 00 00 00 00 05 7b 57 56 ce 9e 05 c7 50 04 00 00 50 04 00 00 25 00 00 00 00 00 00 ..........{WV....P...P...%......
202c0 00 00 00 00 00 a4 81 e8 b5 01 00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f ...........graphviz_layout/plot_
202e0 64 65 63 6f 6d 70 6f 73 69 74 69 6f 6e 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 02 7b 57 56 decomposition.pyPK...........{WV
20300 3f 47 2f 07 94 05 00 00 94 05 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 a4 81 7b ba 01 00 67 72 ?G/.......................{...gr
20320 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 61 74 6c 61 73 2e 70 79 50 4b 01 02 14 aphviz_layout/plot_atlas.pyPK...
20340 03 14 00 00 00 00 00 05 7b 57 56 e6 71 7f ce bb 06 00 00 bb 06 00 00 27 00 00 00 00 00 00 00 00 ........{WV.q..........'........
20360 00 00 00 a4 81 4a c0 01 00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 67 69 .....J...graphviz_layout/plot_gi
20380 61 6e 74 5f 63 6f 6d 70 6f 6e 65 6e 74 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 05 7b 57 56 ant_component.pyPK...........{WV
203a0 7d af ce 32 76 01 00 00 76 01 00 00 25 00 00 00 00 00 00 00 00 00 00 00 a4 81 4a c7 01 00 67 72 }..2v...v...%.............J...gr
203c0 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 2f 70 6c 6f 74 5f 63 69 72 63 75 6c 61 72 5f 74 72 65 65 aphviz_layout/plot_circular_tree
203e0 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 06 7b 57 56 7f 36 18 54 10 06 00 00 10 06 00 00 23 .pyPK...........{WV.6.T........#
20400 00 00 00 00 00 00 00 00 00 00 00 a4 81 03 c9 01 00 67 72 61 70 68 76 69 7a 5f 6c 61 79 6f 75 74 .................graphviz_layout
20420 2f 70 6c 6f 74 5f 6c 61 6e 6c 5f 72 6f 75 74 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 /plot_lanl_routes.pyPK..........
20440 2c 7b 57 56 4a 68 e8 5f 87 17 00 00 87 17 00 00 1a 00 00 00 00 00 00 00 00 00 00 00 a4 81 54 cf ,{WVJh._......................T.
20460 01 00 73 75 62 63 6c 61 73 73 2f 70 6c 6f 74 5f 61 6e 74 69 67 72 61 70 68 2e 70 79 50 4b 01 02 ..subclass/plot_antigraph.pyPK..
20480 14 03 14 00 00 00 00 00 2c 7b 57 56 b2 4b 1a 52 f4 08 00 00 f4 08 00 00 1b 00 00 00 00 00 00 00 ........,{WV.K.R................
204a0 00 00 00 00 a4 81 13 e7 01 00 73 75 62 63 6c 61 73 73 2f 70 6c 6f 74 5f 70 72 69 6e 74 67 72 61 ..........subclass/plot_printgra
204c0 70 68 2e 70 79 50 4b 05 06 00 00 00 00 46 00 46 00 85 14 00 00 40 f0 01 00 00 00 ph.pyPK......F.F.....@.....