class_docstr: Provider for flattened input/output/exec_property.
class_docstr_tok: ["Provider","for","flattened","input\/output\/exec_property","."]
code: def make_factory(
      self, name: str, type_hint: Any
  ) -> Callable[..., Any]:
      def provide(exec_info: data_types.ExecutionInfo):
          if name in exec_info.input_dict:
              debug_str = f"input[{name}]"
              result = _transform_artifacts(
                  exec_info.input_dict[name], type_hint
              )
          elif name in exec_info.output_dict:
              debug_str = f"output[{name}]"
              result = _transform_artifacts(
                  exec_info.output_dict[name], type_hint
              )
          elif name in exec_info.exec_properties:
              debug_str = f"exec_property[{name}]"
              result = exec_info.exec_properties[name]
          else:
              assert (
                  name in self._names
              ), f"name = {name} not in {self._names}."
              raise errors.FalseMatchError()
  
          if self._strict and not _type_check(result, type_hint):
              raise errors.InvalidTypeHintError(
                  f"Given type_hint = {type_hint} but {debug_str} = {result} is not"
                  " compatible."
              )
          return result
  
      return provide
  
file_path: tfx/tfx/orchestration/portable/execution/di_providers.py
imports: from collections.abc import Container, MutableSequence, Sequence
  import inspect
  from typing import Any, Callable, TypeVar, get_args, get_origin
  from tfx.orchestration.portable import data_types
  from tfx.types import artifact
  from tfx.utils import pure_typing_utils
  from tfx.utils.di import errors
  from tfx.utils.di import providers
label_desc: Use image node_id 3 for calling the FlatExecutionInfoProvider obj's underlying member method code with example usage: obj.make_factory(name, type_hint) and returns: provide, result