code: def _run(self, data, axes=None, keepdims=1, noop_with_empty_axes=0):  # type: ignore
      if self.is_axes_empty(axes) and noop_with_empty_axes:  # type: ignore
          return (data,)
  
      axes = self.handle_axes(axes)
      keepdims = keepdims != 0  # type: ignore
      res = np.prod(
          data, axis=axes, keepdims=keepdims, dtype=data.dtype
      )
      if not keepdims and not isinstance(res, np.ndarray):
          # The runtime must return a numpy array of a single float.
          res = np.array(res)
      return (res,)
  
file_path: onnx/onnx/reference/ops/op_reduce_prod.py
imports: import numpy
  from onnx.reference.ops._op import OpRunReduceNumpy
label_desc: Use image node_id 1 for calling the ReduceProd_18 obj's underlying member method code with example usage: obj._run(data, axes, keepdims, noop_with_empty_axes) and returns: res, data