


'''simple docstring'''





import os
import sys
import unittest


__lowerCamelCase												=						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												=						os.path.join(git_repo_path, '''src''', '''transformers''')

__lowerCamelCase												=						'''\n{0} = None\n'''

__lowerCamelCase												=						'''\nclass {0}(metaclass=DummyObject):\n    _backends = {1}\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, {1})\n'''


__lowerCamelCase												=						'''\ndef {0}(*args, **kwargs):\n    requires_backends({0}, {1})\n'''




class 				UpperCAmelCase			(			unittest.TestCase						):


 def        __SCREAMING_SNAKE_CASE					(      self							:	Optional[int] ):
    UpperCAmelCase__	:str      =      find_backend('''    _import_structure[\"models.albert\"].append(\"AlbertTokenizerFast\")''' )
    self.assertIsNone(__lowerCamelCase )

    UpperCAmelCase__	:List[Any]      =      find_backend('''    if not is_tokenizers_available():''' )
    self.assertEqual(__lowerCamelCase			,       '''tokenizers''' )

    UpperCAmelCase__	:str      =      find_backend('''    if not is_tensorflow_text_available():''' )
    self.assertEqual(__lowerCamelCase			,       '''tensorflow_text''' )

    UpperCAmelCase__	:Tuple      =      find_backend('''    if not (is_sentencepiece_available() and is_tokenizers_available()):''' )
    self.assertEqual(__lowerCamelCase			,       '''sentencepiece_and_tokenizers''' )

    UpperCAmelCase__	:Tuple      =      find_backend(
        '''    if not (is_sentencepiece_available() and is_tensorflow_text_available()):''' )
    self.assertEqual(__lowerCamelCase			,       '''sentencepiece_and_tensorflow_text''' )

    UpperCAmelCase__	:Tuple      =      find_backend(
        '''    if not (is_sentencepiece_available() and is_tokenizers_available() and is_vision_available()):''' )
    self.assertEqual(__lowerCamelCase			,       '''sentencepiece_and_tokenizers_and_vision''' )


 def        __SCREAMING_SNAKE_CASE					(      self							:	Tuple ):
    UpperCAmelCase__	:Any      =      read_init()
    # We don't assert on the exact list of keys to allow for smooth grow of backend-specific objects
    self.assertIn('''torch'''			,       __lowerCamelCase )
    self.assertIn('''tensorflow_text'''			,       __lowerCamelCase )
    self.assertIn('''sentencepiece_and_tokenizers'''			,       __lowerCamelCase )

    # 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        __SCREAMING_SNAKE_CASE					(      self							:	Dict ):
    UpperCAmelCase__	:Optional[int]      =      create_dummy_object('''CONSTANT'''			,       '''\'torch\'''' )
    self.assertEqual(__lowerCamelCase			,       '''\nCONSTANT = None\n''' )

    UpperCAmelCase__	:int      =      create_dummy_object('''function'''			,       '''\'torch\'''' )
    self.assertEqual(
        __lowerCamelCase			,       '''\ndef function(*args, **kwargs):\n    requires_backends(function, \'torch\')\n''' )

    UpperCAmelCase__	:List[Any]      =      """
class FakeClass(metaclass=DummyObject):
    _backends = 'torch'

    def __init__(self, *args, **kwargs):
        requires_backends(self, 'torch')
"""
    UpperCAmelCase__	:Optional[int]      =      create_dummy_object('''FakeClass'''			,       '''\'torch\'''' )
    self.assertEqual(__lowerCamelCase			,       __lowerCamelCase )





 def        __SCREAMING_SNAKE_CASE					(      self							:	str ):
    UpperCAmelCase__	:List[Any]      =      """# This file is autogenerated by the command `make fix-copies`, do not edit.
from ..utils import DummyObject, requires_backends


CONSTANT = None


def function(*args, **kwargs):
    requires_backends(function, [\"torch\"])


class FakeClass(metaclass=DummyObject):
    _backends = [\"torch\"]

    def __init__(self, *args, **kwargs):
        requires_backends(self, [\"torch\"])
"""
    UpperCAmelCase__	:int      =      create_dummy_files({'''torch''': ['''CONSTANT''', '''function''', '''FakeClass''']} )
    self.assertEqual(dummy_files['''torch''']			,       __lowerCamelCase )











"""simple docstring"""







def      UpperCamelCase       ( _A )     ->       int:
				lowercase    :      Dict       = 0
				while num > 0:
								digit_sum += num % 10
								num //= 10
				return digit_sum


def      UpperCamelCase       ( _A = 100 )     ->       int:
				lowercase    :      Union[str, Any]       = 1
				lowercase    :      Tuple       = 2

				for i in range(2  ,				max_n + 1 ):
								lowercase    :      Any       = pre_numerator
								lowercase    :      Dict       = 2 * i // 3 if i % 3 == 0 else 1
								lowercase    :      Optional[Any]       = cur_numerator
								lowercase    :      str       = e_cont * pre_numerator + temp

				return sum_digits(_A )


if __name__ == "__main__":
				print(F'{solution() = }')
