1import os 2import unittest 3from tempfile import NamedTemporaryFile 4 5import numpy as np 6 7from orangecontrib.network.network import readwrite 8 9 10def _fullpath(name): 11 return os.path.join(os.path.split(__file__)[0], name) 12 13 14class TestReadPajek(unittest.TestCase): 15 def test_two_mode(self): 16 davis = readwrite.read_pajek(_fullpath("../networks/davis.net")) 17 self.assertEqual(davis.number_of_nodes(), 32) 18 self.assertEqual( 19 list(davis.nodes), 20 ['EVELYN', 'LAURA', 'THERESA', 'BRENDA', 'CHARLOTTE', 'FRANCES', 21 'ELEANOR', 'PEARL', 'RUTH', 'VERNE', 'MYRNA', 'KATHERINE', 22 'SYLVIA', 'NORA', 'HELEN', 'DOROTHY', 'OLIVIA', 'FLORA', 'E1', 23 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'E10', 'E11', 24 'E12', 'E13', 'E14'] 25 ) 26 self.assertEqual(davis.in_first_mode, 18) 27 28 def test_write_pajek(self): 29 net = readwrite.read_pajek(_fullpath("../networks/leu_by_genesets.net")) 30 with NamedTemporaryFile("wt", suffix=".net", delete=False) as f: 31 try: 32 readwrite.write_pajek(f, net) 33 f.close() 34 net2 = readwrite.read_pajek(f.name) 35 np.testing.assert_equal(net2.nodes, net.nodes) 36 np.testing.assert_equal(net2.coordinates, net.coordinates) 37 self.assertEqual(len(net2.edges), 1) 38 edges, edges2 = net.edges[0].edges, net2.edges[0].edges 39 np.testing.assert_equal(edges.indptr, edges2.indptr) 40 np.testing.assert_equal(edges.indices, edges2.indices) 41 np.testing.assert_almost_equal(edges.data, edges2.data) 42 finally: 43 os.remove(f.name) 44 45 def test_write_pajek_no_coordinates(self): 46 net = readwrite.read_pajek(_fullpath("../networks/leu_by_genesets.net")) 47 net.coordinates = None 48 with NamedTemporaryFile("wt", suffix=".net", delete=False) as f: 49 try: 50 readwrite.write_pajek(f, net) 51 f.close() 52 net2 = readwrite.read_pajek(f.name) 53 np.testing.assert_equal(net2.nodes, net.nodes) 54 self.assertIsNone(net2.coordinates, net.coordinates) 55 finally: 56 os.remove(f.name) 57 58 def test_write_pajek_multiple_edge_types(self): 59 net = readwrite.read_pajek(_fullpath("../networks/leu_by_genesets.net")) 60 net.edges.append(net.edges[0]) 61 with NamedTemporaryFile("wt", suffix=".net") as f: 62 self.assertRaises(TypeError, readwrite.write_pajek, f, net) 63 64 def test_edge_list(self): 65 net = readwrite.read_pajek(_fullpath("test-arcslist.net")) 66 neighs = [(1, (2, 3, 6)), 67 (2, (1, 4, 5, 6)), 68 (5, (1, 2)), 69 (6, (2, 3, 4))] 70 self.assertEqual(net.number_of_edges(), sum(len(y) for _, y in neighs)) 71 self.assertTrue(net.edges[0].directed) 72 for x, y in neighs: 73 np.testing.assert_equal(net.outgoing(x - 1), np.array(y) - 1) 74 75 76if __name__ == "__main__": 77 unittest.main() 78