<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _rolling_window(a, window, axis=-1):
 """ Make an ndarray with a rolling window along axis. Parameters a : array_like Array to add rolling window to axis: int axis position along which rolling window will be applied. window : int Size of rolling window Returns ------- Array that is a view of the original array with a added dimension of size w. Examples -------- array([[[0, 1, 2], [1, 2, 3], [2, 3, 4]], [[5, 6, 7], [6, 7, 8], [7, 8, 9]]]) Calculate rolling mean of last dimension: array([[ 1., 2., 3.], [ 6., 7., 8.]]) This function is taken from https://github.com/numpy/numpy/pull/31 but slightly modified to accept axis option. """

    axis = _validate_axis(a, axis)
    a = np.swapaxes(a, axis, -1)

    if window < 1:
        raise ValueError(
            "`window` must be at least 1. Given : {}".format(window))
    if window > a.shape[-1]:
        raise ValueError("`window` is too long. Given : {}".format(window))

    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    rolling = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides,
                                              writeable=False)
    return np.swapaxes(rolling, -2, axis)