class_docstr: Metaclass for ResolverOp.
  
  Features:
  1. ResolverOp cannot be instantiated directly. Calling ResolverOp() returns
     OpNode instance which is used for function tracing. Instead _ResolverOpMeta
     exposes create() classmethod to actually create a ResolverOp isntance.
  2. _ResolverOpMeta is aware of Property, and keyword argument values
     given from the ResolverOp invocation is validated without creating a
     ResolverOp instance.
  3. It inherits ABCMeta, so @abstractmethod works.
class_docstr_tok: ["Metaclass","for","ResolverOp",".","Features",":","1",".","ResolverOp","can","not","be","instantiated","directly",".","Calling","ResolverOp","(",")","returns","OpNode","instance","which","is","used","for","function","tracing",".","Instead","_ResolverOpMeta","exposes","create","(",")","classmethod","to","actually","create","a","ResolverOp","isntance",".","2",".","_ResolverOpMeta","is","aware","of","Property",",","and","keyword","argument","values","given","from","the","ResolverOp","invocation","is","validated","without","creating","a","ResolverOp","instance",".","3",".","It","inherits","ABCMeta",",","so","@","abstractmethod","works","."]
docstr: Static check against ResolverOp positional arguments.
code: def _check_and_transform_args(
      cls, args: Sequence[Any]
  ) -> Sequence["Node"]:
      """Static check against ResolverOp positional arguments."""
      if len(args) != len(cls._arg_data_types):
          raise ValueError(
              f"{cls.__name__} expects {len(cls._arg_data_types)} "
              f"arguments but got {len(args)}."
          )
      transformed_args = []
      for arg, arg_data_type in zip(args, cls._arg_data_types):
          if (
              arg_data_type == DataType.ARTIFACT_MULTIMAP
              and isinstance(arg, dict)
          ):
              arg = DictNode(arg)
          if not isinstance(arg, Node):
              raise ValueError(
                  "Cannot directly call ResolverOp with real values. "
                  "Use output of another operator as an argument."
              )
          if arg.output_data_type != arg_data_type:
              raise TypeError(
                  f"{cls.__name__} takes {DataType.Name(arg_data_type)} type "
                  f"but got {DataType.Name(arg.output_data_type)} instead."
              )
          transformed_args.append(arg)
      return transformed_args
  
imports: from __future__ import annotations
  import abc
  from typing import Any, Generic, Literal, Mapping, Optional, Sequence, Set, Type, TypeVar, Union
  import attr
  from tfx import types
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.utils import json_utils
  from tfx.utils import typing_utils
  import ml_metadata
label_desc: Use image node_id 7 for calling the _ResolverOpMeta obj's underlying member method code with example usage: obj._check_and_transform_args(cls, args) and returns: transformed_args