| 1014 | } |
| 1015 | |
| 1016 | Status MutableGraphView::AddControllingFanin(absl::string_view node_name, |
| 1017 | const TensorId& fanin) { |
| 1018 | auto error_status = [node_name, fanin](absl::string_view msg) { |
| 1019 | string params = absl::Substitute("node_name='$0', fanin='$1'", node_name, |
| 1020 | fanin.ToString()); |
| 1021 | return MutationError("AddControllingFanin", params, msg); |
| 1022 | }; |
| 1023 | |
| 1024 | TF_RETURN_IF_ERROR(CheckFaninIsValid(fanin, error_status)); |
| 1025 | TF_RETURN_IF_ERROR(CheckAddingFaninToSelf(node_name, fanin, error_status)); |
| 1026 | NodeDef* node = GetNode(node_name); |
| 1027 | TF_RETURN_IF_ERROR(CheckNodeExists(node_name, node, error_status)); |
| 1028 | NodeDef* fanin_node = GetNode(fanin.node()); |
| 1029 | TF_RETURN_IF_ERROR(CheckNodeExists(fanin.node(), fanin_node, error_status)); |
| 1030 | |
| 1031 | OutputPort fanin_port(fanin_node, fanin.index()); |
| 1032 | |
| 1033 | string error_msg = ""; |
| 1034 | NodeDef* control_node = GetControllingFaninToAdd( |
| 1035 | node_name, {fanin_node, fanin.index()}, &error_msg); |
| 1036 | if (!error_msg.empty()) { |
| 1037 | return error_status(error_msg); |
| 1038 | } |
| 1039 | if (control_node == nullptr) { |
| 1040 | control_node = GetOrCreateIdentityConsumingSwitch(fanin_port); |
| 1041 | } |
| 1042 | AddFaninInternal(node, {control_node, Graph::kControlSlot}); |
| 1043 | |
| 1044 | return Status::OK(); |
| 1045 | } |
| 1046 | |
| 1047 | bool MutableGraphView::RemoveRegularFaninInternal(NodeDef* node, |
| 1048 | const OutputPort& fanin) { |
nothing calls this directly
no test coverage detected