


"""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			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		)    ->     Tuple:
   '''simple docstring'''





   _lowerCamelCase   :				Tuple							=     {
       "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   :				Any							=     input_paths_and_base_extractors[compression_format]
   if input_path is None:
      _lowerCamelCase   :				Any							=     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(_lowerCamelCase       )
   assert base_extractor.is_extractable(_lowerCamelCase       )
   _lowerCamelCase   :				Tuple							=     tmp_path / ("extracted" if is_archive else "extracted.txt")
   base_extractor.extract(_lowerCamelCase			,		_lowerCamelCase       )
   if is_archive:
      assert output_path.is_dir()
      for file_path in output_path.iterdir():
         assert file_path.name == text_file.name
         _lowerCamelCase   :				Union[str, Any]							=     file_path.read_text(encoding="utf-8"       )
   else:
      _lowerCamelCase   :				Any							=     output_path.read_text(encoding="utf-8"       )
   _lowerCamelCase   :				Optional[int]							=     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			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		)    ->     str:
   '''simple docstring'''





   _lowerCamelCase   :				str							=     {
       "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   :				List[Any]							=     input_paths[compression_format]
   if input_path is None:
      _lowerCamelCase   :				List[str]							=     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(_lowerCamelCase       )
   _lowerCamelCase   :				Tuple							=     Extractor.infer_extractor_format(_lowerCamelCase       )
   assert extractor_format is not None
   _lowerCamelCase   :				int							=     tmp_path / ("extracted" if is_archive else "extracted.txt")
   Extractor.extract(_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase       )
   if is_archive:
      assert output_path.is_dir()
      for file_path in output_path.iterdir():
         assert file_path.name == text_file.name
         _lowerCamelCase   :				str							=     file_path.read_text(encoding="utf-8"       )
   else:
      _lowerCamelCase   :				Dict							=     output_path.read_text(encoding="utf-8"       )
   _lowerCamelCase   :				Union[str, Any]							=     text_file.read_text(encoding="utf-8"       )
   assert extracted_file_content == expected_file_content







@pytest.fixture
def        lowerCamelCase_(		_lowerCamelCase			,		_lowerCamelCase       )    ->     List[str]:
   '''simple docstring'''





   import tarfile

   _lowerCamelCase   :				Optional[Any]							=     tmp_path / "data_dot_dot"
   directory.mkdir()
   _lowerCamelCase   :				Optional[int]							=     directory / "tar_file_with_dot_dot.tar"
   with tarfile.TarFile(_lowerCamelCase			,		"w"       ) as f:
      f.add(_lowerCamelCase			,		arcname=os.path.join(".."			,		text_file.name       )       )
   return path







@pytest.fixture
def        lowerCamelCase_(		_lowerCamelCase       )    ->     Union[str, Any]:
   '''simple docstring'''





   import tarfile

   _lowerCamelCase   :				Optional[Any]							=     tmp_path / "data_sym_link"
   directory.mkdir()
   _lowerCamelCase   :				List[Any]							=     directory / "tar_file_with_sym_link.tar"
   os.symlink(".."			,		directory / "subdir"			,		target_is_directory=_lowerCamelCase       )
   with tarfile.TarFile(_lowerCamelCase			,		"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			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase			,		_lowerCamelCase       )    ->     Dict:
   '''simple docstring'''





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







def        lowerCamelCase_(		_lowerCamelCase       )    ->     int:
   '''simple docstring'''





   _lowerCamelCase   :				Dict							=     tmpdir / "not_a_zip_file"
   # From: https://github.com/python/cpython/pull/5053
   _lowerCamelCase   :				Dict							=     (
       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(_lowerCamelCase       )
   assert zipfile.is_zipfile(str(_lowerCamelCase       )       )  # is a false positive for `zipfile`
   assert not ZipExtractor.is_extractable(_lowerCamelCase       )  # but we're right




import math





def 		a__      (		_UpperCamelCase      :			float			,_UpperCamelCase      :			float				):
   if (
       not isinstance(_UpperCamelCase			,(int, float)				)
       or power_factor < -1
       or power_factor > 1
   ):
      raise ValueError('''power_factor must be a valid float value between -1 and 1.'''				)
   return apparent_power * power_factor





def 		a__      (		_UpperCamelCase      :			float			,_UpperCamelCase      :			float				):
   if (
       not isinstance(_UpperCamelCase			,(int, float)				)
       or power_factor < -1
       or power_factor > 1
   ):
      raise ValueError('''power_factor must be a valid float value between -1 and 1.'''				)
   return apparent_power * math.sqrt(1 - power_factor**2				)


if __name__ == "__main__":
  import doctest

  doctest.testmod()






