





import json
import os
from functools import lru_cache
from typing import List, Optional, Tuple

import regex as re

from ...tokenization_utils import AddedToken, PreTrainedTokenizer
from ...utils import logging


UpperCamelCase__          =logging.get_logger(__name__)


UpperCamelCase__          ={'vocab_file': 'vocab.json', 'merges_file': 'merges.txt'}

# See all MVP models at https://huggingface.co/models?filter=mvp
UpperCamelCase__          ={
    'vocab_file': {
        'RUCAIBox/mvp': 'https://huggingface.co/RUCAIBox/mvp/resolve/main/vocab.json',
    },
    'added_tokens.json': {
        'RUCAIBox/mvp': 'https://huggingface.co/RUCAIBox/mvp/resolve/main/added_tokens.json',
    },
    'merges_file': {
        'RUCAIBox/mvp': 'https://huggingface.co/RUCAIBox/mvp/resolve/main/merges.txt',
    },
}

UpperCamelCase__          ={
    'RUCAIBox/mvp': 1024,
}






@lru_cache()
def 			lowerCamelCase__	():
     _SCREAMING_SNAKE_CASE				:		int  			=							(
         list(range(ord("!"		),				ord("~"		) + 1		)		) + list(range(ord("¡"		),				ord("¬"		) + 1		)		) + list(range(ord("®"		),				ord("ÿ"		) + 1		)		)
     )
     _SCREAMING_SNAKE_CASE				:		Any  			=							bs[:]
     _SCREAMING_SNAKE_CASE				:		int  			=							0
     for b in range(2**8		):
          if b not in bs:
               bs.append(__lowerCamelCase		)
               cs.append(2**8 + n		)
               n += 1
     _SCREAMING_SNAKE_CASE				:		int  			=							[chr(__lowerCamelCase		) for n in cs]
     return dict(zip(__lowerCamelCase,				__lowerCamelCase		)		)






def 			lowerCamelCase__	(__lowerCamelCase		):
     _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							set()
     _SCREAMING_SNAKE_CASE				:		Optional[int]  			=							word[0]
     for char in word[1:]:
          pairs.add((prev_char, char)		)
          _SCREAMING_SNAKE_CASE				:		Tuple  			=							char
     return pairs





class 	lowerCAmelCase__(       __lowercase			):






       '''simple docstring'''


       __snake_case       	=			VOCAB_FILES_NAMES
       __snake_case       	=			PRETRAINED_VOCAB_FILES_MAP
       __snake_case       	=			PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
       __snake_case       	=			['input_ids', 'attention_mask']




       def __init__(					self			,  __lowerCamelCase			,  __lowerCamelCase			,  __lowerCamelCase="replace"			,  __lowerCamelCase="<s>"			,  __lowerCamelCase="</s>"			,  __lowerCamelCase="</s>"			,  __lowerCamelCase="<s>"			,  __lowerCamelCase="<unk>"			,  __lowerCamelCase="<pad>"			,  __lowerCamelCase="<mask>"			,  __lowerCamelCase=False			,  **__lowerCamelCase			,  )	->   List[Any]:
            _SCREAMING_SNAKE_CASE				:		Union[str, Any]  			=							AddedToken(__lowerCamelCase			,  lstrip=__lowerCamelCase			,  rstrip=__lowerCamelCase							) if isinstance(__lowerCamelCase			,  __lowerCamelCase							) else bos_token
            _SCREAMING_SNAKE_CASE				:		List[str]  			=							AddedToken(__lowerCamelCase			,  lstrip=__lowerCamelCase			,  rstrip=__lowerCamelCase							) if isinstance(__lowerCamelCase			,  __lowerCamelCase							) else eos_token
            _SCREAMING_SNAKE_CASE				:		Union[str, Any]  			=							AddedToken(__lowerCamelCase			,  lstrip=__lowerCamelCase			,  rstrip=__lowerCamelCase							) if isinstance(__lowerCamelCase			,  __lowerCamelCase							) else sep_token
            _SCREAMING_SNAKE_CASE				:		List[Any]  			=							AddedToken(__lowerCamelCase			,  lstrip=__lowerCamelCase			,  rstrip=__lowerCamelCase							) if isinstance(__lowerCamelCase			,  __lowerCamelCase							) else cls_token
            _SCREAMING_SNAKE_CASE				:		int  			=							AddedToken(__lowerCamelCase			,  lstrip=__lowerCamelCase			,  rstrip=__lowerCamelCase							) if isinstance(__lowerCamelCase			,  __lowerCamelCase							) else unk_token
            _SCREAMING_SNAKE_CASE				:		List[str]  			=							AddedToken(__lowerCamelCase			,  lstrip=__lowerCamelCase			,  rstrip=__lowerCamelCase							) if isinstance(__lowerCamelCase			,  __lowerCamelCase							) else pad_token

            # Mask token behave like a normal word, i.e. include the space before it
            _SCREAMING_SNAKE_CASE				:		str  			=							AddedToken(__lowerCamelCase			,  lstrip=__lowerCamelCase			,  rstrip=__lowerCamelCase							) if isinstance(__lowerCamelCase			,  __lowerCamelCase							) else mask_token

            super().__init__(
                errors=__lowerCamelCase			,  bos_token=__lowerCamelCase			,  eos_token=__lowerCamelCase			,  unk_token=__lowerCamelCase			,  sep_token=__lowerCamelCase			,  cls_token=__lowerCamelCase			,  pad_token=__lowerCamelCase			,  mask_token=__lowerCamelCase			,  add_prefix_space=__lowerCamelCase			,  **__lowerCamelCase			,  )
            with open(__lowerCamelCase			,  encoding="utf-8"							) as vocab_handle:
                 _SCREAMING_SNAKE_CASE				:		Tuple  			=							json.load(__lowerCamelCase							)
            _SCREAMING_SNAKE_CASE				:		str  			=							{v: k for k, v in self.encoder.items()}
            _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							errors  # how to handle errors in decoding
            _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							bytes_to_unicode()
            _SCREAMING_SNAKE_CASE				:		List[str]  			=							{v: k for k, v in self.byte_encoder.items()}
            with open(__lowerCamelCase			,  encoding="utf-8"							) as merges_handle:
                 _SCREAMING_SNAKE_CASE				:		str  			=							merges_handle.read().split("\n"							)[1:-1]
            _SCREAMING_SNAKE_CASE				:		List[str]  			=							[tuple(merge.split()							) for merge in bpe_merges]
            _SCREAMING_SNAKE_CASE				:		str  			=							dict(zip(__lowerCamelCase			,  range(len(__lowerCamelCase							)							)							)							)
            _SCREAMING_SNAKE_CASE				:		Dict  			=							{}
            _SCREAMING_SNAKE_CASE				:		Tuple  			=							add_prefix_space

            # Should have added re.IGNORECASE so BPE merges can happen for capitalized versions of contractions
            _SCREAMING_SNAKE_CASE				:		Any  			=							re.compile(r"'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+"							)




       @property
       def 			UpperCamelCase_	(					self							)	->   List[Any]:
            return len(self.encoder							)




       def 			UpperCamelCase_	(					self							)	->   int:
            return dict(self.encoder			,  **self.added_tokens_encoder							)




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase							)	->   Optional[Any]:
            if token in self.cache:
                 return self.cache[token]
            _SCREAMING_SNAKE_CASE				:		int  			=							tuple(__lowerCamelCase							)
            _SCREAMING_SNAKE_CASE				:		Any  			=							get_pairs(__lowerCamelCase							)

            if not pairs:
                 return token

            while True:
                 _SCREAMING_SNAKE_CASE				:		Dict  			=							min(__lowerCamelCase			,  key=lambda __lowerCamelCase							: self.bpe_ranks.get(__lowerCamelCase			,  float("inf"							)							)							)
                 if bigram not in self.bpe_ranks:
                      break
                 _SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE				:		List[str]  			=							bigram
                 _SCREAMING_SNAKE_CASE				:		str  			=							[]
                 _SCREAMING_SNAKE_CASE				:		Any  			=							0
                 while i < len(__lowerCamelCase							):
                      try:
                           _SCREAMING_SNAKE_CASE				:		str  			=							word.index(__lowerCamelCase			,  __lowerCamelCase							)
                      except ValueError:
                           new_word.extend(word[i:]							)
                           break
                      else:
                           new_word.extend(word[i:j]							)
                           _SCREAMING_SNAKE_CASE				:		List[Any]  			=							j

                      if word[i] == first and i < len(__lowerCamelCase							) - 1 and word[i + 1] == second:
                           new_word.append(first + second							)
                           i += 2
                      else:
                           new_word.append(word[i]							)
                           i += 1
                 _SCREAMING_SNAKE_CASE				:		str  			=							tuple(__lowerCamelCase							)
                 _SCREAMING_SNAKE_CASE				:		List[str]  			=							new_word
                 if len(__lowerCamelCase							) == 1:
                      break
                 else:
                      _SCREAMING_SNAKE_CASE				:		int  			=							get_pairs(__lowerCamelCase							)
            _SCREAMING_SNAKE_CASE				:		Tuple  			=							" ".join(__lowerCamelCase							)
            _SCREAMING_SNAKE_CASE				:		List[Any]  			=							word
            return word




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase							)	->   Union[str, Any]:
            _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							[]
            for token in re.findall(self.pat			,  __lowerCamelCase							):
                 _SCREAMING_SNAKE_CASE				:		List[Any]  			=							"".join(
                     self.byte_encoder[b] for b in token.encode("utf-8"							)							)  # Maps all our bytes to unicode strings, avoiding control tokens of the BPE (spaces in our case)
                 bpe_tokens.extend(bpe_token for bpe_token in self.bpe(__lowerCamelCase							).split(" "							)							)
            return bpe_tokens




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase							)	->   List[Any]:
            return self.encoder.get(__lowerCamelCase			,  self.encoder.get(self.unk_token							)							)




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase							)	->   Tuple:
            return self.decoder.get(__lowerCamelCase							)




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase							)	->   Optional[int]:
            _SCREAMING_SNAKE_CASE				:		int  			=							"".join(__lowerCamelCase							)
            _SCREAMING_SNAKE_CASE				:		Any  			=							bytearray([self.byte_decoder[c] for c in text]							).decode("utf-8"			,  errors=self.errors							)
            return text




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase			,  __lowerCamelCase = None							)	->   Tuple[str]:
            if not os.path.isdir(__lowerCamelCase							):
                 logger.error(F"""Vocabulary path ({save_directory}) should be a directory"""							)
                 return
            _SCREAMING_SNAKE_CASE				:		Any  			=							os.path.join(
                __lowerCamelCase			,  (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]							)
            _SCREAMING_SNAKE_CASE				:		Union[str, Any]  			=							os.path.join(
                __lowerCamelCase			,  (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["merges_file"]							)

            with open(__lowerCamelCase			,  "w"			,  encoding="utf-8"							) as f:
                 f.write(json.dumps(self.encoder			,  indent=2			,  sort_keys=__lowerCamelCase			,  ensure_ascii=__lowerCamelCase							) + "\n"							)

            _SCREAMING_SNAKE_CASE				:		int  			=							0
            with open(__lowerCamelCase			,  "w"			,  encoding="utf-8"							) as writer:
                 writer.write("#version: 0.2\n"							)
                 for bpe_tokens, token_index in sorted(self.bpe_ranks.items()			,  key=lambda __lowerCamelCase							: kv[1]							):
                      if index != token_index:
                           logger.warning(
                               F"""Saving vocabulary to {merge_file}: BPE merge indices are not consecutive."""
                               " Please check that the tokenizer is not corrupted!"							)
                           _SCREAMING_SNAKE_CASE				:		Dict  			=							token_index
                      writer.write(" ".join(__lowerCamelCase							) + "\n"							)
                      index += 1

            return vocab_file, merge_file




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase			,  __lowerCamelCase = None							)	->   List[int]:
            if token_ids_a is None:
                 return [self.cls_token_id] + token_ids_a + [self.sep_token_id]
            _SCREAMING_SNAKE_CASE				:		Optional[int]  			=							[self.cls_token_id]
            _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							[self.sep_token_id]
            return cls + token_ids_a + sep + sep + token_ids_a + sep




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase			,  __lowerCamelCase = None			,  __lowerCamelCase = False							)	->   List[int]:
            if already_has_special_tokens:
                 return super().get_special_tokens_mask(
                     token_ids_a=__lowerCamelCase			,  token_ids_a=__lowerCamelCase			,  already_has_special_tokens=__lowerCamelCase							)

            if token_ids_a is None:
                 return [1] + ([0] * len(__lowerCamelCase							)) + [1]
            return [1] + ([0] * len(__lowerCamelCase							)) + [1, 1] + ([0] * len(__lowerCamelCase							)) + [1]




       def 			UpperCamelCase_	(					self			,  __lowerCamelCase			,  __lowerCamelCase = None							)	->   List[int]:
            _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							[self.sep_token_id]
            _SCREAMING_SNAKE_CASE				:		Tuple  			=							[self.cls_token_id]

            if token_ids_a is None:
                 return len(cls + token_ids_a + sep							) * [0]
            return len(cls + token_ids_a + sep + sep + token_ids_a + sep							) * [0]







       def 			UpperCamelCase_	(					self			,  __lowerCamelCase			,  __lowerCamelCase=False			,  **__lowerCamelCase							)	->   str:
            _SCREAMING_SNAKE_CASE				:		Dict  			=							kwargs.pop("add_prefix_space"			,  self.add_prefix_space							)
            if (is_split_into_words or add_prefix_space) and (len(__lowerCamelCase							) > 0 and not text[0].isspace()):
                 _SCREAMING_SNAKE_CASE				:		List[str]  			=							" " + text
            return (text, kwargs)


import collections
import inspect
import unittest

from transformers import DonutSwinConfig
from transformers.testing_utils import require_torch, slow, torch_device
from transformers.utils import is_torch_available

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


if is_torch_available():
 import torch
 from torch import nn

 from transformers import DonutSwinModel
 from transformers.models.donut.modeling_donut_swin import DONUT_SWIN_PRETRAINED_MODEL_ARCHIVE_LIST






class 		__magic_name__ :






     def __init__(							self						,		_lowercase						,		_lowercase=13						,		_lowercase=32						,		_lowercase=2						,		_lowercase=3						,		_lowercase=16						,		_lowercase=[1, 2, 1]						,		_lowercase=[2, 2, 4]						,		_lowercase=2						,		_lowercase=2.0						,		_lowercase=True						,		_lowercase=0.0						,		_lowercase=0.0						,		_lowercase=0.1						,		_lowercase="gelu"						,		_lowercase=False						,		_lowercase=True						,		_lowercase=0.02						,		_lowercase=1e-5						,		_lowercase=True						,		_lowercase=None						,		_lowercase=True						,		_lowercase=10						,		_lowercase=8						,		)->			Tuple:
         UpperCamelCase_          =		parent
         UpperCamelCase_          =		batch_size
         UpperCamelCase_          =		image_size
         UpperCamelCase_          =		patch_size
         UpperCamelCase_          =		num_channels
         UpperCamelCase_          =		embed_dim
         UpperCamelCase_          =		depths
         UpperCamelCase_          =		num_heads
         UpperCamelCase_          =		window_size
         UpperCamelCase_          =		mlp_ratio
         UpperCamelCase_          =		qkv_bias
         UpperCamelCase_          =		hidden_dropout_prob
         UpperCamelCase_          =		attention_probs_dropout_prob
         UpperCamelCase_          =		drop_path_rate
         UpperCamelCase_          =		hidden_act
         UpperCamelCase_          =		use_absolute_embeddings
         UpperCamelCase_          =		patch_norm
         UpperCamelCase_          =		layer_norm_eps
         UpperCamelCase_          =		initializer_range
         UpperCamelCase_          =		is_training
         UpperCamelCase_          =		scope
         UpperCamelCase_          =		use_labels
         UpperCamelCase_          =		type_sequence_label_size
         UpperCamelCase_          =		encoder_stride






     def      UpperCAmelCase_							(							self     )->			Dict:
         UpperCamelCase_          =		floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]     )

         UpperCamelCase_          =		None
         if self.use_labels:
             UpperCamelCase_          =		ids_tensor([self.batch_size]						,		self.type_sequence_label_size     )

         UpperCamelCase_          =		self.get_config()

         return config, pixel_values, labels






     def      UpperCAmelCase_							(							self     )->			Union[str, Any]:
         return DonutSwinConfig(
             image_size=self.image_size						,		patch_size=self.patch_size						,		num_channels=self.num_channels						,		embed_dim=self.embed_dim						,		depths=self.depths						,		num_heads=self.num_heads						,		window_size=self.window_size						,		mlp_ratio=self.mlp_ratio						,		qkv_bias=self.qkv_bias						,		hidden_dropout_prob=self.hidden_dropout_prob						,		attention_probs_dropout_prob=self.attention_probs_dropout_prob						,		drop_path_rate=self.drop_path_rate						,		hidden_act=self.hidden_act						,		use_absolute_embeddings=self.use_absolute_embeddings						,		path_norm=self.patch_norm						,		layer_norm_eps=self.layer_norm_eps						,		initializer_range=self.initializer_range						,		encoder_stride=self.encoder_stride						,		)






     def      UpperCAmelCase_							(							self						,		_lowercase						,		_lowercase						,		_lowercase     )->			Optional[Any]:
         UpperCamelCase_          =		DonutSwinModel(config=_lowercase     )
         model.to(_lowercase     )
         model.eval()
         UpperCamelCase_          =		model(_lowercase     )

         UpperCamelCase_          =		((config.image_size // config.patch_size) ** 2) // (4 ** (len(config.depths     ) - 1))
         UpperCamelCase_          =		int(config.embed_dim * 2 ** (len(config.depths     ) - 1)     )

         self.parent.assertEqual(result.last_hidden_state.shape						,		(self.batch_size, expected_seq_len, expected_dim)     )






     def      UpperCAmelCase_							(							self     )->			Tuple:
         UpperCamelCase_          =		self.prepare_config_and_inputs()
         (
             (
             UpperCamelCase_
         )   ,    (
             UpperCamelCase_
         )   ,    (
             UpperCamelCase_
         )   ,    
         )          =		config_and_inputs
         UpperCamelCase_          =		{"pixel_values": pixel_values}
         return config, inputs_dict






@require_torch
class 		__magic_name__ (				snake_case       ,	snake_case       ,	unittest.TestCase							):
     UpperCamelCase_     :List[str]									=	(DonutSwinModel,) if is_torch_available() else ()
     UpperCamelCase_     :Optional[Any]									=	{"""feature-extraction""": DonutSwinModel} if is_torch_available() else {}
     UpperCamelCase_     :Any									=	True

     UpperCamelCase_     :Tuple									=	False
     UpperCamelCase_     :List[str]									=	False
     UpperCamelCase_     :List[str]									=	False






     def      UpperCAmelCase_							(							self     )->			Union[str, Any]:
         UpperCamelCase_          =		DonutSwinModelTester(self     )
         UpperCamelCase_          =		ConfigTester(self						,		config_class=_lowercase						,		embed_dim=37     )






     def      UpperCAmelCase_							(							self     )->			Optional[int]:
         self.create_and_test_config_common_properties()
         self.config_tester.create_and_test_config_to_json_string()
         self.config_tester.create_and_test_config_to_json_file()
         self.config_tester.create_and_test_config_from_and_save_pretrained()
         self.config_tester.create_and_test_config_with_num_labels()
         self.config_tester.check_config_can_be_init_without_params()
         self.config_tester.check_config_arguments_init()






     def      UpperCAmelCase_							(							self     )->			Optional[int]:
         return






     def      UpperCAmelCase_							(							self     )->			Tuple:
         UpperCamelCase_          =		self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_model(*_lowercase     )






     def      UpperCAmelCase_							(							self     )->			int:
         # DonutSwin does not use inputs_embeds
         pass






     def      UpperCAmelCase_							(							self     )->			Union[str, Any]:
         UpperCamelCase_   ,    UpperCamelCase_          =		self.model_tester.prepare_config_and_inputs_for_common()

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






     def      UpperCAmelCase_							(							self     )->			Union[str, Any]:
         UpperCamelCase_   ,    UpperCamelCase_          =		self.model_tester.prepare_config_and_inputs_for_common()

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

             UpperCamelCase_          =		["pixel_values"]
             self.assertListEqual(arg_names[:1]						,		_lowercase     )






     def      UpperCAmelCase_							(							self     )->			List[Any]:
         UpperCamelCase_   ,    UpperCamelCase_          =		self.model_tester.prepare_config_and_inputs_for_common()
         UpperCamelCase_          =		True

         for model_class in self.all_model_classes:
             UpperCamelCase_          =		True
             UpperCamelCase_          =		False
             UpperCamelCase_          =		True
             UpperCamelCase_          =		model_class(_lowercase     )
             model.to(_lowercase     )
             model.eval()
             with torch.no_grad():
                 UpperCamelCase_          =		model(**self._prepare_for_class(_lowercase						,		_lowercase     )     )
             UpperCamelCase_          =		outputs.attentions
             UpperCamelCase_          =		len(self.model_tester.depths     )
             self.assertEqual(len(_lowercase     )						,		_lowercase     )

             # check that output_attentions also work using config
             del inputs_dict["output_attentions"]
             UpperCamelCase_          =		True
             UpperCamelCase_          =		config.window_size**2
             UpperCamelCase_          =		model_class(_lowercase     )
             model.to(_lowercase     )
             model.eval()
             with torch.no_grad():
                 UpperCamelCase_          =		model(**self._prepare_for_class(_lowercase						,		_lowercase     )     )
             UpperCamelCase_          =		outputs.attentions
             self.assertEqual(len(_lowercase     )						,		_lowercase     )

             self.assertListEqual(
                 list(attentions[0].shape[-3:]     )						,		[self.model_tester.num_heads[0], window_size_squared, window_size_squared]						,		)
             UpperCamelCase_          =		len(_lowercase     )

             # Check attention is always last and order is fine
             UpperCamelCase_          =		True
             UpperCamelCase_          =		True
             UpperCamelCase_          =		model_class(_lowercase     )
             model.to(_lowercase     )
             model.eval()
             with torch.no_grad():
                 UpperCamelCase_          =		model(**self._prepare_for_class(_lowercase						,		_lowercase     )     )

             if hasattr(self.model_tester						,		"num_hidden_states_types"     ):
                 UpperCamelCase_          =		self.model_tester.num_hidden_states_types
             else:
                 # also another +1 for reshaped_hidden_states
                 UpperCamelCase_          =		2
             self.assertEqual(out_len + added_hidden_states						,		len(_lowercase     )     )

             UpperCamelCase_          =		outputs.attentions

             self.assertEqual(len(_lowercase     )						,		_lowercase     )

             self.assertListEqual(
                 list(self_attentions[0].shape[-3:]     )						,		[self.model_tester.num_heads[0], window_size_squared, window_size_squared]						,		)






     def      UpperCAmelCase_							(							self						,		_lowercase						,		_lowercase						,		_lowercase						,		_lowercase     )->			List[Any]:
         UpperCamelCase_          =		model_class(_lowercase     )
         model.to(_lowercase     )
         model.eval()

         with torch.no_grad():
             UpperCamelCase_          =		model(**self._prepare_for_class(_lowercase						,		_lowercase     )     )

         UpperCamelCase_          =		outputs.hidden_states

         UpperCamelCase_          =		getattr(
             self.model_tester						,		"expected_num_hidden_layers"						,		len(self.model_tester.depths     ) + 1     )
         self.assertEqual(len(_lowercase     )						,		_lowercase     )

         # DonutSwin has a different seq_length
         UpperCamelCase_          =		(
             config.patch_size
             if isinstance(config.patch_size						,		collections.abc.Iterable     )
             else (config.patch_size, config.patch_size)
         )

         UpperCamelCase_          =		(image_size[1] // patch_size[1]) * (image_size[0] // patch_size[0])

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

         UpperCamelCase_          =		outputs.reshaped_hidden_states
         self.assertEqual(len(_lowercase     )						,		_lowercase     )

         UpperCamelCase_   ,    UpperCamelCase_   ,    UpperCamelCase_   ,    UpperCamelCase_          =		reshaped_hidden_states[0].shape
         UpperCamelCase_          =		(
             reshaped_hidden_states[0].view(_lowercase						,		_lowercase						,		height * width     ).permute(0						,		2						,		1     )
         )
         self.assertListEqual(
             list(reshaped_hidden_states.shape[-2:]     )						,		[num_patches, self.model_tester.embed_dim]						,		)






     def      UpperCAmelCase_							(							self     )->			List[str]:
         UpperCamelCase_   ,    UpperCamelCase_          =		self.model_tester.prepare_config_and_inputs_for_common()

         UpperCamelCase_          =		(
             self.model_tester.image_size
             if isinstance(self.model_tester.image_size						,		collections.abc.Iterable     )
             else (self.model_tester.image_size, self.model_tester.image_size)
         )

         for model_class in self.all_model_classes:
             UpperCamelCase_          =		True
             self.check_hidden_states_output(_lowercase						,		_lowercase						,		_lowercase						,		_lowercase     )

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

             self.check_hidden_states_output(_lowercase						,		_lowercase						,		_lowercase						,		_lowercase     )






     def      UpperCAmelCase_							(							self     )->			Any:
         UpperCamelCase_   ,    UpperCamelCase_          =		self.model_tester.prepare_config_and_inputs_for_common()
         UpperCamelCase_          =		3

         UpperCamelCase_          =		(
             self.model_tester.image_size
             if isinstance(self.model_tester.image_size						,		collections.abc.Iterable     )
             else (self.model_tester.image_size, self.model_tester.image_size)
         )
         UpperCamelCase_          =		(
             config.patch_size
             if isinstance(config.patch_size						,		collections.abc.Iterable     )
             else (config.patch_size, config.patch_size)
         )

         UpperCamelCase_          =		image_size[0] + patch_size[0] - (image_size[0] % patch_size[0])
         UpperCamelCase_          =		image_size[1] + patch_size[1] - (image_size[1] % patch_size[1])

         for model_class in self.all_model_classes:
             UpperCamelCase_          =		True
             self.check_hidden_states_output(_lowercase						,		_lowercase						,		_lowercase						,		(padded_height, padded_width)     )

             # check that output_hidden_states also work using config
             del inputs_dict["output_hidden_states"]
             UpperCamelCase_          =		True
             self.check_hidden_states_output(_lowercase						,		_lowercase						,		_lowercase						,		(padded_height, padded_width)     )






     @slow
     def      UpperCAmelCase_							(							self     )->			List[str]:
         for model_name in DONUT_SWIN_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
             UpperCamelCase_          =		DonutSwinModel.from_pretrained(_lowercase     )
             self.assertIsNotNone(_lowercase     )






     def      UpperCAmelCase_							(							self     )->			Any:
         UpperCamelCase_   ,    UpperCamelCase_          =		self.model_tester.prepare_config_and_inputs_for_common()

         UpperCamelCase_          =		_config_zero_init(_lowercase     )
         for model_class in self.all_model_classes:
             UpperCamelCase_          =		model_class(config=_lowercase     )
             for name, param in model.named_parameters():
                 if "embeddings" not in name and 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"						,		)
