
    +h(                         S SK r S SKrS SKrS SKJr  SSKJrJr  SSK	J
r
  SSKJrJrJrJr   " S S\
\5      r " S	 S
\R"                  5      rg)    N   )ConfigMixinregister_to_config)
ModelMixin   )	AttnBlockGlobalResponseNormTimestepBlockWuerstchenLayerNormc                      ^  \ rS rSr\SSSSS/ SQ/ SQ/ SQ/ S	Q/ S
QSSSS4U 4S jj5       rS rSS jrS rSS jr	SS jr
SS jrSrU =r$ )WuerstchenDiffNeXt      @      i   )i@  i     r   )
      r   )r   r      r   )CTCTAr   r   )FTTT   r   g?c                 2  >^^^ [         TU ]  5         TU l        TU l        [	        U[
        5      (       d  U/[        U5      -  n[        R                  " UT5      U l	        [        R                  " U
[        [        U
5      5      -    Vs/ s H"  nU(       a  [        R                  " UTSS9OS PM$     sn5      U l        [        R                  " TSSS9U l        [        R                   " [        R"                  " U5      [        R                  " XS-  -  US   SS9[%        US   SSS95      U l        SUUU4S jjn[        R                  " 5       U l        [+        [        U5      5       H  n[        R                  " 5       nUS:  aS  UR-                  [        R                   " [%        UUS-
     SSS9[        R                  " UUS-
     UU   SSS	95      5        [+        UU   5       H?  nU	U    H3  nU
U   (       a  TOSnUR-                  U" UUU   UU   UUU   S
95        M5     MA     U R(                  R-                  U5        M     [        R                  " 5       U l        [        [+        [        U5      5      5       GH  n[        R                  " 5       n[+        UU   5       Hw  n[1        U	U   5       Hb  u  nnU[        U5      S-
  :  a  UUs=:X  a  S:X  a  O  OUU   OSnUU
U   (       a  TOS-  nUR-                  U" UUU   UU   UUU   S
95        Md     My     US:  aP  UR-                  [        R                   " [%        UU   SSS9[        R2                  " UU   UUS-
     SSS	95      5        U R.                  R-                  U5        GM     [        R                   " [%        US   SSS9[        R                  " US   SU-  US-  -  SS9[        R4                  " U5      5      U l        U R9                  U R:                  5        g s  snf )Nr   )kernel_sizeFư>elementwise_affineepsr   r   c                    > U S:X  a  [        XTUS9$ U S:X  a  [        UTUSUS9$ U S:X  a  [        UT5      $ [        SU  S35      e)	NC)r   dropoutAT)	self_attnr"   TzBlock type z not supported)ResBlockStageBr   r
   
ValueError)
block_typec_hiddennheadc_skipr"   c_condc_rr   s        u/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/pipelines/wuerstchen/modeling_wuerstchen_diffnext.py	get_block.WuerstchenDiffNeXt.__init__.<locals>.get_blockD   s`    S %hKY`aas" 65DRYZZs"$Xs33 ;zl.!IJJ    )r   stride)r+   r"   )r   r   )super__init__r-   r,   
isinstancelistlennnLinearclip_mapper
ModuleListreversedConv2deffnet_mappers	LayerNormseq_norm
SequentialPixelUnshuffler   	embeddingdown_blocksrangeappend	up_blocks	enumerateConvTranspose2dPixelShuffleclfapply_init_weights)selfc_inc_outr-   
patch_sizer,   r)   r*   blockslevel_configinject_effneteffnet_embd	clip_embdr   r"   injectr/   i
down_block_r(   r+   up_blockjk	__class__s      ` `       `           r.   r4   WuerstchenDiffNeXt.__init__   s   $ 	'4((i#h-/G 99Y7 mm ,d8M3J.KKKF BH		+v1=TQK
 V4Pj)IId!m,hqkqI4P
	K 	K ==?s8}%AJ1u!!MM+HQUOPU[_`		(1q5/8A;AVWX 6!9%".q/J'4Q'7VQF%%i
HQKqZ`jqrsjt&uv #2 & ##J/ &  %H./A}}H6!9%%.|A%?MAz,-H0A,Aa1kPQkXa[WXFa(8fa?FOOIj(1+uQxX^hopqhr$st &@ &
 1uMM+HQKEW[\**8A;QUV_`a NN!!(+ 0" ==4PIIhqk1u9
A#>ANOOJ'
 	

4%%&Gs   
)Pc           
         [        U[        R                  [        R                  45      (       a`  [        R                  R                  UR                  5        UR                  b*  [        R                  R                  UR                  S5        U R                   H0  nUc  M  [        R                  R                  UR                  SS9  M2     [        R                  R                  U R                  R                  SS9  [        R                  R                  U R                  S   R                  S5        [        R                  R                  U R                  S   R                  S5        U R                  U R                  -    H  nU H  n[        U[         5      (       ab  UR"                  S   R                  =R$                  [&        R(                  " S[+        U R,                  R.                  5      -  5      -  sl        Mz  [        U[0        5      (       d  M  [        R                  R                  UR2                  R                  S5        M     M     g )Nr   g{Gz?)stdr   r   )r5   r8   r=   r9   initxavier_uniform_weightbias	constant_r>   normal_r:   rC   rK   rD   rG   r&   channelwisedatanpsqrtsumconfigrR   r
   mapper)rN   mrn   level_blockblocks        r.   rM    WuerstchenDiffNeXt._init_weights|   s   a"))RYY/00GG##AHH-vv!!!!&&!,))F!48 * 	((//T:
q 1 8 8$?
$((1+,,a0  ++dnn<K$e^44%%b)0055SI[I[E\A\9]]5}55GG%%ell&9&91=	 % =r1   c                    X-  nU R                   S-  n[        R                  " U5      US-
  -  n[        R                  " X1R
                  S9R                  5       R                  U* 5      R                  5       nUS S 2S 4   US S S 24   -  n[        R                  " UR                  5       UR                  5       /SS9nU R                   S-  S:X  a  [        R                  R                  USSS9nUR                  UR                   S9$ )	Nr   r   )devicedim)r   r   constant)mode)dtype)r-   mathlogtorcharangert   floatmulexpcatsincosr8   
functionalpadtory   )rN   rmax_positionshalf_dimembs        r.   gen_r_embedding"WuerstchenDiffNeXt.gen_r_embedding   s    88q=hh}%A6ll8HH5;;=AA3$GKKM4j3tQw<'iiCGGI.A688a<1--##Cj#ACvvAGGv$$r1   c                 J    U R                  U5      nU R                  U5      nU$ N)r:   r@   )rN   clips     r.   gen_c_embeddings#WuerstchenDiffNeXt.gen_c_embeddings   s%    %}}T"r1   c                 p   / n[        U R                  5       GH  u  pgS nU H  n	[        U	[        5      (       a  Ucz  U R                  U   bj  UR
                  n
U R                  U   " [        R                  R                  UR                  5       UR                  SS  SSSS9R                  U
5      5      nU R                  U   b  UOS nU	" X5      nM  [        U	[        5      (       a
  U	" X5      nM  [        U	[        5      (       a
  U	" X5      nM  U	" U5      nM     UR                  SU5        GM     U$ )NbicubicTsizerx   	antialiasalign_cornersr   )rH   rD   r5   r&   r>   ry   r8   r   interpolater~   shaper   r   r
   insert)rN   xr_embedeffnetr   level_outputsrX   rY   effnet_crq   ry   skips               r.   _down_encodeWuerstchenDiffNeXt._down_encode   s   &t'7'78MAH#e^44'D,?,?,B,N &#'#6#6q#9MM55 &QWWRS\	]aqu 6  bi$
 (,':':1'='I8tDaAy11aA}55a)AaA! $"   A&' 9( r1   c                    US   n[        U R                  5       GH_  u  pgS n[        U5       GHG  u  p[        U
[        5      (       a  Uc  U R                  [        U R                  5      U-      b  UR                  nU R                  [        U R                  5      U-      " [        R                  R                  UR                  5       UR                  SS  SSSS9R                  U5      5      nU	S:X  a
  US:  a  X   OS nUb  Ub  [        R                  " X/SS9nOUnU
" X\5      nM  [        U
[         5      (       a  U
" XT5      nGM  [        U
["        5      (       a  U
" XR5      nGM?  U
" U5      nGMJ     GMb     U$ )Nr   r   r   Tr   r   ru   )rH   rG   r5   r&   r>   r7   rD   ry   r8   r   r   r~   r   r   r|   r   r   r
   )rN   r   r   r   r   r   rX   r[   r   r\   rq   ry   r   s                r.   
_up_decodeWuerstchenDiffNeXt._up_decode   sX   !$T^^4KAH%h/e^44'D,?,?DDTDT@UXY@Y,Z,f &#'#6#6s4;K;K7Lq7P#QMM55 &QWWRS\	]aqu 6  bi$
 01Av!a%=+TD++#(99d-=1#ED#+DaAy11aA}55a)AaA+ 0 50 r1   c                    Ub  [         R                  " X/SS9nU R                  U5      nUb  U R                  U5      nUn	U R	                  U5      nU R                  XX45      n
U R                  XX45      nU R                  U5      R                  SSS9u  pUR                  5       SUS-  -
  -  U-   nU(       a  X-
  U-  $ X4$ )Nr   ru   r   )
r|   r   r   r   rC   r   r   rK   chunksigmoid)rN   r   r   r   r   x_catr   return_noiser   x_inr   abs                r.   forwardWuerstchenDiffNeXt.forward   s    		1*!,A&&q)((.D NN1))!fCOOMFAxx{   *IIK1sQw;'#-H>!4Kr1   )	r,   r-   rK   r:   rD   r>   rC   r@   rG   )i'  r   )NNgMbP?T)__name__
__module____qualname____firstlineno__r   r4   rM   r   r   r   r   r   __static_attributes____classcell__r^   s   @r.   r   r      sg     '0/]' ]'~>,	%
08 r1   r   c                   6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )r&      c           
        > [         TU ]  5         [        R                  " XX3S-  US9U l        [        USSS9U l        [        R                  " [        R                  " X-   US-  5      [        R                  " 5       [        US-  5      [        R                  " U5      [        R                  " US-  U5      5      U l        g )Nr   )r   paddinggroupsFr   r   r   )r3   r4   r8   r=   	depthwiser   normrA   r9   GELUr	   Dropoutrh   )rN   cr+   r   r"   r^   s        r.   r4   ResBlockStageB.__init__   s    1[YZJZcde'eN	==IIaj!a%(GGIq1u%JJwIIa!eQ
r1   c                     UnU R                  U R                  U5      5      nUb  [        R                  " X/SS9nU R	                  UR                  SSSS5      5      R                  SSSS5      nX-   $ )Nr   ru   r   r   r   )r   r   r|   r   rh   permute)rN   r   x_skipx_ress       r.   r   ResBlockStageB.forward   sn    IIdnnQ'(		1+1-AQYYq!Q23;;Aq!QGyr1   )rh   r   r   )r   r   g        r   )r   r   r   r   r4   r   r   r   r   s   @r.   r&   r&      s    

 r1   r&   )rz   numpyrj   r|   torch.nnr8   configuration_utilsr   r   models.modeling_utilsr   modeling_wuerstchen_commonr   r	   r
   r   r   Moduler&    r1   r.   <module>r      s@         B / i iM[ M`RYY r1   