






from __future__ import annotations

lowercase  							=					list[list[int]]

# assigning initial values to the grid
lowercase  							=					[
    [3, 0, 6, 5, 0, 8, 4, 0, 0],
    [5, 2, 0, 0, 0, 0, 0, 0, 0],
    [0, 8, 7, 0, 0, 0, 0, 3, 1],
    [0, 0, 3, 0, 1, 0, 0, 8, 0],
    [9, 0, 0, 8, 6, 3, 0, 0, 5],
    [0, 5, 0, 0, 9, 0, 6, 0, 0],
    [1, 3, 0, 0, 0, 0, 2, 5, 0],
    [0, 0, 0, 0, 0, 0, 0, 7, 4],
    [0, 0, 5, 2, 0, 6, 3, 0, 0],
]

# a grid with no solution
lowercase  							=					[
    [5, 0, 6, 5, 0, 8, 4, 0, 3],
    [5, 2, 0, 0, 0, 0, 0, 0, 2],
    [1, 8, 7, 0, 0, 0, 0, 3, 1],
    [0, 0, 3, 0, 1, 0, 0, 8, 0],
    [9, 0, 0, 8, 6, 3, 0, 0, 5],
    [0, 5, 0, 0, 9, 0, 6, 0, 0],
    [1, 3, 0, 0, 0, 0, 2, 5, 0],
    [0, 0, 0, 0, 0, 0, 0, 7, 4],
    [0, 0, 5, 2, 0, 6, 3, 0, 0],
]





def 						__UpperCAmelCase			(     a_							,     a_							,     a_							,     a_):
							for i in range(9):
														if grid[row][i] == n or grid[i][column] == n:
																					return False

							for i in range(3):
														for j in range(3):
																					if grid[(row - row % 3) + i][(column - column % 3) + j] == n:
																												return False

							return True





def 						__UpperCAmelCase			(     a_):
							for i in range(9):
														for j in range(9):
																					if grid[i][j] == 0:
																												return i, j
							return None





def 						__UpperCAmelCase			(     a_):
							if location := find_empty_location(a_):
														snake_case_			,		snake_case_				=							location
							else:
														# If the location is ``None``, then the grid is solved.
														return grid

							for digit in range(1							,     10):
														if is_safe(a_							,     a_							,     a_							,     a_):
																					snake_case_				=							digit

																					if sudoku(a_) is not None:
																												return grid

																					snake_case_				=							0

							return None





def 						__UpperCAmelCase			(     a_):
							for row in grid:
														for cell in row:
																					print(a_							,     end=' ')
														print()


if __name__ == "__main__":
	# make a copy of grid so that you can compare with the unmodified grid
	for example_grid in (initial_grid, no_solution):
		print("\nExample grid:\n" + "=" * 20)
		print_solution(example_grid)
		print("\nExample grid solution:")
		lowercase  							=					sudoku(example_grid)
		if solution is not None:
			print_solution(solution)
		else:
			print("Cannot find a solution.")













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,
)


lowercase  							=					"\\n    Text data.\n    Second line of data."

lowercase  							=					"file"





@pytest.fixture(scope='session')
def 						__UpperCAmelCase			(     a_):
							snake_case_				=							tmp_path_factory.mktemp('data') / (FILE_PATH + '.zstd')
							snake_case_				=							bytes(a_							,     'utf-8')
							with zstd.open(a_							,     'wb') as f:
														f.write(a_)
							return path





@pytest.fixture
def 						__UpperCAmelCase			(     a_):
							with open(os.path.join(tmpfs.local_root_dir							,     a_)							,     'w') as f:
														f.write(a_)
							return FILE_PATH





@pytest.mark.parametrize('compression_format'							,     ['gzip', 'xz', 'zstd'])
def 						__UpperCAmelCase			(     a_							,     a_							,     a_							,     a_							,     a_							,     a_):
							snake_case_				=							{'gzip': gz_file, 'xz': xz_file, 'zstd': zstd_path}
							snake_case_				=							input_paths[compression_format]
							snake_case_				=							tmp_path / 'cache'
							snake_case_				=							DownloadConfig(cache_dir=a_							,     extract_compressed_file=a_)
							snake_case_				=							cached_path(a_							,     download_config=a_)
							with open(a_) as f:
														snake_case_				=							f.read()
							with open(a_) as f:
														snake_case_				=							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 						__UpperCAmelCase			(     a_							,     a_							,     a_							,     a_							,     a_):
							snake_case_				=							'custom_cache'
							snake_case_				=							'custom_extracted_dir'
							snake_case_				=							tmp_path / 'custom_extracted_path'
							if default_extracted:
														snake_case_				=							('downloads' if default_cache_dir else custom_cache_dir, 'extracted')
							else:
														monkeypatch.setattr('datasets.config.EXTRACTED_DATASETS_DIR'							,     a_)
														monkeypatch.setattr('datasets.config.EXTRACTED_DATASETS_PATH'							,     str(a_))
														snake_case_				=							custom_extracted_path.parts[-2:] if default_cache_dir else (custom_cache_dir, custom_extracted_dir)

							snake_case_				=							xz_file
							snake_case_				=							(
							    DownloadConfig(extract_compressed_file=a_)
							    if default_cache_dir
							    else DownloadConfig(cache_dir=tmp_path / custom_cache_dir							,     extract_compressed_file=a_)
							)
							snake_case_				=							cached_path(a_							,     download_config=a_)
							assert Path(a_).parent.parts[-2:] == expected





def 						__UpperCAmelCase			(     a_):
							# absolute path
							snake_case_				=							str(Path(a_).resolve())
							assert cached_path(a_) == text_file
							# relative path
							snake_case_				=							str(Path(a_).resolve().relative_to(Path(os.getcwd())))
							assert cached_path(a_) == text_file





def 						__UpperCAmelCase			(     a_):
							# absolute path
							snake_case_				=							str(tmp_path.resolve() / '__missing_file__.txt')
							with pytest.raises(a_):
														cached_path(a_)
							# relative path
							snake_case_				=							'./__missing_file__.txt'
							with pytest.raises(a_):
														cached_path(a_)





def 						__UpperCAmelCase			(     a_):
							snake_case_				=							get_from_cache(f'''tmp://{tmpfs_file}''')
							with open(a_) as f:
														snake_case_				=							f.read()
							assert output_file_content == FILE_CONTENT





@patch('datasets.config.HF_DATASETS_OFFLINE'							,     a_)
def 						__UpperCAmelCase			(     ):
							with pytest.raises(a_):
														cached_path('https://huggingface.co')





@patch('datasets.config.HF_DATASETS_OFFLINE'							,     a_)
def 						__UpperCAmelCase			(     a_):
							snake_case_				=							tmp_path_factory.mktemp('data') / 'file.html'
							with pytest.raises(a_):
														http_get('https://huggingface.co'							,     temp_file=a_)
							with pytest.raises(a_):
														http_head('https://huggingface.co')





@patch('datasets.config.HF_DATASETS_OFFLINE'							,     a_)
def 						__UpperCAmelCase			(     a_):
							snake_case_				=							tmp_path_factory.mktemp('data') / 'file.html'
							with pytest.raises(a_):
														ftp_get('ftp://huggingface.co'							,     temp_file=a_)
							with pytest.raises(a_):
														ftp_head('ftp://huggingface.co')





@patch('datasets.config.HF_DATASETS_OFFLINE'							,     a_)
def 						__UpperCAmelCase			(     a_):
							snake_case_				=							tmp_path_factory.mktemp('data') / 'file.html'
							with pytest.raises(a_):
														fsspec_get('s3://huggingface.co'							,     temp_file=a_)
							with pytest.raises(a_):
														fsspec_head('s3://huggingface.co')





