




"""simple docstring"""


import argparse

import torch

from transformers import (
    SpeechTaConfig,
    SpeechTaFeatureExtractor,
    SpeechTaForSpeechToSpeech,
    SpeechTaForSpeechToText,
    SpeechTaForTextToSpeech,
    SpeechTaProcessor,
    SpeechTaTokenizer,
    logging,
)
from transformers.tokenization_utils import AddedToken


logging.set_verbosity_info()
A_      			=       logging.get_logger('''transformers.models.speecht5''')

A_      			=       {
    """speech_encoder_prenet.layer_norm""": """speecht5.encoder.prenet.feature_projection.layer_norm""",
    """speech_encoder_prenet.post_extract_proj""": """speecht5.encoder.prenet.feature_projection.projection""",
    """speech_encoder_prenet.pos_conv.0""": """speecht5.encoder.prenet.pos_conv_embed.conv""",
    """speech_encoder_prenet.mask_emb""": """speecht5.encoder.prenet.masked_spec_embed""",
}
A_      			=       {
    """text_encoder_prenet.encoder_prenet.0""": """speecht5.encoder.prenet.embed_tokens""",
    """text_encoder_prenet.encoder_prenet.1.alpha""": """speecht5.encoder.prenet.encode_positions.alpha""",
}
A_      			=       {
    """speech_decoder_prenet.decoder_prenet.0.0.prenet.0.0""": """speecht5.decoder.prenet.layers.0""",
    """speech_decoder_prenet.decoder_prenet.0.0.prenet.1.0""": """speecht5.decoder.prenet.layers.1""",
    """speech_decoder_prenet.decoder_prenet.0.1""": """speecht5.decoder.prenet.final_layer""",
    """speech_decoder_prenet.decoder_prenet.1.alpha""": """speecht5.decoder.prenet.encode_positions.alpha""",
    """speech_decoder_prenet.spkembs_layer.0""": """speecht5.decoder.prenet.speaker_embeds_layer""",
}
A_      			=       {
    """speech_decoder_postnet.feat_out""": """speech_decoder_postnet.feat_out""",
    """speech_decoder_postnet.prob_out""": """speech_decoder_postnet.prob_out""",
    """speech_decoder_postnet.postnet.postnet.0.0""": """speech_decoder_postnet.layers.0.conv""",
    """speech_decoder_postnet.postnet.postnet.0.1""": """speech_decoder_postnet.layers.0.batch_norm""",
    """speech_decoder_postnet.postnet.postnet.1.0""": """speech_decoder_postnet.layers.1.conv""",
    """speech_decoder_postnet.postnet.postnet.1.1""": """speech_decoder_postnet.layers.1.batch_norm""",
    """speech_decoder_postnet.postnet.postnet.2.0""": """speech_decoder_postnet.layers.2.conv""",
    """speech_decoder_postnet.postnet.postnet.2.1""": """speech_decoder_postnet.layers.2.batch_norm""",
    """speech_decoder_postnet.postnet.postnet.3.0""": """speech_decoder_postnet.layers.3.conv""",
    """speech_decoder_postnet.postnet.postnet.3.1""": """speech_decoder_postnet.layers.3.batch_norm""",
    """speech_decoder_postnet.postnet.postnet.4.0""": """speech_decoder_postnet.layers.4.conv""",
    """speech_decoder_postnet.postnet.postnet.4.1""": """speech_decoder_postnet.layers.4.batch_norm""",
}
A_      			=       {
    """text_decoder_prenet.embed_tokens""": """speecht5.decoder.prenet.embed_tokens""",
}
A_      			=       {
    """text_decoder_postnet.output_projection""": """text_decoder_postnet.lm_head""",
}
A_      			=       {
    """encoder.layers.*.self_attn.k_proj""": """speecht5.encoder.wrapped_encoder.layers.*.attention.k_proj""",
    """encoder.layers.*.self_attn.v_proj""": """speecht5.encoder.wrapped_encoder.layers.*.attention.v_proj""",
    """encoder.layers.*.self_attn.q_proj""": """speecht5.encoder.wrapped_encoder.layers.*.attention.q_proj""",
    """encoder.layers.*.self_attn.out_proj""": """speecht5.encoder.wrapped_encoder.layers.*.attention.out_proj""",
    """encoder.layers.*.self_attn_layer_norm""": """speecht5.encoder.wrapped_encoder.layers.*.layer_norm""",
    """encoder.layers.*.fc1""": """speecht5.encoder.wrapped_encoder.layers.*.feed_forward.intermediate_dense""",
    """encoder.layers.*.fc2""": """speecht5.encoder.wrapped_encoder.layers.*.feed_forward.output_dense""",
    """encoder.layers.*.final_layer_norm""": """speecht5.encoder.wrapped_encoder.layers.*.final_layer_norm""",
    """encoder.layer_norm""": """speecht5.encoder.wrapped_encoder.layer_norm""",
    """encoder.pos_emb.pe_k""": """speecht5.encoder.wrapped_encoder.embed_positions.pe_k""",
}
A_      			=       {
    """decoder.layers.*.self_attn.k_proj""": """speecht5.decoder.wrapped_decoder.layers.*.self_attn.k_proj""",
    """decoder.layers.*.self_attn.v_proj""": """speecht5.decoder.wrapped_decoder.layers.*.self_attn.v_proj""",
    """decoder.layers.*.self_attn.q_proj""": """speecht5.decoder.wrapped_decoder.layers.*.self_attn.q_proj""",
    """decoder.layers.*.self_attn.out_proj""": """speecht5.decoder.wrapped_decoder.layers.*.self_attn.out_proj""",
    """decoder.layers.*.self_attn_layer_norm""": """speecht5.decoder.wrapped_decoder.layers.*.self_attn_layer_norm""",
    """decoder.layers.*.encoder_attn.k_proj""": """speecht5.decoder.wrapped_decoder.layers.*.encoder_attn.k_proj""",
    """decoder.layers.*.encoder_attn.v_proj""": """speecht5.decoder.wrapped_decoder.layers.*.encoder_attn.v_proj""",
    """decoder.layers.*.encoder_attn.q_proj""": """speecht5.decoder.wrapped_decoder.layers.*.encoder_attn.q_proj""",
    """decoder.layers.*.encoder_attn.out_proj""": """speecht5.decoder.wrapped_decoder.layers.*.encoder_attn.out_proj""",
    """decoder.layers.*.encoder_attn_layer_norm""": """speecht5.decoder.wrapped_decoder.layers.*.encoder_attn_layer_norm""",
    """decoder.layers.*.fc1""": """speecht5.decoder.wrapped_decoder.layers.*.feed_forward.intermediate_dense""",
    """decoder.layers.*.fc2""": """speecht5.decoder.wrapped_decoder.layers.*.feed_forward.output_dense""",
    """decoder.layers.*.final_layer_norm""": """speecht5.decoder.wrapped_decoder.layers.*.final_layer_norm""",
}
A_      			=       {
    **MAPPING_SPEECH_ENCODER_PRENET,
    **MAPPING_ENCODER,
    **MAPPING_DECODER,
    **MAPPING_TEXT_DECODER_PRENET,
    **MAPPING_TEXT_DECODER_POSTNET,
}
A_      			=       {
    **MAPPING_TEXT_ENCODER_PRENET,
    **MAPPING_ENCODER,
    **MAPPING_DECODER,
    **MAPPING_SPEECH_DECODER_PRENET,
    **MAPPING_SPEECH_DECODER_POSTNET,
}
A_      			=       {
    **MAPPING_SPEECH_ENCODER_PRENET,
    **MAPPING_ENCODER,
    **MAPPING_DECODER,
    **MAPPING_SPEECH_DECODER_PRENET,
    **MAPPING_SPEECH_DECODER_POSTNET,
}
A_      			=       []
A_      			=       [
    """encoder.version""",
    """encoder.layers.*.norm_k.weight""",
    """encoder.layers.*.norm_k.bias""",
    """decoder.version""",
    """decoder.layers.*.norm_k.weight""",
    """decoder.layers.*.norm_k.bias""",
    """decoder.pos_emb.pe_k""",
    """speech_encoder_prenet.embed_positions._float_tensor""",
    """text_decoder_prenet.embed_positions._float_tensor""",
]
A_      			=       IGNORE_KEYS + [
    """encoder.proj""",
    """text_encoder_prenet.*""",
    """speech_decoder_prenet.*""",
    """speech_decoder_postnet.*""",
]
A_      			=       IGNORE_KEYS + [
    """encoder.proj""",
    """speech_encoder_prenet.*""",
    """text_decoder_prenet.*""",
    """text_decoder_postnet.*""",
]
A_      			=       IGNORE_KEYS + [
    """encoder.proj""",
    """text_encoder_prenet.*""",
    """text_decoder_prenet.*""",
    """text_decoder_postnet.*""",
]


def       UpperCAmelCase__ (snake_case__							:      str	,     snake_case__							:      List[Any]	,     snake_case__							:      Union[str, Any]	,     snake_case__							:      Optional[int]	,     snake_case__							:      Optional[Any]					):
		"""simple docstring"""

		for attribute in key.split("""."""					):
				_snake_case							:	Tuple			=						getattr(snake_case__	,     snake_case__					)

		if weight_type is not None:
				_snake_case							:	int			=						getattr(snake_case__	,     snake_case__					).shape
		else:
				_snake_case							:	List[str]			=						hf_pointer.shape

		if hf_shape != value.shape:
				raise ValueError(
				    F"Shape of hf {key + '.' + weight_type if weight_type is not None else ''} is {hf_shape}, but should be"
				    F" {value.shape} for {full_name}"					)

		if weight_type == "weight":
				_snake_case							:	List[str]			=						value
		elif weight_type == "weight_g":
				_snake_case							:	Tuple			=						value
		elif weight_type == "weight_v":
				_snake_case							:	Tuple			=						value
		elif weight_type == "bias":
				_snake_case							:	Any			=						value
		elif weight_type == "running_mean":
				_snake_case							:	int			=						value
		elif weight_type == "running_var":
				_snake_case							:	Tuple			=						value
		elif weight_type == "num_batches_tracked":
				_snake_case							:	int			=						value
		else:
				_snake_case							:	Union[str, Any]			=						value

		logger.info(F"{key + ('.' + weight_type if weight_type is not None else '')} was initialized from {full_name}."					)


def       UpperCAmelCase__ (snake_case__							:      List[Any]	,     snake_case__							:      Any					):
		"""simple docstring"""

		for key in ignore_keys:
				if key.endswith(""".*"""					):
						if name.startswith(key[:-1]					):
								return True
				elif ".*." in key:
						_snake_case	,      _snake_case							:	List[Any]			=						key.split(""".*."""					)
						if prefix in name and suffix in name:
								return True
				elif key in name:
						return True
		return False


def       UpperCAmelCase__ (snake_case__							:      int	,     snake_case__							:      Optional[Any]	,     snake_case__							:      Optional[Any]					):
		"""simple docstring"""

		_snake_case							:	List[Any]			=						[]

		if task == "s2t":
				_snake_case							:	List[str]			=						hf_model.speechta.encoder.prenet.feature_encoder
				_snake_case							:	List[Any]			=						MAPPING_S2T
				_snake_case							:	str			=						IGNORE_KEYS_S2T
		elif task == "t2s":
				_snake_case							:	int			=						None
				_snake_case							:	Optional[Any]			=						MAPPING_T2S
				_snake_case							:	List[Any]			=						IGNORE_KEYS_T2S
		elif task == "s2s":
				_snake_case							:	str			=						hf_model.speechta.encoder.prenet.feature_encoder
				_snake_case							:	List[Any]			=						MAPPING_S2S
				_snake_case							:	str			=						IGNORE_KEYS_S2S
		else:
				raise ValueError(F"Unsupported task: {task}"					)

		for name, value in fairseq_dict.items():
				if should_ignore(snake_case__	,     snake_case__					):
						logger.info(F"{name} was ignored"					)
						continue

				_snake_case							:	str			=						False
				if "conv_layers" in name:
						load_conv_layer(
						    snake_case__	,     snake_case__	,     snake_case__	,     snake_case__	,     hf_model.config.feat_extract_norm == """group"""	,     )
						_snake_case							:	List[str]			=						True
				else:
						for key, mapped_key in MAPPING.items():
								# mapped_key = "speecht5." + mapped_key if mapped_key not in TOP_LEVEL_KEYS else mapped_key

								if "*" in key:
										_snake_case	,      _snake_case							:	List[str]			=						key.split(""".*."""					)
										if prefix in name and suffix in name:
												_snake_case							:	Optional[Any]			=						suffix

                # if key in name or key.split("w2v_model.")[-1] == name.split(".")[0]:
								if key in name:
										_snake_case							:	Union[str, Any]			=						True
										if "*" in mapped_key:
												_snake_case							:	Optional[Any]			=						name.split(snake_case__					)[0].split("""."""					)[-2]
												_snake_case							:	int			=						mapped_key.replace("""*"""	,     snake_case__					)
										if "weight_g" in name:
												_snake_case							:	Dict			=						"""weight_g"""
										elif "weight_v" in name:
												_snake_case							:	str			=						"""weight_v"""
										elif "bias" in name:
												_snake_case							:	Optional[int]			=						"""bias"""
										elif "weight" in name:
												_snake_case							:	Optional[int]			=						"""weight"""
										elif "running_mean" in name:
												_snake_case							:	List[Any]			=						"""running_mean"""
										elif "running_var" in name:
												_snake_case							:	Optional[int]			=						"""running_var"""
										elif "num_batches_tracked" in name:
												_snake_case							:	str			=						"""num_batches_tracked"""
										else:
												_snake_case							:	int			=						None
										set_recursively(snake_case__	,     snake_case__	,     snake_case__	,     snake_case__	,     snake_case__					)
								continue
				if not is_used:
						unused_weights.append(snake_case__					)

		logger.warning(F"Unused weights: {unused_weights}"					)


def       UpperCAmelCase__ (snake_case__							:      str	,     snake_case__							:      Dict	,     snake_case__							:      Dict	,     snake_case__							:      Dict	,     snake_case__							:      Any					):
		"""simple docstring"""

		_snake_case							:	Any			=						full_name.split("""conv_layers."""					)[-1]
		_snake_case							:	Tuple			=						name.split("""."""					)
		_snake_case							:	Optional[Any]			=						int(items[0]					)
		_snake_case							:	Any			=						int(items[1]					)

		if type_id == 0:
				if "bias" in name:
						if value.shape != feature_extractor.conv_layers[layer_id].conv.bias.data.shape:
								raise ValueError(
								    F"{full_name} has size {value.shape}, but"
								    F" {feature_extractor.conv_layers[layer_id].conv.bias.data.shape} was found."					)
						_snake_case							:	str			=						value
						logger.info(F"Feat extract conv layer {layer_id} was initialized from {full_name}."					)
				elif "weight" in name:
						if value.shape != feature_extractor.conv_layers[layer_id].conv.weight.data.shape:
								raise ValueError(
								    F"{full_name} has size {value.shape}, but"
								    F" {feature_extractor.conv_layers[layer_id].conv.weight.data.shape} was found."					)
						_snake_case							:	List[str]			=						value
						logger.info(F"Feat extract conv layer {layer_id} was initialized from {full_name}."					)
		elif (type_id == 2 and not use_group_norm) or (type_id == 2 and layer_id == 0 and use_group_norm):
				if "bias" in name:
						if value.shape != feature_extractor.conv_layers[layer_id].layer_norm.bias.data.shape:
								raise ValueError(
								    F"{full_name} has size {value.shape}, but"
								    F" {feature_extractor.conv_layers[layer_id].layer_norm.bias.data.shape} was found."					)
						_snake_case							:	Optional[Any]			=						value
						logger.info(F"Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}."					)
				elif "weight" in name:
						if value.shape != feature_extractor.conv_layers[layer_id].layer_norm.weight.data.shape:
								raise ValueError(
								    F"{full_name} has size {value.shape}, but"
								    F" {feature_extractor.conv_layers[layer_id].layer_norm.weight.data.shape} was found."					)
						_snake_case							:	List[str]			=						value
						logger.info(F"Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}."					)
		else:
				unused_weights.append(snake_case__					)


@torch.no_grad()
def       UpperCAmelCase__ (snake_case__							:      Dict	,     snake_case__							:      List[Any]	,     snake_case__							:      List[str]	,     snake_case__							:      Dict=None	,     snake_case__							:      List[str]=None	,     snake_case__							:      Tuple=None	,     ):
		"""simple docstring"""

		if config_path is not None:
				_snake_case							:	Tuple			=						SpeechTaConfig.from_pretrained(snake_case__					)
		else:
				_snake_case							:	str			=						SpeechTaConfig()

		if task == "s2t":
				_snake_case							:	Union[str, Any]			=						config.max_text_positions
				_snake_case							:	Optional[int]			=						SpeechTaForSpeechToText(snake_case__					)
		elif task == "t2s":
				_snake_case							:	Any			=						18_76
				_snake_case							:	str			=						6_00
				_snake_case							:	List[Any]			=						config.max_speech_positions
				_snake_case							:	Dict			=						SpeechTaForTextToSpeech(snake_case__					)
		elif task == "s2s":
				_snake_case							:	Any			=						18_76
				_snake_case							:	str			=						config.max_speech_positions
				_snake_case							:	Tuple			=						SpeechTaForSpeechToSpeech(snake_case__					)
		else:
				raise ValueError(F"Unknown task name: {task}"					)

		if vocab_path:
				_snake_case							:	str			=						SpeechTaTokenizer(snake_case__	,     model_max_length=config.max_text_positions					)

				# Mask token behaves like a normal word, i.e. include the space before it
				_snake_case							:	Optional[int]			=						AddedToken("""<mask>"""	,     lstrip=snake_case__	,     rstrip=snake_case__					)
				_snake_case							:	List[Any]			=						mask_token
				tokenizer.add_special_tokens({"""mask_token""": mask_token}					)
				tokenizer.add_tokens(["""<ctc_blank>"""]					)

		_snake_case							:	Dict			=						SpeechTaFeatureExtractor()
		_snake_case							:	Any			=						SpeechTaProcessor(tokenizer=snake_case__	,     feature_extractor=snake_case__					)
		processor.save_pretrained(snake_case__					)

		_snake_case							:	List[Any]			=						torch.load(snake_case__					)
		recursively_load_weights(fairseq_checkpoint["""model"""]	,     snake_case__	,     snake_case__					)

		model.save_pretrained(snake_case__					)

		if repo_id:
				print("""Pushing to the hub..."""					)
				processor.push_to_hub(snake_case__					)
				model.push_to_hub(snake_case__					)


if __name__ == "__main__":
					A_      			=       argparse.ArgumentParser()
					parser.add_argument(
					    '''--task''',
					    default='''s2t''',
					    type=str,
					    help='''Type of the SpeechT5 model you\'d like to convert. Should be one of \'s2t\', \'t2s\', \'s2s\'.''',
					)
					parser.add_argument('''--checkpoint_path''', required=True, default=None, type=str, help='''Path to fairseq checkpoint''')
					parser.add_argument('''--vocab_path''', default=None, type=str, help='''Path to SentencePiece model''')
					parser.add_argument('''--config_path''', default=None, type=str, help='''Path to hf config.json of model to convert''')
					parser.add_argument(
					    '''--pytorch_dump_folder_path''', required=True, default=None, type=str, help='''Path to the output PyTorch model.'''
					)
					parser.add_argument(
					    '''--push_to_hub''', default=None, type=str, help='''Where to upload the converted model on the 🤗 hub.'''
					)

					A_      			=       parser.parse_args()
					convert_speechta_checkpoint(
					    args.task,
					    args.checkpoint_path,
					    args.pytorch_dump_folder_path,
					    args.config_path,
					    args.vocab_path,
					    args.push_to_hub,
					)








"""simple docstring"""


import inspect
import unittest

from huggingface_hub import hf_hub_download

from transformers import ConvNextConfig, UperNetConfig
from transformers.testing_utils import require_torch, require_torch_multi_gpu, require_vision, slow, torch_device
from transformers.utils import is_torch_available, is_vision_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
     import torch

     from transformers import UperNetForSemanticSegmentation
     from transformers.models.upernet.modeling_upernet import UPERNET_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
     from PIL import Image

     from transformers import AutoImageProcessor






class       lowercase:







 '''simple docstring'''





 def __init__(       self:	Dict,   a_:	Union[str, Any],   a_:	Tuple=13,   a_:	Dict=32,   a_:	Optional[Any]=3,   a_:	Optional[Any]=4,   a_:	Optional[int]=[10, 20, 30, 40],   a_:	Any=[2, 2, 3, 2],   a_:	Dict=True,   a_:	Dict=True,   a_:	List[str]=37,   a_:	Dict="gelu",   a_:	List[str]=10,   a_:	Union[str, Any]=0.02,   a_:	Any=["stage2", "stage3", "stage4"],   a_:	Optional[int]=3,   a_:	Tuple=None,   ):




   '''simple docstring'''



   _snake_case							:	Dict			=						parent
   _snake_case							:	Dict			=						batch_size
   _snake_case							:	Optional[Any]			=						image_size
   _snake_case							:	int			=						num_channels
   _snake_case							:	Tuple			=						num_stages
   _snake_case							:	int			=						hidden_sizes
   _snake_case							:	List[str]			=						depths
   _snake_case							:	str			=						is_training
   _snake_case							:	Dict			=						use_labels
   _snake_case							:	List[str]			=						intermediate_size
   _snake_case							:	Optional[int]			=						hidden_act
   _snake_case							:	Any			=						type_sequence_label_size
   _snake_case							:	List[str]			=						initializer_range
   _snake_case							:	Union[str, Any]			=						out_features
   _snake_case							:	Dict			=						num_labels
   _snake_case							:	int			=						scope
   _snake_case							:	Dict			=						num_stages


 def 				UpperCamelCase_     (       self:	int	):




   '''simple docstring'''



   _snake_case							:	Optional[Any]			=						floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]	)

   _snake_case							:	Optional[int]			=						None
   if self.use_labels:
     _snake_case							:	Optional[Any]			=						ids_tensor([self.batch_size],   self.type_sequence_label_size	)

   _snake_case							:	Tuple			=						self.get_config()

   return config, pixel_values, labels


 def 				UpperCamelCase_     (       self:	Tuple	):




   '''simple docstring'''



   return ConvNextConfig(
       num_channels=self.num_channels,   num_stages=self.num_stages,   hidden_sizes=self.hidden_sizes,   depths=self.depths,   is_training=self.is_training,   intermediate_size=self.intermediate_size,   hidden_act=self.hidden_act,   out_features=self.out_features,   )


 def 				UpperCamelCase_     (       self:	List[Any]	):




   '''simple docstring'''



   return UperNetConfig(
       backbone_config=self.get_backbone_config(),   hidden_size=512,   pool_scales=[1, 2, 3, 6],   use_auxiliary_head=a_,   auxiliary_loss_weight=0.4,   auxiliary_in_channels=40,   auxiliary_channels=256,   auxiliary_num_convs=1,   auxiliary_concat_input=a_,   loss_ignore_index=255,   num_labels=self.num_labels,   )


 def 				UpperCamelCase_     (       self:	Tuple,   a_:	List[Any],   a_:	Dict,   a_:	Tuple	):




   '''simple docstring'''



   _snake_case							:	List[Any]			=						UperNetForSemanticSegmentation(config=a_	)
   model.to(a_	)
   model.eval()
   _snake_case							:	Tuple			=						model(a_	)
   self.parent.assertEqual(
       result.logits.shape,   (self.batch_size, self.num_labels, self.image_size, self.image_size)	)


 def 				UpperCamelCase_     (       self:	Optional[Any]	):




   '''simple docstring'''



   _snake_case							:	Any			=						self.prepare_config_and_inputs()
   (
       (
       _snake_case
   )	,      (
       _snake_case
   )	,      (
       _snake_case
   )	,      
   )							:	List[Any]			=						config_and_inputs
   _snake_case							:	Any			=						{"""pixel_values""": pixel_values}
   return config, inputs_dict







@require_torch
class       lowercase(  __a ,    __a ,    unittest.TestCase				):







 '''simple docstring'''





 lowercase__				      =      (UperNetForSemanticSegmentation,) if is_torch_available() else ()
 lowercase__				      =      {"image-segmentation": UperNetForSemanticSegmentation} if is_torch_available() else {}
 lowercase__				      =      False
 lowercase__				      =      False
 lowercase__				      =      False
 lowercase__				      =      False
 lowercase__				      =      False
 lowercase__				      =      False


 def 				UpperCamelCase_     (       self:	Optional[Any]	):




   '''simple docstring'''



   _snake_case							:	List[str]			=						UperNetModelTester(self	)
   _snake_case							:	Dict			=						ConfigTester(self,   config_class=a_,   has_text_modality=a_,   hidden_size=37	)


 def 				UpperCamelCase_     (       self:	Any	):




   '''simple docstring'''



   self.create_and_test_config_common_properties()
   self.config_tester.create_and_test_config_to_json_string()
   self.config_tester.create_and_test_config_to_json_file()
   self.config_tester.create_and_test_config_from_and_save_pretrained()
   self.config_tester.create_and_test_config_with_num_labels()
   self.config_tester.check_config_can_be_init_without_params()
   self.config_tester.check_config_arguments_init()


 def 				UpperCamelCase_     (       self:	List[Any]	):




   '''simple docstring'''



   return


 def 				UpperCamelCase_     (       self:	Union[str, Any]	):




   '''simple docstring'''



   _snake_case	,      _snake_case							:	Any			=						self.model_tester.prepare_config_and_inputs_for_common()

   for model_class in self.all_model_classes:
     _snake_case							:	Dict			=						model_class(a_	)
     _snake_case							:	Optional[int]			=						inspect.signature(model.forward	)
     # signature.parameters is an OrderedDict => so arg_names order is deterministic
     _snake_case							:	Tuple			=						[*signature.parameters.keys()]

     _snake_case							:	Any			=						["""pixel_values"""]
     self.assertListEqual(arg_names[:1],   a_	)


 def 				UpperCamelCase_     (       self:	Any	):




   '''simple docstring'''



   _snake_case							:	Union[str, Any]			=						self.model_tester.prepare_config_and_inputs()
   self.model_tester.create_and_check_for_semantic_segmentation(*a_	)


 @unittest.skip(reason="""UperNet does not use inputs_embeds"""	)
 def 				UpperCamelCase_     (       self:	Any	):




   '''simple docstring'''



   pass


 @unittest.skip(reason="""UperNet does not support input and output embeddings"""	)
 def 				UpperCamelCase_     (       self:	Dict	):




   '''simple docstring'''



   pass


 @unittest.skip(reason="""UperNet does not have a base model"""	)
 def 				UpperCamelCase_     (       self:	Optional[Any]	):




   '''simple docstring'''



   pass


 @unittest.skip(reason="""UperNet does not have a base model"""	)
 def 				UpperCamelCase_     (       self:	int	):




   '''simple docstring'''



   pass


 @require_torch_multi_gpu
 @unittest.skip(reason="""UperNet has some layers using `add_module` which doesn't work well with `nn.DataParallel`"""	)
 def 				UpperCamelCase_     (       self:	List[str]	):




   '''simple docstring'''



   pass


 @unittest.skip("""Will be fixed soon by reducing the size of the model used for common tests."""	)
 def 				UpperCamelCase_     (       self:	Dict	):




   '''simple docstring'''



   pass


 def 				UpperCamelCase_     (       self:	str	):




   '''simple docstring'''



   def check_hidden_states_output(a_:	Dict,   a_:	List[str],   a_:	Optional[int]	):
     _snake_case							:	Optional[Any]			=						model_class(a_	)
     model.to(a_	)
     model.eval()

     with torch.no_grad():
       _snake_case							:	Any			=						model(**self._prepare_for_class(a_,   a_	)	)

     _snake_case							:	Any			=						outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states

     _snake_case							:	List[str]			=						self.model_tester.num_stages
     self.assertEqual(len(a_	),   expected_num_stages + 1	)

     # ConvNext's feature maps are of shape (batch_size, num_channels, height, width)
     self.assertListEqual(
         list(hidden_states[0].shape[-2:]	),   [self.model_tester.image_size // 4, self.model_tester.image_size // 4],   )

   _snake_case	,      _snake_case							:	str			=						self.model_tester.prepare_config_and_inputs_for_common()

   for model_class in self.all_model_classes:
     _snake_case							:	int			=						True
     check_hidden_states_output(a_,   a_,   a_	)

     # check that output_hidden_states also work using config
     del inputs_dict["output_hidden_states"]
     _snake_case							:	Optional[int]			=						True

     check_hidden_states_output(a_,   a_,   a_	)


 def 				UpperCamelCase_     (       self:	str	):




   '''simple docstring'''



   _snake_case	,      _snake_case							:	int			=						self.model_tester.prepare_config_and_inputs_for_common()

   _snake_case							:	Tuple			=						_config_zero_init(a_	)
   _snake_case							:	Dict			=						_config_zero_init(configs_no_init.backbone_config	)
   for model_class in self.all_model_classes:
     _snake_case							:	Optional[int]			=						model_class(config=a_	)
     for name, param in model.named_parameters():
       if param.requires_grad:
         self.assertIn(
             ((param.data.mean() * 1E9).round() / 1E9).item(),   [0.0, 1.0],   msg=f"Parameter {name} of model {model_class} seems not properly initialized",   )


 @unittest.skip(reason="""UperNet does not have tied weights"""	)
 def 				UpperCamelCase_     (       self:	Union[str, Any]	):




   '''simple docstring'''



   pass


 @slow
 def 				UpperCamelCase_     (       self:	List[str]	):




   '''simple docstring'''



   for model_name in UPERNET_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
     _snake_case							:	int			=						UperNetForSemanticSegmentation.from_pretrained(a_	)
     self.assertIsNotNone(a_	)







def       UpperCAmelCase__ ():
  """simple docstring"""

  _snake_case							:	Union[str, Any]			=						hf_hub_download(
      repo_id="""hf-internal-testing/fixtures_ade20k"""	,     repo_type="""dataset"""	,     filename="""ADE_val_00000001.jpg"""					)
  _snake_case							:	List[Any]			=						Image.open(snake_case__					).convert("""RGB"""					)
  return image






@require_torch
@require_vision
@slow
class       lowercase(  unittest.TestCase				):







 '''simple docstring'''





 def 				UpperCamelCase_     (       self:	Tuple	):




   '''simple docstring'''



   _snake_case							:	str			=						AutoImageProcessor.from_pretrained("""openmmlab/upernet-swin-tiny"""	)
   _snake_case							:	Any			=						UperNetForSemanticSegmentation.from_pretrained("""openmmlab/upernet-swin-tiny"""	).to(a_	)

   _snake_case							:	Dict			=						prepare_img()
   _snake_case							:	str			=						processor(images=a_,   return_tensors="""pt"""	).to(a_	)

   with torch.no_grad():
     _snake_case							:	Tuple			=						model(**a_	)

   _snake_case							:	Tuple			=						torch.Size((1, model.config.num_labels, 512, 512)	)
   self.assertEqual(outputs.logits.shape,   a_	)

   _snake_case							:	int			=						torch.tensor(
       [[-7.5_958, -7.5_958, -7.4_302], [-7.5_958, -7.5_958, -7.4_302], [-7.4_797, -7.4_797, -7.3_068]]	).to(a_	)
   self.assertTrue(torch.allclose(outputs.logits[0, 0, :3, :3],   a_,   atol=1E-4	)	)


 def 				UpperCamelCase_     (       self:	int	):




   '''simple docstring'''



   _snake_case							:	Optional[Any]			=						AutoImageProcessor.from_pretrained("""openmmlab/upernet-convnext-tiny"""	)
   _snake_case							:	Optional[int]			=						UperNetForSemanticSegmentation.from_pretrained("""openmmlab/upernet-convnext-tiny"""	).to(a_	)

   _snake_case							:	List[str]			=						prepare_img()
   _snake_case							:	Tuple			=						processor(images=a_,   return_tensors="""pt"""	).to(a_	)

   with torch.no_grad():
     _snake_case							:	Optional[Any]			=						model(**a_	)

   _snake_case							:	Union[str, Any]			=						torch.Size((1, model.config.num_labels, 512, 512)	)
   self.assertEqual(outputs.logits.shape,   a_	)

   _snake_case							:	Optional[Any]			=						torch.tensor(
       [[-8.8_110, -8.8_110, -8.6_521], [-8.8_110, -8.8_110, -8.6_521], [-8.7_746, -8.7_746, -8.6_130]]	).to(a_	)
   self.assertTrue(torch.allclose(outputs.logits[0, 0, :3, :3],   a_,   atol=1E-4	)	)


