class_docstr: Experimental: Describes a command-line program inside a container.
  
  This class is similar to ExecutorContainerSpec, but uses structured
  placeholders instead of jinja templates for constructing container commands
  based on input and output artifact metadata. See placeholders.py for a list of
  supported placeholders.
  The spec includes the container image name and the command line
  (entrypoint plus arguments) for a program inside the container.
  
  Example:
  
  class MyTrainer(base_component.BaseComponent)
    class MyTrainerSpec(types.ComponentSpec):
      INPUTS = {
          'training_data':
              component_spec.ChannelParameter(type=standard_artifacts.Examples),
      }
      OUTPUTS = {
          'model':
              component_spec.ChannelParameter(type=standard_artifacts.Model),
      }
      PARAMETERS = {
          'num_training_steps': component_spec.ExecutionParameter(type=int),
      }
  
    SPEC_CLASS = MyTrainerSpec
    EXECUTOR_SPEC = executor_specs.TemplatedExecutorContainerSpec(
        image='gcr.io/my-project/my-trainer',
        command=[
            'python3', 'my_trainer',
            '--training_data_uri', InputUriPlaceholder('training_data'),
            '--model_uri', OutputUriPlaceholder('model'),
            '--num_training-steps', InputValuePlaceholder('num_training_steps'),
        ]
    )
  
  Attributes:
    image: Container image name.
    command: Container entrypoint command-line. Not executed within a shell.
      The command-line can use placeholder objects that will be replaced at
      the compilation time. Note: Jinja templates are not supported.
    args: Container entrypoint command-args.
class_docstr_tok: ["Experimental",":","Describes","a","command-line","program","inside","a","container",".","This","class","is","similar","to","ExecutorContainerSpec",",","but","uses","structured","placeholders","instead","of","jinja","templates","for","constructing","container","commands","based","on","input","and","output","artifact","metadata",".","See","placeholders.py","for","a","list","of","supported","placeholders",".","The","spec","includes","the","container","image","name","and","the","command","line","(","entrypoint","plus","arguments",")","for","a","program","inside","the","container",".","Example",":","class","MyTrainer","(","base_component.BaseComponent",")","class","MyTrainerSpec","(","types.ComponentSpec",")",":","INPUTS","=","{","'training_data","'",":","component_spec.ChannelParameter","(","type=standard_artifacts.Examples",")",",","}","OUTPUTS","=","{","'model","'",":","component_spec.ChannelParameter","(","type=standard_artifacts.Model",")",",","}","PARAMETERS","=","{","'num_training_steps","'",":","component_spec.ExecutionParameter","(","type=int",")",",","}","SPEC_CLASS","=","MyTrainerSpec","EXECUTOR_SPEC","=","executor_specs.TemplatedExecutorContainerSpec","(","image='gcr.io\/my-project\/my-trainer","'",",","command=","[","'python3","'",",","'my_trainer","'",",","'","--","training_data_uri","'",",","InputUriPlaceholder","(","'training_data","'",")",",","'","--","model_uri","'",",","OutputUriPlaceholder","(","'model","'",")",",","'","--","num_training-steps","'",",","InputValuePlaceholder","(","'num_training_steps","'",")",",","]",")","Attributes",":","image",":","Container","image","name",".","command",":","Container","entrypoint","command-line",".","Not","executed","within","a","shell",".","The","command-line","can","use","placeholder","objects","that","will","be","replaced","at","the","compilation","time",".","Note",":","Jinja","templates","are","not","supported",".","args",":","Container","entrypoint","command-args","."]
code: def __ne__(self, other) -> bool:
      return not self.__eq__(other)
  
file_path: tfx/tfx/dsl/component/experimental/executor_specs.py
imports: import functools
  import operator
  from typing import cast, List, Optional, Union
  from tfx import types
  from tfx.dsl.component.experimental import placeholders
  from tfx.dsl.components.base import executor_spec
  from tfx.dsl.placeholder import placeholder
  from tfx.proto.orchestration import executable_spec_pb2
  from tfx.proto.orchestration import placeholder_pb2
  from google.protobuf import message
label_desc: Use image node_id 3 for calling the TemplatedExecutorContainerSpec obj's underlying member method code with example usage: obj.__ne__(other) and returns: unknown