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

Method _AddOpInternal

tensorflow/python/ops/control_flow_ops.py:1718–1765  ·  view source on GitHub ↗

Add `op` to the current context. We move any external control dependencies of the op to the loop pivot, to ensure they get executed.

(self, op)

Source from the content-addressed store, hash-verified

1716 self._AddOpInternal(op)
1717
1718 def _AddOpInternal(self, op):
1719 """Add `op` to the current context.
1720
1721 We move any external control dependencies of the op to the loop pivot, to
1722 ensure they get executed.
1723 """
1724 if not op.inputs:
1725 # Remove any external control dependency on this op
1726 control_inputs, external_inputs = self._RemoveExternalControlEdges(op)
1727 # Add a control edge from the control pivot to this op.
1728 if not control_inputs:
1729 # pylint: disable=protected-access
1730 op._add_control_input(self.GetControlPivot().op)
1731 # pylint: enable=protected-access
1732 for x in op.outputs:
1733 self._values.add(x.name)
1734 else:
1735 for index in range(len(op.inputs)):
1736 x = op.inputs[index]
1737 real_x = self.AddValue(x)
1738 if real_x != x:
1739 op._update_input(index, real_x) # pylint: disable=protected-access
1740 # Remove any external control dependency on this op.
1741 _, external_inputs = self._RemoveExternalControlEdges(op)
1742 # Add a control dependency to prevent loop invariants from
1743 # enabling ops that should not be executed.
1744 self._MaybeAddControlDependency(op)
1745 for x in op.outputs:
1746 self._values.add(x.name)
1747 if external_inputs:
1748 # Use an identity to pull control inputs as data inputs. Note that we
1749 # ignore ops which don't have outputs. TODO(apassos): fix that
1750 with ops.control_dependencies(None):
1751 self.Enter()
1752 external_inputs = [
1753 array_ops.identity(x.outputs[0]).op
1754 for x in external_inputs
1755 if x.outputs
1756 ]
1757 self.Exit()
1758 op._add_control_inputs(external_inputs) # pylint: disable=protected-access
1759 if self._outer_context or not util.IsLoopExit(op):
1760 op.graph.prevent_fetching(op)
1761 for x in op.outputs:
1762 op.graph.prevent_feeding(x)
1763
1764 if self._outer_context:
1765 self._outer_context.AddInnerOp(op)
1766
1767 def _MaybeAddControlDependency(self, op):
1768 """Add a control input to the op if it only depends on loop invariants."""

Callers 1

AddOpMethod · 0.95

Calls 15

GetControlPivotMethod · 0.95
AddValueMethod · 0.95
_add_control_inputMethod · 0.80
_update_inputMethod · 0.80
_add_control_inputsMethod · 0.80
prevent_fetchingMethod · 0.80
prevent_feedingMethod · 0.80
rangeFunction · 0.70
addMethod · 0.45
control_dependenciesMethod · 0.45

Tested by

no test coverage detected