class_docstr: deprecated: bentoml now requires signatures before saving a tf model
  reserve for now because tensorflow v1 has not been adopted yet
code: def __call__(
      self, *args: "tf_ext.TensorLike", **kwargs: "tf_ext.TensorLike"
  ) -> t.Any:
      if self.arg_specs is None and self.kwarg_specs is None:
          return self.origin_func(*args, **kwargs)
  
      for k in kwargs:
          if k not in self.kwarg_specs:
              raise TypeError(
                  f"Function got an unexpected keyword argument {k}"
              )
  
      arg_keys = {k for k, _ in zip(self.arg_names, args)}  # type: ignore[arg-type]
      _ambiguous_keys = arg_keys & set(kwargs)  # type: t.Set[str]
      if _ambiguous_keys:
          raise TypeError(
              f"got two values for arguments '{_ambiguous_keys}'"
          )
  
      # INFO:
      # how signature with kwargs works?
      # https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/eager/function.py#L1519
      transformed_args: t.Tuple[t.Any, ...] = tuple(
          cast_tensor_by_spec(arg, spec) for arg, spec in zip(args, self.arg_specs)  # type: ignore[arg-type]
      )
  
      transformed_kwargs = {
          k: cast_tensor_by_spec(arg, self.kwarg_specs[k])
          for k, arg in kwargs.items()
      }
      return self.origin_func(*transformed_args, **transformed_kwargs)
  
imports: from __future__ import annotations
  import importlib.metadata
  import importlib.util
  import logging
  import typing
  from typing import TYPE_CHECKING
  from bentoml.exceptions import BentoMLException
  from ...types import LazyType
  from ...utils.lazy_loader import LazyLoader
label_desc: Use image node_id 2 for calling the tf_function_wrapper obj's underlying member method code with example usage: obj.__call__() and returns: self, self