
'''simple docstring'''
import os
import sys
import unittest


lowerCAmelCase					:    Tuple           = 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					:    Optional[int]           = '\n{0} = None\n'

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


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


class 			SCREAMING_SNAKE_CASE__      (     unittest.TestCase):







				def 						UpperCAmelCase_    (       self     )->		Optional[Any]:







											'''simple docstring'''






											UpperCamelCase   			=     find_backend('    _import_structure["models.albert"].append("AlbertTokenizerFast")'     )
											self.assertIsNone(A_     )

											UpperCamelCase   			=     find_backend('    if not is_tokenizers_available():'     )
											self.assertEqual(A_						,				'tokenizers'     )

											UpperCamelCase   			=     find_backend('    if not is_tensorflow_text_available():'     )
											self.assertEqual(A_						,				'tensorflow_text'     )

											UpperCamelCase   			=     find_backend('    if not (is_sentencepiece_available() and is_tokenizers_available()):'     )
											self.assertEqual(A_						,				'sentencepiece_and_tokenizers'     )

											UpperCamelCase   			=     find_backend(
											    '    if not (is_sentencepiece_available() and is_tensorflow_text_available()):'     )
											self.assertEqual(A_						,				'sentencepiece_and_tensorflow_text'     )

											UpperCamelCase   			=     find_backend(
											    '    if not (is_sentencepiece_available() and is_tokenizers_available() and is_vision_available()):'     )
											self.assertEqual(A_						,				'sentencepiece_and_tokenizers_and_vision'     )







				def 						UpperCAmelCase_    (       self     )->		Tuple:







											'''simple docstring'''






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

											# 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 						UpperCAmelCase_    (       self     )->		Tuple:







											'''simple docstring'''






											UpperCamelCase   			=     create_dummy_object('CONSTANT'						,				'\'torch\''     )
											self.assertEqual(A_						,				'\nCONSTANT = None\n'     )

											UpperCamelCase   			=     create_dummy_object('function'						,				'\'torch\''     )
											self.assertEqual(
											    A_						,				'\ndef function(*args, **kwargs):\n    requires_backends(function, \'torch\')\n'     )

											UpperCamelCase   			=     '\nclass FakeClass(metaclass=DummyObject):\n    _backends = \'torch\'\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, \'torch\')\n'
											UpperCamelCase   			=     create_dummy_object('FakeClass'						,				'\'torch\''     )
											self.assertEqual(A_						,				A_     )







				def 						UpperCAmelCase_    (       self     )->		int:







											'''simple docstring'''






											UpperCamelCase   			=     '# 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   			=     create_dummy_files({'torch': ['CONSTANT', 'function', 'FakeClass']}     )
											self.assertEqual(dummy_files['torch']						,				A_     )






'''simple docstring'''
def 		A_(     A						:		list[int]):
							UpperCamelCase   			=     []
							if len(A) == 1:
														return [nums.copy()]
							for _ in range(len(A)):
														UpperCamelCase   			=     nums.pop(0)
														UpperCamelCase   			=     permute(A)
														for perm in permutations:
																					perm.append(A)
														result.extend(A)
														nums.append(A)
							return result







def 		A_(     A						:		str):

							def backtrack(A						:		str):
														if start == len(A) - 1:
																					output.append(nums[:])
														else:
																					for i in range(A		,     len(A)):
																												UpperCamelCase			,	UpperCamelCase   			=     nums[i], nums[start]
																												backtrack(start + 1)
																												UpperCamelCase			,	UpperCamelCase   			=     nums[i], nums[start]  # backtrack

							UpperCamelCase   			=     []
							backtrack(0)
							return output


if __name__ == "__main__":
						import doctest

						# use res to print the data in permute2 function
						lowerCAmelCase					:    Dict           = permutea([1, 2, 3])
						print(res)
						doctest.testmod()




