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: Fake instantiation of the ResolverOp class.
  
  Original implementation of metaclass.__call__ method is to instantiate
  (__new__) and initialize (__init__) the class instance. For ResolverOp(),
  we don't actually create the ResolverOp instance but returns an OpNode
  which represents a ResolverOp invocation.
  
  In order to actually create the ResolverOp instance, use ResolverOp.create()
  classmethod instead.
  
  Args:
    *args: Input arguments for the operator.
    **kwargs: Property values for the ResolverOp.
  
  Returns:
    An OpNode instance that represents the operator call.
code: def __call__(
      cls, *args: Union["Node", Mapping[str, "Node"]], **kwargs: Any
  ):
      """Fake instantiation of the ResolverOp class.
  
      Original implementation of metaclass.__call__ method is to instantiate
      (__new__) and initialize (__init__) the class instance. For ResolverOp(),
      we don't actually create the ResolverOp instance but returns an OpNode
      which represents a ResolverOp invocation.
  
      In order to actually create the ResolverOp instance, use ResolverOp.create()
      classmethod instead.
  
      Args:
        *args: Input arguments for the operator.
        **kwargs: Property values for the ResolverOp.
  
      Returns:
        An OpNode instance that represents the operator call.
      """
      args = cls._check_and_transform_args(args)
      cls._check_kwargs(kwargs)
      return OpNode(
          op_type=cls,
          args=args,
          output_data_type=cls._return_data_type,
          kwargs=kwargs,
      )
  
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 6 for calling the _ResolverOpMeta obj's underlying member method code with example usage: obj.__call__(cls) and returns: OpNode