code: def type_inference(self):
      reduced_shape = self._find_reduced_shape()
      output_dtype = self.output_dtype.val.lower()
      if output_dtype not in self._VALID_OUTPUT_DTYPES:
          raise ValueError(
              f'Invalid "output_dtype" {output_dtype}. Only support {self._VALID_OUTPUT_DTYPES}'
          )
      return types.tensor(
          types.string_to_builtin(output_dtype), tuple(reduced_shape)
      )
  
file_path: coremltools/coremltools/converters/mil/mil/ops/defs/iOS17/reduction.py
imports: import numpy
  from coremltools.converters.mil.mil import types
  from coremltools.converters.mil.mil.input_type import DefaultInputs, InputSpec, TensorInputType
  from coremltools.converters.mil.mil.ops.defs._op_reqs import register_op
  from coremltools.converters.mil.mil.ops.defs.iOS15.reduction import reduce_arg
  from coremltools.converters.mil.mil.ops.defs.iOS17 import _IOS17_TARGET
label_desc: Use image node_id 2 for calling the reduce_arg obj's underlying member method code with example usage: obj.type_inference() and returns: types