


'''simple docstring'''
from dataclasses import dataclass
from typing import Optional

import torch
from torch import nn

from ..configuration_utils import ConfigMixin, register_to_config
from ..utils import BaseOutput
from .attention import BasicTransformerBlock
from .modeling_utils import ModelMixin

@dataclass
class     _lowerCamelCase       (     snake_case_					):




 '''simple docstring'''
 __lowercase					:		torch.FloatTensor


class     _lowerCamelCase       (     snake_case_     ,		snake_case_					):




 '''simple docstring'''


 @register_to_config
 def __init__(   self   ,   __lowercase = 16   ,   __lowercase = 88   ,   __lowercase = None   ,   __lowercase = None   ,   __lowercase = 1   ,   __lowercase = 0.0   ,   __lowercase = 32   ,   __lowercase = None   ,   __lowercase = False   ,   __lowercase = None   ,   __lowercase = "geglu"   ,   __lowercase = True   ,   __lowercase = True   ,   ):

  """simple docstring"""







  super().__init__()
  __A	:		Optional[int]	  =      num_attention_heads
  __A	:		Dict	  =      attention_head_dim
  __A	:		Optional[int]	  =      num_attention_heads * attention_head_dim

  __A	:		Optional[Any]	  =      in_channels

  __A	:		Optional[int]	  =      torch.nn.GroupNorm(num_groups=__lowercase   ,   num_channels=__lowercase   ,   eps=1E-6   ,   affine=__lowercase    )
  __A	:		Optional[Any]	  =      nn.Linear(__lowercase   ,   __lowercase    )

  # 3. Define transformers blocks
  __A	:		List[Any]	  =      nn.ModuleList(
      [
          BasicTransformerBlock(
              __lowercase   ,   __lowercase   ,   __lowercase   ,   dropout=__lowercase   ,   cross_attention_dim=__lowercase   ,   activation_fn=__lowercase   ,   attention_bias=__lowercase   ,   double_self_attention=__lowercase   ,   norm_elementwise_affine=__lowercase   ,   )
          for d in range(__lowercase    )
      ]    )

  __A	:		Union[str, Any]	  =      nn.Linear(__lowercase   ,   __lowercase    )







 def 			snake_case__ (   self   ,   __lowercase   ,   __lowercase=None   ,   __lowercase=None   ,   __lowercase=None   ,   __lowercase=1   ,   __lowercase=None   ,   __lowercase = True   ,   ):

  """simple docstring"""







  __A  ,__A  ,__A  ,__A	:		int	  =      hidden_states.shape
  __A	:		Union[str, Any]	  =      batch_frames // num_frames

  __A	:		Union[str, Any]	  =      hidden_states

  __A	:		List[str]	  =      hidden_states[None, :].reshape(__lowercase   ,   __lowercase   ,   __lowercase   ,   __lowercase   ,   __lowercase    )
  __A	:		List[Any]	  =      hidden_states.permute(0   ,   2   ,   1   ,   3   ,   4    )

  __A	:		Dict	  =      self.norm(__lowercase    )
  __A	:		List[Any]	  =      hidden_states.permute(0   ,   3   ,   4   ,   2   ,   1    ).reshape(batch_size * height * width   ,   __lowercase   ,   __lowercase    )

  __A	:		Optional[Any]	  =      self.proj_in(__lowercase    )

  # 2. Blocks
  for block in self.transformer_blocks:
   __A	:		List[Any]	  =      block(
       __lowercase   ,   encoder_hidden_states=__lowercase   ,   timestep=__lowercase   ,   cross_attention_kwargs=__lowercase   ,   class_labels=__lowercase   ,   )

  # 3. Output
  __A	:		Optional[int]	  =      self.proj_out(__lowercase    )
  __A	:		int	  =      (
      hidden_states[None, None, :]
      .reshape(__lowercase   ,   __lowercase   ,   __lowercase   ,   __lowercase   ,   __lowercase    )
      .permute(0   ,   3   ,   4   ,   1   ,   2    )
      .contiguous()
  )
  __A	:		List[str]	  =      hidden_states.reshape(__lowercase   ,   __lowercase   ,   __lowercase   ,   __lowercase    )

  __A	:		str	  =      hidden_states + residual

  if not return_dict:
   return (output,)

  return TransformerTemporalModelOutput(sample=__lowercase    )










'''simple docstring'''
from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


UpperCAmelCase_			:  Dict										=   {
    'configuration_distilbert': [
        'DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP',
        'DistilBertConfig',
        'DistilBertOnnxConfig',
    ],
    'tokenization_distilbert': ['DistilBertTokenizer'],
}

try:
 if not is_tokenizers_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 UpperCAmelCase_			:  List[Any]										=   ['DistilBertTokenizerFast']

try:
 if not is_torch_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 UpperCAmelCase_			:  int										=   [
     'DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST',
     'DistilBertForMaskedLM',
     'DistilBertForMultipleChoice',
     'DistilBertForQuestionAnswering',
     'DistilBertForSequenceClassification',
     'DistilBertForTokenClassification',
     'DistilBertModel',
     'DistilBertPreTrainedModel',
 ]

try:
 if not is_tf_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 UpperCAmelCase_			:  Optional[int]										=   [
     'TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST',
     'TFDistilBertForMaskedLM',
     'TFDistilBertForMultipleChoice',
     'TFDistilBertForQuestionAnswering',
     'TFDistilBertForSequenceClassification',
     'TFDistilBertForTokenClassification',
     'TFDistilBertMainLayer',
     'TFDistilBertModel',
     'TFDistilBertPreTrainedModel',
 ]

try:
 if not is_flax_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 UpperCAmelCase_			:  List[str]										=   [
     'FlaxDistilBertForMaskedLM',
     'FlaxDistilBertForMultipleChoice',
     'FlaxDistilBertForQuestionAnswering',
     'FlaxDistilBertForSequenceClassification',
     'FlaxDistilBertForTokenClassification',
     'FlaxDistilBertModel',
     'FlaxDistilBertPreTrainedModel',
 ]


if TYPE_CHECKING:
 from .configuration_distilbert import (
     DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
     DistilBertConfig,
     DistilBertOnnxConfig,
 )
 from .tokenization_distilbert import DistilBertTokenizer

 try:
  if not is_tokenizers_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .tokenization_distilbert_fast import DistilBertTokenizerFast

 try:
  if not is_torch_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_distilbert import (
      DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
      DistilBertForMaskedLM,
      DistilBertForMultipleChoice,
      DistilBertForQuestionAnswering,
      DistilBertForSequenceClassification,
      DistilBertForTokenClassification,
      DistilBertModel,
      DistilBertPreTrainedModel,
  )

 try:
  if not is_tf_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_tf_distilbert import (
      TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
      TFDistilBertForMaskedLM,
      TFDistilBertForMultipleChoice,
      TFDistilBertForQuestionAnswering,
      TFDistilBertForSequenceClassification,
      TFDistilBertForTokenClassification,
      TFDistilBertMainLayer,
      TFDistilBertModel,
      TFDistilBertPreTrainedModel,
  )

 try:
  if not is_flax_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_flax_distilbert import (
      FlaxDistilBertForMaskedLM,
      FlaxDistilBertForMultipleChoice,
      FlaxDistilBertForQuestionAnswering,
      FlaxDistilBertForSequenceClassification,
      FlaxDistilBertForTokenClassification,
      FlaxDistilBertModel,
      FlaxDistilBertPreTrainedModel,
  )

else:
 import sys

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






