コード例 #1
0
    def edge(self, edge_to_find, key=0):
        """returns edge in this graph with same src and dst"""
        # TODO: check if this even needed - will be if searching nidb specifically
        # but that's so rare (that's a design stage if anywhere)
        src_id = edge_to_find.src
        dst_id = edge_to_find.dst

        if self.is_multigraph():
            for (src, dst, rkey) in self._graph.edges(src_id, keys=True):
                if dst == dst_id and rkey == search_key:
                    return DmEdge(self._anm, src, dst, search_key)

        for (src, dst) in self._graph.edges(src_id):
            if dst == dst_id:
                return DmEdge(self._anm, src, dst)
コード例 #2
0
    def edges(self, nbunch=None, *args, **kwargs):
        # nbunch may be single node
        # TODO: Apply edge filters
        if nbunch:
            try:
                nbunch = nbunch.node_id
            except AttributeError:
                # only store the id in overlay
                nbunch = (n.node_id for n in nbunch)

        def filter_func(edge):
            return (
                all(getattr(edge, key) for key in args) and
                all(getattr(edge, key) == val for key, val in kwargs.items())
            )

        # TODO: See if more efficient way to access underlying data structure
        # rather than create overlay to throw away
        if self.is_multigraph():
            valid_edges = list((src, dst, key) for (src, dst, key) in
                               self._graph.edges(nbunch, keys=True))
        else:
            default_key = 0
            valid_edges = list((src, dst, default_key) for (src, dst) in
                               self._graph.edges(nbunch))

        all_edges = [DmEdge(self, src, dst, key)
                     for src, dst, key in valid_edges]
        return (edge for edge in all_edges if filter_func(edge))
コード例 #3
0
 def boundary_edges(self, nbunch, nbunch2=None):
     nbunch = (n.node_id for n in nbunch)  # only store the id in overlay
     return iter(
         DmEdge(self, src, dst)
         for (src, dst) in nx.edge_boundary(self._graph, nbunch, nbunch2))