


'''simple docstring'''





from typing import List, Optional, TypeVar

from .arrow_dataset import Dataset, _concatenate_map_style_datasets, _interleave_map_style_datasets
from .dataset_dict import DatasetDict, IterableDatasetDict
from .info import DatasetInfo
from .iterable_dataset import IterableDataset, _concatenate_iterable_datasets, _interleave_iterable_datasets
from .splits import NamedSplit
from .utils import logging
from .utils.py_utils import Literal


__lowerCamelCase												=						logging.get_logger(__name__)


__lowerCamelCase												=						TypeVar('''DatasetType''', Dataset, IterableDataset)


def        a__     (					UpperCamelCase_						:      List[DatasetType],   UpperCamelCase_						:      Optional[List[float]] = None,   UpperCamelCase_						:      Optional[int] = None,   UpperCamelCase_						:      Optional[DatasetInfo] = None,   UpperCamelCase_						:      Optional[NamedSplit] = None,   UpperCamelCase_						:      Literal["first_exhausted", "all_exhausted"] = "first_exhausted",   ):
   from .arrow_dataset import Dataset
   from .iterable_dataset import IterableDataset

   if not datasets:
      raise ValueError('''Unable to interleave an empty list of datasets.'''						)
   for i, dataset in enumerate(UpperCamelCase_						):
      if not isinstance(UpperCamelCase_,   (Dataset, IterableDataset)						):
         if isinstance(UpperCamelCase_,   (DatasetDict, IterableDatasetDict)						):
            if not dataset:
               raise ValueError(
                   F'''Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} '''
                   '''is an empty dataset dictionary.'''						)
            raise ValueError(
                F'''Dataset at position {i} has at least one split: {list(UpperCamelCase_						)}\n'''
                F'''Please pick one to interleave with the other datasets, for example: dataset[\'{next(iter(UpperCamelCase_						)						)}\']'''						)
         raise ValueError(
             F'''Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} is a {type(UpperCamelCase_						).__name__}.'''						)
      if i == 0:
         UpperCAmelCase__   ,						UpperCAmelCase__	:Tuple      =      (
             (Dataset, IterableDataset) if isinstance(UpperCamelCase_,   UpperCamelCase_						) else (IterableDataset, Dataset)
         )
      elif not isinstance(UpperCamelCase_,   UpperCamelCase_						):
         raise ValueError(
             F'''Unable to interleave a {dataset_type.__name__} (at position 0) with a {other_type.__name__} (at position {i}). Expected a list of Dataset objects or a list of IterableDataset objects.'''						)
   if stopping_strategy not in ["first_exhausted", "all_exhausted"]:
      raise ValueError(F'''{stopping_strategy} is not supported. Please enter a valid stopping_strategy.'''						)
   if dataset_type is Dataset:
      return _interleave_map_style_datasets(
          UpperCamelCase_,   UpperCamelCase_,   UpperCamelCase_,   info=UpperCamelCase_,   split=UpperCamelCase_,   stopping_strategy=UpperCamelCase_						)
   else:
      return _interleave_iterable_datasets(
          UpperCamelCase_,   UpperCamelCase_,   UpperCamelCase_,   info=UpperCamelCase_,   split=UpperCamelCase_,   stopping_strategy=UpperCamelCase_						)


def        a__     (					UpperCamelCase_						:      List[DatasetType],   UpperCamelCase_						:      Optional[DatasetInfo] = None,   UpperCamelCase_						:      Optional[NamedSplit] = None,   UpperCamelCase_						:      int = 0,   ):

   if not dsets:
      raise ValueError('''Unable to concatenate an empty list of datasets.'''						)
   for i, dataset in enumerate(UpperCamelCase_						):
      if not isinstance(UpperCamelCase_,   (Dataset, IterableDataset)						):
         if isinstance(UpperCamelCase_,   (DatasetDict, IterableDatasetDict)						):
            if not dataset:
               raise ValueError(
                   F'''Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} '''
                   '''is an empty dataset dictionary.'''						)
            raise ValueError(
                F'''Dataset at position {i} has at least one split: {list(UpperCamelCase_						)}\n'''
                F'''Please pick one to interleave with the other datasets, for example: dataset[\'{next(iter(UpperCamelCase_						)						)}\']'''						)
         raise ValueError(
             F'''Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} is a {type(UpperCamelCase_						).__name__}.'''						)
      if i == 0:
         UpperCAmelCase__   ,						UpperCAmelCase__	:int      =      (
             (Dataset, IterableDataset) if isinstance(UpperCamelCase_,   UpperCamelCase_						) else (IterableDataset, Dataset)
         )
      elif not isinstance(UpperCamelCase_,   UpperCamelCase_						):
         raise ValueError(
             F'''Unable to interleave a {dataset_type.__name__} (at position 0) with a {other_type.__name__} (at position {i}). Expected a list of Dataset objects or a list of IterableDataset objects.'''						)
   if dataset_type is Dataset:
      return _concatenate_map_style_datasets(UpperCamelCase_,   info=UpperCamelCase_,   split=UpperCamelCase_,   axis=UpperCamelCase_						)
   else:
      return _concatenate_iterable_datasets(UpperCamelCase_,   info=UpperCamelCase_,   split=UpperCamelCase_,   axis=UpperCamelCase_						)







'''simple docstring'''





from .glue import GlueDataset, GlueDataTrainingArguments
from .language_modeling import (
    LineByLineTextDataset,
    LineByLineWithRefDataset,
    LineByLineWithSOPTextDataset,
    TextDataset,
    TextDatasetForNextSentencePrediction,
)
from .squad import SquadDataset, SquadDataTrainingArguments



