class_docstr: Returns a tensor containing all windows of ``size``, separated by stride along the given ``axis``.
  
  Parameters
  ----------
  x: tensor<[*d0, d_axis, *dn], T>
      * Input tensor
  axis: const<i32>
      * Axis to perform the operation.
  size: const<i32>
      * Number of elements in the sliding window.
  stride: const<i32> Optional
      * Default to ``1``.
      * The stride of the input elements in the sliding window.
  
  Returns
  -------
  tensor<[*d0, d_axis - size // stride + 1, size, *dn], T>
      * The output will be a tensor of rank ``N+1`` where ``N`` is the input tensor rank.
  
  Attributes
  ----------
  T: fp32
code: def type_inference(self):
      x_shape = self.x.shape
      axis = self.axis.val
      size = self.size.val
      stride = self.stride.val
      ret_shape = list(x_shape)
      ret_shape[axis] = (x_shape[axis] - size) // stride + 1
      pos_axis = axis if axis >= 0 else axis + self.x.rank
      ret_shape.insert(pos_axis + 1, size)
      return types.tensor(self.x.dtype, tuple(ret_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 sliding_windows obj's underlying member method code with example usage: obj.type_inference() and returns: types