class_docstr: Remove single-dimension dimensions in a 1D or higher tensor.
  
  Parameters
  ----------
  x: tensor<*?,T> (Required)
      * Must be at least 1D.
  axes: const<K,i32> (Optional)
      * Axes to squeeze out.
      * default to remove all single-dimensions.
  
  Returns
  -------
  tensor<*(rank(x)-K),T>
      * Tensor with same type as input ``x`` and rank ``rank(x)-K``.
  
  Attributes
  ----------
  T: fp32
code: def type_inference(self):
      x_type = self.x.dtype
      x_shape = self.x.shape
      squeezed_shape = list(x_shape)
      if self.axes is None:
          # Squeeze all single-dim, assuming symbolic dims != 1
          squeezed_shape = [s for s in squeezed_shape if s != 1]
      else:
          axes = self.axes.val
          axes = [
              axis if axis >= 0 else axis + self.x.rank for axis in axes
          ]
          for i in sorted(axes)[::-1]:  # descending order
              if len(squeezed_shape) <= i:
                  raise ValueError(
                      "Cannot squeeze dim {} for shape"
                      + " {}".format(i, squeezed_shape)
                  )
              squeezed_shape.pop(i)
  
      return types.tensor(x_type, tuple(squeezed_shape))
  
imports: import functools
  import sympy
  from coremltools.converters.mil.mil.types.symbolic import is_symbolic, isscalar, any_symbolic, any_variadic
  from coremltools.converters.mil.mil import get_new_symbol, get_new_variadic_symbol, VALUE, SYMBOL, types
  from ._op_reqs import *
label_desc: Use image node_id 2 for calling the squeeze obj's underlying member method code with example usage: obj.type_inference() and returns: types