FakeNode is used for adding corresponding DagNode of E.outV()/inV() to Dag. E.outV()/inV() doesn't raise any operator, but only changes the field which downstream absorbs.
| 643 | |
| 644 | |
| 645 | class FakeNode(TraverseVertexDagNode): |
| 646 | """ FakeNode is used for adding corresponding DagNode of E.outV()/inV() |
| 647 | to Dag. E.outV()/inV() doesn't raise any operator, but only changes the |
| 648 | field which downstream absorbs. |
| 649 | """ |
| 650 | def __init__(self, dag_node): |
| 651 | super(FakeNode, self).__init__(dag_node._dag) |
| 652 | if not isinstance(dag_node, TraverseEdgeDagNode): |
| 653 | raise ValueError("FakeNode is a fake for TraverseEdgeDagNode, not {}" |
| 654 | .format(type(dag_node))) |
| 655 | self._upstream = dag_node |
| 656 | self._shape = dag_node._shape |
| 657 | |
| 658 | @property |
| 659 | def nid(self): |
| 660 | return self._upstream.nid |
| 661 | |
| 662 | def set_ready(self, node_id): |
| 663 | # Override |
| 664 | return False |
| 665 | |
| 666 | def _add_out_edge(self, edge): |
| 667 | # Override |
| 668 | self._upstream._add_out_edge(edge) |
| 669 | |
| 670 | def _link_to_sink(self): |
| 671 | # Override |
| 672 | pass |
| 673 | |
| 674 | def feed_values(self, dag_values): |
| 675 | edges = self._upstream.feed_values(dag_values) |
| 676 | return (edges.dst_nodes, edges.src_nodes)[int(self._output_field == pywrap.kSrcIds)] |