'''simple docstring'''





import inspect
import unittest

import numpy as np

from transformers import ViTConfig, is_flax_available
from transformers.testing_utils import require_flax, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_flax_common import FlaxModelTesterMixin, floats_tensor


if is_flax_available():
 import jax

 from transformers.models.vit.modeling_flax_vit import FlaxViTForImageClassification, FlaxViTModel






class 				UpperCAmelCase (       unittest.TestCase ):




    '''simple docstring'''







    def __init__(       self    ,							lowercase__    ,							lowercase__=13    ,							lowercase__=30    ,							lowercase__=2    ,							lowercase__=3    ,							lowercase__=True    ,							lowercase__=True    ,							lowercase__=32    ,							lowercase__=5    ,							lowercase__=4    ,							lowercase__=37    ,							lowercase__="gelu"    ,							lowercase__=0.1    ,							lowercase__=0.1    ,							lowercase__=10    ,							lowercase__=0.0_2    ,							)							-> Union[str, Any]:
         SCREAMING_SNAKE_CASE					:			str    	=       parent
         SCREAMING_SNAKE_CASE					:			Dict    	=       batch_size
         SCREAMING_SNAKE_CASE					:			int    	=       image_size
         SCREAMING_SNAKE_CASE					:			int    	=       patch_size
         SCREAMING_SNAKE_CASE					:			Union[str, Any]    	=       num_channels
         SCREAMING_SNAKE_CASE					:			Tuple    	=       is_training
         SCREAMING_SNAKE_CASE					:			Union[str, Any]    	=       use_labels
         SCREAMING_SNAKE_CASE					:			Tuple    	=       hidden_size
         SCREAMING_SNAKE_CASE					:			str    	=       num_hidden_layers
         SCREAMING_SNAKE_CASE					:			Dict    	=       num_attention_heads
         SCREAMING_SNAKE_CASE					:			List[Any]    	=       intermediate_size
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       hidden_act
         SCREAMING_SNAKE_CASE					:			Union[str, Any]    	=       hidden_dropout_prob
         SCREAMING_SNAKE_CASE					:			str    	=       attention_probs_dropout_prob
         SCREAMING_SNAKE_CASE					:			Dict    	=       type_sequence_label_size
         SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       initializer_range

         # in ViT, the seq length equals the number of patches + 1 (we add 1 for the [CLS] token)
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       (image_size // patch_size) ** 2
         SCREAMING_SNAKE_CASE					:			str    	=       num_patches + 1






    def       _UpperCamelCase    (       self )							-> Any:
         SCREAMING_SNAKE_CASE					:			Union[str, Any]    	=       floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size] )

         SCREAMING_SNAKE_CASE					:			str    	=       ViTConfig(
             image_size=self.image_size    ,							patch_size=self.patch_size    ,							num_channels=self.num_channels    ,							hidden_size=self.hidden_size    ,							num_hidden_layers=self.num_hidden_layers    ,							num_attention_heads=self.num_attention_heads    ,							intermediate_size=self.intermediate_size    ,							hidden_act=self.hidden_act    ,							hidden_dropout_prob=self.hidden_dropout_prob    ,							attention_probs_dropout_prob=self.attention_probs_dropout_prob    ,							is_decoder=lowercase__    ,							initializer_range=self.initializer_range    ,							)

         return config, pixel_values






    def       _UpperCamelCase    (       self    ,							lowercase__    ,							lowercase__ )							-> Dict:
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       FlaxViTModel(config=lowercase__ )
         SCREAMING_SNAKE_CASE					:			List[Any]    	=       model(lowercase__ )
         # expected sequence length = num_patches + 1 (we add 1 for the [CLS] token)
         SCREAMING_SNAKE_CASE					:			List[Any]    	=       (self.image_size, self.image_size)
         SCREAMING_SNAKE_CASE					:			Tuple    	=       (self.patch_size, self.patch_size)
         SCREAMING_SNAKE_CASE					:			Dict    	=       (image_size[1] // patch_size[1]) * (image_size[0] // patch_size[0])
         self.parent.assertEqual(result.last_hidden_state.shape    ,							(self.batch_size, num_patches + 1, self.hidden_size) )






    def       _UpperCamelCase    (       self    ,							lowercase__    ,							lowercase__ )							-> List[str]:
         SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       self.type_sequence_label_size
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       FlaxViTForImageClassification(config=lowercase__ )
         SCREAMING_SNAKE_CASE					:			List[str]    	=       model(lowercase__ )
         self.parent.assertEqual(result.logits.shape    ,							(self.batch_size, self.type_sequence_label_size) )

         # test greyscale images
         SCREAMING_SNAKE_CASE					:			Any    	=       1
         SCREAMING_SNAKE_CASE					:			Tuple    	=       FlaxViTForImageClassification(lowercase__ )

         SCREAMING_SNAKE_CASE					:			List[str]    	=       floats_tensor([self.batch_size, 1, self.image_size, self.image_size] )
         SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       model(lowercase__ )






    def       _UpperCamelCase    (       self )							-> Optional[int]:
         SCREAMING_SNAKE_CASE					:			int    	=       self.prepare_config_and_inputs()
         (
             (
             SCREAMING_SNAKE_CASE
         )	,   (
             SCREAMING_SNAKE_CASE
         )	,   
         )					:			List[str]    	=       config_and_inputs
         SCREAMING_SNAKE_CASE					:			Any    	=       {'pixel_values': pixel_values}
         return config, inputs_dict






@require_flax
class 				UpperCAmelCase (       _SCREAMING_SNAKE_CASE   ,    unittest.TestCase ):




    '''simple docstring'''







    snake_case__							:   Dict							=						(FlaxViTModel, FlaxViTForImageClassification) if is_flax_available() else ()






    def       _UpperCamelCase    (       self )							-> None:
         SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       FlaxViTModelTester(self )
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       ConfigTester(self    ,							config_class=lowercase__    ,							has_text_modality=lowercase__    ,							hidden_size=37 )






    def       _UpperCamelCase    (       self )							-> Any:
         self.config_tester.run_common_tests()






    def       _UpperCamelCase    (       self )							-> str:
         SCREAMING_SNAKE_CASE					:			Dict    	=       self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_model(*lowercase__ )






    def       _UpperCamelCase    (       self )							-> List[Any]:
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_image_classification(*lowercase__ )






    def       _UpperCamelCase    (       self )							-> Tuple:
         SCREAMING_SNAKE_CASE	,   SCREAMING_SNAKE_CASE					:			List[str]    	=       self.model_tester.prepare_config_and_inputs_for_common()

         for model_class in self.all_model_classes:
              SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       model_class(lowercase__ )
              SCREAMING_SNAKE_CASE					:			int    	=       inspect.signature(model.__call__ )
              # signature.parameters is an OrderedDict => so arg_names order is deterministic
              SCREAMING_SNAKE_CASE					:			int    	=       [*signature.parameters.keys()]

              SCREAMING_SNAKE_CASE					:			List[Any]    	=       ['pixel_values']
              self.assertListEqual(arg_names[:1]    ,							lowercase__ )






    def       _UpperCamelCase    (       self )							-> List[Any]:
         SCREAMING_SNAKE_CASE	,   SCREAMING_SNAKE_CASE					:			int    	=       self.model_tester.prepare_config_and_inputs_for_common()

         for model_class in self.all_model_classes:
              with self.subTest(model_class.__name__ ):
                   SCREAMING_SNAKE_CASE					:			str    	=       self._prepare_for_class(lowercase__    ,							lowercase__ )
                   SCREAMING_SNAKE_CASE					:			Any    	=       model_class(lowercase__ )

                   @jax.jit
                   def model_jitted(lowercase__    ,							**lowercase__ ):
                        return model(pixel_values=lowercase__    ,							**lowercase__ )

                   with self.subTest('JIT Enabled' ):
                        SCREAMING_SNAKE_CASE					:			Any    	=       model_jitted(**lowercase__ ).to_tuple()

                   with self.subTest('JIT Disabled' ):
                        with jax.disable_jit():
                             SCREAMING_SNAKE_CASE					:			Any    	=       model_jitted(**lowercase__ ).to_tuple()

                   self.assertEqual(len(lowercase__ )    ,							len(lowercase__ ) )
                   for jitted_output, output in zip(lowercase__    ,							lowercase__ ):
                        self.assertEqual(jitted_output.shape    ,							output.shape )






    @slow
    def       _UpperCamelCase    (       self )							-> int:
         for model_class_name in self.all_model_classes:
              SCREAMING_SNAKE_CASE					:			str    	=       model_class_name.from_pretrained('google/vit-base-patch16-224' )
              SCREAMING_SNAKE_CASE					:			Tuple    	=       model(np.ones((1, 3, 224, 224) ) )
              self.assertIsNotNone(lowercase__ )




'''simple docstring'''





import json
import os
import unittest

from transformers import CLIPTokenizer, CLIPTokenizerFast
from transformers.models.clip.tokenization_clip import VOCAB_FILES_NAMES
from transformers.testing_utils import require_ftfy, require_tokenizers

from ...test_tokenization_common import TokenizerTesterMixin






@require_tokenizers
class 				UpperCAmelCase (       _SCREAMING_SNAKE_CASE   ,    unittest.TestCase ):




    '''simple docstring'''







    snake_case__							:   int							=						CLIPTokenizer
    snake_case__							:   Union[str, Any]							=						CLIPTokenizerFast
    snake_case__							:   str							=						True
    snake_case__							:   Optional[int]							=						{}
    snake_case__							:   int							=						False






    def       _UpperCamelCase    (       self )							-> Tuple:
         super().setUp()

         # fmt: off
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       ['l', 'o', 'w', 'e', 'r', 's', 't', 'i', 'd', 'n', 'lo', 'l</w>', 'w</w>', 'r</w>', 't</w>', 'low</w>', 'er</w>', 'lowest</w>', 'newer</w>', 'wider', '<unk>', '<|startoftext|>', '<|endoftext|>']
         # fmt: on
         SCREAMING_SNAKE_CASE					:			int    	=       dict(zip(lowercase__    ,							range(len(lowercase__ ) ) ) )
         SCREAMING_SNAKE_CASE					:			Dict    	=       ['#version: 0.2', 'l o', 'lo w</w>', 'e r</w>']
         SCREAMING_SNAKE_CASE					:			List[str]    	=       {'unk_token': '<unk>'}

         SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       os.path.join(self.tmpdirname    ,							VOCAB_FILES_NAMES['vocab_file'] )
         SCREAMING_SNAKE_CASE					:			Union[str, Any]    	=       os.path.join(self.tmpdirname    ,							VOCAB_FILES_NAMES['merges_file'] )
         with open(self.vocab_file    ,							'w'    ,							encoding='utf-8' ) as fp:
              fp.write(json.dumps(lowercase__ ) + '\n' )
         with open(self.merges_file    ,							'w'    ,							encoding='utf-8' ) as fp:
              fp.write('\n'.join(lowercase__ ) )






    def       _UpperCamelCase    (       self    ,							**lowercase__ )							-> Dict:
         kwargs.update(self.special_tokens_map )
         return CLIPTokenizer.from_pretrained(self.tmpdirname    ,							**lowercase__ )






    def       _UpperCamelCase    (       self    ,							**lowercase__ )							-> Union[str, Any]:
         kwargs.update(self.special_tokens_map )
         return CLIPTokenizerFast.from_pretrained(self.tmpdirname    ,							**lowercase__ )






    def       _UpperCamelCase    (       self    ,							lowercase__ )							-> List[Any]:
         SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       'lower newer'
         SCREAMING_SNAKE_CASE					:			Dict    	=       'lower newer'
         return input_text, output_text






    def       _UpperCamelCase    (       self )							-> List[Any]:
         SCREAMING_SNAKE_CASE					:			str    	=       CLIPTokenizer(self.vocab_file    ,							self.merges_file    ,							**self.special_tokens_map )
         SCREAMING_SNAKE_CASE					:			Optional[int]    	=       'lower newer'
         SCREAMING_SNAKE_CASE					:			List[Any]    	=       ['lo', 'w', 'er</w>', 'n', 'e', 'w', 'er</w>']
         SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       tokenizer.tokenize(lowercase__ )
         self.assertListEqual(lowercase__    ,							lowercase__ )

         SCREAMING_SNAKE_CASE					:			Any    	=       tokens + [tokenizer.unk_token]
         SCREAMING_SNAKE_CASE					:			int    	=       [10, 2, 16, 9, 3, 2, 16, 20]
         self.assertListEqual(tokenizer.convert_tokens_to_ids(lowercase__ )    ,							lowercase__ )






    @require_ftfy
    def       _UpperCamelCase    (       self )							-> List[str]:
         for tokenizer, pretrained_name, kwargs in self.tokenizers_list:
              with self.subTest(F"""{tokenizer.__class__.__name__} ({pretrained_name})""" ):
                   SCREAMING_SNAKE_CASE					:			Dict    	=       self.tokenizer_class.from_pretrained(lowercase__    ,							**lowercase__ )
                   SCREAMING_SNAKE_CASE					:			List[Any]    	=       self.rust_tokenizer_class.from_pretrained(lowercase__    ,							**lowercase__ )

                   SCREAMING_SNAKE_CASE					:			Tuple    	=       'A\n\'ll 11p223RF☆ho!!to?\'d\'d\'\'d of a cat to-$\'\'d.'
                   SCREAMING_SNAKE_CASE					:			List[str]    	=       tokenizer_s.tokenize(lowercase__ )
                   SCREAMING_SNAKE_CASE					:			List[str]    	=       tokenizer_r.tokenize(lowercase__ )

                   self.assertListEqual(lowercase__    ,							lowercase__ )

                   # Test that the tokenization is identical on an example containing a character (Latin Small Letter A
                   # with Tilde) encoded in 2 different ways
                   SCREAMING_SNAKE_CASE					:			Tuple    	=       'xa\u0303y' + ' ' + 'x\xe3y'
                   SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       tokenizer_s.tokenize(lowercase__ )
                   SCREAMING_SNAKE_CASE					:			Dict    	=       tokenizer_r.tokenize(lowercase__ )

                   self.assertListEqual(lowercase__    ,							lowercase__ )

                   # Test that the tokenization is identical on unicode of space type
                   SCREAMING_SNAKE_CASE					:			Union[str, Any]    	=       [
                       '\u0009',  # (horizontal tab, '\t')
                       '\u000B',  # (vertical tab)
                       '\u000C',  # (form feed)
                       '\u0020',  # (space, ' ')
                       '\u200E',  # (left-to-right mark):w
                       '\u200F',  # (right-to-left mark)
                   ]
                   for unicode_seq in spaces_unicodes:
                        SCREAMING_SNAKE_CASE					:			Tuple    	=       tokenizer_s.tokenize(lowercase__ )
                        SCREAMING_SNAKE_CASE					:			Optional[int]    	=       tokenizer_r.tokenize(lowercase__ )

                        self.assertListEqual(lowercase__    ,							lowercase__ )

                   # Test that the tokenization is identical on unicode of line break type
                   SCREAMING_SNAKE_CASE					:			int    	=       [
                       '\u000A',  # (line feed, '\n')
                       '\r\n',  # (carriage return and line feed, '\r\n')
                       '\u000D',  # (carriage return, '\r')
                       '\r',  # (carriage return, '\r')
                       '\u000D',  # (carriage return, '\r')
                       '\u2028',  # (line separator)
                       '\u2029',  # (paragraph separator)
                       # "\u0085", # (next line)
                   ]

                   # The tokenization is not identical for the character "\u0085" (next line). The slow version using ftfy transforms
                   # it into the Horizontal Ellipsis character "…" ("\u2026") while the fast version transforms it into a
                   # space (and thus into an empty list).

                   for unicode_seq in line_break_unicodes:
                        SCREAMING_SNAKE_CASE					:			List[Any]    	=       tokenizer_s.tokenize(lowercase__ )
                        SCREAMING_SNAKE_CASE					:			int    	=       tokenizer_r.tokenize(lowercase__ )

                        self.assertListEqual(lowercase__    ,							lowercase__ )






    def       _UpperCamelCase    (       self )							-> int:
         # Test which aims to verify that the offsets are well adapted to the argument `add_prefix_space`
         for tokenizer, pretrained_name, kwargs in self.tokenizers_list:
              with self.subTest(F"""{tokenizer.__class__.__name__} ({pretrained_name})""" ):
                   SCREAMING_SNAKE_CASE					:			str    	=       'hello'  # `hello` is a token in the vocabulary of `pretrained_name`
                   SCREAMING_SNAKE_CASE					:			Union[str, Any]    	=       F"""{text_of_1_token} {text_of_1_token}"""

                   SCREAMING_SNAKE_CASE					:			List[str]    	=       self.rust_tokenizer_class.from_pretrained(
                       lowercase__    ,							use_fast=lowercase__    ,							)
                   SCREAMING_SNAKE_CASE					:			Tuple    	=       tokenizer_r(lowercase__    ,							return_offsets_mapping=lowercase__    ,							add_special_tokens=lowercase__ )
                   self.assertEqual(encoding.offset_mapping[0]    ,							(0, len(lowercase__ )) )
                   self.assertEqual(
                       encoding.offset_mapping[1]    ,							(len(lowercase__ ) + 1, len(lowercase__ ) + 1 + len(lowercase__ ))    ,							)

                   SCREAMING_SNAKE_CASE					:			Optional[int]    	=       F""" {text}"""

                   SCREAMING_SNAKE_CASE					:			Any    	=       self.rust_tokenizer_class.from_pretrained(
                       lowercase__    ,							use_fast=lowercase__    ,							)
                   SCREAMING_SNAKE_CASE					:			Optional[Any]    	=       tokenizer_r(lowercase__    ,							return_offsets_mapping=lowercase__    ,							add_special_tokens=lowercase__ )
                   self.assertEqual(encoding.offset_mapping[0]    ,							(1, 1 + len(lowercase__ )) )
                   self.assertEqual(
                       encoding.offset_mapping[1]    ,							(1 + len(lowercase__ ) + 1, 1 + len(lowercase__ ) + 1 + len(lowercase__ ))    ,							)






    def       _UpperCamelCase    (       self )							-> int:
         # Test related to the breaking change introduced in transformers v4.17.0
         # We need to check that an error in raised when the user try to load a previous version of the tokenizer.
         with self.assertRaises(lowercase__ ) as context:
              self.rust_tokenizer_class.from_pretrained('robot-test/old-clip-tokenizer' )

         self.assertTrue(
             context.exception.args[0].startswith(
                 'The `backend_tokenizer` provided does not match the expected format.' ) )






    @require_ftfy
    def       _UpperCamelCase    (       self )							-> Union[str, Any]:
         super().test_tokenization_python_rust_equals()






    def       _UpperCamelCase    (       self )							-> int:
         # CLIP always lower cases letters
         pass



