class_docstr: DslContext for Cond.
code: def validate(self, containing_nodes: Sequence[base_node.BaseNode]):
      for ancestor_context in self.ancestors:
          if isinstance(ancestor_context, CondContext):
              # We can't use == on the objects themselves here, because they're magic
              # placeholders that would return a _ComparisonPredicate, which is always
              # truthy. TODO(b/297353695): Detect equivalent predicates too.
              if id(ancestor_context.predicate) == id(self.predicate):
                  raise ValueError(
                      "Nested conditionals with duplicate predicates:\n"
                      f"{self.predicate} vs\n{ancestor_context.predicate}.\n"
                      "Please merge the redundant conditionals."
                  )
  
file_path: tfx/tfx/dsl/experimental/conditionals/conditional.py
imports: from typing import Sequence
  import attr
  from tfx.dsl.components.base import base_node
  from tfx.dsl.context_managers import dsl_context
  from tfx.dsl.context_managers import dsl_context_manager
  from tfx.dsl.context_managers import dsl_context_registry
  from tfx.dsl.placeholder import placeholder
label_desc: Use image node_id 1 for calling the CondContext obj's underlying member method code with example usage: obj.validate(containing_nodes) without return types