def test_subnet_mplex_to_mlayer(self): mplex = net.MultiplexNetwork([('categorical', 1.0)], fullyInterconnected=False) mplex[0, 1, 0] = 1 mplex[0, 2, 1] = 1 mlayer = transforms.subnet(mplex, [0, 1, 2], [0, 1], newNet=net.MultilayerNetwork( aspects=1, fullyInterconnected=False)) self.assertEqual( set(mlayer.edges), set([(0, 0, 0, 1, 1.0), (0, 1, 0, 0, 1), (0, 2, 1, 1, 1)])) self.assertTrue(isinstance(mlayer, net.MultilayerNetwork)) self.assertRaises( TypeError, lambda: transforms.subnet(mlayer, [0, 1, 2], [0, 1], newNet=net.MultiplexNetwork([( 'categorical', 1.0)]))) mplex = net.MultiplexNetwork([('categorical', 1.0)], fullyInterconnected=True) mplex[0, 1, 0] = 1 mplex[0, 2, 1] = 1 mlayer = transforms.subnet(mplex, [0, 1, 2], [0, 1], newNet=net.MultilayerNetwork(aspects=1)) self.assertEqual( set(mlayer.edges), set([(0, 0, 0, 1, 1.0), (0, 1, 0, 0, 1), (0, 2, 1, 1, 1), (1, 1, 0, 1, 1.0), (2, 2, 0, 1, 1.0)])) self.assertTrue(isinstance(mlayer, net.MultilayerNetwork))
def test_multiplex_density_degs_mnet(self): n=net.MultiplexNetwork(couplings='none',directed=False) self.test_multiplex_density_degs(n) n=net.MultiplexNetwork(couplings='categorical',directed=False) self.test_multiplex_density_degs(n) n=net.MultiplexNetwork(couplings='none',directed=False,fullyInterconnected=False) self.test_multiplex_density_degs(n)
def test_pickle(self): import pickle n=net.MultilayerNetwork(aspects=1) n[1,2,3,4]=1 self.assertEqual(pickle.loads(pickle.dumps(n)),n) n=net.MultilayerNetwork(aspects=1,directed=True) n[1,2,3,4]=1 self.assertEqual(pickle.loads(pickle.dumps(n)),n) n=net.MultiplexNetwork(couplings=[('categorical',1)]) n[1,2,3,3]=1 self.assertEqual(pickle.loads(pickle.dumps(n)),n) n=net.MultiplexNetwork(couplings=[('categorical',1)],directed=True) n[1,2,3,3]=1 self.assertEqual(pickle.loads(pickle.dumps(n)),n)
def test_mplex_networkx_layouts(self): from pymnet import nx g=nx.karate_club_graph() mplex=net.MultiplexNetwork() mplex.add_layer("karate-1") mplex.add_layer("karate-2") mplex.A['karate-1']=g mplex.A['karate-2']=g fig=visuals.draw(mplex,layout="spring") fig.savefig(os.path.join(self.figdirpath,"mplex_networkx_spring.png"))
def test_unweighted_mplex_simple(self): n = net.MultiplexNetwork([('categorical', 1.0)]) n[1, 2, 1] = 1 n[1, 3, 1] = 1 n[2, 3, 1] = 1 n[1, 2, 2] = 1 n[1, 3, 2] = 1 n[1, 4, 2] = 1 n[3, 4, 2] = 1 n[1, 2, 3] = 1 n[1, 3, 3] = 1 n[1, 4, 3] = 1 n[2, 4, 3] = 1 an = net.MultilayerNetwork(aspects=0) an[1, 2] = 3 an[1, 3] = 3 an[1, 4] = 2 an[2, 3] = 1 an[3, 4] = 1 an[2, 4] = 1 for i in range(4): self.assertEqual(cc.cc_barrett(n, i, an), cc.cc_barrett_explicit(n, i)) self.assertEqual(cc.lcc_brodka(n, 1, anet=None, threshold=1), 2. / 3.) self.assertEqual(cc.lcc_brodka(n, 2, anet=None, threshold=1), 4. / 3.) self.assertEqual(cc.lcc_brodka(n, 3, anet=None, threshold=1), 4. / 3.) self.assertEqual(cc.lcc_brodka(n, 4, anet=None, threshold=1), 14. / 9.) self.assertEqual(cc.lcc_brodka(n, 1, anet=an, threshold=1), 2. / 3.) self.assertEqual(cc.lcc_brodka(n, 2, anet=an, threshold=1), 4. / 3.) self.assertEqual(cc.lcc_brodka(n, 3, anet=an, threshold=1), 4. / 3.) self.assertEqual(cc.lcc_brodka(n, 4, anet=an, threshold=1), 14. / 9.) self.assertEqual(cc.lcc_brodka(n, 1, anet=None, threshold=2), 2. / 3.) self.assertEqual(cc.lcc_brodka(n, 2, anet=None, threshold=2), 0.) self.assertEqual(cc.lcc_brodka(n, 3, anet=None, threshold=2), 0.) self.assertEqual(cc.lcc_brodka(n, 4, anet=None, threshold=2), 0.) self.assertEqual(cc.lcc_brodka(n, 1, anet=an, threshold=2), 2. / 3.) self.assertEqual(cc.lcc_brodka(n, 2, anet=an, threshold=2), 0.) self.assertEqual(cc.lcc_brodka(n, 3, anet=an, threshold=2), 0.) self.assertEqual(cc.lcc_brodka(n, 4, anet=an, threshold=2), 0.) self.assertEqual(cc.lcc_brodka(n, 1, anet=None, threshold=3), 1. / 3.) self.assertEqual(cc.lcc_brodka(n, 2, anet=None, threshold=3), 0.) self.assertEqual(cc.lcc_brodka(n, 3, anet=None, threshold=3), 0.) self.assertEqual(cc.lcc_brodka(n, 4, anet=None, threshold=3), 0.) self.assertEqual(cc.lcc_brodka(n, 1, anet=an, threshold=3), 1. / 3.) self.assertEqual(cc.lcc_brodka(n, 2, anet=an, threshold=3), 0.) self.assertEqual(cc.lcc_brodka(n, 3, anet=an, threshold=3), 0.) self.assertEqual(cc.lcc_brodka(n, 4, anet=an, threshold=3), 0.)
def clique_net(nodes, levels): n = net.MultiplexNetwork([('categorical', 1.0)], directed=False) for level in range(levels): for i, j in itertools.combinations(range(nodes), 2): n[i, j, level] = 1 an = net.MultilayerNetwork(aspects=0, directed=False) for i, j in itertools.combinations(range(nodes), 2): an[i, j] = levels return n, an
def test_aggregate_1dim_mlayer_nonglobal_nodes(self): def test_net(n): n[1, 2, 'a'] = 1 n.add_layer('b') n.add_node(3, layer=('a')) n.add_node(4, layer=('c')) an = transforms.aggregate(n, 1) self.assertEqual(set(an), set([1, 2, 3, 4])) self.assertEqual(an[1, 2], 1) self.assertEqual(an.aspects, 0) mln = net.MultilayerNetwork(aspects=1, fullyInterconnected=False) test_net(mln) mpn = net.MultiplexNetwork([('categorical', 1.0)], fullyInterconnected=False) test_net(mpn)
def test_aggregate_2dim_mplex(self): n = net.MultiplexNetwork([('categorical', 1.0), ('categorical', 1.0)]) n[1, 2, 'a', 'x'] = 3 n[2, 3, 'a', 'x'] = 1 n[1, 2, 'b', 'x'] = 1 n[1, 3, 'b', 'x'] = 1 n[1, 2, 'c', 'x'] = 1 n[1, 3, 'c', 'x'] = 1 n[2, 3, 'c', 'x'] = 1 n[1, 2, 'b', 'y'] = 1 n[2, 3, 'b', 'y'] = 1 n[1, 2, 'c', 'y'] = 1 n[1, 3, 'c', 'y'] = 1 n[1, 2, 'a', 'y'] = 1 n[1, 3, 'a', 'y'] = 1 n[2, 3, 'a', 'y'] = 1 an1 = transforms.aggregate(n, 1) self.assertEqual(an1[1, 2, 'x'], 5) self.assertEqual(an1[1, 3, 'x'], 2) self.assertEqual(an1[2, 3, 'x'], 2) self.assertEqual(an1[1, 2, 'y'], 3) self.assertEqual(an1[1, 3, 'y'], 2) self.assertEqual(an1[2, 3, 'y'], 2) an2 = transforms.aggregate(n, 2) self.assertEqual(an2[1, 2, 'a'], 4) self.assertEqual(an2[1, 3, 'a'], 1) self.assertEqual(an2[2, 3, 'a'], 2) self.assertEqual(an2[1, 2, 'b'], 2) self.assertEqual(an2[1, 3, 'b'], 1) self.assertEqual(an2[2, 3, 'b'], 1) self.assertEqual(an2[1, 2, 'c'], 2) self.assertEqual(an2[1, 3, 'c'], 2) self.assertEqual(an2[2, 3, 'c'], 1) an3 = transforms.aggregate(n, (1, 2)) self.assertEqual(an3[1, 2], 8) self.assertEqual(an3[1, 3], 4) self.assertEqual(an3[2, 3], 4) self.assertEqual(an3, transforms.aggregate(an1, 1)) self.assertEqual(an3, transforms.aggregate(an2, 1))
def test_aggregate_2dim_mlayer_nonglobal_nodes(self): def test_net(n): n[1, 2, 'a', 'x'] = 3 n.add_layer('b', 1) n.add_layer('y', 2) n.add_node(3, layer=('a', 'x')) n.add_node(4, layer=('c', 'z')) an1 = transforms.aggregate(n, 1) self.assertEqual(set(an1), set([1, 2, 3, 4])) self.assertEqual(set(an1.iter_node_layers()), set([(1, 'x'), (2, 'x'), (3, 'x'), (4, 'z')])) an2 = transforms.aggregate(n, 2) self.assertEqual(set(an2), set([1, 2, 3, 4])) self.assertEqual(set(an2.iter_node_layers()), set([(1, 'a'), (2, 'a'), (3, 'a'), (4, 'c')])) mln = net.MultilayerNetwork(aspects=2, fullyInterconnected=False) test_net(mln) mpn = net.MultiplexNetwork([('categorical', 1.0), ('categorical', 1.0)], fullyInterconnected=False) test_net(mpn)
def test_multilayer_degs_mplexnet(self): n=net.MultiplexNetwork(couplings="none",fullyInterconnected=True) self.create_chain_mplex(n) self.assertEqual(diagnostics.degs(n,degstype="nodes"),{(1,1):1,(2,1):2,(3,1):2,(4,1):1,(1,3):1,(2,3):2,(3,3):2,(4,3):1,(1,2):0,(2,2):0,(3,2):0,(4,2):0}) n=net.MultiplexNetwork(couplings="none",fullyInterconnected=False) self.create_chain_mplex(n) self.assertEqual(diagnostics.degs(n,degstype="nodes"),{(1,1):1,(2,1):2,(3,1):2,(4,1):1,(1,3):1,(2,3):2,(3,3):2,(4,3):1}) n=net.MultiplexNetwork(couplings="categorical",fullyInterconnected=True) self.create_chain_mplex(n) self.assertEqual(diagnostics.degs(n,degstype="nodes"),{(1,1):3,(2,1):4,(3,1):4,(4,1):3,(1,3):3,(2,3):4,(3,3):4,(4,3):3,(1,2):2,(2,2):2,(3,2):2,(4,2):2}) n=net.MultiplexNetwork(couplings="categorical",fullyInterconnected=False) self.create_chain_mplex(n) self.assertEqual(diagnostics.degs(n,degstype="nodes"),{(1,1):2,(2,1):3,(3,1):3,(4,1):2,(1,3):2,(2,3):3,(3,3):3,(4,3):2}) n=net.MultiplexNetwork(couplings="ordinal",fullyInterconnected=True) self.create_chain_mplex(n) self.assertEqual(diagnostics.degs(n,degstype="nodes"),{(1,1):2,(2,1):3,(3,1):3,(4,1):2,(1,3):2,(2,3):3,(3,3):3,(4,3):2,(1,2):2,(2,2):2,(3,2):2,(4,2):2}) n=net.MultiplexNetwork(couplings="ordinal",fullyInterconnected=False) self.create_chain_mplex(n) self.assertEqual(diagnostics.degs(n,degstype="nodes"),{(1,1):1,(2,1):2,(3,1):2,(4,1):1,(1,3):1,(2,3):2,(3,3):2,(4,3):1})
def setUp(self): #create directory for figs if it doesn't exist self.figdirpath=os.path.join(os.path.dirname(os.path.realpath(__file__)),self.figdirname) if not os.path.exists(self.figdirpath): os.mkdir(self.figdirpath) n=net.MultiplexNetwork([('categorical',1.0)]) n[1,2,1]=1 n[1,3,1]=1 n[2,3,1]=1 n[1,2,2]=1 n[1,3,2]=1 n[1,4,2]=1 n[3,4,2]=1 n[1,2,3]=1 n[1,3,3]=1 n[1,4,3]=1 n[2,4,3]=1 self.mplex_simple=n n=net.MultiplexNetwork([('categorical',1.0)],fullyInterconnected=False) n[1,2,1]=1 n[1,3,1]=1 n[2,3,1]=1 n[1,2,2]=1 n[1,3,2]=1 n[1,4,2]=1 n[3,4,2]=1 n[1,2,3]=1 n[1,3,3]=1 n[1,4,3]=1 n[2,4,3]=1 self.mplex_nonaligned_simple=n #The 2-aspect example network for the review article n=net.MultilayerNetwork(aspects=2,fullyInterconnected=False) n[1,2,'A','A','X','X']=1 n[2,3,'A','A','Y','Y']=1 n[1,3,'B','B','X','X']=1 n[1,4,'B','B','X','X']=1 n[3,4,'B','B','X','X']=1 n[1,1,'A','B','X','X']=1 n[1,4,'A','B','X','X']=1 n[1,1,'B','B','X','Y']=1 n[3,3,'A','A','X','Y']=1 n[3,4,'A','B','X','Y']=1 self.mlayer_example_2d=n n=net.MultilayerNetwork(aspects=1,fullyInterconnected=False) n[1,2,'A','A']=1 n[2,3,'A','A']=1 n[1,3,'B','B']=1 n[1,4,'B','B']=1 n[3,4,'B','B']=1 n[1,1,'A','B']=1 n[1,4,'A','B']=1 n[3,4,'A','B']=1 self.mlayer_example_1d=n #Non-aligned network for testing multilayer coordinates n=net.MultilayerNetwork(aspects=1,fullyInterconnected=False) n.add_node(0,'a') n.add_node(1,'b') n.add_node(2,'b') n.add_node(3,'b') n.add_node(4,'b') n.add_node(5,'b') n[1,2,'b','b']=1 n[2,3,'b','b']=1 n[3,4,'b','b']=1 n[4,1,'b','b']=1 n[0,5,'a','b']=1 n[1,5,'b','b']=1 n[2,5,'b','b']=1 n[3,5,'b','b']=1 n[4,5,'b','b']=1 self.mlayer_nonaligned_aligntest=n #Second non-aligned network for testing multilayer coordinates n=net.MultilayerNetwork(aspects=1,fullyInterconnected=False) n.add_node(0,'a') n.add_node(1,'b') n.add_node(2,'b') n.add_node(3,'b') n.add_node(4,'b') n[1,2,'b','b']=1 n[2,3,'b','b']=1 n[3,4,'b','b']=1 n[4,1,'b','b']=1 n[0,0,'a','b']=1 n[1,0,'b','b']=1 n[2,0,'b','b']=1 n[3,0,'b','b']=1 n[4,0,'b','b']=1 self.mlayer_nonaligned_aligntest2=n n=net.MultilayerNetwork(aspects=0,fullyInterconnected=True) n[1,2]=1 n[2,3]=1 n[1,3]=1 n[1,4]=2 n[3,4]=2 self.mlayer_example_monoplex=n
def setUp(self): n = net.MultiplexNetwork([('categorical', 1.0)]) n[1, 2, 1] = 1 n[1, 3, 1] = 1 n[2, 3, 1] = 1 n[1, 2, 2] = 1 n[1, 3, 2] = 1 n[1, 4, 2] = 1 n[3, 4, 2] = 1 n[1, 2, 3] = 1 n[1, 3, 3] = 1 n[1, 4, 3] = 1 n[2, 4, 3] = 1 self.mplex_simple = n n = net.MultiplexNetwork([('categorical', 1.0)], fullyInterconnected=False) n[1, 2, 1] = 1 n[1, 3, 1] = 1 n[2, 3, 1] = 1 n[1, 2, 2] = 1 n[1, 3, 2] = 1 n[1, 4, 2] = 1 n[3, 4, 2] = 1 n[1, 2, 3] = 1 n[1, 3, 3] = 1 n[1, 4, 3] = 1 n[2, 4, 3] = 1 self.mplex_nonaligned_simple = n #The 2-aspect example network for the review article n = net.MultilayerNetwork(aspects=2, fullyInterconnected=False) n[1, 2, 'A', 'A', 'X', 'X'] = 1 n[2, 3, 'A', 'A', 'Y', 'Y'] = 1 n[1, 3, 'B', 'B', 'X', 'X'] = 1 n[1, 4, 'B', 'B', 'X', 'X'] = 1 n[3, 4, 'B', 'B', 'X', 'X'] = 1 n[1, 1, 'A', 'B', 'X', 'X'] = 1 n[1, 4, 'A', 'B', 'X', 'X'] = 1 n[1, 1, 'B', 'B', 'X', 'Y'] = 1 n[3, 3, 'A', 'A', 'X', 'Y'] = 1 n[3, 4, 'A', 'B', 'X', 'Y'] = 1 self.mlayer_example_2d = n n = net.MultilayerNetwork(aspects=1, fullyInterconnected=False) n[1, 2, 'A', 'A'] = 1 n[2, 3, 'A', 'A'] = 1 n[1, 3, 'B', 'B'] = 1 n[1, 4, 'B', 'B'] = 1 n[3, 4, 'B', 'B'] = 1 n[1, 1, 'A', 'B'] = 1 n[1, 4, 'A', 'B'] = 1 n[3, 4, 'A', 'B'] = 1 self.mlayer_example_1d = n n = net.MultilayerNetwork(aspects=0, fullyInterconnected=True) n[1, 2] = 1 n[2, 3] = 1 n[1, 3] = 1 n[1, 4] = 2 n[3, 4] = 2 self.mlayer_example_monoplex = n
def test_normalize_mplex_simple(self): n = net.MultiplexNetwork([('categorical', 1.0)]) n[0, 1, 0] = 1 n[0, 2, 0] = 1 n[1, 2, 0] = 1 n[0, 1, 1] = 1 n[0, 2, 1] = 1 n[0, 3, 1] = 1 n[2, 3, 1] = 1 n[0, 1, 2] = 1 n[0, 2, 2] = 1 n[0, 3, 2] = 1 n[1, 3, 2] = 1 nmap = {1: 0, 2: 1, 3: 2, 4: 3} lmap = {1: 0, 2: 1, 3: 2} self.assertEqual(transforms.normalize(self.mplex_simple), n) self.assertEqual( transforms.normalize(self.mplex_simple, nodesToIndices=True), (n, nmap)) self.assertEqual( transforms.normalize(self.mplex_simple, layersToIndices=True), (n, lmap)) self.assertEqual( transforms.normalize(self.mplex_simple, nodesToIndices=True, layersToIndices=True), (n, nmap, lmap)) nmapr = {0: 1, 1: 2, 2: 3, 3: 4} lmapr = {0: 1, 1: 2, 2: 3} self.assertEqual( transforms.normalize(self.mplex_simple, nodesToIndices=False), (n, nmapr)) self.assertEqual( transforms.normalize(self.mplex_simple, layersToIndices=False), (n, lmapr)) self.assertEqual( transforms.normalize(self.mplex_simple, nodesToIndices=False, layersToIndices=False), (n, nmapr, lmapr)) n = net.MultiplexNetwork([('categorical', 1.0)], fullyInterconnected=False) n[0, 1, 0] = 1 n[0, 2, 0] = 1 n[1, 2, 0] = 1 n[0, 1, 1] = 1 n[0, 2, 1] = 1 n[0, 3, 1] = 1 n[2, 3, 1] = 1 n[0, 1, 2] = 1 n[0, 2, 2] = 1 n[0, 3, 2] = 1 n[1, 3, 2] = 1 self.assertEqual(transforms.normalize(self.mplex_nonaligned_simple), n)
def test_directed_unweighted(self): """The 3-layer multiplex networks example from Brodka et al. 'Analysis of Neighborhoods of in Multi-layered Dynamic Social Networks', 2012""" n = net.MultiplexNetwork(['categorical'], directed=True) n['x', 'z', 1] = 1 n['x', 'y', 1] = 1 n['y', 'x', 1] = 1 n['y', 'z', 1] = 1 n['z', 'x', 1] = 1 n['z', 't', 1] = 1 n['u', 'x', 1] = 1 n['u', 'z', 1] = 1 n['u', 'v', 1] = 1 n['v', 'u', 1] = 1 n['v', 't', 1] = 1 n['t', 'z', 1] = 1 n['t', 'v', 1] = 1 n['x', 'u', 2] = 1 n['x', 'z', 2] = 1 n['x', 'v', 2] = 1 n['x', 'y', 2] = 1 n['z', 'x', 2] = 1 n['u', 'v', 2] = 1 n['v', 'u', 2] = 1 n['v', 'x', 2] = 1 n['v', 'y', 2] = 1 n['x', 'u', 3] = 1 n['x', 'z', 3] = 1 n['x', 'v', 3] = 1 n['x', 'y', 3] = 1 n['y', 'z', 3] = 1 n['y', 'v', 3] = 1 n['z', 'x', 3] = 1 n['z', 'y', 3] = 1 n['z', 't', 3] = 1 n['u', 'x', 3] = 1 n['v', 'x', 3] = 1 n['v', 't', 3] = 1 n['t', 'z', 3] = 1 n['t', 'v', 3] = 1 an = net.MultilayerNetwork(aspects=0, directed=True) an['x', 'z'] = 3 an['x', 'u'] = 2 an['x', 'v'] = 2 an['x', 'y'] = 3 an['y', 'x'] = 1 an['y', 'z'] = 2 an['y', 'v'] = 1 an['z', 'x'] = 3 an['z', 'y'] = 1 an['z', 't'] = 2 an['u', 'x'] = 2 an['u', 'z'] = 1 an['u', 'v'] = 2 an['v', 'x'] = 2 an['v', 'y'] = 1 an['v', 'u'] = 2 an['v', 't'] = 2 an['t', 'z'] = 2 an['t', 'v'] = 2 self.assertEqual(cc.lcc_brodka(n, 't', threshold=1), 0.0) self.assertEqual(cc.lcc_brodka(n, 't', threshold=2), 0.0) self.assertEqual(cc.lcc_brodka(n, 't', threshold=3), 0.0) self.assertEqual(cc.lcc_brodka(n, 'z', threshold=1), 2. / 3.) self.assertEqual(cc.lcc_brodka(n, 'z', threshold=2), 4. / 9.) self.assertEqual(cc.lcc_brodka(n, 'z', threshold=3), 0.0) self.assertEqual(cc.lcc_brodka(n, 't', anet=an, threshold=1), 0.0) self.assertEqual(cc.lcc_brodka(n, 't', anet=an, threshold=2), 0.0) self.assertEqual(cc.lcc_brodka(n, 't', anet=an, threshold=3), 0.0) self.assertEqual(cc.lcc_brodka(n, 'z', anet=an, threshold=1), 2. / 3.) self.assertEqual(cc.lcc_brodka(n, 'z', anet=an, threshold=2), 4. / 9.) self.assertEqual(cc.lcc_brodka(n, 'z', anet=an, threshold=3), 0.0)