code: def initialize_batcher(
      self,
      batch_size: int = 128,
      should_shuffle: bool = True,
      random_seed: int = default_random_seed,
      ignore_last: bool = False,
      distributed: DistributedStrategy = None,
      augmentation_pipeline=None,
  ) -> Batcher:
      sampler = DistributedSampler(
          len(self),
          shuffle=should_shuffle,
          random_seed=random_seed,
          distributed=distributed,
      )
      batcher = RandomAccessBatcher(
          self,
          sampler,
          batch_size=batch_size,
          ignore_last=ignore_last,
          augmentation_pipeline=augmentation_pipeline,
      )
      yield batcher
  
imports: from __future__ import annotations
  import contextlib
  from typing import Iterable, TYPE_CHECKING
  import numpy
  from pandas import DataFrame
  from ludwig.constants import PREPROCESSING, TRAINING
  from ludwig.data.batcher.base import Batcher
  from ludwig.data.batcher.random_access import RandomAccessBatcher
  from ludwig.data.dataset.base import Dataset, DatasetManager
  from ludwig.data.sampler import DistributedSampler
  from ludwig.distributed import DistributedStrategy
  from ludwig.features.base_feature import BaseFeature
  from ludwig.utils.data_utils import DATA_TRAIN_HDF5_FP, load_hdf5, save_hdf5
  from ludwig.utils.dataframe_utils import from_numpy_dataset, to_numpy_dataset, to_scalar_df
  from ludwig.utils.defaults import default_random_seed
  from ludwig.utils.fs_utils import download_h5
  from ludwig.utils.misc_utils import get_proc_features
label_desc: Use image node_id 9 for calling the PandasDataset obj's underlying member method code with example usage: obj.initialize_batcher(batch_size, should_shuffle, random_seed, ignore_last, distributed, augmentation_pipeline) without return types