

import unittest

import numpy as np
from datasets import load_dataset

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 BeitImageProcessor



class       __snake_case  (    unittest.TestCase       ):

  def __init__(					self						,		_A						,		_A=7						,		_A=3						,		_A=18						,		_A=30						,		_A=400						,		_A=True						,		_A=None						,		_A=True						,		_A=None						,		_A=True						,		_A=[0.5, 0.5, 0.5]						,		_A=[0.5, 0.5, 0.5]						,		_A=False						,		):
      SCREAMING_SNAKE_CASE_									=						size if size is not None else {'height': 20, 'width': 20}
      SCREAMING_SNAKE_CASE_									=						crop_size if crop_size is not None else {'height': 18, 'width': 18}
      SCREAMING_SNAKE_CASE_									=						parent
      SCREAMING_SNAKE_CASE_									=						batch_size
      SCREAMING_SNAKE_CASE_									=						num_channels
      SCREAMING_SNAKE_CASE_									=						image_size
      SCREAMING_SNAKE_CASE_									=						min_resolution
      SCREAMING_SNAKE_CASE_									=						max_resolution
      SCREAMING_SNAKE_CASE_									=						do_resize
      SCREAMING_SNAKE_CASE_									=						size
      SCREAMING_SNAKE_CASE_									=						do_center_crop
      SCREAMING_SNAKE_CASE_									=						crop_size
      SCREAMING_SNAKE_CASE_									=						do_normalize
      SCREAMING_SNAKE_CASE_									=						image_mean
      SCREAMING_SNAKE_CASE_									=						image_std
      SCREAMING_SNAKE_CASE_									=						do_reduce_labels


  def 						lowerCAmelCase__     (					self):
      return {
          "do_resize": self.do_resize,
          "size": self.size,
          "do_center_crop": self.do_center_crop,
          "crop_size": self.crop_size,
          "do_normalize": self.do_normalize,
          "image_mean": self.image_mean,
          "image_std": self.image_std,
          "do_reduce_labels": self.do_reduce_labels,
      }






def 					_UpperCAmelCase       (  ):
    SCREAMING_SNAKE_CASE_									=						load_dataset('hf-internal-testing/fixtures_ade20k' ,   split='test'       )

    SCREAMING_SNAKE_CASE_									=						Image.open(dataset[0]['file']       )
    SCREAMING_SNAKE_CASE_									=						Image.open(dataset[1]['file']       )

    return image, map


def 					_UpperCAmelCase       (  ):
    SCREAMING_SNAKE_CASE_									=						load_dataset('hf-internal-testing/fixtures_ade20k' ,   split='test'       )

    SCREAMING_SNAKE_CASE_									=						Image.open(ds[0]['file']       )
    SCREAMING_SNAKE_CASE_									=						Image.open(ds[1]['file']       )
    SCREAMING_SNAKE_CASE_									=						Image.open(ds[2]['file']       )
    SCREAMING_SNAKE_CASE_									=						Image.open(ds[3]['file']       )

    return [imagea, imagea], [mapa, mapa]





@require_torch
@require_vision
class       __snake_case  (    __UpperCAmelCase     , unittest.TestCase       ):
  __lowerCAmelCase     :	Union[str, Any]						 =  BeitImageProcessor if is_vision_available() else None

  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						BeitImageProcessingTester(self)

  @property
  def 						lowerCAmelCase__     (					self):
      return self.image_processor_tester.prepare_image_processor_dict()

  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						self.image_processing_class(**self.image_processor_dict)
      self.assertTrue(hasattr(__SCREAMING_SNAKE_CASE						,		'do_resize'))
      self.assertTrue(hasattr(__SCREAMING_SNAKE_CASE						,		'size'))
      self.assertTrue(hasattr(__SCREAMING_SNAKE_CASE						,		'do_center_crop'))
      self.assertTrue(hasattr(__SCREAMING_SNAKE_CASE						,		'center_crop'))
      self.assertTrue(hasattr(__SCREAMING_SNAKE_CASE						,		'do_normalize'))
      self.assertTrue(hasattr(__SCREAMING_SNAKE_CASE						,		'image_mean'))
      self.assertTrue(hasattr(__SCREAMING_SNAKE_CASE						,		'image_std'))

  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						self.image_processing_class.from_dict(self.image_processor_dict)
      self.assertEqual(image_processor.size						,		{'height': 20, 'width': 20})
      self.assertEqual(image_processor.crop_size						,		{'height': 18, 'width': 18})
      self.assertEqual(image_processor.do_reduce_labels						,		__SCREAMING_SNAKE_CASE)

      SCREAMING_SNAKE_CASE_									=						self.image_processing_class.from_dict(
          self.image_processor_dict						,		size=42						,		crop_size=84						,		reduce_labels=__SCREAMING_SNAKE_CASE)
      self.assertEqual(image_processor.size						,		{'height': 42, 'width': 42})
      self.assertEqual(image_processor.crop_size						,		{'height': 84, 'width': 84})
      self.assertEqual(image_processor.do_reduce_labels						,		__SCREAMING_SNAKE_CASE)

  def 						lowerCAmelCase__     (					self):
      pass

  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						self.image_processing_class(**self.image_processor_dict)
      # create random PIL images
      SCREAMING_SNAKE_CASE_									=						prepare_image_inputs(self.image_processor_tester						,		equal_resolution=__SCREAMING_SNAKE_CASE)
      for image in image_inputs:
          self.assertIsInstance(__SCREAMING_SNAKE_CASE						,		Image.Image)

      # Test not batched input
      SCREAMING_SNAKE_CASE_									=						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
      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		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):
      SCREAMING_SNAKE_CASE_									=						self.image_processing_class(**self.image_processor_dict)
      # create random numpy tensors
      SCREAMING_SNAKE_CASE_									=						prepare_image_inputs(self.image_processor_tester						,		equal_resolution=__SCREAMING_SNAKE_CASE						,		numpify=__SCREAMING_SNAKE_CASE)
      for image in image_inputs:
          self.assertIsInstance(__SCREAMING_SNAKE_CASE						,		np.ndarray)

      # Test not batched input
      SCREAMING_SNAKE_CASE_									=						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
      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		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):
      SCREAMING_SNAKE_CASE_									=						self.image_processing_class(**self.image_processor_dict)
      # create random PyTorch tensors
      SCREAMING_SNAKE_CASE_									=						prepare_image_inputs(self.image_processor_tester						,		equal_resolution=__SCREAMING_SNAKE_CASE						,		torchify=__SCREAMING_SNAKE_CASE)
      for image in image_inputs:
          self.assertIsInstance(__SCREAMING_SNAKE_CASE						,		torch.Tensor)

      # Test not batched input
      SCREAMING_SNAKE_CASE_									=						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
      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		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):
      SCREAMING_SNAKE_CASE_									=						self.image_processing_class(**self.image_processor_dict)
      # create random PyTorch tensors
      SCREAMING_SNAKE_CASE_									=						prepare_image_inputs(self.image_processor_tester						,		equal_resolution=__SCREAMING_SNAKE_CASE						,		torchify=__SCREAMING_SNAKE_CASE)
      SCREAMING_SNAKE_CASE_									=						[]
      for image in image_inputs:
          self.assertIsInstance(__SCREAMING_SNAKE_CASE						,		torch.Tensor)
          maps.append(torch.zeros(image.shape[-2:]).long())

      # Test not batched input
      SCREAMING_SNAKE_CASE_									=						image_processing(image_inputs[0]						,		maps[0]						,		return_tensors='pt')
      self.assertEqual(
          encoding['pixel_values'].shape						,		(
              1,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size['height'],
              self.image_processor_tester.crop_size['width'],
          )						,		)
      self.assertEqual(
          encoding['labels'].shape						,		(
              1,
              self.image_processor_tester.crop_size['height'],
              self.image_processor_tester.crop_size['width'],
          )						,		)
      self.assertEqual(encoding['labels'].dtype						,		torch.long)
      self.assertTrue(encoding['labels'].min().item() >= 0)
      self.assertTrue(encoding['labels'].max().item() <= 255)

      # Test batched
      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		__SCREAMING_SNAKE_CASE						,		return_tensors='pt')
      self.assertEqual(
          encoding['pixel_values'].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'],
          )						,		)
      self.assertEqual(
          encoding['labels'].shape						,		(
              self.image_processor_tester.batch_size,
              self.image_processor_tester.crop_size['height'],
              self.image_processor_tester.crop_size['width'],
          )						,		)
      self.assertEqual(encoding['labels'].dtype						,		torch.long)
      self.assertTrue(encoding['labels'].min().item() >= 0)
      self.assertTrue(encoding['labels'].max().item() <= 255)

      # Test not batched input (PIL images)
      SCREAMING_SNAKE_CASE_							,			SCREAMING_SNAKE_CASE_									=						prepare_semantic_single_inputs()

      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		__SCREAMING_SNAKE_CASE						,		return_tensors='pt')
      self.assertEqual(
          encoding['pixel_values'].shape						,		(
              1,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size['height'],
              self.image_processor_tester.crop_size['width'],
          )						,		)
      self.assertEqual(
          encoding['labels'].shape						,		(
              1,
              self.image_processor_tester.crop_size['height'],
              self.image_processor_tester.crop_size['width'],
          )						,		)
      self.assertEqual(encoding['labels'].dtype						,		torch.long)
      self.assertTrue(encoding['labels'].min().item() >= 0)
      self.assertTrue(encoding['labels'].max().item() <= 255)

      # Test batched input (PIL images)
      SCREAMING_SNAKE_CASE_							,			SCREAMING_SNAKE_CASE_									=						prepare_semantic_batch_inputs()

      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		__SCREAMING_SNAKE_CASE						,		return_tensors='pt')
      self.assertEqual(
          encoding['pixel_values'].shape						,		(
              2,
              self.image_processor_tester.num_channels,
              self.image_processor_tester.crop_size['height'],
              self.image_processor_tester.crop_size['width'],
          )						,		)
      self.assertEqual(
          encoding['labels'].shape						,		(
              2,
              self.image_processor_tester.crop_size['height'],
              self.image_processor_tester.crop_size['width'],
          )						,		)
      self.assertEqual(encoding['labels'].dtype						,		torch.long)
      self.assertTrue(encoding['labels'].min().item() >= 0)
      self.assertTrue(encoding['labels'].max().item() <= 255)


  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						self.image_processing_class(**self.image_processor_dict)

      # ADE20k has 150 classes, and the background is included, so labels should be between 0 and 150
      SCREAMING_SNAKE_CASE_							,			SCREAMING_SNAKE_CASE_									=						prepare_semantic_single_inputs()
      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		__SCREAMING_SNAKE_CASE						,		return_tensors='pt')
      self.assertTrue(encoding['labels'].min().item() >= 0)
      self.assertTrue(encoding['labels'].max().item() <= 150)

      SCREAMING_SNAKE_CASE_									=						True
      SCREAMING_SNAKE_CASE_									=						image_processing(__SCREAMING_SNAKE_CASE						,		__SCREAMING_SNAKE_CASE						,		return_tensors='pt')
      self.assertTrue(encoding['labels'].min().item() >= 0)
      self.assertTrue(encoding['labels'].max().item() <= 255)





import unittest

from transformers import TrOCRConfig
from transformers.testing_utils import is_torch_available, require_torch, torch_device

from ...generation.test_utils import GenerationTesterMixin
from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
       import torch

       from transformers.models.trocr.modeling_trocr import TrOCRDecoder, TrOCRForCausalLM



@require_torch
class       __snake_case  :

  def __init__(					self						,		_A						,		_A=99						,		_A=13						,		_A=16						,		_A=7						,		_A=True						,		_A=True						,		_A=True						,		_A=False						,		_A=True						,		_A=2						,		_A=32						,		_A=4						,		_A=4						,		_A=30						,		_A=0						,		_A=1						,		_A=2						,		_A=None						,		):
      SCREAMING_SNAKE_CASE_									=						parent
      SCREAMING_SNAKE_CASE_									=						batch_size
      SCREAMING_SNAKE_CASE_									=						decoder_seq_length
      # For common tests
      SCREAMING_SNAKE_CASE_									=						self.decoder_seq_length
      SCREAMING_SNAKE_CASE_									=						is_training
      SCREAMING_SNAKE_CASE_									=						use_attention_mask
      SCREAMING_SNAKE_CASE_									=						use_labels

      SCREAMING_SNAKE_CASE_									=						vocab_size
      SCREAMING_SNAKE_CASE_									=						d_model
      SCREAMING_SNAKE_CASE_									=						d_model
      SCREAMING_SNAKE_CASE_									=						decoder_layers
      SCREAMING_SNAKE_CASE_									=						decoder_layers
      SCREAMING_SNAKE_CASE_									=						decoder_ffn_dim
      SCREAMING_SNAKE_CASE_									=						decoder_attention_heads
      SCREAMING_SNAKE_CASE_									=						decoder_attention_heads
      SCREAMING_SNAKE_CASE_									=						eos_token_id
      SCREAMING_SNAKE_CASE_									=						bos_token_id
      SCREAMING_SNAKE_CASE_									=						pad_token_id
      SCREAMING_SNAKE_CASE_									=						decoder_start_token_id
      SCREAMING_SNAKE_CASE_									=						use_cache
      SCREAMING_SNAKE_CASE_									=						max_position_embeddings

      SCREAMING_SNAKE_CASE_									=						None
      SCREAMING_SNAKE_CASE_									=						decoder_seq_length
      SCREAMING_SNAKE_CASE_									=						2
      SCREAMING_SNAKE_CASE_									=						1

  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						ids_tensor([self.batch_size, self.decoder_seq_length]						,		self.vocab_size)

      SCREAMING_SNAKE_CASE_									=						None
      if self.use_attention_mask:
          SCREAMING_SNAKE_CASE_									=						ids_tensor([self.batch_size, self.decoder_seq_length]						,		vocab_size=2)

      SCREAMING_SNAKE_CASE_									=						None
      if self.use_labels:
          SCREAMING_SNAKE_CASE_									=						ids_tensor([self.batch_size, self.decoder_seq_length]						,		self.vocab_size)

      SCREAMING_SNAKE_CASE_									=						TrOCRConfig(
          vocab_size=self.vocab_size						,		d_model=self.d_model						,		decoder_layers=self.decoder_layers						,		decoder_ffn_dim=self.decoder_ffn_dim						,		decoder_attention_heads=self.decoder_attention_heads						,		eos_token_id=self.eos_token_id						,		bos_token_id=self.bos_token_id						,		use_cache=self.use_cache						,		pad_token_id=self.pad_token_id						,		decoder_start_token_id=self.decoder_start_token_id						,		max_position_embeddings=self.max_position_embeddings						,		)

      return (config, input_ids, attention_mask, lm_labels)

  def 						lowerCAmelCase__     (					self						,		_A						,		_A						,		_A						,		_A						,		):
      SCREAMING_SNAKE_CASE_									=						True
      SCREAMING_SNAKE_CASE_									=						TrOCRDecoder(config=_A).to(_A).eval()
      SCREAMING_SNAKE_CASE_									=						input_ids[:2]

      input_ids[input_ids == 0] += 1
      # first forward pass
      SCREAMING_SNAKE_CASE_									=						model(_A						,		use_cache=_A)
      SCREAMING_SNAKE_CASE_									=						model(_A)
      SCREAMING_SNAKE_CASE_									=						model(_A						,		use_cache=_A)

      self.parent.assertTrue(len(_A) == len(_A))
      self.parent.assertTrue(len(_A) == len(_A) + 1)

      SCREAMING_SNAKE_CASE_									=						outputs['past_key_values']

      # create hypothetical next token and extent to next_input_ids
      SCREAMING_SNAKE_CASE_									=						ids_tensor((2, 1)						,		config.vocab_size - 1) + 1

      # append to next input_ids and
      SCREAMING_SNAKE_CASE_									=						torch.cat([input_ids, next_tokens]						,		dim=-1)

      SCREAMING_SNAKE_CASE_									=						model(_A)['last_hidden_state']
      SCREAMING_SNAKE_CASE_									=						model(_A						,		past_key_values=_A)['last_hidden_state']

      # select random slice
      SCREAMING_SNAKE_CASE_									=						ids_tensor((1,)						,		output_from_past.shape[-1]).item()
      SCREAMING_SNAKE_CASE_									=						output_from_no_past[:, next_input_ids.shape[-1] - 1, random_slice_idx].detach()
      SCREAMING_SNAKE_CASE_									=						output_from_past[:, 0, random_slice_idx].detach()

      # test that outputs are equal for slice
      assert torch.allclose(_A						,		_A						,		atol=1E-3)


  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						self.prepare_config_and_inputs()
      SCREAMING_SNAKE_CASE_							,			SCREAMING_SNAKE_CASE_							,			SCREAMING_SNAKE_CASE_							,			SCREAMING_SNAKE_CASE_									=						config_and_inputs

      SCREAMING_SNAKE_CASE_									=						{'input_ids': input_ids, 'attention_mask': attention_mask}
      return config, inputs_dict






@require_torch
class       __snake_case  (    lowerCAmelCase__     , lowerCAmelCase__     , lowerCAmelCase__     , unittest.TestCase       ):
  __lowerCAmelCase     :	Tuple						 =  (TrOCRDecoder, TrOCRForCausalLM) if is_torch_available() else ()
  __lowerCAmelCase     :	Union[str, Any]						 =  (TrOCRForCausalLM,) if is_torch_available() else ()
  __lowerCAmelCase     :	str						 =  {'text-generation': TrOCRForCausalLM} if is_torch_available() else {}
  __lowerCAmelCase     :	Any						 =  True
  __lowerCAmelCase     :	str						 =  False

  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						TrOCRStandaloneDecoderModelTester(self						,		is_training=_A)
      SCREAMING_SNAKE_CASE_									=						ConfigTester(self						,		config_class=_A)

  def 						lowerCAmelCase__     (					self):
      pass

  def 						lowerCAmelCase__     (					self):
      pass

  def 						lowerCAmelCase__     (					self):
      pass

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

  def 						lowerCAmelCase__     (					self):
      SCREAMING_SNAKE_CASE_									=						self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_decoder_model_past(*_A)

  def 						lowerCAmelCase__     (					self):
      return


  @unittest.skip('The model doesn\'t support left padding')  # and it's not used enough to be worth fixing :)
  def 						lowerCAmelCase__     (					self):
      pass


