






'''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


UpperCamelCase__			=      logging.get_logger(__name__)


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




def 		__SCREAMING_SNAKE_CASE       (	_UpperCamelCase    ,		_UpperCamelCase = None    ,		_UpperCamelCase = None    ,		_UpperCamelCase = None    ,		_UpperCamelCase = None    ,		_UpperCamelCase = "first_exhausted"    ,		):


   """simple docstring"""




   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:
         lowercase_     ,		lowercase_						:     str							     =  (
             (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 		__SCREAMING_SNAKE_CASE       (	_UpperCamelCase    ,		_UpperCamelCase = None    ,		_UpperCamelCase = None    ,		_UpperCamelCase = 0    ,		):


   """simple docstring"""




   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:
         lowercase_     ,		lowercase_						:     Optional[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'''
def 		__SCREAMING_SNAKE_CASE       (	_UpperCamelCase = 100				):


   """simple docstring"""




   lowercase_						:     Dict							     =  n * (n + 1) * (2 * n + 1) / 6
   lowercase_						:     int							     =  (n * (n + 1) / 2) ** 2
   return int(square_of_sum - sum_of_squares				)


if __name__ == "__main__":
 print(f"""{solution() = }""")




