


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

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


if TYPE_CHECKING:
    from ...feature_extraction_utils import FeatureExtractionMixin
    from ...tokenization_utils_base import PreTrainedTokenizerBase
    from ...utils import TensorType

__snake_case   							=						logging.get_logger(__name__)

__snake_case   							=						{
    '''openai/whisper-base''': '''https://huggingface.co/openai/whisper-base/resolve/main/config.json''',
}

# fmt: off
__snake_case   							=						[
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_7, 3_6_6, 4_3_8, 5_3_2, 6_8_5,
    7_0_5, 7_9_6, 9_3_0, 1_0_5_8, 1_2_2_0, 1_2_6_7, 1_2_7_9, 1_3_0_3, 1_3_4_3, 1_3_7_7,
    1_3_9_1, 1_6_3_5, 1_7_8_2, 1_8_7_5, 2_1_6_2, 2_3_6_1, 2_4_8_8, 3_4_6_7, 4_0_0_8, 4_2_1_1,
    4_6_0_0, 4_8_0_8, 5_2_9_9, 5_8_5_5, 6_3_2_9, 7_2_0_3, 9_6_0_9, 9_9_5_9, 1_0_5_6_3, 1_0_7_8_6,
    1_1_4_2_0, 1_1_7_0_9, 1_1_9_0_7, 1_3_1_6_3, 1_3_6_9_7, 1_3_7_0_0, 1_4_8_0_8, 1_5_3_0_6, 1_6_4_1_0, 1_6_7_9_1,
    1_7_9_9_2, 1_9_2_0_3, 1_9_5_1_0, 2_0_7_2_4, 2_2_3_0_5, 2_2_9_3_5, 2_7_0_0_7, 3_0_1_0_9, 3_0_4_2_0, 3_3_4_0_9,
    3_4_9_4_9, 4_0_2_8_3, 4_0_4_9_3, 4_0_5_4_9, 4_7_2_8_2, 4_9_1_4_6, 5_0_2_5_7, 5_0_3_5_9, 5_0_3_6_0, 5_0_3_6_1
]
__snake_case   							=						[
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_9, 5_0_3, 5_2_2, 5_4_2, 8_7_3,
    8_9_3, 9_0_2, 9_1_8, 9_2_2, 9_3_1, 1_3_5_0, 1_8_5_3, 1_9_8_2, 2_4_6_0, 2_6_2_7,
    3_2_4_6, 3_2_5_3, 3_2_6_8, 3_5_3_6, 3_8_4_6, 3_9_6_1, 4_1_8_3, 4_6_6_7, 6_5_8_5, 6_6_4_7,
    7_2_7_3, 9_0_6_1, 9_3_8_3, 1_0_4_2_8, 1_0_9_2_9, 1_1_9_3_8, 1_2_0_3_3, 1_2_3_3_1, 1_2_5_6_2, 1_3_7_9_3,
    1_4_1_5_7, 1_4_6_3_5, 1_5_2_6_5, 1_5_6_1_8, 1_6_5_5_3, 1_6_6_0_4, 1_8_3_6_2, 1_8_9_5_6, 2_0_0_7_5, 2_1_6_7_5,
    2_2_5_2_0, 2_6_1_3_0, 2_6_1_6_1, 2_6_4_3_5, 2_8_2_7_9, 2_9_4_6_4, 3_1_6_5_0, 3_2_3_0_2, 3_2_4_7_0, 3_6_8_6_5,
    4_2_8_6_3, 4_7_4_2_5, 4_9_8_7_0, 5_0_2_5_4, 5_0_2_5_8, 5_0_3_6_0, 5_0_3_6_1, 5_0_3_6_2
]



class 	__lowerCamelCase			(_a						):
       _lowercase											=     """whisper"""
       _lowercase											=     ["""past_key_values"""]
       _lowercase											=     {"""num_attention_heads""": """encoder_attention_heads""", """hidden_size""": """d_model"""}







       def __init__(			self: Union[str, Any],A_: List[str]=5_1865,A_: Tuple=80,A_: List[Any]=6,A_: Dict=4,A_: Dict=6,A_: List[str]=4,A_: List[str]=1536,A_: int=1536,A_: List[str]=0.0,A_: Any=0.0,A_: List[str]=5_0257,A_: Tuple=True,A_: Dict=True,A_: Optional[Any]="gelu",A_: Tuple=256,A_: Dict=0.0,A_: List[Any]=0.0,A_: Dict=0.0,A_: int=0.0_2,A_: List[Any]=False,A_: List[str]=1500,A_: int=448,A_: Dict=5_0256,A_: Dict=5_0256,A_: List[str]=5_0256,A_: Dict=None,A_: List[Any]=[220, 5_0256],A_: Dict=False,A_: str=256,A_: Tuple=False,A_: List[Any]=0.0_5,A_: Dict=10,A_: Optional[int]=2,A_: List[str]=0.0,A_: Optional[Any]=10,A_: Union[str, Any]=0,A_: Dict=7,**A_: List[Any],):






            '''simple docstring'''




            __UpperCamelCase =			vocab_size
            __UpperCamelCase =			num_mel_bins
            __UpperCamelCase =			d_model
            __UpperCamelCase =			encoder_layers
            __UpperCamelCase =			encoder_attention_heads
            __UpperCamelCase =			decoder_layers
            __UpperCamelCase =			decoder_attention_heads
            __UpperCamelCase =			decoder_ffn_dim
            __UpperCamelCase =			encoder_ffn_dim
            __UpperCamelCase =			dropout
            __UpperCamelCase =			attention_dropout
            __UpperCamelCase =			activation_dropout
            __UpperCamelCase =			activation_function
            __UpperCamelCase =			init_std
            __UpperCamelCase =			encoder_layerdrop
            __UpperCamelCase =			decoder_layerdrop
            __UpperCamelCase =			use_cache
            __UpperCamelCase =			encoder_layers
            __UpperCamelCase =			scale_embedding  # scale factor will be sqrt(d_model) if True
            __UpperCamelCase =			max_source_positions
            __UpperCamelCase =			max_target_positions

            # Audio Classification-specific parameters. Feel free to ignore for other classes.
            __UpperCamelCase =			classifier_proj_size
            __UpperCamelCase =			use_weighted_layer_sum

            # fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
            __UpperCamelCase =			apply_spec_augment
            __UpperCamelCase =			mask_time_prob
            __UpperCamelCase =			mask_time_length
            __UpperCamelCase =			mask_time_min_masks
            __UpperCamelCase =			mask_feature_prob
            __UpperCamelCase =			mask_feature_length
            __UpperCamelCase =			mask_feature_min_masks

            __UpperCamelCase =			median_filter_width

            super().__init__(
                pad_token_id=A_,bos_token_id=A_,eos_token_id=A_,is_encoder_decoder=A_,decoder_start_token_id=A_,suppress_tokens=A_,begin_suppress_tokens=A_,**A_,)



class 	__lowerCamelCase			(_a						):







       @property
       def 		snake_case_	(			self: Optional[int]					):






            '''simple docstring'''




            __UpperCamelCase =			OrderedDict(
                [
                    ('input_features', {0: 'batch', 1: 'feature_size', 2: 'encoder_sequence'}),
                ]					)
            if self.use_past:
                 __UpperCamelCase =			{0: 'batch'}
            else:
                 __UpperCamelCase =			{0: 'batch', 1: 'decoder_sequence'}

            if self.use_past:
                 self.fill_with_past_key_values_(A_,direction='inputs'					)

            return common_inputs







       def 		snake_case_	(			self: Tuple,A_: Union["PreTrainedTokenizerBase", "FeatureExtractionMixin"],A_: int = -1,A_: int = -1,A_: bool = False,A_: Optional["TensorType"] = None,A_: int = 2_2050,A_: float = 5.0,A_: int = 220,):






            '''simple docstring'''




            __UpperCamelCase =			OrderedDict()
            __UpperCamelCase =			OnnxConfig.generate_dummy_inputs(
                self,preprocessor=preprocessor.feature_extractor,batch_size=A_,framework=A_,sampling_rate=A_,time_duration=A_,frequency=A_,)
            __UpperCamelCase =			encoder_inputs['input_features'].shape[2]
            __UpperCamelCase =			encoder_sequence_length // 2 if self.use_past else seq_length

            __UpperCamelCase =			super().generate_dummy_inputs(
                preprocessor.tokenizer,A_,A_,A_,A_					)

            __UpperCamelCase =			encoder_inputs.pop('input_features'					)
            __UpperCamelCase =			decoder_inputs.pop('decoder_input_ids'					)

            if "past_key_values" in decoder_inputs:
                 __UpperCamelCase =			decoder_inputs.pop('past_key_values'					)

            return dummy_inputs







       @property
       def 		snake_case_	(			self: Optional[Any]					):






            '''simple docstring'''




            return 1E-3






"""simple docstring"""


import json
import os
import sys
import tempfile
import unittest
from pathlib import Path
from shutil import copyfile

from huggingface_hub import HfFolder, Repository, create_repo, delete_repo
from requests.exceptions import HTTPError

import transformers
from transformers import (
    CONFIG_MAPPING,
    FEATURE_EXTRACTOR_MAPPING,
    PROCESSOR_MAPPING,
    TOKENIZER_MAPPING,
    AutoConfig,
    AutoFeatureExtractor,
    AutoProcessor,
    AutoTokenizer,
    BertTokenizer,
    ProcessorMixin,
    WavaVecaConfig,
    WavaVecaFeatureExtractor,
    WavaVecaProcessor,
)
from transformers.testing_utils import TOKEN, USER, get_tests_dir, is_staging_test
from transformers.tokenization_utils import TOKENIZER_CONFIG_FILE
from transformers.utils import FEATURE_EXTRACTOR_NAME, is_tokenizers_available


sys.path.append(str(Path(__file__).parent.parent.parent.parent / 'utils'))

from test_module.custom_configuration import CustomConfig  # noqa E402
from test_module.custom_feature_extraction import CustomFeatureExtractor  # noqa E402
from test_module.custom_processing import CustomProcessor  # noqa E402
from test_module.custom_tokenization import CustomTokenizer  # noqa E402


__snake_case    					=					get_tests_dir('fixtures/dummy_feature_extractor_config.json')
__snake_case    					=					get_tests_dir('fixtures/vocab.json')
__snake_case    					=					get_tests_dir('fixtures')

class 				_SCREAMING_SNAKE_CASE				(							unittest.TestCase  ):
   """simple docstring"""



   _a   :       int									=    ['''[UNK]''', '''[CLS]''', '''[SEP]''', '''[PAD]''', '''[MASK]''', '''bla''', '''blou''']


   def 					UpperCAmelCase__(						self						)      ->							Any:
    lowercase__       :       Tuple				=						0


   def 					UpperCAmelCase__(						self						)      ->							Optional[int]:
    lowercase__       :       List[str]				=						AutoProcessor.from_pretrained("""facebook/wav2vec2-base-960h"""						)
    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       str				=						WavaVecaConfig()
     lowercase__       :       int				=						AutoProcessor.from_pretrained("""facebook/wav2vec2-base-960h"""						)

     # save in new folder
     model_config.save_pretrained(lowerCamelCase__						)
     processor.save_pretrained(lowerCamelCase__						)

     lowercase__       :       Optional[Any]				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    with tempfile.TemporaryDirectory() as tmpdirname:
     # copy relevant files
     copyfile(lowerCamelCase__ ,     os.path.join(lowerCamelCase__ ,     lowerCamelCase__						)						)
     copyfile(lowerCamelCase__ ,     os.path.join(lowerCamelCase__ ,     """vocab.json"""						)						)

     lowercase__       :       Tuple				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Union[str, Any]:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       Any				=						WavaVecaFeatureExtractor()
     lowercase__       :       Dict				=						AutoTokenizer.from_pretrained("""facebook/wav2vec2-base-960h"""						)

     lowercase__       :       int				=						WavaVecaProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

     # save in new folder
     processor.save_pretrained(lowerCamelCase__						)

     # drop `processor_class` in tokenizer
     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """r"""						) as f:
      lowercase__       :       str				=						json.load(lowerCamelCase__						)
      config_dict.pop("""processor_class"""						)

     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """w"""						) as f:
      f.write(json.dumps(lowerCamelCase__						)						)

     lowercase__       :       Dict				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       Dict				=						WavaVecaFeatureExtractor()
     lowercase__       :       int				=						AutoTokenizer.from_pretrained("""facebook/wav2vec2-base-960h"""						)

     lowercase__       :       List[Any]				=						WavaVecaProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

     # save in new folder
     processor.save_pretrained(lowerCamelCase__						)

     # drop `processor_class` in feature extractor
     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """r"""						) as f:
      lowercase__       :       List[str]				=						json.load(lowerCamelCase__						)
      config_dict.pop("""processor_class"""						)

     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """w"""						) as f:
      f.write(json.dumps(lowerCamelCase__						)						)

     lowercase__       :       int				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Dict:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       List[Any]				=						WavaVecaConfig(processor_class="""Wav2Vec2Processor"""						)
     model_config.save_pretrained(lowerCamelCase__						)
     # copy relevant files
     copyfile(lowerCamelCase__ ,     os.path.join(lowerCamelCase__ ,     """vocab.json"""						)						)
     # create emtpy sample processor
     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """w"""						) as f:
      f.write("""{}"""						)

     lowercase__       :       Union[str, Any]				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    # If remote code is not set, we will time out when asking whether to load the model.
    with self.assertRaises(lowerCamelCase__						):
     lowercase__       :       Optional[Any]				=						AutoProcessor.from_pretrained("""hf-internal-testing/test_dynamic_processor"""						)
    # If remote code is disabled, we can't load this config.
    with self.assertRaises(lowerCamelCase__						):
     lowercase__       :       Any				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)

    lowercase__       :       str				=						AutoProcessor.from_pretrained("""hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)
    self.assertTrue(processor.special_attribute_present						)
    self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)

    lowercase__       :       Dict				=						processor.feature_extractor
    self.assertTrue(feature_extractor.special_attribute_present						)
    self.assertEqual(feature_extractor.__class__.__name__ ,     """NewFeatureExtractor"""						)

    lowercase__       :       int				=						processor.tokenizer
    self.assertTrue(tokenizer.special_attribute_present						)
    if is_tokenizers_available():
     self.assertEqual(tokenizer.__class__.__name__ ,     """NewTokenizerFast"""						)

     # Test we can also load the slow version
     lowercase__       :       str				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__ ,     use_fast=lowerCamelCase__						)
     lowercase__       :       Tuple				=						new_processor.tokenizer
     self.assertTrue(new_tokenizer.special_attribute_present						)
     self.assertEqual(new_tokenizer.__class__.__name__ ,     """NewTokenizer"""						)
    else:
     self.assertEqual(tokenizer.__class__.__name__ ,     """NewTokenizer"""						)


   def 					UpperCAmelCase__(						self						)      ->							str:
    try:
     AutoConfig.register("""custom""" ,     lowerCamelCase__						)
     AutoFeatureExtractor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     AutoTokenizer.register(lowerCamelCase__ ,     slow_tokenizer_class=lowerCamelCase__						)
     AutoProcessor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     # Trying to register something existing in the Transformers library will raise an error
     with self.assertRaises(lowerCamelCase__						):
      AutoProcessor.register(lowerCamelCase__ ,     lowerCamelCase__						)

     # Now that the config is registered, it can be used as any other config with the auto-API
     lowercase__       :       Union[str, Any]				=						CustomFeatureExtractor.from_pretrained(lowerCamelCase__						)

     with tempfile.TemporaryDirectory() as tmp_dir:
      lowercase__       :       Any				=						os.path.join(lowerCamelCase__ ,     """vocab.txt"""						)
      with open(lowerCamelCase__ ,     """w""" ,     encoding="""utf-8"""						) as vocab_writer:
       vocab_writer.write("""""".join([x + """\n""" for x in self.vocab_tokens]						)						)
      lowercase__       :       Tuple				=						CustomTokenizer(lowerCamelCase__						)

     lowercase__       :       Dict				=						CustomProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

     with tempfile.TemporaryDirectory() as tmp_dir:
      processor.save_pretrained(lowerCamelCase__						)
      lowercase__       :       str				=						AutoProcessor.from_pretrained(lowerCamelCase__						)
      self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)

    finally:
     if "custom" in CONFIG_MAPPING._extra_content:
      del CONFIG_MAPPING._extra_content["custom"]
     if CustomConfig in FEATURE_EXTRACTOR_MAPPING._extra_content:
      del FEATURE_EXTRACTOR_MAPPING._extra_content[CustomConfig]
     if CustomConfig in TOKENIZER_MAPPING._extra_content:
      del TOKENIZER_MAPPING._extra_content[CustomConfig]
     if CustomConfig in PROCESSOR_MAPPING._extra_content:
      del PROCESSOR_MAPPING._extra_content[CustomConfig]


   def 					UpperCAmelCase__(						self						)      ->							Dict:

    class 				_SCREAMING_SNAKE_CASE				(							__UpperCAmelCase  ):
       """simple docstring"""



       _a   :       int									=    False

    class 				_SCREAMING_SNAKE_CASE				(							__UpperCAmelCase  ):
       """simple docstring"""



       _a   :       Union[str, Any]									=    False

    class 				_SCREAMING_SNAKE_CASE				(							__UpperCAmelCase  ):
       """simple docstring"""



       _a   :       Union[str, Any]									=    '''AutoFeatureExtractor'''
       _a   :       List[str]									=    '''AutoTokenizer'''
       _a   :       Optional[Any]									=    False

    try:
     AutoConfig.register("""custom""" ,     lowerCamelCase__						)
     AutoFeatureExtractor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     AutoTokenizer.register(lowerCamelCase__ ,     slow_tokenizer_class=lowerCamelCase__						)
     AutoProcessor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     # If remote code is not set, the default is to use local classes.
     lowercase__       :       Union[str, Any]				=						AutoProcessor.from_pretrained("""hf-internal-testing/test_dynamic_processor"""						)
     self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)
     self.assertFalse(processor.special_attribute_present						)
     self.assertFalse(processor.feature_extractor.special_attribute_present						)
     self.assertFalse(processor.tokenizer.special_attribute_present						)

     # If remote code is disabled, we load the local ones.
     lowercase__       :       Tuple				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)
     self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)
     self.assertFalse(processor.special_attribute_present						)
     self.assertFalse(processor.feature_extractor.special_attribute_present						)
     self.assertFalse(processor.tokenizer.special_attribute_present						)

     # If remote is enabled, we load from the Hub.
     lowercase__       :       Any				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)
     self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)
     self.assertTrue(processor.special_attribute_present						)
     self.assertTrue(processor.feature_extractor.special_attribute_present						)
     self.assertTrue(processor.tokenizer.special_attribute_present						)

    finally:
     if "custom" in CONFIG_MAPPING._extra_content:
      del CONFIG_MAPPING._extra_content["custom"]
     if CustomConfig in FEATURE_EXTRACTOR_MAPPING._extra_content:
      del FEATURE_EXTRACTOR_MAPPING._extra_content[CustomConfig]
     if CustomConfig in TOKENIZER_MAPPING._extra_content:
      del TOKENIZER_MAPPING._extra_content[CustomConfig]
     if CustomConfig in PROCESSOR_MAPPING._extra_content:
      del PROCESSOR_MAPPING._extra_content[CustomConfig]


   def 					UpperCAmelCase__(						self						)      ->							int:
    lowercase__       :       Tuple				=						AutoProcessor.from_pretrained("""hf-internal-testing/tiny-random-bert"""						)
    self.assertEqual(processor.__class__.__name__ ,     """BertTokenizerFast"""						)







   def 					UpperCAmelCase__(						self						)      ->							Any:
    lowercase__       :       Tuple				=						AutoProcessor.from_pretrained("""hf-internal-testing/tiny-random-convnext"""						)
    self.assertEqual(processor.__class__.__name__ ,     """ConvNextImageProcessor"""						)

@is_staging_test
class 				_SCREAMING_SNAKE_CASE				(							unittest.TestCase  ):
   """simple docstring"""



   _a   :       int									=    ['''[UNK]''', '''[CLS]''', '''[SEP]''', '''[PAD]''', '''[MASK]''', '''bla''', '''blou''']


   @classmethod
   def 					UpperCAmelCase__(						cls						)      ->							int:
    lowercase__       :       str				=						TOKEN
    HfFolder.save_token(lowerCamelCase__						)


   @classmethod
   def 					UpperCAmelCase__(						cls						)      ->							Dict:
    try:
     delete_repo(token=cls._token ,     repo_id="""test-processor"""						)
    except HTTPError:
     pass

    try:
     delete_repo(token=cls._token ,     repo_id="""valid_org/test-processor-org"""						)
    except HTTPError:
     pass

    try:
     delete_repo(token=cls._token ,     repo_id="""test-dynamic-processor"""						)
    except HTTPError:
     pass


   def 					UpperCAmelCase__(						self						)      ->							int:
    lowercase__       :       List[str]				=						WavaVecaProcessor.from_pretrained(lowerCamelCase__						)
    with tempfile.TemporaryDirectory() as tmp_dir:
     processor.save_pretrained(
         os.path.join(lowerCamelCase__ ,     """test-processor"""						) ,     push_to_hub=lowerCamelCase__ ,     use_auth_token=self._token						)

     lowercase__       :       Optional[Any]				=						WavaVecaProcessor.from_pretrained(F'''{USER}/test-processor'''						)
     for k, v in processor.feature_extractor.__dict__.items():
      self.assertEqual(lowerCamelCase__ ,     getattr(new_processor.feature_extractor ,     lowerCamelCase__						)						)
     self.assertDictEqual(new_processor.tokenizer.get_vocab() ,     processor.tokenizer.get_vocab()						)


   def 					UpperCAmelCase__(						self						)      ->							Optional[Any]:
    lowercase__       :       int				=						WavaVecaProcessor.from_pretrained(lowerCamelCase__						)

    with tempfile.TemporaryDirectory() as tmp_dir:
     processor.save_pretrained(
         os.path.join(lowerCamelCase__ ,     """test-processor-org"""						) ,     push_to_hub=lowerCamelCase__ ,     use_auth_token=self._token ,     organization="""valid_org""" ,     )

     lowercase__       :       Optional[Any]				=						WavaVecaProcessor.from_pretrained("""valid_org/test-processor-org"""						)
     for k, v in processor.feature_extractor.__dict__.items():
      self.assertEqual(lowerCamelCase__ ,     getattr(new_processor.feature_extractor ,     lowerCamelCase__						)						)
     self.assertDictEqual(new_processor.tokenizer.get_vocab() ,     processor.tokenizer.get_vocab()						)







   def 					UpperCAmelCase__(						self						)      ->							int:
    CustomFeatureExtractor.register_for_auto_class()
    CustomTokenizer.register_for_auto_class()
    CustomProcessor.register_for_auto_class()

    lowercase__       :       List[str]				=						CustomFeatureExtractor.from_pretrained(lowerCamelCase__						)

    with tempfile.TemporaryDirectory() as tmp_dir:
     lowercase__       :       Tuple				=						os.path.join(lowerCamelCase__ ,     """vocab.txt"""						)
     with open(lowerCamelCase__ ,     """w""" ,     encoding="""utf-8"""						) as vocab_writer:
      vocab_writer.write("""""".join([x + """\n""" for x in self.vocab_tokens]						)						)
     lowercase__       :       Optional[int]				=						CustomTokenizer(lowerCamelCase__						)

    lowercase__       :       List[Any]				=						CustomProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

    with tempfile.TemporaryDirectory() as tmp_dir:
     create_repo(F'''{USER}/test-dynamic-processor''' ,     token=self._token						)
     lowercase__       :       Tuple				=						Repository(lowerCamelCase__ ,     clone_from=F'''{USER}/test-dynamic-processor''' ,     token=self._token						)
     processor.save_pretrained(lowerCamelCase__						)

     # This has added the proper auto_map field to the feature extractor config
     self.assertDictEqual(
         processor.feature_extractor.auto_map ,     {
             """AutoFeatureExtractor""": """custom_feature_extraction.CustomFeatureExtractor""",
             """AutoProcessor""": """custom_processing.CustomProcessor""",
         } ,     )

     # This has added the proper auto_map field to the tokenizer config
     with open(os.path.join(lowerCamelCase__ ,     """tokenizer_config.json"""						)						) as f:
      lowercase__       :       List[Any]				=						json.load(lowerCamelCase__						)
     self.assertDictEqual(
         tokenizer_config["""auto_map"""] ,     {
             """AutoTokenizer""": ["""custom_tokenization.CustomTokenizer""", None],
             """AutoProcessor""": """custom_processing.CustomProcessor""",
         } ,     )

     # The code has been copied from fixtures
     self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__ ,     """custom_feature_extraction.py"""						)						)						)
     self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__ ,     """custom_tokenization.py"""						)						)						)
     self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__ ,     """custom_processing.py"""						)						)						)

     repo.push_to_hub()

    lowercase__       :       int				=						AutoProcessor.from_pretrained(F'''{USER}/test-dynamic-processor''' ,     trust_remote_code=lowerCamelCase__						)
    # Can't make an isinstance check because the new_processor is from the CustomProcessor class of a dynamic module
    self.assertEqual(new_processor.__class__.__name__ ,     """CustomProcessor"""						)