code: def matmul(
      x1: JaxArray,
      x2: JaxArray,
      /,
      *,
      transpose_a: bool = False,
      transpose_b: bool = False,
      adjoint_a: bool = False,
      adjoint_b: bool = False,
      out: Optional[JaxArray] = None,
  ) -> JaxArray:
      if transpose_a:
          x1 = jnp.swapaxes(x1, -1, -2)
      if transpose_b:
          x2 = jnp.swapaxes(x2, -1, -2)
      if adjoint_a:
          x1 = jnp.swapaxes(jnp.conjugate(x1), -1, -2)
      if adjoint_b:
          x2 = jnp.swapaxes(jnp.conjugate(x2), -1, -2)
      return jnp.matmul(x1, x2)
  
imports: from collections import namedtuple
  from typing import Union, Optional, Tuple, Literal, Sequence, NamedTuple
  import jax.numpy
  import ivy
  from ivy import inf
  from ivy.func_wrapper import with_unsupported_dtypes
  from ivy.functional.backends.jax import JaxArray
  from .None import backend_version
  from ivy import promote_types_of_inputs
label_desc: Use image node_id 11 for calling a global function with example usage: matmul() and returns: jnp