





import json
import os
from pathlib import Path

import pytest

from datasets.download.download_config import DownloadConfig
from datasets.download.download_manager import DownloadManager
from datasets.utils.file_utils import hash_url_to_filename


lowerCAmelCase_    =				'''http://www.mocksite.com/file1.txt'''
lowerCAmelCase_    =				'''"text": ["foo", "foo"]'''
lowerCAmelCase_    =				'''6d8ce9aa78a471c7477201efbeabd3bb01ac2e7d100a6dc024ba1608361f90a8'''



class 					__lowerCAmelCase       :
			lowerCamelCase_     :     int       			=      200
			lowerCamelCase_     :     str       			=      {'''Content-Length''': '''100'''}
			lowerCamelCase_     :     Dict       			=      {}






			def 			lowerCamelCase  (self					,							**__magic_name__    )     ->   str:


							'''simple docstring'''



							return [bytes(__magic_name__					,							'''utf-8'''    )]






def      lowerCamelCase_						(				*_UpperCamelCase ,				**_UpperCamelCase )		->						Union[str, Any]:






				"""simple docstring"""


				return MockResponse()






@pytest.mark.parametrize('''urls_type''' ,				[str, list, dict] )
def      lowerCamelCase_						(				_UpperCamelCase ,				_UpperCamelCase ,				_UpperCamelCase )		->						Optional[int]:






				"""simple docstring"""


				import requests

				monkeypatch.setattr(_UpperCamelCase ,				'''request''' ,				_UpperCamelCase )

				snake_case_						:    Tuple				=  URL
				if issubclass(_UpperCamelCase ,				_UpperCamelCase ):
								snake_case_						:    Union[str, Any]				=  url
				elif issubclass(_UpperCamelCase ,				_UpperCamelCase ):
								snake_case_						:    Union[str, Any]				=  [url]
				elif issubclass(_UpperCamelCase ,				_UpperCamelCase ):
								snake_case_						:    Dict				=  {'''train''': url}
				snake_case_						:    Union[str, Any]				=  '''dummy'''
				snake_case_						:    int				=  '''downloads'''
				snake_case_						:    Optional[Any]				=  tmp_path
				snake_case_						:    int				=  DownloadConfig(
				    cache_dir=os.path.join(_UpperCamelCase ,				_UpperCamelCase ) ,				use_etag=_UpperCamelCase ,				)
				snake_case_						:    Union[str, Any]				=  DownloadManager(dataset_name=_UpperCamelCase ,				download_config=_UpperCamelCase )
				snake_case_						:    int				=  dl_manager.download(_UpperCamelCase )
				snake_case_						:    int				=  urls
				for downloaded_paths in [downloaded_paths]:
								if isinstance(_UpperCamelCase ,				_UpperCamelCase ):
												snake_case_						:    Union[str, Any]				=  [downloaded_paths]
												snake_case_						:    int				=  [urls]
								elif isinstance(_UpperCamelCase ,				_UpperCamelCase ):
												assert "train" in downloaded_paths.keys()
												snake_case_						:    List[str]				=  downloaded_paths.values()
												snake_case_						:    Any				=  urls.values()
								assert downloaded_paths
								for downloaded_path, input_url in zip(_UpperCamelCase ,				_UpperCamelCase ):
												assert downloaded_path == dl_manager.downloaded_paths[input_url]
												snake_case_						:    str				=  Path(_UpperCamelCase )
												snake_case_						:    List[Any]				=  downloaded_path.parts
												assert parts[-1] == HASH
												assert parts[-2] == cache_subdir
												assert downloaded_path.exists()
												snake_case_						:    Optional[int]				=  downloaded_path.read_text()
												assert content == CONTENT
												snake_case_						:    Optional[Any]				=  downloaded_path.with_suffix('''.json''' )
												assert metadata_downloaded_path.exists()
												snake_case_						:    Union[str, Any]				=  json.loads(metadata_downloaded_path.read_text() )
												assert metadata_content == {"url": URL, "etag": None}






@pytest.mark.parametrize('''paths_type''' ,				[str, list, dict] )
def      lowerCamelCase_						(				_UpperCamelCase ,				_UpperCamelCase ,				_UpperCamelCase )		->						Any:






				"""simple docstring"""


				snake_case_						:    List[Any]				=  str(_UpperCamelCase )
				if issubclass(_UpperCamelCase ,				_UpperCamelCase ):
								snake_case_						:    str				=  filename
				elif issubclass(_UpperCamelCase ,				_UpperCamelCase ):
								snake_case_						:    List[str]				=  [filename]
				elif issubclass(_UpperCamelCase ,				_UpperCamelCase ):
								snake_case_						:    Optional[Any]				=  {'''train''': filename}
				snake_case_						:    Optional[int]				=  '''dummy'''
				snake_case_						:    Optional[Any]				=  xz_file.parent
				snake_case_						:    List[str]				=  '''extracted'''
				snake_case_						:    str				=  DownloadConfig(
				    cache_dir=_UpperCamelCase ,				use_etag=_UpperCamelCase ,				)
				snake_case_						:    str				=  DownloadManager(dataset_name=_UpperCamelCase ,				download_config=_UpperCamelCase )
				snake_case_						:    Union[str, Any]				=  dl_manager.extract(_UpperCamelCase )
				snake_case_						:    List[Any]				=  paths
				for extracted_paths in [extracted_paths]:
								if isinstance(_UpperCamelCase ,				_UpperCamelCase ):
												snake_case_						:    Tuple				=  [extracted_paths]
												snake_case_						:    str				=  [paths]
								elif isinstance(_UpperCamelCase ,				_UpperCamelCase ):
												assert "train" in extracted_paths.keys()
												snake_case_						:    List[Any]				=  extracted_paths.values()
												snake_case_						:    Union[str, Any]				=  paths.values()
								assert extracted_paths
								for extracted_path, input_path in zip(_UpperCamelCase ,				_UpperCamelCase ):
												assert extracted_path == dl_manager.extracted_paths[input_path]
												snake_case_						:    List[str]				=  Path(_UpperCamelCase )
												snake_case_						:    int				=  extracted_path.parts
												assert parts[-1] == hash_url_to_filename(_UpperCamelCase ,				etag=_UpperCamelCase )
												assert parts[-2] == extracted_subdir
												assert extracted_path.exists()
												snake_case_						:    Tuple				=  extracted_path.read_text()
												snake_case_						:    Optional[int]				=  text_file.read_text()
												assert extracted_file_content == expected_file_content






def      lowerCamelCase_						(				_UpperCamelCase ,				_UpperCamelCase )		->						List[str]:






				"""simple docstring"""


				assert path.endswith('''.jsonl''' )
				for num_items, line in enumerate(_UpperCamelCase ,				start=1 ):
								snake_case_						:    Optional[int]				=  json.loads(line.decode('''utf-8''' ) )
								assert item.keys() == {"col_1", "col_2", "col_3"}
				assert num_items == 4






@pytest.mark.parametrize('''archive_jsonl''' ,				['''tar_jsonl_path''', '''zip_jsonl_path'''] )
def      lowerCamelCase_						(				_UpperCamelCase ,				_UpperCamelCase )		->						Union[str, Any]:






				"""simple docstring"""


				snake_case_						:    Optional[Any]				=  request.getfixturevalue(_UpperCamelCase )
				snake_case_						:    Tuple				=  DownloadManager()
				for num_jsonl, (path, file) in enumerate(dl_manager.iter_archive(_UpperCamelCase ) ,				start=1 ):
								_test_jsonl(_UpperCamelCase ,				_UpperCamelCase )
				assert num_jsonl == 2






@pytest.mark.parametrize('''archive_nested_jsonl''' ,				['''tar_nested_jsonl_path''', '''zip_nested_jsonl_path'''] )
def      lowerCamelCase_						(				_UpperCamelCase ,				_UpperCamelCase )		->						Dict:






				"""simple docstring"""


				snake_case_						:    Optional[Any]				=  request.getfixturevalue(_UpperCamelCase )
				snake_case_						:    List[Any]				=  DownloadManager()
				for num_tar, (path, file) in enumerate(dl_manager.iter_archive(_UpperCamelCase ) ,				start=1 ):
								for num_jsonl, (subpath, subfile) in enumerate(dl_manager.iter_archive(_UpperCamelCase ) ,				start=1 ):
												_test_jsonl(_UpperCamelCase ,				_UpperCamelCase )
				assert num_tar == 1
				assert num_jsonl == 2






def      lowerCamelCase_						(				_UpperCamelCase )		->						int:






				"""simple docstring"""


				snake_case_						:    List[Any]				=  DownloadManager()
				for num_file, file in enumerate(dl_manager.iter_files(_UpperCamelCase ) ,				start=1 ):
								assert os.path.basename(_UpperCamelCase ) == ("test.txt" if num_file == 1 else "train.txt")
				assert num_file == 2







from math import factorial

lowerCAmelCase_    =				{str(digit): factorial(digit) for digit in range(1_0)}






def      lowerCamelCase_						(				_UpperCamelCase )		->						int:






				"""simple docstring"""


				if not isinstance(_UpperCamelCase ,				_UpperCamelCase ):
								raise TypeError('''Parameter number must be int''' )

				if number < 0:
								raise ValueError('''Parameter number must be greater than or equal to 0''' )

				# Converts number in string to iterate on its digits and adds its factorial.
				return sum(DIGIT_FACTORIAL[digit] for digit in str(_UpperCamelCase ) )






def      lowerCamelCase_						(				_UpperCamelCase = 60 ,				_UpperCamelCase = 1_000_000 )		->						int:






				"""simple docstring"""


				if not isinstance(_UpperCamelCase ,				_UpperCamelCase ) or not isinstance(_UpperCamelCase ,				_UpperCamelCase ):
								raise TypeError('''Parameters chain_length and number_limit must be int''' )

				if chain_length <= 0 or number_limit <= 0:
								raise ValueError(
								    '''Parameters chain_length and number_limit must be greater than 0''' )

				# the counter for the chains with the exact desired length
				snake_case_						:    Optional[Any]				=  0
				# the cached sizes of the previous chains
				snake_case_						:    dict[int, int]				=  {}

				for start_chain_element in range(1 ,				_UpperCamelCase ):
								# The temporary set will contain the elements of the chain
								snake_case_						:    List[str]				=  set()
								snake_case_						:    List[Any]				=  0

								# Stop computing the chain when you find a cached size, a repeating item or the
								# length is greater then the desired one.
								snake_case_						:    Any				=  start_chain_element
								while (
								    chain_element not in chain_sets_lengths
								    and chain_element not in chain_set
								    and chain_set_length <= chain_length
								):
												chain_set.add(_UpperCamelCase )
												chain_set_length += 1
												snake_case_						:    List[Any]				=  digit_factorial_sum(_UpperCamelCase )

								if chain_element in chain_sets_lengths:
												chain_set_length += chain_sets_lengths[chain_element]

								snake_case_						:    List[str]				=  chain_set_length

								# If chain contains the exact amount of elements increase the counter
								if chain_set_length == chain_length:
												chains_counter += 1

				return chains_counter


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	print(F'''{solution()}''')
