예제 #1
0
파일: __init__.py 프로젝트: BingW/biopython
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 = []):
        """Initializes a new Network object."""
        self.__graph = MultiGraph(species)

    def __repr__(self):
        """Returns a debugging string representation of this network."""
        return "<Network: __graph: " + repr(self.__graph) + ">"

    def __str__(self):
        """Returns 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):
        """Adds species to this network."""
        self.__graph.add_node(species)

    def add_interaction(self, source, sink, interaction):
        """Adds interaction to this network."""
        self.__graph.add_edge(source, sink, interaction)

    def source(self, species):
        """Returns list of unique sources for species."""
        return self.__graph.parents(species)

    def source_interactions(self, species):
        """Returns list of (source, interaction) pairs for species."""
        return self.__graph.parent_edges(species)

    def sink(self, species):
        """Returns list of unique sinks for species."""
        return self.__graph.children(species)

    def sink_interactions(self, species):
        """Returns list of (sink, interaction) pairs for species."""
        return self.__graph.child_edges(species)

    def species(self):
        """Returns list of the species in this network."""
        return self.__graph.nodes()

    def interactions(self):
        """Returns list of the unique interactions in this network."""
        return self.__graph.labels()
예제 #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=[]):
        """Initializes a new Network object."""
        self.__graph = MultiGraph(species)

    def __repr__(self):
        """Returns a debugging string representation of this network."""
        return "<Network: __graph: " + repr(self.__graph) + ">"

    def __str__(self):
        """Returns 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):
        """Adds species to this network."""
        self.__graph.add_node(species)

    def add_interaction(self, source, sink, interaction):
        """Adds interaction to this network."""
        self.__graph.add_edge(source, sink, interaction)

    def source(self, species):
        """Returns list of unique sources for species."""
        return self.__graph.parents(species)

    def source_interactions(self, species):
        """Returns list of (source, interaction) pairs for species."""
        return self.__graph.parent_edges(species)

    def sink(self, species):
        """Returns list of unique sinks for species."""
        return self.__graph.children(species)

    def sink_interactions(self, species):
        """Returns list of (sink, interaction) pairs for species."""
        return self.__graph.child_edges(species)

    def species(self):
        """Returns list of the species in this network."""
        return self.__graph.nodes()

    def interactions(self):
        """Returns list of the unique interactions in this network."""
        return self.__graph.labels()
예제 #3
0
 def __init__(self, species=()):
     """Initializes a new Network object."""
     self.__graph = MultiGraph(species)
예제 #4
0
 def testRemoveNode(self):
     a = MultiGraph(['a','b','c','d','e'])
     a.add_edge('a','e','label1')
     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')
     a.remove_node('e')
     b = MultiGraph(['a','b','c','d'])
     b.add_edge('a','b','label5')
     self.assertEqual(a, b)#, "incorrect node removal")
예제 #5
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 = a.child_edges('a')
     l.sort()
     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")
예제 #6
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 = a.nodes()
     l.sort()
     self.assertEqual(l, ['a', 'b'], "second node not added")
예제 #7
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")
예제 #8
0
 def __init__(self, species=()):
     """Initializes a new Network object."""
     self.__graph = MultiGraph(species)
예제 #9
0
 def testRemoveNode(self):
     a = MultiGraph(['a','b','c','d','e'])
     a.add_edge('a','e','label1')
     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')
     a.remove_node('e')
     b = MultiGraph(['a','b','c','d'])
     b.add_edge('a','b','label5')
     self.assertEqual(a, b)#, "incorrect node removal")
예제 #10
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 = a.child_edges('a')
     l.sort()
     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")
예제 #11
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 = a.nodes()
     l.sort()
     self.assertEqual(l, ['a', 'b'], "second node not added")
예제 #12
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")