

"""simple docstring"""





import functools
import gc
import inspect

import torch

from .imports import is_npu_available, is_xpu_available




def   _A  (  *UpperCamelCase_     :       List[Any])	->						List[str]:
   '''simple docstring'''


   if not isinstance(UpperCamelCase_,			UpperCamelCase_):
      __lowercase								=						list(UpperCamelCase_)
   for i in range(len(UpperCamelCase_)):
      __lowercase								=						None
   gc.collect()
   if is_xpu_available():
      torch.xpu.empty_cache()
   elif is_npu_available():
      torch.npu.empty_cache()
   else:
      torch.cuda.empty_cache()
   return objects




def   _A  (  UpperCamelCase_     :       Exception)	->						bool:
   '''simple docstring'''


   __lowercase								=						[
       "CUDA out of memory.",  # CUDA OOM
       "cuDNN error: CUDNN_STATUS_NOT_SUPPORTED.",  # CUDNN SNAFU
       "DefaultCPUAllocator: can't allocate memory",  # CPU OOM
   ]
   if isinstance(UpperCamelCase_,			UpperCamelCase_) and len(exception.args) == 1:
      return any(err in exception.args[0] for err in _statements)
   return False




def   _A  (  UpperCamelCase_     :       callable = None,			UpperCamelCase_     :       int = 128)	->						int:
   '''simple docstring'''


   if function is None:
      return functools.partial(UpperCamelCase_,			starting_batch_size=UpperCamelCase_)

   __lowercase								=						starting_batch_size

   def decorator(*UpperCamelCase_     :       List[str],			**UpperCamelCase_     :       Optional[Any]):
      nonlocal batch_size
      gc.collect()
      if is_xpu_available():
         torch.xpu.empty_cache()
      elif is_npu_available():
         torch.npu.empty_cache()
      else:
         torch.cuda.empty_cache()
      __lowercase								=						list(inspect.signature(UpperCamelCase_).parameters.keys())
      # Guard against user error
      if len(UpperCamelCase_) < (len(UpperCamelCase_) + 1):
         __lowercase								=						", ".join([F"""{arg}={value}""" for arg, value in zip(params[1:],			args[1:])])
         raise TypeError(
             F"""Batch size was passed into `{function.__name__}` as the first argument when called."""
             F"""Remove this as the decorator already does so: `{function.__name__}({arg_str})`""")
      while True:
         if batch_size == 0:
            raise RuntimeError("No executable batch size found, reached zero.")
         try:
            return function(UpperCamelCase_,			*UpperCamelCase_,			**UpperCamelCase_)
         except Exception as e:
            if should_reduce_batch_size(UpperCamelCase_):
               gc.collect()
               if is_xpu_available():
                  torch.xpu.empty_cache()
               elif is_npu_available():
                  torch.npu.empty_cache()
               else:
                  torch.cuda.empty_cache()
               batch_size //= 2
            else:
               raise

   return decorator











"""simple docstring"""
from collections import OrderedDict
from typing import Mapping

from packaging import version

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


lowerCamelCase_								=		logging.get_logger(__name__)

lowerCamelCase_								=		{
    "microsoft/beit-base-patch16-224-pt22k": (
        "https://huggingface.co/microsoft/beit-base-patch16-224-pt22k/resolve/main/config.json"
    ),
    # See all BEiT models at https://huggingface.co/models?filter=beit
}






class 					_SCREAMING_SNAKE_CASE(   A  ):
       SCREAMING_SNAKE_CASE_   :      str							=  '''beit'''




       def __init__(						self		,SCREAMING_SNAKE_CASE__=81_92		,SCREAMING_SNAKE_CASE__=7_68		,SCREAMING_SNAKE_CASE__=12		,SCREAMING_SNAKE_CASE__=12		,SCREAMING_SNAKE_CASE__=30_72		,SCREAMING_SNAKE_CASE__="gelu"		,SCREAMING_SNAKE_CASE__=0.0		,SCREAMING_SNAKE_CASE__=0.0		,SCREAMING_SNAKE_CASE__=0.0_2		,SCREAMING_SNAKE_CASE__=1E-12		,SCREAMING_SNAKE_CASE__=2_24		,SCREAMING_SNAKE_CASE__=16		,SCREAMING_SNAKE_CASE__=3		,SCREAMING_SNAKE_CASE__=False		,SCREAMING_SNAKE_CASE__=False		,SCREAMING_SNAKE_CASE__=False		,SCREAMING_SNAKE_CASE__=False		,SCREAMING_SNAKE_CASE__=0.1		,SCREAMING_SNAKE_CASE__=0.1		,SCREAMING_SNAKE_CASE__=True		,SCREAMING_SNAKE_CASE__=[3, 5, 7, 11]		,SCREAMING_SNAKE_CASE__=[1, 2, 3, 6]		,SCREAMING_SNAKE_CASE__=True		,SCREAMING_SNAKE_CASE__=0.4		,SCREAMING_SNAKE_CASE__=2_56		,SCREAMING_SNAKE_CASE__=1		,SCREAMING_SNAKE_CASE__=False		,SCREAMING_SNAKE_CASE__=2_55		,**SCREAMING_SNAKE_CASE__		,)			->      Optional[Any]:





             """simple docstring"""






             super().__init__(**SCREAMING_SNAKE_CASE__							)

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

             __SCREAMING_SNAKE_CASE   :int						=  image_size
             __SCREAMING_SNAKE_CASE   :Tuple						=  patch_size
             __SCREAMING_SNAKE_CASE   :Any						=  num_channels
             __SCREAMING_SNAKE_CASE   :Any						=  use_mask_token
             __SCREAMING_SNAKE_CASE   :Union[str, Any]						=  use_absolute_position_embeddings
             __SCREAMING_SNAKE_CASE   :Union[str, Any]						=  use_relative_position_bias
             __SCREAMING_SNAKE_CASE   :Union[str, Any]						=  use_shared_relative_position_bias
             __SCREAMING_SNAKE_CASE   :List[str]						=  layer_scale_init_value
             __SCREAMING_SNAKE_CASE   :Optional[Any]						=  drop_path_rate
             __SCREAMING_SNAKE_CASE   :str						=  use_mean_pooling
             # decode head attributes (semantic segmentation)
             __SCREAMING_SNAKE_CASE   :Dict						=  out_indices
             __SCREAMING_SNAKE_CASE   :Optional[int]						=  pool_scales
             # auxiliary head attributes (semantic segmentation)
             __SCREAMING_SNAKE_CASE   :Optional[int]						=  use_auxiliary_head
             __SCREAMING_SNAKE_CASE   :Union[str, Any]						=  auxiliary_loss_weight
             __SCREAMING_SNAKE_CASE   :Dict						=  auxiliary_channels
             __SCREAMING_SNAKE_CASE   :Optional[int]						=  auxiliary_num_convs
             __SCREAMING_SNAKE_CASE   :List[str]						=  auxiliary_concat_input
             __SCREAMING_SNAKE_CASE   :List[Any]						=  semantic_loss_ignore_index






class 					_SCREAMING_SNAKE_CASE(   A  ):
       SCREAMING_SNAKE_CASE_   :      List[Any]							=  version.parse('''1.11'''  )




       @property
       def     _UpperCamelCase     (						self							)			->      Mapping[str, Mapping[int, str]]:





             """simple docstring"""






             return OrderedDict(
                 [
                     ('''pixel_values''', {0: '''batch''', 1: '''num_channels''', 2: '''height''', 3: '''width'''}),
                 ]							)




       @property
       def     _UpperCamelCase     (						self							)			->      float:





             """simple docstring"""






             return 1E-4