Example #1
0
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()
Example #2
0
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()
Example #3
0
 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'])
Example #4
0
 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"])
Example #5
0
 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'])
Example #6
0
 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")
Example #7
0
 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")
Example #8
0
 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")
Example #9
0
 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")
Example #10
0
 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")
Example #11
0
 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")
Example #12
0
 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")
Example #13
0
 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")
Example #14
0
 def __init__(self, species=()):
     """Initialize a new Network object."""
     self.__graph = MultiGraph(species)
Example #15
0
 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")
Example #16
0
 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")
Example #17
0
 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")
Example #18
0
 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")
Example #19
0
 def __init__(self, species=()):
     """Initializes a new Network object."""
     self.__graph = MultiGraph(species)