





"""simple docstring"""


import argparse
import os
import re

import packaging.version


lowerCamelCase__						= "examples/"
lowerCamelCase__						= {
    "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"),
}
lowerCamelCase__						= {
    "init": "src/transformers/__init__.py",
    "setup": "setup.py",
}
lowerCamelCase__						= "README.md"




def        lowercase__     (       lowercase_		,lowercase_		,lowercase_      )       ->		Dict:




      """simple docstring"""

      with open(lowercase_		,"r"		,encoding="utf-8"		,newline="\n"      ) as f:
            _UpperCamelCase   :						Any    =							f.read()
      _UpperCamelCase,	_UpperCamelCase   :						str    =							REPLACE_PATTERNS[pattern]
      _UpperCamelCase   :						List[str]    =							replace.replace("VERSION"		,lowercase_      )
      _UpperCamelCase   :						Any    =							re_pattern.sub(lowercase_		,lowercase_      )
      with open(lowercase_		,"w"		,encoding="utf-8"		,newline="\n"      ) as f:
            f.write(lowercase_      )




def        lowercase__     (       lowercase_      )       ->		str:




      """simple docstring"""

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




def        lowercase__     (       lowercase_		,lowercase_=False      )       ->		Any:




      """simple docstring"""

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




def        lowercase__     (       )       ->		List[str]:




      """simple docstring"""

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

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

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

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




def        lowercase__     (       )       ->		List[str]:




      """simple docstring"""

      with open(REPLACE_FILES["init"]		,"r"      ) as f:
            _UpperCamelCase   :						Dict    =							f.read()
      _UpperCamelCase   :						List[str]    =							REPLACE_PATTERNS["init"][0].search(lowercase_      ).groups()[0]
      return packaging.version.parse(lowercase_      )




def        lowercase__     (       lowercase_=False      )       ->		Any:




      """simple docstring"""

      _UpperCamelCase   :						Tuple    =							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   :						Union[str, Any]    =							default_version.base_version
      elif patch:
            _UpperCamelCase   :						Union[str, Any]    =							F'''{default_version.major}.{default_version.minor}.{default_version.micro + 1}'''
      else:
            _UpperCamelCase   :						Any    =							F'''{default_version.major}.{default_version.minor + 1}.0'''

      # Now let's ask nicely if that's the right one.
      _UpperCamelCase   :						List[str]    =							input(F'''Which version are you releasing? [{default_version}]'''      )
      if len(lowercase_      ) == 0:
            _UpperCamelCase   :						Any    =							default_version

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




def        lowercase__     (       )       ->		List[Any]:




      """simple docstring"""

      _UpperCamelCase   :						List[Any]    =							get_version()
      _UpperCamelCase   :						List[Any]    =							F'''{current_version.major}.{current_version.minor + 1}.0.dev0'''
      _UpperCamelCase   :						Tuple    =							current_version.base_version

      # Check with the user we got that right.
      _UpperCamelCase   :						Union[str, Any]    =							input(F'''Which version are we developing now? [{dev_version}]'''      )
      if len(lowercase_      ) == 0:
            _UpperCamelCase   :						Optional[int]    =							dev_version

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


if __name__ == "__main__":
  lowerCamelCase__						= 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.")
  lowerCamelCase__						= 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()







"""simple docstring"""


import argparse
import os
import re

import packaging.version


lowerCamelCase__						= "examples/"
lowerCamelCase__						= {
    "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"),
}
lowerCamelCase__						= {
    "init": "src/transformers/__init__.py",
    "setup": "setup.py",
}
lowerCamelCase__						= "README.md"




def        lowercase__     (       lowercase_		,lowercase_		,lowercase_      )       ->		Dict:




      """simple docstring"""

      with open(lowercase_		,"r"		,encoding="utf-8"		,newline="\n"      ) as f:
            _UpperCamelCase   :						Any    =							f.read()
      _UpperCamelCase,	_UpperCamelCase   :						str    =							REPLACE_PATTERNS[pattern]
      _UpperCamelCase   :						List[str]    =							replace.replace("VERSION"		,lowercase_      )
      _UpperCamelCase   :						Any    =							re_pattern.sub(lowercase_		,lowercase_      )
      with open(lowercase_		,"w"		,encoding="utf-8"		,newline="\n"      ) as f:
            f.write(lowercase_      )




def        lowercase__     (       lowercase_      )       ->		str:




      """simple docstring"""

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




def        lowercase__     (       lowercase_		,lowercase_=False      )       ->		Any:




      """simple docstring"""

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




def        lowercase__     (       )       ->		List[str]:




      """simple docstring"""

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

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

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

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




def        lowercase__     (       )       ->		List[str]:




      """simple docstring"""

      with open(REPLACE_FILES["init"]		,"r"      ) as f:
            _UpperCamelCase   :						Dict    =							f.read()
      _UpperCamelCase   :						List[str]    =							REPLACE_PATTERNS["init"][0].search(lowercase_      ).groups()[0]
      return packaging.version.parse(lowercase_      )




def        lowercase__     (       lowercase_=False      )       ->		Any:




      """simple docstring"""

      _UpperCamelCase   :						Tuple    =							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   :						Union[str, Any]    =							default_version.base_version
      elif patch:
            _UpperCamelCase   :						Union[str, Any]    =							F'''{default_version.major}.{default_version.minor}.{default_version.micro + 1}'''
      else:
            _UpperCamelCase   :						Any    =							F'''{default_version.major}.{default_version.minor + 1}.0'''

      # Now let's ask nicely if that's the right one.
      _UpperCamelCase   :						List[str]    =							input(F'''Which version are you releasing? [{default_version}]'''      )
      if len(lowercase_      ) == 0:
            _UpperCamelCase   :						Any    =							default_version

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




def        lowercase__     (       )       ->		List[Any]:




      """simple docstring"""

      _UpperCamelCase   :						List[Any]    =							get_version()
      _UpperCamelCase   :						List[Any]    =							F'''{current_version.major}.{current_version.minor + 1}.0.dev0'''
      _UpperCamelCase   :						Tuple    =							current_version.base_version

      # Check with the user we got that right.
      _UpperCamelCase   :						Union[str, Any]    =							input(F'''Which version are we developing now? [{dev_version}]'''      )
      if len(lowercase_      ) == 0:
            _UpperCamelCase   :						Optional[int]    =							dev_version

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


if __name__ == "__main__":
  lowerCamelCase__						= 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.")
  lowerCamelCase__						= 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()
