code: def _run(self, x, axis=None, sorted=None):  # type: ignore  # noqa: A002
      if axis is None or np.isnan(axis):
          y, indices, inverse_indices, counts = np.unique(
              x, True, True, True
          )
      else:
          y, indices, inverse_indices, counts = np.unique(
              x, True, True, True, axis=axis
          )
      if len(self.onnx_node.output) == 1:
          return (y,)
  
      if not sorted:
          argsorted_indices = np.argsort(indices)
          inverse_indices_map = dict(
              zip(argsorted_indices, np.arange(len(argsorted_indices)))
          )
          indices = indices[argsorted_indices]
          y = np.take(x, indices, axis=0)
          inverse_indices = np.asarray(
              [inverse_indices_map[i] for i in inverse_indices],
              dtype=np.int64,
          )
          counts = counts[argsorted_indices]
  
      indices, inverse_indices, counts = _specify_int64(
          indices, inverse_indices, counts
      )
      if len(self.onnx_node.output) == 2:
          return (y, indices)
      if len(self.onnx_node.output) == 3:
          return (y, indices, inverse_indices)
      return (y, indices, inverse_indices, counts)
  
imports: import numpy
  from onnx.reference.op_run import OpRun
label_desc: Use image node_id 1 for calling the Unique obj's underlying member method code with example usage: obj._run(x, axis, sorted) and returns: y,  indices,  inverse_indices,  counts, y, y,  indices, y,  indices,  inverse_indices