



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        __snake_case		(  UpperCamelCase_		):




       @staticmethod
       def      UpperCAmelCase__    ( A_  : ArgumentParser):
         lowerCAmelCase_    :  int             =				parser.add_parser('''login'''       ,       help='''Log in using the same credentials as on huggingface.co''')
         login_parser.set_defaults(func=lambda A_: LoginCommand(A_))
         lowerCAmelCase_    :  int             =				parser.add_parser('''whoami'''       ,       help='''Find out which huggingface.co account you are logged in as.''')
         whoami_parser.set_defaults(func=lambda A_: WhoamiCommand(A_))
         lowerCAmelCase_    :  List[str]             =				parser.add_parser('''logout'''       ,       help='''Log out''')
         logout_parser.set_defaults(func=lambda A_: LogoutCommand(A_))

         # new system: git-based repo system
         lowerCAmelCase_    :  Union[str, Any]             =				parser.add_parser(
             '''repo'''       ,       help='''Deprecated: use `huggingface-cli` instead. Commands to interact with your huggingface.co repos.'''       ,       )
         lowerCAmelCase_    :  Any             =				repo_parser.add_subparsers(
             help='''Deprecated: use `huggingface-cli` instead. huggingface.co repos related commands''')
         lowerCAmelCase_    :  str             =				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=A_       ,       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=A_       ,       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 A_: RepoCreateCommand(A_))





class        __snake_case		:
       _a       =				'''\u001b[1m'''
       _a       =				'''\u001b[31m'''
       _a       =				'''\u001b[90m'''
       _a       =				'''\u001b[0m'''




       @classmethod
       def      UpperCAmelCase__    ( cls  : Optional[Any]       ,       A_  : Union[str, Any]):
         return F"""{cls._bold}{s}{cls._reset}"""




       @classmethod
       def      UpperCAmelCase__    ( cls  : Union[str, Any]       ,       A_  : Union[str, Any]):
         return F"""{cls._bold}{cls._red}{s}{cls._reset}"""







       @classmethod
       def      UpperCAmelCase__    ( cls  : Tuple       ,       A_  : Optional[Any]):
         return F"""{cls._gray}{s}{cls._reset}"""





def     UpperCamelCase(						__UpperCamelCase							:	List[List[Union[str, int]]]  ,__UpperCamelCase							:	List[str]				):
  lowerCAmelCase_    :  Any             =				[max(len(str(__UpperCamelCase				)				) for x in col				) for col in zip(*__UpperCamelCase  ,__UpperCamelCase				)]
  lowerCAmelCase_    :  str             =				('''{{:{}}} ''' * len(__UpperCamelCase				)).format(*__UpperCamelCase				)
  lowerCAmelCase_    :  Union[str, Any]             =				[]
  lines.append(row_format.format(*__UpperCamelCase				)				)
  lines.append(row_format.format(*['''-''' * w for w in col_widths]				)				)
  for row in rows:
    lines.append(row_format.format(*__UpperCamelCase				)				)
  return "\n".join(__UpperCamelCase				)



class        __snake_case		:




       def __init__( self  : List[Any]       ,       A_  : Union[str, Any]):
         lowerCAmelCase_    :  Optional[Any]             =				args





class        __snake_case		(  UpperCamelCase_		):




       def      UpperCAmelCase__    ( self  : List[Any]):
         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        __snake_case		(  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_    :  Optional[int]             =				HfFolder.get_token()
         if token is None:
           print('''Not logged in''')
           exit()
         try:
           lowerCAmelCase_    :  Optional[int]             =				whoami(A_)
           print(A_)
           if orgs:
             print(ANSI.bold('''orgs: ''')       ,       ''','''.join(A_))
         except HTTPError as e:
           print(A_)
           print(ANSI.red(e.response.text))
           exit(1)





class        __snake_case		(  UpperCamelCase_		):




       def      UpperCAmelCase__    ( self  : Optional[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        __snake_case		(  UpperCamelCase_		):




       def      UpperCAmelCase__    ( self  : List[str]):
         print(
             ANSI.red(
                 '''WARNING! Managing repositories through transformers-cli is deprecated. '''
                 '''Please use `huggingface-cli` instead.'''))
         lowerCAmelCase_    :  Tuple             =				HfFolder.get_token()
         if token is None:
           print('''Not logged in''')
           exit(1)
         try:
           lowerCAmelCase_    :  Tuple             =				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_    :  Dict             =				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_    :  Optional[Any]             =				whoami(A_)
         lowerCAmelCase_    :  Dict             =				self.args.organization if self.args.organization is not None else user
         lowerCAmelCase_    :  int             =				F"""{namespace}/{self.args.name}"""
         print(F"""You are about to create {ANSI.bold(A_)}""")

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










from collections import OrderedDict
from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


A__						:						Dict          =      logging.get_logger(__name__)

A__						:						List[str]          =      {
    '''google/electra-small-generator''': '''https://huggingface.co/google/electra-small-generator/resolve/main/config.json''',
    '''google/electra-base-generator''': '''https://huggingface.co/google/electra-base-generator/resolve/main/config.json''',
    '''google/electra-large-generator''': '''https://huggingface.co/google/electra-large-generator/resolve/main/config.json''',
    '''google/electra-small-discriminator''': (
        '''https://huggingface.co/google/electra-small-discriminator/resolve/main/config.json'''
    ),
    '''google/electra-base-discriminator''': (
        '''https://huggingface.co/google/electra-base-discriminator/resolve/main/config.json'''
    ),
    '''google/electra-large-discriminator''': (
        '''https://huggingface.co/google/electra-large-discriminator/resolve/main/config.json'''
    ),
}



class        __snake_case		(  UpperCamelCase_		):
							_a       =				'''electra'''




							def __init__( self  : Dict       ,       A_  : Dict=3_0_5_2_2       ,       A_  : List[Any]=1_2_8       ,       A_  : Dict=2_5_6       ,       A_  : Any=1_2       ,       A_  : Optional[Any]=4       ,       A_  : Optional[int]=1_0_2_4       ,       A_  : Optional[int]="gelu"       ,       A_  : str=0.1       ,       A_  : Optional[int]=0.1       ,       A_  : str=5_1_2       ,       A_  : Optional[int]=2       ,       A_  : Dict=0.02       ,       A_  : Union[str, Any]=1e-12       ,       A_  : List[Any]="first"       ,       A_  : List[str]=True       ,       A_  : List[str]="gelu"       ,       A_  : Any=0.1       ,       A_  : int=0       ,       A_  : Optional[Any]="absolute"       ,       A_  : Optional[int]=True       ,       A_  : str=None       ,       **A_  : List[Any]       ,       ):
									super().__init__(pad_token_id=A_       ,       **A_)

									lowerCAmelCase_    :  str             =				vocab_size
									lowerCAmelCase_    :  Union[str, Any]             =				embedding_size
									lowerCAmelCase_    :  Optional[int]             =				hidden_size
									lowerCAmelCase_    :  List[Any]             =				num_hidden_layers
									lowerCAmelCase_    :  List[str]             =				num_attention_heads
									lowerCAmelCase_    :  str             =				intermediate_size
									lowerCAmelCase_    :  Union[str, Any]             =				hidden_act
									lowerCAmelCase_    :  Union[str, Any]             =				hidden_dropout_prob
									lowerCAmelCase_    :  Tuple             =				attention_probs_dropout_prob
									lowerCAmelCase_    :  Optional[Any]             =				max_position_embeddings
									lowerCAmelCase_    :  Dict             =				type_vocab_size
									lowerCAmelCase_    :  Any             =				initializer_range
									lowerCAmelCase_    :  int             =				layer_norm_eps

									lowerCAmelCase_    :  Union[str, Any]             =				summary_type
									lowerCAmelCase_    :  str             =				summary_use_proj
									lowerCAmelCase_    :  str             =				summary_activation
									lowerCAmelCase_    :  List[Any]             =				summary_last_dropout
									lowerCAmelCase_    :  Optional[Any]             =				position_embedding_type
									lowerCAmelCase_    :  List[Any]             =				use_cache
									lowerCAmelCase_    :  Any             =				classifier_dropout





class        __snake_case		(  UpperCamelCase_		):




							@property
							def      UpperCAmelCase__    ( self  : Union[str, Any]):
									if self.task == "multiple-choice":
											lowerCAmelCase_    :  Any             =				{0: '''batch''', 1: '''choice''', 2: '''sequence'''}
									else:
											lowerCAmelCase_    :  Union[str, Any]             =				{0: '''batch''', 1: '''sequence'''}
									return OrderedDict(
									    [
									        ('''input_ids''', dynamic_axis),
									        ('''attention_mask''', dynamic_axis),
									        ('''token_type_ids''', dynamic_axis),
									    ])





