



from datasets.utils.patching import _PatchedModuleObj, patch_submodule

from . import _test_patching


def 	UpperCAmelCase__      (      ):






 '''simple docstring'''

 import os as original_os
 from os import path as original_path
 from os import rename as original_rename
 from os.path import dirname as original_dirname
 from os.path import join as original_join

 assert _test_patching.os is original_os
 assert _test_patching.path is original_path
 assert _test_patching.join is original_join

 assert _test_patching.renamed_os is original_os
 assert _test_patching.renamed_path is original_path
 assert _test_patching.renamed_join is original_join

 a						=		"__test_patch_submodule_mock__"
 with patch_submodule(_test_patching ,					"os.path.join" ,					UpperCAmelCase__					):
  # Every way to access os.path.join must be patched, and the rest must stay untouched

  # check os.path.join
  assert isinstance(_test_patching.os ,					_PatchedModuleObj					)
  assert isinstance(_test_patching.os.path ,					_PatchedModuleObj					)
  assert _test_patching.os.path.join is mock

  # check path.join
  assert isinstance(_test_patching.path ,					_PatchedModuleObj					)
  assert _test_patching.path.join is mock

  # check join
  assert _test_patching.join is mock

  # check that the other attributes are untouched
  assert _test_patching.os.rename is original_rename
  assert _test_patching.path.dirname is original_dirname
  assert _test_patching.os.path.dirname is original_dirname

  # Even renamed modules or objects must be patched

  # check renamed_os.path.join
  assert isinstance(_test_patching.renamed_os ,					_PatchedModuleObj					)
  assert isinstance(_test_patching.renamed_os.path ,					_PatchedModuleObj					)
  assert _test_patching.renamed_os.path.join is mock

  # check renamed_path.join
  assert isinstance(_test_patching.renamed_path ,					_PatchedModuleObj					)
  assert _test_patching.renamed_path.join is mock

  # check renamed_join
  assert _test_patching.renamed_join is mock

  # check that the other attributes are untouched
  assert _test_patching.renamed_os.rename is original_rename
  assert _test_patching.renamed_path.dirname is original_dirname
  assert _test_patching.renamed_os.path.dirname is original_dirname

 # check that everthing is back to normal when the patch is over

 assert _test_patching.os is original_os
 assert _test_patching.path is original_path
 assert _test_patching.join is original_join

 assert _test_patching.renamed_os is original_os
 assert _test_patching.renamed_path is original_path
 assert _test_patching.renamed_join is original_join


def 	UpperCAmelCase__      (      ):






 '''simple docstring'''

 assert _test_patching.open is open

 a						=		"__test_patch_submodule_builtin_mock__"
 # _test_patching has "open" in its globals
 assert _test_patching.open is open
 with patch_submodule(_test_patching ,					"open" ,					UpperCAmelCase__					):
  assert _test_patching.open is mock

 # check that everthing is back to normal when the patch is over

 assert _test_patching.open is open


def 	UpperCAmelCase__      (      ):






 '''simple docstring'''

 a						=		"__test_patch_submodule_missing_mock__"
 with patch_submodule(_test_patching ,					"pandas.read_csv" ,					UpperCAmelCase__					):
  pass


def 	UpperCAmelCase__      (      ):






 '''simple docstring'''

 a						=		"__test_patch_submodule_missing_builtin_mock__"
 # _test_patching doesn't have "len" in its globals
 assert getattr(_test_patching ,					"len" ,					UpperCAmelCase__					) is None
 with patch_submodule(_test_patching ,					"len" ,					UpperCAmelCase__					):
  assert _test_patching.len is mock
 assert _test_patching.len is len


def 	UpperCAmelCase__      (      ):






 '''simple docstring'''

 a						=		"__test_patch_submodule_start_and_stop_mock__"
 a						=		patch_submodule(_test_patching ,					"open" ,					UpperCAmelCase__					)
 assert _test_patching.open is open
 patch.start()
 assert _test_patching.open is mock
 patch.stop()
 assert _test_patching.open is open


def 	UpperCAmelCase__      (      ):






 '''simple docstring'''

 from os import rename as original_rename
 from os.path import dirname as original_dirname
 from os.path import join as original_join

 a						=		"__test_patch_submodule_successive_join__"
 a						=		"__test_patch_submodule_successive_dirname__"
 a						=		"__test_patch_submodule_successive_rename__"
 assert _test_patching.os.path.join is original_join
 assert _test_patching.os.path.dirname is original_dirname
 assert _test_patching.os.rename is original_rename

 with patch_submodule(_test_patching ,					"os.path.join" ,					UpperCAmelCase__					):
  with patch_submodule(_test_patching ,					"os.rename" ,					UpperCAmelCase__					):
   with patch_submodule(_test_patching ,					"os.path.dirname" ,					UpperCAmelCase__					):
    assert _test_patching.os.path.join is mock_join
    assert _test_patching.os.path.dirname is mock_dirname
    assert _test_patching.os.rename is mock_rename

    # try another order
 with patch_submodule(_test_patching ,					"os.rename" ,					UpperCAmelCase__					):
  with patch_submodule(_test_patching ,					"os.path.join" ,					UpperCAmelCase__					):
   with patch_submodule(_test_patching ,					"os.path.dirname" ,					UpperCAmelCase__					):
    assert _test_patching.os.path.join is mock_join
    assert _test_patching.os.path.dirname is mock_dirname
    assert _test_patching.os.rename is mock_rename

 assert _test_patching.os.path.join is original_join
 assert _test_patching.os.path.dirname is original_dirname
 assert _test_patching.os.rename is original_rename




def 	UpperCAmelCase__      (      ):






 '''simple docstring'''

 a						=		"__test_patch_submodule_doesnt_exist_mock__"
 with patch_submodule(_test_patching ,					"__module_that_doesn_exist__.__attribute_that_doesn_exist__" ,					UpperCAmelCase__					):
  pass
 with patch_submodule(_test_patching ,					"os.__attribute_that_doesn_exist__" ,					UpperCAmelCase__					):
  pass






import re
from pathlib import Path
from unittest import TestCase

import pytest



@pytest.mark.integration
class 		_lowercase		(       UpperCAmelCase__	):

   def 		A							(      self			:       Optional[int]							,   __lowerCAmelCase			:       str							)       ->				Union[str, Any]:


    """simple docstring"""






    with open(__lowerCAmelCase							,   encoding="utf-8"							) as input_file:
     a						=		re.compile(R"(?!.*\b(?:encoding|rb|w|wb|w+|wb+|ab|ab+)\b)(?<=\s)(open)\((.*)\)"							)
     a						=		input_file.read()
     a						=		regexp.search(__lowerCAmelCase							)

    return match

   def 		A							(      self			:       List[Any]							,   __lowerCAmelCase			:       str							)       ->				Dict:


    """simple docstring"""






    with open(__lowerCAmelCase							,   encoding="utf-8"							) as input_file:
     a						=		re.compile(R"#[^\r\n]*print\(|\"[^\r\n]*print\(|\"\"\".*?print\(.*?\"\"\"|(print\()"							,   re.DOTALL							)
     a						=		input_file.read()
     # use `re.finditer` to handle the case where the ignored groups would be matched first by `re.search`
     a						=		regexp.finditer(__lowerCAmelCase							)

    a						=		[match for match in matches if match is not None and match.group(1							) is not None]
    return matches[0] if matches else None

   def 		A							(      self			:       List[str]							)       ->				List[Any]:


    """simple docstring"""






    a						=		Path("./datasets"							)
    a						=		list(dataset_paths.absolute().glob("**/*.py"							)							)

    for dataset in dataset_files:
     if self._no_encoding_on_file_open(str(__lowerCAmelCase							)							):
      raise AssertionError(f"""open(...) must use utf-8 encoding in {dataset}"""							)




   def 		A							(      self			:       Tuple							)       ->				Union[str, Any]:


    """simple docstring"""






    a						=		Path("./datasets"							)
    a						=		list(dataset_paths.absolute().glob("**/*.py"							)							)

    for dataset in dataset_files:
     if self._no_print_statements(str(__lowerCAmelCase							)							):
      raise AssertionError(f"""print statement found in {dataset}. Use datasets.logger/logging instead."""							)

