
    +h
                         S SK r S SKJr  SSKJr   " S S\R
                  5      r " S S\R                  5      r " S S	\R                  5      r	 " S
 S\R                  5      r
 " S S\R                  5      rg)    N   )	Attentionc                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )WuerstchenLayerNorm   c                 &   > [         TU ]  " U0 UD6  g N)super__init__)selfargskwargs	__class__s      s/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/pipelines/wuerstchen/modeling_wuerstchen_common.pyr   WuerstchenLayerNorm.__init__   s    $)&)    c                 r   > UR                  SSSS5      n[        TU ]	  U5      nUR                  SSSS5      $ )Nr      r      )permuter
   forward)r   xr   s     r   r   WuerstchenLayerNorm.forward   s:    IIaAq!GOAyyAq!$$r    __name__
__module____qualname____firstlineno__r   r   __static_attributes____classcell__r   s   @r   r   r      s    *% %r   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )TimestepBlock   c                 ^   > [         TU ]  5         [        R                  " X!S-  5      U l        g )Nr   )r
   r   nnLinearmapper)r   c
c_timestepr   s      r   r   TimestepBlock.__init__   s"    ii
E2r   c                 p    U R                  U5      S S 2S S 2S S 4   R                  SSS9u  p4USU-   -  U-   $ )Nr   r   dim)r)   chunk)r   r   tabs        r   r   TimestepBlock.forward   sA    {{1~aD$./55aQ5?AE{Qr   )r)   r   r"   s   @r   r$   r$      s    3
 r   r$   c                   6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )ResBlock   c           
        > [         TU ]  5         [        R                  " X-   XUS-  US9U l        [        USSS9U l        [        R                  " [        R                  " XS-  5      [        R                  " 5       [        US-  5      [        R                  " U5      [        R                  " US-  U5      5      U l        g )Nr   )kernel_sizepaddinggroupsFư>elementwise_affineeps   )r
   r   r'   Conv2d	depthwiser   norm
Sequentialr(   GELUGlobalResponseNormDropoutchannelwise)r   r*   c_skipr9   dropoutr   s        r   r   ResBlock.__init__   s    1:qS^bcSclmn'eN	==IIaQ,>q1u,ErzzRYGZ\^\e\efgjkfkmn\o
r   c                     UnUb  [         R                  " X/SS9nU R                  U R                  U5      5      R	                  SSSS5      nU R                  U5      R	                  SSSS5      nX-   $ )Nr   r.   r   r   r   )torchcatrC   rB   r   rH   )r   r   x_skipx_ress       r   r   ResBlock.forward&   sp    		1+1-AIIdnnQ'(00Aq!<Q''1a3yr   )rH   rB   rC   )r   r           r	   r   r"   s   @r   r6   r6      s    
 r   r6   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )rF   0   c                    > [         TU ]  5         [        R                  " [        R
                  " SSSU5      5      U l        [        R                  " [        R
                  " SSSU5      5      U l        g )Nr   )r
   r   r'   	ParameterrM   zerosgammabeta)r   r/   r   s     r   r   GlobalResponseNorm.__init__1   sL    \\%++aAs";<
LLQ1c!:;	r   c                     [         R                  " USSSS9nX"R                  SSS9S-   -  nU R                  X-  -  U R                  -   U-   $ )Nr   )r   r   T)pr/   keepdim)r/   r]   r<   )rM   rC   meanrX   rY   )r   r   agg_normstand_div_norms       r   r   GlobalResponseNorm.forward6   sP    ::a1&$?!]]r4]%H4%OPzzQ/0499<q@@r   )rY   rX   r   r"   s   @r   rF   rF   0   s    <
A Ar   rF   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )	AttnBlock<   c                    > [         TU ]  5         X@l        [        USSS9U l        [        XX-  USS9U l        [        R                  " [        R                  " 5       [        R                  " X!5      5      U l        g )NFr<   r=   T)	query_dimheadsdim_headrJ   bias)r
   r   	self_attnr   rC   r   	attentionr'   rD   SiLUr(   	kv_mapper)r   r*   c_condnheadrk   rJ   r   s         r   r   AttnBlock.__init__=   sZ    "'eN	"QajZahlmrwwy"))F2FGr   c                    U R                  U5      nU R                  U5      nU R                  (       aG  UR                  u  pE  n[        R
                  " UR                  XES5      R                  SS5      U/SS9nXR                  X2S9-   nU$ )Nr^   r   r   r.   )encoder_hidden_states)	rn   rC   rk   shaperM   rN   view	transposerl   )r   r   kvnorm_x
batch_sizechannel_s          r   r   AttnBlock.forwardE   s{    ^^B1>>()%JAFKK
R@JJ1aPRTU[\]Bv@@r   )rl   rn   rC   rk   )TrR   r   r"   s   @r   rd   rd   <   s    H r   rd   )rM   torch.nnr'   models.attention_processorr   	LayerNormr   Moduler$   r6   rF   rd   r   r   r   <module>r      s`      3%",, %BII ryy (	A 	A		 r   