code: def _run(
      self,
      x: np.ndarray,
      x_scale: np.ndarray,
      x_zero_point: Optional[np.ndarray] = None,
      axis: Optional[int] = None,
  ):  # type: ignore
      if len(x_scale.shape) > 1:
          raise RuntimeError("Input 2 must be a vector or a number.")
  
      x_type = self.get_x_type(x)
      fp8_type = x_type in {
          TensorProto.FLOAT8E4M3FN,
          TensorProto.FLOAT8E4M3FNUZ,
          TensorProto.FLOAT8E5M2,
          TensorProto.FLOAT8E5M2FNUZ,
      }
      if x_zero_point is not None and not fp8_type:
          zero_type = self.get_x_type(x_zero_point)
          if x_type != zero_type:
              raise RuntimeError(
                  f"Type mismatch {x_type} != {zero_type} in DequantizeLinear."
              )
  
          dx = x.astype(np.float32) - DequantizeLinear.reshape_input(
              x_zero_point, x.shape, axis
          )
      else:
          if fp8_type and x_zero_point is not None:
              u_x_zero_point = x_zero_point.astype(np.uint8)
              umi = u_x_zero_point.min()
              uma = u_x_zero_point.max()
              if umi != uma or umi != np.uint8(0):
                  raise RuntimeError(
                      "x_zero_point is not null but should be zero for float8 types."
                  )
          if x_type == TensorProto.FLOAT8E4M3FN:
              dx = float8e4m3_to_float32(x)
          elif x_type == TensorProto.FLOAT8E4M3FNUZ:
              dx = float8e4m3_to_float32(x, uz=True)
          elif x_type == TensorProto.FLOAT8E5M2:
              dx = float8e5m2_to_float32(x)
          elif x_type == TensorProto.FLOAT8E5M2FNUZ:
              dx = float8e5m2_to_float32(x, fn=True, uz=True)
          else:
              dx = x.astype(np.float32)
      y = dx * DequantizeLinear.reshape_input(x_scale, x.shape, axis)
      return (y.astype(x_scale.dtype),)
  
file_path: onnx/onnx/reference/ops/op_dequantize_linear.py
imports: from typing import Optional, Tuple
  import numpy
  from onnx import TensorProto
  from onnx.helper import np_dtype_to_tensor_dtype
  from onnx.numpy_helper import float8e4m3_to_float32, float8e5m2_to_float32
  from onnx.reference.custom_element_types import float8e4m3fn, float8e4m3fnuz, float8e5m2, float8e5m2fnuz, int4, uint4
  from onnx.reference.op_run import OpRun
label_desc: Use image node_id 3 for calling the DequantizeLinear obj's underlying member method code with example usage: obj._run(x, x_scale, x_zero_point, axis) and returns: y