
'''simple docstring'''

from typing import Optional, Tuple

import flax.linen as nn
import jax
import jax.numpy as jnp
from configuration_hybrid_clip import HybridCLIPConfig
from flax.core.frozen_dict import FrozenDict

from transformers import FLAX_MODEL_MAPPING, FlaxCLIPVisionModel
from transformers.modeling_flax_utils import FlaxPreTrainedModel
from transformers.models.clip.modeling_flax_clip import FlaxCLIPOutput
from transformers.utils import logging


lowerCAmelCase_			:			List[str]			   =     logging.get_logger(__name__)







class 	__lowerCAmelCase    (  nn.Module				):
     snake_case   :    HybridCLIPConfig
     snake_case   :    jnp.dtype							      =      jnp.floataa



     def     snake_case_ (self	):
          _UpperCAmelCase					:  int         =    self.config.text_config
          _UpperCAmelCase					:  Dict         =    self.config.vision_config

          _UpperCAmelCase					:  str         =    self.config.projection_dim
          _UpperCAmelCase					:  int         =    text_config.hidden_size
          _UpperCAmelCase					:  int         =    vision_config.hidden_size

          _UpperCAmelCase					:  Optional[int]         =    FLAX_MODEL_MAPPING[self.config.text_config.__class__].module_class
          _UpperCAmelCase					:  List[Any]         =    FLAX_MODEL_MAPPING.get(self.config.vision_config.__class__						,	lowerCAmelCase__	).module_class

          _UpperCAmelCase					:  List[Any]         =    text_module(lowerCAmelCase__						,	dtype=self.dtype	)
          _UpperCAmelCase					:  Union[str, Any]         =    vision_module(lowerCAmelCase__						,	dtype=self.dtype	)

          _UpperCAmelCase					:  Optional[int]         =    nn.Dense(
              self.projection_dim						,	dtype=self.dtype						,	kernel_init=jax.nn.initializers.normal(0.0_2	)						,	use_bias=lowerCAmelCase__						,	)
          _UpperCAmelCase					:  List[str]         =    nn.Dense(
              self.projection_dim						,	dtype=self.dtype						,	kernel_init=jax.nn.initializers.normal(0.0_2	)						,	use_bias=lowerCAmelCase__						,	)
          _UpperCAmelCase					:  List[Any]         =    self.param("""logit_scale"""						,	jax.nn.initializers.ones						,	[]	)



     def __call__(self						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__ = True						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	):
          _UpperCAmelCase					:  int         =    return_dict if return_dict is not None else self.config.return_dict

          _UpperCAmelCase					:  Dict         =    self.vision_model(
              pixel_values=lowerCAmelCase__						,	deterministic=lowerCAmelCase__						,	output_attentions=lowerCAmelCase__						,	output_hidden_states=lowerCAmelCase__						,	return_dict=lowerCAmelCase__						,	)

          _UpperCAmelCase					:  int         =    self.text_model(
              input_ids=lowerCAmelCase__						,	attention_mask=lowerCAmelCase__						,	token_type_ids=lowerCAmelCase__						,	position_ids=lowerCAmelCase__						,	deterministic=lowerCAmelCase__						,	output_attentions=lowerCAmelCase__						,	output_hidden_states=lowerCAmelCase__						,	return_dict=lowerCAmelCase__						,	)

          _UpperCAmelCase					:  int         =    vision_outputs[1]
          _UpperCAmelCase					:  Dict         =    self.visual_projection(lowerCAmelCase__	)

          _UpperCAmelCase					:  List[str]         =    text_outputs[1]
          _UpperCAmelCase					:  List[Any]         =    self.text_projection(lowerCAmelCase__	)

          # normalized features
          _UpperCAmelCase					:  List[Any]         =    image_embeds / jnp.linalg.norm(lowerCAmelCase__						,	axis=-1						,	keepdims=lowerCAmelCase__	)
          _UpperCAmelCase					:  Optional[Any]         =    text_embeds / jnp.linalg.norm(lowerCAmelCase__						,	axis=-1						,	keepdims=lowerCAmelCase__	)

          # cosine similarity as logits
          _UpperCAmelCase					:  str         =    jnp.exp(self.logit_scale	)
          _UpperCAmelCase					:  str         =    jnp.matmul(lowerCAmelCase__						,	image_embeds.T	) * logit_scale
          _UpperCAmelCase					:  Any         =    logits_per_text.T

          if not return_dict:
               return (logits_per_image, logits_per_text, text_embeds, image_embeds, text_outputs, vision_outputs)

          return FlaxCLIPOutput(
              logits_per_image=lowerCAmelCase__						,	logits_per_text=lowerCAmelCase__						,	text_embeds=lowerCAmelCase__						,	image_embeds=lowerCAmelCase__						,	text_model_output=lowerCAmelCase__						,	vision_model_output=lowerCAmelCase__						,	)







class 	__lowerCAmelCase    (  __a				):
     snake_case   :    List[Any]							      =      HybridCLIPConfig
     snake_case   :    int							      =      FlaxHybridCLIPModule



     def __init__(self						,	lowerCAmelCase__						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = 0						,	lowerCAmelCase__ = jnp.floataa						,	**lowerCAmelCase__						,	):
          if input_shape is None:
               _UpperCAmelCase					:  Optional[Any]         =    ((1, 1), (1, config.vision_config.image_size, config.vision_config.image_size, 3))

          _UpperCAmelCase					:  Union[str, Any]         =    self.module_class(config=lowerCAmelCase__						,	dtype=lowerCAmelCase__						,	**lowerCAmelCase__	)
          super().__init__(lowerCAmelCase__						,	lowerCAmelCase__						,	input_shape=lowerCAmelCase__						,	seed=lowerCAmelCase__						,	dtype=lowerCAmelCase__	)



     def     snake_case_ (self						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__ = None	):
          # init input tensor
          _UpperCAmelCase					:  List[Any]         =    jnp.zeros(input_shape[0]						,	dtype="""i4"""	)
          _UpperCAmelCase					:  str         =    jnp.broadcast_to(jnp.arange(jnp.atleast_ad(lowerCAmelCase__	).shape[-1]	)						,	input_shape[0]	)
          _UpperCAmelCase					:  List[Any]         =    jnp.ones_like(lowerCAmelCase__	)
          _UpperCAmelCase					:  List[str]         =    jnp.ones_like(lowerCAmelCase__	)

          _UpperCAmelCase					:  Any         =    jax.random.normal(lowerCAmelCase__						,	input_shape[1]	)

          _UpperCAmelCase  ,     _UpperCAmelCase					:  int         =    jax.random.split(lowerCAmelCase__	)
          _UpperCAmelCase					:  Any         =    {"""params""": params_rng, """dropout""": dropout_rng}

          return self.module.init(lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__	)["params"]



     def __call__(self						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = False						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = None						,	):
          _UpperCAmelCase					:  Any         =    output_attentions if output_attentions is not None else self.config.output_attentions
          _UpperCAmelCase					:  int         =    (
              output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
          )
          _UpperCAmelCase					:  int         =    return_dict if return_dict is not None else self.config.return_dict

          if position_ids is None:
               _UpperCAmelCase					:  List[Any]         =    jnp.broadcast_to(jnp.arange(jnp.atleast_ad(lowerCAmelCase__	).shape[-1]	)						,	input_ids.shape	)

          if token_type_ids is None:
               _UpperCAmelCase					:  List[str]         =    jnp.zeros_like(lowerCAmelCase__	)

          if attention_mask is None:
               _UpperCAmelCase					:  Any         =    jnp.ones_like(lowerCAmelCase__	)

          # Handle any PRNG if needed
          _UpperCAmelCase					:  List[str]         =    {}
          if dropout_rng is not None:
               _UpperCAmelCase					:  Union[str, Any]         =    dropout_rng

          return self.module.apply(
              {"""params""": params or self.params}						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	jnp.array(lowerCAmelCase__						,	dtype=jnp.floataa	)						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	not train						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__						,	rngs=lowerCAmelCase__						,	)



     def     snake_case_ (self						,	lowerCAmelCase__						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__=None						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = None						,	lowerCAmelCase__=False						,	):
          if position_ids is None:
               _UpperCAmelCase					:  str         =    jnp.broadcast_to(jnp.arange(jnp.atleast_ad(lowerCAmelCase__	).shape[-1]	)						,	input_ids.shape	)

          if token_type_ids is None:
               _UpperCAmelCase					:  str         =    jnp.zeros_like(lowerCAmelCase__	)

          if attention_mask is None:
               _UpperCAmelCase					:  Optional[Any]         =    jnp.ones_like(lowerCAmelCase__	)

          # Handle any PRNG if needed
          _UpperCAmelCase					:  str         =    {}
          if dropout_rng is not None:
               _UpperCAmelCase					:  List[Any]         =    dropout_rng

          def _get_features(lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__	):
               _UpperCAmelCase					:  Union[str, Any]         =    module.text_model(
                   input_ids=lowerCAmelCase__						,	attention_mask=lowerCAmelCase__						,	position_ids=lowerCAmelCase__						,	token_type_ids=lowerCAmelCase__						,	deterministic=lowerCAmelCase__						,	)
               _UpperCAmelCase					:  Optional[int]         =    text_outputs[1]
               _UpperCAmelCase					:  List[Any]         =    module.text_projection(lowerCAmelCase__	)
               return text_features

          return self.module.apply(
              {"""params""": params or self.params}						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	jnp.array(lowerCAmelCase__						,	dtype="""i4"""	)						,	not train						,	method=_get_features						,	rngs=lowerCAmelCase__						,	)



     def     snake_case_ (self						,	lowerCAmelCase__						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = None						,	lowerCAmelCase__=False	):
          _UpperCAmelCase					:  Any         =    {}
          if dropout_rng is not None:
               _UpperCAmelCase					:  int         =    dropout_rng

          def _get_features(lowerCAmelCase__						,	lowerCAmelCase__						,	lowerCAmelCase__	):
               _UpperCAmelCase					:  Optional[Any]         =    module.vision_model(pixel_values=lowerCAmelCase__						,	deterministic=lowerCAmelCase__	)
               _UpperCAmelCase					:  int         =    vision_outputs[1]  # pooled_output
               _UpperCAmelCase					:  Optional[int]         =    module.visual_projection(lowerCAmelCase__	)
               return image_features

          return self.module.apply(
              {"""params""": params or self.params}						,	jnp.array(lowerCAmelCase__						,	dtype=jnp.floataa	)						,	not train						,	method=_get_features						,	rngs=lowerCAmelCase__						,	)



     @classmethod
     def     snake_case_ (cls						,	lowerCAmelCase__ = None						,	lowerCAmelCase__ = None						,	*lowerCAmelCase__						,	**lowerCAmelCase__						,	):
          _UpperCAmelCase					:  List[Any]         =    {
              argument[len("""text_"""	) :]: value for argument, value in kwargs.items() if argument.startswith("""text_"""	)
          }

          _UpperCAmelCase					:  Tuple         =    {
              argument[len("""vision_"""	) :]: value for argument, value in kwargs.items() if argument.startswith("""vision_"""	)
          }

          # remove text, vision kwargs from kwargs
          for key in kwargs_text.keys():
               del kwargs["text_" + key]
          for key in kwargs_vision.keys():
               del kwargs["vision_" + key]

          # Load and initialize the text and vision model
          _UpperCAmelCase					:  List[Any]         =    kwargs_text.pop("""model"""						,	lowerCAmelCase__	)
          if text_model is None:
               assert (
                   text_model_name_or_path is not None
               ), "If `model` is not defined as an argument, a `text_model_name_or_path` has to be defined"
               from transformers import FlaxAutoModel

               if "config" not in kwargs_text:
                    from transformers import AutoConfig

                    _UpperCAmelCase					:  Any         =    AutoConfig.from_pretrained(lowerCAmelCase__	)
                    _UpperCAmelCase					:  int         =    text_config

               _UpperCAmelCase					:  Any         =    FlaxAutoModel.from_pretrained(lowerCAmelCase__						,	*lowerCAmelCase__						,	**lowerCAmelCase__	)

          _UpperCAmelCase					:  List[Any]         =    kwargs_vision.pop("""model"""						,	lowerCAmelCase__	)
          if vision_model is None:
               assert (
                   vision_model_name_or_path is not None
               ), "If `model` is not defined as an argument, a `vision_model_name_or_path` has to be defined"
               from transformers import FlaxAutoModel

               if "config" not in kwargs_vision:
                    from transformers import AutoConfig

                    _UpperCAmelCase					:  Union[str, Any]         =    AutoConfig.from_pretrained(lowerCAmelCase__	)
                    _UpperCAmelCase					:  Any         =    vision_config

               _UpperCAmelCase					:  Tuple         =    FlaxAutoModel.from_pretrained(lowerCAmelCase__						,	*lowerCAmelCase__						,	**lowerCAmelCase__	)

          # instantiate config with corresponding kwargs
          _UpperCAmelCase					:  List[Any]         =    kwargs.pop("""dtype"""						,	jnp.floataa	)
          _UpperCAmelCase					:  List[Any]         =    HybridCLIPConfig.from_text_vision_configs(text_model.config						,	vision_model.config						,	**lowerCAmelCase__	)

          # init model
          _UpperCAmelCase					:  Optional[Any]         =    cls(lowerCAmelCase__						,	*lowerCAmelCase__						,	dtype=lowerCAmelCase__						,	**lowerCAmelCase__	)

          if vision_config.model_type == "clip":
               _UpperCAmelCase					:  str         =    vision_model.params["""vision_model"""]
               _UpperCAmelCase					:  int         =    vision_model.params["""visual_projection"""]["""kernel"""]
          else:
               _UpperCAmelCase					:  List[str]         =    vision_model.params

          _UpperCAmelCase					:  Any         =    text_model.params

          return model










"""simple docstring"""







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

from ... import PreTrainedTokenizer
from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig, OnnxConfigWithPast, OnnxSeqaSeqConfigWithPast
from ...onnx.utils import compute_effective_axis_dimension
from ...utils import TensorType, is_torch_available, logging


_UpperCamelCase     			=  logging.get_logger(__name__)

_UpperCamelCase     			=  {
    """facebook/mbart-large-cc25""": """https://huggingface.co/facebook/mbart-large-cc25/resolve/main/config.json""",
    # See all MBART models at https://huggingface.co/models?filter=mbart
}







class 					lowerCamelCase__					(       snake_case ):
    SCREAMING_SNAKE_CASE		=			'''mbart'''
    SCREAMING_SNAKE_CASE		=			['''past_key_values''']
    SCREAMING_SNAKE_CASE		=			{'''num_attention_heads''': '''encoder_attention_heads''', '''hidden_size''': '''d_model'''}






    def __init__( self	,A=50_265	,A=1_024	,A=12	,A=4_096	,A=16	,A=12	,A=4_096	,A=16	,A=0.0	,A=0.0	,A=True	,A=True	,A="gelu"	,A=1_024	,A=0.1	,A=0.0	,A=0.0	,A=0.02	,A=0.0	,A=False	,A=1	,A=0	,A=2	,A=2	,**A	,):
          UpperCAmelCase							=       vocab_size
          UpperCAmelCase							=       max_position_embeddings
          UpperCAmelCase							=       d_model
          UpperCAmelCase							=       encoder_ffn_dim
          UpperCAmelCase							=       encoder_layers
          UpperCAmelCase							=       encoder_attention_heads
          UpperCAmelCase							=       decoder_ffn_dim
          UpperCAmelCase							=       decoder_layers
          UpperCAmelCase							=       decoder_attention_heads
          UpperCAmelCase							=       dropout
          UpperCAmelCase							=       attention_dropout
          UpperCAmelCase							=       activation_dropout
          UpperCAmelCase							=       activation_function
          UpperCAmelCase							=       init_std
          UpperCAmelCase							=       encoder_layerdrop
          UpperCAmelCase							=       decoder_layerdrop
          UpperCAmelCase							=       classifier_dropout
          UpperCAmelCase							=       use_cache
          UpperCAmelCase							=       encoder_layers
          UpperCAmelCase							=       scale_embedding  # scale factor will be sqrt(d_model) if True
          super().__init__(
              pad_token_id=A	,bos_token_id=A	,eos_token_id=A	,is_encoder_decoder=A	,forced_eos_token_id=A	,**A	,)







class 					lowerCamelCase__					(       snake_case ):






    @property
    def 				_UpperCamelCase							( self					):
          if self.task in ["default", "seq2seq-lm"]:
                UpperCAmelCase							=       OrderedDict(
                    [
                        ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                        ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                    ]					)

                if self.use_past:
                      UpperCAmelCase							=       {0: """batch"""}
                      UpperCAmelCase							=       {0: """batch""", 1: """past_decoder_sequence + sequence"""}
                else:
                      UpperCAmelCase							=       {0: """batch""", 1: """decoder_sequence"""}
                      UpperCAmelCase							=       {0: """batch""", 1: """decoder_sequence"""}

                if self.use_past:
                      self.fill_with_past_key_values_(A	,direction="""inputs"""					)
          elif self.task == "causal-lm":
                # TODO: figure this case out.
                UpperCAmelCase							=       OrderedDict(
                    [
                        ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                        ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                    ]					)
                if self.use_past:
                      UpperCAmelCase			,					UpperCAmelCase							=       self.num_layers
                      for i in range(A					):
                            UpperCAmelCase							=       {0: """batch""", 2: """past_sequence + sequence"""}
                            UpperCAmelCase							=       {0: """batch""", 2: """past_sequence + sequence"""}
          else:
                UpperCAmelCase							=       OrderedDict(
                    [
                        ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                        ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                        ("""decoder_input_ids""", {0: """batch""", 1: """decoder_sequence"""}),
                        ("""decoder_attention_mask""", {0: """batch""", 1: """decoder_sequence"""}),
                    ]					)

          return common_inputs






    @property
    def 				_UpperCamelCase							( self					):
          if self.task in ["default", "seq2seq-lm"]:
                UpperCAmelCase							=       super().outputs
          else:
                UpperCAmelCase							=       super(A	,self					).outputs
                if self.use_past:
                      UpperCAmelCase			,					UpperCAmelCase							=       self.num_layers
                      for i in range(A					):
                            UpperCAmelCase							=       {0: """batch""", 2: """past_sequence + sequence"""}
                            UpperCAmelCase							=       {0: """batch""", 2: """past_sequence + sequence"""}
          return common_outputs






    def 				_UpperCamelCase							( self	,A	,A = -1	,A = -1	,A = False	,A = None	,):
          UpperCAmelCase							=       self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
              A	,A	,A	,A	,A					)

          # Generate decoder inputs
          UpperCAmelCase							=       seq_length if not self.use_past else 1
          UpperCAmelCase							=       self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
              A	,A	,A	,A	,A					)
          UpperCAmelCase							=       {F'''decoder_{name}''': tensor for name, tensor in decoder_inputs.items()}
          UpperCAmelCase							=       dict(**A	,**A					)

          if self.use_past:
                if not is_torch_available():
                      raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""					)
                else:
                      import torch
                UpperCAmelCase			,					UpperCAmelCase							=       common_inputs["""input_ids"""].shape
                UpperCAmelCase							=       common_inputs["""decoder_input_ids"""].shape[1]
                UpperCAmelCase			,					UpperCAmelCase							=       self.num_attention_heads
                UpperCAmelCase							=       (
                    batch,
                    num_encoder_attention_heads,
                    encoder_seq_length,
                    self._config.hidden_size // num_encoder_attention_heads,
                )
                UpperCAmelCase							=       decoder_seq_length + 3
                UpperCAmelCase							=       (
                    batch,
                    num_decoder_attention_heads,
                    decoder_past_length,
                    self._config.hidden_size // num_decoder_attention_heads,
                )

                UpperCAmelCase							=       torch.cat(
                    [common_inputs["""decoder_attention_mask"""], torch.ones(A	,A					)]	,dim=1					)

                UpperCAmelCase							=       []
                # If the number of encoder and decoder layers are present in the model configuration, both are considered
                UpperCAmelCase			,					UpperCAmelCase							=       self.num_layers
                UpperCAmelCase							=       min(A	,A					)
                UpperCAmelCase							=       max(A	,A					) - min_num_layers
                UpperCAmelCase							=       """encoder""" if num_encoder_layers > num_decoder_layers else """decoder"""

                for _ in range(A					):
                      common_inputs["past_key_values"].append(
                          (
                              torch.zeros(A					),
                              torch.zeros(A					),
                              torch.zeros(A					),
                              torch.zeros(A					),
                          )					)
                # TODO: test this.
                UpperCAmelCase							=       encoder_shape if remaining_side_name == """encoder""" else decoder_shape
                for _ in range(A	,A					):
                      common_inputs["past_key_values"].append((torch.zeros(A					), torch.zeros(A					))					)
          return common_inputs






    def 				_UpperCamelCase							( self	,A	,A = -1	,A = -1	,A = False	,A = None	,):
          UpperCAmelCase							=       self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
              A	,A	,A	,A	,A					)

          if self.use_past:
                if not is_torch_available():
                      raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""					)
                else:
                      import torch
                UpperCAmelCase			,					UpperCAmelCase							=       common_inputs["""input_ids"""].shape
                # Not using the same length for past_key_values
                UpperCAmelCase							=       seqlen + 2
                UpperCAmelCase			,					UpperCAmelCase							=       self.num_layers
                UpperCAmelCase			,					UpperCAmelCase							=       self.num_attention_heads
                UpperCAmelCase							=       (
                    batch,
                    num_encoder_attention_heads,
                    past_key_values_length,
                    self._config.hidden_size // num_encoder_attention_heads,
                )

                UpperCAmelCase							=       common_inputs["""attention_mask"""].dtype
                UpperCAmelCase							=       torch.cat(
                    [common_inputs["""attention_mask"""], torch.ones(A	,A	,dtype=A					)]	,dim=1					)
                UpperCAmelCase							=       [
                    (torch.zeros(A					), torch.zeros(A					)) for _ in range(A					)
                ]
          return common_inputs






    def 				_UpperCamelCase							( self	,A	,A = -1	,A = -1	,A = False	,A = None	,):
          # Copied from OnnxConfig.generate_dummy_inputs
          # Did not use super(OnnxConfigWithPast, self).generate_dummy_inputs for code clarity.
          # If dynamic axis (-1) we forward with a fixed dimension of 2 samples to avoid optimizations made by ONNX
          UpperCAmelCase							=       compute_effective_axis_dimension(
              A	,fixed_dimension=OnnxConfig.default_fixed_batch	,num_token_to_add=0					)

          # If dynamic axis (-1) we forward with a fixed dimension of 8 tokens to avoid optimizations made by ONNX
          UpperCAmelCase							=       tokenizer.num_special_tokens_to_add(A					)
          UpperCAmelCase							=       compute_effective_axis_dimension(
              A	,fixed_dimension=OnnxConfig.default_fixed_sequence	,num_token_to_add=A					)

          # Generate dummy inputs according to compute batch and sequence
          UpperCAmelCase							=       [""" """.join([tokenizer.unk_token]					) * seq_length] * batch_size
          UpperCAmelCase							=       dict(tokenizer(A	,return_tensors=A					)					)
          return common_inputs






    def 				_UpperCamelCase							( self	,A	,A = -1	,A = -1	,A = False	,A = None	,):
          if self.task in ["default", "seq2seq-lm"]:
                UpperCAmelCase							=       self._generate_dummy_inputs_for_default_and_seqaseq_lm(
                    A	,batch_size=A	,seq_length=A	,is_pair=A	,framework=A					)

          elif self.task == "causal-lm":
                UpperCAmelCase							=       self._generate_dummy_inputs_for_causal_lm(
                    A	,batch_size=A	,seq_length=A	,is_pair=A	,framework=A					)
          else:
                UpperCAmelCase							=       self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
                    A	,batch_size=A	,seq_length=A	,is_pair=A	,framework=A					)

          return common_inputs






    def 				_UpperCamelCase							( self	,A	,A	,A	,A					):
          if self.task in ["default", "seq2seq-lm"]:
                UpperCAmelCase							=       super()._flatten_past_key_values_(A	,A	,A	,A					)
          else:
                UpperCAmelCase							=       super(A	,self					)._flatten_past_key_values_(
                    A	,A	,A	,A					)



