code: def _multi_slice(
      arr: ArrayLike,
      start_indices: tuple[tuple[int, ...]],
      limit_indices: tuple[tuple[int, ...]],
      removed_dims: tuple[tuple[int, ...]],
  ) -> list[Array]:
      """Extracts multiple slices from `arr`.
  
      This is used to shard Array arguments to pmap. It's implemented as a
      Array method here to avoid circular imports.
      """
      results: list[Array] = []
      for starts, limits, removed in zip(
          start_indices, limit_indices, removed_dims
      ):
          sliced = lax.slice(arr, starts, limits)
          if removed:
              sliced = lax.squeeze(sliced, removed)
          results.append(sliced)
      return results
  
imports: from __future__ import annotations
  import abc
  from functools import partial, wraps
  import math
  from typing import Any
  import numpy
  import jax
  from jax import lax
  from jax._src import core
  from jax._src import dtypes
  from jax._src.api_util import _ensure_index_tuple
  from jax._src.array import ArrayImpl
  from jax._src.lax import lax
  from jax._src.numpy import lax_numpy
  from jax._src.numpy import reductions
  from jax._src.numpy import ufuncs
  from jax._src.numpy import util
  from jax._src.ops import scatter
  from jax._src.typing import Array, ArrayLike, DimSize, DTypeLike, Shape
  from jax._src.util import safe_zip, safe_map
label_desc: Use image node_id 18 for calling a global function with example usage: _multi_slice(arr, start_indices, limit_indices, removed_dims) and returns: results