code: def inner(
      x1: Union[ivy.Array, ivy.NativeArray],
      x2: Union[ivy.Array, ivy.NativeArray],
      /,
      *,
      out: Optional[ivy.Array] = None,
  ) -> ivy.Array:
      """Return the inner product of two vectors ``x1`` and ``x2``.
  
      Parameters
      ----------
      x1
          first one-dimensional input array of size N.
          Should have a numeric data type.
          a(N,) array_like
          First input vector. Input is flattened if not already 1-dimensional.
      x2
          second one-dimensional input array of size M.
          Should have a numeric data type.
          b(M,) array_like
          Second input vector. Input is flattened if not already 1-dimensional.
      out
          optional output array, for writing the result to.
          It must have a shape that the inputs broadcast to.
  
      Returns
      -------
      ret
          a two-dimensional array containing the inner product and whose
          shape is (N, M).
          The returned array must have a data type determined by Type Promotion Rules.
  
      Both the description and the type hints above assumes an array input for
      simplicity, but this function is *nestable*, and therefore also accepts
      :class:`ivy.Container` instances in place of any of the arguments.
  
      Examples
      --------
      Matrices of identical shapes
  
      >>> x = ivy.array([[1., 2.], [3., 4.]])
      >>> y = ivy.array([[5., 6.], [7., 8.]])
      >>> d = ivy.inner(x, y)
      >>> print(d)
      ivy.array([[17., 23.], [39., 53.]])
  
      # Matrices of different shapes
  
      >>> x = ivy.array([[1., 2.], [3., 4.], [5., 6.]])
      >>> y = ivy.array([[5., 6.], [7., 8.]])
      >>> d = ivy.inner(x, y)
      >>> print(d)
      ivy.array([[17., 23.], [39., 53.], [61., 83.]])
  
      # 3D matrices
  
      >>> x = ivy.array([[[1., 2.], [3., 4.]],
      ...                [[5., 6.], [7., 8.]]])
      >>> y = ivy.array([[[9., 10.], [11., 12.]],
      ...                [[13., 14.], [15., 16.]]])
      >>> d = ivy.inner(x, y)
      >>> print(d)
      ivy.array([[[[ 29.,  35.], [ 41.,  47.]],
                  [[ 67.,  81.], [ 95., 109.]]],
                 [[[105., 127.], [149., 171.]],
                  [[143., 173.], [203., 233.]]]])
      """
      return current_backend(x1, x2).inner(x1, x2, out=out)
  
imports: from typing import Union, Optional, Tuple, Literal, List, Sequence
  import ivy
  from ivy.utils.backend import current_backend
  from ivy.func_wrapper import handle_array_function, to_native_arrays_and_back, handle_out_argument, handle_nestable, handle_array_like_without_promotion, handle_device, handle_backend_invalid
  from ivy.utils.exceptions import handle_exceptions
label_desc: Use image node_id 8 for calling a global function with example usage: inner() and returns: current_backend