





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					:				int				=			get_tests_dir("""fixtures""")



class 					__snake_case	(  unittest.TestCase    ):


    '''simple docstring'''







    def  lowercase_					(       self     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			mock.Mock()
        SCREAMING_SNAKE_CASE__											=			5_00
        SCREAMING_SNAKE_CASE__											=			{}
        SCREAMING_SNAKE_CASE__											=			HTTPError
        SCREAMING_SNAKE_CASE__											=			{}

        # Download this model to make sure it's in the cache.
        SCREAMING_SNAKE_CASE__											=			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:
            SCREAMING_SNAKE_CASE__											=			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     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			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     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			TOKEN
        HfFolder.save_token(A_     )



    @classmethod
    def  lowercase_					(       cls     ):





        '''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  lowercase_					(       self     ):





        '''simple docstring'''

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

        SCREAMING_SNAKE_CASE__											=			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     )

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



    def  lowercase_					(       self     ):





        '''simple docstring'''

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

        SCREAMING_SNAKE_CASE__											=			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     )

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




    def  lowercase_					(       self     ):





        '''simple docstring'''

        CustomFeatureExtractor.register_for_auto_class()
        SCREAMING_SNAKE_CASE__											=			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'''}   ,				)

        SCREAMING_SNAKE_CASE__											=			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'''     )





from manim import *



class      _UpperCAmelCase      (							A__  ):




     def 		snake_case_		(					self):
         A__					=       Rectangle(height=0.5			,    width=0.5)
         A__					=       Rectangle(height=0.2_5			,    width=0.2_5)
         A__					=       Rectangle(height=0.4_6			,    width=0.4_6).set_stroke(width=0)

         A__					=       [mem.copy() for i in range(6)]
         A__					=       [mem.copy() for i in range(6)]
         A__					=       VGroup(*a__).arrange(a__			,    buff=0)
         A__					=       VGroup(*a__).arrange(a__			,    buff=0)
         A__					=       VGroup(a__			,    a__).arrange(a__			,    buff=0)
         A__					=       Text('''CPU'''			,    font_size=2_4)
         A__					=       Group(a__			,    a__).arrange(a__			,    buff=0.5			,    aligned_edge=a__)
         cpu.move_to([-2.5, -0.5, 0])
         self.add(a__)

         A__					=       [mem.copy() for i in range(4)]
         A__					=       VGroup(*a__).arrange(a__			,    buff=0)
         A__					=       Text('''GPU'''			,    font_size=2_4)
         A__					=       Group(a__			,    a__).arrange(a__			,    buff=0.5			,    aligned_edge=a__)
         gpu.move_to([-1, -1, 0])
         self.add(a__)

         A__					=       [mem.copy() for i in range(6)]
         A__					=       VGroup(*a__).arrange(a__			,    buff=0)

         A__					=       Text('''Model'''			,    font_size=2_4)
         A__					=       Group(a__			,    a__).arrange(a__			,    buff=0.5			,    aligned_edge=a__)
         model.move_to([3, -1.0, 0])
         self.add(a__)

         A__					=       []
         A__					=       []
         A__					=       []

         for i, rect in enumerate(a__):
             rect.set_stroke(a__)

             A__					=       Rectangle(height=0.4_6 / 4			,    width=0.4_6 / 3).set_stroke(width=0.0).set_fill(a__			,    opacity=0.7)

             if i == 0:
                 cpu_target.next_to(cpu_left_col_base[0].get_corner(DOWN + LEFT)			,    buff=0.0_2			,    direction=a__)
                 cpu_target.set_x(cpu_target.get_x() + 0.1)
             elif i == 3:
                 cpu_target.next_to(model_cpu_arr[0]			,    direction=a__			,    buff=0.0)
             else:
                 cpu_target.next_to(model_cpu_arr[i - 1]			,    direction=a__			,    buff=0.0)
             self.add(a__)
             model_cpu_arr.append(a__)

         self.add(*a__			,    *a__			,    *a__)

         A__					=       [mem.copy() for i in range(6)]
         A__					=       VGroup(*a__).arrange(a__			,    buff=0)

         A__					=       Text('''Loaded Checkpoint'''			,    font_size=2_4)
         A__					=       Group(a__			,    a__).arrange(a__			,    buff=0.5			,    aligned_edge=a__)
         checkpoint.move_to([3, 0.5, 0])

         self.add(a__)

         A__					=       []
         A__					=       []

         for i, rect in enumerate(a__):
             A__					=       fill.copy().set_fill(a__			,    opacity=0.7)
             target.move_to(a__)
             ckpt_arr.append(a__)

             A__					=       target.copy()
             if i < 5:
                 cpu_target.move_to(cpu_left_col_base[i + 1])
             else:
                 cpu_target.move_to(cpu_right_col_base[i - 5])
             ckpt_cpu_arr.append(a__)
         self.add(*a__			,    *a__)

         A__					=       Square(side_length=2.2)
         key.move_to([-5, 2, 0])

         A__					=       MarkupText(
             F"<b>Key:</b>\n\n<span fgcolor='{YELLOW}'>●</span> Empty Model"			,    font_size=1_8			,    )

         key_text.move_to([-5, 2.4, 0])

         self.add(a__			,    a__)

         A__					=       MarkupText(
             F"<span fgcolor='{BLUE}'>●</span> Checkpoint"			,    font_size=1_8			,    )

         blue_text.next_to(a__			,    DOWN * 2.4			,    aligned_edge=key_text.get_left())
         self.add(a__)

         A__					=       MarkupText(
             F"Based on the passed in configuration, weights are stored in\na variety of np.memmaps on disk or to a particular device."			,    font_size=2_4			,    )
         step_a.move_to([2, 2, 0])

         A__					=       [meta_mem.copy() for i in range(6)]
         A__					=       [meta_mem.copy() for i in range(6)]
         A__					=       VGroup(*a__).arrange(a__			,    buff=0)
         A__					=       VGroup(*a__).arrange(a__			,    buff=0)
         A__					=       VGroup(a__			,    a__).arrange(a__			,    buff=0)
         A__					=       Text('''Disk'''			,    font_size=2_4)
         A__					=       Group(a__			,    a__).arrange(a__			,    buff=0.5			,    aligned_edge=a__)
         disk.move_to([-4.0, -1.2_5, 0])
         self.play(Write(a__			,    run_time=3)			,    Write(a__			,    run_time=1)			,    Create(a__			,    run_time=1))

         A__					=       []
         for i, rect in enumerate(a__):
             A__					=       rect.copy()
             target.generate_target()
             target.target.move_to(disk_left_col_base[i]).scale(0.5)
             animations.append(MoveToTarget(a__			,    run_time=1.5))
         self.play(*a__)

         self.play(FadeOut(a__))

         A__					=       MarkupText(F"Then, the checkpoint is removed from memory\nthrough garbage collection."			,    font_size=2_4)
         step_a.move_to([2, 2, 0])

         self.play(Write(a__			,    run_time=3))

         self.play(
             FadeOut(a__			,    a__			,    *a__			,    *a__)			,    )

         self.wait()
