class_docstr: Tracks the current if/else scope with the path that we took. Captures the used and produced
  data nodes, applying the necessary splits based on the scope level where they were produced
  and where they are used.
docstr: Register the data nodes as produced in current scope, otherwise if `global_scope` is True
  put them in the outermost scope.
docstr_tok: ["Register","the","data","nodes","as","produced","in","current","scope",",","otherwise","if","`","global_scope","`","is","True","put","them","in","the","outermost","scope","."]
code: def register_data_nodes(self, data_nodes, global_scope=False):
      """Register the data nodes as produced in current scope, otherwise if `global_scope` is True
      put them in the outermost scope.
      """
      if not self._is_registration_allowed:
          return
      logging.log(
          8,
          (
              f"{self._indent()}[IF/Register] {data_nodes} at {self.stack_depth() -1}"
          ),
      )
      scope = self._stack[0] if global_scope else self.top()
      tree.map_structure(
          lambda node: scope.add_produced(node), data_nodes
      )
  
imports: from nvidia.dali import _autograph
  from nvidia.dali.data_node import DataNode
  from nvidia.dali import fn
  from nvidia.dali._autograph.utils import ag_logging
  from nvidia.dali._autograph.operators import variables
  from contextlib import contextmanager
  from enum import Enum
  import tree
label_desc: Use image node_id 9 for calling the _ConditionStack obj's underlying member method code with example usage: obj.register_data_nodes(data_nodes, global_scope) without return types