code: def matrix_kronecker_product(*matrices):
      """Compute the Kronecker product of a sequence of SymPy Matrices.
  
      This is the standard Kronecker product of matrices [1].
  
      Parameters
      ==========
  
      matrices : tuple of MatrixBase instances
          The matrices to take the Kronecker product of.
  
      Returns
      =======
  
      matrix : MatrixBase
          The Kronecker product matrix.
  
      Examples
      ========
  
      >>> from sympy import Matrix
      >>> from sympy.matrices.expressions.kronecker import (
      ... matrix_kronecker_product)
  
      >>> m1 = Matrix([[1,2],[3,4]])
      >>> m2 = Matrix([[1,0],[0,1]])
      >>> matrix_kronecker_product(m1, m2)
      Matrix([
      [1, 0, 2, 0],
      [0, 1, 0, 2],
      [3, 0, 4, 0],
      [0, 3, 0, 4]])
      >>> matrix_kronecker_product(m2, m1)
      Matrix([
      [1, 2, 0, 0],
      [3, 4, 0, 0],
      [0, 0, 1, 2],
      [0, 0, 3, 4]])
  
      References
      ==========
  
      .. [1] https://en.wikipedia.org/wiki/Kronecker_product
      """
      # Make sure we have a sequence of Matrices
      if not all(isinstance(m, MatrixBase) for m in matrices):
          raise TypeError(
              "Sequence of Matrices expected, got: %s" % repr(matrices)
          )
  
      # Pull out the first element in the product.
      matrix_expansion = matrices[-1]
      # Do the kronecker product working from right to left.
      for mat in reversed(matrices[:-1]):
          rows = mat.rows
          cols = mat.cols
          # Go through each row appending kronecker product to.
          # running matrix_expansion.
          for i in range(rows):
              start = matrix_expansion * mat[i * cols]
              # Go through each column joining each item
              for j in range(cols - 1):
                  start = start.row_join(
                      matrix_expansion * mat[i * cols + j + 1]
                  )
              # If this is the first element, make it the start of the
              # new row.
              if i == 0:
                  next = start
              else:
                  next = next.col_join(start)
          matrix_expansion = next
  
      MatrixClass = max(
          matrices, key=lambda M: M._class_priority
      ).__class__
      if isinstance(matrix_expansion, MatrixClass):
          return matrix_expansion
      else:
          return MatrixClass(matrix_expansion)
  
imports: from functools import reduce
  from math import prod
  from sympy.core import Mul, sympify
  from sympy.functions import adjoint
  from sympy.matrices.exceptions import ShapeError
  from sympy.matrices.expressions.matexpr import MatrixExpr
  from sympy.matrices.expressions.transpose import transpose
  from sympy.matrices.expressions.special import Identity
  from sympy.matrices.matrixbase import MatrixBase
  from sympy.strategies import canon, condition, distribute, do_one, exhaust, flatten, typed, unpack
  from sympy.strategies.traverse import bottom_up
  from sympy.utilities import sift
  from .matadd import MatAdd
  from .matmul import MatMul
  from .matpow import MatPow
label_desc: Use image node_id 4 for calling a global function with example usage: matrix_kronecker_product() and returns: matrix_expansion, MatrixClass