


'''simple docstring'''



import tempfile
import unittest

from transformers import AutoModelForSeqaSeqLM, AutoTokenizer
from transformers.testing_utils import (
    is_torch_available,
    require_optimum,
    require_torch,
    slow,
)


if is_torch_available():
	import torch






@require_torch
@require_optimum
@slow
class  UpperCamelCase__(     unittest.TestCase ):




				def   a__(	self    :				Dict   )->  List[Any]:

										"""simple docstring"""




										UpperCAmelCase         =			'''hf-internal-testing/tiny-random-t5'''
										UpperCAmelCase         =			AutoTokenizer.from_pretrained(lowerCAmelCase   )
										UpperCAmelCase         =			AutoModelForSeqaSeqLM.from_pretrained(lowerCAmelCase   )

										UpperCAmelCase         =			tokenizer('''This is me'''   ,					return_tensors='''pt'''   )

										UpperCAmelCase         =			model.to_bettertransformer()

										self.assertTrue(any('''BetterTransformer''' in mod.__class__.__name__ for _, mod in model.named_modules()   )   )

										UpperCAmelCase         =			model.generate(**lowerCAmelCase   )

										UpperCAmelCase         =			model.reverse_bettertransformer()

										self.assertFalse(any('''BetterTransformer''' in mod.__class__.__name__ for _, mod in model.named_modules()   )   )

										with tempfile.TemporaryDirectory() as tmpdirname:
																model.save_pretrained(lowerCAmelCase   )

																UpperCAmelCase         =			AutoModelForSeqaSeqLM.from_pretrained(lowerCAmelCase   )

																self.assertFalse(
																    any('''BetterTransformer''' in mod.__class__.__name__ for _, mod in model_reloaded.named_modules()   )   )

																UpperCAmelCase         =			model_reloaded.generate(**lowerCAmelCase   )
																self.assertTrue(torch.allclose(lowerCAmelCase   ,					lowerCAmelCase   )   )





				def   a__(	self    :				Dict   )->  Union[str, Any]:

										"""simple docstring"""




										UpperCAmelCase         =			'''hf-internal-testing/tiny-random-t5'''
										UpperCAmelCase         =			AutoModelForSeqaSeqLM.from_pretrained(lowerCAmelCase   )

										UpperCAmelCase         =			model.to_bettertransformer()

										with tempfile.TemporaryDirectory() as tmpdirname:
																with self.assertRaises(lowerCAmelCase   ):
																						model.save_pretrained(lowerCAmelCase   )

																UpperCAmelCase         =			model.reverse_bettertransformer()
																model.save_pretrained(lowerCAmelCase   )









'''simple docstring'''



import argparse
import os
import re

import packaging.version


_lowercase    :    Optional[int]			     =  """examples/"""
_lowercase    :    str			     =  {
    """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"""),
}
_lowercase    :    Dict			     =  {
    """init""": """src/transformers/__init__.py""",
    """setup""": """setup.py""",
}
_lowercase    :    List[Any]			     =  """README.md"""


def    lowerCamelCase__   ( A     :    int   ,     A     :    str   ,     A     :    Optional[Any]  ):




						'''simple docstring'''






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


def    lowerCamelCase__   ( A     :    Optional[int]  ):




						'''simple docstring'''






						for folder, directories, fnames in os.walk(A  ):
												# 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(A   ,     A  )   ,     A   ,     pattern='''examples'''  )


def    lowerCamelCase__   ( A     :    str   ,     A     :    Dict=False  ):




						'''simple docstring'''






						for pattern, fname in REPLACE_FILES.items():
												update_version_in_file(A   ,     A   ,     A  )
						if not patch:
												update_version_in_examples(A  )


def    lowerCamelCase__   ( ):




						'''simple docstring'''






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

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

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

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


def    lowerCamelCase__   ( ):




						'''simple docstring'''






						with open(REPLACE_FILES['''init''']   ,     '''r'''  ) as f:
												UpperCAmelCase         =			f.read()
						UpperCAmelCase         =			REPLACE_PATTERNS['''init'''][0].search(A  ).groups()[0]
						return packaging.version.parse(A  )


def    lowerCamelCase__   ( A     :    Tuple=False  ):




						'''simple docstring'''






						UpperCAmelCase         =			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:
												UpperCAmelCase         =			default_version.base_version
						elif patch:
												UpperCAmelCase         =			f"""{default_version.major}.{default_version.minor}.{default_version.micro + 1}"""
						else:
												UpperCAmelCase         =			f"""{default_version.major}.{default_version.minor + 1}.0"""

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

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


def    lowerCamelCase__   ( ):




						'''simple docstring'''






						UpperCAmelCase         =			get_version()
						UpperCAmelCase         =			f"""{current_version.major}.{current_version.minor + 1}.0.dev0"""
						UpperCAmelCase         =			current_version.base_version

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

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


if __name__ == "__main__":
	_lowercase    :    Optional[Any]			     =  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.""")
	_lowercase    :    Union[str, Any]			     =  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()





