class_docstr: Calculation logic of a graph node.
  
  The constructor is private. Use `Operation.new()` to create operation object.
  
  `Operation` is a naive record.
  Do not "mutate" its attributes or store information relate to specific node.
  All complex logic should be implemented in `Node` class.
  
  Attributes
  ----------
  type
      Operation type name (e.g. Conv2D).
      If it starts with underscore, the "operation" is a special one (e.g. subgraph, input/output).
  parameters
      Arbitrary key-value parameters (e.g. kernel_size).
class_docstr_tok: ["Calculation","logic","of","a","graph","node",".","The","constructor","is","private",".","Use","`","Operation.new","(",")","`","to","create","operation","object",".","`","Operation","`","is","a","naive","record",".","Do","not","``","mutate","''","its","attributes","or","store","information","relate","to","specific","node",".","All","complex","logic","should","be","implemented","in","`","Node","`","class",".","Attributes","--","--","--","--","--","type","Operation","type","name","(","e.g",".","Conv2D",")",".","If","it","starts","with","underscore",",","the","``","operation","''","is","a","special","one","(","e.g",".","subgraph",",","input\/output",")",".","parameters","Arbitrary","key-value","parameters","(","e.g",".","kernel_size",")","."]
code: def new(
      type_name: str,
      parameters: Dict[str, Any] = cast(Dict[str, Any], None),
      cell_name: str = cast(str, None),
      attributes: Dict[str, Any] = cast(Dict[str, Any], None),
  ) -> "Operation":
      parameters = parameters or {}
      attributes = attributes or {}
      if type_name == "_cell":
          # NOTE: cell_name is the same as its Node's name, when the cell is wrapped within the node
          return Cell(cell_name, parameters)
      else:
          if get_default_framework() in ("torch", "pytorch"):
              from nni.nas.space.pytorch import (
                  op_def,
              )  # pylint: disable=unused-import
  
              cls = PyTorchOperation._find_subclass(type_name)
          elif get_default_framework() in ("tf", "tensorflow"):
              from nni.nas.space.tensorflow import (
                  op_def,
              )  # pylint: disable=unused-import
  
              cls = TensorFlowOperation._find_subclass(type_name)
          else:
              raise ValueError(
                  f"Unsupported framework: {get_default_framework()}"
              )
          return cls(
              type_name,
              parameters,
              _internal=True,
              attributes=attributes,
          )
  
imports: from typing import Any, Dict, List, Optional, cast
  from nni.common.framework import get_default_framework
label_desc: Use image node_id 6 for calling the Operation obj's underlying member method code with example usage: obj.new(type_name, parameters, cell_name, attributes) and returns: Cell, cls