docs: def diff(a, n=1):
      """
      Calculate the n-th discrete difference along given axis.
      The first difference is given by ``out[n] = a[n+1] - a[n]`` along
      the given axis, higher differences are calculated by using `diff`
      recursively.
  
      :param a: The list to calculate the diff on
      :param n: The order of the difference
      :type a: list | tuple
      :type n: int
      :return: THe array of nth order differences
      """
      if n == 0:
          return a
      if n < 0:
          raise ValueError("order must be non-negative but got " + repr(n))
  
      b = map(lambda x: x[1] - x[0], zip(a[:-1], a[1:]))
  
      if n > 1:
          return diff(b, n-1)
      return b