





import json
import os
import shutil
import tempfile
import unittest

from transformers.models.wavaveca import WavaVecaCTCTokenizer, WavaVecaFeatureExtractor, WavaVecaProcessor
from transformers.models.wavaveca.tokenization_wavaveca import VOCAB_FILES_NAMES
from transformers.utils import FEATURE_EXTRACTOR_NAME

from .test_feature_extraction_wavaveca import floats_list

class SCREAMING_SNAKE_CASE_			(       unittest.TestCase ):





					"""simple docstring"""


					def        __magic_name__			(			self						):
										lowerCamelCase__      =							"<pad> <s> </s> <unk> | E T A O N I H S R D L U M W C F G Y P B V K ' X J Q Z".split(" "						)
										lowerCamelCase__      =							dict(zip(_lowerCAmelCase						,	range(len(_lowerCAmelCase						)						)						)						)

										lowerCamelCase__      =							{
										    "pad_token": "<pad>",
										    "unk_token": "<unk>",
										    "bos_token": "<s>",
										    "eos_token": "</s>",
										}
										lowerCamelCase__      =							{
										    "feature_size": 1,
										    "padding_value": 0.0,
										    "sampling_rate": 1_6000,
										    "return_attention_mask": False,
										    "do_normalize": True,
										}

										lowerCamelCase__      =							tempfile.mkdtemp()
										lowerCamelCase__      =							os.path.join(self.tmpdirname						,	VOCAB_FILES_NAMES["vocab_file"]						)
										lowerCamelCase__      =							os.path.join(self.tmpdirname						,	_lowerCAmelCase						)
										with open(self.vocab_file						,	"w"						,	encoding="utf-8"						) as fp:
															fp.write(json.dumps(_lowerCAmelCase						) + "\n"						)

										with open(self.feature_extraction_file						,	"w"						,	encoding="utf-8"						) as fp:
															fp.write(json.dumps(_lowerCAmelCase						) + "\n"						)





					def        __magic_name__			(			self						,	**_lowerCAmelCase						):
										lowerCamelCase__      =							self.add_kwargs_tokens_map.copy()
										kwargs.update(_lowerCAmelCase						)
										return WavaVecaCTCTokenizer.from_pretrained(self.tmpdirname						,	**_lowerCAmelCase						)





					def        __magic_name__			(			self						,	**_lowerCAmelCase						):
										return WavaVecaFeatureExtractor.from_pretrained(self.tmpdirname						,	**_lowerCAmelCase						)





					def        __magic_name__			(			self						):
										shutil.rmtree(self.tmpdirname						)





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.get_tokenizer()
										lowerCamelCase__      =							self.get_feature_extractor()

										lowerCamelCase__      =							WavaVecaProcessor(tokenizer=_lowerCAmelCase						,	feature_extractor=_lowerCAmelCase						)

										processor.save_pretrained(self.tmpdirname						)
										lowerCamelCase__      =							WavaVecaProcessor.from_pretrained(self.tmpdirname						)

										self.assertEqual(processor.tokenizer.get_vocab()						,	tokenizer.get_vocab()						)
										self.assertIsInstance(processor.tokenizer						,	_lowerCAmelCase						)

										self.assertEqual(processor.feature_extractor.to_json_string()						,	feature_extractor.to_json_string()						)
										self.assertIsInstance(processor.feature_extractor						,	_lowerCAmelCase						)





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							WavaVecaProcessor(tokenizer=self.get_tokenizer()						,	feature_extractor=self.get_feature_extractor()						)
										processor.save_pretrained(self.tmpdirname						)

										lowerCamelCase__      =							self.get_tokenizer(bos_token="(BOS)"						,	eos_token="(EOS)"						)
										lowerCamelCase__      =							self.get_feature_extractor(do_normalize=_lowerCAmelCase						,	padding_value=1.0						)

										lowerCamelCase__      =							WavaVecaProcessor.from_pretrained(
										    self.tmpdirname						,	bos_token="(BOS)"						,	eos_token="(EOS)"						,	do_normalize=_lowerCAmelCase						,	padding_value=1.0						)

										self.assertEqual(processor.tokenizer.get_vocab()						,	tokenizer_add_kwargs.get_vocab()						)
										self.assertIsInstance(processor.tokenizer						,	_lowerCAmelCase						)

										self.assertEqual(processor.feature_extractor.to_json_string()						,	feature_extractor_add_kwargs.to_json_string()						)
										self.assertIsInstance(processor.feature_extractor						,	_lowerCAmelCase						)





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.get_feature_extractor()
										lowerCamelCase__      =							self.get_tokenizer()

										lowerCamelCase__      =							WavaVecaProcessor(tokenizer=_lowerCAmelCase						,	feature_extractor=_lowerCAmelCase						)

										lowerCamelCase__      =							floats_list((3, 1000)						)

										lowerCamelCase__      =							feature_extractor(_lowerCAmelCase						,	return_tensors="np"						)
										lowerCamelCase__      =							processor(_lowerCAmelCase						,	return_tensors="np"						)

										for key in input_feat_extract.keys():
															self.assertAlmostEqual(input_feat_extract[key].sum()						,	input_processor[key].sum()						,	delta=1E-2						)





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.get_feature_extractor()
										lowerCamelCase__      =							self.get_tokenizer()

										lowerCamelCase__      =							WavaVecaProcessor(tokenizer=_lowerCAmelCase						,	feature_extractor=_lowerCAmelCase						)

										lowerCamelCase__      =							"This is a test string"

										lowerCamelCase__      =							processor(text=_lowerCAmelCase						)

										lowerCamelCase__      =							tokenizer(_lowerCAmelCase						)

										for key in encoded_tok.keys():
															self.assertListEqual(encoded_tok[key]						,	encoded_processor[key]						)





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.get_feature_extractor()
										lowerCamelCase__      =							self.get_tokenizer()

										lowerCamelCase__      =							WavaVecaProcessor(tokenizer=_lowerCAmelCase						,	feature_extractor=_lowerCAmelCase						)

										lowerCamelCase__      =							[[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

										lowerCamelCase__      =							processor.batch_decode(_lowerCAmelCase						)
										lowerCamelCase__      =							tokenizer.batch_decode(_lowerCAmelCase						)

										self.assertListEqual(_lowerCAmelCase						,	_lowerCAmelCase						)






					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.get_feature_extractor()
										lowerCamelCase__      =							self.get_tokenizer()

										lowerCamelCase__      =							WavaVecaProcessor(tokenizer=_lowerCAmelCase						,	feature_extractor=_lowerCAmelCase						)

										self.assertListEqual(
										    processor.model_input_names						,	feature_extractor.model_input_names						,	msg="`processor` and `feature_extractor` model input names do not match"						,	)








from __future__ import annotations

import inspect
import unittest
from typing import List, Tuple

from transformers import ConvNextConfig
from transformers.testing_utils import require_tf, require_vision, slow
from transformers.utils import cached_property, is_tf_available, is_vision_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
						import tensorflow as tf

						from transformers import TFConvNextForImageClassification, TFConvNextModel


if is_vision_available():
						from PIL import Image

						from transformers import ConvNextImageProcessor

class SCREAMING_SNAKE_CASE_			:





					"""simple docstring"""


					def __init__(			self						,	_lowerCAmelCase						,	_lowerCAmelCase=13						,	_lowerCAmelCase=32						,	_lowerCAmelCase=3						,	_lowerCAmelCase=4						,	_lowerCAmelCase=[10, 20, 30, 40]						,	_lowerCAmelCase=[2, 2, 3, 2]						,	_lowerCAmelCase=True						,	_lowerCAmelCase=True						,	_lowerCAmelCase=37						,	_lowerCAmelCase="gelu"						,	_lowerCAmelCase=10						,	_lowerCAmelCase=0.02						,	_lowerCAmelCase=3						,	_lowerCAmelCase=None						,	):
										lowerCamelCase__      =							parent
										lowerCamelCase__      =							batch_size
										lowerCamelCase__      =							image_size
										lowerCamelCase__      =							num_channels
										lowerCamelCase__      =							num_stages
										lowerCamelCase__      =							hidden_sizes
										lowerCamelCase__      =							depths
										lowerCamelCase__      =							is_training
										lowerCamelCase__      =							use_labels
										lowerCamelCase__      =							intermediate_size
										lowerCamelCase__      =							hidden_act
										lowerCamelCase__      =							type_sequence_label_size
										lowerCamelCase__      =							initializer_range
										lowerCamelCase__      =							scope





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]						)

										lowerCamelCase__      =							None
										if self.use_labels:
															lowerCamelCase__      =							ids_tensor([self.batch_size]						,	self.type_sequence_label_size						)

										lowerCamelCase__      =							self.get_config()

										return config, pixel_values, labels





					def        __magic_name__			(			self						):
										return ConvNextConfig(
										    num_channels=self.num_channels						,	hidden_sizes=self.hidden_sizes						,	depths=self.depths						,	num_stages=self.num_stages						,	hidden_act=self.hidden_act						,	is_decoder=_lowerCAmelCase						,	initializer_range=self.initializer_range						,	)





					def        __magic_name__			(			self						,	_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						):
										lowerCamelCase__      =							TFConvNextModel(config=_lowerCAmelCase						)
										lowerCamelCase__      =							model(_lowerCAmelCase						,	training=_lowerCAmelCase						)
										# expected last hidden states: B, C, H // 32, W // 32
										self.parent.assertEqual(
										    result.last_hidden_state.shape						,	(self.batch_size, self.hidden_sizes[-1], self.image_size // 32, self.image_size // 32)						,	)





					def        __magic_name__			(			self						,	_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						):
										lowerCamelCase__      =							self.type_sequence_label_size
										lowerCamelCase__      =							TFConvNextForImageClassification(_lowerCAmelCase						)
										lowerCamelCase__      =							model(_lowerCAmelCase						,	labels=_lowerCAmelCase						,	training=_lowerCAmelCase						)
										self.parent.assertEqual(result.logits.shape						,	(self.batch_size, self.type_sequence_label_size)						)






					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.prepare_config_and_inputs()
										lowerCamelCase__     ,		lowerCamelCase__     ,		lowerCamelCase__      =							config_and_inputs
										lowerCamelCase__      =							{"pixel_values": pixel_values}
										return config, inputs_dict

@require_tf
class SCREAMING_SNAKE_CASE_			(       lowercase_				,							lowercase_				,							unittest.TestCase ):





					"""simple docstring"""


					A__								=     (TFConvNextModel, TFConvNextForImageClassification) if is_tf_available() else ()
					A__								=     (
					    {"feature-extraction": TFConvNextModel, "image-classification": TFConvNextForImageClassification}
					    if is_tf_available()
					    else {}
					)

					A__								=     False
					A__								=     False
					A__								=     False
					A__								=     False
					A__								=     False





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							TFConvNextModelTester(self						)
										lowerCamelCase__      =							ConfigTester(
										    self						,	config_class=_lowerCAmelCase						,	has_text_modality=_lowerCAmelCase						,	hidden_size=37						,	)





					@unittest.skip(reason="ConvNext does not use inputs_embeds"						)
					def        __magic_name__			(			self						):
										pass





					@unittest.skipIf(
					    not is_tf_available() or len(tf.config.list_physical_devices("GPU"						)						) == 0						,	reason="TF does not support backprop for grouped convolutions on CPU."						,	)
					@slow
					def        __magic_name__			(			self						):
										super().test_keras_fit()





					@unittest.skip(reason="ConvNext does not support input and output embeddings"						)
					def        __magic_name__			(			self						):
										pass





					def        __magic_name__			(			self						):
										lowerCamelCase__     ,		lowerCamelCase__      =							self.model_tester.prepare_config_and_inputs_for_common()

										for model_class in self.all_model_classes:
															lowerCamelCase__      =							model_class(_lowerCAmelCase						)
															lowerCamelCase__      =							inspect.signature(model.call						)
															# signature.parameters is an OrderedDict => so arg_names order is deterministic
															lowerCamelCase__      =							[*signature.parameters.keys()]

															lowerCamelCase__      =							["pixel_values"]
															self.assertListEqual(arg_names[:1]						,	_lowerCAmelCase						)





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_model(*_lowerCAmelCase						)





					@unittest.skipIf(
					    not is_tf_available() or len(tf.config.list_physical_devices("GPU"						)						) == 0						,	reason="TF does not support backprop for grouped convolutions on CPU."						,	)
					def        __magic_name__			(			self						):
										super().test_dataset_conversion()





					def        __magic_name__			(			self						):
										def check_hidden_states_output(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						):
															lowerCamelCase__      =							model_class(_lowerCAmelCase						)

															lowerCamelCase__      =							model(**self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						)						)
															lowerCamelCase__      =							outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states

															lowerCamelCase__      =							self.model_tester.num_stages
															self.assertEqual(len(_lowerCAmelCase						)						,	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]						,	)

										lowerCamelCase__     ,		lowerCamelCase__      =							self.model_tester.prepare_config_and_inputs_for_common()

										for model_class in self.all_model_classes:
															lowerCamelCase__      =							True
															check_hidden_states_output(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						)

															# check that output_hidden_states also work using config
															del inputs_dict["output_hidden_states"]
															lowerCamelCase__      =							True

															check_hidden_states_output(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						)





					def        __magic_name__			(			self						):
										lowerCamelCase__     ,		lowerCamelCase__      =							self.model_tester.prepare_config_and_inputs_for_common()

										def check_equivalence(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase={}						):
															lowerCamelCase__      =							model(_lowerCAmelCase						,	return_dict=_lowerCAmelCase						,	**_lowerCAmelCase						)
															lowerCamelCase__      =							model(_lowerCAmelCase						,	return_dict=_lowerCAmelCase						,	**_lowerCAmelCase						).to_tuple()

															def recursive_check(_lowerCAmelCase						,	_lowerCAmelCase						):
																				if isinstance(_lowerCAmelCase						,	(List, Tuple)						):
																									for tuple_iterable_value, dict_iterable_value in zip(_lowerCAmelCase						,	_lowerCAmelCase						):
																														recursive_check(_lowerCAmelCase						,	_lowerCAmelCase						)
																				elif tuple_object is None:
																									return
																				else:
																									self.assertTrue(
																									    all(tf.equal(_lowerCAmelCase						,	_lowerCAmelCase						)						)						,	msg=(
																									        "Tuple and dict output are not equal. Difference:"
																									        F" {tf.math.reduce_max(tf.abs(tuple_object - dict_object						)						)}"
																									    )						,	)

																				recursive_check(_lowerCAmelCase						,	_lowerCAmelCase						)

										for model_class in self.all_model_classes:
															lowerCamelCase__      =							model_class(_lowerCAmelCase						)

															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						)
															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						)
															check_equivalence(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						)

															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						,	return_labels=_lowerCAmelCase						)
															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						,	return_labels=_lowerCAmelCase						)
															check_equivalence(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						)

															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						)
															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						)
															check_equivalence(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						,	{"output_hidden_states": True}						)

															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						,	return_labels=_lowerCAmelCase						)
															lowerCamelCase__      =							self._prepare_for_class(_lowerCAmelCase						,	_lowerCAmelCase						,	return_labels=_lowerCAmelCase						)
															check_equivalence(_lowerCAmelCase						,	_lowerCAmelCase						,	_lowerCAmelCase						,	{"output_hidden_states": True}						)





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_for_image_classification(*_lowerCAmelCase						)






					@slow
					def        __magic_name__			(			self						):
										lowerCamelCase__      =							TFConvNextModel.from_pretrained("facebook/convnext-tiny-224"						)
										self.assertIsNotNone(_lowerCAmelCase						)





def  __UpperCamelCase   (     )			->List[str]:
					lowerCamelCase__      =							Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png")
					return image







@require_tf
@require_vision
class SCREAMING_SNAKE_CASE_			(       unittest.TestCase ):





					"""simple docstring"""


					@cached_property
					def        __magic_name__			(			self						):
										return ConvNextImageProcessor.from_pretrained("facebook/convnext-tiny-224"						) if is_vision_available() else None






					@slow
					def        __magic_name__			(			self						):
										lowerCamelCase__      =							TFConvNextForImageClassification.from_pretrained("facebook/convnext-tiny-224"						)

										lowerCamelCase__      =							self.default_image_processor
										lowerCamelCase__      =							prepare_img()
										lowerCamelCase__      =							image_processor(images=_lowerCAmelCase						,	return_tensors="tf"						)

										# forward pass
										lowerCamelCase__      =							model(**_lowerCAmelCase						)

										# verify the logits
										lowerCamelCase__      =							tf.TensorShape((1, 1000)						)
										self.assertEqual(outputs.logits.shape						,	_lowerCAmelCase						)

										lowerCamelCase__      =							tf.constant([-0.0_260, -0.4_739, 0.1_911]						)

										tf.debugging.assert_near(outputs.logits[0, :3]						,	_lowerCAmelCase						,	atol=1E-4						)

