code: def _take_2d_multi_object(
      arr: np.ndarray,
      indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]],
      out: np.ndarray,
      fill_value,
      mask_info,
  ) -> None:
      # this is not ideal, performance-wise, but it's better than raising
      # an exception (best to optimize in Cython to avoid getting here)
      row_idx, col_idx = indexer  # both np.intp
      if mask_info is not None:
          (row_mask, col_mask), (row_needs, col_needs) = mask_info
      else:
          row_mask = row_idx == -1
          col_mask = col_idx == -1
          row_needs = row_mask.any()
          col_needs = col_mask.any()
      if fill_value is not None:
          if row_needs:
              out[row_mask, :] = fill_value
          if col_needs:
              out[:, col_mask] = fill_value
      for i, u_ in enumerate(row_idx):
          if u_ != -1:
              for j, v in enumerate(col_idx):
                  if v != -1:
                      out[i, j] = arr[u_, v]
  
imports: from __future__ import annotations
  import functools
  from typing import TYPE_CHECKING, cast, overload
  import numpy
  from pandas._libs import algos, lib
  from pandas.core.dtypes.cast import maybe_promote
  from pandas.core.dtypes.common import ensure_platform_int, is_1d_only_ea_dtype
  from pandas.core.dtypes.missing import na_value_for_dtype
  from pandas.core.construction import ensure_wrapped_if_datetimelike
label_desc: Use image node_id 12 for calling a global function with example usage: _take_2d_multi_object(arr, indexer, out, fill_value, mask_info) without return types