






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


UpperCamelCase			    =     logging.get_logger(__name__)

UpperCamelCase			    =     {
    '''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 				__UpperCAmelCase		(_UpperCAmelCase   ):
			__snake_case    :				Any									=							"longformer"







			def __init__(     self:  str				,     UpperCAmelCase_:  Union[List[int], int] = 512				,     UpperCAmelCase_:  int = 2				,     UpperCAmelCase_:  int = 1				,     UpperCAmelCase_:  int = 0				,     UpperCAmelCase_:  int = 2				,     UpperCAmelCase_:  int = 30_522				,     UpperCAmelCase_:  int = 768				,     UpperCAmelCase_:  int = 12				,     UpperCAmelCase_:  int = 12				,     UpperCAmelCase_:  int = 3_072				,     UpperCAmelCase_:  str = "gelu"				,     UpperCAmelCase_:  float = 0.1				,     UpperCAmelCase_:  float = 0.1				,     UpperCAmelCase_:  int = 512				,     UpperCAmelCase_:  int = 2				,     UpperCAmelCase_:  float = 0.02				,     UpperCAmelCase_:  float = 1E-12				,     UpperCAmelCase_:  bool = False				,     **UpperCAmelCase_:  Dict				,     ):







									'''simple docstring'''




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

									_SCREAMING_SNAKE_CASE     				=  attention_window
									_SCREAMING_SNAKE_CASE     				=  sep_token_id
									_SCREAMING_SNAKE_CASE     				=  bos_token_id
									_SCREAMING_SNAKE_CASE     				=  eos_token_id
									_SCREAMING_SNAKE_CASE     				=  vocab_size
									_SCREAMING_SNAKE_CASE     				=  hidden_size
									_SCREAMING_SNAKE_CASE     				=  num_hidden_layers
									_SCREAMING_SNAKE_CASE     				=  num_attention_heads
									_SCREAMING_SNAKE_CASE     				=  hidden_act
									_SCREAMING_SNAKE_CASE     				=  intermediate_size
									_SCREAMING_SNAKE_CASE     				=  hidden_dropout_prob
									_SCREAMING_SNAKE_CASE     				=  attention_probs_dropout_prob
									_SCREAMING_SNAKE_CASE     				=  max_position_embeddings
									_SCREAMING_SNAKE_CASE     				=  type_vocab_size
									_SCREAMING_SNAKE_CASE     				=  initializer_range
									_SCREAMING_SNAKE_CASE     				=  layer_norm_eps
									_SCREAMING_SNAKE_CASE     				=  onnx_export



class 				__UpperCAmelCase		(_UpperCAmelCase   ):







			def __init__(     self:  Union[str, Any]				,     UpperCAmelCase_:  "PretrainedConfig"				,     UpperCAmelCase_:  str = "default"				,     UpperCAmelCase_:  "List[PatchingSpec]" = None					):







									'''simple docstring'''




									super().__init__(UpperCAmelCase_				,     UpperCAmelCase_				,     UpperCAmelCase_					)
									_SCREAMING_SNAKE_CASE     				=  True







			@property
			def 							UpperCamelCase				(     self:  Any					):







									'''simple docstring'''




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







			@property
			def 							UpperCamelCase				(     self:  Union[str, Any]					):







									'''simple docstring'''




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







			@property
			def 							UpperCamelCase				(     self:  Any					):







									'''simple docstring'''




									return 1E-4







			@property
			def 							UpperCamelCase				(     self:  Optional[int]					):







									'''simple docstring'''




									return max(super().default_onnx_opset				,     14					)







			def 							UpperCamelCase				(     self:  str				,     UpperCAmelCase_:  "PreTrainedTokenizerBase"				,     UpperCAmelCase_:  int = -1				,     UpperCAmelCase_:  int = -1				,     UpperCAmelCase_:  bool = False				,     UpperCAmelCase_:  Optional[TensorType] = None				,     ):







									'''simple docstring'''




									_SCREAMING_SNAKE_CASE     				=  super().generate_dummy_inputs(
									    preprocessor=UpperCAmelCase_				,     batch_size=UpperCAmelCase_				,     seq_length=UpperCAmelCase_				,     is_pair=UpperCAmelCase_				,     framework=UpperCAmelCase_					)
									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
									_SCREAMING_SNAKE_CASE     				=  torch.zeros_like(inputs["""input_ids"""]					)
									# make every second token global
									_SCREAMING_SNAKE_CASE     				=  1

									return inputs









from typing import TYPE_CHECKING

from ....utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


UpperCamelCase			    =     {'''configuration_mmbt''': ['''MMBTConfig''']}

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		UpperCamelCase			    =     ['''MMBTForClassification''', '''MMBTModel''', '''ModalEmbeddings''']


if TYPE_CHECKING:
		from .configuration_mmbt import MMBTConfig

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_mmbt import MMBTForClassification, MMBTModel, ModalEmbeddings

else:
		import sys

		UpperCamelCase			    =     _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)

