class_docstr: Ancestor to all operators in this subfolder.
  
  Args:
      onnx_node: `onnx` node
      run_params: additional parameters such as `verbose`, `opsets`
          (it can be more than one if the operator has a subgraph),
          `log` for a logging function
      schema: operator schema
class_docstr_tok: ["Ancestor","to","all","operators","in","this","subfolder",".","Args",":","onnx_node",":","`","onnx","`","node","run_params",":","additional","parameters","such","as","`","verbose","`",",","`","opsets","`","(","it","can","be","more","than","one","if","the","operator","has","a","subgraph",")",",","`","log","`","for","a","logging","function","schema",":","operator","schema"]
docstr: Calls method ``_run``, catches exceptions,
  displays a longer error message.
  
  Args:
      *args: inputs
      linked_attributes: used if this has an attriute linked to
          the attribute of the function it belongs to
      context: if this node is part of the subgraph, `context` is
          a dictionary with the values this node may use
  
  Returns:
      tuple of results
docstr_tok: ["Calls","method","``","_run","``",",","catches","exceptions",",","displays","a","longer","error","message",".","Args",":","*","args",":","inputs","linked_attributes",":","used","if","this","has","an","attriute","linked","to","the","attribute","of","the","function","it","belongs","to","context",":","if","this","node","is","part","of","the","subgraph",",","`","context","`","is","a","dictionary","with","the","values","this","node","may","use","Returns",":","tuple","of","results"]
code: def run(self, *args, linked_attributes=None, context=None):  # type: ignore
      """Calls method ``_run``, catches exceptions,
      displays a longer error message.
  
      Args:
          *args: inputs
          linked_attributes: used if this has an attriute linked to
              the attribute of the function it belongs to
          context: if this node is part of the subgraph, `context` is
              a dictionary with the values this node may use
  
      Returns:
          tuple of results
      """
      if self.need_context():
          if context is None:
              raise RuntimeError(
                  f"This node if type {type(self)} needs context to be filled."
              )
      elif context is not None:
          raise RuntimeError(
              f"This node if type {type(self)} does not need any contextbut one is given."
          )
      if self.has_linked_attribute and linked_attributes is None:
          raise ValueError(
              f"This node {type(self)} has linked attributes but None are given in parameter 'linked_attributes'."
          )
      if (
          not self.has_linked_attribute
          and linked_attributes is not None
      ):
          raise ValueError(
              f"This node {type(self)} has no linked attribute but some are given in parameter "
              f"'linked_attributes' {set(linked_attributes)}."
          )
      overridden_attributes = {}
      if self.has_linked_attribute:
          if linked_attributes is None:
              raise AttributeError(
                  f"One attribute is linked but no linked value is provided, "
                  f"in class {type(self)}."
              )
          for att in self.attributes_names_:
              v = getattr(self, att)
              if isinstance(v, RefAttrName):
                  if v.name not in linked_attributes:
                      raise ValueError(
                          f"Unable to find a value for linked attribute {att!r} in {linked_attributes!r} "
                          f"in node {type(self)}."
                      )
                  overridden_attributes[att] = linked_attributes[v.name]
  
      self._log(
          "-- begin %s.run(%d inputs)",
          self.__class__.__name__,
          len(args),
      )
      kwargs = {}
      for att in self.attributes_names_:
          if att in overridden_attributes:
              continue
          if not hasattr(self, att):
              raise NameError(
                  f"Attribute {att!r} is missing in operator {self.__class__.__name__!r}."
              )
          kwargs[att] = getattr(self, att)
      if self.has_subgraph:
          if self.has_linked_attribute and not linked_attributes:
              raise RuntimeError(
                  f"A subgraph has linked attribute but none was given to {type(self)}."
              )
          kwargs["attributes"] = linked_attributes
      if context is not None:
          kwargs["context"] = context
      try:
          if overridden_attributes:
              res = self._run(*args, **overridden_attributes, **kwargs)
          else:
              res = self._run(*args, **kwargs)
      except (TypeError, AttributeError) as e:
          raise TypeError(
              f"Issues with types {[type(_) for _ in args]} and attributes "
              f"{sorted(kwargs)} and linked attributes={sorted(overridden_attributes)} "
              f"(operator {self.__class__.__name__!r})."
          ) from e
      self._log(
          "-- done %s.run -> %d outputs",
          self.__class__.__name__,
          len(res) if res is not None else 0,
      )
      return self._check_and_fix_outputs(res)
  
imports: from __future__ import annotations
  import abc
  from typing import Any, ClassVar, Iterable
  import numpy
  from onnx import TensorProto
  from onnx.defs import get_all_schemas_with_history, get_schema, onnx_opset_version
  from onnx.helper import make_node, make_tensor_type_proto, np_dtype_to_tensor_dtype
  from onnx.numpy_helper import to_array, unpack_int4
  from onnx.onnx_pb import AttributeProto, GraphProto, NodeProto, TypeProto
  from onnx.reference.custom_element_types import bfloat16, float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz, int4, uint4
label_desc: Use image node_id 15 for calling the OpRun obj's underlying member method code with example usage: obj.run() and returns: self