from collections import OrderedDict
from typing import Mapping

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


a_							=      logging.get_logger(__name__)

a_							=      {
    """bert-base-uncased""": """https://huggingface.co/bert-base-uncased/resolve/main/config.json""",
    """bert-large-uncased""": """https://huggingface.co/bert-large-uncased/resolve/main/config.json""",
    """bert-base-cased""": """https://huggingface.co/bert-base-cased/resolve/main/config.json""",
    """bert-large-cased""": """https://huggingface.co/bert-large-cased/resolve/main/config.json""",
    """bert-base-multilingual-uncased""": """https://huggingface.co/bert-base-multilingual-uncased/resolve/main/config.json""",
    """bert-base-multilingual-cased""": """https://huggingface.co/bert-base-multilingual-cased/resolve/main/config.json""",
    """bert-base-chinese""": """https://huggingface.co/bert-base-chinese/resolve/main/config.json""",
    """bert-base-german-cased""": """https://huggingface.co/bert-base-german-cased/resolve/main/config.json""",
    """bert-large-uncased-whole-word-masking""": (
        """https://huggingface.co/bert-large-uncased-whole-word-masking/resolve/main/config.json"""
    ),
    """bert-large-cased-whole-word-masking""": (
        """https://huggingface.co/bert-large-cased-whole-word-masking/resolve/main/config.json"""
    ),
    """bert-large-uncased-whole-word-masking-finetuned-squad""": (
        """https://huggingface.co/bert-large-uncased-whole-word-masking-finetuned-squad/resolve/main/config.json"""
    ),
    """bert-large-cased-whole-word-masking-finetuned-squad""": (
        """https://huggingface.co/bert-large-cased-whole-word-masking-finetuned-squad/resolve/main/config.json"""
    ),
    """bert-base-cased-finetuned-mrpc""": """https://huggingface.co/bert-base-cased-finetuned-mrpc/resolve/main/config.json""",
    """bert-base-german-dbmdz-cased""": """https://huggingface.co/bert-base-german-dbmdz-cased/resolve/main/config.json""",
    """bert-base-german-dbmdz-uncased""": """https://huggingface.co/bert-base-german-dbmdz-uncased/resolve/main/config.json""",
    """cl-tohoku/bert-base-japanese""": """https://huggingface.co/cl-tohoku/bert-base-japanese/resolve/main/config.json""",
    """cl-tohoku/bert-base-japanese-whole-word-masking""": (
        """https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json"""
    ),
    """cl-tohoku/bert-base-japanese-char""": (
        """https://huggingface.co/cl-tohoku/bert-base-japanese-char/resolve/main/config.json"""
    ),
    """cl-tohoku/bert-base-japanese-char-whole-word-masking""": (
        """https://huggingface.co/cl-tohoku/bert-base-japanese-char-whole-word-masking/resolve/main/config.json"""
    ),
    """TurkuNLP/bert-base-finnish-cased-v1""": (
        """https://huggingface.co/TurkuNLP/bert-base-finnish-cased-v1/resolve/main/config.json"""
    ),
    """TurkuNLP/bert-base-finnish-uncased-v1""": (
        """https://huggingface.co/TurkuNLP/bert-base-finnish-uncased-v1/resolve/main/config.json"""
    ),
    """wietsedv/bert-base-dutch-cased""": """https://huggingface.co/wietsedv/bert-base-dutch-cased/resolve/main/config.json""",
    # See all BERT models at https://huggingface.co/models?filter=bert
}


class 			UpperCAmelCase__    (		__UpperCAmelCase					):



  """simple docstring"""






  lowerCAmelCase__		:	int    		= "bert"






  def __init__(				self:			Optional[Any]				,				__lowerCAmelCase:			Optional[int]=30_522				,				__lowerCAmelCase:			Dict=768				,				__lowerCAmelCase:			str=12				,				__lowerCAmelCase:			int=12				,				__lowerCAmelCase:			Optional[Any]=3_072				,				__lowerCAmelCase:			Any="gelu"				,				__lowerCAmelCase:			Tuple=0.1				,				__lowerCAmelCase:			int=0.1				,				__lowerCAmelCase:			str=512				,				__lowerCAmelCase:			Any=2				,				__lowerCAmelCase:			Tuple=0.02				,				__lowerCAmelCase:			int=1E-12				,				__lowerCAmelCase:			Union[str, Any]=0				,				__lowerCAmelCase:			str="absolute"				,				__lowerCAmelCase:			List[str]=True				,				__lowerCAmelCase:			Optional[int]=None				,				**__lowerCAmelCase:			List[Any]				,				) -> List[str]:




    '''simple docstring'''




    super().__init__(pad_token_id=_lowerCamelCase				,				**_lowerCamelCase   )

    __UpperCAmelCase						    =       vocab_size
    __UpperCAmelCase						    =       hidden_size
    __UpperCAmelCase						    =       num_hidden_layers
    __UpperCAmelCase						    =       num_attention_heads
    __UpperCAmelCase						    =       hidden_act
    __UpperCAmelCase						    =       intermediate_size
    __UpperCAmelCase						    =       hidden_dropout_prob
    __UpperCAmelCase						    =       attention_probs_dropout_prob
    __UpperCAmelCase						    =       max_position_embeddings
    __UpperCAmelCase						    =       type_vocab_size
    __UpperCAmelCase						    =       initializer_range
    __UpperCAmelCase						    =       layer_norm_eps
    __UpperCAmelCase						    =       position_embedding_type
    __UpperCAmelCase						    =       use_cache
    __UpperCAmelCase						    =       classifier_dropout






class 			UpperCAmelCase__    (		__UpperCAmelCase					):



  """simple docstring"""






  @property
  def 	_UpperCAmelCase				(				self:			Optional[Any]   ) -> List[Any]:




    '''simple docstring'''




    if self.task == "multiple-choice":
      __UpperCAmelCase						    =       {0: "batch", 1: "choice", 2: "sequence"}
    else:
      __UpperCAmelCase						    =       {0: "batch", 1: "sequence"}
    return OrderedDict(
        [
            ("input_ids", dynamic_axis),
            ("attention_mask", dynamic_axis),
            ("token_type_ids", dynamic_axis),
        ]   )




from abc import ABC, abstractmethod
from argparse import ArgumentParser


class 			UpperCAmelCase__    (		snake_case					):



  """simple docstring"""






  @staticmethod
  @abstractmethod
  def 	_UpperCAmelCase				(				__lowerCAmelCase:			ArgumentParser   ) -> Tuple:




    '''simple docstring'''




    raise NotImplementedError()






  @abstractmethod
  def 	_UpperCAmelCase				(				self:			List[str]   ) -> List[Any]:




    '''simple docstring'''




    raise NotImplementedError()



