





'''simple docstring'''

from abc import ABC, abstractmethod
from typing import Optional, Union

from .. import Dataset, DatasetDict, Features, IterableDataset, IterableDatasetDict, NamedSplit
from ..utils.typing import NestedDataStructureLike, PathLike







class __a			( _snake_case      ):





   def __init__(       self					:      Optional[int]					,lowerCamelCase					:      Optional[NestedDataStructureLike[PathLike]] = None					,lowerCamelCase					:      Optional[NamedSplit] = None					,lowerCamelCase					:      Optional[Features] = None					,lowerCamelCase					:      str = None					,lowerCamelCase					:      bool = False					,lowerCamelCase					:      bool = False					,lowerCamelCase					:      Optional[int] = None					,**lowerCamelCase					:      Optional[int]					,):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							path_or_paths
      __SCREAMING_SNAKE_CASE   				=							split if split or isinstance(lowerCamelCase					,lowerCamelCase     ) else """train"""
      __SCREAMING_SNAKE_CASE   				=							features
      __SCREAMING_SNAKE_CASE   				=							cache_dir
      __SCREAMING_SNAKE_CASE   				=							keep_in_memory
      __SCREAMING_SNAKE_CASE   				=							streaming
      __SCREAMING_SNAKE_CASE   				=							num_proc
      __SCREAMING_SNAKE_CASE   				=							kwargs





   @abstractmethod
   def   UpperCAmelCase__  (       self					:      int     ):

      '''simple docstring'''

      pass







class __a			( _snake_case      ):





   def __init__(       self					:      Tuple					,lowerCamelCase					:      Optional[Features] = None					,lowerCamelCase					:      str = None					,lowerCamelCase					:      bool = False					,lowerCamelCase					:      bool = False					,lowerCamelCase					:      Optional[int] = None					,**lowerCamelCase					:      Optional[int]					,):

      '''simple docstring'''

      __SCREAMING_SNAKE_CASE   				=							features
      __SCREAMING_SNAKE_CASE   				=							cache_dir
      __SCREAMING_SNAKE_CASE   				=							keep_in_memory
      __SCREAMING_SNAKE_CASE   				=							streaming
      __SCREAMING_SNAKE_CASE   				=							num_proc
      __SCREAMING_SNAKE_CASE   				=							kwargs





   @abstractmethod
   def   UpperCAmelCase__  (       self					:      str     ):

      '''simple docstring'''

      pass






'''simple docstring'''




from functools import lru_cache






@lru_cache
def 							snake_case__				(     _A:   int					)       ->      int:

		'''simple docstring'''


		if num < 0:
				raise ValueError("""Number should not be negative."""					)

		return 1 if num in (0, 1) else num * factorial(num - 1					)


if __name__ == "__main__":
						import doctest

						doctest.testmod()




