
"""simple docstring"""



from typing import TYPE_CHECKING

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


a					:	Tuple							=		{
    "configuration_mega": ["MEGA_PRETRAINED_CONFIG_ARCHIVE_MAP", "MegaConfig", "MegaOnnxConfig"],
}

try:
      if not is_torch_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      a					:	Optional[Any]							=		[
          "MEGA_PRETRAINED_MODEL_ARCHIVE_LIST",
          "MegaForCausalLM",
          "MegaForMaskedLM",
          "MegaForMultipleChoice",
          "MegaForQuestionAnswering",
          "MegaForSequenceClassification",
          "MegaForTokenClassification",
          "MegaModel",
          "MegaPreTrainedModel",
      ]

if TYPE_CHECKING:
      from .configuration_mega import MEGA_PRETRAINED_CONFIG_ARCHIVE_MAP, MegaConfig, MegaOnnxConfig

      try:
            if not is_torch_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_mega import (
                MEGA_PRETRAINED_MODEL_ARCHIVE_LIST,
                MegaForCausalLM,
                MegaForMaskedLM,
                MegaForMultipleChoice,
                MegaForQuestionAnswering,
                MegaForSequenceClassification,
                MegaForTokenClassification,
                MegaModel,
                MegaPreTrainedModel,
            )

else:
      import sys

      a					:	Optional[Any]							=		_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)

"""simple docstring"""



from typing import Optional

from torch import nn

from .transformer_ad import TransformeraDModel, TransformeraDModelOutput




class 		a_						( nn.Module	):







    def __init__(			self			:       List[str]     ,					__UpperCamelCase			:       int = 16     ,					__UpperCamelCase			:       int = 88     ,					__UpperCamelCase			:       Optional[int] = None     ,					__UpperCamelCase			:       int = 1     ,					__UpperCamelCase			:       float = 0.0     ,					__UpperCamelCase			:       int = 32     ,					__UpperCamelCase			:       Optional[int] = None     ,					__UpperCamelCase			:       bool = False     ,					__UpperCamelCase			:       Optional[int] = None     ,					__UpperCamelCase			:       Optional[int] = None     ,					__UpperCamelCase			:       str = "geglu"     ,					__UpperCamelCase			:       Optional[int] = None     ,					)		->Dict:






        '''simple docstring'''






        super().__init__()
        _UpperCAmelCase          =   nn.ModuleList(
            [
                TransformeraDModel(
                    num_attention_heads=__UpperCamelCase     ,					attention_head_dim=__UpperCamelCase     ,					in_channels=__UpperCamelCase     ,					num_layers=__UpperCamelCase     ,					dropout=__UpperCamelCase     ,					norm_num_groups=__UpperCamelCase     ,					cross_attention_dim=__UpperCamelCase     ,					attention_bias=__UpperCamelCase     ,					sample_size=__UpperCamelCase     ,					num_vector_embeds=__UpperCamelCase     ,					activation_fn=__UpperCamelCase     ,					num_embeds_ada_norm=__UpperCamelCase     ,					)
                for _ in range(2     )
            ]     )

        # Variables that can be set by a pipeline:

        # The ratio of transformer1 to transformer2's output states to be combined during inference
        _UpperCAmelCase          =   0.5

        # The shape of `encoder_hidden_states` is expected to be
        # `(batch_size, condition_lengths[0]+condition_lengths[1], num_features)`
        _UpperCAmelCase          =   [77, 2_57]

        # Which transformer to use to encode which condition.
        # E.g. `(1, 0)` means that we'll use `transformers[1](conditions[0])` and `transformers[0](conditions[1])`
        _UpperCAmelCase          =   [1, 0]







    def      _snake_case					(			self			:       Optional[int]     ,					__UpperCamelCase			:       Any     ,					__UpperCamelCase			:       List[Any]     ,					__UpperCamelCase			:       Union[str, Any]=None     ,					__UpperCamelCase			:       Union[str, Any]=None     ,					__UpperCamelCase			:       Tuple=None     ,					__UpperCamelCase			:       bool = True     ,					)		->Tuple:






        '''simple docstring'''






        _UpperCAmelCase          =   hidden_states

        _UpperCAmelCase          =   []
        _UpperCAmelCase          =   0
        # attention_mask is not used yet
        for i in range(2     ):
            # for each of the two transformers, pass the corresponding condition tokens
            _UpperCAmelCase          =   encoder_hidden_states[:, tokens_start : tokens_start + self.condition_lengths[i]]
            _UpperCAmelCase          =   self.transformer_index_for_condition[i]
            _UpperCAmelCase          =   self.transformers[transformer_index](
                __UpperCamelCase     ,					encoder_hidden_states=__UpperCamelCase     ,					timestep=__UpperCamelCase     ,					cross_attention_kwargs=__UpperCamelCase     ,					return_dict=__UpperCamelCase     ,					)[0]
            encoded_states.append(encoded_state - input_states     )
            tokens_start += self.condition_lengths[i]

        _UpperCAmelCase          =   encoded_states[0] * self.mix_ratio + encoded_states[1] * (1 - self.mix_ratio)
        _UpperCAmelCase          =   output_states + input_states

        if not return_dict:
            return (output_states,)

        return TransformeraDModelOutput(sample=__UpperCamelCase     )