MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / DuplicateEdges

Function DuplicateEdges

tensorflow/core/graph/graph_constructor.cc:1618–1661  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1616typedef std::map<const Node*, Node*> map_node;
1617
1618edge_list DuplicateEdges(Graph* dest, map_node_list& duplicated_nodes,
1619 map_node& margin_nodes) {
1620 edge_list edges;
1621 for (const Edge* e : dest->edges()) {
1622 auto src = e->src();
1623 auto dst = e->dst();
1624
1625 auto src_dup_nodes = duplicated_nodes[src];
1626 auto dst_dup_nodes = duplicated_nodes[dst];
1627
1628 //duplicate inner edges between duplicated nodes
1629 if (!src_dup_nodes.empty() && !dst_dup_nodes.empty()) {
1630 for (size_t i = 0; i < src_dup_nodes.size(); ++i) {
1631 edges.emplace_back(src_dup_nodes[i], e->src_output(),
1632 dst_dup_nodes[i], e->dst_input());
1633 }
1634 continue;
1635 }
1636
1637 //duplicate edges from duplicated nodes to margin node
1638 if (!src_dup_nodes.empty()) {
1639 auto margin_node = margin_nodes[dst];
1640 if (margin_node != nullptr) {
1641 for (size_t i = 0; i < src_dup_nodes.size(); ++i) {
1642 edges.emplace_back(src_dup_nodes[i], e->src_output(),
1643 margin_node, e->dst_input());
1644 }
1645 }
1646 continue;
1647 }
1648
1649 //duplicate edges from margin node to duplicated nodes
1650 if (!dst_dup_nodes.empty()) {
1651 auto margin_node = margin_nodes[src];
1652 if (margin_node != nullptr) {
1653 for (size_t i = 0; i < dst_dup_nodes.size(); ++i) {
1654 edges.emplace_back(margin_node, e->src_output(),
1655 dst_dup_nodes[i], e->dst_input());
1656 }
1657 }
1658 }
1659 }
1660 return edges;
1661}
1662
1663void AggregateForApply(Graph* dest, Node* n,
1664 map_node_list& duplicated_nodes, int grad_input) {

Callers 1

ExtendGraphFunction · 0.85

Calls 8

edgesMethod · 0.80
srcMethod · 0.45
dstMethod · 0.45
emptyMethod · 0.45
sizeMethod · 0.45
emplace_backMethod · 0.45
src_outputMethod · 0.45
dst_inputMethod · 0.45

Tested by

no test coverage detected