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,
  ) -> Batcher:
      raise NotImplementedError()
  
imports: from __future__ import annotations
  import contextlib
  from abc import ABC, abstractmethod
  from typing import Iterable
  from ludwig.data.batcher.base import Batcher
  from ludwig.distributed import DistributedStrategy
  from ludwig.features.base_feature import BaseFeature
  from ludwig.utils.defaults import default_random_seed
  from ludwig.utils.types import DataFrame
label_desc: Use image node_id 2 for calling the Dataset obj's underlying member method code with example usage: obj.initialize_batcher(batch_size, should_shuffle, random_seed, ignore_last, distributed) without return types