



"""simple docstring"""
import json
import os
import shutil
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 AutoConfig, BertConfig, GPTaConfig
from transformers.configuration_utils import PretrainedConfig
from transformers.testing_utils import TOKEN, USER, is_staging_test


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

from test_module.custom_configuration import CustomConfig  # noqa E402


__SCREAMING_SNAKE_CASE  :						Optional[Any]    							=      {
    '''return_dict''': False,
    '''output_hidden_states''': True,
    '''output_attentions''': True,
    '''torchscript''': True,
    '''torch_dtype''': '''float16''',
    '''use_bfloat16''': True,
    '''tf_legacy_loss''': True,
    '''pruned_heads''': {'''a''': 1},
    '''tie_word_embeddings''': False,
    '''is_decoder''': True,
    '''cross_attention_hidden_size''': 1_2_8,
    '''add_cross_attention''': True,
    '''tie_encoder_decoder''': True,
    '''max_length''': 5_0,
    '''min_length''': 3,
    '''do_sample''': True,
    '''early_stopping''': True,
    '''num_beams''': 3,
    '''num_beam_groups''': 3,
    '''diversity_penalty''': 0.5,
    '''temperature''': 2.0,
    '''top_k''': 1_0,
    '''top_p''': 0.7,
    '''typical_p''': 0.2,
    '''repetition_penalty''': 0.8,
    '''length_penalty''': 0.8,
    '''no_repeat_ngram_size''': 5,
    '''encoder_no_repeat_ngram_size''': 5,
    '''bad_words_ids''': [1, 2, 3],
    '''num_return_sequences''': 3,
    '''chunk_size_feed_forward''': 5,
    '''output_scores''': True,
    '''return_dict_in_generate''': True,
    '''forced_bos_token_id''': 2,
    '''forced_eos_token_id''': 3,
    '''remove_invalid_values''': True,
    '''architectures''': ['''BertModel'''],
    '''finetuning_task''': '''translation''',
    '''id2label''': {0: '''label'''},
    '''label2id''': {'''label''': '''0'''},
    '''tokenizer_class''': '''BertTokenizerFast''',
    '''prefix''': '''prefix''',
    '''bos_token_id''': 6,
    '''pad_token_id''': 7,
    '''eos_token_id''': 8,
    '''sep_token_id''': 9,
    '''decoder_start_token_id''': 1_0,
    '''exponential_decay_length_penalty''': (5, 1.01),
    '''suppress_tokens''': [0, 1],
    '''begin_suppress_tokens''': 2,
    '''task_specific_params''': {'''translation''': '''some_params'''},
    '''problem_type''': '''regression''',
}


@is_staging_test
class 							lowerCamelCase_(   unittest.TestCase    ):





					'''simple docstring'''



					@classmethod
					def 			snake_case__      (    cls   ):
									_lowerCamelCase        =				TOKEN
									HfFolder.save_token(lowerCamelCase__   )

					@classmethod
					def 			snake_case__      (    cls   ):
									try:
													delete_repo(token=cls._token				,       repo_id='''test-config'''   )
									except HTTPError:
													pass

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

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

					def 			snake_case__      (    self   ):
									_lowerCamelCase        =				BertConfig(
									    vocab_size=9_9				,       hidden_size=3_2				,       num_hidden_layers=5				,       num_attention_heads=4				,       intermediate_size=3_7   )
									config.push_to_hub('''test-config'''				,       use_auth_token=self._token   )

									_lowerCamelCase        =				BertConfig.from_pretrained(F"""{USER}/test-config"""   )
									for k, v in config.to_dict().items():
													if k != "transformers_version":
																	self.assertEqual(lowerCamelCase__				,       getattr(lowerCamelCase__				,       lowerCamelCase__   )   )

        # Reset repo
									delete_repo(token=self._token				,       repo_id='''test-config'''   )

									# Push to hub via save_pretrained
									with tempfile.TemporaryDirectory() as tmp_dir:
													config.save_pretrained(lowerCamelCase__				,       repo_id='''test-config'''				,       push_to_hub=lowerCamelCase__				,       use_auth_token=self._token   )

									_lowerCamelCase        =				BertConfig.from_pretrained(F"""{USER}/test-config"""   )
									for k, v in config.to_dict().items():
													if k != "transformers_version":
																	self.assertEqual(lowerCamelCase__				,       getattr(lowerCamelCase__				,       lowerCamelCase__   )   )

					def 			snake_case__      (    self   ):
									_lowerCamelCase        =				BertConfig(
									    vocab_size=9_9				,       hidden_size=3_2				,       num_hidden_layers=5				,       num_attention_heads=4				,       intermediate_size=3_7   )
									config.push_to_hub('''valid_org/test-config-org'''				,       use_auth_token=self._token   )

									_lowerCamelCase        =				BertConfig.from_pretrained('''valid_org/test-config-org'''   )
									for k, v in config.to_dict().items():
													if k != "transformers_version":
																	self.assertEqual(lowerCamelCase__				,       getattr(lowerCamelCase__				,       lowerCamelCase__   )   )

        # Reset repo
									delete_repo(token=self._token				,       repo_id='''valid_org/test-config-org'''   )

									# Push to hub via save_pretrained
									with tempfile.TemporaryDirectory() as tmp_dir:
													config.save_pretrained(
													    lowerCamelCase__				,       repo_id='''valid_org/test-config-org'''				,       push_to_hub=lowerCamelCase__				,       use_auth_token=self._token   )

									_lowerCamelCase        =				BertConfig.from_pretrained('''valid_org/test-config-org'''   )
									for k, v in config.to_dict().items():
													if k != "transformers_version":
																	self.assertEqual(lowerCamelCase__				,       getattr(lowerCamelCase__				,       lowerCamelCase__   )   )





					def 			snake_case__      (    self   ):
									CustomConfig.register_for_auto_class()
									_lowerCamelCase        =				CustomConfig(attribute=4_2   )

									config.push_to_hub('''test-dynamic-config'''				,       use_auth_token=self._token   )

									# This has added the proper auto_map field to the config
									self.assertDictEqual(config.auto_map				,       {'''AutoConfig''': '''custom_configuration.CustomConfig'''}   )

									_lowerCamelCase        =				AutoConfig.from_pretrained(F"""{USER}/test-dynamic-config"""				,       trust_remote_code=lowerCamelCase__   )
									# Can't make an isinstance check because the new_config is from the FakeConfig class of a dynamic module
									self.assertEqual(new_config.__class__.__name__				,       '''CustomConfig'''   )
									self.assertEqual(new_config.attribute				,       4_2   )


class 							lowerCamelCase_(   unittest.TestCase    ):





					'''simple docstring'''



					def 			snake_case__      (    self   ):
									_lowerCamelCase        =				GPTaConfig()

									# attempt to modify each of int/float/bool/str config records and verify they were updated
									_lowerCamelCase        =				c.n_embd + 1  # int
									_lowerCamelCase        =				c.resid_pdrop + 1.0  # float
									_lowerCamelCase        =				not c.scale_attn_weights  # bool
									_lowerCamelCase        =				c.summary_type + '''foo'''  # str
									c.update_from_string(
									    F"""n_embd={n_embd},resid_pdrop={resid_pdrop},scale_attn_weights={scale_attn_weights},summary_type={summary_type}"""   )
									self.assertEqual(lowerCamelCase__				,       c.n_embd				,       '''mismatch for key: n_embd'''   )
									self.assertEqual(lowerCamelCase__				,       c.resid_pdrop				,       '''mismatch for key: resid_pdrop'''   )
									self.assertEqual(lowerCamelCase__				,       c.scale_attn_weights				,       '''mismatch for key: scale_attn_weights'''   )
									self.assertEqual(lowerCamelCase__				,       c.summary_type				,       '''mismatch for key: summary_type'''   )

					def 			snake_case__      (    self   ):
									_lowerCamelCase        =				PretrainedConfig()
									_lowerCamelCase        =				[key for key in base_config.__dict__ if key not in config_common_kwargs]
									# If this part of the test fails, you have arguments to addin config_common_kwargs above.
									self.assertListEqual(
									    lowerCamelCase__				,       ['''is_encoder_decoder''', '''_name_or_path''', '''_commit_hash''', '''transformers_version''']   )
									_lowerCamelCase        =				[key for key, value in config_common_kwargs.items() if value == getattr(lowerCamelCase__				,       lowerCamelCase__   )]
									if len(lowerCamelCase__   ) > 0:
													raise ValueError(
													    '''The following keys are set with the default values in'''
													    ''' `test_configuration_common.config_common_kwargs` pick another value for them:'''
													    F""" {", ".join(lowerCamelCase__   )}."""   )

					def 			snake_case__      (    self   ):
									with self.assertRaises(lowerCamelCase__   ):
													# config is in subfolder, the following should not work without specifying the subfolder
													_lowerCamelCase        =				BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert-subfolder'''   )

									_lowerCamelCase        =				BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert-subfolder'''				,       subfolder='''bert'''   )

									self.assertIsNotNone(lowerCamelCase__   )

					def 			snake_case__      (    self   ):
									# A mock response for an HTTP head request to emulate server down
									_lowerCamelCase        =				mock.Mock()
									_lowerCamelCase        =				5_0_0
									_lowerCamelCase        =				{}
									_lowerCamelCase        =				HTTPError
									_lowerCamelCase        =				{}

									# Download this model to make sure it's in the cache.
									_lowerCamelCase        =				BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert'''   )

									# 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        =				BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert'''   )
													# This check we did call the fake head request
													mock_head.assert_called()

					def 			snake_case__      (    self   ):
									# This test is for deprecated behavior and can be removed in v5
									_lowerCamelCase        =				BertConfig.from_pretrained(
									    '''https://huggingface.co/hf-internal-testing/tiny-random-bert/resolve/main/config.json'''   )

					def 			snake_case__      (    self   ):
									_lowerCamelCase        =				AutoConfig.from_pretrained('''bert-base-cased'''   )
									_lowerCamelCase        =				['''config.4.0.0.json''']

									with tempfile.TemporaryDirectory() as tmp_dir:
													configuration.save_pretrained(lowerCamelCase__   )
													_lowerCamelCase        =				2
													json.dump(configuration.to_dict()				,       open(os.path.join(lowerCamelCase__				,       '''config.4.0.0.json'''   )				,       '''w'''   )   )

													# This should pick the new configuration file as the version of Transformers is > 4.0.0
													_lowerCamelCase        =				AutoConfig.from_pretrained(lowerCamelCase__   )
													self.assertEqual(new_configuration.hidden_size				,       2   )

													# Will need to be adjusted if we reach v42 and this test is still here.
													# Should pick the old configuration file as the version of Transformers is < 4.42.0
													_lowerCamelCase        =				['''config.42.0.0.json''']
													_lowerCamelCase        =				7_6_8
													configuration.save_pretrained(lowerCamelCase__   )
													shutil.move(os.path.join(lowerCamelCase__				,       '''config.4.0.0.json'''   )				,       os.path.join(lowerCamelCase__				,       '''config.42.0.0.json'''   )   )
													_lowerCamelCase        =				AutoConfig.from_pretrained(lowerCamelCase__   )
													self.assertEqual(new_configuration.hidden_size				,       7_6_8   )





					def 			snake_case__      (    self   ):
									# This repo has two configuration files, one for v4.0.0 and above with a different hidden size.
									_lowerCamelCase        =				'''hf-internal-testing/test-two-configs'''

									import transformers as new_transformers

									_lowerCamelCase        =				'''v4.0.0'''
									_lowerCamelCase  ,     _lowerCamelCase        =				new_transformers.models.auto.AutoConfig.from_pretrained(
									    lowerCamelCase__				,       return_unused_kwargs=lowerCamelCase__   )
									self.assertEqual(new_configuration.hidden_size				,       2   )
									# This checks `_configuration_file` ia not kept in the kwargs by mistake.
									self.assertDictEqual(lowerCamelCase__				,       {}   )

									# Testing an older version by monkey-patching the version in the module it's used.
									import transformers as old_transformers

									_lowerCamelCase        =				'''v3.0.0'''
									_lowerCamelCase        =				old_transformers.models.auto.AutoConfig.from_pretrained(lowerCamelCase__   )
									self.assertEqual(old_configuration.hidden_size				,       7_6_8   )





"""simple docstring"""
# tests directory-specific settings - this file is run automatically
# by pytest before any tests are run

import sys
import warnings
from os.path import abspath, dirname, join


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
__SCREAMING_SNAKE_CASE  :						Optional[Any]    							=      abspath(join(dirname(dirname(__file__)), '''src'''))
sys.path.insert(1, git_repo_path)

# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action='''ignore''', category=FutureWarning)



def        lowerCAmelCase_(   lowercase_     :							List[Any]							)	->       Optional[Any]:
				from diffusers.utils.testing_utils import pytest_addoption_shared

				pytest_addoption_shared(lowercase_							)




def        lowerCAmelCase_(   lowercase_     :							List[str]							)	->       List[str]:
				from diffusers.utils.testing_utils import pytest_terminal_summary_main

				_lowerCamelCase        =				terminalreporter.config.getoption('''--make-reports'''							)
				if make_reports:
								pytest_terminal_summary_main(lowercase_						,   id=lowercase_							)
