class_docstr: Encapsulates resources needed to compile a pipeline.
  
  `PipelineContext` is for compiling a single pipeline. If the pipeline is
  compiling a sub-pipeline (a `Pipeline` node as a `pipeline.components`) then
  another `PipelineContext` would be created and used.
  
  Use it as a first positional argument to the compiler extension functions as
  if you are extending a class and this is a self object.
class_docstr_tok: ["Encapsulates","resources","needed","to","compile","a","pipeline",".","`","PipelineContext","`","is","for","compiling","a","single","pipeline",".","If","the","pipeline","is","compiling","a","sub-pipeline","(","a","`","Pipeline","`","node","as","a","`","pipeline.components","`",")","then","another","`","PipelineContext","`","would","be","created","and","used",".","Use","it","as","a","first","positional","argument","to","the","compiler","extension","functions","as","if","you","are","extending","a","class","and","this","is","a","self","object","."]
code: def is_sync_mode(self):
      return self.execution_mode == pipeline_pb2.Pipeline.SYNC
  
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 8 for calling the PipelineContext obj's underlying member method code with example usage: obj.is_sync_mode() and returns: unknown