


"""simple docstring"""







from collections import OrderedDict
from typing import TYPE_CHECKING, Any, List, Mapping, Optional, Union

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


if TYPE_CHECKING:
     from ...onnx.config import PatchingSpec
     from ...tokenization_utils_base import PreTrainedTokenizerBase


lowerCAmelCase__      				=   logging.get_logger(__name__)

lowerCAmelCase__      				=   {
    '''allenai/longformer-base-4096''': '''https://huggingface.co/allenai/longformer-base-4096/resolve/main/config.json''',
    '''allenai/longformer-large-4096''': '''https://huggingface.co/allenai/longformer-large-4096/resolve/main/config.json''',
    '''allenai/longformer-large-4096-finetuned-triviaqa''': (
        '''https://huggingface.co/allenai/longformer-large-4096-finetuned-triviaqa/resolve/main/config.json'''
    ),
    '''allenai/longformer-base-4096-extra.pos.embd.only''': (
        '''https://huggingface.co/allenai/longformer-base-4096-extra.pos.embd.only/resolve/main/config.json'''
    ),
    '''allenai/longformer-large-4096-extra.pos.embd.only''': (
        '''https://huggingface.co/allenai/longformer-large-4096-extra.pos.embd.only/resolve/main/config.json'''
    ),
}


class       SCREAMING_SNAKE_CASE__				(		lowercase				):
       """simple docstring"""


       a  :				Optional[int]   ="longformer"

       def __init__(						self		,     snake_case__ = 512		,     snake_case__ = 2		,     snake_case__ = 1		,     snake_case__ = 0		,     snake_case__ = 2		,     snake_case__ = 30_522		,     snake_case__ = 768		,     snake_case__ = 12		,     snake_case__ = 12		,     snake_case__ = 3_072		,     snake_case__ = "gelu"		,     snake_case__ = 0.1		,     snake_case__ = 0.1		,     snake_case__ = 512		,     snake_case__ = 2		,     snake_case__ = 0.02		,     snake_case__ = 1e-12		,     snake_case__ = False		,     **snake_case__		,     ):






         """simple docstring"""





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

         lowerCAmelCase     :     Union[str, Any]								=							attention_window
         lowerCAmelCase     :     List[Any]								=							sep_token_id
         lowerCAmelCase     :     Dict								=							bos_token_id
         lowerCAmelCase     :     int								=							eos_token_id
         lowerCAmelCase     :     Dict								=							vocab_size
         lowerCAmelCase     :     Dict								=							hidden_size
         lowerCAmelCase     :     Optional[Any]								=							num_hidden_layers
         lowerCAmelCase     :     Tuple								=							num_attention_heads
         lowerCAmelCase     :     Union[str, Any]								=							hidden_act
         lowerCAmelCase     :     Optional[int]								=							intermediate_size
         lowerCAmelCase     :     Dict								=							hidden_dropout_prob
         lowerCAmelCase     :     int								=							attention_probs_dropout_prob
         lowerCAmelCase     :     Tuple								=							max_position_embeddings
         lowerCAmelCase     :     Optional[int]								=							type_vocab_size
         lowerCAmelCase     :     Any								=							initializer_range
         lowerCAmelCase     :     Union[str, Any]								=							layer_norm_eps
         lowerCAmelCase     :     List[str]								=							onnx_export


class       SCREAMING_SNAKE_CASE__				(		lowercase				):
       """simple docstring"""


       def __init__(						self		,     snake_case__		,     snake_case__ = "default"		,     snake_case__ = None						):






         """simple docstring"""





         super().__init__(snake_case__		,     snake_case__		,     snake_case__						)
         lowerCAmelCase     :     Any								=							True

       @property
       def        lowercase__							(						self						):






         """simple docstring"""





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

       @property
       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Tuple								=							super().outputs
         if self.task == "default":
           lowerCAmelCase     :     Tuple								=							{0: "batch"}
         return outputs

       @property
       def        lowercase__							(						self						):






         """simple docstring"""





         return 1e-4

       @property
       def        lowercase__							(						self						):






         """simple docstring"""





         return max(super().default_onnx_opset		,     14						)







       def        lowercase__							(						self		,     snake_case__		,     snake_case__ = -1		,     snake_case__ = -1		,     snake_case__ = False		,     snake_case__ = None		,     ):






         """simple docstring"""





         lowerCAmelCase     :     Dict								=							super().generate_dummy_inputs(
             preprocessor=snake_case__		,     batch_size=snake_case__		,     seq_length=snake_case__		,     is_pair=snake_case__		,     framework=snake_case__						)
         import torch

         # for some reason, replacing this code by inputs["global_attention_mask"] = torch.randint(2, inputs["input_ids"].shape, dtype=torch.int64)
         # makes the export fail randomly
         lowerCAmelCase     :     Dict								=							torch.zeros_like(inputs["input_ids"]						)
         # make every second token global
         lowerCAmelCase     :     List[Any]								=							1

         return inputs











'''simple docstring'''

from ..utils import DummyObject, requires_backends






class 						a				(   metaclass=_lowerCamelCase     ):
				snake_case_      =		["transformers", "torch", "note_seq"]


				def __init__(		self    :					Union[str, Any]       ,				*lowercase_    :					Optional[int]       ,				**lowercase_    :					int					):
									requires_backends(self       ,				['''transformers''', '''torch''', '''note_seq''']					)


				@classmethod
				def   A_ (		cls    :					List[Any]       ,				*lowercase_    :					Optional[Any]       ,				**lowercase_    :					str					):
									requires_backends(cls       ,				['''transformers''', '''torch''', '''note_seq''']					)


				@classmethod
				def   A_ (		cls    :					Tuple       ,				*lowercase_    :					Union[str, Any]       ,				**lowercase_    :					List[Any]					):
									requires_backends(cls       ,				['''transformers''', '''torch''', '''note_seq''']					)

