class_docstr: An execution parameter in a ComponentSpec.
  
  This type of parameter should be specified in the PARAMETERS dict of a
  ComponentSpec:
  
  class MyCustomComponentSpec(ComponentSpec):
    # ...
    PARAMETERS = {
        'internal_option': ExecutionParameter(type=str),
    }
    # ...
  
  Attributes:
    type: Type of the execution parameter.
    optional: Boolean value indicating whether the parameter is optional.
    use_proto: Boolean value indicating whether pb message (and other
      non-primitive types like lists) should be stored in its original form.
code: def __init__(
      self, type=None, optional=False, use_proto=False
  ):  # pylint: disable=redefined-builtin
      self.type = type
      self.optional = optional
      self.use_proto = use_proto
  
      if self.type in [int, float, str] and self.use_proto:
          raise ValueError(
              "use_proto set for primitive type %s" % self.type
          )
  
imports: import copy
  import inspect
  import itertools
  from typing import Any, Dict, List, Mapping, Optional, Type, cast
  from tfx.dsl.component.experimental.json_compat import check_strict_json_compat
  from tfx.dsl.placeholder import placeholder
  from tfx.types import artifact
  from tfx.types import channel
  from tfx.types.system_executions import SystemExecution
  from tfx.utils import json_utils
  from tfx.utils import proto_utils
  from google.protobuf import message
label_desc: Use image node_id 1 to create a new ExecutionParameter object  with example: obj = ExecutionParameter(type, optional, use_proto)