



"""simple docstring"""







from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


UpperCamelCase     =							{
    """configuration_upernet""": ["""UperNetConfig"""],
}

try:
			if not is_torch_available():
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			pass
else:
			UpperCamelCase     =							[
			    """UperNetForSemanticSegmentation""",
			    """UperNetPreTrainedModel""",
			]


if TYPE_CHECKING:
			from .configuration_upernet import UperNetConfig

			try:
						if not is_torch_available():
									raise OptionalDependencyNotAvailable()
			except OptionalDependencyNotAvailable:
						pass
			else:
						from .modeling_upernet import UperNetForSemanticSegmentation, UperNetPreTrainedModel


else:
			import sys

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









"""simple docstring"""







import torch
import torch.nn as nn
from transformers.modeling_utils import ModuleUtilsMixin
from transformers.models.ta.modeling_ta import TaBlock, TaConfig, TaLayerNorm

from ...configuration_utils import ConfigMixin, register_to_config
from ...models import ModelMixin






class       UpperCamelCase__			(   _lowerCAmelCase       ,		_lowerCAmelCase       ,		_lowerCAmelCase      ):

			"""simple docstring"""


			@register_to_config
			def __init__(      self						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__ = False						,	)      ->	Union[str, Any]:
				super().__init__()

				A__											=					nn.Embedding(SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__		)

				A__											=					nn.Embedding(SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__		)
				A__											=					False

				A__											=					nn.Dropout(p=SCREAMING_SNAKE_CASE__		)

				A__											=					TaConfig(
				    vocab_size=SCREAMING_SNAKE_CASE__						,	d_model=SCREAMING_SNAKE_CASE__						,	num_heads=SCREAMING_SNAKE_CASE__						,	d_kv=SCREAMING_SNAKE_CASE__						,	d_ff=SCREAMING_SNAKE_CASE__						,	dropout_rate=SCREAMING_SNAKE_CASE__						,	feed_forward_proj=SCREAMING_SNAKE_CASE__						,	is_decoder=SCREAMING_SNAKE_CASE__						,	is_encoder_decoder=SCREAMING_SNAKE_CASE__						,	)

				A__											=					nn.ModuleList()
				for lyr_num in range(SCREAMING_SNAKE_CASE__		):
					A__											=					TaBlock(SCREAMING_SNAKE_CASE__		)
					self.encoders.append(SCREAMING_SNAKE_CASE__		)

				A__											=					TaLayerNorm(SCREAMING_SNAKE_CASE__		)
				A__											=					nn.Dropout(p=SCREAMING_SNAKE_CASE__		)







			def   snake_case__	(      self						,	SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__		)      ->	Any:
				A__											=					self.token_embedder(SCREAMING_SNAKE_CASE__		)

				A__											=					encoder_input_tokens.shape[1]
				A__											=					torch.arange(SCREAMING_SNAKE_CASE__						,	device=encoder_input_tokens.device		)
				x += self.position_encoding(SCREAMING_SNAKE_CASE__		)

				A__											=					self.dropout_pre(SCREAMING_SNAKE_CASE__		)

				# inverted the attention mask
				A__											=					encoder_input_tokens.size()
				A__											=					self.get_extended_attention_mask(SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__		)

				for lyr in self.encoders:
					A__											=					lyr(SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__		)[0]
				A__											=					self.layer_norm(SCREAMING_SNAKE_CASE__		)

				return self.dropout_post(SCREAMING_SNAKE_CASE__		), encoder_inputs_mask




