


'''simple docstring'''






import warnings
from functools import wraps
from typing import Callable





def      UpperCAmelCase			(		lowerCamelCase_  :Callable ):







		'''simple docstring'''

		@wraps(UpperCAmelCase__ )
		def _inner_fn(*lowerCamelCase_  :List[str]				,      **lowerCamelCase_  :str ):
				warnings.warn(
				    (F'''\'{fn.__name__}\' is experimental and might be subject to breaking changes in the future.''')				,      UpperCAmelCase__				,      )
				return fn(*UpperCAmelCase__				,      **UpperCAmelCase__ )

		return _inner_fn



'''simple docstring'''






import copy
import os
from typing import Union

from ...configuration_utils import PretrainedConfig
from ...utils import logging


__A	:	str     =     logging.get_logger(__name__)

__A	:	Dict     =     {
    'google/pix2struct-textcaps-base': (
        'https://huggingface.co/google/pix2struct-textcaps-base/resolve/main/config.json'
    ),
}
class 						__UpperCamelCase	(						lowercase__							):
							lowercase			:		Tuple   		=  'pix2struct_text_model'
							lowercase			:		int   		=  ['past_key_values']
							lowercase			:		int   		=  {
							    'hidden_size': 'hidden_size',
							    'num_attention_heads': 'num_heads',
							    'num_hidden_layers': 'num_layers',
							}





							def __init__(  self		:int  ,_UpperCamelCase		:List[str]=5_0_2_4_4  ,_UpperCamelCase		:Optional[Any]=7_6_8  ,_UpperCamelCase		:Dict=6_4  ,_UpperCamelCase		:Dict=2_0_4_8  ,_UpperCamelCase		:Optional[int]=1_2  ,_UpperCamelCase		:Union[str, Any]=1_2  ,_UpperCamelCase		:List[str]=3_2  ,_UpperCamelCase		:Union[str, Any]=1_2_8  ,_UpperCamelCase		:Tuple=0.1  ,_UpperCamelCase		:List[str]=1E-6  ,_UpperCamelCase		:List[Any]=1.0  ,_UpperCamelCase		:Optional[int]="gelu_new"  ,_UpperCamelCase		:Dict=0  ,_UpperCamelCase		:List[str]=False  ,_UpperCamelCase		:Optional[int]=0  ,_UpperCamelCase		:Dict=1  ,_UpperCamelCase		:List[Any]=False  ,_UpperCamelCase		:Tuple=True  ,**_UpperCamelCase		:List[Any]  ,):
									snake_case_		:							List[str]			       =						vocab_size
									snake_case_		:							Any			       =						hidden_size
									snake_case_		:							Any			       =						d_kv
									snake_case_		:							List[Any]			       =						d_ff
									snake_case_		:							Union[str, Any]			       =						num_layers
									snake_case_		:							Union[str, Any]			       =						num_heads
									snake_case_		:							str			       =						relative_attention_num_buckets
									snake_case_		:							Optional[int]			       =						relative_attention_max_distance
									snake_case_		:							Tuple			       =						dropout_rate
									snake_case_		:							Tuple			       =						layer_norm_epsilon
									snake_case_		:							Any			       =						initializer_factor
									snake_case_		:							List[Any]			       =						use_cache

									snake_case_		:							Optional[int]			       =						eos_token_id
									snake_case_		:							List[Any]			       =						decoder_start_token_id

									# for backwards compatibility
									snake_case_		:							List[str]			       =						dense_act_fn

									super().__init__(
									    pad_token_id=_UpperCamelCase  ,eos_token_id=_UpperCamelCase  ,decoder_start_token_id=_UpperCamelCase  ,tie_word_embeddings=_UpperCamelCase  ,is_decoder=_UpperCamelCase  ,**_UpperCamelCase  ,)





							@classmethod
							def 		a__   (  cls		:Optional[int]  ,_UpperCamelCase		:Union[str, os.PathLike]  ,**_UpperCamelCase		:Optional[int]			):
									cls._set_token_in_kwargs(_UpperCamelCase			)

									snake_case_       ,      snake_case_		:							Optional[Any]			       =						cls.get_config_dict(_UpperCamelCase  ,**_UpperCamelCase			)

									# get the text config dict if we are loading from Pix2StructConfig
									if config_dict.get("""model_type"""			) == "pix2struct":
											snake_case_		:							Optional[int]			       =						config_dict["""text_config"""]

									if "model_type" in config_dict and hasattr(cls  ,"""model_type"""			) and config_dict["model_type"] != cls.model_type:
											logger.warning(
											    F'''You are using a model of type {config_dict["model_type"]} to instantiate a model of type '''
											    F'''{cls.model_type}. This is not supported for all configurations of models and can yield errors.'''			)

									return cls.from_dict(_UpperCamelCase  ,**_UpperCamelCase			)





class 						__UpperCamelCase	(						lowercase__							):
							lowercase			:		Dict   		=  'pix2struct_vision_model'





							def __init__(  self		:List[str]  ,_UpperCamelCase		:Any=7_6_8  ,_UpperCamelCase		:List[str]=7_6_8  ,_UpperCamelCase		:List[Any]=2_0_4_8  ,_UpperCamelCase		:Union[str, Any]=6_4  ,_UpperCamelCase		:int=1_2  ,_UpperCamelCase		:int=1_2  ,_UpperCamelCase		:Any="gelu_new"  ,_UpperCamelCase		:Optional[int]=1E-6  ,_UpperCamelCase		:List[Any]=0.0  ,_UpperCamelCase		:Union[str, Any]=0.0  ,_UpperCamelCase		:int=1E-1_0  ,_UpperCamelCase		:str=1.0  ,_UpperCamelCase		:Optional[int]=4_0_9_6  ,_UpperCamelCase		:str=3_2  ,_UpperCamelCase		:Union[str, Any]=1_2_8  ,**_UpperCamelCase		:Union[str, Any]  ,):
									super().__init__(**_UpperCamelCase			)

									snake_case_		:							str			       =						hidden_size
									snake_case_		:							Tuple			       =						patch_embed_hidden_size
									snake_case_		:							Optional[int]			       =						d_ff
									snake_case_		:							Dict			       =						dropout_rate
									snake_case_		:							Optional[int]			       =						num_hidden_layers
									snake_case_		:							Dict			       =						num_attention_heads
									snake_case_		:							Union[str, Any]			       =						initializer_range
									snake_case_		:							Optional[Any]			       =						initializer_factor
									snake_case_		:							List[str]			       =						attention_dropout
									snake_case_		:							List[str]			       =						layer_norm_eps
									snake_case_		:							List[str]			       =						dense_act_fn
									snake_case_		:							int			       =						seq_len
									snake_case_		:							str			       =						relative_attention_num_buckets
									snake_case_		:							Tuple			       =						relative_attention_max_distance
									snake_case_		:							List[str]			       =						d_kv





							@classmethod
							def 		a__   (  cls		:Optional[Any]  ,_UpperCamelCase		:Union[str, os.PathLike]  ,**_UpperCamelCase		:List[str]			):
									cls._set_token_in_kwargs(_UpperCamelCase			)

									snake_case_       ,      snake_case_		:							Tuple			       =						cls.get_config_dict(_UpperCamelCase  ,**_UpperCamelCase			)

									# get the vision config dict if we are loading from Pix2StructConfig
									if config_dict.get("""model_type"""			) == "pix2struct":
											snake_case_		:							Dict			       =						config_dict["""vision_config"""]

									if "model_type" in config_dict and hasattr(cls  ,"""model_type"""			) and config_dict["model_type"] != cls.model_type:
											logger.warning(
											    F'''You are using a model of type {config_dict["model_type"]} to instantiate a model of type '''
											    F'''{cls.model_type}. This is not supported for all configurations of models and can yield errors.'''			)

									return cls.from_dict(_UpperCamelCase  ,**_UpperCamelCase			)





class 						__UpperCamelCase	(						lowercase__							):
							lowercase			:		Union[str, Any]   		=  'pix2struct'
							lowercase			:		int   		=  True





							def __init__(  self		:int  ,_UpperCamelCase		:Tuple=None  ,_UpperCamelCase		:Optional[int]=None  ,_UpperCamelCase		:Dict=1.0  ,_UpperCamelCase		:Optional[int]=0.02  ,_UpperCamelCase		:Tuple=False  ,_UpperCamelCase		:List[str]=False  ,_UpperCamelCase		:Dict=True  ,**_UpperCamelCase		:Union[str, Any]  ,):
									super().__init__(tie_word_embeddings=_UpperCamelCase  ,is_encoder_decoder=_UpperCamelCase  ,**_UpperCamelCase			)

									if text_config is None:
											snake_case_		:							Optional[int]			       =						{}
											logger.info("""text_config is None. Initializing the Pix2StructTextConfig with default values."""			)

									if vision_config is None:
											snake_case_		:							List[str]			       =						{}
											logger.info("""vision_config is None. Initializing the Pix2StructVisionConfig with default values."""			)

									snake_case_		:							Optional[int]			       =						PixaStructTextConfig(**_UpperCamelCase			)
									snake_case_		:							List[str]			       =						PixaStructVisionConfig(**_UpperCamelCase			)

									snake_case_		:							Any			       =						self.text_config.decoder_start_token_id
									snake_case_		:							List[Any]			       =						self.text_config.pad_token_id
									snake_case_		:							Optional[int]			       =						self.text_config.eos_token_id

									snake_case_		:							Optional[int]			       =						initializer_factor
									snake_case_		:							List[str]			       =						initializer_range

									snake_case_		:							Union[str, Any]			       =						self.initializer_range
									snake_case_		:							str			       =						self.initializer_range

									snake_case_		:							Dict			       =						is_vqa





							@classmethod
							def 		a__   (  cls		:Any  ,_UpperCamelCase		:PixaStructTextConfig  ,_UpperCamelCase		:PixaStructVisionConfig  ,**_UpperCamelCase		:Any			):
									return cls(text_config=text_config.to_dict()  ,vision_config=vision_config.to_dict()  ,**_UpperCamelCase			)





							def 		a__   (  self		:Optional[int]			):
									snake_case_		:							int			       =						copy.deepcopy(self.__dict__			)
									snake_case_		:							str			       =						self.text_config.to_dict()
									snake_case_		:							Tuple			       =						self.vision_config.to_dict()
									snake_case_		:							Any			       =						self.__class__.model_type
									return output