class_docstr: Base class for all other splitter.
code: def generate_test_pairs(
      self,
      dataset: Dataset,
      prediction_length: int,
      windows: int = 1,
      distance: Optional[int] = None,
      max_history: Optional[int] = None,
  ) -> Generator[Tuple[DataEntry, DataEntry], None, None]:
      if distance is None:
          distance = prediction_length
  
      for entry in dataset:
          for window in range(windows):
              offset = window * distance
              test = self.test_pair(
                  entry,
                  prediction_length=prediction_length,
                  offset=offset,
              )
  
              if max_history is not None:
                  yield slice_data_entry(
                      test[0], slice(-max_history, None)
                  ), test[1]
              else:
                  yield test[0], test[1]
  
imports: from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from typing import Generator, Optional, Tuple
  import pandas
  from gluonts.dataset import Dataset, DataEntry
  from gluonts.dataset.field_names import FieldName
label_desc: Use image node_id 5 for calling the AbstractBaseSplitter obj's underlying member method code with example usage: obj.generate_test_pairs(dataset, prediction_length, windows, distance, max_history) without return types