code: def kronecker(
      x: Sequence[Union[ivy.Array, ivy.NativeArray]],
      skip_matrix: Optional[int] = None,
      reverse: Optional[bool] = False,
      out: Optional[ivy.Array] = None,
  ) -> ivy.Array:
      """Kronecker product of a list of matrices.
  
      Parameters
      ----------
      x
          Sequence of matrices
  
      skip_matrix
          if not None, index of a matrix to skip
  
      reverse
          if True, the order of the matrices is reversed
  
      Returns
      -------
      kronecker_product: matrix of shape ``(prod(n_rows), prod(n_columns)``
          where ``prod(n_rows) = prod([m.shape[0] for m in matrices])``
          and ``prod(n_columns) = prod([m.shape[1] for m in matrices])``
      """
      if skip_matrix is not None:
          x = [x[i] for i in range(len(x)) if i != skip_matrix]
  
      if reverse:
          order = -1
      else:
          order = 1
  
      for i, matrix in enumerate(x[::order]):
          if not i:
              res = matrix
          else:
              res = ivy.kron(res, matrix, out=out)
      return res
  
imports: import logging
  from typing import Union, Optional, Tuple, List, Sequence, Literal
  import ivy
  from ivy.utils.backend import current_backend
  from ivy.func_wrapper import to_native_arrays_and_back, handle_out_argument, handle_nestable, handle_array_like_without_promotion, handle_array_function, handle_device, inputs_to_ivy_arrays, handle_backend_invalid
  from ivy.utils.exceptions import handle_exceptions
label_desc: Use image node_id 12 for calling a global function with example usage: kronecker(x, skip_matrix, reverse, out) and returns: res