



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 		snake_case						(	SCREAMING_SNAKE_CASE_  ):



   '''simple docstring'''






   snake_case_					: torch.FloatTensor







class 		snake_case						(	SCREAMING_SNAKE_CASE_					,SCREAMING_SNAKE_CASE_  ):



   '''simple docstring'''






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

    """simple docstring"""







    super().__init__()
    _snake_case    :  List[Any]					=					num_attention_heads
    _snake_case    :  Union[str, Any]					=					attention_head_dim
    _snake_case    :  Dict					=					num_attention_heads * attention_head_dim

    _snake_case    :  Tuple					=					in_channels

    _snake_case    :  int					=					torch.nn.GroupNorm(num_groups=lowerCAmelCase				,		num_channels=lowerCAmelCase				,		eps=1E-6				,		affine=lowerCAmelCase)
    _snake_case    :  int					=					nn.Linear(lowerCAmelCase				,		lowerCAmelCase)

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

    _snake_case    :  List[Any]					=					nn.Linear(lowerCAmelCase				,		lowerCAmelCase)


   def      UpperCamelCase_  (					self							:			str				,		lowerCAmelCase							:			Optional[Any]				,		lowerCAmelCase							:			str=None				,		lowerCAmelCase							:			Tuple=None				,		lowerCAmelCase							:			Optional[int]=None				,		lowerCAmelCase							:			Optional[Any]=1				,		lowerCAmelCase							:			Union[str, Any]=None				,		lowerCAmelCase							:			bool = True				,		)				->				Dict:

    """simple docstring"""







    _snake_case    :  List[Any]					=					hidden_states.shape
    _snake_case    :  Tuple					=					batch_frames // num_frames

    _snake_case    :  Union[str, Any]					=					hidden_states

    _snake_case    :  Optional[int]					=					hidden_states[None, :].reshape(lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase)
    _snake_case    :  Union[str, Any]					=					hidden_states.permute(0				,		2				,		1				,		3				,		4)

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

    _snake_case    :  Any					=					self.proj_in(lowerCAmelCase)

    # 2. Blocks
    for block in self.transformer_blocks:
     _snake_case    :  str					=					block(
         lowerCAmelCase				,		encoder_hidden_states=lowerCAmelCase				,		timestep=lowerCAmelCase				,		cross_attention_kwargs=lowerCAmelCase				,		class_labels=lowerCAmelCase				,		)

    # 3. Output
    _snake_case    :  str					=					self.proj_out(lowerCAmelCase)
    _snake_case    :  str					=					(
        hidden_states[None, None, :]
        .reshape(lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase)
        .permute(0				,		3				,		4				,		1				,		2)
        .contiguous()
    )
    _snake_case    :  Tuple					=					hidden_states.reshape(lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase				,		lowerCAmelCase)

    _snake_case    :  List[Any]					=					hidden_states + residual

    if not return_dict:
     return (output,)

    return TransformerTemporalModelOutput(sample=lowerCAmelCase)





import sys

a__    =	(
    """73167176531330624919225119674426574742355349194934"""
    """96983520312774506326239578318016984801869478851843"""
    """85861560789112949495459501737958331952853208805511"""
    """12540698747158523863050715693290963295227443043557"""
    """66896648950445244523161731856403098711121722383113"""
    """62229893423380308135336276614282806444486645238749"""
    """30358907296290491560440772390713810515859307960866"""
    """70172427121883998797908792274921901699720888093776"""
    """65727333001053367881220235421809751254540594752243"""
    """52584907711670556013604839586446706324415722155397"""
    """53697817977846174064955149290862569321978468622482"""
    """83972241375657056057490261407972968652414535100474"""
    """82166370484403199890008895243450658541227588666881"""
    """16427171479924442928230863465674813919123162824586"""
    """17866458359124566529476545682848912883142607690042"""
    """24219022671055626321111109370544217506941658960408"""
    """07198403850962455444362981230987879927244284909188"""
    """84580156166097919133875499200524063689912560717606"""
    """05886116467109405077541002256983155200055935729725"""
    """71636269561882670428252483600823257530420752963450"""
)



def       lowercase       (   SCREAMING_SNAKE_CASE__       :	str = N				)  ->     int:
 _snake_case    :  int					=					-sys.maxsize - 1
 for i in range(len(SCREAMING_SNAKE_CASE__				) - 12				):
  _snake_case    :  Optional[int]					=					1
  for j in range(13				):
   product *= int(n[i + j]				)
  if product > largest_product:
   _snake_case    :  List[str]					=					product
 return largest_product


if __name__ == "__main__":
  print(F'''{solution() = }''')
