


import warnings

from ...utils import is_sklearn_available, requires_backends


if is_sklearn_available():
    from scipy.stats import pearsonr, spearmanr
    from sklearn.metrics import fa_score, matthews_corrcoef


__snake_case   							=						(
    '''This metric will be removed from the library soon, metrics should be handled with the 🤗 Evaluate '''
    '''library. You can have a look at this example script for pointers: '''
    '''https://github.com/huggingface/transformers/blob/main/examples/pytorch/text-classification/run_glue.py'''
)






def 		_A		(		_lowercase					,  _lowercase )					-> str:


     """simple docstring"""


     warnings.warn(_lowercase					,  _lowercase )
     requires_backends(_lowercase					,  'sklearn' )
     return (preds == labels).mean()






def 		_A		(		_lowercase					,  _lowercase )					-> Optional[int]:


     """simple docstring"""


     warnings.warn(_lowercase					,  _lowercase )
     requires_backends(_lowercase					,  'sklearn' )
     __UpperCamelCase =			simple_accuracy(_lowercase					,  _lowercase )
     __UpperCamelCase =			fa_score(y_true=_lowercase					,  y_pred=_lowercase )
     return {
         "acc": acc,
         "f1": fa,
         "acc_and_f1": (acc + fa) / 2,
     }






def 		_A		(		_lowercase					,  _lowercase )					-> List[str]:


     """simple docstring"""


     warnings.warn(_lowercase					,  _lowercase )
     requires_backends(_lowercase					,  'sklearn' )
     __UpperCamelCase =			pearsonr(_lowercase					,  _lowercase )[0]
     __UpperCamelCase =			spearmanr(_lowercase					,  _lowercase )[0]
     return {
         "pearson": pearson_corr,
         "spearmanr": spearman_corr,
         "corr": (pearson_corr + spearman_corr) / 2,
     }






def 		_A		(		_lowercase					,  _lowercase					,  _lowercase )					-> Dict:


     """simple docstring"""


     warnings.warn(_lowercase					,  _lowercase )
     requires_backends(_lowercase					,  'sklearn' )
     assert len(_lowercase ) == len(_lowercase ), f'''Predictions and labels have mismatched lengths {len(_lowercase )} and {len(_lowercase )}'''
     if task_name == "cola":
          return {"mcc": matthews_corrcoef(_lowercase					,  _lowercase )}
     elif task_name == "sst-2":
          return {"acc": simple_accuracy(_lowercase					,  _lowercase )}
     elif task_name == "mrpc":
          return acc_and_fa(_lowercase					,  _lowercase )
     elif task_name == "sts-b":
          return pearson_and_spearman(_lowercase					,  _lowercase )
     elif task_name == "qqp":
          return acc_and_fa(_lowercase					,  _lowercase )
     elif task_name == "mnli":
          return {"mnli/acc": simple_accuracy(_lowercase					,  _lowercase )}
     elif task_name == "mnli-mm":
          return {"mnli-mm/acc": simple_accuracy(_lowercase					,  _lowercase )}
     elif task_name == "qnli":
          return {"acc": simple_accuracy(_lowercase					,  _lowercase )}
     elif task_name == "rte":
          return {"acc": simple_accuracy(_lowercase					,  _lowercase )}
     elif task_name == "wnli":
          return {"acc": simple_accuracy(_lowercase					,  _lowercase )}
     elif task_name == "hans":
          return {"acc": simple_accuracy(_lowercase					,  _lowercase )}
     else:
          raise KeyError(_lowercase )






def 		_A		(		_lowercase					,  _lowercase					,  _lowercase )					-> Union[str, Any]:


     """simple docstring"""


     warnings.warn(_lowercase					,  _lowercase )
     requires_backends(_lowercase					,  'sklearn' )
     if len(_lowercase ) != len(_lowercase ):
          raise ValueError(f'''Predictions and labels have mismatched lengths {len(_lowercase )} and {len(_lowercase )}''' )
     if task_name == "xnli":
          return {"acc": simple_accuracy(_lowercase					,  _lowercase )}
     else:
          raise KeyError(_lowercase )






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


