Recursively iterate over the (dimension, stride)
        tuples specified in dim_strides, returning the chunk
        start offsets for each specified dimensions.

        For example, the following call effectively produces
        2 loops over the 'ntime' and 'nchan' dimensions
        in chunks of 10 and 4 respectively.

        .. code-block:: python

            A = np.ones(size=(100, 4))
            for ts, cs in cube.endpoint_iter(('ntime', 10), ('nchan', 4))
                A[ts, cs].sum()

            for i cube.endpoint_iter(('ntime', 10), ('nchan', 4))
                A[i].sum()

        Parameters
        ----------
        *dim_strides : list
            list of (dimension, stride) tuples

        Returns
        -------
        iterator
            Iterator producing a tuple of slices for each dimension
            :code:`(slice(d0_low, d0_high, 1), slice(d1_low, d1_high,1))`

def slice_iter(self, *dim_strides, **kwargs):
        """
        Recursively iterate over the (dimension, stride)
        tuples specified in dim_strides, returning the chunk
        start offsets for each specified dimensions.

        For example, the following call effectively produces
        2 loops over the 'ntime' and 'nchan' dimensions
        in chunks of 10 and 4 respectively.

        .. code-block:: python

            A = np.ones(size=(100, 4))
            for ts, cs in cube.endpoint_iter(('ntime', 10), ('nchan', 4))
                A[ts, cs].sum()

            for i cube.endpoint_iter(('ntime', 10), ('nchan', 4))
                A[i].sum()

        Parameters
        ----------
        *dim_strides : list
            list of (dimension, stride) tuples

        Returns
        -------
        iterator
            Iterator producing a tuple of slices for each dimension
            :code:`(slice(d0_low, d0_high, 1), slice(d1_low, d1_high,1))`

        """
        def _create_slices(*args):
            return tuple(slice(s,e,1) for (s, e) in args)

        return (_create_slices(*s) for s in self.endpoint_iter(
            *dim_strides, **kwargs))