


"""simple docstring"""
import unittest

import numpy as np

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

from ...test_modeling_flax_common import FlaxModelTesterMixin, ids_tensor, random_attention_mask


if is_flax_available():
			import jax.numpy as jnp

			from transformers.models.albert.modeling_flax_albert import (
			    FlaxAlbertForMaskedLM,
			    FlaxAlbertForMultipleChoice,
			    FlaxAlbertForPreTraining,
			    FlaxAlbertForQuestionAnswering,
			    FlaxAlbertForSequenceClassification,
			    FlaxAlbertForTokenClassification,
			    FlaxAlbertModel,
			)



class 			_UpperCAmelCase (							unittest.TestCase				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_=13				,       a_=7				,       a_=True				,       a_=True				,       a_=True				,       a_=True				,       a_=99				,       a_=32				,       a_=5				,       a_=4				,       a_=37				,       a_="gelu"				,       a_=0.1				,       a_=0.1				,       a_=5_12				,       a_=16				,       a_=2				,       a_=0.02				,       a_=4				,       ):





			'''simple docstring'''

			__snake_case	:						Union[str, Any]						=				parent
			__snake_case	:						Dict						=				batch_size
			__snake_case	:						Optional[int]						=				seq_length
			__snake_case	:						Tuple						=				is_training
			__snake_case	:						Optional[int]						=				use_attention_mask
			__snake_case	:						Dict						=				use_token_type_ids
			__snake_case	:						Dict						=				use_labels
			__snake_case	:						Tuple						=				vocab_size
			__snake_case	:						Tuple						=				hidden_size
			__snake_case	:						List[str]						=				num_hidden_layers
			__snake_case	:						Dict						=				num_attention_heads
			__snake_case	:						Optional[int]						=				intermediate_size
			__snake_case	:						Any						=				hidden_act
			__snake_case	:						Union[str, Any]						=				hidden_dropout_prob
			__snake_case	:						Union[str, Any]						=				attention_probs_dropout_prob
			__snake_case	:						Dict						=				max_position_embeddings
			__snake_case	:						str						=				type_vocab_size
			__snake_case	:						List[Any]						=				type_sequence_label_size
			__snake_case	:						Optional[int]						=				initializer_range
			__snake_case	:						Any						=				num_choices



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						Union[str, Any]						=				ids_tensor([self.batch_size, self.seq_length]				,       self.vocab_size					)

			__snake_case	:						Union[str, Any]						=				None
			if self.use_attention_mask:
				__snake_case	:						Tuple						=				random_attention_mask([self.batch_size, self.seq_length]					)

			__snake_case	:						Optional[Any]						=				None
			if self.use_token_type_ids:
				__snake_case	:						List[Any]						=				ids_tensor([self.batch_size, self.seq_length]				,       self.type_vocab_size					)

			__snake_case	:						Tuple						=				AlbertConfig(
			    vocab_size=self.vocab_size				,       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				,       max_position_embeddings=self.max_position_embeddings				,       type_vocab_size=self.type_vocab_size				,       is_decoder=a_				,       initializer_range=self.initializer_range				,       )

			return config, input_ids, token_type_ids, attention_mask



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						Dict						=				self.prepare_config_and_inputs()
			__snake_case	,							__snake_case	,							__snake_case	,							__snake_case	:						Optional[Any]						=				config_and_inputs
			__snake_case	:						Any						=				{'''input_ids''': input_ids, '''token_type_ids''': token_type_ids, '''attention_mask''': attention_mask}
			return config, inputs_dict



@require_flax
class 			_UpperCAmelCase (							__snake_case,				unittest.TestCase				):






		'''simple docstring'''

		lowerCamelCase__				=(
		    (
		        FlaxAlbertModel,
		        FlaxAlbertForPreTraining,
		        FlaxAlbertForMaskedLM,
		        FlaxAlbertForMultipleChoice,
		        FlaxAlbertForQuestionAnswering,
		        FlaxAlbertForSequenceClassification,
		        FlaxAlbertForTokenClassification,
		        FlaxAlbertForQuestionAnswering,
		    )
		    if is_flax_available()
		    else ()
		)



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						Dict						=				FlaxAlbertModelTester(self					)



		@slow
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			for model_class_name in self.all_model_classes:
				__snake_case	:						Union[str, Any]						=				model_class_name.from_pretrained('''albert-base-v2'''					)
				__snake_case	:						Tuple						=				model(np.ones((1, 1)					)					)
				self.assertIsNotNone(a_					)



@require_flax
class 			_UpperCAmelCase (							unittest.TestCase				):






		'''simple docstring'''

		@slow
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						Tuple						=				FlaxAlbertModel.from_pretrained('''albert-base-v2'''					)
			__snake_case	:						List[str]						=				np.array([[0, 3_45, 2_32, 3_28, 7_40, 1_40, 16_95, 69, 60_78, 15_88, 2]]					)
			__snake_case	:						Tuple						=				np.array([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]					)
			__snake_case	:						Dict						=				model(a_				,       attention_mask=a_					)[0]
			__snake_case	:						Dict						=				(1, 11, 7_68)
			self.assertEqual(output.shape				,       a_					)
			__snake_case	:						int						=				np.array(
			    [[[-0.6513, 1.5035, -0.2766], [-0.6515, 1.5046, -0.2780], [-0.6512, 1.5049, -0.2784]]]					)

			self.assertTrue(jnp.allclose(output[:, 1:4, 1:4]				,       a_				,       atol=1E-4					)					)






"""simple docstring"""


import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin, prepare_image_inputs


if is_torch_available():
    import torch

if is_vision_available():
    from PIL import Image

    from transformers import MobileViTImageProcessor


class 				a (						unittest.TestCase      ):


    def __init__(    self		:     Dict      , __lowerCAmelCase		:     Tuple      , __lowerCAmelCase		:     Optional[Any]=7      , __lowerCAmelCase		:     Optional[Any]=3      , __lowerCAmelCase		:     Optional[Any]=18      , __lowerCAmelCase		:     str=30      , __lowerCAmelCase		:     List[str]=400      , __lowerCAmelCase		:     Union[str, Any]=True      , __lowerCAmelCase		:     str=None      , __lowerCAmelCase		:     Optional[int]=True      , __lowerCAmelCase		:     int=None      , __lowerCAmelCase		:     List[str]=True      , ):
      _UpperCAmelCase         =					size if size is not None else {"""shortest_edge""": 20}
      _UpperCAmelCase         =					crop_size if crop_size is not None else {"""height""": 18, """width""": 18}
      _UpperCAmelCase         =					parent
      _UpperCAmelCase         =					batch_size
      _UpperCAmelCase         =					num_channels
      _UpperCAmelCase         =					image_size
      _UpperCAmelCase         =					min_resolution
      _UpperCAmelCase         =					max_resolution
      _UpperCAmelCase         =					do_resize
      _UpperCAmelCase         =					size
      _UpperCAmelCase         =					do_center_crop
      _UpperCAmelCase         =					crop_size
      _UpperCAmelCase         =					do_flip_channel_order


    def    lowerCAmelCase_     (    self		:     List[str]    ):
      return {
          "do_resize": self.do_resize,
          "size": self.size,
          "do_center_crop": self.do_center_crop,
          "crop_size": self.crop_size,
          "do_flip_channel_order": self.do_flip_channel_order,
      }



@require_torch
@require_vision
class 				a (						lowerCAmelCase_		,							unittest.TestCase      ):
    _snake_case   :     Optional[int]   							=							MobileViTImageProcessor if is_vision_available() else None


    def    lowerCAmelCase_     (    self		:     Optional[Any]    ):
      _UpperCAmelCase         =					MobileViTImageProcessingTester(self    )


    @property
    def    lowerCAmelCase_     (    self		:     Tuple    ):
      return self.image_processor_tester.prepare_image_processor_dict()


    def    lowerCAmelCase_     (    self		:     Dict    ):
      _UpperCAmelCase         =					self.image_processing_class(**self.image_processor_dict    )
      self.assertTrue(hasattr(__lowerCAmelCase      , """do_resize"""    )    )
      self.assertTrue(hasattr(__lowerCAmelCase      , """size"""    )    )
      self.assertTrue(hasattr(__lowerCAmelCase      , """do_center_crop"""    )    )
      self.assertTrue(hasattr(__lowerCAmelCase      , """center_crop"""    )    )
      self.assertTrue(hasattr(__lowerCAmelCase      , """do_flip_channel_order"""    )    )


    def    lowerCAmelCase_     (    self		:     Union[str, Any]    ):
      _UpperCAmelCase         =					self.image_processing_class.from_dict(self.image_processor_dict    )
      self.assertEqual(image_processor.size      , {"""shortest_edge""": 20}    )
      self.assertEqual(image_processor.crop_size      , {"""height""": 18, """width""": 18}    )

      _UpperCAmelCase         =					self.image_processing_class.from_dict(self.image_processor_dict      , size=42      , crop_size=84    )
      self.assertEqual(image_processor.size      , {"""shortest_edge""": 42}    )
      self.assertEqual(image_processor.crop_size      , {"""height""": 84, """width""": 84}    )


    def    lowerCAmelCase_     (    self		:     List[str]    ):
      pass


    def    lowerCAmelCase_     (    self		:     Dict    ):
      # Initialize image_processing
      _UpperCAmelCase         =					self.image_processing_class(**self.image_processor_dict    )
      # create random PIL images
      _UpperCAmelCase         =					prepare_image_inputs(self.image_processor_tester      , equal_resolution=__lowerCAmelCase    )
      for image in image_inputs:
        self.assertIsInstance(__lowerCAmelCase      , Image.Image    )

      # Test not batched input
      _UpperCAmelCase         =					image_processing(image_inputs[0]      , return_tensors="""pt"""    ).pixel_values
      self.assertEqual(
          encoded_images.shape      , (
              1,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size["""height"""],
              self.image_processor_tester.crop_size["""width"""],
          )      , )

      # Test batched
      _UpperCAmelCase         =					image_processing(__lowerCAmelCase      , return_tensors="""pt"""    ).pixel_values
      self.assertEqual(
          encoded_images.shape      , (
              self.image_processor_tester.batch_size,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size["""height"""],
              self.image_processor_tester.crop_size["""width"""],
          )      , )


    def    lowerCAmelCase_     (    self		:     str    ):
      # Initialize image_processing
      _UpperCAmelCase         =					self.image_processing_class(**self.image_processor_dict    )
      # create random numpy tensors
      _UpperCAmelCase         =					prepare_image_inputs(self.image_processor_tester      , equal_resolution=__lowerCAmelCase      , numpify=__lowerCAmelCase    )
      for image in image_inputs:
        self.assertIsInstance(__lowerCAmelCase      , np.ndarray    )

      # Test not batched input
      _UpperCAmelCase         =					image_processing(image_inputs[0]      , return_tensors="""pt"""    ).pixel_values
      self.assertEqual(
          encoded_images.shape      , (
              1,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size["""height"""],
              self.image_processor_tester.crop_size["""width"""],
          )      , )

      # Test batched
      _UpperCAmelCase         =					image_processing(__lowerCAmelCase      , return_tensors="""pt"""    ).pixel_values
      self.assertEqual(
          encoded_images.shape      , (
              self.image_processor_tester.batch_size,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size["""height"""],
              self.image_processor_tester.crop_size["""width"""],
          )      , )


    def    lowerCAmelCase_     (    self		:     Optional[int]    ):
      # Initialize image_processing
      _UpperCAmelCase         =					self.image_processing_class(**self.image_processor_dict    )
      # create random PyTorch tensors
      _UpperCAmelCase         =					prepare_image_inputs(self.image_processor_tester      , equal_resolution=__lowerCAmelCase      , torchify=__lowerCAmelCase    )
      for image in image_inputs:
        self.assertIsInstance(__lowerCAmelCase      , torch.Tensor    )

      # Test not batched input
      _UpperCAmelCase         =					image_processing(image_inputs[0]      , return_tensors="""pt"""    ).pixel_values
      self.assertEqual(
          encoded_images.shape      , (
              1,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size["""height"""],
              self.image_processor_tester.crop_size["""width"""],
          )      , )

      # Test batched
      _UpperCAmelCase         =					image_processing(__lowerCAmelCase      , return_tensors="""pt"""    ).pixel_values
      self.assertEqual(
          encoded_images.shape      , (
              self.image_processor_tester.batch_size,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size["""height"""],
              self.image_processor_tester.crop_size["""width"""],
          )      , )
