





"""simple docstring"""





import json
import pathlib
import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision, slow
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 DetaImageProcessor






class    _lowerCAmelCase  (	unittest.TestCase			):
       """simple docstring"""




       def __init__(       self       ,					__UpperCAmelCase       ,					__UpperCAmelCase=7       ,					__UpperCAmelCase=3       ,					__UpperCAmelCase=3_0       ,					__UpperCAmelCase=4_0_0       ,					__UpperCAmelCase=True       ,					__UpperCAmelCase=None       ,					__UpperCAmelCase=True       ,					__UpperCAmelCase=[0.5, 0.5, 0.5]       ,					__UpperCAmelCase=[0.5, 0.5, 0.5]       ,					__UpperCAmelCase=True       ,					__UpperCAmelCase=1 / 2_5_5       ,					__UpperCAmelCase=True       ,					):



         '''simple docstring'''

         lowerCAmelCase__     :Any											=				size if size is not None else {'shortest_edge': 1_8, 'longest_edge': 1_3_3_3}
         lowerCAmelCase__     :List[Any]											=				parent
         lowerCAmelCase__     :int											=				batch_size
         lowerCAmelCase__     :Union[str, Any]											=				num_channels
         lowerCAmelCase__     :Any											=				min_resolution
         lowerCAmelCase__     :Dict											=				max_resolution
         lowerCAmelCase__     :Dict											=				do_resize
         lowerCAmelCase__     :Optional[Any]											=				size
         lowerCAmelCase__     :List[str]											=				do_normalize
         lowerCAmelCase__     :str											=				image_mean
         lowerCAmelCase__     :Tuple											=				image_std
         lowerCAmelCase__     :Dict											=				do_rescale
         lowerCAmelCase__     :Tuple											=				rescale_factor
         lowerCAmelCase__     :Optional[int]											=				do_pad






       def 	snake_case		(       self ):



         '''simple docstring'''

         return {
             "do_resize": self.do_resize,
             "size": self.size,
             "do_normalize": self.do_normalize,
             "image_mean": self.image_mean,
             "image_std": self.image_std,
             "do_rescale": self.do_rescale,
             "rescale_factor": self.rescale_factor,
             "do_pad": self.do_pad,
         }






       def 	snake_case		(       self       ,					__UpperCAmelCase       ,					__UpperCAmelCase=False ):



         '''simple docstring'''

         if not batched:
           lowerCAmelCase__     :str											=				image_inputs[0]
           if isinstance(__UpperCAmelCase       ,					Image.Image ):
             lowerCAmelCase__				,							lowerCAmelCase__     :Optional[int]											=				image.size
           else:
             lowerCAmelCase__				,							lowerCAmelCase__     :str											=				image.shape[1], image.shape[2]
           if w < h:
             lowerCAmelCase__     :int											=				int(self.size['shortest_edge'] * h / w )
             lowerCAmelCase__     :List[str]											=				self.size['shortest_edge']
           elif w > h:
             lowerCAmelCase__     :Union[str, Any]											=				self.size['shortest_edge']
             lowerCAmelCase__     :Any											=				int(self.size['shortest_edge'] * w / h )
           else:
             lowerCAmelCase__     :int											=				self.size['shortest_edge']
             lowerCAmelCase__     :Union[str, Any]											=				self.size['shortest_edge']

         else:
           lowerCAmelCase__     :Optional[Any]											=				[]
           for image in image_inputs:
             lowerCAmelCase__				,							lowerCAmelCase__     :Union[str, Any]											=				self.get_expected_values([image] )
             expected_values.append((expected_height, expected_width) )
           lowerCAmelCase__     :List[str]											=				max(__UpperCAmelCase       ,					key=lambda __UpperCAmelCase : item[0] )[0]
           lowerCAmelCase__     :List[Any]											=				max(__UpperCAmelCase       ,					key=lambda __UpperCAmelCase : item[1] )[1]

         return expected_height, expected_width






@require_torch
@require_vision
class    _lowerCAmelCase  (	a    ,  unittest.TestCase			):
       """simple docstring"""




       __magic_name__	:Any						    =   DetaImageProcessor if is_vision_available() else None






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :int											=				DetaImageProcessingTester(self )






       @property
       def 	snake_case		(       self ):



         '''simple docstring'''

         return self.image_processor_tester.prepare_image_processor_dict()






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Tuple											=				self.image_processing_class(**self.image_processor_dict )
         self.assertTrue(hasattr(__UpperCAmelCase       ,					'image_mean' ) )
         self.assertTrue(hasattr(__UpperCAmelCase       ,					'image_std' ) )
         self.assertTrue(hasattr(__UpperCAmelCase       ,					'do_normalize' ) )
         self.assertTrue(hasattr(__UpperCAmelCase       ,					'do_resize' ) )
         self.assertTrue(hasattr(__UpperCAmelCase       ,					'do_rescale' ) )
         self.assertTrue(hasattr(__UpperCAmelCase       ,					'do_pad' ) )
         self.assertTrue(hasattr(__UpperCAmelCase       ,					'size' ) )






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Dict											=				self.image_processing_class.from_dict(self.image_processor_dict )
         self.assertEqual(image_processor.size       ,					{'shortest_edge': 1_8, 'longest_edge': 1_3_3_3} )
         self.assertEqual(image_processor.do_pad       ,					__UpperCAmelCase )






       def 	snake_case		(       self ):



         '''simple docstring'''

         pass






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Optional[Any]											=				self.image_processing_class(**self.image_processor_dict )
         # create random PIL images
         lowerCAmelCase__     :Any											=				prepare_image_inputs(self.image_processor_tester       ,					equal_resolution=__UpperCAmelCase )
         for image in image_inputs:
           self.assertIsInstance(__UpperCAmelCase       ,					Image.Image )

         # Test not batched input
         lowerCAmelCase__     :Dict											=				image_processing(image_inputs[0]       ,					return_tensors='pt' ).pixel_values

         lowerCAmelCase__				,							lowerCAmelCase__     :Optional[int]											=				self.image_processor_tester.get_expected_values(__UpperCAmelCase )

         self.assertEqual(
             encoded_images.shape       ,					(1, self.image_processor_tester.num_channels, expected_height, expected_width)       ,					)

         # Test batched
         lowerCAmelCase__				,							lowerCAmelCase__     :Tuple											=				self.image_processor_tester.get_expected_values(__UpperCAmelCase       ,					batched=__UpperCAmelCase )

         lowerCAmelCase__     :Optional[Any]											=				image_processing(__UpperCAmelCase       ,					return_tensors='pt' ).pixel_values
         self.assertEqual(
             encoded_images.shape       ,					(
                 self.image_processor_tester.batch_size,
                 self.image_processor_tester.num_channels,
                 expected_height,
                 expected_width,
             )       ,					)






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :List[str]											=				self.image_processing_class(**self.image_processor_dict )
         # create random numpy tensors
         lowerCAmelCase__     :Dict											=				prepare_image_inputs(self.image_processor_tester       ,					equal_resolution=__UpperCAmelCase       ,					numpify=__UpperCAmelCase )
         for image in image_inputs:
           self.assertIsInstance(__UpperCAmelCase       ,					np.ndarray )

         # Test not batched input
         lowerCAmelCase__     :List[Any]											=				image_processing(image_inputs[0]       ,					return_tensors='pt' ).pixel_values

         lowerCAmelCase__				,							lowerCAmelCase__     :List[Any]											=				self.image_processor_tester.get_expected_values(__UpperCAmelCase )

         self.assertEqual(
             encoded_images.shape       ,					(1, self.image_processor_tester.num_channels, expected_height, expected_width)       ,					)

         # Test batched
         lowerCAmelCase__     :Tuple											=				image_processing(__UpperCAmelCase       ,					return_tensors='pt' ).pixel_values

         lowerCAmelCase__				,							lowerCAmelCase__     :List[str]											=				self.image_processor_tester.get_expected_values(__UpperCAmelCase       ,					batched=__UpperCAmelCase )

         self.assertEqual(
             encoded_images.shape       ,					(
                 self.image_processor_tester.batch_size,
                 self.image_processor_tester.num_channels,
                 expected_height,
                 expected_width,
             )       ,					)






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :List[str]											=				self.image_processing_class(**self.image_processor_dict )
         # create random PyTorch tensors
         lowerCAmelCase__     :List[Any]											=				prepare_image_inputs(self.image_processor_tester       ,					equal_resolution=__UpperCAmelCase       ,					torchify=__UpperCAmelCase )
         for image in image_inputs:
           self.assertIsInstance(__UpperCAmelCase       ,					torch.Tensor )

         # Test not batched input
         lowerCAmelCase__     :Any											=				image_processing(image_inputs[0]       ,					return_tensors='pt' ).pixel_values

         lowerCAmelCase__				,							lowerCAmelCase__     :Optional[int]											=				self.image_processor_tester.get_expected_values(__UpperCAmelCase )

         self.assertEqual(
             encoded_images.shape       ,					(1, self.image_processor_tester.num_channels, expected_height, expected_width)       ,					)

         # Test batched
         lowerCAmelCase__     :str											=				image_processing(__UpperCAmelCase       ,					return_tensors='pt' ).pixel_values

         lowerCAmelCase__				,							lowerCAmelCase__     :List[Any]											=				self.image_processor_tester.get_expected_values(__UpperCAmelCase       ,					batched=__UpperCAmelCase )

         self.assertEqual(
             encoded_images.shape       ,					(
                 self.image_processor_tester.batch_size,
                 self.image_processor_tester.num_channels,
                 expected_height,
                 expected_width,
             )       ,					)






       @slow
       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Optional[Any]											=				Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png' )
         with open('./tests/fixtures/tests_samples/COCO/coco_annotations.txt'       ,					'r' ) as f:
           lowerCAmelCase__     :Dict											=				json.loads(f.read() )

         lowerCAmelCase__     :int											=				{'image_id': 3_9_7_6_9, 'annotations': target}

         # encode them
         lowerCAmelCase__     :int											=				DetaImageProcessor()
         lowerCAmelCase__     :List[Any]											=				image_processing(images=__UpperCAmelCase       ,					annotations=__UpperCAmelCase       ,					return_tensors='pt' )

         # verify pixel values
         lowerCAmelCase__     :str											=				torch.Size([1, 3, 8_0_0, 1_0_6_6] )
         self.assertEqual(encoding['pixel_values'].shape       ,					__UpperCAmelCase )

         lowerCAmelCase__     :Optional[int]											=				torch.tensor([0.27_96, 0.31_38, 0.34_81] )
         self.assertTrue(torch.allclose(encoding['pixel_values'][0, 0, 0, :3]       ,					__UpperCAmelCase       ,					atol=1E-4 ) )

         # verify area
         lowerCAmelCase__     :Dict											=				torch.tensor([58_87.96_00, 1_12_50.20_61, 48_93_53.84_38, 83_71_22.75_00, 14_79_67.51_56, 16_57_32.34_38] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['area']       ,					__UpperCAmelCase ) )
         # verify boxes
         lowerCAmelCase__     :Tuple											=				torch.Size([6, 4] )
         self.assertEqual(encoding['labels'][0]['boxes'].shape       ,					__UpperCAmelCase )
         lowerCAmelCase__     :Dict											=				torch.tensor([0.55_03, 0.27_65, 0.06_04, 0.22_15] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['boxes'][0]       ,					__UpperCAmelCase       ,					atol=1E-3 ) )
         # verify image_id
         lowerCAmelCase__     :Any											=				torch.tensor([3_9_7_6_9] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['image_id']       ,					__UpperCAmelCase ) )
         # verify is_crowd
         lowerCAmelCase__     :Union[str, Any]											=				torch.tensor([0, 0, 0, 0, 0, 0] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['iscrowd']       ,					__UpperCAmelCase ) )
         # verify class_labels
         lowerCAmelCase__     :Optional[Any]											=				torch.tensor([7_5, 7_5, 6_3, 6_5, 1_7, 1_7] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['class_labels']       ,					__UpperCAmelCase ) )
         # verify orig_size
         lowerCAmelCase__     :str											=				torch.tensor([4_8_0, 6_4_0] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['orig_size']       ,					__UpperCAmelCase ) )
         # verify size
         lowerCAmelCase__     :Any											=				torch.tensor([8_0_0, 1_0_6_6] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['size']       ,					__UpperCAmelCase ) )






       @slow
       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Optional[Any]											=				Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png' )
         with open('./tests/fixtures/tests_samples/COCO/coco_panoptic_annotations.txt'       ,					'r' ) as f:
           lowerCAmelCase__     :Dict											=				json.loads(f.read() )

         lowerCAmelCase__     :Dict											=				{'file_name': '000000039769.png', 'image_id': 3_9_7_6_9, 'segments_info': target}

         lowerCAmelCase__     :Union[str, Any]											=				pathlib.Path('./tests/fixtures/tests_samples/COCO/coco_panoptic' )

         # encode them
         lowerCAmelCase__     :Dict											=				DetaImageProcessor(format='coco_panoptic' )
         lowerCAmelCase__     :Optional[int]											=				image_processing(images=__UpperCAmelCase       ,					annotations=__UpperCAmelCase       ,					masks_path=__UpperCAmelCase       ,					return_tensors='pt' )

         # verify pixel values
         lowerCAmelCase__     :str											=				torch.Size([1, 3, 8_0_0, 1_0_6_6] )
         self.assertEqual(encoding['pixel_values'].shape       ,					__UpperCAmelCase )

         lowerCAmelCase__     :Union[str, Any]											=				torch.tensor([0.27_96, 0.31_38, 0.34_81] )
         self.assertTrue(torch.allclose(encoding['pixel_values'][0, 0, 0, :3]       ,					__UpperCAmelCase       ,					atol=1E-4 ) )

         # verify area
         lowerCAmelCase__     :Tuple											=				torch.tensor([14_79_79.68_75, 16_55_27.04_69, 48_46_38.59_38, 1_12_92.93_75, 58_79.65_62, 76_34.11_47] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['area']       ,					__UpperCAmelCase ) )
         # verify boxes
         lowerCAmelCase__     :int											=				torch.Size([6, 4] )
         self.assertEqual(encoding['labels'][0]['boxes'].shape       ,					__UpperCAmelCase )
         lowerCAmelCase__     :Optional[Any]											=				torch.tensor([0.26_25, 0.54_37, 0.46_88, 0.86_25] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['boxes'][0]       ,					__UpperCAmelCase       ,					atol=1E-3 ) )
         # verify image_id
         lowerCAmelCase__     :Optional[int]											=				torch.tensor([3_9_7_6_9] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['image_id']       ,					__UpperCAmelCase ) )
         # verify is_crowd
         lowerCAmelCase__     :Tuple											=				torch.tensor([0, 0, 0, 0, 0, 0] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['iscrowd']       ,					__UpperCAmelCase ) )
         # verify class_labels
         lowerCAmelCase__     :List[str]											=				torch.tensor([1_7, 1_7, 6_3, 7_5, 7_5, 9_3] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['class_labels']       ,					__UpperCAmelCase ) )
         # verify masks
         lowerCAmelCase__     :Optional[int]											=				8_2_2_8_7_3
         self.assertEqual(encoding['labels'][0]['masks'].sum().item()       ,					__UpperCAmelCase )
         # verify orig_size
         lowerCAmelCase__     :Optional[int]											=				torch.tensor([4_8_0, 6_4_0] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['orig_size']       ,					__UpperCAmelCase ) )
         # verify size
         lowerCAmelCase__     :Union[str, Any]											=				torch.tensor([8_0_0, 1_0_6_6] )
         self.assertTrue(torch.allclose(encoding['labels'][0]['size']       ,					__UpperCAmelCase ) )







"""simple docstring"""





from collections import OrderedDict
from typing import TYPE_CHECKING, Any, Mapping, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


if TYPE_CHECKING:
  from ... import FeatureExtractionMixin, PreTrainedTokenizerBase, TensorType


__A											=						logging.get_logger(__name__)

__A											=						{
    """microsoft/deberta-v2-xlarge""": """https://huggingface.co/microsoft/deberta-v2-xlarge/resolve/main/config.json""",
    """microsoft/deberta-v2-xxlarge""": """https://huggingface.co/microsoft/deberta-v2-xxlarge/resolve/main/config.json""",
    """microsoft/deberta-v2-xlarge-mnli""": (
        """https://huggingface.co/microsoft/deberta-v2-xlarge-mnli/resolve/main/config.json"""
    ),
    """microsoft/deberta-v2-xxlarge-mnli""": (
        """https://huggingface.co/microsoft/deberta-v2-xxlarge-mnli/resolve/main/config.json"""
    ),
}






class    _lowerCAmelCase  (	a			):
       """simple docstring"""




       __magic_name__	:Union[str, Any]						    =   """deberta-v2"""






       def __init__(       self       ,					__UpperCAmelCase=1_2_8_1_0_0       ,					__UpperCAmelCase=1_5_3_6       ,					__UpperCAmelCase=2_4       ,					__UpperCAmelCase=2_4       ,					__UpperCAmelCase=6_1_4_4       ,					__UpperCAmelCase="gelu"       ,					__UpperCAmelCase=0.1       ,					__UpperCAmelCase=0.1       ,					__UpperCAmelCase=5_1_2       ,					__UpperCAmelCase=0       ,					__UpperCAmelCase=0.02       ,					__UpperCAmelCase=1E-7       ,					__UpperCAmelCase=False       ,					__UpperCAmelCase=-1       ,					__UpperCAmelCase=0       ,					__UpperCAmelCase=True       ,					__UpperCAmelCase=None       ,					__UpperCAmelCase=0       ,					__UpperCAmelCase="gelu"       ,					**__UpperCAmelCase       ,					):



         '''simple docstring'''

         super().__init__(**__UpperCAmelCase )

         lowerCAmelCase__     :Optional[int]											=				hidden_size
         lowerCAmelCase__     :Optional[int]											=				num_hidden_layers
         lowerCAmelCase__     :Optional[int]											=				num_attention_heads
         lowerCAmelCase__     :int											=				intermediate_size
         lowerCAmelCase__     :Dict											=				hidden_act
         lowerCAmelCase__     :Tuple											=				hidden_dropout_prob
         lowerCAmelCase__     :Optional[int]											=				attention_probs_dropout_prob
         lowerCAmelCase__     :Optional[Any]											=				max_position_embeddings
         lowerCAmelCase__     :Optional[Any]											=				type_vocab_size
         lowerCAmelCase__     :List[Any]											=				initializer_range
         lowerCAmelCase__     :Dict											=				relative_attention
         lowerCAmelCase__     :Union[str, Any]											=				max_relative_positions
         lowerCAmelCase__     :List[str]											=				pad_token_id
         lowerCAmelCase__     :Optional[int]											=				position_biased_input

         # Backwards compatibility
         if type(__UpperCAmelCase ) == str:
           lowerCAmelCase__     :Dict											=				[x.strip() for x in pos_att_type.lower().split('|' )]

         lowerCAmelCase__     :str											=				pos_att_type
         lowerCAmelCase__     :Dict											=				vocab_size
         lowerCAmelCase__     :Tuple											=				layer_norm_eps

         lowerCAmelCase__     :Optional[Any]											=				kwargs.get('pooler_hidden_size'       ,					__UpperCAmelCase )
         lowerCAmelCase__     :Union[str, Any]											=				pooler_dropout
         lowerCAmelCase__     :int											=				pooler_hidden_act






class    _lowerCAmelCase  (	a			):
       """simple docstring"""




       @property
       def 	snake_case		(       self ):



         '''simple docstring'''

         if self.task == "multiple-choice":
           lowerCAmelCase__     :str											=				{0: 'batch', 1: 'choice', 2: 'sequence'}
         else:
           lowerCAmelCase__     :Tuple											=				{0: 'batch', 1: 'sequence'}
         if self._config.type_vocab_size > 0:
           return OrderedDict(
               [('input_ids', dynamic_axis), ('attention_mask', dynamic_axis), ('token_type_ids', dynamic_axis)] )
         else:
           return OrderedDict([('input_ids', dynamic_axis), ('attention_mask', dynamic_axis)] )






       @property
       def 	snake_case		(       self ):



         '''simple docstring'''

         return 1_2






       def 	snake_case		(       self       ,					__UpperCAmelCase       ,					__UpperCAmelCase = -1       ,					__UpperCAmelCase = -1       ,					__UpperCAmelCase = -1       ,					__UpperCAmelCase = False       ,					__UpperCAmelCase = None       ,					__UpperCAmelCase = 3       ,					__UpperCAmelCase = 4_0       ,					__UpperCAmelCase = 4_0       ,					__UpperCAmelCase = None       ,					):



         '''simple docstring'''

         lowerCAmelCase__     :Union[str, Any]											=				super().generate_dummy_inputs(preprocessor=__UpperCAmelCase       ,					framework=__UpperCAmelCase )
         if self._config.type_vocab_size == 0 and "token_type_ids" in dummy_inputs:
           del dummy_inputs["token_type_ids"]
         return dummy_inputs
