





'''simple docstring'''






from collections import OrderedDict
from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig


snake_case_     =	{
    """albert-base-v1""": """https://huggingface.co/albert-base-v1/resolve/main/config.json""",
    """albert-large-v1""": """https://huggingface.co/albert-large-v1/resolve/main/config.json""",
    """albert-xlarge-v1""": """https://huggingface.co/albert-xlarge-v1/resolve/main/config.json""",
    """albert-xxlarge-v1""": """https://huggingface.co/albert-xxlarge-v1/resolve/main/config.json""",
    """albert-base-v2""": """https://huggingface.co/albert-base-v2/resolve/main/config.json""",
    """albert-large-v2""": """https://huggingface.co/albert-large-v2/resolve/main/config.json""",
    """albert-xlarge-v2""": """https://huggingface.co/albert-xlarge-v2/resolve/main/config.json""",
    """albert-xxlarge-v2""": """https://huggingface.co/albert-xxlarge-v2/resolve/main/config.json""",
}


class   _lowercase						(							UpperCAmelCase__				):
			_UpperCamelCase       		=   'albert'


			def __init__( self    ,   _UpperCAmelCase=30_000    ,   _UpperCAmelCase=128    ,   _UpperCAmelCase=4_096    ,   _UpperCAmelCase=12    ,   _UpperCAmelCase=1    ,   _UpperCAmelCase=64    ,   _UpperCAmelCase=16_384    ,   _UpperCAmelCase=1    ,   _UpperCAmelCase="gelu_new"    ,   _UpperCAmelCase=0    ,   _UpperCAmelCase=0    ,   _UpperCAmelCase=512    ,   _UpperCAmelCase=2    ,   _UpperCAmelCase=0.02    ,   _UpperCAmelCase=1E-1_2    ,   _UpperCAmelCase=0.1    ,   _UpperCAmelCase="absolute"    ,   _UpperCAmelCase=0    ,   _UpperCAmelCase=2    ,   _UpperCAmelCase=3    ,   **_UpperCAmelCase    ,   ):
							super().__init__(pad_token_id=_UpperCAmelCase    ,   bos_token_id=_UpperCAmelCase    ,   eos_token_id=_UpperCAmelCase    ,   **_UpperCAmelCase					)

							A       :       List[str]							=						vocab_size
							A       :       Optional[int]							=						embedding_size
							A       :       Optional[int]							=						hidden_size
							A       :       Tuple							=						num_hidden_layers
							A       :       Any							=						num_hidden_groups
							A       :       List[Any]							=						num_attention_heads
							A       :       List[Any]							=						inner_group_num
							A       :       Optional[int]							=						hidden_act
							A       :       int							=						intermediate_size
							A       :       Any							=						hidden_dropout_prob
							A       :       Union[str, Any]							=						attention_probs_dropout_prob
							A       :       int							=						max_position_embeddings
							A       :       Any							=						type_vocab_size
							A       :       int							=						initializer_range
							A       :       List[Any]							=						layer_norm_eps
							A       :       Dict							=						classifier_dropout_prob
							A       :       int							=						position_embedding_type







class   _lowercase						(							UpperCAmelCase__				):


			@property
			def 					snake_case				( self					):




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







'''simple docstring'''






import random
import unittest

import numpy as np

import transformers
from transformers import is_flax_available, is_torch_available
from transformers.testing_utils import is_pt_flax_cross_test, require_flax


if is_flax_available():
     import os

     import jax.numpy as jnp
     from jax import jit

     from transformers import AutoTokenizer, FlaxAutoModelForCausalLM
     from transformers.modeling_flax_pytorch_utils import load_flax_weights_in_pytorch_model

     snake_case_     =	"""0.12"""  # assumed parallelism: 8


if is_torch_available():
     import torch
def 							_lowerCamelCase(  UpperCamelCase__    : int    ,       UpperCamelCase__    : Optional[int]    ,       UpperCamelCase__    : Any=None		)		->  List[Any]:
    if rng is None:
        A       :       int							=						random.Random()

    A       :       int							=						1
    for dim in shape:
        total_dims *= dim

    A       :       Union[str, Any]							=						[]
    for _ in range(UpperCamelCase__		):
        values.append(rng.randint(0    ,       vocab_size - 1		)		)

    A       :       Union[str, Any]							=						np.array(UpperCamelCase__    ,       dtype=jnp.intaa		).reshape(UpperCamelCase__		)

    return output
def 							_lowerCamelCase(  UpperCamelCase__    : Dict    ,       UpperCamelCase__    : Optional[Any]=None		)		->  Dict:
    A       :       Union[str, Any]							=						ids_tensor(UpperCamelCase__    ,       vocab_size=2    ,       rng=UpperCamelCase__		)
    # make sure that at least one token is attended to for each batch
    A       :       Any							=						1
    return attn_mask


@require_flax
class   _lowercase						:
   _UpperCamelCase       		=   None
   _UpperCamelCase       		=   ()


   def 					snake_case				( self					):
       A,	A       :       Optional[int]							=						self.model_tester.prepare_config_and_inputs_for_common()

       # cut to half length & take max batch_size 3
       A       :       Dict							=						2
       A       :       List[str]							=						inputs['''input_ids'''].shape[-1] // 2
       A       :       int							=						inputs['''input_ids'''][:max_batch_size, :sequence_length]

       A       :       Optional[Any]							=						jnp.ones_like(_UpperCAmelCase					)
       A       :       int							=						attention_mask[:max_batch_size, :sequence_length]

       # generate max 5 tokens
       A       :       Optional[int]							=						input_ids.shape[-1] + 5
       if config.eos_token_id is not None and config.pad_token_id is None:
           # hack to allow generate for models such as GPT2 as is done in `generate()`
           A       :       str							=						config.eos_token_id
       return config, input_ids, attention_mask, max_length


   @is_pt_flax_cross_test
   def 					snake_case				( self					):
       A,	A,	A,	A       :       Optional[Any]							=						self._get_input_ids_and_config()
       A       :       Optional[int]							=						False
       A       :       Union[str, Any]							=						max_length
       A       :       str							=						0

       for model_class in self.all_generative_model_classes:
           A       :       int							=						model_class(_UpperCAmelCase					)

           A       :       Dict							=						model_class.__name__[4:]  # Skip the "Flax" at the beginning
           A       :       int							=						getattr(_UpperCAmelCase    ,   _UpperCAmelCase					)
           A       :       Union[str, Any]							=						pt_model_class(_UpperCAmelCase					).eval()
           A       :       Tuple							=						load_flax_weights_in_pytorch_model(_UpperCAmelCase    ,   flax_model.params					)

           A       :       Union[str, Any]							=						flax_model.generate(_UpperCAmelCase					).sequences
           A       :       Optional[int]							=						pt_model.generate(torch.tensor(_UpperCAmelCase    ,   dtype=torch.long					)					)

           if flax_generation_outputs.shape[-1] > pt_generation_outputs.shape[-1]:
               A       :       List[Any]							=						flax_generation_outputs[:, : pt_generation_outputs.shape[-1]]

           self.assertListEqual(pt_generation_outputs.numpy().tolist()    ,   flax_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       str							=						self._get_input_ids_and_config()
       A       :       Optional[int]							=						False
       A       :       Dict							=						max_length

       for model_class in self.all_generative_model_classes:
           A       :       Any							=						model_class(_UpperCAmelCase					)

           A       :       Dict							=						model.generate(_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       str							=						jit(model.generate					)
           A       :       List[Any]							=						jit_generate(_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       List[Any]							=						self._get_input_ids_and_config()
       A       :       List[str]							=						True
       A       :       List[Any]							=						max_length

       for model_class in self.all_generative_model_classes:
           A       :       Any							=						model_class(_UpperCAmelCase					)

           A       :       Tuple							=						model.generate(_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       Tuple							=						jit(model.generate					)
           A       :       int							=						jit_generate(_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       List[str]							=						self._get_input_ids_and_config()
       A       :       Any							=						False
       A       :       str							=						max_length
       A       :       Optional[int]							=						2

       for model_class in self.all_generative_model_classes:
           A       :       Dict							=						model_class(_UpperCAmelCase					)

           A       :       Any							=						model.generate(_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       List[Any]							=						jit(model.generate					)
           A       :       Optional[Any]							=						jit_generate(_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       Optional[int]							=						self._get_input_ids_and_config()
       A       :       Dict							=						False
       A       :       List[Any]							=						max_length
       A       :       Optional[int]							=						2
       A       :       int							=						2

       for model_class in self.all_generative_model_classes:
           A       :       List[str]							=						model_class(_UpperCAmelCase					)

           A       :       List[str]							=						model.generate(_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[0]    ,   input_ids.shape[0] * config.num_return_sequences					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       List[Any]							=						self._get_input_ids_and_config()
       A       :       Any							=						True
       A       :       Any							=						max_length
       A       :       Any							=						0.8
       A       :       List[Any]							=						10
       A       :       List[Any]							=						0.3
       A       :       Union[str, Any]							=						1
       A       :       Any							=						8
       A       :       List[Any]							=						9

       for model_class in self.all_generative_model_classes:
           A       :       List[Any]							=						model_class(_UpperCAmelCase					)

           A       :       Any							=						model.generate(_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       int							=						jit(model.generate					)
           A       :       List[Any]							=						jit_generate(_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       Optional[Any]							=						self._get_input_ids_and_config()
       A       :       int							=						max_length
       A       :       Dict							=						1
       A       :       Tuple							=						8
       A       :       Optional[Any]							=						9

       for model_class in self.all_generative_model_classes:
           A       :       Dict							=						model_class(_UpperCAmelCase					)

           A       :       str							=						model.generate(_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       int							=						jit(model.generate					)
           A       :       Optional[int]							=						jit_generate(_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       int							=						self._get_input_ids_and_config()
       A       :       List[Any]							=						max_length
       A       :       Optional[Any]							=						2
       A       :       Tuple							=						1
       A       :       List[Any]							=						8
       A       :       Dict							=						9

       for model_class in self.all_generative_model_classes:
           A       :       Union[str, Any]							=						model_class(_UpperCAmelCase					)

           A       :       Any							=						model.generate(_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       Union[str, Any]							=						jit(model.generate					)
           A       :       int							=						jit_generate(_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       Dict							=						self._get_input_ids_and_config()

       # pad attention mask on the left
       A       :       Union[str, Any]							=						attention_mask.at[(0, 0)].set(0					)

       A       :       int							=						False
       A       :       List[Any]							=						max_length

       for model_class in self.all_generative_model_classes:
           A       :       List[str]							=						model_class(_UpperCAmelCase					)

           A       :       Dict							=						model.generate(_UpperCAmelCase    ,   attention_mask=_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       Dict							=						jit(model.generate					)
           A       :       Optional[Any]							=						jit_generate(_UpperCAmelCase    ,   attention_mask=_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       Optional[Any]							=						self._get_input_ids_and_config()

       # pad attention mask on the left
       A       :       Optional[Any]							=						attention_mask.at[(0, 0)].set(0					)

       A       :       Optional[int]							=						True
       A       :       int							=						max_length

       for model_class in self.all_generative_model_classes:
           A       :       int							=						model_class(_UpperCAmelCase					)

           A       :       Union[str, Any]							=						model.generate(_UpperCAmelCase    ,   attention_mask=_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       Optional[Any]							=						jit(model.generate					)
           A       :       Dict							=						jit_generate(_UpperCAmelCase    ,   attention_mask=_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)


   def 					snake_case				( self					):
       A,	A,	A,	A       :       Optional[Any]							=						self._get_input_ids_and_config()

       # pad attention mask on the left
       A       :       Optional[int]							=						attention_mask.at[(0, 0)].set(0					)

       A       :       Any							=						2
       A       :       Any							=						max_length

       for model_class in self.all_generative_model_classes:
           A       :       Dict							=						model_class(_UpperCAmelCase					)

           A       :       Optional[Any]							=						model.generate(_UpperCAmelCase    ,   attention_mask=_UpperCAmelCase					).sequences
           self.assertEqual(generation_outputs.shape[-1]    ,   _UpperCAmelCase					)

           A       :       str							=						jit(model.generate					)
           A       :       List[str]							=						jit_generate(_UpperCAmelCase    ,   attention_mask=_UpperCAmelCase					).sequences

           self.assertListEqual(generation_outputs.tolist()    ,   jit_generation_outputs.tolist()					)







@require_flax
class   _lowercase						(							unittest.TestCase				):


   def 					snake_case				( self					):
       A       :       List[Any]							=						AutoTokenizer.from_pretrained('''hf-internal-testing/tiny-bert'''					)
       A       :       Dict							=						FlaxAutoModelForCausalLM.from_pretrained('''hf-internal-testing/tiny-bert-flax-only'''					)

       A       :       Union[str, Any]							=						'''Hello world'''
       A       :       Union[str, Any]							=						tokenizer(_UpperCAmelCase    ,   return_tensors='''np'''					).input_ids

       # typos are quickly detected (the correct argument is `do_sample`)
       with self.assertRaisesRegex(_UpperCAmelCase    ,   '''do_samples'''					):
           model.generate(_UpperCAmelCase    ,   do_samples=_UpperCAmelCase					)

       # arbitrary arguments that will not be used anywhere are also not accepted
       with self.assertRaisesRegex(_UpperCAmelCase    ,   '''foo'''					):
           A       :       List[Any]							=						{'''foo''': '''bar'''}
           model.generate(_UpperCAmelCase    ,   **_UpperCAmelCase					)
