code: def inner(x, y, axis=-1):
      
  
      # Convert negative axis to positive
      if axis < 0:
          axis = x.ndim + axis
  
      # If sum not on axis 0, roll specified axis to 0 position
      if axis == 0:
          xr = x
          yr = y
      else:
          xr = np.rollaxis(x, axis, 0)
          yr = np.rollaxis(y, axis, 0)
  
      # Efficient inner product on axis 0
      if np.__version__ == '1.14.0':
          # Setting of optimize flag due to
          #    https://github.com/numpy/numpy/issues/10343
          ip = np.einsum(xr, [0, Ellipsis], yr, [0, Ellipsis],
                         optimize=False)[np.newaxis, ...]
      else:
          ip = np.einsum(xr, [0, Ellipsis], yr, [0, Ellipsis])[np.newaxis, ...]
  
      # Roll axis back to original position if necessary
      if axis != 0:
          ip = np.rollaxis(ip, 0, axis + 1)
  
      return ip
docs: Compute inner product of x and y on specified axis, equivalent to
      :code:`np.sum(x * y, axis=axis, keepdims=True)`.
  
      Parameters
      ----------
      x : array_like
        Input array x
      y : array_like
        Input array y
      axis : int, optional (default -1)
        Axis over which to compute the sum
  
      Returns
      -------
      y : ndarray
        Inner product array equivalent to summing x*y over the specified
        axis