






'''simple docstring'''







from collections import OrderedDict
from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


__A      :       Optional[Any]      =	logging.get_logger(__name__)

__A      :       Union[str, Any]      =	{
    'squeezebert/squeezebert-uncased': (
        'https://huggingface.co/squeezebert/squeezebert-uncased/resolve/main/config.json'
    ),
    'squeezebert/squeezebert-mnli': 'https://huggingface.co/squeezebert/squeezebert-mnli/resolve/main/config.json',
    'squeezebert/squeezebert-mnli-headless': (
        'https://huggingface.co/squeezebert/squeezebert-mnli-headless/resolve/main/config.json'
    ),
}






class 					a__    (			lowerCamelCase						):
     '''simple docstring'''







     _snake_case             =  SQUEEZEBERT_PRETRAINED_CONFIG_ARCHIVE_MAP
     _snake_case             =  'squeezebert'






     def __init__(self    :	List[str]				,				lowercase__    :	Any=30522				,				lowercase__    :	Any=768				,				lowercase__    :	Dict=12				,				lowercase__    :	Union[str, Any]=12				,				lowercase__    :	List[str]=3072				,				lowercase__    :	List[Any]="gelu"				,				lowercase__    :	List[Any]=0.1				,				lowercase__    :	Tuple=0.1				,				lowercase__    :	List[Any]=512				,				lowercase__    :	Dict=2				,				lowercase__    :	Optional[Any]=0.02				,				lowercase__    :	Dict=1e-12				,				lowercase__    :	int=0				,				lowercase__    :	int=768				,				lowercase__    :	Any=4				,				lowercase__    :	int=4				,				lowercase__    :	Union[str, Any]=4				,				lowercase__    :	List[str]=1				,				lowercase__    :	List[Any]=4				,				lowercase__    :	Dict=4				,				**lowercase__    :	Tuple				,				)  ->       List[Any]:
           super().__init__(pad_token_id=lowercase__				,				**lowercase__					)

           __A		   =      vocab_size
           __A		   =      hidden_size
           __A		   =      num_hidden_layers
           __A		   =      num_attention_heads
           __A		   =      hidden_act
           __A		   =      intermediate_size
           __A		   =      hidden_dropout_prob
           __A		   =      attention_probs_dropout_prob
           __A		   =      max_position_embeddings
           __A		   =      type_vocab_size
           __A		   =      initializer_range
           __A		   =      layer_norm_eps
           __A		   =      embedding_size
           __A		   =      q_groups
           __A		   =      k_groups
           __A		   =      v_groups
           __A		   =      post_attention_groups
           __A		   =      intermediate_groups
           __A		   =      output_groups







class 					a__    (			lowerCamelCase						):
     '''simple docstring'''







     @property
     def     _UpperCamelCase   (self    :	Union[str, Any]					)  ->       Mapping[str, Mapping[int, str]]:
           if self.task == "multiple-choice":
                 __A		   =      {0: "batch", 1: "choice", 2: "sequence"}
           else:
                 __A		   =      {0: "batch", 1: "sequence"}
           return OrderedDict(
               [
                   ("input_ids", dynamic_axis),
                   ("attention_mask", dynamic_axis),
                   ("token_type_ids", dynamic_axis),
               ]					)










'''simple docstring'''







import copy
import inspect

from transformers.testing_utils import require_torch, torch_device
from transformers.utils.backbone_utils import BackboneType






@require_torch
class 					a__    :
     '''simple docstring'''







     _snake_case             =  ()
     _snake_case             =  True






     def     _UpperCamelCase   (self    :	Optional[Any]					)  ->       Union[str, Any]:
           __A		   =      self.config_class

           # test default config
           __A		   =      config_class()
           self.assertIsNotNone(lowercase__					)
           __A		   =      ["stem"] + [f"stage{idx}" for idx in range(1				,				len(config.depths					) + 1					)]
           self.assertEqual(config.stage_names				,				lowercase__					)
           self.assertTrue(set(config.out_features					).issubset(set(config.stage_names					)					)					)

           # Test out_features and out_indices are correctly set
           # out_features and out_indices both None
           __A		   =      config_class(out_features=lowercase__				,				out_indices=lowercase__					)
           self.assertEqual(config.out_features				,				[config.stage_names[-1]]					)
           self.assertEqual(config.out_indices				,				[len(config.stage_names					) - 1]					)

           # out_features and out_indices both set
           __A		   =      config_class(out_features=["stem", "stage1"]				,				out_indices=[0, 1]					)
           self.assertEqual(config.out_features				,				["stem", "stage1"]					)
           self.assertEqual(config.out_indices				,				[0, 1]					)

           # Only out_features set
           __A		   =      config_class(out_features=["stage1", "stage3"]					)
           self.assertEqual(config.out_features				,				["stage1", "stage3"]					)
           self.assertEqual(config.out_indices				,				[1, 3]					)

           # Only out_indices set
           __A		   =      config_class(out_indices=[0, 2]					)
           self.assertEqual(config.out_features				,				[config.stage_names[0], config.stage_names[2]]					)
           self.assertEqual(config.out_indices				,				[0, 2]					)

           # Error raised when out_indices do not correspond to out_features
           with self.assertRaises(lowercase__					):
                 __A		   =      config_class(out_features=["stage1", "stage2"]				,				out_indices=[0, 2]					)






     def     _UpperCamelCase   (self    :	Optional[int]					)  ->       Optional[Any]:
           __A   ,				__A		   =      self.model_tester.prepare_config_and_inputs_for_common()

           for model_class in self.all_model_classes:
                 __A		   =      model_class(lowercase__					)
                 __A		   =      inspect.signature(model.forward					)
                 # signature.parameters is an OrderedDict => so arg_names order is deterministic
                 __A		   =      [*signature.parameters.keys()]
                 __A		   =      ["pixel_values"]
                 self.assertListEqual(arg_names[:1]				,				lowercase__					)






     def     _UpperCamelCase   (self    :	Dict					)  ->       Union[str, Any]:
           __A   ,				__A		   =      self.model_tester.prepare_config_and_inputs_for_common()

           for model_class in self.all_model_classes:
                 __A		   =      model_class(lowercase__					)
                 self.assertEqual(len(model.channels					)				,				len(config.out_features					)					)
                 __A		   =      model.num_features
                 __A		   =      [config.stage_names.index(lowercase__					) for feat in config.out_features]
                 __A		   =      [num_features[idx] for idx in out_indices]
                 self.assertListEqual(model.channels				,				lowercase__					)

                 __A		   =      copy.deepcopy(lowercase__					)
                 __A		   =      None
                 __A		   =      model_class(lowercase__					)
                 self.assertEqual(len(model.channels					)				,				1					)
                 self.assertListEqual(model.channels				,				[num_features[-1]]					)

                 __A		   =      copy.deepcopy(lowercase__					)
                 __A		   =      None
                 __A		   =      model_class(lowercase__					)
                 self.assertEqual(len(model.channels					)				,				1					)
                 self.assertListEqual(model.channels				,				[num_features[-1]]					)






     def     _UpperCamelCase   (self    :	Optional[Any]					)  ->       Optional[Any]:
           __A   ,				__A		   =      self.model_tester.prepare_config_and_inputs_for_common()

           for model_class in self.all_model_classes:
                 __A		   =      model_class(lowercase__					)
                 model.to(lowercase__					)
                 model.eval()
                 __A		   =      model(**lowercase__					)

                 self.assertEqual(len(result.feature_maps					)				,				len(config.out_features					)					)
                 self.assertEqual(len(model.channels					)				,				len(config.out_features					)					)
                 self.assertEqual(len(result.feature_maps					)				,				len(config.out_indices					)					)
                 self.assertEqual(len(model.channels					)				,				len(config.out_indices					)					)

                 # Check output of last stage is taken if out_features=None, out_indices=None
                 __A		   =      copy.deepcopy(lowercase__					)
                 __A		   =      None
                 __A		   =      model_class(lowercase__					)
                 model.to(lowercase__					)
                 model.eval()
                 __A		   =      model(**lowercase__					)

                 self.assertEqual(len(result.feature_maps					)				,				1					)
                 self.assertEqual(len(model.channels					)				,				1					)

                 __A		   =      copy.deepcopy(lowercase__					)
                 __A		   =      None
                 __A		   =      model_class(lowercase__					)
                 model.to(lowercase__					)
                 model.eval()
                 __A		   =      model(**lowercase__					)

                 self.assertEqual(len(result.feature_maps					)				,				1					)
                 self.assertEqual(len(model.channels					)				,				1					)

                 # Check backbone can be initialized with fresh weights
                 __A		   =      copy.deepcopy(lowercase__					)
                 __A		   =      False
                 __A		   =      model_class(lowercase__					)
                 model.to(lowercase__					)
                 model.eval()
                 __A		   =      model(**lowercase__					)






     def     _UpperCamelCase   (self    :	Dict					)  ->       Optional[int]:
           __A   ,				__A		   =      self.model_tester.prepare_config_and_inputs_for_common()

           for backbone_class in self.all_model_classes:
                 __A		   =      backbone_class(lowercase__					)

                 self.assertTrue(hasattr(lowercase__				,				"backbone_type"					)					)
                 self.assertTrue(hasattr(lowercase__				,				"stage_names"					)					)
                 self.assertTrue(hasattr(lowercase__				,				"num_features"					)					)
                 self.assertTrue(hasattr(lowercase__				,				"out_indices"					)					)
                 self.assertTrue(hasattr(lowercase__				,				"out_features"					)					)
                 self.assertTrue(hasattr(lowercase__				,				"out_feature_channels"					)					)
                 self.assertTrue(hasattr(lowercase__				,				"channels"					)					)

                 self.assertIsInstance(backbone.backbone_type				,				lowercase__					)
                 # Verify num_features has been initialized in the backbone init
                 self.assertIsNotNone(backbone.num_features					)
                 self.assertTrue(len(backbone.channels					) == len(backbone.out_indices					)					)
                 self.assertTrue(len(backbone.stage_names					) == len(backbone.num_features					)					)
                 self.assertTrue(len(backbone.channels					) <= len(backbone.num_features					)					)
                 self.assertTrue(len(backbone.out_feature_channels					) == len(backbone.stage_names					)					)






     def     _UpperCamelCase   (self    :	Tuple					)  ->       int:
           __A   ,				__A		   =      self.model_tester.prepare_config_and_inputs_for_common()
           __A		   =      inputs_dict["pixel_values"].shape[0]

           for backbone_class in self.all_model_classes:
                 __A		   =      backbone_class(lowercase__					)
                 backbone.to(lowercase__					)
                 backbone.eval()

                 __A		   =      backbone(**lowercase__					)

                 # Test default outputs and verify feature maps
                 self.assertIsInstance(outputs.feature_maps				,				lowercase__					)
                 self.assertTrue(len(outputs.feature_maps					) == len(backbone.channels					)					)
                 for feature_map, n_channels in zip(outputs.feature_maps				,				backbone.channels					):
                       self.assertTrue(feature_map.shape[:2]				,				(batch_size, n_channels)					)
                 self.assertIsNone(outputs.hidden_states					)
                 self.assertIsNone(outputs.attentions					)

                 # Test output_hidden_states=True
                 __A		   =      backbone(**lowercase__				,				output_hidden_states=lowercase__					)
                 self.assertIsNotNone(outputs.hidden_states					)
                 self.assertTrue(len(outputs.hidden_states					)				,				len(backbone.stage_names					)					)
                 for hidden_state, n_channels in zip(outputs.hidden_states				,				backbone.channels					):
                       self.assertTrue(hidden_state.shape[:2]				,				(batch_size, n_channels)					)

                 # Test output_attentions=True
                 if self.has_attentions:
                       __A		   =      backbone(**lowercase__				,				output_attentions=lowercase__					)
                       self.assertIsNotNone(outputs.attentions					)


