
    +h]j                        S SK r S SKJr  S SKJrJrJ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  SS	KJr  SS
KJr   " S S\R.                  5      r " S S\R2                  5      r " S S\R2                  5      r " S S\R2                  5      r " S S\R2                  5      r " S S\R2                  5      r\ " S S\5      5       r " S S\\\5      r g)    N)	dataclass)OptionalTupleUnion   )ConfigMixinregister_to_config)FromOriginalModelMixin)
BaseOutput   )	Attention)
ModelMixinc                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )SDCascadeLayerNorm   c                 &   > [         TU ]  " U0 UD6  g N)super__init__)selfargskwargs	__class__s      d/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/models/unets/unet_stable_cascade.pyr   SDCascadeLayerNorm.__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   r      )permuter   forward)r   xr   s     r   r    SDCascadeLayerNorm.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                   4   ^  \ rS rSr/ 4U 4S jjrS rSrU =r$ )SDCascadeTimestepBlock)   c           
         > [         TU ]  5         [        R                  " X!S-  5      U l        X0l        U H*  n[        U SU 3[        R                  " X!S-  5      5        M,     g )Nr   mapper_)r   r   nnLinearmappercondssetattr)r   c
c_timestepr4   cnamer   s        r   r   SDCascadeTimestepBlock.__init__*   sQ    ii
E2
EDGE7+RYYzq5-IJ r   c                 v   UR                  [        U R                  5      S-   SS9nU R                  US   5      S S 2S S 2S S 4   R                  SSS9u  p4[	        U R                  5       HA  u  pV[        U SU 35      " X%S-      5      S S 2S S 2S S 4   R                  SSS9u  pxX7-   XH-   pCMC     USU-   -  U-   $ )Nr   dimr   r   r0   )chunklenr4   r3   	enumerategetattr)	r   r!   tabir6   acbcs	            r   r    SDCascadeTimestepBlock.forward2   s    GGC

Oa'QG/{{1Q4 AtT!12888Bdjj)DATWQC=1!E(;Aq$<LMSSTU[\S]FB616q * AE{Qr   )r4   r3   r$   r+   s   @r   r-   r-   )   s    ,. K r   r-   c                   6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )SDCascadeResBlock;   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   )kernel_sizepaddinggroupsFư>elementwise_affineeps   )r   r   r1   Conv2d	depthwiser   norm
Sequentialr2   GELUGlobalResponseNormDropoutchannelwise)r   r6   c_skiprL   dropoutr   s        r   r   SDCascadeResBlock.__init__<   s    1[YZJZcde&qUM	==IIaj!a%(GGIq1u%JJwIIa!eQ
r   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   r;   r   r   r   )rV   rU   torchcatr[   r   )r   r!   x_skipx_ress       r   r    SDCascadeResBlock.forwardH   sn    IIdnnQ'(		1+1-AQYYq!Q23;;Aq!QGyr   )r[   rU   rV   )r   r           r   r$   r+   s   @r   rI   rI   ;   s    

 r   rI   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )rY   R   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   r1   	Parameterr`   zerosgammabeta)r   r<   r   s     r   r   GlobalResponseNorm.__init__S   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<   rp   rO   )r`   rV   meanrk   rl   )r   r!   agg_normstand_div_norms       r   r    GlobalResponseNorm.forwardX   sP    ::a1&$?!]]r4]%H4%OPzzQ/0499<q@@r   )rl   rk   r$   r+   s   @r   rY   rY   R   s    <
A Ar   rY   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )SDCascadeAttnBlock^   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 )NFrO   rP   T)	query_dimheadsdim_headr]   bias)r   r   	self_attnr   rV   r   	attentionr1   rW   SiLUr2   	kv_mapper)r   r6   c_condnheadr~   r]   r   s         r   r   SDCascadeAttnBlock.__init___   sZ    "&qUM	"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$ )Nrq   r   r   r;   )encoder_hidden_states)	r   rV   r~   shaper`   ra   view	transposer   )r   r!   kvnorm_x
batch_sizechannel_s          r   r    SDCascadeAttnBlock.forwardg   s{    ^^B1>>()%JAFKK
R@JJ1aPRTU[\]Bv@@r   )r   r   rV   r~   )Tre   r$   r+   s   @r   rw   rw   ^   s    H r   rw   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )UpDownBlock2dq   c                 2  > [         TU ]  5         US;  a  [        U S35      eU(       a  [        R                  " US:X  a  SOSSSS9O[        R
                  " 5       n[        R                  " XS	S
9n[        R                  " US:X  a  XV/OXe/5      U l        g )N)updown not supportedr   r   g      ?bilinearT)scale_factormodealign_cornersr   rL   )	r   r   
ValueErrorr1   UpsampleIdentityrT   
ModuleListblocks)r   in_channelsout_channelsr   enabledinterpolationmappingr   s          r   r   UpDownBlock2d.__init__r   s    ~%v^455  KK$$,QCj`de 	
 ))K1Emm]$<SZRjkr   c                 <    U R                    H  nU" U5      nM     U$ r   r   )r   r!   blocks      r   r    UpDownBlock2d.forward~   s    [[EaA !r   r   )Tr$   r+   s   @r   r   r   q   s    
l r   r   c                   8    \ rS rSr% Sr\R                  \S'   Srg)StableCascadeUNetOutput   Nsampler#   )	r%   r&   r'   r(   r   r`   Tensor__annotations__r)   r#   r   r   r   r      s    FELLr   r   c            ,         ^  \ rS rSrSr\                       SS\S\S\S\S\S\\   S	\\   S
\\   S\\   S\\\      S\\\      S\\\	      S\\   S\\   S\\   S\\   S\
\\\   4   S\
\\\   4   S\\	   S\\\      4(U 4S jjj5       rS rS S jrS!S jrS rS r       S"S jrSrU =r$ )#StableCascadeUNet   Tr   r   timestep_ratio_embedding_dim
patch_sizeconditioning_dimblock_out_channelsnum_attention_headsdown_num_layers_per_blockup_num_layers_per_blockdown_blocks_repeat_mappersup_blocks_repeat_mappersblock_types_per_layerclip_text_in_channelsclip_image_in_channelseffnet_in_channelspixel_mapper_in_channelsr]   r~   timestep_conditioning_typeswitch_levelc                   >^^^^ [         T#U ]  5         [        U5      [        U5      :w  a  [        S[        U5       35      e[        U5      [        U	5      :w  a  [        S[        U5       35      e[        U5      [        U
5      :w  a  [        S[        U5       35      e[        U5      [        U5      :w  a  [        S[        U5       35      e[        U5      [        U5      :w  a  [        S[        U5       35      e[	        U[
        5      (       a  U4[        U5      -  n[	        U[        5      (       a  U4[        U5      -  nUbt  [        R                  " [        R                  " UUS   S-  S	S
9[        R                  " 5       [        R                  " US   S-  US   S	S
9[        US   SSS95      U l        Ubt  [        R                  " [        R                  " UUS   S-  S	S
9[        R                  " 5       [        R                  " US   S-  US   S	S
9[        US   SSS95      U l        [        R                  " UTU-  5      U l        Ub  [        R                  " UT5      U l        Ub  [        R                  " UTU-  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U4S jjn[        R,                  " 5       U l        [        R,                  " 5       U l        [        R,                  " 5       U l        [5        [        U5      5       GH  nUS:  a|  U R0                  R7                  [        R                  " [        UUS	-
     SSS9Ub  [9        UUS	-
     UU   SUUS	-
     S9O[        R                  " UUS	-
     UU   SSS95      5        O.U R0                  R7                  [        R:                  " 5       5        [        R,                  " 5       n[5        UU   5       H6  nUU    H*  nU" UUU   UU   UU   UU   S9nUR7                  U5        M,     M8     U R.                  R7                  U5        U
c  GM2  [        R,                  " 5       n[5        U
U   S	-
  5       H.  nUR7                  [        R                  " UU   UU   S	S
95        M0     U R2                  R7                  U5        GM     [        R,                  " 5       U l        [        R,                  " 5       U l        [        R,                  " 5       U l         [C        [5        [        U5      5      5       GH  nUS:  ay  U R>                  R7                  [        R                  " [        UU   SSS9Ub  [9        UU   UUS	-
     SUUS	-
     S9O[        RD                  " UU   UUS	-
     SSS95      5        O.U R>                  R7                  [        R:                  " 5       5        [        R,                  " 5       n[5        U	SSS2   U   5       Hl  n [G        UU   5       HW  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U   UU   U"UU   UU   S9nUR7                  U5        MY     Mn     U R<                  R7                  U5        Uc  GMk  [        R,                  " 5       n[5        USSS2   U   S	-
  5       H.  nUR7                  [        R                  " UU   UU   S	S
95        M0     U R@                  R7                  U5        GM     [        R                  " [        US   SSS9[        R                  " US   X$S-  -  S	S
9[        RH                  " U5      5      U l%        SU l&        g)am  

Parameters:
    in_channels (`int`, defaults to 16):
        Number of channels in the input sample.
    out_channels (`int`, defaults to 16):
        Number of channels in the output sample.
    timestep_ratio_embedding_dim (`int`, defaults to 64):
        Dimension of the projected time embedding.
    patch_size (`int`, defaults to 1):
        Patch size to use for pixel unshuffling layer
    conditioning_dim (`int`, defaults to 2048):
        Dimension of the image and text conditional embedding.
    block_out_channels (Tuple[int], defaults to (2048, 2048)):
        Tuple of output channels for each block.
    num_attention_heads (Tuple[int], defaults to (32, 32)):
        Number of attention heads in each attention block. Set to -1 to if block types in a layer do not have
        attention.
    down_num_layers_per_block (Tuple[int], defaults to [8, 24]):
        Number of layers in each down block.
    up_num_layers_per_block (Tuple[int], defaults to [24, 8]):
        Number of layers in each up block.
    down_blocks_repeat_mappers (Tuple[int], optional, defaults to [1, 1]):
        Number of 1x1 Convolutional layers to repeat in each down block.
    up_blocks_repeat_mappers (Tuple[int], optional, defaults to [1, 1]):
        Number of 1x1 Convolutional layers to repeat in each up block.
    block_types_per_layer (Tuple[Tuple[str]], optional,
        defaults to (
            ("SDCascadeResBlock", "SDCascadeTimestepBlock", "SDCascadeAttnBlock"), ("SDCascadeResBlock",
            "SDCascadeTimestepBlock", "SDCascadeAttnBlock")
        ): Block types used in each layer of the up/down blocks.
    clip_text_in_channels (`int`, *optional*, defaults to `None`):
        Number of input channels for CLIP based text conditioning.
    clip_text_pooled_in_channels (`int`, *optional*, defaults to 1280):
        Number of input channels for pooled CLIP text embeddings.
    clip_image_in_channels (`int`, *optional*):
        Number of input channels for CLIP based image conditioning.
    clip_seq (`int`, *optional*, defaults to 4):
    effnet_in_channels (`int`, *optional*, defaults to `None`):
        Number of input channels for effnet conditioning.
    pixel_mapper_in_channels (`int`, defaults to `None`):
        Number of input channels for pixel mapper conditioning.
    kernel_size (`int`, *optional*, defaults to 3):
        Kernel size to use in the block convolutional layers.
    dropout (Tuple[float], *optional*, defaults to (0.1, 0.1)):
        Dropout to use per block.
    self_attn (Union[bool, Tuple[bool]]):
        Tuple of booleans that determine whether to use self attention in a block or not.
    timestep_conditioning_type (Tuple[str], defaults to ("sca", "crp")):
        Timestep conditioning type.
    switch_level (Optional[Tuple[bool]], *optional*, defaults to `None`):
        Tuple that indicates whether upsampling or downsampling should be applied in a block
zaNumber of elements in `down_num_layers_per_block` must match the length of `block_out_channels`: z_Number of elements in `up_num_layers_per_block` must match the length of `block_out_channels`: zbNumber of elements in `down_blocks_repeat_mappers` must match the length of `block_out_channels`: z`Number of elements in `up_blocks_repeat_mappers` must match the length of `block_out_channels`: z]Number of elements in `block_types_per_layer` must match the length of `block_out_channels`: Nr   rS   r   r   FrO   rP   r   c                    > U S:X  a  [        XTUS9$ U S:X  a  [        UTX%US9$ U S:X  a  [        UT	TS9$ [        SU  S35      e)	NrI   )rL   r]   rw   )r~   r]   r-   )r4   zBlock type r   )rI   rw   r-   r   )

block_typer   r   r\   r]   r~   r   rL   r   r   s
         r   	get_block-StableCascadeUNet.__init__.<locals>.get_block   sm    00(+_fgg33)+7Gmtuu77-!=E_  !;zl.!IJJr   r   )r   r   )rL   stride)r]   r~   r   rq   )r\   r]   r~   )r   r   T)'r   r   r>   r   
isinstancefloatboolr1   rW   rT   rX   r   effnet_mapperpixels_mapperr2   clip_txt_pooled_mapperclip_txt_mapperclip_img_mapper	LayerNorm	clip_normPixelUnshuffle	embeddingr   down_blocksdown_downscalersdown_repeat_mappersrangeappendr   r   	up_blocksup_upscalersup_repeat_mappersreversedConvTranspose2dr?   PixelShuffleclfgradient_checkpointing)$r   r   r   r   r   r   r   r   r   r   r   r   r   r   clip_text_pooled_in_channelsr   clip_seqr   r   rL   r]   r~   r   r   r   rD   
down_blockr   r   r   block_repeat_mappersup_blockjkr\   r   s$      ` `             `  `            r   r   StableCascadeUNet.__init__   s   n 	!"c*C&DDstw  yK  uL  tM  N  #$,C(DDqru  wI  sJ  rK  L  #$,F(GGtux  zL  vM  uN  O  #$,D(EErsv  xJ  tK  sL  M  #$,A(BBops  uG  qH  pI  J  gu%%j3'9#::Gi&&"s+='>>I )!#		,.@.Ca.GUVW			,Q/!35G5JXYZ"#5a#8UX\]	"D $/!#		24Fq4IA4M[\]			,Q/!35G5JXYZ"#5a#8UX\]	"D ')ii0LN^aiNi&j# ,#%99-BDT#UD !-#%99-CEUX`E`#aD &65VZ[j)IIk]35G5JXYZ1!4TXY

	K 
	K ==? "#%==? s-./A1u%%,,MM*+=a!e+DY^dhi (3 &.q1u57I!7LSYcopqtupucv  YY'9!a%'@BTUVBWefopq	 %%,,R[[];J4Q78"7":J%"*1-+A. '
"+A,E %%e, #; 9 ##J/)5')}}$9!<q@AA(//		:LQ:OQcdeQftu0vw B((//0DEA 0F MMO!#%$6 789A1u!!((MM*+=a+@UZ`de (3 &.q13Ea!e3LSWamnorsnsat  //.q13Ea!e3LZ[de	 !!((7}}H24R48;<%./DQ/G%HMAz67#>P:QTU:U6UZ[_`ZedeZe/2klF%"*1-+A.% '
"+A,E OOE* &I = NN!!(+'3')}}$7"=a@1DEA(//		:LQ:OQcdeQftu0vw F&&--.BCI :N ==1!4TXYII(+\]-KYZ[OOJ'
 ',#r   c                 f   [        U[        R                  [        R                  45      (       aj  [        R                  R
                  R                  UR                  5        UR                  b*  [        R
                  R                  UR                  S5        [        R
                  R                  U R                  R                  SS9  [        U S5      (       a2  [        R
                  R                  U R                  R                  SS9OS   [        U S5      (       a2  [        R
                  R                  U R                  R                  SS9OS   [        U S5      (       aj  [        R
                  R                  U R                  S   R                  SS9  [        R
                  R                  U R                  S   R                  SS9  [        U S5      (       aj  [        R
                  R                  U R                   S   R                  SS9  [        R
                  R                  U R                   S   R                  SS9  [        R                  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      (       ae  UR,                  S
   R                  =R.                  [0        R2                  " S	[5        U R6                  R8                  S   5      -  5      -  sl        M}  [        U[:        5      (       d  M  [        R
                  R                  UR<                  R                  S5        M     M     g )Nr   g{Gz?)stdr   r   r   r   r   r   rq   )r   r1   rT   r2   r`   initxavier_uniform_weightr}   	constant_normal_r   hasattrr   r   r   r   r   r   r   r   rI   r[   datanpsqrtsumconfigr   r-   r3   )r   mlevel_blockr   s       r   _init_weightsStableCascadeUNet._init_weights  su   a"))RYY/00HHMM))!((3vv!!!!&&!,
33::EBI$PaBbBb,,33>hlBI$PaBbBb,,33>hl4))GGOOD..q188dOCGGOOD..q188dOC4))GGOOD..q188dOCGGOOD..q188dOC%%dnnQ&7&>&>E
$((1+,,a0  ++dnn<K$e%677%%b)0055SI[I[\]I^E_A_9``5'=>>GG%%ell&9&91=	 % =r   c                 >   X-  nU R                   R                  S-  n[        R                  " U5      US-
  -  n[        R
                  " XCR                  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                   R                  S-  S:X  a  [        R                  R                  USSS9nUR!                  UR"                  S9$ )	Nr   r   )devicer;   )r   r   constant)r   )dtype)r   r   mathlogr`   aranger   r   mulexpra   sincosr1   
functionalpadtor   )r   timestep_ratiomax_positionsrhalf_dimembs         r   get_timestep_ratio_embedding.StableCascadeUNet.get_timestep_ratio_embedding  s    *;;;;q@hh}%A6ll8HH5;;=AA3$GKKM4j3tQw<'iiCGGI.A6;;33a71<--##Cj#ACvvAGGv$$r   c                    [        UR                  5      S:X  a  UR                  S5      nU R                  U5      R	                  UR                  S5      UR                  S5      U R                  R                  -  S5      nUb  Ub  U R                  U5      n[        UR                  5      S:X  a  UR                  S5      nU R                  U5      R	                  UR                  S5      UR                  S5      U R                  R                  -  S5      n[        R                  " X$U/SS9nOUnU R                  U5      $ )Nr   r   r   rq   r;   )r>   r   	unsqueezer   r   sizer   r   r   r   r`   ra   r   )r   clip_txt_pooledclip_txtclip_imgclip_txt_poolclips         r   get_clip_embeddings%StableCascadeUNet.get_clip_embeddings  s   $$%*+55a8M33ODII  #_%9%9!%<t{{?S?S%SUW
 H$8++H5H8>>"a'#--a0++H5::a (--"2T[[5I5I"I2H 99hx@aHD D~~d##r   c                 <   / n[        U R                  U R                  U R                  5      n[        R
                  " 5       (       Ga  U R                  (       a  U H  u  pgnU" U5      n[        [        U5      S-   5       H  n	U H  n
[        U
[        5      (       a  U R                  X5      nM+  [        U
[        5      (       a  U R                  XU5      nMT  [        U
[        5      (       a  U R                  XU5      nM}  U R                  U
5      nM     U	[        U5      :  d  M  X   " U5      nM     UR                  SU5        M     U$ U H  u  pgnU" U5      n[        [        U5      S-   5       H  n	U Hh  n
[        U
[        5      (       a
  U
" U5      nM"  [        U
[        5      (       a
  U
" X5      nMA  [        U
[        5      (       a
  U
" X5      nM`  U
" U5      nMj     U	[        U5      :  d  M  X   " U5      nM     UR                  SU5        M     U$ )Nr   r   )zipr   r   r   r`   is_grad_enabledr   r   r>   r   rI   _gradient_checkpointing_funcrw   r-   insert)r   r!   r_embedr  level_outputsblock_groupr   
downscalerrepmaprD   r   s              r   _down_encodeStableCascadeUNet._down_encode  s   $**D,A,A4C[C[\  ""t'B'B2=.
qMs6{Q/A!+%e->?? $ A A% KA'/ABB $ A A%D QA'/EFF $ A A%G TA $ A A% HA ", 3v;"IaL 0 $$Q* 3>>  3>.
qMs6{Q/A!+%e->?? %aA'/ABB %aA'/EFF %a 1A %aA ", 3v;"IaL 0 $$Q* 3> r   c           
      z   US   n[        U R                  U R                  U R                  5      n[        R
                  " 5       (       Ga  U R                  (       Ga  [        U5       GH  u  nu  pxn	[        [        U	5      S-   5       GH  n
[        U5       GHS  u  p[        U[        5      (       a  US:X  a
  US:  a  X   OS nUb  UR                  S5      UR                  S5      :w  d$  UR                  S5      UR                  S5      :w  ab  UR                  n[        R                  R                  R!                  UR#                  5       UR$                  SS  SSS9nUR'                  U5      nU R)                  XU5      nM  [        U[*        5      (       a  U R)                  XU5      nGM  [        U[,        5      (       a  U R)                  XU5      nGMB  U R)                  X5      nGMV     U
[        U	5      :  d  GMy  X   " U5      nGM     U" U5      nGM     U$ [        U5       GH  u  nu  pxn	[        [        U	5      S-   5       GH\  n
[        U5       GH,  u  p[        U[        5      (       a  US:X  a
  US:  a  X   OS nUb  UR                  S5      UR                  S5      :w  d$  UR                  S5      UR                  S5      :w  ab  UR                  n[        R                  R                  R!                  UR#                  5       UR$                  SS  SSS9nUR'                  U5      nU" XM5      nM  [        U[*        5      (       a  U" XC5      nGM  [        U[,        5      (       a  U" XB5      nGM$  U" U5      nGM/     U
[        U	5      :  d  GMR  X   " U5      nGM_     U" U5      nGM     U$ )Nr   r   rq   r   T)r   r   )r  r   r   r   r`   r  r   r?   r   r>   r   rI   r  r   r1   r  interpolater   r   r	  r  rw   r-   )r   r!  r   r  r!   r"  rD   r   upscalerr$  r   r   r   skip	orig_types                  r   
_up_decodeStableCascadeUNet._up_decode  s*   !$..$*;*;T=S=ST  ""t'B'B'B3<[3I//Hs6{Q/A$-h$7%e->??78Av!a%=#3TD#/QVVBZ499R=5PTUTZTZ[]T^bfbkbklnboTo,-GG	$)HH$7$7$C$C$%GGItzz"#Z_c %D %" %&DDO $ A A%D QA'/ABB $ A A%D QA'/EFF $ A A%G TA $ A A% KA %8  3v;"IaL% 0& QK) 4JV + 4=[3I//Hs6{Q/A$-h$7%e->??78Av!a%=#3TD#/QVVBZ499R=5PTUTZTZ[]T^bfbkbklnboTo,-GG	$)HH$7$7$C$C$%GGItzz"#Z_c %D %" %&DDO %aA'/ABB %aA'/EFF %a 1A %aA %8  3v;"IaL% 0& QK) 4J* r   c           
      r   Uc#  UR                  UR                  S5      SSS5      nU R                  U5      nU R                  R                   H[  nUS:X  a  UnOUS:X  a  U	nOS nU=(       d    [
        R                  " U5      n[
        R                  " XR                  U5      /SS9nM]     U R                  X4US9nU R                  U5      n[        U S	5      (       aB  Ub?  UU R                  [        R                  R                  UUR                  S
S  SSS95      -   n[        U S5      (       a?  U[        R                  R                  U R!                  U5      UR                  S
S  SSS9-   nU R#                  UX5      nU R%                  UX5      nU R'                  U5      nU
(       d  U4$ [)        US9$ )Nr   r      scacrpr   r;   )r  r  r  r   r(  r   T)r  r   r   r   )r   )	new_zerosr  r  r   r   r`   
zeros_likera   r  r   r   r   r1   r  r)  r   r   r%  r-  r   r   )r   r   r
  clip_text_pooled	clip_textr  effnetpixelsr1  r2  return_dicttimestep_ratio_embedr6   condt_condr  r!   r!  s                     r   r    StableCascadeUNet.forward  s    >%%fkk!naA>F  $@@P77AEze=U--n=F#(99.BDeDeflDm-ntu#v  8 ''8Hgo'p NN6"4))f.@D&&))&qwwrs|*dh)i A 4))BMM--""6*J^b .  A ))!-AHOOM+?F!9&f55r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )   r>  @   r      )r@  r@  )    rA  )r0     )rB  r0  r   r   rC  )rI   r-   rw   rD  Ni   NrS   NNr   )皙?rE  T)r1  r2  N)i'  )NN)NNNNNNT)r%   r&   r'   r(    _supports_gradient_checkpointingr	   intr   r   strr   r   r   r   r   r  r  r%  r-  r    r)   r*   r+   s   @r   r   r      s   '+$ ,. $)5*207.5<
 :@4
 04%)04,026.8.21?.2=w,w, w, '*	w,
 w, w, "#Jw, #3Zw, $):w, "'sw, %-U3Z$8w, #+5:"6w,   %U3Z0!w,(  (})w,, !)-w,0 %SM1w,2 #+3-3w,6 ueEl*+7w,8 uT{*+9w,: %*#J;w,< uT{+=w, w,r>:%$$$L0n -6 -6r   r   )!r   dataclassesr   typingr   r   r   numpyr   r`   torch.nnr1   configuration_utilsr   r	   loadersr
   utilsr   attention_processorr   modeling_utilsr   r   r   Moduler-   rI   rY   rw   r   r   r   r#   r   r   <module>rS     s     ! ) )    B -  + '% %RYY $		 .	A 	A &BII &  j    6
K1G 6r   