



import argparse
import os
import re

import packaging.version


SCREAMING_SNAKE_CASE__       =      '''examples/'''
SCREAMING_SNAKE_CASE__       =      {
    '''examples''': (re.compile(r'''^check_min_version\("[^"]+"\)\s*$''', re.MULTILINE), '''check_min_version("VERSION")\n'''),
    '''init''': (re.compile(r'''^__version__\s+=\s+"([^"]+)"\s*$''', re.MULTILINE), '''__version__ = "VERSION"\n'''),
    '''setup''': (re.compile(r'''^(\s*)version\s*=\s*"[^"]+",''', re.MULTILINE), r'''\1version="VERSION",'''),
    '''doc''': (re.compile(r'''^(\s*)release\s*=\s*"[^"]+"$''', re.MULTILINE), '''release = "VERSION"\n'''),
}
SCREAMING_SNAKE_CASE__       =      {
    '''init''': '''src/transformers/__init__.py''',
    '''setup''': '''setup.py''',
}
SCREAMING_SNAKE_CASE__       =      '''README.md'''


def A						(       __UpperCamelCase ,	__UpperCamelCase ,	__UpperCamelCase					)						->      List[Any]:
			with open(__UpperCamelCase ,	'r' ,	encoding='utf-8' ,	newline='\n'					) as f:
						A__       =    f.read()
			A__     , A__       =    REPLACE_PATTERNS[pattern]
			A__       =    replace.replace('VERSION' ,	__UpperCamelCase					)
			A__       =    re_pattern.sub(__UpperCamelCase ,	__UpperCamelCase					)
			with open(__UpperCamelCase ,	'w' ,	encoding='utf-8' ,	newline='\n'					) as f:
						f.write(__UpperCamelCase					)


def A						(       __UpperCamelCase					)						->      Any:
			for folder, directories, fnames in os.walk(__UpperCamelCase					):
						# Removing some of the folders with non-actively maintained examples from the walk
						if "research_projects" in directories:
									directories.remove('research_projects'					)
						if "legacy" in directories:
									directories.remove('legacy'					)
						for fname in fnames:
									if fname.endswith('.py'					):
												update_version_in_file(os.path.join(__UpperCamelCase ,	__UpperCamelCase					) ,	__UpperCamelCase ,	pattern='examples'					)


def A						(       __UpperCamelCase ,	__UpperCamelCase=False					)						->      int:
			for pattern, fname in REPLACE_FILES.items():
						update_version_in_file(__UpperCamelCase ,	__UpperCamelCase ,	__UpperCamelCase					)
			if not patch:
						update_version_in_examples(__UpperCamelCase					)


def A						(       )						->      Dict:
			A__       =    '🤗 Transformers currently provides the following architectures'
			A__       =    '1. Want to contribute a new model?'
			with open(__UpperCamelCase ,	'r' ,	encoding='utf-8' ,	newline='\n'					) as f:
						A__       =    f.readlines()

			# Find the start of the list.
			A__       =    0
			while not lines[start_index].startswith(_start_prompt					):
						start_index += 1
			start_index += 1

			A__       =    start_index
			# Update the lines in the model list.
			while not lines[index].startswith(_end_prompt					):
						if lines[index].startswith('1.'					):
									A__       =    lines[index].replace(
									    'https://huggingface.co/docs/transformers/main/model_doc' ,	'https://huggingface.co/docs/transformers/model_doc' ,	)
						index += 1

			with open(__UpperCamelCase ,	'w' ,	encoding='utf-8' ,	newline='\n'					) as f:
						f.writelines(__UpperCamelCase					)


def A						(       )						->      Optional[Any]:
			with open(REPLACE_FILES['init'] ,	'r'					) as f:
						A__       =    f.read()
			A__       =    REPLACE_PATTERNS['init'][0].search(__UpperCamelCase					).groups()[0]
			return packaging.version.parse(__UpperCamelCase					)


def A						(       __UpperCamelCase=False					)						->      Tuple:
			A__       =    get_version()
			if patch and default_version.is_devrelease:
						raise ValueError('Can\'t create a patch version from the dev branch, checkout a released version!'					)
			if default_version.is_devrelease:
						A__       =    default_version.base_version
			elif patch:
						A__       =    f'''{default_version.major}.{default_version.minor}.{default_version.micro + 1}'''
			else:
						A__       =    f'''{default_version.major}.{default_version.minor + 1}.0'''

			# Now let's ask nicely if that's the right one.
			A__       =    input(f'''Which version are you releasing? [{default_version}]'''					)
			if len(__UpperCamelCase					) == 0:
						A__       =    default_version

			print(f'''Updating version to {version}.'''					)
			global_version_update(__UpperCamelCase ,	patch=__UpperCamelCase					)
			if not patch:
						print('Cleaning main README, don\'t forget to run `make fix-copies`.'					)
						clean_main_ref_in_model_list()


def A						(       )						->      Union[str, Any]:
			A__       =    get_version()
			A__       =    f'''{current_version.major}.{current_version.minor + 1}.0.dev0'''
			A__       =    current_version.base_version

			# Check with the user we got that right.
			A__       =    input(f'''Which version are we developing now? [{dev_version}]'''					)
			if len(__UpperCamelCase					) == 0:
						A__       =    dev_version

			print(f'''Updating version to {version}.'''					)
			global_version_update(__UpperCamelCase					)
			print('Cleaning main README, don\'t forget to run `make fix-copies`.'					)
			clean_main_ref_in_model_list()


if __name__ == "__main__":
							SCREAMING_SNAKE_CASE__       =      argparse.ArgumentParser()
							parser.add_argument('''--post_release''', action='''store_true''', help='''Whether this is pre or post release.''')
							parser.add_argument('''--patch''', action='''store_true''', help='''Whether or not this is a patch release.''')
							SCREAMING_SNAKE_CASE__       =      parser.parse_args()
							if not args.post_release:
														pre_release_work(patch=args.patch)
							elif args.patch:
														print('''Nothing to do after a patch :-)''')
							else:
														post_release_work()









import pytest

import datasets


# Import fixture modules as plugins
SCREAMING_SNAKE_CASE__       =      ['''tests.fixtures.files''', '''tests.fixtures.hub''', '''tests.fixtures.fsspec''']


def A						(       __UpperCamelCase ,	__UpperCamelCase					)						->      Optional[int]:
			# Mark tests as "unit" by default if not marked as "integration" (or already marked as "unit")
			for item in items:
						if any(marker in item.keywords for marker in ['integration', 'unit']					):
									continue
						item.add_marker(pytest.mark.unit					)


def A						(       __UpperCamelCase					)						->      str:
			config.addinivalue_line('markers' ,	'torchaudio_latest: mark test to run with torchaudio>=0.12'					)


@pytest.fixture(autouse=__UpperCamelCase					)
def A						(       __UpperCamelCase ,	__UpperCamelCase					)						->      Union[str, Any]:
			# test_hf_cache_home = tmp_path_factory.mktemp("cache")  # TODO: why a cache dir per test function does not work?
			A__       =    tmp_path_factory.getbasetemp() / 'cache'
			A__       =    test_hf_cache_home / 'datasets'
			A__       =    test_hf_cache_home / 'metrics'
			A__       =    test_hf_cache_home / 'modules'
			monkeypatch.setattr('datasets.config.HF_DATASETS_CACHE' ,	str(__UpperCamelCase					)					)
			monkeypatch.setattr('datasets.config.HF_METRICS_CACHE' ,	str(__UpperCamelCase					)					)
			monkeypatch.setattr('datasets.config.HF_MODULES_CACHE' ,	str(__UpperCamelCase					)					)
			A__       =    test_hf_datasets_cache / 'downloads'
			monkeypatch.setattr('datasets.config.DOWNLOADED_DATASETS_PATH' ,	str(__UpperCamelCase					)					)
			A__       =    test_hf_datasets_cache / 'downloads' / 'extracted'
			monkeypatch.setattr('datasets.config.EXTRACTED_DATASETS_PATH' ,	str(__UpperCamelCase					)					)


@pytest.fixture(autouse=__UpperCamelCase ,	scope='session'					)
def A						(       )						->      Union[str, Any]:
			datasets.disable_progress_bar()


@pytest.fixture(autouse=__UpperCamelCase					)
def A						(       __UpperCamelCase					)						->      int:
			# don't take tests into account when counting downloads
			monkeypatch.setattr('datasets.config.HF_UPDATE_DOWNLOAD_COUNTS' ,	__UpperCamelCase					)






@pytest.fixture
def A						(       __UpperCamelCase					)						->      Any:
			# Required to suppress RemovedIn20Warning when feature(s) are not compatible with SQLAlchemy 2.0
			# To be removed once SQLAlchemy 2.0 supported
			monkeypatch.setattr('sqlalchemy.util.deprecations.SILENCE_UBER_WARNING' ,	__UpperCamelCase					)




