






import unittest

from transformers.utils.backbone_utils import (
    BackboneMixin,
    get_aligned_output_features_output_indices,
    verify_out_features_out_indices,
)

class 		_snake_case	(	unittest.TestCase       ):






			def  SCREAMING_SNAKE_CASE__     (							self)   ->							Optional[Any]:
						SCREAMING_SNAKE_CASE							=			['a', 'b', 'c']

						# Defaults to last layer if both are None
						SCREAMING_SNAKE_CASE					,    SCREAMING_SNAKE_CASE							=			get_aligned_output_features_output_indices(a		,       a		,       a)
						self.assertEqual(a		,       ['c'])
						self.assertEqual(a		,       [2])

						# Out indices set to match out features
						SCREAMING_SNAKE_CASE					,    SCREAMING_SNAKE_CASE							=			get_aligned_output_features_output_indices(['a', 'c']		,       a		,       a)
						self.assertEqual(a		,       ['a', 'c'])
						self.assertEqual(a		,       [0, 2])

						# Out features set to match out indices
						SCREAMING_SNAKE_CASE					,    SCREAMING_SNAKE_CASE							=			get_aligned_output_features_output_indices(a		,       [0, 2]		,       a)
						self.assertEqual(a		,       ['a', 'c'])
						self.assertEqual(a		,       [0, 2])

						# Out features selected from negative indices
						SCREAMING_SNAKE_CASE					,    SCREAMING_SNAKE_CASE							=			get_aligned_output_features_output_indices(a		,       [-3, -1]		,       a)
						self.assertEqual(a		,       ['a', 'c'])
						self.assertEqual(a		,       [-3, -1])






			def  SCREAMING_SNAKE_CASE__     (							self)   ->							int:
						# Stage names must be set
						with self.assertRaises(a):
									verify_out_features_out_indices(['a', 'b']		,       (0, 1)		,       a)

						# Out features must be a list
						with self.assertRaises(a):
									verify_out_features_out_indices(('a', 'b')		,       (0, 1)		,       ['a', 'b'])

						# Out features must be a subset of stage names
						with self.assertRaises(a):
									verify_out_features_out_indices(['a', 'b']		,       (0, 1)		,       ['a'])

						# Out indices must be a list or tuple
						with self.assertRaises(a):
									verify_out_features_out_indices(a		,       0		,       ['a', 'b'])

						# Out indices must be a subset of stage names
						with self.assertRaises(a):
									verify_out_features_out_indices(a		,       (0, 1)		,       ['a'])

						# Out features and out indices must be the same length
						with self.assertRaises(a):
									verify_out_features_out_indices(['a', 'b']		,       (0,)		,       ['a', 'b', 'c'])

						# Out features should match out indices
						with self.assertRaises(a):
									verify_out_features_out_indices(['a', 'b']		,       (0, 2)		,       ['a', 'b', 'c'])

						# Out features and out indices should be in order
						with self.assertRaises(a):
									verify_out_features_out_indices(['b', 'a']		,       (0, 1)		,       ['a', 'b'])

						# Check passes with valid inputs
						verify_out_features_out_indices(['a', 'b', 'd']		,       (0, 1, -1)		,       ['a', 'b', 'c', 'd'])







			def  SCREAMING_SNAKE_CASE__     (							self)   ->							List[str]:
						SCREAMING_SNAKE_CASE							=			BackboneMixin()

						SCREAMING_SNAKE_CASE							=			['a', 'b', 'c']
						SCREAMING_SNAKE_CASE							=			['a', 'c']
						SCREAMING_SNAKE_CASE							=			[0, 2]

						# Check that the output features and indices are set correctly
						self.assertEqual(backbone.out_features		,       ['a', 'c'])
						self.assertEqual(backbone.out_indices		,       [0, 2])

						# Check out features and indices are updated correctly
						SCREAMING_SNAKE_CASE							=			['a', 'b']
						self.assertEqual(backbone.out_features		,       ['a', 'b'])
						self.assertEqual(backbone.out_indices		,       [0, 1])

						SCREAMING_SNAKE_CASE							=			[-3, -1]
						self.assertEqual(backbone.out_features		,       ['a', 'c'])
						self.assertEqual(backbone.out_indices		,       [-3, -1])








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


__snake_case   							=						get_tests_dir('''fixtures''')



class 	__lowerCamelCase			(unittest.TestCase						):







       def 		snake_case_	(			self: int					):






            '''simple docstring'''




            __UpperCamelCase =			mock.Mock()
            __UpperCamelCase =			500
            __UpperCamelCase =			{}
            __UpperCamelCase =			HTTPError
            __UpperCamelCase =			{}

            # Download this model to make sure it's in the cache.
            __UpperCamelCase =			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=A_					) as mock_head:
                 __UpperCamelCase =			WavaVecaFeatureExtractor.from_pretrained('hf-internal-testing/tiny-random-wav2vec2'					)
                 # This check we did call the fake head request
                 mock_head.assert_called()







       def 		snake_case_	(			self: Dict					):






            '''simple docstring'''




            __UpperCamelCase =			WavaVecaFeatureExtractor.from_pretrained(
                'https://huggingface.co/hf-internal-testing/tiny-random-wav2vec2/resolve/main/preprocessor_config.json'					)



@is_staging_test
class 	__lowerCamelCase			(unittest.TestCase						):







       @classmethod
       def 		snake_case_	(			cls: Tuple					):






            '''simple docstring'''




            __UpperCamelCase =			TOKEN
            HfFolder.save_token(A_					)







       @classmethod
       def 		snake_case_	(			cls: Tuple					):






            '''simple docstring'''




            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 		snake_case_	(			self: Tuple					):






            '''simple docstring'''




            __UpperCamelCase =			WavaVecaFeatureExtractor.from_pretrained(A_					)
            feature_extractor.push_to_hub('test-feature-extractor',use_auth_token=self._token					)

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

            # 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(
                     A_,repo_id='test-feature-extractor',push_to_hub=A_,use_auth_token=self._token					)

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







       def 		snake_case_	(			self: List[str]					):






            '''simple docstring'''




            __UpperCamelCase =			WavaVecaFeatureExtractor.from_pretrained(A_					)
            feature_extractor.push_to_hub('valid_org/test-feature-extractor',use_auth_token=self._token					)

            __UpperCamelCase =			WavaVecaFeatureExtractor.from_pretrained('valid_org/test-feature-extractor'					)
            for k, v in feature_extractor.__dict__.items():
                 self.assertEqual(A_,getattr(A_,A_					)					)

            # 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(
                     A_,repo_id='valid_org/test-feature-extractor-org',push_to_hub=A_,use_auth_token=self._token					)

            __UpperCamelCase =			WavaVecaFeatureExtractor.from_pretrained('valid_org/test-feature-extractor-org'					)
            for k, v in feature_extractor.__dict__.items():
                 self.assertEqual(A_,getattr(A_,A_					)					)







       def 		snake_case_	(			self: int					):






            '''simple docstring'''




            CustomFeatureExtractor.register_for_auto_class()
            __UpperCamelCase =			CustomFeatureExtractor.from_pretrained(A_					)

            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'},)

            __UpperCamelCase =			AutoFeatureExtractor.from_pretrained(
                F'''{USER}/test-dynamic-feature-extractor''',trust_remote_code=A_					)
            # 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'					)


