


'''simple docstring'''






from ...configuration_utils import PretrainedConfig
from ...utils import logging


__A   :    int											= logging.get_logger(__name__)

__A   :    Optional[int]											= {
    "uclanlp/visualbert-vqa": "https://huggingface.co/uclanlp/visualbert-vqa/resolve/main/config.json",
    "uclanlp/visualbert-vqa-pre": "https://huggingface.co/uclanlp/visualbert-vqa-pre/resolve/main/config.json",
    "uclanlp/visualbert-vqa-coco-pre": (
        "https://huggingface.co/uclanlp/visualbert-vqa-coco-pre/resolve/main/config.json"
    ),
    "uclanlp/visualbert-vcr": "https://huggingface.co/uclanlp/visualbert-vcr/resolve/main/config.json",
    "uclanlp/visualbert-vcr-pre": "https://huggingface.co/uclanlp/visualbert-vcr-pre/resolve/main/config.json",
    "uclanlp/visualbert-vcr-coco-pre": (
        "https://huggingface.co/uclanlp/visualbert-vcr-coco-pre/resolve/main/config.json"
    ),
    "uclanlp/visualbert-nlvr2": "https://huggingface.co/uclanlp/visualbert-nlvr2/resolve/main/config.json",
    "uclanlp/visualbert-nlvr2-pre": "https://huggingface.co/uclanlp/visualbert-nlvr2-pre/resolve/main/config.json",
    "uclanlp/visualbert-nlvr2-coco-pre": (
        "https://huggingface.co/uclanlp/visualbert-nlvr2-coco-pre/resolve/main/config.json"
    )
    # See all VisualBERT models at https://huggingface.co/models?filter=visual_bert
}






class   __snake_case			(  _SCREAMING_SNAKE_CASE):







    """simple docstring"""



    lowercase  					=   'visual_bert'

    def __init__(  self       :    Dict       ,		lowerCamelCase       :    Any=3_05_22       ,		lowerCamelCase       :    Optional[int]=7_68       ,		lowerCamelCase       :    List[str]=5_12       ,		lowerCamelCase       :    List[Any]=12       ,		lowerCamelCase       :    Union[str, Any]=12       ,		lowerCamelCase       :    int=30_72       ,		lowerCamelCase       :    List[Any]="gelu"       ,		lowerCamelCase       :    Union[str, Any]=0.1       ,		lowerCamelCase       :    Any=0.1       ,		lowerCamelCase       :    Dict=5_12       ,		lowerCamelCase       :    List[str]=2       ,		lowerCamelCase       :    List[Any]=0.02       ,		lowerCamelCase       :    List[Any]=1E-12       ,		lowerCamelCase       :    Dict=False       ,		lowerCamelCase       :    Any=True       ,		lowerCamelCase       :    List[str]=1       ,		lowerCamelCase       :    Any=0       ,		lowerCamelCase       :    int=2       ,		**lowerCamelCase       :    Optional[Any]       ,		)  ->    Union[str, Any]:
      super().__init__(pad_token_id=lowerCamelCase       ,		bos_token_id=lowerCamelCase       ,		eos_token_id=lowerCamelCase       ,		**lowerCamelCase						)

      lowerCAmelCase_     : Optional[Any]     =  vocab_size
      lowerCAmelCase_     : Optional[Any]     =  max_position_embeddings
      lowerCAmelCase_     : List[Any]     =  hidden_size
      lowerCAmelCase_     : List[str]     =  visual_embedding_dim
      lowerCAmelCase_     : List[Any]     =  num_hidden_layers
      lowerCAmelCase_     : str     =  num_attention_heads
      lowerCAmelCase_     : Optional[Any]     =  intermediate_size
      lowerCAmelCase_     : Optional[int]     =  hidden_act
      lowerCAmelCase_     : str     =  hidden_dropout_prob
      lowerCAmelCase_     : str     =  attention_probs_dropout_prob
      lowerCAmelCase_     : List[Any]     =  initializer_range
      lowerCAmelCase_     : Optional[int]     =  type_vocab_size
      lowerCAmelCase_     : Optional[int]     =  layer_norm_eps
      lowerCAmelCase_     : Tuple     =  bypass_transformer
      lowerCAmelCase_     : List[Any]     =  special_visual_initialize







'''simple docstring'''






from math import factorial

__A   :    dict[str, int]											= {str(digit): factorial(digit) for digit in range(10)}







def 							UpperCamelCase_     (       A__   :  int   ):
  '''simple docstring'''





  if not isinstance(A__				,       A__   ):
    raise TypeError("""Parameter number must be int"""   )

  if number < 0:
    raise ValueError("""Parameter number must be greater than or equal to 0"""   )

  # Converts number in string to iterate on its digits and adds its factorial.
  return sum(DIGIT_FACTORIAL[digit] for digit in str(A__   )   )







def 							UpperCamelCase_     (       A__   :  int = 60				,       A__   :  int = 1_00_00_00   ):
  '''simple docstring'''





  if not isinstance(A__				,       A__   ) or not isinstance(A__				,       A__   ):
    raise TypeError("""Parameters chain_length and number_limit must be int"""   )

  if chain_length <= 0 or number_limit <= 0:
    raise ValueError(
        """Parameters chain_length and number_limit must be greater than 0"""   )

  # the counter for the chains with the exact desired length
  lowerCAmelCase_     : Optional[int]     =  0
  # the cached sizes of the previous chains
  lowerCAmelCase_     : dict[int, int]     =  {}

  for start_chain_element in range(1				,       A__   ):
    # The temporary set will contain the elements of the chain
    lowerCAmelCase_     : List[str]     =  set()
    lowerCAmelCase_     : Optional[int]     =  0

    # Stop computing the chain when you find a cached size, a repeating item or the
    # length is greater then the desired one.
    lowerCAmelCase_     : int     =  start_chain_element
    while (
        chain_element not in chain_sets_lengths
        and chain_element not in chain_set
        and chain_set_length <= chain_length
    ):
      chain_set.add(A__   )
      chain_set_length += 1
      lowerCAmelCase_     : Union[str, Any]     =  digit_factorial_sum(A__   )

    if chain_element in chain_sets_lengths:
      chain_set_length += chain_sets_lengths[chain_element]

    lowerCAmelCase_     : int     =  chain_set_length

    # If chain contains the exact amount of elements increase the counter
    if chain_set_length == chain_length:
      chains_counter += 1

  return chains_counter


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  print(F'''{solution()}''')



