






"""simple docstring"""



from __future__ import annotations

import unittest

from transformers import OpenAIGPTConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
    import tensorflow as tf

    from transformers.models.openai.modeling_tf_openai import (
        TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST,
        TFOpenAIGPTDoubleHeadsModel,
        TFOpenAIGPTForSequenceClassification,
        TFOpenAIGPTLMHeadModel,
        TFOpenAIGPTModel,
    )

class 			a	:







    def __init__(     self				,						_lowerCamelCase				,						):
      lowercase				       =			parent
      lowercase				       =			1_3
      lowercase				       =			7
      lowercase				       =			True
      lowercase				       =			True
      lowercase				       =			True
      lowercase				       =			True
      lowercase				       =			True
      lowercase				       =			9_9
      lowercase				       =			3_2
      lowercase				       =			2
      lowercase				       =			4
      lowercase				       =			3_7
      lowercase				       =			'gelu'
      lowercase				       =			0.1
      lowercase				       =			0.1
      lowercase				       =			5_1_2
      lowercase				       =			1_6
      lowercase				       =			2
      lowercase				       =			0.0_2
      lowercase				       =			3
      lowercase				       =			4
      lowercase				       =			None
      lowercase				       =			self.vocab_size - 1







    def      UpperCamelCase_ (     self			):
      lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						self.vocab_size			)

      lowercase				       =			None
      if self.use_input_mask:
        lowercase				       =			random_attention_mask([self.batch_size, self.seq_length]			)

      lowercase				       =			None
      if self.use_token_type_ids:
        lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						self.type_vocab_size			)

      lowercase				       =			None
      if self.use_mc_token_ids:
        lowercase				       =			ids_tensor([self.batch_size, self.num_choices]				,						self.seq_length			)

      lowercase				       =			None
      lowercase				       =			None
      lowercase				       =			None
      if self.use_labels:
        lowercase				       =			ids_tensor([self.batch_size]				,						self.type_sequence_label_size			)
        lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						self.num_labels			)
        lowercase				       =			ids_tensor([self.batch_size]				,						self.num_choices			)

      lowercase				       =			OpenAIGPTConfig(
          vocab_size=self.vocab_size				,						n_embd=self.hidden_size				,						n_layer=self.num_hidden_layers				,						n_head=self.num_attention_heads				,						n_positions=self.max_position_embeddings				,						pad_token_id=self.pad_token_id				,						)

      lowercase				       =			ids_tensor([self.num_hidden_layers, self.num_attention_heads]				,						2			)

      return (
          config,
          input_ids,
          input_mask,
          head_mask,
          token_type_ids,
          mc_token_ids,
          sequence_labels,
          token_labels,
          choice_labels,
      )







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						*_lowerCamelCase			):
      lowercase				       =			TFOpenAIGPTModel(config=_lowerCamelCase			)
      lowercase				       =			{'input_ids': input_ids, 'attention_mask': input_mask, 'token_type_ids': token_type_ids}
      lowercase				       =			model(_lowerCamelCase			)

      lowercase				       =			[input_ids, input_mask]
      lowercase				       =			model(_lowerCamelCase			)

      lowercase				       =			model(_lowerCamelCase			)

      self.parent.assertEqual(result.last_hidden_state.shape				,						(self.batch_size, self.seq_length, self.hidden_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						*_lowerCamelCase			):
      lowercase				       =			TFOpenAIGPTLMHeadModel(config=_lowerCamelCase			)
      lowercase				       =			{'input_ids': input_ids, 'attention_mask': input_mask, 'token_type_ids': token_type_ids}
      lowercase				       =			model(_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length, self.vocab_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						*_lowerCamelCase			):
      lowercase				       =			TFOpenAIGPTDoubleHeadsModel(config=_lowerCamelCase			)

      lowercase				       =			tf.tile(tf.expand_dims(_lowerCamelCase				,						1			)				,						(1, self.num_choices, 1)			)
      lowercase				       =			tf.tile(tf.expand_dims(_lowerCamelCase				,						1			)				,						(1, self.num_choices, 1)			)
      lowercase				       =			tf.tile(tf.expand_dims(_lowerCamelCase				,						1			)				,						(1, self.num_choices, 1)			)

      lowercase				       =			{
          'input_ids': multiple_choice_inputs_ids,
          'mc_token_ids': mc_token_ids,
          'attention_mask': multiple_choice_input_mask,
          'token_type_ids': multiple_choice_token_type_ids,
      }
      lowercase				       =			model(_lowerCamelCase			)
      self.parent.assertEqual(
          result.logits.shape				,						(self.batch_size, self.num_choices, self.seq_length, self.vocab_size)			)
      self.parent.assertEqual(result.mc_logits.shape				,						(self.batch_size, self.num_choices)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						*_lowerCamelCase			):
      lowercase				       =			self.num_labels
      lowercase				       =			ids_tensor([self.batch_size]				,						self.type_sequence_label_size			)
      lowercase				       =			{
          'input_ids': input_ids,
          'attention_mask': input_mask,
          'token_type_ids': token_type_ids,
          'labels': sequence_labels,
      }
      lowercase				       =			TFOpenAIGPTForSequenceClassification(_lowerCamelCase			)
      lowercase				       =			model(_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.num_labels)			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.prepare_config_and_inputs()

      (
          (
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	
      )				       =			config_and_inputs

      lowercase				       =			{'input_ids': input_ids, 'token_type_ids': token_type_ids, 'attention_mask': input_mask}
      return config, inputs_dict


@require_tf
class 			a	(  a_,							a_,							unittest.TestCase      ):
    UpperCAmelCase_					:	Any      	=(
        (TFOpenAIGPTModel, TFOpenAIGPTLMHeadModel, TFOpenAIGPTDoubleHeadsModel, TFOpenAIGPTForSequenceClassification)
        if is_tf_available()
        else ()
    )
    UpperCAmelCase_					:	int      	=(
        (TFOpenAIGPTLMHeadModel,) if is_tf_available() else ()
    )  # TODO (PVP): Add Double HeadsModel when generate() function is changed accordingly
    UpperCAmelCase_					:	str      	=(
        {
            "feature-extraction": TFOpenAIGPTModel,
            "text-classification": TFOpenAIGPTForSequenceClassification,
            "text-generation": TFOpenAIGPTLMHeadModel,
            "zero-shot": TFOpenAIGPTForSequenceClassification,
        }
        if is_tf_available()
        else {}
    )
    UpperCAmelCase_					:	List[str]      	=False
    UpperCAmelCase_					:	Optional[int]      	=False







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase			):
      if pipeline_test_casse_name == "ZeroShotClassificationPipelineTests":
        # Get `tokenizer does not have a padding token` error for both fast/slow tokenizers.
        # `OpenAIGPTConfig` was never used in pipeline tests, either because of a missing checkpoint or because a
        # tiny config could not be created.
        return True

      return False







    def      UpperCamelCase_ (     self			):
      lowercase				       =			TFOpenAIGPTModelTester(self			)
      lowercase				       =			ConfigTester(self				,						config_class=_lowerCamelCase				,						n_embd=3_7			)







    def      UpperCamelCase_ (     self			):
      self.config_tester.run_common_tests()







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_openai_gpt_model(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_openai_gpt_lm_head(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_openai_gpt_double_head(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_openai_gpt_for_sequence_classification(*_lowerCamelCase			)







    @slow
    def      UpperCamelCase_ (     self			):
      for model_name in TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
        lowercase				       =			TFOpenAIGPTModel.from_pretrained(_lowerCamelCase			)
        self.assertIsNotNone(_lowerCamelCase			)


@require_tf
class 			a	(  unittest.TestCase      ):







    @slow
    def      UpperCamelCase_ (     self			):
      lowercase				       =			TFOpenAIGPTLMHeadModel.from_pretrained('openai-gpt'			)
      lowercase				       =			tf.convert_to_tensor([[4_8_1, 4_7_3_5, 5_4_4]]				,						dtype=tf.intaa			)  # the president is
      lowercase				       =			[
          4_8_1,
          4_7_3_5,
          5_4_4,
          2_4_6,
          9_6_3,
          8_7_0,
          7_6_2,
          2_3_9,
          2_4_4,
          4_0_4_7_7,
          2_4_4,
          2_4_9,
          7_1_9,
          8_8_1,
          4_8_7,
          5_4_4,
          2_4_0,
          2_4_4,
          6_0_3,
          4_8_1,
      ]  # the president is a very good man. " \n " i\'m sure he is, " said the

      lowercase				       =			model.generate(_lowerCamelCase				,						do_sample=_lowerCamelCase			)
      self.assertListEqual(output_ids[0].numpy().tolist()				,						_lowerCamelCase			)










"""simple docstring"""



import inspect
import unittest

import requests

from transformers import MgpstrConfig
from transformers.testing_utils import require_torch, require_vision, slow, torch_device
from transformers.utils import is_torch_available, is_vision_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
    import torch
    from torch import nn

    from transformers import MgpstrForSceneTextRecognition


if is_vision_available():
    from PIL import Image

    from transformers import MgpstrProcessor

class 			a	:







    def __init__(     self				,						_lowerCamelCase				,						_lowerCamelCase=False				,						_lowerCamelCase=1_3				,						_lowerCamelCase=(3_2, 1_2_8)				,						_lowerCamelCase=4				,						_lowerCamelCase=3				,						_lowerCamelCase=2_7				,						_lowerCamelCase=3_8				,						_lowerCamelCase=9_9				,						_lowerCamelCase=9_9				,						_lowerCamelCase=3_2				,						_lowerCamelCase=5				,						_lowerCamelCase=4				,						_lowerCamelCase=4.0				,						_lowerCamelCase=2_5_7				,						_lowerCamelCase=None				,						):
      lowercase				       =			parent
      lowercase				       =			is_training
      lowercase				       =			batch_size
      lowercase				       =			image_size
      lowercase				       =			patch_size
      lowercase				       =			num_channels
      lowercase				       =			max_token_length
      lowercase				       =			num_character_labels
      lowercase				       =			num_bpe_labels
      lowercase				       =			num_wordpiece_labels
      lowercase				       =			hidden_size
      lowercase				       =			num_hidden_layers
      lowercase				       =			num_attention_heads
      lowercase				       =			mlp_ratio
      lowercase				       =			patch_embeds_hidden_size
      lowercase				       =			output_hidden_states







    def      UpperCamelCase_ (     self			):
      lowercase				       =			floats_tensor([self.batch_size, self.num_channels, self.image_size[0], self.image_size[1]]			)
      lowercase				       =			self.get_config()
      return config, pixel_values







    def      UpperCamelCase_ (     self			):
      return MgpstrConfig(
          image_size=self.image_size				,						patch_size=self.patch_size				,						num_channels=self.num_channels				,						max_token_length=self.max_token_length				,						num_character_labels=self.num_character_labels				,						num_bpe_labels=self.num_bpe_labels				,						num_wordpiece_labels=self.num_wordpiece_labels				,						hidden_size=self.hidden_size				,						num_hidden_layers=self.num_hidden_layers				,						num_attention_heads=self.num_attention_heads				,						mlp_ratio=self.mlp_ratio				,						output_hidden_states=self.output_hidden_states				,						)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase			):
      lowercase				       =			MgpstrForSceneTextRecognition(_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      with torch.no_grad():
        lowercase				       =			model(_lowerCamelCase			)
      self.parent.assertEqual(
          generated_ids[0][0].shape				,						(self.batch_size, self.max_token_length, self.num_character_labels)			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.prepare_config_and_inputs()
      lowercase       ,	lowercase				       =			config_and_inputs
      lowercase				       =			{'pixel_values': pixel_values}
      return config, inputs_dict


@require_torch
class 			a	(  a_,							a_,							unittest.TestCase      ):
    UpperCAmelCase_					:	Optional[int]      	=(MgpstrForSceneTextRecognition,) if is_torch_available() else ()
    UpperCAmelCase_					:	Optional[Any]      	={"feature-extraction": MgpstrForSceneTextRecognition} if is_torch_available() else {}
    UpperCAmelCase_					:	Union[str, Any]      	=False

    UpperCAmelCase_					:	Optional[Any]      	=False
    UpperCAmelCase_					:	Dict      	=False
    UpperCAmelCase_					:	str      	=False
    UpperCAmelCase_					:	str      	=False







    def      UpperCamelCase_ (     self			):
      lowercase				       =			MgpstrModelTester(self			)
      lowercase				       =			ConfigTester(self				,						config_class=_lowerCamelCase				,						has_text_modality=_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      self.config_tester.run_common_tests()







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_model(*_lowerCamelCase			)







    @unittest.skip(reason='MgpstrModel does not use inputs_embeds'			)
    def      UpperCamelCase_ (     self			):
      pass







    def      UpperCamelCase_ (     self			):
      lowercase       ,	lowercase				       =			self.model_tester.prepare_config_and_inputs_for_common()

      for model_class in self.all_model_classes:
        lowercase				       =			model_class(_lowerCamelCase			)
        self.assertIsInstance(model.get_input_embeddings()				,						(nn.Module)			)
        lowercase				       =			model.get_output_embeddings()
        self.assertTrue(x is None or isinstance(_lowerCamelCase				,						nn.Linear			)			)







    def      UpperCamelCase_ (     self			):
      lowercase       ,	lowercase				       =			self.model_tester.prepare_config_and_inputs_for_common()

      for model_class in self.all_model_classes:
        lowercase				       =			model_class(_lowerCamelCase			)
        lowercase				       =			inspect.signature(model.forward			)
        # signature.parameters is an OrderedDict => so arg_names order is deterministic
        lowercase				       =			[*signature.parameters.keys()]

        lowercase				       =			['pixel_values']
        self.assertListEqual(arg_names[:1]				,						_lowerCamelCase			)







    @unittest.skip(reason='MgpstrModel does not support feedforward chunking'			)
    def      UpperCamelCase_ (     self			):
      pass







    def      UpperCamelCase_ (     self			):
      lowercase       ,	lowercase				       =			self.model_tester.prepare_config_and_inputs_for_common()

      for model_class in self.all_model_classes:
        if not model_class.supports_gradient_checkpointing:
          continue

        lowercase				       =			True
        lowercase				       =			model_class(_lowerCamelCase			)
        self.assertTrue(model.is_gradient_checkpointing			)







    def      UpperCamelCase_ (     self			):
      def check_hidden_states_output(_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase			):
        lowercase				       =			model_class(_lowerCamelCase			)
        model.to(_lowerCamelCase			)
        model.eval()

        with torch.no_grad():
          lowercase				       =			model(**self._prepare_for_class(_lowerCamelCase				,						_lowerCamelCase			)			)

        lowercase				       =			outputs.hidden_states

        lowercase				       =			getattr(
            self.model_tester				,						'expected_num_hidden_layers'				,						self.model_tester.num_hidden_layers + 1			)
        self.assertEqual(len(_lowerCamelCase			)				,						_lowerCamelCase			)

        self.assertListEqual(
            list(hidden_states[0].shape[-2:]			)				,						[self.model_tester.patch_embeds_hidden_size, self.model_tester.hidden_size]				,						)

      lowercase       ,	lowercase				       =			self.model_tester.prepare_config_and_inputs_for_common()

      for model_class in self.all_model_classes:
        lowercase				       =			True
        check_hidden_states_output(_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase			)

        # check that output_hidden_states also work using config
        del inputs_dict["output_hidden_states"]
        lowercase				       =			True

        check_hidden_states_output(_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase       ,	lowercase				       =			self.model_tester.prepare_config_and_inputs_for_common()

      lowercase				       =			_config_zero_init(_lowerCamelCase			)
      for model_class in self.all_model_classes:
        lowercase				       =			model_class(config=_lowerCamelCase			)
        for name, param in model.named_parameters():
          if isinstance(_lowerCamelCase				,						(nn.Linear, nn.Convad, nn.LayerNorm)			):
            if param.requires_grad:
              self.assertIn(
                  ((param.data.mean() * 1e9).round() / 1e9).item()				,						[0.0, 1.0]				,						msg=F'Parameter {name} of model {model_class} seems not properly initialized'				,						)







    @unittest.skip(reason='Retain_grad is tested in individual model tests'			)
    def      UpperCamelCase_ (     self			):
      pass


def 		_SCREAMING_SNAKE_CASE					(       ):





  '''simple docstring'''





  lowercase				       =			'https://i.postimg.cc/ZKwLg2Gw/367-14.png'
  lowercase				       =			Image.open(requests.get(__snake_case						,   stream=__snake_case       ).raw       ).convert('RGB'       )
  return im



@require_vision
@require_torch
class 			a	(  unittest.TestCase      ):







    @slow
    def      UpperCamelCase_ (     self			):
      lowercase				       =			'alibaba-damo/mgp-str-base'
      lowercase				       =			MgpstrForSceneTextRecognition.from_pretrained(_lowerCamelCase			).to(_lowerCamelCase			)
      lowercase				       =			MgpstrProcessor.from_pretrained(_lowerCamelCase			)

      lowercase				       =			prepare_img()
      lowercase				       =			processor(images=_lowerCamelCase				,						return_tensors='pt'			).pixel_values.to(_lowerCamelCase			)

      # forward pass
      with torch.no_grad():
        lowercase				       =			model(_lowerCamelCase			)

      # verify the logits
      self.assertEqual(outputs.logits[0].shape				,						torch.Size((1, 2_7, 3_8)			)			)

      lowercase				       =			processor.batch_decode(outputs.logits			)
      lowercase				       =			'ticket'

      self.assertEqual(out_strs['generated_text'][0]				,						_lowerCamelCase			)

      lowercase				       =			torch.tensor(
          [[[-3_9.5_3_9_7, -4_4.4_0_2_4, -3_6.1_8_4_4], [-6_1.4_7_0_9, -6_3.8_6_3_9, -5_8.3_4_5_4], [-7_4.0_2_2_5, -6_8.5_4_9_4, -7_1.2_1_6_4]]]				,						device=_lowerCamelCase				,						)

      self.assertTrue(torch.allclose(outputs.logits[0][:, 1:4, 1:4]				,						_lowerCamelCase				,						atol=1e-4			)			)


