class Network: """A set of species that are explicitly linked by interactions. The network is a directed multigraph with labeled edges. The nodes in the graph are the biochemical species involved. The edges represent an interaction between two species, and the edge label is a reference to the associated Interaction object. Attributes: - None """ def __init__(self, species=()): """Initialize a new Network object.""" self.__graph = MultiGraph(species) def __repr__(self): """Return a debugging string representation of this network.""" return "<Network: __graph: " + repr(self.__graph) + ">" def __str__(self): """Return a string representation of this network.""" return "Network of %i species and %i interactions." % ( len(self.species()), len(self.interactions()), ) def add_species(self, species): """Add species to this network.""" self.__graph.add_node(species) def add_interaction(self, source, sink, interaction): """Add interaction to this network.""" self.__graph.add_edge(source, sink, interaction) def source(self, species): """Return list of unique sources for species.""" return self.__graph.parents(species) def source_interactions(self, species): """Return list of (source, interaction) pairs for species.""" return self.__graph.parent_edges(species) def sink(self, species): """Return list of unique sinks for species.""" return self.__graph.children(species) def sink_interactions(self, species): """Return list of (sink, interaction) pairs for species.""" return self.__graph.child_edges(species) def species(self): """Return list of the species in this network.""" return self.__graph.nodes() def interactions(self): """Return list of the unique interactions in this network.""" return self.__graph.labels()
class Network(object): """A set of species that are explicitly linked by interactions. The network is a directed multigraph with labeled edges. The nodes in the graph are the biochemical species involved. The edges represent an interaction between two species, and the edge label is a reference to the associated Interaction object. Attributes: - None """ def __init__(self, species=()): """Initialize a new Network object.""" self.__graph = MultiGraph(species) def __repr__(self): """Return a debugging string representation of this network.""" return "<Network: __graph: " + repr(self.__graph) + ">" def __str__(self): """Return a string representation of this network.""" return "Network of " + str(len(self.species())) + " species and " + \ str(len(self.interactions())) + " interactions." def add_species(self, species): """Add species to this network.""" self.__graph.add_node(species) def add_interaction(self, source, sink, interaction): """Add interaction to this network.""" self.__graph.add_edge(source, sink, interaction) def source(self, species): """Return list of unique sources for species.""" return self.__graph.parents(species) def source_interactions(self, species): """Return list of (source, interaction) pairs for species.""" return self.__graph.parent_edges(species) def sink(self, species): """Return list of unique sinks for species.""" return self.__graph.children(species) def sink_interactions(self, species): """Return list of (sink, interaction) pairs for species.""" return self.__graph.child_edges(species) def species(self): """Return list of the species in this network.""" return self.__graph.nodes() def interactions(self): """Return list of the unique interactions in this network.""" return self.__graph.labels()
def testAdditionalFunctions(self): a = MultiGraph(['a', 'b', 'c']) a.add_edge('a', 'b', 'label1') a.add_edge('b', 'c', 'label1') a.add_edge('b', 'a', 'label2') self.assertTrue( str(a) == "<MultiGraph: 3 node(s), 3 edge(s), 2 unique label(s)>") self.assertListEqual(a.edges('label1'), [('a', 'b'), ('b', 'c')]) self.assertListEqual(a.labels(), ['label1', 'label2'])
def testAdditionalFunctions(self): a = MultiGraph(["a", "b", "c"]) a.add_edge("a", "b", "label1") a.add_edge("b", "c", "label1") a.add_edge("b", "a", "label2") self.assertEqual( str(a), "<MultiGraph: 3 node(s), 3 edge(s), 2 unique label(s)>") self.assertListEqual(a.edges("label1"), [("a", "b"), ("b", "c")]) self.assertListEqual(a.labels(), ["label1", "label2"])
def test_Equals(self): a = MultiGraph(['a', 'b', 'c']) a.add_edge('a', 'b', 'label1') a.add_edge('b', 'c', 'label1') a.add_edge('b', 'a', 'label2') b = MultiGraph(['a', 'b', 'c']) self.assertNotEqual(a, b, "equal to similar nodes, no edges") b.add_edge('a', 'b', 'label1') self.assertNotEqual(a, b, "equal to similar nodes, edge subset") b.add_edge('b', 'c', 'label1') b.add_edge('b', 'a', 'label2') self.assertEqual(a, b, "not equal to similar") c = MultiGraph(['a', 'b', 'c']) c.add_edge('a', 'b', 'label2') c.add_edge('b', 'c', 'label2') c.add_edge('b', 'a', 'label1') self.assertNotEqual(a, c, "equal to similar with different labels") self.assertNotEqual(c, MultiGraph(), "equal to empty graph") self.assertEqual(MultiGraph(), MultiGraph(), "empty graph not equal to self")
def test_RemoveNode(self): a = MultiGraph(['a', 'b', 'c', 'd', 'e']) a.add_edge('a', 'e', 'label1') self.assertEqual( repr(a), "<MultiGraph: ('a': ('e', 'label1'))('b': )('c': )('d': )('e': )>") a.add_edge('b', 'e', 'label1') a.add_edge('c', 'e', 'label2') a.add_edge('d', 'e', 'label3') a.add_edge('e', 'd', 'label4') a.add_edge('a', 'b', 'label5') self.assertEqual( repr(a), "<MultiGraph: ('a': ('b', 'label5'),('e', 'label1'))('b': ('e', 'label1'))('c': ('e', 'label2'))('d': ('e', 'label3'))('e': ('d', 'label4'))>" ) a.remove_node('e') self.assertEqual( repr(a), "<MultiGraph: ('a': ('b', 'label5'))('b': )('c': )('d': )>") b = MultiGraph(['a', 'b', 'c', 'd']) b.add_edge('a', 'b', 'label5') self.assertEqual( repr(b), "<MultiGraph: ('a': ('b', 'label5'))('b': )('c': )('d': )>") self.assertEqual(repr(a), repr(b)) self.assertEqual(a, b) # , "incorrect node removal")
def test_Edges(self): a = MultiGraph(['a', 'b', 'c', 'd']) a.add_edge('a', 'b', 'label1') self.assertEqual(a.child_edges('a'), [('b', 'label1')]) # , "incorrect child edges") a.add_edge('a', 'b', 'label2') self.assertEqual(sorted(a.child_edges('a')), [('b', 'label1'), ('b', 'label2')]) # , "incorrect child edges") a.add_edge('b', 'a', 'label2') self.assertEqual(a.parent_edges('a'), [('b', 'label2')]) # , "incorrect parent edges") a.add_edge('b', 'c', 'label3') self.assertEqual(a.parent_edges('c'), [('b', 'label3')]) # , "incorrect parent edges") children = a.children('b') children.sort() self.assertEqual(children, ['a', 'c'], "incorrect children") self.assertEqual(a.children('d'), [], "incorrect children for singleton") self.assertEqual(a.parents('a'), ['b'], "incorrect parents")
def test_Nodes(self): a = MultiGraph() self.assertEqual(a.nodes(), [], "default graph not empty") a.add_node('a') self.assertEqual(a.nodes(), ['a'], "one node not added") a.add_node('a') self.assertEqual(a.nodes(), ['a'], "duplicate node added") a.add_node('b') self.assertEqual(sorted(a.nodes()), ['a', 'b'], "second node not added")
def testEquals(self): a = MultiGraph(['a', 'b', 'c']) a.add_edge('a', 'b', 'label1') a.add_edge('b', 'c', 'label1') a.add_edge('b', 'a', 'label2') b = MultiGraph(['a', 'b', 'c']) self.assertNotEqual(a, b, "equal to similar nodes, no edges") b.add_edge('a', 'b', 'label1') self.assertNotEqual(a, b, "equal to similar nodes, edge subset") b.add_edge('b', 'c', 'label1') b.add_edge('b', 'a', 'label2') self.assertEqual(a, b, "not equal to similar") c = MultiGraph(['a', 'b', 'c']) c.add_edge('a', 'b', 'label2') c.add_edge('b', 'c', 'label2') c.add_edge('b', 'a', 'label1') self.assertNotEqual(a, c, "equal to similar with different labels") self.assertNotEqual(c, MultiGraph(), "equal to empty graph") self.assertEqual(MultiGraph(), MultiGraph(), "empty graph not equal to self")
def test_RemoveNode(self): a = MultiGraph(["a", "b", "c", "d", "e"]) a.add_edge("a", "e", "label1") self.assertEqual( repr(a), "<MultiGraph: ('a': ('e', 'label1'))('b': )('c': )('d': )('e': )>") a.add_edge("b", "e", "label1") a.add_edge("c", "e", "label2") a.add_edge("d", "e", "label3") a.add_edge("e", "d", "label4") a.add_edge("a", "b", "label5") self.assertEqual( repr(a), "<MultiGraph: ('a': ('b', 'label5'),('e', 'label1'))('b': ('e', 'label1'))('c': ('e', 'label2'))('d': ('e', 'label3'))('e': ('d', 'label4'))>", ) a.remove_node("e") self.assertEqual( repr(a), "<MultiGraph: ('a': ('b', 'label5'))('b': )('c': )('d': )>") b = MultiGraph(["a", "b", "c", "d"]) b.add_edge("a", "b", "label5") self.assertEqual( repr(b), "<MultiGraph: ('a': ('b', 'label5'))('b': )('c': )('d': )>") self.assertEqual(repr(a), repr(b)) self.assertEqual(a, b) # , "incorrect node removal")
def test_Edges(self): a = MultiGraph(["a", "b", "c", "d"]) a.add_edge("a", "b", "label1") self.assertEqual(a.child_edges("a"), [("b", "label1")]) a.add_edge("a", "b", "label2") self.assertEqual(sorted(a.child_edges("a")), [("b", "label1"), ("b", "label2")]) a.add_edge("b", "a", "label2") self.assertEqual(a.parent_edges("a"), [("b", "label2")]) a.add_edge("b", "c", "label3") self.assertEqual(a.parent_edges("c"), [("b", "label3")]) children = a.children("b") children.sort() self.assertEqual(children, ["a", "c"], "incorrect children") self.assertEqual(a.children("d"), [], "incorrect children for singleton") self.assertEqual(a.parents("a"), ["b"], "incorrect parents")
def test_Nodes(self): a = MultiGraph() self.assertEqual(a.nodes(), [], "default graph not empty") a.add_node("a") self.assertEqual(a.nodes(), ["a"], "one node not added") a.add_node("a") self.assertEqual(a.nodes(), ["a"], "duplicate node added") a.add_node("b") self.assertEqual(sorted(a.nodes()), ["a", "b"], "second node not added")
def __init__(self, species=()): """Initialize a new Network object.""" self.__graph = MultiGraph(species)
def testEdges(self): a = MultiGraph(['a', 'b', 'c', 'd']) a.add_edge('a', 'b', 'label1') self.assertEqual(a.child_edges('a'), [('b', 'label1')]) # , "incorrect child edges") a.add_edge('a', 'b', 'label2') l = sorted(a.child_edges('a')) self.assertEqual(l, [('b', 'label1'), ('b', 'label2')]) # , "incorrect child edges") a.add_edge('b', 'a', 'label2') self.assertEqual(a.parent_edges('a'), [('b', 'label2')]) # , "incorrect parent edges") a.add_edge('b', 'c', 'label3') self.assertEqual(a.parent_edges('c'), [('b', 'label3')]) # , "incorrect parent edges") l = a.children('b') l.sort() self.assertEqual(l, ['a', 'c'], "incorrect children") self.assertEqual(a.children('d'), [], "incorrect children for singleton") self.assertEqual(a.parents('a'), ['b'], "incorrect parents")
def testRemoveNode(self): a = MultiGraph(['a', 'b', 'c', 'd', 'e']) a.add_edge('a', 'e', 'label1') self.assertEqual(repr(a), "<MultiGraph: ('a': ('e', 'label1'))('b': )('c': )('d': )('e': )>") a.add_edge('b', 'e', 'label1') a.add_edge('c', 'e', 'label2') a.add_edge('d', 'e', 'label3') a.add_edge('e', 'd', 'label4') a.add_edge('a', 'b', 'label5') self.assertEqual(repr(a), "<MultiGraph: ('a': ('b', 'label5'),('e', 'label1'))('b': ('e', 'label1'))('c': ('e', 'label2'))('d': ('e', 'label3'))('e': ('d', 'label4'))>") a.remove_node('e') self.assertEqual(repr(a), "<MultiGraph: ('a': ('b', 'label5'))('b': )('c': )('d': )>") b = MultiGraph(['a', 'b', 'c', 'd']) b.add_edge('a', 'b', 'label5') self.assertEqual(repr(b), "<MultiGraph: ('a': ('b', 'label5'))('b': )('c': )('d': )>") self.assertEqual(repr(a), repr(b)) self.assertEqual(a, b) # , "incorrect node removal")
def test_Equals(self): a = MultiGraph(["a", "b", "c"]) a.add_edge("a", "b", "label1") a.add_edge("b", "c", "label1") a.add_edge("b", "a", "label2") b = MultiGraph(["a", "b", "c"]) self.assertNotEqual(a, b, "equal to similar nodes, no edges") b.add_edge("a", "b", "label1") self.assertNotEqual(a, b, "equal to similar nodes, edge subset") b.add_edge("b", "c", "label1") b.add_edge("b", "a", "label2") self.assertEqual(a, b, "not equal to similar") c = MultiGraph(["a", "b", "c"]) c.add_edge("a", "b", "label2") c.add_edge("b", "c", "label2") c.add_edge("b", "a", "label1") self.assertNotEqual(a, c, "equal to similar with different labels") self.assertNotEqual(c, MultiGraph(), "equal to empty graph") self.assertEqual(MultiGraph(), MultiGraph(), "empty graph not equal to self")
def testNodes(self): a = MultiGraph() self.assertEqual(a.nodes(), [], "default graph not empty") a.add_node('a') self.assertEqual(a.nodes(), ['a'], "one node not added") a.add_node('a') self.assertEqual(a.nodes(), ['a'], "duplicate node added") a.add_node('b') l = sorted(a.nodes()) self.assertEqual(l, ['a', 'b'], "second node not added")
def __init__(self, species=()): """Initializes a new Network object.""" self.__graph = MultiGraph(species)