Beispiel #1
0
 def feed_values(self, dag_values):
     shape, degrees = self._get_shape_and_degrees(dag_values)
     edge_ids = pywrap.get_dag_value(dag_values, self._nid, pywrap.kEdgeIds)
     src_ids = pywrap.get_dag_value(dag_values, self._nid, pywrap.kSrcIds)
     dst_ids = pywrap.get_dag_value(dag_values, self._nid, pywrap.kDstIds)
     return self._graph.get_edges(self._type, src_ids, dst_ids, edge_ids,
                                  degrees, shape)
Beispiel #2
0
 def feed_values(self, dag_values):
     shape, degrees = self._get_shape_and_degrees(dag_values)
     edge_ids = pywrap.get_dag_value(dag_values, self._nid, pywrap.kEdgeIds)
     assert isinstance(shape, tuple) and len(shape) == 2
     nbr_counts = degrees if self._sparse else [shape[1]] * shape[0]
     src_ids = pywrap.get_dag_value(dag_values, self._upstream.nid,
                                    pywrap.kNodeIds)
     src_ids = src_ids.reshape(self._upstream.shape)
     src_ids = np.concatenate(
         [src_ids[idx].repeat(d) for idx, d in enumerate(nbr_counts)])
     dst_ids = pywrap.get_dag_value(dag_values, self._nid, pywrap.kNodeIds)
     return self._graph.get_edges(self._type, src_ids, dst_ids, edge_ids,
                                  degrees, shape)
Beispiel #3
0
 def _get_shape_and_degrees(self, dag_values):
     shape = self._shape
     degrees = None
     if self._sparse:
         assert isinstance(shape, tuple) and len(shape) == 2
         degrees = pywrap.get_dag_value(dag_values, self._nid,
                                        pywrap.kDegreeKey)
         shape = (shape[0], shape[1] if shape[1] else max(degrees))
     return shape, degrees
Beispiel #4
0
    def __getitem__(self, alias):
        # Get the DagNode of alias.
        node = self._dag.get_node(alias)
        if not node:
            raise ValueError(
                "Alias {} is not existed in the query.".format(alias))

        # If Nodes/Edges of the alias already got from response,
        # just get them from python values, instead of converting from C++.
        if alias in self._cache.keys():
            return self._cache[alias]

        # Cache Nodes/Edges.
        res = node.feed_values(self._res)
        self._cache[alias] = res

        # Add the attributes for the Nodes/Edges.
        lookup_node = node.get_lookup_node()
        res.int_attrs = pywrap.get_dag_value(self._res, lookup_node.nid, "ia")
        res.float_attrs = pywrap.get_dag_value(self._res, lookup_node.nid,
                                               "fa")
        res.string_attrs = pywrap.get_dag_value(self._res, lookup_node.nid,
                                                "sa")
        res.weights = pywrap.get_dag_value(self._res, lookup_node.nid, "wei")
        res.labels = pywrap.get_dag_value(self._res, lookup_node.nid, "lb")

        # Add degrees for the Nodes.
        for dg_node in node.get_degree_nodes():
            if dg_node.node_from == pywrap.NodeFrom.EDGE_SRC:
                res.add_out_degrees(
                    dg_node.edge_type,
                    pywrap.get_dag_value(self._res, dg_node.nid, "dg"))
            if dg_node.node_from == pywrap.NodeFrom.EDGE_DST or \
                dg_node.edge_type in self._graph.undirected_edges:
                res.add_in_degrees(
                    dg_node.edge_type,
                    pywrap.get_dag_value(self._res, dg_node.nid, "dg"))
        return res
Beispiel #5
0
 def feed_values(self, dag_values):
     shape, degrees = self._get_shape_and_degrees(dag_values)
     return self._graph.get_nodes(
         self._type,
         pywrap.get_dag_value(dag_values, self._nid, pywrap.kNodeIds),
         degrees, shape)