code: def prepare_cache(
      cls,
      graph: Data,
      batch_wise_out_aux_pairs: List[Tuple[np.ndarray, np.ndarray]],
      adj: Optional[SparseTensor],
      return_edge_index_type: str,
  ):
      subgraphs = []
  
      pbar = tqdm(batch_wise_out_aux_pairs)
      pbar.set_description(
          f"Caching data with type {return_edge_index_type}"
      )
  
      if return_edge_index_type == "adj":
          assert adj is not None
  
      for out, aux in pbar:
          mask = torch.from_numpy(np.in1d(aux, out))
          if isinstance(aux, np.ndarray):
              aux = torch.from_numpy(aux)
          subg = get_subgraph(
              aux,
              graph,
              return_edge_index_type,
              adj,
              output_node_mask=mask,
          )
          subgraphs.append(subg)
  
      return subgraphs
  
imports: import logging
  import math
  from typing import Callable, Iterator, List, NamedTuple, Optional, Tuple, Union
  import numpy
  import scipy.sparse
  import torch
  from torch import Tensor
  from tqdm import tqdm
  from torch_geometric.data import Data
  from torch_geometric.typing import SparseTensor
  from torch_geometric.utils import get_ppr, is_undirected, subgraph
label_desc: Use image node_id 3 for calling the IBMBBaseLoader obj's underlying member method code with example usage: obj.prepare_cache(cls, graph, batch_wise_out_aux_pairs, adj, return_edge_index_type) and returns: subgraphs