


'''simple docstring'''



import os
import zipfile

import pytest

from datasets.utils.extract import (
    BzipaExtractor,
    Extractor,
    GzipExtractor,
    LzaExtractor,
    SevenZipExtractor,
    TarExtractor,
    XzExtractor,
    ZipExtractor,
    ZstdExtractor,
)

from .utils import require_lza, require_pyazr, require_zstandard



@pytest.mark.parametrize(
    "compression_format, is_archive"				,		[
        ("7z", True),
        ("bz2", False),
        ("gzip", False),
        ("lz4", False),
        ("tar", True),
        ("xz", False),
        ("zip", True),
        ("zstd", False),
    ]				,		)
def   __lowerCAmelCase					(							lowerCamelCase   :						List[str]				,		lowerCamelCase   :						Tuple				,		lowerCamelCase   :						Optional[Any]				,		lowerCamelCase   :						Optional[Any]				,		lowerCamelCase   :						Union[str, Any]				,		lowerCamelCase   :						str				,		lowerCamelCase   :						List[str]				,		lowerCamelCase   :						Tuple				,		lowerCamelCase   :						Any				,		lowerCamelCase   :						int				,		lowerCamelCase   :						str				,		lowerCamelCase   :						Dict				,		):






	'''simple docstring'''




	__lowerCAmelCase												=  {
	    "7z": (seven_zip_file, SevenZipExtractor),
	    "bz2": (bza_file, BzipaExtractor),
	    "gzip": (gz_file, GzipExtractor),
	    "lz4": (lza_file, LzaExtractor),
	    "tar": (tar_file, TarExtractor),
	    "xz": (xz_file, XzExtractor),
	    "zip": (zip_file, ZipExtractor),
	    "zstd": (zstd_file, ZstdExtractor),
	}
	__lowerCAmelCase							,       __lowerCAmelCase												=  input_paths_and_base_extractors[compression_format]
	if input_path is None:
		__lowerCAmelCase												=  f'''for \'{compression_format}\' compression_format, '''
		if compression_format == "7z":
			reason += require_pyazr.kwargs["reason"]
		elif compression_format == "lz4":
			reason += require_lza.kwargs["reason"]
		elif compression_format == "zstd":
			reason += require_zstandard.kwargs["reason"]
		pytest.skip(a__					)
	assert base_extractor.is_extractable(a__					)
	__lowerCAmelCase												=  tmp_path / ("extracted" if is_archive else "extracted.txt")
	base_extractor.extract(a__				,		a__					)
	if is_archive:
		assert output_path.is_dir()
		for file_path in output_path.iterdir():
			assert file_path.name == text_file.name
			__lowerCAmelCase												=  file_path.read_text(encoding="utf-8"					)
	else:
		__lowerCAmelCase												=  output_path.read_text(encoding="utf-8"					)
	__lowerCAmelCase												=  text_file.read_text(encoding="utf-8"					)
	assert extracted_file_content == expected_file_content



@pytest.mark.parametrize(
    "compression_format, is_archive"				,		[
        ("7z", True),
        ("bz2", False),
        ("gzip", False),
        ("lz4", False),
        ("tar", True),
        ("xz", False),
        ("zip", True),
        ("zstd", False),
    ]				,		)
def   __lowerCAmelCase					(							lowerCamelCase   :						List[Any]				,		lowerCamelCase   :						List[Any]				,		lowerCamelCase   :						Union[str, Any]				,		lowerCamelCase   :						Optional[Any]				,		lowerCamelCase   :						List[str]				,		lowerCamelCase   :						List[Any]				,		lowerCamelCase   :						Any				,		lowerCamelCase   :						Optional[int]				,		lowerCamelCase   :						List[str]				,		lowerCamelCase   :						Union[str, Any]				,		lowerCamelCase   :						Any				,		lowerCamelCase   :						Optional[Any]				,		):






	'''simple docstring'''




	__lowerCAmelCase												=  {
	    "7z": seven_zip_file,
	    "bz2": bza_file,
	    "gzip": gz_file,
	    "lz4": lza_file,
	    "tar": tar_file,
	    "xz": xz_file,
	    "zip": zip_file,
	    "zstd": zstd_file,
	}
	__lowerCAmelCase												=  input_paths[compression_format]
	if input_path is None:
		__lowerCAmelCase												=  f'''for \'{compression_format}\' compression_format, '''
		if compression_format == "7z":
			reason += require_pyazr.kwargs["reason"]
		elif compression_format == "lz4":
			reason += require_lza.kwargs["reason"]
		elif compression_format == "zstd":
			reason += require_zstandard.kwargs["reason"]
		pytest.skip(a__					)
	__lowerCAmelCase												=  Extractor.infer_extractor_format(a__					)
	assert extractor_format is not None
	__lowerCAmelCase												=  tmp_path / ("extracted" if is_archive else "extracted.txt")
	Extractor.extract(a__				,		a__				,		a__					)
	if is_archive:
		assert output_path.is_dir()
		for file_path in output_path.iterdir():
			assert file_path.name == text_file.name
			__lowerCAmelCase												=  file_path.read_text(encoding="utf-8"					)
	else:
		__lowerCAmelCase												=  output_path.read_text(encoding="utf-8"					)
	__lowerCAmelCase												=  text_file.read_text(encoding="utf-8"					)
	assert extracted_file_content == expected_file_content



@pytest.fixture
def   __lowerCAmelCase					(							lowerCamelCase   :						Union[str, Any]				,		lowerCamelCase   :						Optional[Any]					):






	'''simple docstring'''




	import tarfile

	__lowerCAmelCase												=  tmp_path / "data_dot_dot"
	directory.mkdir()
	__lowerCAmelCase												=  directory / "tar_file_with_dot_dot.tar"
	with tarfile.TarFile(a__				,		"w"					) as f:
		f.add(a__				,		arcname=os.path.join(".."				,		text_file.name					)					)
	return path



@pytest.fixture
def   __lowerCAmelCase					(							lowerCamelCase   :						Optional[int]					):






	'''simple docstring'''




	import tarfile

	__lowerCAmelCase												=  tmp_path / "data_sym_link"
	directory.mkdir()
	__lowerCAmelCase												=  directory / "tar_file_with_sym_link.tar"
	os.symlink(".."				,		directory / "subdir"				,		target_is_directory=a__					)
	with tarfile.TarFile(a__				,		"w"					) as f:
		f.add(str(directory / "subdir"					)				,		arcname="subdir"					)  # str required by os.readlink on Windows and Python < 3.8
	return path



@pytest.mark.parametrize(
    "insecure_tar_file, error_log"				,		[("tar_file_with_dot_dot", "illegal path"), ("tar_file_with_sym_link", "Symlink")]				,		)
def   __lowerCAmelCase					(							lowerCamelCase   :						Dict				,		lowerCamelCase   :						Any				,		lowerCamelCase   :						str				,		lowerCamelCase   :						List[Any]				,		lowerCamelCase   :						Optional[Any]				,		lowerCamelCase   :						Optional[int]					):






	'''simple docstring'''




	__lowerCAmelCase												=  {
	    "tar_file_with_dot_dot": tar_file_with_dot_dot,
	    "tar_file_with_sym_link": tar_file_with_sym_link,
	}
	__lowerCAmelCase												=  insecure_tar_files[insecure_tar_file]
	__lowerCAmelCase												=  tmp_path / "extracted"
	TarExtractor.extract(a__				,		a__					)
	assert caplog.text
	for record in caplog.records:
		assert record.levelname == "ERROR"
		assert error_log in record.msg




def   __lowerCAmelCase					(							lowerCamelCase   :						Any					):






	'''simple docstring'''




	__lowerCAmelCase												=  tmpdir / "not_a_zip_file"
	# From: https://github.com/python/cpython/pull/5053
	__lowerCAmelCase												=  (
	    B"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00"
	    B"\x00\x02\x08\x06\x00\x00\x00\x99\x81\xb6'\x00\x00\x00\x15I"
	    B"DATx\x01\x01\n\x00\xf5\xff\x00PK\x05\x06\x00PK\x06\x06\x07"
	    B"\xac\x01N\xc6|a\r\x00\x00\x00\x00IEND\xaeB`\x82"
	)
	with not_a_zip_file.open("wb"					) as f:
		f.write(a__					)
	assert zipfile.is_zipfile(str(a__					)					)  # is a false positive for `zipfile`
	assert not ZipExtractor.is_extractable(a__					)  # but we're right




'''simple docstring'''



import re



def   __lowerCAmelCase					(							lowerCamelCase   :						str					):






	'''simple docstring'''




	__lowerCAmelCase												=  re.compile(
	    r"^(?:0|94|\+94|0{2}94)" r"7(0|1|2|4|5|6|7|8)" r"(-| |)" r"\d{7}$"					)

	return bool(re.search(lowerCamelCase				,		lowerCamelCase					)					)


if __name__ == "__main__":
	lowerCAmelCase	:		Optional[Any]				=   '''0094702343221'''

	print(is_sri_lankan_phone_number(phone))