






import os
import sys
import unittest


lowerCamelCase     :							List[Any]    =os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
sys.path.append(os.path.join(git_repo_path, '''utils'''))

import check_dummies  # noqa: E402
from check_dummies import create_dummy_files, create_dummy_object, find_backend, read_init  # noqa: E402


# Align TRANSFORMERS_PATH in check_dummies with the current path
lowerCamelCase     :							int    =os.path.join(git_repo_path, '''src''', '''transformers''')

lowerCamelCase     :							List[Any]    ='''
{0} = None
'''

lowerCamelCase     :							Any    ='''
class {0}(metaclass=DummyObject):
    _backends = {1}

    def __init__(self, *args, **kwargs):
        requires_backends(self, {1})
'''


lowerCamelCase     :							Optional[int]    ='''
def {0}(*args, **kwargs):
    requires_backends({0}, {1})
'''





class       __a  (   unittest.TestCase	):







 def  __lowercase (		self :       List[str]						):


      '''simple docstring'''






      UpperCamelCase__      :       List[str]	    =  find_backend("    _import_structure[\"models.albert\"].append(\"AlbertTokenizerFast\")"						)
      self.assertIsNone(SCREAMING_SNAKE_CASE						)

      UpperCamelCase__      :       List[str]	    =  find_backend("    if not is_tokenizers_available():"						)
      self.assertEqual(SCREAMING_SNAKE_CASE							,       "tokenizers"						)

      UpperCamelCase__      :       List[str]	    =  find_backend("    if not is_tensorflow_text_available():"						)
      self.assertEqual(SCREAMING_SNAKE_CASE							,       "tensorflow_text"						)

      UpperCamelCase__      :       List[str]	    =  find_backend("    if not (is_sentencepiece_available() and is_tokenizers_available()):"						)
      self.assertEqual(SCREAMING_SNAKE_CASE							,       "sentencepiece_and_tokenizers"						)

      UpperCamelCase__      :       str	    =  find_backend(
          "    if not (is_sentencepiece_available() and is_tensorflow_text_available()):"						)
      self.assertEqual(SCREAMING_SNAKE_CASE							,       "sentencepiece_and_tensorflow_text"						)

      UpperCamelCase__      :       str	    =  find_backend(
          "    if not (is_sentencepiece_available() and is_tokenizers_available() and is_vision_available()):"						)
      self.assertEqual(SCREAMING_SNAKE_CASE							,       "sentencepiece_and_tokenizers_and_vision"						)







 def  __lowercase (		self :       Tuple						):


      '''simple docstring'''






      UpperCamelCase__      :       str	    =  read_init()
      # We don't assert on the exact list of keys to allow for smooth grow of backend-specific objects
      self.assertIn("torch"							,       SCREAMING_SNAKE_CASE						)
      self.assertIn("tensorflow_text"							,       SCREAMING_SNAKE_CASE						)
      self.assertIn("sentencepiece_and_tokenizers"							,       SCREAMING_SNAKE_CASE						)

      # Likewise, we can't assert on the exact content of a key
      self.assertIn("BertModel"							,       objects["torch"]						)
      self.assertIn("TFBertModel"							,       objects["tf"]						)
      self.assertIn("FlaxBertModel"							,       objects["flax"]						)
      self.assertIn("BertModel"							,       objects["torch"]						)
      self.assertIn("TFBertTokenizer"							,       objects["tensorflow_text"]						)
      self.assertIn("convert_slow_tokenizer"							,       objects["sentencepiece_and_tokenizers"]						)







 def  __lowercase (		self :       Optional[Any]						):


      '''simple docstring'''






      UpperCamelCase__      :       str	    =  create_dummy_object("CONSTANT"							,       "'torch'"						)
      self.assertEqual(SCREAMING_SNAKE_CASE							,       "\nCONSTANT = None\n"						)

      UpperCamelCase__      :       Optional[int]	    =  create_dummy_object("function"							,       "'torch'"						)
      self.assertEqual(
          SCREAMING_SNAKE_CASE							,       "\ndef function(*args, **kwargs):\n    requires_backends(function, 'torch')\n"						)

      UpperCamelCase__      :       Optional[Any]	    =  "\nclass FakeClass(metaclass=DummyObject):\n    _backends = 'torch'\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, 'torch')\n"
      UpperCamelCase__      :       Dict	    =  create_dummy_object("FakeClass"							,       "'torch'"						)
      self.assertEqual(SCREAMING_SNAKE_CASE							,       SCREAMING_SNAKE_CASE						)







 def  __lowercase (		self :       List[str]						):


      '''simple docstring'''






      UpperCamelCase__      :       Optional[Any]	    =  "# This file is autogenerated by the command `make fix-copies`, do not edit.\nfrom ..utils import DummyObject, requires_backends\n\n\nCONSTANT = None\n\n\ndef function(*args, **kwargs):\n    requires_backends(function, [\"torch\"])\n\n\nclass FakeClass(metaclass=DummyObject):\n    _backends = [\"torch\"]\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, [\"torch\"])\n"
      UpperCamelCase__      :       List[str]	    =  create_dummy_files({"torch": ["CONSTANT", "function", "FakeClass"]}						)
      self.assertEqual(dummy_files["torch"]							,       SCREAMING_SNAKE_CASE						)







from __future__ import annotations







def 		SCREAMING_SNAKE_CASE							( __lowerCAmelCase ,   __lowerCAmelCase = None ,   __lowerCAmelCase = None      )			->     None:
     if start is None:
          UpperCamelCase__      :       Union[str, Any]	    =  0

     if end is None:
          UpperCamelCase__      :       List[Any]	    =  len(__lowerCAmelCase      ) - 1

     if start >= end:
          return

     UpperCamelCase__      :       Union[str, Any]	    =  (start + end) // 2

     slowsort(__lowerCAmelCase ,   __lowerCAmelCase ,   __lowerCAmelCase      )
     slowsort(__lowerCAmelCase ,   mid + 1 ,   __lowerCAmelCase      )

     if sequence[end] < sequence[mid]:
          UpperCamelCase__    ,					UpperCamelCase__      :       Optional[int]	    =  sequence[mid], sequence[end]

     slowsort(__lowerCAmelCase ,   __lowerCAmelCase ,   end - 1      )


if __name__ == "__main__":
 from doctest import testmod

 testmod()