



'''simple docstring'''



import subprocess
from argparse import ArgumentParser
from typing import List, Union

from huggingface_hub.hf_api import HfFolder, create_repo, whoami
from requests.exceptions import HTTPError

from . import BaseTransformersCLICommand






class        UpperCAmelCase__						(		UpperCamelCase__			):



					@staticmethod
					def 							UpperCAmelCase_			(     UpperCamelCase  )  ->      Optional[Any]:
						__lowerCAmelCase       				=	parser.add_parser("login"      ,					help="Log in using the same credentials as on huggingface.co"  )
						login_parser.set_defaults(func=lambda UpperCamelCase  : LoginCommand(UpperCamelCase  )  )
						__lowerCAmelCase       				=	parser.add_parser("whoami"      ,					help="Find out which huggingface.co account you are logged in as."  )
						whoami_parser.set_defaults(func=lambda UpperCamelCase  : WhoamiCommand(UpperCamelCase  )  )
						__lowerCAmelCase       				=	parser.add_parser("logout"      ,					help="Log out"  )
						logout_parser.set_defaults(func=lambda UpperCamelCase  : LogoutCommand(UpperCamelCase  )  )

						# new system: git-based repo system
						__lowerCAmelCase       				=	parser.add_parser(
						    "repo"      ,					help="Deprecated: use `huggingface-cli` instead. Commands to interact with your huggingface.co repos."      ,					)
						__lowerCAmelCase       				=	repo_parser.add_subparsers(
						    help="Deprecated: use `huggingface-cli` instead. huggingface.co repos related commands"  )
						__lowerCAmelCase       				=	repo_subparsers.add_parser(
						    "create"      ,					help="Deprecated: use `huggingface-cli` instead. Create a new repo on huggingface.co"  )
						repo_create_parser.add_argument(
						    "name"      ,					type=UpperCamelCase      ,					help="Name for your model's repo. Will be namespaced under your username to build the model id."      ,					)
						repo_create_parser.add_argument("--organization"      ,					type=UpperCamelCase      ,					help="Optional: organization namespace."  )
						repo_create_parser.add_argument("-y"      ,					"--yes"      ,					action="store_true"      ,					help="Optional: answer Yes to the prompt"  )
						repo_create_parser.set_defaults(func=lambda UpperCamelCase  : RepoCreateCommand(UpperCamelCase  )  )






class        UpperCAmelCase__						:
					a   :  Optional[int]   =				"""\u001b[1m"""
					a   :  List[str]   =				"""\u001b[31m"""
					a   :  Tuple   =				"""\u001b[90m"""
					a   :  Optional[int]   =				"""\u001b[0m"""



					@classmethod
					def 							UpperCAmelCase_			(     cls      ,					UpperCamelCase  )  ->      List[str]:
						return F'''{cls._bold}{s}{cls._reset}'''



					@classmethod
					def 							UpperCAmelCase_			(     cls      ,					UpperCamelCase  )  ->      Any:
						return F'''{cls._bold}{cls._red}{s}{cls._reset}'''



					@classmethod
					def 							UpperCAmelCase_			(     cls      ,					UpperCamelCase  )  ->      List[str]:
						return F'''{cls._gray}{s}{cls._reset}'''



def 	__lowerCAmelCase       (				lowerCamelCase :    List[List[Union[str, int]]]					,		lowerCamelCase :    List[str]       ):






	'''simple docstring'''




	__lowerCAmelCase       				=	[max(len(str(lowerCamelCase       )       ) for x in col       ) for col in zip(*lowerCamelCase					,		lowerCamelCase       )]
	__lowerCAmelCase       				=	("{{:{}}} " * len(lowerCamelCase       )).format(*lowerCamelCase       )
	__lowerCAmelCase       				=	[]
	lines.append(row_format.format(*lowerCamelCase       )       )
	lines.append(row_format.format(*["-" * w for w in col_widths]       )       )
	for row in rows:
		lines.append(row_format.format(*lowerCamelCase       )       )
	return "\n".join(lowerCamelCase       )






class        UpperCAmelCase__						:



					def __init__(     self      ,					UpperCamelCase  )  ->      Optional[int]:
						__lowerCAmelCase       				=	args






class        UpperCAmelCase__						(		UpperCamelCase__			):



					def 							UpperCAmelCase_			(     self  )  ->      Tuple:
						print(
						    ANSI.red(
						        "ERROR! `huggingface-cli login` uses an outdated login mechanism "
						        "that is not compatible with the Hugging Face Hub backend anymore. "
						        "Please use `huggingface-cli login instead."  )  )






class        UpperCAmelCase__						(		UpperCamelCase__			):



					def 							UpperCAmelCase_			(     self  )  ->      Optional[int]:
						print(
						    ANSI.red(
						        "WARNING! `transformers-cli whoami` is deprecated and will be removed in v5. Please use "
						        "`huggingface-cli whoami` instead."  )  )
						__lowerCAmelCase       				=	HfFolder.get_token()
						if token is None:
							print("Not logged in"  )
							exit()
						try:
							__lowerCAmelCase				,							__lowerCAmelCase       				=	whoami(UpperCamelCase  )
							print(UpperCamelCase  )
							if orgs:
								print(ANSI.bold("orgs: "  )      ,					",".join(UpperCamelCase  )  )
						except HTTPError as e:
							print(UpperCamelCase  )
							print(ANSI.red(e.response.text  )  )
							exit(1  )






class        UpperCAmelCase__						(		UpperCamelCase__			):



					def 							UpperCAmelCase_			(     self  )  ->      Any:
						print(
						    ANSI.red(
						        "ERROR! `transformers-cli logout` uses an outdated logout mechanism "
						        "that is not compatible with the Hugging Face Hub backend anymore. "
						        "Please use `huggingface-cli logout instead."  )  )






class        UpperCAmelCase__						(		UpperCamelCase__			):



					def 							UpperCAmelCase_			(     self  )  ->      int:
						print(
						    ANSI.red(
						        "WARNING! Managing repositories through transformers-cli is deprecated. "
						        "Please use `huggingface-cli` instead."  )  )
						__lowerCAmelCase       				=	HfFolder.get_token()
						if token is None:
							print("Not logged in"  )
							exit(1  )
						try:
							__lowerCAmelCase       				=	subprocess.check_output(["git", "--version"]  ).decode("utf-8"  )
							print(ANSI.gray(stdout.strip()  )  )
						except FileNotFoundError:
							print("Looks like you do not have git installed, please install."  )

						try:
							__lowerCAmelCase       				=	subprocess.check_output(["git-lfs", "--version"]  ).decode("utf-8"  )
							print(ANSI.gray(stdout.strip()  )  )
						except FileNotFoundError:
							print(
							    ANSI.red(
							        "Looks like you do not have git-lfs installed, please install."
							        " You can install from https://git-lfs.github.com/."
							        " Then run `git lfs install` (you only have to do this once)."  )  )
						print(""  )

						__lowerCAmelCase				,							__lowerCAmelCase       				=	whoami(UpperCamelCase  )
						__lowerCAmelCase       				=	self.args.organization if self.args.organization is not None else user
						__lowerCAmelCase       				=	F'''{namespace}/{self.args.name}'''
						print(F'''You are about to create {ANSI.bold(UpperCamelCase  )}'''  )

						if not self.args.yes:
							__lowerCAmelCase       				=	input("Proceed? [Y/n] "  ).lower()
							if not (choice == "" or choice == "y" or choice == "yes"):
								print("Abort"  )
								exit()
						try:
							__lowerCAmelCase       				=	create_repo(UpperCamelCase      ,					name=self.args.name      ,					organization=self.args.organization  )
						except HTTPError as e:
							print(UpperCamelCase  )
							print(ANSI.red(e.response.text  )  )
							exit(1  )
						print("\nYour repo now lives at:"  )
						print(F'''  {ANSI.bold(UpperCamelCase  )}'''  )
						print("\nYou can clone it locally with the command below, and commit/push as usual."  )
						print(F'''\n  git clone {url}'''  )
						print(""  )




'''simple docstring'''



lowerCAmelCase						:		Any						      = '''
# Transformers installation
! pip install transformers datasets
# To install from source instead of the last release, comment the command above and uncomment the following one.
# ! pip install git+https://github.com/huggingface/transformers.git
'''

lowerCAmelCase						:		Any						      = [{'''type''': '''code''', '''content''': INSTALL_CONTENT}]
lowerCAmelCase						:		str						      = {
    '''{processor_class}''': '''FakeProcessorClass''',
    '''{model_class}''': '''FakeModelClass''',
    '''{object_class}''': '''FakeObjectClass''',
}