

import copy
import os
from typing import Union

from ...configuration_utils import PretrainedConfig
from ...models.auto.modeling_auto import MODEL_FOR_CAUSAL_LM_MAPPING_NAMES
from ...utils import logging
from ..auto import CONFIG_MAPPING


snake_case_        =			logging.get_logger(__name__)

snake_case_        =			{
    '''salesforce/blip2-opt-2.7b''': '''https://huggingface.co/salesforce/blip2-opt-2.7b/resolve/main/config.json''',
}


class 				SCREAMING_SNAKE_CASE__ (__snake_case					):
    __lowerCamelCase						:	List[Any]														=					"""blip_2_vision_model"""





    def __init__(				self						,       a=1408						,       a=6144						,       a=39						,       a=16						,       a=224						,       a=14						,       a="gelu"						,       a=0.00_001						,       a=0.0						,       a=1e-10						,       a=True						,       **a						,       ):
         super().__init__(**a)

         lowercase__   :       Tuple				=	hidden_size
         lowercase__   :       Any				=	intermediate_size
         lowercase__   :       Any				=	num_hidden_layers
         lowercase__   :       Any				=	num_attention_heads
         lowercase__   :       List[str]				=	patch_size
         lowercase__   :       str				=	image_size
         lowercase__   :       Tuple				=	initializer_range
         lowercase__   :       Dict				=	attention_dropout
         lowercase__   :       Optional[Any]				=	layer_norm_eps
         lowercase__   :       int				=	hidden_act
         lowercase__   :       Tuple				=	qkv_bias





    @classmethod
    def 				snake_case_    (				cls						,       a						,       **a):
         cls._set_token_in_kwargs(a)

         lowercase__				,			lowercase__   :       Optional[Any]				=	cls.get_config_dict(a						,       **a)

         # get the vision config dict if we are loading from Blip2Config
         if config_dict.get('model_type') == "blip-2":
              lowercase__   :       List[str]				=	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(a						,       **a)



class 				SCREAMING_SNAKE_CASE__ (__snake_case					):
    __lowerCamelCase						:	List[Any]														=					"""blip_2_qformer"""





    def __init__(				self						,       a=3_0522						,       a=768						,       a=12						,       a=12						,       a=3072						,       a="gelu"						,       a=0.1						,       a=0.1						,       a=512						,       a=0.02						,       a=1e-12						,       a=0						,       a="absolute"						,       a=2						,       a=1408						,       **a						,       ):
         super().__init__(pad_token_id=a						,       **a)

         lowercase__   :       Optional[int]				=	vocab_size
         lowercase__   :       List[Any]				=	hidden_size
         lowercase__   :       List[Any]				=	num_hidden_layers
         lowercase__   :       str				=	num_attention_heads
         lowercase__   :       Optional[Any]				=	hidden_act
         lowercase__   :       Tuple				=	intermediate_size
         lowercase__   :       Any				=	hidden_dropout_prob
         lowercase__   :       str				=	attention_probs_dropout_prob
         lowercase__   :       Optional[int]				=	max_position_embeddings
         lowercase__   :       int				=	initializer_range
         lowercase__   :       Tuple				=	layer_norm_eps
         lowercase__   :       Any				=	position_embedding_type
         lowercase__   :       int				=	cross_attention_frequency
         lowercase__   :       Any				=	encoder_hidden_size





    @classmethod
    def 				snake_case_    (				cls						,       a						,       **a):
         cls._set_token_in_kwargs(a)

         lowercase__				,			lowercase__   :       List[str]				=	cls.get_config_dict(a						,       **a)

         # get the qformer config dict if we are loading from Blip2Config
         if config_dict.get('model_type') == "blip-2":
              lowercase__   :       Optional[int]				=	config_dict['qformer_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(a						,       **a)



class 				SCREAMING_SNAKE_CASE__ (__snake_case					):
    __lowerCamelCase						:	Any														=					"""blip-2"""
    __lowerCamelCase						:	Union[str, Any]														=					True





    def __init__(				self						,       a=None						,       a=None						,       a=None						,       a=32						,       **a):
         super().__init__(**a)

         if vision_config is None:
              lowercase__   :       Tuple				=	{}
              logger.info('vision_config is None. initializing the Blip2VisionConfig with default values.')

         if qformer_config is None:
              lowercase__   :       int				=	{}
              logger.info('qformer_config is None. Initializing the Blip2QFormerConfig with default values.')

         if text_config is None:
              lowercase__   :       Tuple				=	{}
              logger.info('text_config is None. Initializing the text config with default values (`OPTConfig`).')

         lowercase__   :       Optional[Any]				=	BlipaVisionConfig(**a)
         lowercase__   :       str				=	BlipaQFormerConfig(**a)
         lowercase__   :       str				=	text_config['model_type'] if 'model_type' in text_config else 'opt'
         lowercase__   :       Dict				=	CONFIG_MAPPING[text_model_type](**a)

         lowercase__   :       Tuple				=	self.text_config.tie_word_embeddings
         lowercase__   :       Union[str, Any]				=	self.text_config.is_encoder_decoder

         lowercase__   :       str				=	num_query_tokens
         lowercase__   :       Union[str, Any]				=	self.vision_config.hidden_size
         lowercase__   :       List[str]				=	self.text_config.model_type in MODEL_FOR_CAUSAL_LM_MAPPING_NAMES
         lowercase__   :       Optional[int]				=	1.0
         lowercase__   :       Optional[Any]				=	0.02





    @classmethod
    def 				snake_case_    (				cls						,       a						,       a						,       a						,       **a						,       ):
         return cls(
             vision_config=vision_config.to_dict()						,       qformer_config=qformer_config.to_dict()						,       text_config=text_config.to_dict()						,       **a						,       )





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




from collections import OrderedDict

from ...utils import logging
from .auto_factory import _BaseAutoModelClass, _LazyAutoMapping, auto_class_update
from .configuration_auto import CONFIG_MAPPING_NAMES


snake_case_        =			logging.get_logger(__name__)


snake_case_        =			OrderedDict(
    [
        # Base model mapping
        ('''albert''', '''FlaxAlbertModel'''),
        ('''bart''', '''FlaxBartModel'''),
        ('''beit''', '''FlaxBeitModel'''),
        ('''bert''', '''FlaxBertModel'''),
        ('''big_bird''', '''FlaxBigBirdModel'''),
        ('''blenderbot''', '''FlaxBlenderbotModel'''),
        ('''blenderbot-small''', '''FlaxBlenderbotSmallModel'''),
        ('''clip''', '''FlaxCLIPModel'''),
        ('''distilbert''', '''FlaxDistilBertModel'''),
        ('''electra''', '''FlaxElectraModel'''),
        ('''gpt-sw3''', '''FlaxGPT2Model'''),
        ('''gpt2''', '''FlaxGPT2Model'''),
        ('''gpt_neo''', '''FlaxGPTNeoModel'''),
        ('''gptj''', '''FlaxGPTJModel'''),
        ('''longt5''', '''FlaxLongT5Model'''),
        ('''marian''', '''FlaxMarianModel'''),
        ('''mbart''', '''FlaxMBartModel'''),
        ('''mt5''', '''FlaxMT5Model'''),
        ('''opt''', '''FlaxOPTModel'''),
        ('''pegasus''', '''FlaxPegasusModel'''),
        ('''regnet''', '''FlaxRegNetModel'''),
        ('''resnet''', '''FlaxResNetModel'''),
        ('''roberta''', '''FlaxRobertaModel'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormModel'''),
        ('''roformer''', '''FlaxRoFormerModel'''),
        ('''t5''', '''FlaxT5Model'''),
        ('''vision-text-dual-encoder''', '''FlaxVisionTextDualEncoderModel'''),
        ('''vit''', '''FlaxViTModel'''),
        ('''wav2vec2''', '''FlaxWav2Vec2Model'''),
        ('''whisper''', '''FlaxWhisperModel'''),
        ('''xglm''', '''FlaxXGLMModel'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaModel'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for pre-training mapping
        ('''albert''', '''FlaxAlbertForPreTraining'''),
        ('''bart''', '''FlaxBartForConditionalGeneration'''),
        ('''bert''', '''FlaxBertForPreTraining'''),
        ('''big_bird''', '''FlaxBigBirdForPreTraining'''),
        ('''electra''', '''FlaxElectraForPreTraining'''),
        ('''longt5''', '''FlaxLongT5ForConditionalGeneration'''),
        ('''mbart''', '''FlaxMBartForConditionalGeneration'''),
        ('''mt5''', '''FlaxMT5ForConditionalGeneration'''),
        ('''roberta''', '''FlaxRobertaForMaskedLM'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormForMaskedLM'''),
        ('''roformer''', '''FlaxRoFormerForMaskedLM'''),
        ('''t5''', '''FlaxT5ForConditionalGeneration'''),
        ('''wav2vec2''', '''FlaxWav2Vec2ForPreTraining'''),
        ('''whisper''', '''FlaxWhisperForConditionalGeneration'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaForMaskedLM'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Masked LM mapping
        ('''albert''', '''FlaxAlbertForMaskedLM'''),
        ('''bart''', '''FlaxBartForConditionalGeneration'''),
        ('''bert''', '''FlaxBertForMaskedLM'''),
        ('''big_bird''', '''FlaxBigBirdForMaskedLM'''),
        ('''distilbert''', '''FlaxDistilBertForMaskedLM'''),
        ('''electra''', '''FlaxElectraForMaskedLM'''),
        ('''mbart''', '''FlaxMBartForConditionalGeneration'''),
        ('''roberta''', '''FlaxRobertaForMaskedLM'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormForMaskedLM'''),
        ('''roformer''', '''FlaxRoFormerForMaskedLM'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaForMaskedLM'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Seq2Seq Causal LM mapping
        ('''bart''', '''FlaxBartForConditionalGeneration'''),
        ('''blenderbot''', '''FlaxBlenderbotForConditionalGeneration'''),
        ('''blenderbot-small''', '''FlaxBlenderbotSmallForConditionalGeneration'''),
        ('''encoder-decoder''', '''FlaxEncoderDecoderModel'''),
        ('''longt5''', '''FlaxLongT5ForConditionalGeneration'''),
        ('''marian''', '''FlaxMarianMTModel'''),
        ('''mbart''', '''FlaxMBartForConditionalGeneration'''),
        ('''mt5''', '''FlaxMT5ForConditionalGeneration'''),
        ('''pegasus''', '''FlaxPegasusForConditionalGeneration'''),
        ('''t5''', '''FlaxT5ForConditionalGeneration'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Image-classsification
        ('''beit''', '''FlaxBeitForImageClassification'''),
        ('''regnet''', '''FlaxRegNetForImageClassification'''),
        ('''resnet''', '''FlaxResNetForImageClassification'''),
        ('''vit''', '''FlaxViTForImageClassification'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        ('''vision-encoder-decoder''', '''FlaxVisionEncoderDecoderModel'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Causal LM mapping
        ('''bart''', '''FlaxBartForCausalLM'''),
        ('''bert''', '''FlaxBertForCausalLM'''),
        ('''big_bird''', '''FlaxBigBirdForCausalLM'''),
        ('''electra''', '''FlaxElectraForCausalLM'''),
        ('''gpt-sw3''', '''FlaxGPT2LMHeadModel'''),
        ('''gpt2''', '''FlaxGPT2LMHeadModel'''),
        ('''gpt_neo''', '''FlaxGPTNeoForCausalLM'''),
        ('''gptj''', '''FlaxGPTJForCausalLM'''),
        ('''opt''', '''FlaxOPTForCausalLM'''),
        ('''roberta''', '''FlaxRobertaForCausalLM'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormForCausalLM'''),
        ('''xglm''', '''FlaxXGLMForCausalLM'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaForCausalLM'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Sequence Classification mapping
        ('''albert''', '''FlaxAlbertForSequenceClassification'''),
        ('''bart''', '''FlaxBartForSequenceClassification'''),
        ('''bert''', '''FlaxBertForSequenceClassification'''),
        ('''big_bird''', '''FlaxBigBirdForSequenceClassification'''),
        ('''distilbert''', '''FlaxDistilBertForSequenceClassification'''),
        ('''electra''', '''FlaxElectraForSequenceClassification'''),
        ('''mbart''', '''FlaxMBartForSequenceClassification'''),
        ('''roberta''', '''FlaxRobertaForSequenceClassification'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormForSequenceClassification'''),
        ('''roformer''', '''FlaxRoFormerForSequenceClassification'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaForSequenceClassification'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Question Answering mapping
        ('''albert''', '''FlaxAlbertForQuestionAnswering'''),
        ('''bart''', '''FlaxBartForQuestionAnswering'''),
        ('''bert''', '''FlaxBertForQuestionAnswering'''),
        ('''big_bird''', '''FlaxBigBirdForQuestionAnswering'''),
        ('''distilbert''', '''FlaxDistilBertForQuestionAnswering'''),
        ('''electra''', '''FlaxElectraForQuestionAnswering'''),
        ('''mbart''', '''FlaxMBartForQuestionAnswering'''),
        ('''roberta''', '''FlaxRobertaForQuestionAnswering'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormForQuestionAnswering'''),
        ('''roformer''', '''FlaxRoFormerForQuestionAnswering'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaForQuestionAnswering'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Token Classification mapping
        ('''albert''', '''FlaxAlbertForTokenClassification'''),
        ('''bert''', '''FlaxBertForTokenClassification'''),
        ('''big_bird''', '''FlaxBigBirdForTokenClassification'''),
        ('''distilbert''', '''FlaxDistilBertForTokenClassification'''),
        ('''electra''', '''FlaxElectraForTokenClassification'''),
        ('''roberta''', '''FlaxRobertaForTokenClassification'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormForTokenClassification'''),
        ('''roformer''', '''FlaxRoFormerForTokenClassification'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaForTokenClassification'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        # Model for Multiple Choice mapping
        ('''albert''', '''FlaxAlbertForMultipleChoice'''),
        ('''bert''', '''FlaxBertForMultipleChoice'''),
        ('''big_bird''', '''FlaxBigBirdForMultipleChoice'''),
        ('''distilbert''', '''FlaxDistilBertForMultipleChoice'''),
        ('''electra''', '''FlaxElectraForMultipleChoice'''),
        ('''roberta''', '''FlaxRobertaForMultipleChoice'''),
        ('''roberta-prelayernorm''', '''FlaxRobertaPreLayerNormForMultipleChoice'''),
        ('''roformer''', '''FlaxRoFormerForMultipleChoice'''),
        ('''xlm-roberta''', '''FlaxXLMRobertaForMultipleChoice'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        ('''bert''', '''FlaxBertForNextSentencePrediction'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        ('''speech-encoder-decoder''', '''FlaxSpeechEncoderDecoderModel'''),
        ('''whisper''', '''FlaxWhisperForConditionalGeneration'''),
    ]
)

snake_case_        =			OrderedDict(
    [
        ('''whisper''', '''FlaxWhisperForAudioClassification'''),
    ]
)

snake_case_        =			_LazyAutoMapping(CONFIG_MAPPING_NAMES, FLAX_MODEL_MAPPING_NAMES)
snake_case_        =			_LazyAutoMapping(CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_PRETRAINING_MAPPING_NAMES)
snake_case_        =			_LazyAutoMapping(CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_MASKED_LM_MAPPING_NAMES)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES)
snake_case_        =			_LazyAutoMapping(CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_CAUSAL_LM_MAPPING_NAMES)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_QUESTION_ANSWERING_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_MULTIPLE_CHOICE_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_NEXT_SENTENCE_PREDICTION_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES
)
snake_case_        =			_LazyAutoMapping(
    CONFIG_MAPPING_NAMES, FLAX_MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES
)


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	str														=					FLAX_MODEL_MAPPING



snake_case_        =			auto_class_update(FlaxAutoModel)


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Dict														=					FLAX_MODEL_FOR_PRETRAINING_MAPPING



snake_case_        =			auto_class_update(FlaxAutoModelForPreTraining, head_doc='''pretraining''')


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	List[Any]														=					FLAX_MODEL_FOR_CAUSAL_LM_MAPPING



snake_case_        =			auto_class_update(FlaxAutoModelForCausalLM, head_doc='''causal language modeling''')


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Optional[int]														=					FLAX_MODEL_FOR_MASKED_LM_MAPPING



snake_case_        =			auto_class_update(FlaxAutoModelForMaskedLM, head_doc='''masked language modeling''')


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Optional[int]														=					FLAX_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING



snake_case_        =			auto_class_update(
    FlaxAutoModelForSeqaSeqLM, head_doc='''sequence-to-sequence language modeling''', checkpoint_for_example='''t5-base'''
)


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Dict														=					FLAX_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING



snake_case_        =			auto_class_update(
    FlaxAutoModelForSequenceClassification, head_doc='''sequence classification'''
)


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Tuple														=					FLAX_MODEL_FOR_QUESTION_ANSWERING_MAPPING



snake_case_        =			auto_class_update(FlaxAutoModelForQuestionAnswering, head_doc='''question answering''')


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Tuple														=					FLAX_MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING



snake_case_        =			auto_class_update(
    FlaxAutoModelForTokenClassification, head_doc='''token classification'''
)


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	str														=					FLAX_MODEL_FOR_MULTIPLE_CHOICE_MAPPING



snake_case_        =			auto_class_update(FlaxAutoModelForMultipleChoice, head_doc='''multiple choice''')


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Union[str, Any]														=					FLAX_MODEL_FOR_NEXT_SENTENCE_PREDICTION_MAPPING



snake_case_        =			auto_class_update(
    FlaxAutoModelForNextSentencePrediction, head_doc='''next sentence prediction'''
)


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Union[str, Any]														=					FLAX_MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING



snake_case_        =			auto_class_update(
    FlaxAutoModelForImageClassification, head_doc='''image classification'''
)


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	Tuple														=					FLAX_MODEL_FOR_VISION_2_SEQ_MAPPING



snake_case_        =			auto_class_update(FlaxAutoModelForVisionaSeq, head_doc='''vision-to-text modeling''')


class 				SCREAMING_SNAKE_CASE__ (_BaseAutoModelClass					):
    __lowerCamelCase						:	List[str]														=					FLAX_MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING



snake_case_        =			auto_class_update(
    FlaxAutoModelForSpeechSeqaSeq, head_doc='''sequence-to-sequence speech-to-text modeling'''
)

