
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


__snake_case				      =    logging.get_logger(__name__)


__snake_case				      =    TypeVar("""DatasetType""", Dataset, IterableDataset)






def 				_lowercase				(	UpperCamelCase_      ,      UpperCamelCase_ = None      ,      UpperCamelCase_ = None      ,      UpperCamelCase_ = None      ,      UpperCamelCase_ = None      ,      UpperCamelCase_ = "first_exhausted"      ,      )						->						Tuple:
					'''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(a__						):
										if not isinstance(a__      ,      (Dataset, IterableDataset)						):
															if isinstance(a__      ,      (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(a__						)}\n'
																				    F'Please pick one to interleave with the other datasets, for example: dataset[\'{next(iter(a__						)						)}\']'						)
															raise ValueError(
															    F'Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} is a {type(a__						).__name__}.'						)
										if i == 0:
															SCREAMING_SNAKE_CASE__						=					(
															    (Dataset, IterableDataset) if isinstance(a__      ,      a__						) else (IterableDataset, Dataset)
															)
										elif not isinstance(a__      ,      a__						):
															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(
										    a__      ,      a__      ,      a__      ,      info=a__      ,      split=a__      ,      stopping_strategy=a__						)
					else:
										return _interleave_iterable_datasets(
										    a__      ,      a__      ,      a__      ,      info=a__      ,      split=a__      ,      stopping_strategy=a__						)






def 				_lowercase				(	UpperCamelCase_      ,      UpperCamelCase_ = None      ,      UpperCamelCase_ = None      ,      UpperCamelCase_ = 0      ,      )						->						List[str]:
					'''simple docstring'''


					if not dsets:
										raise ValueError('Unable to concatenate an empty list of datasets.'						)
					for i, dataset in enumerate(a__						):
										if not isinstance(a__      ,      (Dataset, IterableDataset)						):
															if isinstance(a__      ,      (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(a__						)}\n'
																				    F'Please pick one to interleave with the other datasets, for example: dataset[\'{next(iter(a__						)						)}\']'						)
															raise ValueError(
															    F'Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} is a {type(a__						).__name__}.'						)
										if i == 0:
															SCREAMING_SNAKE_CASE__						=					(
															    (Dataset, IterableDataset) if isinstance(a__      ,      a__						) else (IterableDataset, Dataset)
															)
										elif not isinstance(a__      ,      a__						):
															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(a__      ,      info=a__      ,      split=a__      ,      axis=a__						)
					else:
										return _concatenate_iterable_datasets(a__      ,      info=a__      ,      split=a__      ,      axis=a__						)













"""simple docstring"""


from math import loga


def        UpperCAmelCase      (					a__ ):





						'''simple docstring'''






						if a < 0:
												raise ValueError('Input value must be a positive integer' )
						elif isinstance(a__     ,      a__ ):
												raise TypeError('Input value must be a \'int\' type' )
						return 0 if (a == 0) else int(loga(a & -a ) )


if __name__ == "__main__":
		import doctest

		doctest.testmod()