def diff(a, n=<NUM_LIT:1>, axis=-<NUM_LIT:1>):
if n == <NUM_LIT:0>:<EOL><INDENT>return a<EOL><DEDENT>if n < <NUM_LIT:0>:<EOL><INDENT>raise ValueError(<EOL>"<STR_LIT>" + repr(n))<EOL><DEDENT>a = asanyarray(a)<EOL>nd = len(a.shape)<EOL>slice1 = [slice(None)]*nd<EOL>slice2 = [slice(None)]*nd<EOL>slice1[axis] = slice(<NUM_LIT:1>, None)<EOL>slice2[axis] = slice(None, -<NUM_LIT:1>)<EOL>slice1 = tuple(slice1)<EOL>slice2 = tuple(slice2)<EOL>if n > <NUM_LIT:1>:<EOL><INDENT>return diff(a[slice1]-a[slice2], n-<NUM_LIT:1>, axis=axis)<EOL><DEDENT>else:<EOL><INDENT>return a[slice1]-a[slice2]<EOL><DEDENT>
Calculate the n-th order discrete difference along given axis.

The first order difference is given by ``out[n] = a[n+1] - a[n]`` along
the given axis, higher order differences are calculated by using `diff`
recursively.

Parameters
----------
a : array_like
    Input array
n : int, optional
    The number of times values are differenced.
axis : int, optional
    The axis along which the difference is taken, default is the last axis.

Returns
-------
diff : ndarray
    The `n` order differences. The shape of the output is the same as `a`
    except along `axis` where the dimension is smaller by `n`.

See Also
--------
gradient, ediff1d, cumsum

Examples
--------
>>> x = np.array([1, 2, 4, 7, 0])
>>> np.diff(x)
array([ 1,  2,  3, -7])
>>> np.diff(x, n=2)
array([  1,   1, -10])

>>> x = np.array([[1, 3, 6, 10], [0, 5, 6, 8]])
>>> np.diff(x)
array([[2, 3, 4],
       [5, 1, 2]])
>>> np.diff(x, axis=0)
array([[-1,  2,  0, -2]])