






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							, lowercase__							, )				->				Optional[Any]:
				__A    =							parent
				__A    =							13
				__A    =							7
				__A    =							True
				__A    =							True
				__A    =							True
				__A    =							True
				__A    =							True
				__A    =							99
				__A    =							32
				__A    =							2
				__A    =							4
				__A    =							37
				__A    =							"gelu"
				__A    =							0.1
				__A    =							0.1
				__A    =							512
				__A    =							16
				__A    =							2
				__A    =							0.02
				__A    =							3
				__A    =							4
				__A    =							None
				__A    =							self.vocab_size - 1






		def 					_lowerCamelCase					(      self						)				->				Tuple:
				__A    =							ids_tensor([self.batch_size, self.seq_length]							, self.vocab_size						)

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

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

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

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

				__A    =							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							, )

				__A    =							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 					_lowerCamelCase					(      self							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, *lowercase__						)				->				Dict:
				__A    =							TFOpenAIGPTModel(config=lowercase__						)
				__A    =							{"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}
				__A    =							model(lowercase__						)

				__A    =							[input_ids, input_mask]
				__A    =							model(lowercase__						)

				__A    =							model(lowercase__						)

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






		def 					_lowerCamelCase					(      self							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, *lowercase__						)				->				Dict:
				__A    =							TFOpenAIGPTLMHeadModel(config=lowercase__						)
				__A    =							{"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}
				__A    =							model(lowercase__						)
				self.parent.assertEqual(result.logits.shape							, (self.batch_size, self.seq_length, self.vocab_size)						)






		def 					_lowerCamelCase					(      self							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, *lowercase__						)				->				Optional[int]:
				__A    =							TFOpenAIGPTDoubleHeadsModel(config=lowercase__						)

				__A    =							tf.tile(tf.expand_dims(lowercase__							, 1						)							, (1, self.num_choices, 1)						)
				__A    =							tf.tile(tf.expand_dims(lowercase__							, 1						)							, (1, self.num_choices, 1)						)
				__A    =							tf.tile(tf.expand_dims(lowercase__							, 1						)							, (1, self.num_choices, 1)						)

				__A    =							{
				    "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,
				}
				__A    =							model(lowercase__						)
				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 					_lowerCamelCase					(      self							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, *lowercase__						)				->				Union[str, Any]:
				__A    =							self.num_labels
				__A    =							ids_tensor([self.batch_size]							, self.type_sequence_label_size						)
				__A    =							{
				    "input_ids": input_ids,
				    "attention_mask": input_mask,
				    "token_type_ids": token_type_ids,
				    "labels": sequence_labels,
				}
				__A    =							TFOpenAIGPTForSequenceClassification(lowercase__						)
				__A    =							model(lowercase__						)
				self.parent.assertEqual(result.logits.shape							, (self.batch_size, self.num_labels)						)






		def 					_lowerCamelCase					(      self						)				->				str:
				__A    =							self.prepare_config_and_inputs()

				(
				    (
				    __A
				) ,   (
				    __A
				) ,   (
				    __A
				) ,   (
				    __A
				) ,   (
				    __A
				) ,   (
				    __A
				) ,   (
				    __A
				) ,   (
				    __A
				) ,   (
				    __A
				) ,   
				)    =							config_and_inputs

				__A    =							{"input_ids": input_ids, "token_type_ids": token_type_ids, "attention_mask": input_mask}
				return config, inputs_dict





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






		def 					_lowerCamelCase					(      self							, lowercase__							, lowercase__							, lowercase__							, lowercase__							, lowercase__						)				->				Dict:
				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 					_lowerCamelCase					(      self						)				->				Dict:
				__A    =							TFOpenAIGPTModelTester(self						)
				__A    =							ConfigTester(self							, config_class=lowercase__							, n_embd=37						)






		def 					_lowerCamelCase					(      self						)				->				List[str]:
				self.config_tester.run_common_tests()






		def 					_lowerCamelCase					(      self						)				->				str:
				__A    =							self.model_tester.prepare_config_and_inputs()
				self.model_tester.create_and_check_openai_gpt_model(*lowercase__						)






		def 					_lowerCamelCase					(      self						)				->				Optional[Any]:
				__A    =							self.model_tester.prepare_config_and_inputs()
				self.model_tester.create_and_check_openai_gpt_lm_head(*lowercase__						)






		def 					_lowerCamelCase					(      self						)				->				Dict:
				__A    =							self.model_tester.prepare_config_and_inputs()
				self.model_tester.create_and_check_openai_gpt_double_head(*lowercase__						)






		def 					_lowerCamelCase					(      self						)				->				Tuple:
				__A    =							self.model_tester.prepare_config_and_inputs()
				self.model_tester.create_and_check_openai_gpt_for_sequence_classification(*lowercase__						)






		@slow
		def 					_lowerCamelCase					(      self						)				->				Optional[int]:
				for model_name in TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
						__A    =							TFOpenAIGPTModel.from_pretrained(lowercase__						)
						self.assertIsNotNone(lowercase__						)





@require_tf
class        a__      (	unittest.TestCase		):






		@slow
		def 					_lowerCamelCase					(      self						)				->				Dict:
				__A    =							TFOpenAIGPTLMHeadModel.from_pretrained("openai-gpt"						)
				__A    =							tf.convert_to_tensor([[481, 4735, 544]]							, dtype=tf.intaa						)  # the president is
				__A    =							[
				    481,
				    4735,
				    544,
				    246,
				    963,
				    870,
				    762,
				    239,
				    244,
				    40477,
				    244,
				    249,
				    719,
				    881,
				    487,
				    544,
				    240,
				    244,
				    603,
				    481,
				]  # the president is a very good man. " \n " i\'m sure he is, " said the

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









import sys
from typing import Tuple

import numpy as np
import torch
from PIL import Image
from torch import nn

from transformers.image_utils import PILImageResampling
from utils import img_tensorize





class        a__      :






		def __init__(      self							, lowercase__							, lowercase__=sys.maxsize						)				->				str:
				__A    =							"bilinear"
				__A    =							max_size
				__A    =							short_edge_length






		def __call__(      self							, lowercase__						)				->				Dict:
				__A    =							[]
				for img in imgs:
						__A ,   __A    =							img.shape[:2]
						# later: provide list and randomly choose index for resize
						__A    =							np.random.randint(self.short_edge_length[0]							, self.short_edge_length[1] + 1						)
						if size == 0:
								return img
						__A    =							size * 1.0 / min(lowercase__							, lowercase__						)
						if h < w:
								__A ,   __A    =							size, scale * w
						else:
								__A ,   __A    =							scale * h, size
						if max(lowercase__							, lowercase__						) > self.max_size:
								__A    =							self.max_size * 1.0 / max(lowercase__							, lowercase__						)
								__A    =							newh * scale
								__A    =							neww * scale
						__A    =							int(neww + 0.5						)
						__A    =							int(newh + 0.5						)

						if img.dtype == np.uinta:
								__A    =							Image.fromarray(lowercase__						)
								__A    =							pil_image.resize((neww, newh)							, PILImageResampling.BILINEAR						)
								__A    =							np.asarray(lowercase__						)
						else:
								__A    =							img.permute(2							, 0							, 1						).unsqueeze(0						)  # 3, 0, 1)  # hw(c) -> nchw
								__A    =							nn.functional.interpolate(
								    lowercase__							, (newh, neww)							, mode=self.interp_method							, align_corners=lowercase__						).squeeze(0						)
						img_augs.append(lowercase__						)

				return img_augs





class        a__      :






		def __init__(      self							, lowercase__						)				->				Union[str, Any]:
				__A    =							ResizeShortestEdge([cfg.INPUT.MIN_SIZE_TEST, cfg.INPUT.MIN_SIZE_TEST]							, cfg.INPUT.MAX_SIZE_TEST						)
				__A    =							cfg.INPUT.FORMAT
				__A    =							cfg.SIZE_DIVISIBILITY
				__A    =							cfg.PAD_VALUE
				__A    =							cfg.INPUT.MAX_SIZE_TEST
				__A    =							cfg.MODEL.DEVICE
				__A    =							torch.tensor(cfg.MODEL.PIXEL_STD						).to(self.device						).view(len(cfg.MODEL.PIXEL_STD						)							, 1							, 1						)
				__A    =							torch.tensor(cfg.MODEL.PIXEL_MEAN						).to(self.device						).view(len(cfg.MODEL.PIXEL_STD						)							, 1							, 1						)
				__A    =							lambda lowercase__						: (x - self.pixel_mean) / self.pixel_std






		def 					_lowerCamelCase					(      self							, lowercase__						)				->				Optional[int]:
				__A    =							tuple(max(lowercase__						) for s in zip(*[img.shape for img in images]						)						)
				__A    =							[im.shape[-2:] for im in images]
				__A    =							[
				    nn.functional.pad(
				        lowercase__							, [0, max_size[-1] - size[1], 0, max_size[-2] - size[0]]							, value=self.pad_value							, )
				    for size, im in zip(lowercase__							, lowercase__						)
				]

				return torch.stack(lowercase__						), torch.tensor(lowercase__						)






		def __call__(      self							, lowercase__							, lowercase__=False						)				->				int:
				with torch.no_grad():
						if not isinstance(lowercase__							, lowercase__						):
								__A    =							[images]
						if single_image:
								assert len(lowercase__						) == 1
						for i in range(len(lowercase__						)						):
								if isinstance(images[i]							, torch.Tensor						):
										images.insert(lowercase__							, images.pop(lowercase__						).to(self.device						).float()						)
								elif not isinstance(images[i]							, torch.Tensor						):
										images.insert(
										    lowercase__							, torch.as_tensor(img_tensorize(images.pop(lowercase__						)							, input_format=self.input_format						)						)
										    .to(self.device						)
										    .float()							, )
            # resize smallest edge
						__A    =							torch.tensor([im.shape[:2] for im in images]						)
						__A    =							self.aug(lowercase__						)
						# transpose images and convert to torch tensors
						# images = [torch.as_tensor(i.astype("float32")).permute(2, 0, 1).to(self.device) for i in images]
						# now normalize before pad to avoid useless arithmetic
						__A    =							[self.normalizer(lowercase__						) for x in images]
						# now pad them to do the following operations
						__A ,   __A    =							self.pad(lowercase__						)
						# Normalize

						if self.size_divisibility > 0:
								raise NotImplementedError()
						# pad
						__A    =							torch.true_divide(lowercase__							, lowercase__						)
						if single_image:
								return images[0], sizes[0], scales_yx[0]
						else:
								return images, sizes, scales_yx



def      UpperCAmelCase						( lowerCAmelCase__					,     lowerCAmelCase__	):


		'''simple docstring'''

		boxes[:, 0::2] *= scale_yx[:, 1]
		boxes[:, 1::2] *= scale_yx[:, 0]
		return boxes





def      UpperCAmelCase						( lowerCAmelCase__					,     lowerCAmelCase__	):


		'''simple docstring'''

		assert torch.isfinite(lowerCAmelCase__	).all(), "Box tensor contains infinite or NaN!"
		__A ,   __A    =							box_size
		tensor[:, 0].clamp_(min=0					,     max=lowerCAmelCase__	)
		tensor[:, 1].clamp_(min=0					,     max=lowerCAmelCase__	)
		tensor[:, 2].clamp_(min=0					,     max=lowerCAmelCase__	)
		tensor[:, 3].clamp_(min=0					,     max=lowerCAmelCase__	)

