





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_					:					List[str]	      =				{'''Content-Length''': '''100'''}
			lowerCamelCase_					:					str	      =				{}






			def       lowerCamelCase  (self ,							**__magic_name__   )					->       Optional[int]:


							'''simple docstring'''



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






def 					lowerCamelCase_						(    *_UpperCamelCase			,    **_UpperCamelCase			)		->						int:






				"""simple docstring"""


				return MockResponse()






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






				"""simple docstring"""


				import requests

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

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






				"""simple docstring"""


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






def 					lowerCamelCase_						(    _UpperCamelCase			,    _UpperCamelCase			)		->						Optional[Any]:






				"""simple docstring"""


				assert path.endswith('''.jsonl'''			)
				for num_items, line in enumerate(_UpperCamelCase			,    start=1			):
								snake_case_						:   Union[str, Any]           =  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			)		->						Optional[int]:






				"""simple docstring"""


				snake_case_						:   List[str]           =  request.getfixturevalue(_UpperCamelCase			)
				snake_case_						:   List[Any]           =  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			)		->						Union[str, Any]:






				"""simple docstring"""


				snake_case_						:   Any           =  request.getfixturevalue(_UpperCamelCase			)
				snake_case_						:   List[str]           =  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			)		->						List[str]:






				"""simple docstring"""


				snake_case_						:   str           =  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







def 					lowerCamelCase_						(    _UpperCamelCase			)		->						int:






				"""simple docstring"""


				if not isinstance(_UpperCamelCase			,    _UpperCamelCase			):
								raise ValueError('''multiplicative_persistence() only accepts integral values'''			)
				if num < 0:
								raise ValueError('''multiplicative_persistence() does not accept negative values'''			)

				snake_case_						:   List[Any]           =  0
				snake_case_						:   Tuple           =  str(_UpperCamelCase			)

				while len(_UpperCamelCase			) != 1:
								snake_case_						:   Tuple           =  [int(_UpperCamelCase			) for i in num_string]

								snake_case_						:   Dict           =  1
								for i in range(0			,    len(_UpperCamelCase			)			):
												total *= numbers[i]

								snake_case_						:   str           =  str(_UpperCamelCase			)

								steps += 1
				return steps






def 					lowerCamelCase_						(    _UpperCamelCase			)		->						int:






				"""simple docstring"""


				if not isinstance(_UpperCamelCase			,    _UpperCamelCase			):
								raise ValueError('''additive_persistence() only accepts integral values'''			)
				if num < 0:
								raise ValueError('''additive_persistence() does not accept negative values'''			)

				snake_case_						:   Any           =  0
				snake_case_						:   Tuple           =  str(_UpperCamelCase			)

				while len(_UpperCamelCase			) != 1:
								snake_case_						:   List[str]           =  [int(_UpperCamelCase			) for i in num_string]

								snake_case_						:   Optional[int]           =  0
								for i in range(0			,    len(_UpperCamelCase			)			):
												total += numbers[i]

								snake_case_						:   Tuple           =  str(_UpperCamelCase			)

								steps += 1
				return steps


if __name__ == "__main__":
	import doctest

	doctest.testmod()
