
    bi
                         d dl Z d dlmZ ddlmZ  G d dej
                        Z G d dej                        Z G d d	ej                        Z	 G d
 dej                        Z
 G d dej                        Zy)    N   )	Attentionc                   (     e Zd Z fdZ fdZ xZS )WuerstchenLayerNormc                 $    t        |   |i | y N)super__init__)selfargskwargs	__class__s      t/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/diffusers/pipelines/wuerstchen/modeling_wuerstchen_common.pyr
   zWuerstchenLayerNorm.__init__   s    $)&)    c                 r    |j                  dddd      }t        | 	  |      }|j                  dddd      S )Nr      r      )permuter	   forward)r   xr   s     r   r   zWuerstchenLayerNorm.forward   s:    IIaAq!GOAyyAq!$$r   __name__
__module____qualname__r
   r   __classcell__r   s   @r   r   r      s    *% %r   r   c                   $     e Zd Z fdZd Z xZS )TimestepBlockc                 ^    t         |           t        j                  ||dz        | _        y )Nr   )r	   r
   nnLinearmapper)r   c
c_timestepr   s      r   r
   zTimestepBlock.__init__   s$    ii
AE2r   c                 x    | j                  |      d d d d d d f   j                  dd      \  }}|d|z   z  |z   S )Nr   r   dim)r"   chunk)r   r   tabs        r   r   zTimestepBlock.forward   sC    {{1~aD$./55aQ5?1AE{Qr   r   r   s   @r   r   r      s    3
r   r   c                   (     e Zd Zd fd	ZddZ xZS )ResBlockc           
         t         |           t        j                  ||z   |||dz  |      | _        t        |dd      | _        t        j                  t        j                  ||dz        t        j                         t        |dz        t        j                  |      t        j                  |dz  |            | _        y )Nr   )kernel_sizepaddinggroupsFư>elementwise_affineeps   )r	   r
   r    Conv2d	depthwiser   norm
Sequentialr!   GELUGlobalResponseNormDropoutchannelwise)r   r#   c_skipr/   dropoutr   s        r   r
   zResBlock.__init__   s    1v:qkS^bcSclmn'eN	==IIaQ,>q1u,ErzzRYGZ\^\e\efgjkfkmn\o
r   c                     |}|t        j                  ||gd      }| j                  | j                  |            j	                  dddd      }| j                  |      j	                  dddd      }||z   S )Nr   r&   r   r   r   )torchcatr9   r8   r   r>   )r   r   x_skipx_ress       r   r   zResBlock.forward&   st    		1f+1-AIIdnnQ'(00Aq!<Q''1a35yr   )r   r           r   r   r   s   @r   r-   r-      s    
r   r-   c                   $     e Zd Z fdZd Z xZS )r<   c                     t         |           t        j                  t	        j
                  ddd|            | _        t        j                  t	        j
                  ddd|            | _        y )Nr   )r	   r
   r    	ParameterrB   zerosgammabeta)r   r'   r   s     r   r
   zGlobalResponseNorm.__init__1   sL    \\%++aAs";<
LLQ1c!:;	r   c                     t        j                  |ddd      }||j                  dd      dz   z  }| j                  ||z  z  | j                  z   |z   S )Nr   )r   r   T)pr'   keepdim)r'   rO   r2   )rB   r9   meanrK   rL   )r   r   agg_normstand_div_norms       r   r   zGlobalResponseNorm.forward6   sT    ::a1&$?!X]]r4]%H4%OPzzQ/0499<q@@r   r   r   s   @r   r<   r<   0   s    <
Ar   r<   c                   &     e Zd Zd fd	Zd Z xZS )	AttnBlockc                    t         |           || _        t        |dd      | _        t        ||||z  |d      | _        t        j                  t        j                         t        j                  ||            | _        y )NFr2   r3   T)	query_dimheadsdim_headr@   bias)r	   r
   	self_attnr   r9   r   	attentionr    r:   SiLUr!   	kv_mapper)r   r#   c_condnheadr[   r@   r   s         r   r
   zAttnBlock.__init__=   sb    "'eN	"Qea5jZahlmrwwy"))FA2FGr   c                 $   | j                  |      }| j                  |      }| j                  rK|j                  \  }}}}t	        j
                  |j                  ||d      j                  dd      |gd      }|| j                  ||      z   }|S )NrP   r   r   r&   )encoder_hidden_states)	r^   r9   r[   shaperB   rC   view	transposer\   )r   r   kvnorm_x
batch_sizechannel_s          r   r   zAttnBlock.forwardE   s    ^^B1>>()%JAFKK
GR@JJ1aPRTU[\]BvR@@r   )TrF   r   r   s   @r   rU   rU   <   s    Hr   rU   )rB   torch.nnr    models.attention_processorr   	LayerNormr   Moduler   r-   r<   rU    r   r   <module>rp      s`      3%",, %BII ryy (	A 	A		 r   