






import os
from pathlib import Path
from unittest.mock import patch

import pytest
import zstandard as zstd

from datasets.download.download_config import DownloadConfig
from datasets.utils.file_utils import (
    OfflineModeIsEnabled,
    cached_path,
    fsspec_get,
    fsspec_head,
    ftp_get,
    ftp_head,
    get_from_cache,
    http_get,
    http_head,
)


A        =			'\\n    Text data.\n    Second line of data.'

A        =			'file'



@pytest.fixture(scope='session'      )
def 					_lowerCamelCase(			lowerCAmelCase__				:		int      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	Dict													=   tmp_path_factory.mktemp('data'      ) / (FILE_PATH + '.zstd')
				SCREAMING_SNAKE_CASE_   :	Optional[int]													=   bytes(lowerCAmelCase__    ,    'utf-8'      )
				with zstd.open(lowerCAmelCase__    ,    'wb'      ) as f:
								f.write(lowerCAmelCase__      )
				return path



@pytest.fixture
def 					_lowerCamelCase(			lowerCAmelCase__				:		Optional[int]      ):





				'''simple docstring'''







				with open(os.path.join(tmpfs.local_root_dir    ,    lowerCAmelCase__      )    ,    'w'      ) as f:
								f.write(lowerCAmelCase__      )
				return FILE_PATH



@pytest.mark.parametrize('compression_format'    ,    ['gzip', 'xz', 'zstd']      )
def 					_lowerCamelCase(			lowerCAmelCase__				:		Any    ,    lowerCAmelCase__				:		Union[str, Any]    ,    lowerCAmelCase__				:		Any    ,    lowerCAmelCase__				:		Any    ,    lowerCAmelCase__				:		Optional[int]    ,    lowerCAmelCase__				:		int      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	int													=   {'gzip': gz_file, 'xz': xz_file, 'zstd': zstd_path}
				SCREAMING_SNAKE_CASE_   :	Tuple													=   input_paths[compression_format]
				SCREAMING_SNAKE_CASE_   :	int													=   tmp_path / 'cache'
				SCREAMING_SNAKE_CASE_   :	List[str]													=   DownloadConfig(cache_dir=lowerCAmelCase__    ,    extract_compressed_file=lowerCAmelCase__      )
				SCREAMING_SNAKE_CASE_   :	int													=   cached_path(lowerCAmelCase__    ,    download_config=lowerCAmelCase__      )
				with open(lowerCAmelCase__      ) as f:
								SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   f.read()
				with open(lowerCAmelCase__      ) as f:
								SCREAMING_SNAKE_CASE_   :	Tuple													=   f.read()
				assert extracted_file_content == expected_file_content



@pytest.mark.parametrize('default_extracted'    ,    [True, False]      )
@pytest.mark.parametrize('default_cache_dir'    ,    [True, False]      )
def 					_lowerCamelCase(			lowerCAmelCase__				:		int    ,    lowerCAmelCase__				:		Optional[int]    ,    lowerCAmelCase__				:		Dict    ,    lowerCAmelCase__				:		Tuple    ,    lowerCAmelCase__				:		Union[str, Any]      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	List[str]													=   'custom_cache'
				SCREAMING_SNAKE_CASE_   :	List[Any]													=   'custom_extracted_dir'
				SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   tmp_path / 'custom_extracted_path'
				if default_extracted:
								SCREAMING_SNAKE_CASE_   :	Tuple													=   ('downloads' if default_cache_dir else custom_cache_dir, 'extracted')
				else:
								monkeypatch.setattr('datasets.config.EXTRACTED_DATASETS_DIR'    ,    lowerCAmelCase__      )
								monkeypatch.setattr('datasets.config.EXTRACTED_DATASETS_PATH'    ,    str(lowerCAmelCase__      )      )
								SCREAMING_SNAKE_CASE_   :	List[Any]													=   custom_extracted_path.parts[-2:] if default_cache_dir else (custom_cache_dir, custom_extracted_dir)

				SCREAMING_SNAKE_CASE_   :	Tuple													=   xz_file
				SCREAMING_SNAKE_CASE_   :	List[str]													=   (
				    DownloadConfig(extract_compressed_file=lowerCAmelCase__      )
				    if default_cache_dir
				    else DownloadConfig(cache_dir=tmp_path / custom_cache_dir    ,    extract_compressed_file=lowerCAmelCase__      )
				)
				SCREAMING_SNAKE_CASE_   :	List[str]													=   cached_path(lowerCAmelCase__    ,    download_config=lowerCAmelCase__      )
				assert Path(lowerCAmelCase__      ).parent.parts[-2:] == expected



def 					_lowerCamelCase(			lowerCAmelCase__				:		Any      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	Optional[int]													=   str(Path(lowerCAmelCase__      ).resolve()      )
				assert cached_path(lowerCAmelCase__      ) == text_file
				# relative path
				SCREAMING_SNAKE_CASE_   :	int													=   str(Path(lowerCAmelCase__      ).resolve().relative_to(Path(os.getcwd()      )      )      )
				assert cached_path(lowerCAmelCase__      ) == text_file



def 					_lowerCamelCase(			lowerCAmelCase__				:		Optional[Any]      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	int													=   str(tmp_path.resolve() / '__missing_file__.txt'      )
				with pytest.raises(lowerCAmelCase__      ):
								cached_path(lowerCAmelCase__      )
				# relative path
				SCREAMING_SNAKE_CASE_   :	int													=   './__missing_file__.txt'
				with pytest.raises(lowerCAmelCase__      ):
								cached_path(lowerCAmelCase__      )



def 					_lowerCamelCase(			lowerCAmelCase__				:		Optional[int]      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	Union[str, Any]													=   get_from_cache(F'''tmp://{tmpfs_file}'''      )
				with open(lowerCAmelCase__      ) as f:
								SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   f.read()
				assert output_file_content == FILE_CONTENT



@patch('datasets.config.HF_DATASETS_OFFLINE'    ,    lowerCAmelCase__      )
def 					_lowerCamelCase(			):





				'''simple docstring'''







				with pytest.raises(lowerCAmelCase__      ):
								cached_path('https://huggingface.co'      )



@patch('datasets.config.HF_DATASETS_OFFLINE'    ,    lowerCAmelCase__      )
def 					_lowerCamelCase(			lowerCAmelCase__				:		List[str]      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	Optional[int]													=   tmp_path_factory.mktemp('data'      ) / 'file.html'
				with pytest.raises(lowerCAmelCase__      ):
								http_get('https://huggingface.co'    ,    temp_file=lowerCAmelCase__      )
				with pytest.raises(lowerCAmelCase__      ):
								http_head('https://huggingface.co'      )



@patch('datasets.config.HF_DATASETS_OFFLINE'    ,    lowerCAmelCase__      )
def 					_lowerCamelCase(			lowerCAmelCase__				:		Dict      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	List[Any]													=   tmp_path_factory.mktemp('data'      ) / 'file.html'
				with pytest.raises(lowerCAmelCase__      ):
								ftp_get('ftp://huggingface.co'    ,    temp_file=lowerCAmelCase__      )
				with pytest.raises(lowerCAmelCase__      ):
								ftp_head('ftp://huggingface.co'      )



@patch('datasets.config.HF_DATASETS_OFFLINE'    ,    lowerCAmelCase__      )
def 					_lowerCamelCase(			lowerCAmelCase__				:		Dict      ):





				'''simple docstring'''







				SCREAMING_SNAKE_CASE_   :	str													=   tmp_path_factory.mktemp('data'      ) / 'file.html'
				with pytest.raises(lowerCAmelCase__      ):
								fsspec_get('s3://huggingface.co'    ,    temp_file=lowerCAmelCase__      )
				with pytest.raises(lowerCAmelCase__      ):
								fsspec_head('s3://huggingface.co'      )







import copy
from dataclasses import dataclass
from pathlib import Path
from typing import Dict, Optional, Union


@dataclass
class 							__a							:





		'''simple docstring'''



		UpperCAmelCase__      :				Optional[Union[str, Path]]				    =						None
		UpperCAmelCase__      :				bool				    =						False
		UpperCAmelCase__      :				bool				    =						False
		UpperCAmelCase__      :				bool				    =						False
		UpperCAmelCase__      :				Optional[Dict]				    =						None
		UpperCAmelCase__      :				Optional[str]				    =						None
		UpperCAmelCase__      :				bool				    =						False
		UpperCAmelCase__      :				bool				    =						False
		UpperCAmelCase__      :				bool				    =						False
		UpperCAmelCase__      :				bool				    =						True
		UpperCAmelCase__      :				Optional[int]				    =						None
		UpperCAmelCase__      :				int				    =						1
		UpperCAmelCase__      :				Optional[Union[str, bool]]				    =						None
		UpperCAmelCase__      :				bool				    =						False
		UpperCAmelCase__      :				Optional[Dict]				    =						None
		UpperCAmelCase__      :				Optional[str]				    =						None


		def   __snake_case			(						self       ):
						return self.__class__(**{k: copy.deepcopy(UpperCamelCase__       ) for k, v in self.__dict__.items()}       )