





import doctest
import logging
import os
import unittest
from pathlib import Path
from typing import List, Union

import transformers
from transformers.testing_utils import require_tf, require_torch, slow


lowercase_          =		logging.getLogger()
@unittest.skip('Temporarily disable the doc tests.'				)
@require_torch
@require_tf
@slow
class     SCREAMING_SNAKE_CASE       (unittest.TestCase				):


   def 	SCREAMING_SNAKE_CASE_							(   self      :    str      ,					a      :    Path      ,					a      :    Union[str, None] = None      ,					a      :    Union[List[str], None] = None      ,					a      :    Union[str, List[str], None] = None      ,					a      :    bool = True      ,					)->       Tuple:





     """simple docstring"""







     lowercase__           =  [file for file in os.listdir(a	) if os.path.isfile(os.path.join(a      ,					a	)	)]

     if identifier is not None:
       lowercase__           =  [file for file in files if identifier in file]

     if n_identifier is not None:
       if isinstance(a      ,					a	):
         for n_ in n_identifier:
           lowercase__           =  [file for file in files if n_ not in file]
       else:
         lowercase__           =  [file for file in files if n_identifier not in file]

     lowercase__           =  ignore_files or []
     ignore_files.append('__init__.py'	)
     lowercase__           =  [file for file in files if file not in ignore_files]

     for file in files:
       # Open all files
       print('Testing'      ,					a	)

       if only_modules:
         lowercase__           =  file.split('.'	)[0]
         try:
           lowercase__           =  getattr(a      ,					a	)
           lowercase__           =  doctest.DocTestSuite(a	)
           lowercase__           =  unittest.TextTestRunner().run(a	)
           self.assertIs(len(result.failures	)      ,					0	)
         except AttributeError:
           logger.info(f"""{module_identifier} is not a module."""	)
       else:
         lowercase__           =  doctest.testfile(str('..' / directory / file	)      ,					optionflags=doctest.ELLIPSIS	)
         self.assertIs(result.failed      ,					0	)


   def 	SCREAMING_SNAKE_CASE_							(   self      :    Dict	)->       Tuple:





     """simple docstring"""







     lowercase__           =  Path('src/transformers'	)
     lowercase__           =  'modeling'
     lowercase__           =  [
         'modeling_ctrl.py',
         'modeling_tf_ctrl.py',
     ]
     self.analyze_directory(a      ,					identifier=a      ,					ignore_files=a	)


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





     """simple docstring"""







     lowercase__           =  Path('src/transformers'	)
     lowercase__           =  'tokenization'
     self.analyze_directory(a      ,					identifier=a	)


   def 	SCREAMING_SNAKE_CASE_							(   self      :    str	)->       int:





     """simple docstring"""







     lowercase__           =  Path('src/transformers'	)
     lowercase__           =  'configuration'
     self.analyze_directory(a      ,					identifier=a	)


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





     """simple docstring"""







     lowercase__           =  Path('src/transformers'	)
     lowercase__           =  ['configuration', 'modeling', 'tokenization']
     self.analyze_directory(a      ,					n_identifier=a	)


   def 	SCREAMING_SNAKE_CASE_							(   self      :    Any	)->       Dict:





     """simple docstring"""







     lowercase__           =  Path('docs/source'	)
     lowercase__           =  ['favicon.ico']
     self.analyze_directory(a      ,					ignore_files=a      ,					only_modules=a	)









from datasets.utils.patching import _PatchedModuleObj, patch_submodule

from . import _test_patching




def       __UpperCamelCase  ()    ->       str:
  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

  lowercase__           =  '__test_patch_submodule_mock__'
  with patch_submodule(_test_patching		,						'os.path.join'		,						_SCREAMING_SNAKE_CASE		):
    # 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  ()    ->       Any:
  assert _test_patching.open is open

  lowercase__           =  '__test_patch_submodule_builtin_mock__'
  # _test_patching has "open" in its globals
  assert _test_patching.open is open
  with patch_submodule(_test_patching		,						'open'		,						_SCREAMING_SNAKE_CASE		):
    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  ()    ->       List[str]:
  # pandas.read_csv is not present in _test_patching
  lowercase__           =  '__test_patch_submodule_missing_mock__'
  with patch_submodule(_test_patching		,						'pandas.read_csv'		,						_SCREAMING_SNAKE_CASE		):
    pass




def       __UpperCamelCase  ()    ->       List[str]:
  # builtin should always be mocked even if they're not in the globals
  # in case they're loaded at one point
  lowercase__           =  '__test_patch_submodule_missing_builtin_mock__'
  # _test_patching doesn't have "len" in its globals
  assert getattr(_test_patching		,						'len'		,						_SCREAMING_SNAKE_CASE		) is None
  with patch_submodule(_test_patching		,						'len'		,						_SCREAMING_SNAKE_CASE		):
    assert _test_patching.len is mock
  assert _test_patching.len is len




def       __UpperCamelCase  ()    ->       List[str]:
  lowercase__           =  '__test_patch_submodule_start_and_stop_mock__'
  lowercase__           =  patch_submodule(_test_patching		,						'open'		,						_SCREAMING_SNAKE_CASE		)
  assert _test_patching.open is open
  patch.start()
  assert _test_patching.open is mock
  patch.stop()
  assert _test_patching.open is open




def       __UpperCamelCase  ()    ->       Optional[int]:
  from os import rename as original_rename
  from os.path import dirname as original_dirname
  from os.path import join as original_join

  lowercase__           =  '__test_patch_submodule_successive_join__'
  lowercase__           =  '__test_patch_submodule_successive_dirname__'
  lowercase__           =  '__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'		,						_SCREAMING_SNAKE_CASE		):
    with patch_submodule(_test_patching		,						'os.rename'		,						_SCREAMING_SNAKE_CASE		):
      with patch_submodule(_test_patching		,						'os.path.dirname'		,						_SCREAMING_SNAKE_CASE		):
        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'		,						_SCREAMING_SNAKE_CASE		):
    with patch_submodule(_test_patching		,						'os.path.join'		,						_SCREAMING_SNAKE_CASE		):
      with patch_submodule(_test_patching		,						'os.path.dirname'		,						_SCREAMING_SNAKE_CASE		):
        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  ()    ->       Optional[Any]:
  lowercase__           =  '__test_patch_submodule_doesnt_exist_mock__'
  with patch_submodule(_test_patching		,						'__module_that_doesn_exist__.__attribute_that_doesn_exist__'		,						_SCREAMING_SNAKE_CASE		):
    pass
  with patch_submodule(_test_patching		,						'os.__attribute_that_doesn_exist__'		,						_SCREAMING_SNAKE_CASE		):
    pass


