code: def _register_op(cls: _ResolverOpType) -> None:
      class_path = name_utils.get_full_name(cls, strict_check=False)
      if class_path in _OPS_BY_CLASSPATH:
          raise ValueError(
              f"Duplicated class path {class_path} while registering."
          )
      _OPS_BY_CLASSPATH[class_path] = cls
      if cls.canonical_name in _OPS_BY_NAME:
          raise ValueError(
              f"Duplicated name {cls.canonical_name} while registering."
          )
      _OPS_BY_NAME[cls.canonical_name] = cls
  
imports: from typing import Dict, Type, Union
  from tfx.dsl.components.common import resolver
  from tfx.dsl.input_resolution import resolver_op
  from tfx.dsl.input_resolution.ops import all_spans_op
  from tfx.dsl.input_resolution.ops import consecutive_spans_op
  from tfx.dsl.input_resolution.ops import equal_property_values_op
  from tfx.dsl.input_resolution.ops import exclude_spans_op
  from tfx.dsl.input_resolution.ops import graph_traversal_op
  from tfx.dsl.input_resolution.ops import group_by_lineage_op
  from tfx.dsl.input_resolution.ops import latest_create_time_op
  from tfx.dsl.input_resolution.ops import latest_pipeline_run_outputs_op
  from tfx.dsl.input_resolution.ops import latest_policy_model_op
  from tfx.dsl.input_resolution.ops import latest_span_op
  from tfx.dsl.input_resolution.ops import latest_version_op
  from tfx.dsl.input_resolution.ops import paired_spans_op
  from tfx.dsl.input_resolution.ops import shuffle_op
  from tfx.dsl.input_resolution.ops import siblings_op
  from tfx.dsl.input_resolution.ops import skip_if_empty_op
  from tfx.dsl.input_resolution.ops import skip_if_less_than_n_spans_op
  from tfx.dsl.input_resolution.ops import slice_op
  from tfx.dsl.input_resolution.ops import sliding_window_op
  from tfx.dsl.input_resolution.ops import span_driven_evaluator_inputs_op
  from tfx.dsl.input_resolution.ops import static_span_range_op
  from tfx.dsl.input_resolution.ops import training_range_op
  from tfx.dsl.input_resolution.ops import unnest_op
  from tfx.dsl.input_resolution.strategies import conditional_strategy
  from tfx.dsl.input_resolution.strategies import latest_artifact_strategy
  from tfx.dsl.input_resolution.strategies import latest_blessed_model_strategy
  from tfx.dsl.input_resolution.strategies import span_range_strategy
  from tfx.utils import name_utils
  from tfx.utils import typing_utils
label_desc: Use image node_id 1 for calling a global function with example usage: _register_op(cls) without return types