code: def interpolate_2d(
      values: np.ndarray,
      method: str = "pad",
      axis: Axis = 0,
      limit: int | None = None,
      limit_area: str | None = None,
  ) -> None:
      """
      Perform an actual interpolation of values, values will be make 2-d if
      needed fills inplace, returns the result.
  
      Parameters
      ----------
      values: np.ndarray
          Input array.
      method: str, default "pad"
          Interpolation method. Could be "bfill" or "pad"
      axis: 0 or 1
          Interpolation axis
      limit: int, optional
          Index limit on interpolation.
      limit_area: str, optional
          Limit area for interpolation. Can be "inside" or "outside"
  
      Notes
      -----
      Modifies values in-place.
      """
      if limit_area is not None:
          np.apply_along_axis(
              # error: Argument 1 to "apply_along_axis" has incompatible type
              # "partial[None]"; expected
              # "Callable[..., Union[_SupportsArray[dtype[<nothing>]],
              # Sequence[_SupportsArray[dtype[<nothing>]]],
              # Sequence[Sequence[_SupportsArray[dtype[<nothing>]]]],
              # Sequence[Sequence[Sequence[_SupportsArray[dtype[<nothing>]]]]],
              # Sequence[Sequence[Sequence[Sequence[_
              # SupportsArray[dtype[<nothing>]]]]]]]]"
              partial(  # type: ignore[arg-type]
                  _interpolate_with_limit_area,
                  method=method,
                  limit=limit,
                  limit_area=limit_area,
              ),
              # error: Argument 2 to "apply_along_axis" has incompatible type
              # "Union[str, int]"; expected "SupportsIndex"
              axis,  # type: ignore[arg-type]
              values,
          )
          return
  
      transf = (lambda x: x) if axis == 0 else (lambda x: x.T)
  
      # reshape a 1 dim if needed
      if values.ndim == 1:
          if axis != 0:  # pragma: no cover
              raise AssertionError(
                  "cannot interpolate on a ndim == 1 with axis != 0"
              )
          values = values.reshape(tuple((1,) + values.shape))
  
      method = clean_fill_method(method)
      tvalues = transf(values)
  
      # _pad_2d and _backfill_2d both modify tvalues inplace
      if method == "pad":
          _pad_2d(tvalues, limit=limit)
      else:
          _backfill_2d(tvalues, limit=limit)
  
      return
  
imports: from __future__ import annotations
  from functools import partial, wraps
  from typing import TYPE_CHECKING, Any, cast
  import numpy
  from pandas._libs import NaT, algos, lib
  from pandas._typing import ArrayLike, Axis, AxisInt, F, npt
  from pandas.compat._optional import import_optional_dependency
  from pandas.core.dtypes.cast import infer_dtype_from
  from pandas.core.dtypes.common import is_array_like, is_numeric_v_string_like, is_object_dtype, needs_i8_conversion
  from pandas.core.dtypes.missing import is_valid_na_for_dtype, isna, na_value_for_dtype
label_desc: Use image node_id 15 for calling a global function with example usage: interpolate_2d(values, method, axis, limit, limit_area) without return types