class_docstr: PipelineContext without pipeline.
  
  NullPipelineContext is the parent PipelineContext for the root level pipeline.
  
  NullPipelineContext is used when compiling a pipeline begin node of the
  root level pipeline, since pipeline begin node is compiled as if compiling a
  pipeline as a node from the parent pipeline, which does not exist for the
  root level pipeline.
class_docstr_tok: ["PipelineContext","without","pipeline",".","NullPipelineContext","is","the","parent","PipelineContext","for","the","root","level","pipeline",".","NullPipelineContext","is","used","when","compiling","a","pipeline","begin","node","of","the","root","level","pipeline",",","since","pipeline","begin","node","is","compiled","as","if","compiling","a","pipeline","as","a","node","from","the","parent","pipeline",",","which","does","not","exist","for","the","root","level","pipeline","."]
code: def __init__(self, *, child: PipelineContext):
      # pylint: disable=super-init-not-called
      # Doesn't invoke super().__init__() as it is not a typical PipelineContext
      # with a pipeline.
      self.pipeline = None
      self.pipeline_info = None
      self.dsl_context_registry = (
          dsl_context_registry.DslContextRegistry()
      )
      self.dsl_context_registry.put_node(child.pipeline)
      self.parent = None
      self.channels = {}
      self._implicit_downstream_nodes = collections.defaultdict(set)
  
      # Node ID -> NodeContext
      self._node_contexts: Dict[str, NodeContext] = {}
  
imports: from __future__ import annotations
  import collections
  from typing import Optional, List, Set, Iterable, Dict
  from tfx.dsl.compiler import compiler_utils
  from tfx.dsl.components.base import base_node
  from tfx.dsl.context_managers import dsl_context_registry
  from tfx.dsl.control_flow import for_each_internal
  from tfx.dsl.experimental.conditionals import conditional
  from tfx.dsl.input_resolution import resolver_op
  from tfx.orchestration import pipeline
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.types import channel
  from tfx.types import channel_utils
label_desc: Use image node_id 1 to create a new NullPipelineContext object from inherited base classes: PipelineContext with example: obj = NullPipelineContext()