class_docstr: Represents Operation in MIL.
  
  # Properties
  name (str):
      The name of the operation
  
  input_types (InputSpec, class attr):
      Read-only named input types from all subclasses. Input types are used
      to validate `inputs`.
      If an input arg name start with prefix `_`, that indicates the input has the following properties:
      1. Most of the time, the input is type of ``InternalInputType`` and
         used only in pymil scope. It doesn't have the corresponding arg / attr
         in the MIL framework definition.
      2. It won't be printed in pymil.
  
  inputs [_input_vars] (dict of str --> Var):
      An Operation (subclass of Operation) only has access to input Var,
      which is already validated against `input_spec`.
  
  outputs [_output_vars] (list of Var):
      List of output var based on type inference. Read-only
class_docstr_tok: ["Represents","Operation","in","MIL",".","#","Properties","name","(","str",")",":","The","name","of","the","operation","input_types","(","InputSpec",",","class","attr",")",":","Read-only","named","input","types","from","all","subclasses",".","Input","types","are","used","to","validate","`","inputs","`",".","If","an","input","arg","name","start","with","prefix","`","_","`",",","that","indicates","the","input","has","the","following","properties",":","1",".","Most","of","the","time",",","the","input","is","type","of","``","InternalInputType","``","and","used","only","in","pymil","scope",".","It","does","n't","have","the","corresponding","arg","\/","attr","in","the","MIL","framework","definition",".","2",".","It","wo","n't","be","printed","in","pymil",".","inputs","[","_input_vars","]","(","dict","of","str","--",">","Var",")",":","An","Operation","(","subclass","of","Operation",")","only","has","access","to","input","Var",",","which","is","already","validated","against","`","input_spec","`",".","outputs","[","_output_vars","]","(","list","of","Var",")",":","List","of","output","var","based","on","type","inference",".","Read-only"]
code: def __init__(self, **kwargs):
      self._input_types = self.input_spec.input_types
      self._type_domains = self.type_domains
      self.name = kwargs.get("name", None)
  
      self._output_vars = None
      self._input_vars = {}
      self.blocks = []
      self.enclosing_block = kwargs["enclosing_block"]
  
      # Initialize inputs as object attributes (all None)
      for k in self._input_types.keys():
          setattr(self, k, None)
          self._input_vars[k] = None
  
      self._check_expected_inputs(kwargs)
  
      # Populate type_domains into input types
      for v in self._input_types.values():
          if not isinstance(v, TensorInputType):
              continue
          if len(v.type_domain) == 0:
              if v.type_domain_id not in self._type_domains:
                  raise ValueError(
                      "type_domain {} not defined.".format(
                          v.type_domain_id
                      )
                  )
              v.type_domain = self._type_domains[v.type_domain_id]
  
      # Set inputs from kwargs
      input_kv = {
          k: v
          for k, v in kwargs.items()
          if k in self._input_types and v is not None
      }
      self._validate_and_set_inputs(input_kv)
      self._ensure_required_inputs()
  
imports: from typing import Any, Dict, Tuple
  import numpy
  from coremltools.converters.mil.mil import types
  from coremltools.converters.mil.mil.types import is_compatible_type
  from coremltools.converters.mil.mil.types.symbolic import any_symbolic, is_symbolic
  from .None import SPACES
  from .input_type import DefaultInputs, TensorInputType, TupleInputType
  from .var import ComplexVar, InternalVar, ListVar, Var
label_desc: Use image node_id 1 to create a new Operation object  with example: obj = Operation()