


'''simple docstring'''






from __future__ import annotations

import unittest

from transformers import LEDConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

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


if is_tf_available():
  import tensorflow as tf

  from transformers import TFLEDForConditionalGeneration, TFLEDModel






@require_tf
class    __snake_case       :







    """simple docstring"""



    lowercase    =					LEDConfig
    lowercase    =					{}
    lowercase    =					'gelu'

    def __init__(   self    :  Union[str, Any]    ,						lowerCamelCase    :  str    ,						lowerCamelCase    :  str=13    ,						lowerCamelCase    :  Tuple=7    ,						lowerCamelCase    :  Any=True    ,						lowerCamelCase    :  str=False    ,						lowerCamelCase    :  str=99    ,						lowerCamelCase    :  str=32    ,						lowerCamelCase    :  str=2    ,						lowerCamelCase    :  int=4    ,						lowerCamelCase    :  Dict=37    ,						lowerCamelCase    :  Any=0.1    ,						lowerCamelCase    :  int=0.1    ,						lowerCamelCase    :  List[Any]=20    ,						lowerCamelCase    :  Optional[Any]=2    ,						lowerCamelCase    :  int=1    ,						lowerCamelCase    :  Union[str, Any]=0    ,						lowerCamelCase    :  List[Any]=4    ,						)   ->  List[Any]:
      lowerCAmelCase_			:      str			=   parent
      lowerCAmelCase_			:      Optional[Any]			=   batch_size
      lowerCAmelCase_			:      Optional[int]			=   seq_length
      lowerCAmelCase_			:      str			=   is_training
      lowerCAmelCase_			:      int			=   use_labels
      lowerCAmelCase_			:      List[Any]			=   vocab_size
      lowerCAmelCase_			:      Tuple			=   hidden_size
      lowerCAmelCase_			:      Any			=   num_hidden_layers
      lowerCAmelCase_			:      Any			=   num_attention_heads
      lowerCAmelCase_			:      Dict			=   intermediate_size

      lowerCAmelCase_			:      Union[str, Any]			=   hidden_dropout_prob
      lowerCAmelCase_			:      Union[str, Any]			=   attention_probs_dropout_prob
      lowerCAmelCase_			:      int			=   max_position_embeddings
      lowerCAmelCase_			:      Any			=   eos_token_id
      lowerCAmelCase_			:      int			=   pad_token_id
      lowerCAmelCase_			:      Optional[int]			=   bos_token_id
      lowerCAmelCase_			:      Optional[int]			=   attention_window

      # `ModelTesterMixin.test_attention_outputs` is expecting attention tensors to be of size
      # [num_attention_heads, encoder_seq_length, encoder_key_length], but TFLongformerSelfAttention
      # returns attention of shape [num_attention_heads, encoder_seq_length, self.attention_window + 1]
      # because its local attention only attends to `self.attention_window` and one before and one after
      lowerCAmelCase_			:      Dict			=   self.attention_window + 2

      # because of padding `encoder_seq_length`, is different from `seq_length`. Relevant for
      # the `test_attention_outputs` and `test_hidden_states_output` tests
      lowerCAmelCase_			:      int			=   (
          self.seq_length + (self.attention_window - self.seq_length % self.attention_window) % self.attention_window
      )

    def __lowercase   (   self    :  str		)   ->  List[str]:
      lowerCAmelCase_			:      int			=   ids_tensor([self.batch_size, self.seq_length - 1]    ,						self.vocab_size		)
      lowerCAmelCase_			:      str			=   tf.expand_dims(tf.constant([self.eos_token_id] * self.batch_size		)    ,						1		)
      lowerCAmelCase_			:      List[str]			=   tf.concat([input_ids, eos_tensor]    ,						axis=1		)

      lowerCAmelCase_			:      str			=   ids_tensor([self.batch_size, self.seq_length]    ,						self.vocab_size		)

      lowerCAmelCase_			:      Union[str, Any]			=   self.config_cls(
          vocab_size=self.vocab_size    ,						d_model=self.hidden_size    ,						encoder_layers=self.num_hidden_layers    ,						decoder_layers=self.num_hidden_layers    ,						encoder_attention_heads=self.num_attention_heads    ,						decoder_attention_heads=self.num_attention_heads    ,						encoder_ffn_dim=self.intermediate_size    ,						decoder_ffn_dim=self.intermediate_size    ,						dropout=self.hidden_dropout_prob    ,						attention_dropout=self.attention_probs_dropout_prob    ,						max_position_embeddings=self.max_position_embeddings    ,						eos_token_ids=[2]    ,						bos_token_id=self.bos_token_id    ,						pad_token_id=self.pad_token_id    ,						decoder_start_token_id=self.pad_token_id    ,						attention_window=self.attention_window    ,						**self.config_updates    ,						)
      lowerCAmelCase_			:      str			=   prepare_led_inputs_dict(lowerCamelCase    ,						lowerCamelCase    ,						lowerCamelCase		)
      lowerCAmelCase_			:      Optional[int]			=   tf.concat(
          [tf.zeros_like(lowerCamelCase		)[:, :-1], tf.ones_like(lowerCamelCase		)[:, -1:]]    ,						axis=-1    ,						)
      lowerCAmelCase_			:      Tuple			=   global_attention_mask
      return config, inputs_dict





    def __lowercase   (   self    :  Optional[int]    ,						lowerCamelCase    :  Dict    ,						lowerCamelCase    :  Optional[Any]		)   ->  Tuple:
      lowerCAmelCase_			:      Union[str, Any]			=   TFLEDModel(config=lowerCamelCase		).get_decoder()
      lowerCAmelCase_			:      List[str]			=   inputs_dict["""input_ids"""]

      lowerCAmelCase_			:      Dict			=   input_ids[:1, :]
      lowerCAmelCase_			:      List[Any]			=   inputs_dict["""attention_mask"""][:1, :]
      lowerCAmelCase_			:      Union[str, Any]			=   1

      # first forward pass
      lowerCAmelCase_			:      Tuple			=   model(lowerCamelCase    ,						attention_mask=lowerCamelCase    ,						use_cache=lowerCamelCase		)

      lowerCAmelCase_,							lowerCAmelCase_			:      Dict			=   outputs.to_tuple()

      # create hypothetical next token and extent to next_input_ids
      lowerCAmelCase_			:      Optional[Any]			=   ids_tensor((self.batch_size, 3)    ,						config.vocab_size		)
      lowerCAmelCase_			:      Optional[int]			=   tf.cast(ids_tensor((self.batch_size, 3)    ,						2		)    ,						tf.inta		)

      # append to next input_ids and
      lowerCAmelCase_			:      Optional[Any]			=   tf.concat([input_ids, next_tokens]    ,						axis=-1		)
      lowerCAmelCase_			:      Optional[int]			=   tf.concat([attention_mask, next_attn_mask]    ,						axis=-1		)

      lowerCAmelCase_			:      Tuple			=   model(lowerCamelCase    ,						attention_mask=lowerCamelCase		)[0]
      lowerCAmelCase_			:      Tuple			=   model(lowerCamelCase    ,						attention_mask=lowerCamelCase    ,						past_key_values=lowerCamelCase		)[0]

      self.parent.assertEqual(next_tokens.shape[1]    ,						output_from_past.shape[1]		)

      # select random slice
      lowerCAmelCase_			:      Union[str, Any]			=   int(ids_tensor((1,)    ,						output_from_past.shape[-1]		)		)
      lowerCAmelCase_			:      Dict			=   output_from_no_past[:, -3:, random_slice_idx]
      lowerCAmelCase_			:      Tuple			=   output_from_past[:, :, random_slice_idx]

      # test that outputs are equal for slice
      tf.debugging.assert_near(lowerCamelCase    ,						lowerCamelCase    ,						rtol=1E-3		)







def 				UpperCamelCase_			(    A__					:   Optional[int]							,    A__					:   List[str]							,    A__					:   List[Any]							,    A__					:   Optional[Any]=None							,    A__					:   List[Any]=None							,    A__					:   Optional[Any]=None							,    A__					:   Any=None							,    ):
  '''simple docstring'''





  if attention_mask is None:
    lowerCAmelCase_			:      Optional[int]			=   tf.cast(tf.math.not_equal(A__							,    config.pad_token_id					)							,    tf.inta					)
  if decoder_attention_mask is None:
    lowerCAmelCase_			:      Tuple			=   tf.concat(
        [
            tf.ones(decoder_input_ids[:, :1].shape							,    dtype=tf.inta					),
            tf.cast(tf.math.not_equal(decoder_input_ids[:, 1:]							,    config.pad_token_id					)							,    tf.inta					),
        ]							,    axis=-1							,    )
  if head_mask is None:
    lowerCAmelCase_			:      List[Any]			=   tf.ones((config.encoder_layers, config.encoder_attention_heads)					)
  if decoder_head_mask is None:
    lowerCAmelCase_			:      Any			=   tf.ones((config.decoder_layers, config.decoder_attention_heads)					)
  return {
      "input_ids": input_ids,
      "attention_mask": attention_mask,
      "decoder_input_ids": decoder_input_ids,
      "decoder_attention_mask": decoder_attention_mask,
      "head_mask": head_mask,
      "decoder_head_mask": decoder_head_mask,
  }






@require_tf
class    __snake_case       (   _SCREAMING_SNAKE_CASE	,_SCREAMING_SNAKE_CASE	,unittest.TestCase):







    """simple docstring"""



    lowercase    =					(TFLEDForConditionalGeneration, TFLEDModel) if is_tf_available() else ()
    lowercase    =					(TFLEDForConditionalGeneration,) if is_tf_available() else ()
    lowercase    =					(
        {
            'conversational': TFLEDForConditionalGeneration,
            'feature-extraction': TFLEDModel,
            'summarization': TFLEDForConditionalGeneration,
            'text2text-generation': TFLEDForConditionalGeneration,
            'translation': TFLEDForConditionalGeneration,
        }
        if is_tf_available()
        else {}
    )
    lowercase    =					True
    lowercase    =					False
    lowercase    =					False
    lowercase    =					False

    def __lowercase   (   self    :  Any		)   ->  str:
      lowerCAmelCase_			:      List[str]			=   TFLEDModelTester(self		)
      lowerCAmelCase_			:      Optional[int]			=   ConfigTester(self    ,						config_class=lowerCamelCase		)

    def __lowercase   (   self    :  List[str]		)   ->  Dict:
      self.config_tester.run_common_tests()

    def __lowercase   (   self    :  Union[str, Any]		)   ->  Tuple:
      lowerCAmelCase_			:      Optional[int]			=   self.model_tester.prepare_config_and_inputs_for_common()
      self.model_tester.check_decoder_model_past_large_inputs(*lowerCamelCase		)

    def __lowercase   (   self    :  Tuple		)   ->  int:
      lowerCAmelCase_,							lowerCAmelCase_			:      Union[str, Any]			=   self.model_tester.prepare_config_and_inputs_for_common()
      lowerCAmelCase_			:      Optional[int]			=   tf.zeros_like(inputs_dict["""attention_mask"""]		)
      lowerCAmelCase_			:      Optional[int]			=   2
      lowerCAmelCase_			:      Optional[Any]			=   tf.where(
          tf.range(self.model_tester.seq_length		)[None, :] < num_global_attn_indices    ,						1    ,						inputs_dict["""global_attention_mask"""]    ,						)

      lowerCAmelCase_			:      Union[str, Any]			=   True
      lowerCAmelCase_			:      Any			=   self.model_tester.seq_length
      lowerCAmelCase_			:      Any			=   self.model_tester.encoder_seq_length

      def check_decoder_attentions_output(lowerCamelCase    :  Union[str, Any]		):
        lowerCAmelCase_			:      Any			=   outputs.decoder_attentions
        self.assertEqual(len(lowerCamelCase		)    ,						self.model_tester.num_hidden_layers		)
        self.assertListEqual(
            list(decoder_attentions[0].shape[-3:]		)    ,						[self.model_tester.num_attention_heads, seq_length, seq_length]    ,						)

      def check_encoder_attentions_output(lowerCamelCase    :  int		):
        lowerCAmelCase_			:      Any			=   [t.numpy() for t in outputs.encoder_attentions]
        lowerCAmelCase_			:      Tuple			=   [t.numpy() for t in outputs.encoder_global_attentions]
        self.assertEqual(len(lowerCamelCase		)    ,						self.model_tester.num_hidden_layers		)
        self.assertEqual(len(lowerCamelCase		)    ,						self.model_tester.num_hidden_layers		)
        self.assertListEqual(
            list(attentions[0].shape[-3:]		)    ,						[self.model_tester.num_attention_heads, seq_length, seq_length]    ,						)
        self.assertListEqual(
            list(global_attentions[0].shape[-3:]		)    ,						[self.model_tester.num_attention_heads, encoder_seq_length, num_global_attn_indices]    ,						)

      for model_class in self.all_model_classes:
        lowerCAmelCase_			:      List[Any]			=   True
        lowerCAmelCase_			:      List[str]			=   False
        lowerCAmelCase_			:      Optional[Any]			=   False
        lowerCAmelCase_			:      Dict			=   model_class(lowerCamelCase		)
        lowerCAmelCase_			:      List[str]			=   model(self._prepare_for_class(lowerCamelCase    ,						lowerCamelCase		)		)
        lowerCAmelCase_			:      List[Any]			=   len(lowerCamelCase		)
        self.assertEqual(config.output_hidden_states    ,						lowerCamelCase		)
        check_encoder_attentions_output(lowerCamelCase		)

        if self.is_encoder_decoder:
          lowerCAmelCase_			:      List[Any]			=   model_class(lowerCamelCase		)
          lowerCAmelCase_			:      Any			=   model(self._prepare_for_class(lowerCamelCase    ,						lowerCamelCase		)		)
          self.assertEqual(config.output_hidden_states    ,						lowerCamelCase		)
          check_decoder_attentions_output(lowerCamelCase		)

        # Check that output attentions can also be changed via the config
        del inputs_dict["output_attentions"]
        lowerCAmelCase_			:      Any			=   True
        lowerCAmelCase_			:      Optional[Any]			=   model_class(lowerCamelCase		)
        lowerCAmelCase_			:      Optional[Any]			=   model(self._prepare_for_class(lowerCamelCase    ,						lowerCamelCase		)		)
        self.assertEqual(config.output_hidden_states    ,						lowerCamelCase		)
        check_encoder_attentions_output(lowerCamelCase		)

        # Check attention is always last and order is fine
        lowerCAmelCase_			:      Optional[Any]			=   True
        lowerCAmelCase_			:      Any			=   True
        lowerCAmelCase_			:      Union[str, Any]			=   model_class(lowerCamelCase		)
        lowerCAmelCase_			:      Any			=   model(self._prepare_for_class(lowerCamelCase    ,						lowerCamelCase		)		)

        self.assertEqual(out_len + (2 if self.is_encoder_decoder else 1)    ,						len(lowerCamelCase		)		)
        self.assertEqual(model.config.output_hidden_states    ,						lowerCamelCase		)
        check_encoder_attentions_output(lowerCamelCase		)

    @unittest.skip("""LED keeps using potentially symbolic tensors in conditionals and breaks tracing."""		)
    def __lowercase   (   self    :  List[str]		)   ->  Any:
      pass





    def __lowercase   (   self    :  Dict		)   ->  List[str]:
      # TODO: Head-masking not yet implement
      pass







def 				UpperCamelCase_			(    A__					:   Optional[Any]					):
  '''simple docstring'''





  return tf.constant(A__							,    dtype=tf.intaa					)


__A					:  str											=      1E-4






@slow
@require_tf
class    __snake_case       (   unittest.TestCase):







    """simple docstring"""



    def __lowercase   (   self    :  Any		)   ->  Tuple:
      lowerCAmelCase_			:      Tuple			=   TFLEDForConditionalGeneration.from_pretrained("""allenai/led-base-16384"""		).led

      # change to intended input here
      lowerCAmelCase_			:      Optional[int]			=   _long_tensor([5_12 * [0, 3_14_14, 2_32, 3_28, 7_40, 11_40, 1_26_95, 69]]		)
      lowerCAmelCase_			:      Any			=   _long_tensor([1_28 * [0, 3_14_14, 2_32, 3_28, 7_40, 11_40, 1_26_95, 69]]		)
      lowerCAmelCase_			:      Any			=   prepare_led_inputs_dict(model.config    ,						lowerCamelCase    ,						lowerCamelCase		)
      lowerCAmelCase_			:      Union[str, Any]			=   model(**lowerCamelCase		)[0]
      lowerCAmelCase_			:      Any			=   (1, 10_24, 7_68)
      self.assertEqual(output.shape    ,						lowerCamelCase		)
      # change to expected output here
      lowerCAmelCase_			:      int			=   tf.convert_to_tensor(
          [[2.3_050, 2.8_279, 0.6_531], [-1.8_457, -0.1_455, -3.5_661], [-1.0_186, 0.4_586, -2.2_043]]    ,						)
      tf.debugging.assert_near(output[:, :3, :3]    ,						lowerCamelCase    ,						atol=1E-3		)





    def __lowercase   (   self    :  List[Any]		)   ->  Dict:
      lowerCAmelCase_			:      List[str]			=   TFLEDForConditionalGeneration.from_pretrained("""allenai/led-base-16384"""		)

      # change to intended input here
      lowerCAmelCase_			:      int			=   _long_tensor([5_12 * [0, 3_14_14, 2_32, 3_28, 7_40, 11_40, 1_26_95, 69]]		)
      lowerCAmelCase_			:      Tuple			=   _long_tensor([1_28 * [0, 3_14_14, 2_32, 3_28, 7_40, 11_40, 1_26_95, 69]]		)
      lowerCAmelCase_			:      List[Any]			=   prepare_led_inputs_dict(model.config    ,						lowerCamelCase    ,						lowerCamelCase		)
      lowerCAmelCase_			:      List[Any]			=   model(**lowerCamelCase		)[0]
      lowerCAmelCase_			:      str			=   (1, 10_24, model.config.vocab_size)
      self.assertEqual(output.shape    ,						lowerCamelCase		)
      # change to expected output here
      lowerCAmelCase_			:      int			=   tf.convert_to_tensor(
          [[33.6_507, 6.4_572, 16.8_089], [5.8_739, -2.4_238, 11.2_902], [-3.2_139, -4.3_149, 4.2_783]]    ,						)
      tf.debugging.assert_near(output[:, :3, :3]    ,						lowerCamelCase    ,						atol=1E-3    ,						rtol=1E-3		)







'''simple docstring'''






import sys
import tempfile
import unittest
import unittest.mock as mock
from pathlib import Path

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

from transformers import AutoFeatureExtractor, WavaVecaFeatureExtractor
from transformers.testing_utils import TOKEN, USER, get_tests_dir, is_staging_test


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

from test_module.custom_feature_extraction import CustomFeatureExtractor  # noqa E402


__A					:  str											=      get_tests_dir("fixtures")






class    __snake_case       (   unittest.TestCase):







    """simple docstring"""



    def __lowercase   (   self    :  int		)   ->  List[str]:
      # A mock response for an HTTP head request to emulate server down
      lowerCAmelCase_			:      str			=   mock.Mock()
      lowerCAmelCase_			:      Optional[Any]			=   5_00
      lowerCAmelCase_			:      List[str]			=   {}
      lowerCAmelCase_			:      str			=   HTTPError
      lowerCAmelCase_			:      Any			=   {}

      # Download this model to make sure it's in the cache.
      lowerCAmelCase_			:      Optional[Any]			=   WavaVecaFeatureExtractor.from_pretrained("""hf-internal-testing/tiny-random-wav2vec2"""		)
      # Under the mock environment we get a 500 error when trying to reach the model.
      with mock.patch("""requests.Session.request"""    ,						return_value=lowerCamelCase		) as mock_head:
        lowerCAmelCase_			:      Union[str, Any]			=   WavaVecaFeatureExtractor.from_pretrained("""hf-internal-testing/tiny-random-wav2vec2"""		)
        # This check we did call the fake head request
        mock_head.assert_called()





    def __lowercase   (   self    :  Dict		)   ->  Any:
      # This test is for deprecated behavior and can be removed in v5
      lowerCAmelCase_			:      List[str]			=   WavaVecaFeatureExtractor.from_pretrained(
          """https://huggingface.co/hf-internal-testing/tiny-random-wav2vec2/resolve/main/preprocessor_config.json"""		)







@is_staging_test
class    __snake_case       (   unittest.TestCase):







    """simple docstring"""



    @classmethod
    def __lowercase   (   cls    :  Tuple		)   ->  str:
      lowerCAmelCase_			:      Dict			=   TOKEN
      HfFolder.save_token(lowerCamelCase		)

    @classmethod
    def __lowercase   (   cls    :  Any		)   ->  Any:
      try:
        delete_repo(token=cls._token    ,						repo_id="""test-feature-extractor"""		)
      except HTTPError:
        pass

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

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

    def __lowercase   (   self    :  int		)   ->  str:
      lowerCAmelCase_			:      Tuple			=   WavaVecaFeatureExtractor.from_pretrained(lowerCamelCase		)
      feature_extractor.push_to_hub("""test-feature-extractor"""    ,						use_auth_token=self._token		)

      lowerCAmelCase_			:      Optional[Any]			=   WavaVecaFeatureExtractor.from_pretrained(F'{USER}/test-feature-extractor'		)
      for k, v in feature_extractor.__dict__.items():
        self.assertEqual(lowerCamelCase    ,						getattr(lowerCamelCase    ,						lowerCamelCase		)		)

      # Reset repo
      delete_repo(token=self._token    ,						repo_id="""test-feature-extractor"""		)

      # Push to hub via save_pretrained
      with tempfile.TemporaryDirectory() as tmp_dir:
        feature_extractor.save_pretrained(
            lowerCamelCase    ,						repo_id="""test-feature-extractor"""    ,						push_to_hub=lowerCamelCase    ,						use_auth_token=self._token		)

      lowerCAmelCase_			:      Any			=   WavaVecaFeatureExtractor.from_pretrained(F'{USER}/test-feature-extractor'		)
      for k, v in feature_extractor.__dict__.items():
        self.assertEqual(lowerCamelCase    ,						getattr(lowerCamelCase    ,						lowerCamelCase		)		)

    def __lowercase   (   self    :  Optional[Any]		)   ->  int:
      lowerCAmelCase_			:      Union[str, Any]			=   WavaVecaFeatureExtractor.from_pretrained(lowerCamelCase		)
      feature_extractor.push_to_hub("""valid_org/test-feature-extractor"""    ,						use_auth_token=self._token		)

      lowerCAmelCase_			:      Optional[int]			=   WavaVecaFeatureExtractor.from_pretrained("""valid_org/test-feature-extractor"""		)
      for k, v in feature_extractor.__dict__.items():
        self.assertEqual(lowerCamelCase    ,						getattr(lowerCamelCase    ,						lowerCamelCase		)		)

      # Reset repo
      delete_repo(token=self._token    ,						repo_id="""valid_org/test-feature-extractor"""		)

      # Push to hub via save_pretrained
      with tempfile.TemporaryDirectory() as tmp_dir:
        feature_extractor.save_pretrained(
            lowerCamelCase    ,						repo_id="""valid_org/test-feature-extractor-org"""    ,						push_to_hub=lowerCamelCase    ,						use_auth_token=self._token		)

      lowerCAmelCase_			:      Optional[int]			=   WavaVecaFeatureExtractor.from_pretrained("""valid_org/test-feature-extractor-org"""		)
      for k, v in feature_extractor.__dict__.items():
        self.assertEqual(lowerCamelCase    ,						getattr(lowerCamelCase    ,						lowerCamelCase		)		)





    def __lowercase   (   self    :  Optional[Any]		)   ->  Any:
      CustomFeatureExtractor.register_for_auto_class()
      lowerCAmelCase_			:      Dict			=   CustomFeatureExtractor.from_pretrained(lowerCamelCase		)

      feature_extractor.push_to_hub("""test-dynamic-feature-extractor"""    ,						use_auth_token=self._token		)

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

      lowerCAmelCase_			:      Union[str, Any]			=   AutoFeatureExtractor.from_pretrained(
          F'{USER}/test-dynamic-feature-extractor'    ,						trust_remote_code=lowerCamelCase		)
      # Can't make an isinstance check because the new_feature_extractor is from the CustomFeatureExtractor class of a dynamic module
      self.assertEqual(new_feature_extractor.__class__.__name__    ,						"""CustomFeatureExtractor"""		)



