'''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 _UpperCamelCase   (       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       ):
					lowercase_					:       Union[str, Any]     				=					{
					    '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),
					}
					lowercase_				,lowercase_					:       Any     				=					input_paths_and_base_extractors[compression_format]
					if input_path is None:
										lowercase_					:       Dict     				=					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__							)
					lowercase_					:       str     				=					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
															lowercase_					:       Tuple     				=					file_path.read_text(encoding='utf-8'							)
					else:
										lowercase_					:       Union[str, Any]     				=					output_path.read_text(encoding='utf-8'							)
					lowercase_					:       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 _UpperCamelCase   (       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       ):
					lowercase_					:       int     				=					{
					    '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,
					}
					lowercase_					:       Any     				=					input_paths[compression_format]
					if input_path is None:
										lowercase_					:       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(a__							)
					lowercase_					:       Dict     				=					Extractor.infer_extractor_format(a__							)
					assert extractor_format is not None
					lowercase_					:       Tuple     				=					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
															lowercase_					:       Any     				=					file_path.read_text(encoding='utf-8'							)
					else:
										lowercase_					:       Optional[int]     				=					output_path.read_text(encoding='utf-8'							)
					lowercase_					:       int     				=					text_file.read_text(encoding='utf-8'							)
					assert extracted_file_content == expected_file_content

@pytest.fixture
def _UpperCamelCase   (       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_							):
					import tarfile

					lowercase_					:       Tuple     				=					tmp_path / 'data_dot_dot'
					directory.mkdir()
					lowercase_					:       List[str]     				=					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 _UpperCamelCase   (       SCREAMING_SNAKE_CASE_							):
					import tarfile

					lowercase_					:       int     				=					tmp_path / 'data_sym_link'
					directory.mkdir()
					lowercase_					:       Any     				=					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 _UpperCamelCase   (       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_							):
					lowercase_					:       Union[str, Any]     				=					{
					    'tar_file_with_dot_dot': tar_file_with_dot_dot,
					    'tar_file_with_sym_link': tar_file_with_sym_link,
					}
					lowercase_					:       Union[str, Any]     				=					insecure_tar_files[insecure_tar_file]
					lowercase_					:       Optional[int]     				=					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 _UpperCamelCase   (       SCREAMING_SNAKE_CASE_							):
					lowercase_					:       List[Any]     				=					tmpdir / 'not_a_zip_file'
					# From: https://github.com/python/cpython/pull/5053
					lowercase_					:       Optional[Any]     				=					(
					    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 os

def _UpperCamelCase   (       SCREAMING_SNAKE_CASE_							):
     lowercase_					:       List[Any]     				=					len(grid[0]							)
     lowercase_					:       Union[str, Any]     				=					len(SCREAMING_SNAKE_CASE_							)

     lowercase_					:       Union[str, Any]     				=					0
     lowercase_					:       int     				=					0
     lowercase_					:       Union[str, Any]     				=					0

     # Check vertically, horizontally, diagonally at the same time (only works
     # for nxn grid)
     for i in range(SCREAMING_SNAKE_CASE_							):
          for j in range(n_rows - 3							):
               lowercase_					:       Dict     				=					grid[j][i] * grid[j + 1][i] * grid[j + 2][i] * grid[j + 3][i]
               lowercase_					:       Optional[Any]     				=					grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3]

               # Left-to-right diagonal (\) product
               if i < n_columns - 3:
                    lowercase_					:       Tuple     				=					(
                        grid[i][j]
                        * grid[i + 1][j + 1]
                        * grid[i + 2][j + 2]
                        * grid[i + 3][j + 3]
                    )

               # Right-to-left diagonal(/) product
               if i > 2:
                    lowercase_					:       int     				=					(
                        grid[i][j]
                        * grid[i - 1][j + 1]
                        * grid[i - 2][j + 2]
                        * grid[i - 3][j + 3]
                    )

               lowercase_					:       Optional[int]     				=					max(
                   SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_  ,       SCREAMING_SNAKE_CASE_							)
               if max_product > largest:
                    lowercase_					:       List[Any]     				=					max_product

     return largest

def _UpperCamelCase   (       ):
     lowercase_					:       int     				=					[]
     with open(os.path.dirname(SCREAMING_SNAKE_CASE_							) + '/grid.txt'							) as file:
          for line in file:
               grid.append(line.strip('\n'							).split(' '							)							)

     lowercase_					:       Dict     				=					[[int(SCREAMING_SNAKE_CASE_							) for i in grid[j]] for j in range(len(SCREAMING_SNAKE_CASE_							)							)]

     return largest_product(SCREAMING_SNAKE_CASE_							)


if __name__ == "__main__":
 print(solution())




