parameters: (a, n=1, axis=-1, prepend=np._NoValue, append=np._NoValue)
return_statement: return a
docstring: Calculate the n-th discrete difference along the given axis.
  
      The first difference is given by ``out[i] = a[i+1] - a[i]`` along
      the given axis, higher differences are calculated by using `diff`
      recursively.
  
      Parameters
      ----------
      a : array_like
          Input array
      n : int, optional
          The number of times values are differenced. If zero, the input
          is returned as-is.
      axis : int, optional
          The axis along which the difference is taken, default is the
          last axis.
      prepend, append : array_like, optional
          Values to prepend or append to `a` along axis prior to
          performing the difference.  Scalar values are expanded to
          arrays with length 1 in the direction of axis and the shape
          of the input array in along all other axes.  Otherwise the
          dimension and shape must match `a` except along axis.
  
          .. versionadded:: 1.16.0
  
      Returns
      -------
      diff : ndarray
          The n-th differences. The shape of the output is the same as `a`
          except along `axis` where the dimension is smaller by `n`. The
          type of the output is the same as the type of the difference
          between any two elements of `a`. This is the same as the type of
          `a` in most cases. A notable exception is `datetime64`, which
          results in a `timedelta64` output array.
  
      See Also
      --------
      gradient, ediff1d, cumsum
  
      Notes
      -----
      Type is preserved for boolean arrays, so the result will contain
      `False` when consecutive elements are the same and `True` when they
      differ.
  
      For unsigned integer arrays, the results will also be unsigned. This
      should not be surprising, as the result is consistent with
      calculating the difference directly:
  
      >>> u8_arr = np.array([1, 0], dtype=np.uint8)
      >>> np.diff(u8_arr)
      array([255], dtype=uint8)
      >>> u8_arr[1,...] - u8_arr[0,...]
      255
  
      If this is not desirable, then the array should be cast to a larger
      integer type first:
  
      >>> i16_arr = u8_arr.astype(np.int16)
      >>> np.diff(i16_arr)
      array([-1], dtype=int16)
  
      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]])
  
      >>> x = np.arange('1066-10-13', '1066-10-16', dtype=np.datetime64)
      >>> np.diff(x)
      array([1, 1], dtype='timedelta64[D]')
docstring_summary: Calculate the n-th discrete difference along the given axis.
docstring_tokens: Calculate the n - th discrete difference along the given axis .
function: def diff(a, n=1, axis=-1, prepend=np._NoValue, append=np._NoValue):
      """
      Calculate the n-th discrete difference along the given axis.
  
      The first difference is given by ``out[i] = a[i+1] - a[i]`` along
      the given axis, higher differences are calculated by using `diff`
      recursively.
  
      Parameters
      ----------
      a : array_like
          Input array
      n : int, optional
          The number of times values are differenced. If zero, the input
          is returned as-is.
      axis : int, optional
          The axis along which the difference is taken, default is the
          last axis.
      prepend, append : array_like, optional
          Values to prepend or append to `a` along axis prior to
          performing the difference.  Scalar values are expanded to
          arrays with length 1 in the direction of axis and the shape
          of the input array in along all other axes.  Otherwise the
          dimension and shape must match `a` except along axis.
  
          .. versionadded:: 1.16.0
  
      Returns
      -------
      diff : ndarray
          The n-th differences. The shape of the output is the same as `a`
          except along `axis` where the dimension is smaller by `n`. The
          type of the output is the same as the type of the difference
          between any two elements of `a`. This is the same as the type of
          `a` in most cases. A notable exception is `datetime64`, which
          results in a `timedelta64` output array.
  
      See Also
      --------
      gradient, ediff1d, cumsum
  
      Notes
      -----
      Type is preserved for boolean arrays, so the result will contain
      `False` when consecutive elements are the same and `True` when they
      differ.
  
      For unsigned integer arrays, the results will also be unsigned. This
      should not be surprising, as the result is consistent with
      calculating the difference directly:
  
      >>> u8_arr = np.array([1, 0], dtype=np.uint8)
      >>> np.diff(u8_arr)
      array([255], dtype=uint8)
      >>> u8_arr[1,...] - u8_arr[0,...]
      255
  
      If this is not desirable, then the array should be cast to a larger
      integer type first:
  
      >>> i16_arr = u8_arr.astype(np.int16)
      >>> np.diff(i16_arr)
      array([-1], dtype=int16)
  
      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]])
  
      >>> x = np.arange('1066-10-13', '1066-10-16', dtype=np.datetime64)
      >>> np.diff(x)
      array([1, 1], dtype='timedelta64[D]')
  
      """
      if n == 0:
          return a
      if n < 0:
          raise ValueError(
              "order must be non-negative but got " + repr(n))
  
      a = asanyarray(a)
      nd = a.ndim
      if nd == 0:
          raise ValueError("diff requires input that is at least one dimensional")
      axis = normalize_axis_index(axis, nd)
  
      combined = []
      if prepend is not np._NoValue:
          prepend = np.asanyarray(prepend)
          if prepend.ndim == 0:
              shape = list(a.shape)
              shape[axis] = 1
              prepend = np.broadcast_to(prepend, tuple(shape))
          combined.append(prepend)
  
      combined.append(a)
  
      if append is not np._NoValue:
          append = np.asanyarray(append)
          if append.ndim == 0:
              shape = list(a.shape)
              shape[axis] = 1
              append = np.broadcast_to(append, tuple(shape))
          combined.append(append)
  
      if len(combined) > 1:
          a = np.concatenate(combined, axis)
  
      slice1 = [slice(None)] * nd
      slice2 = [slice(None)] * nd
      slice1[axis] = slice(1, None)
      slice2[axis] = slice(None, -1)
      slice1 = tuple(slice1)
      slice2 = tuple(slice2)
  
      op = not_equal if a.dtype == np.bool_ else subtract
      for _ in range(n):
          a = op(a[slice1], a[slice2])
  
      return a
function_tokens: def diff ( a , n = 1 , axis = - 1 , prepend = np . _NoValue , append = np . _NoValue ) : if n == 0 : return a if n < 0 : raise ValueError ( "order must be non-negative but got " + repr ( n ) ) a = asanyarray ( a ) nd = a . ndim if nd == 0 : raise ValueError ( "diff requires input that is at least one dimensional" ) axis = normalize_axis_index ( axis , nd ) combined = [ ] if prepend is not np . _NoValue : prepend = np . asanyarray ( prepend ) if prepend . ndim == 0 : shape = list ( a . shape ) shape [ axis ] = 1 prepend = np . broadcast_to ( prepend , tuple ( shape ) ) combined . append ( prepend ) combined . append ( a ) if append is not np . _NoValue : append = np . asanyarray ( append ) if append . ndim == 0 : shape = list ( a . shape ) shape [ axis ] = 1 append = np . broadcast_to ( append , tuple ( shape ) ) combined . append ( append ) if len ( combined ) > 1 : a = np . concatenate ( combined , axis ) slice1 = [ slice ( None ) ] * nd slice2 = [ slice ( None ) ] * nd slice1 [ axis ] = slice ( 1 , None ) slice2 [ axis ] = slice ( None , - 1 ) slice1 = tuple ( slice1 ) slice2 = tuple ( slice2 ) op = not_equal if a . dtype == np . bool_ else subtract for _ in range ( n ) : a = op ( a [ slice1 ] , a [ slice2 ] ) return a