
    +h              4          S SK JrJrJrJrJ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JrJrJrJr  SS
KJr  SSKJrJr  SSKJrJrJrJrJr  \
R@                  " \!5      r" " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r             SPS\#S\$S\$S\$S\$S\%S\&S\#S \$S!\\$   S"\\$   S#\\$   S$\%S%\%S&\%S'\%S(\#S)\$S*\$S+\\$\\$   4   S,\\$\\$   4   S-\&S.\S/   4.S0 jjr'              SQS1\#S\$S\$S\$S2\$S\$S3\%S\&S\#S \$S4\\$   S!\\$   S"\\$   S$\%S%\%S&\%S'\%S(\#S)\$S5\\$   S*\$S+\\$\\$   4   S,\\$\\$   4   S-\&S.\S6   42S7 jjr( " S8 S9\RR                  5      r* " S: S;\RR                  5      r+ " S< S=\RR                  5      r, " S> S?\RR                  5      r- " S@ SA\RR                  5      r. " SB SC\RR                  5      r/ " SD SE\RR                  5      r0 " SF SG\RR                  5      r1 " SH SI\RR                  5      r2 " SJ SK\RR                  5      r3 " SL SM\RR                  5      r4 " SN SO\RR                  5      r5g)R    )AnyDictOptionalTupleUnionN)nn   )	deprecatelogging)apply_freeu   )	Attention)Downsample2DResnetBlock2DSpatioTemporalResBlockTemporalConvLayer
Upsample2D)Transformer2DModel)TransformerSpatioTemporalModelTransformerTemporalModel   )CrossAttnDownBlockMotionCrossAttnUpBlockMotionDownBlockMotionUNetMidBlockCrossAttnMotionUpBlockMotionc                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   /   c                 D   > Sn[        SSU5        [        TU ]  " U0 UD6  g )NzImporting `DownBlockMotion` from `diffusers.models.unets.unet_3d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_motion_model import DownBlockMotion` instead.r   1.0.0r
   super__init__selfargskwargsdeprecation_message	__class__s       _/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/models/unets/unet_3d_blocks.pyr#   DownBlockMotion.__init__0   s,     @#W.AB$)&)     __name__
__module____qualname____firstlineno__r#   __static_attributes____classcell__r)   s   @r*   r   r   /       * *r,   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   6   c                 D   > Sn[        SSU5        [        TU ]  " U0 UD6  g )NzImporting `CrossAttnDownBlockMotion` from `diffusers.models.unets.unet_3d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_motion_model import CrossAttnDownBlockMotion` instead.r   r    r!   r$   s       r*   r#   !CrossAttnDownBlockMotion.__init__7   s,     R,g7JK$)&)r,   r-   r.   r5   s   @r*   r   r   6   r6   r,   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   =   c                 D   > Sn[        SSU5        [        TU ]  " U0 UD6  g )NzImporting `UpBlockMotion` from `diffusers.models.unets.unet_3d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_motion_model import UpBlockMotion` instead.r   r    r!   r$   s       r*   r#   UpBlockMotion.__init__>   s+     |/7,?@$)&)r,   r-   r.   r5   s   @r*   r   r   =   r6   r,   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   D   c                 D   > Sn[        SSU5        [        TU ]  " U0 UD6  g )NzImporting `CrossAttnUpBlockMotion` from `diffusers.models.unets.unet_3d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_motion_model import CrossAttnUpBlockMotion` instead.r   r    r!   r$   s       r*   r#   CrossAttnUpBlockMotion.__init__E   s,     N*G5HI$)&)r,   r-   r.   r5   s   @r*   r   r   D   r6   r,   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   K   c                 D   > Sn[        SSU5        [        TU ]  " U0 UD6  g )NzImporting `UNetMidBlockCrossAttnMotion` from `diffusers.models.unets.unet_3d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_motion_model import UNetMidBlockCrossAttnMotion` instead.r   r    r!   r$   s       r*   r#   $UNetMidBlockCrossAttnMotion.__init__L   s,     X/:MN$)&)r,   r-   r.   r5   s   @r*   r   r   K   r6   r,   r   down_block_type
num_layersin_channelsout_channelstemb_channelsadd_downsample
resnet_epsresnet_act_fnnum_attention_headsresnet_groupscross_attention_dimdownsample_paddingdual_cross_attentionuse_linear_projectiononly_cross_attentionupcast_attentionresnet_time_scale_shifttemporal_num_attention_headstemporal_max_seq_lengthtransformer_layers_per_block%temporal_transformer_layers_per_blockdropoutreturn)DownBlock3DCrossAttnDownBlock3DDownBlockSpatioTemporal CrossAttnDownBlockSpatioTemporalc                 ^   U S:X  a  [        UUUUUUUU	UUUS9$ U S:X  aJ  U
c  [        S5      e[        S0 SU_SU_SU_SU_S	U_S
U_SU_SU	_SU_SU
_SU_SU_SU_SU_SU_SU_SU_6$ U S:X  a  [        UUUUUS9$ U S:X  a  U
c  [        S5      e[	        UUUUUUU
US9$ [        U  S35      e)Nr^   )rH   rI   rJ   rK   rL   rM   rN   rP   rR   rW   r\   r_   z>cross_attention_dim must be specified for CrossAttnDownBlock3DrH   rI   rJ   rK   rL   rM   rN   rP   rR   rQ   rO   rS   rT   rU   rV   rW   r\   r`   )rH   rI   rJ   rK   rL   ra   zJcross_attention_dim must be specified for CrossAttnDownBlockSpatioTemporal)rI   rJ   rK   rH   rZ   rL   rQ   rO    does not exist.r-   )r^   
ValueErrorr_   r`   ra   )rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   s                         r*   get_down_blockre   R   s   : -'!#%')!''1$;
 	
 
2	2&]^^# 
!
#
 &
 (	

 *
 "
 (
 (
  2
 !4
 !4
 "6
 #8
 "6
 .
  %<!
" #
 	
& 
5	5&!#%')
 	
 
>	>&ijj/#%'!)E) 3 3	
 		
 ((89
::r,   up_block_typeprev_output_channeladd_upsampleresolution_idxtemporal_cross_attention_dim)	UpBlock3DCrossAttnUpBlock3DUpBlockSpatioTemporalCrossAttnUpBlockSpatioTemporalc                 n   U S:X  a  [        UUUUUUUUUUU
US9$ U S:X  aM  Uc  [        S5      e[        S0 SU_SU_SU_SU_S	U_S
U_SU_SU_SU_SU_SU	_SU_SU_SU_SU_SU_SU
_SU_6$ U S:X  a  [        UUUUUU
US9$ U S:X  a   Uc  [        S5      e[	        UUUUUUUUU	U
S9
$ [        U  S35      e)Nrk   )rH   rI   rJ   rg   rK   rh   rM   rN   rP   rW   ri   r\   rl   z<cross_attention_dim must be specified for CrossAttnUpBlock3DrH   rI   rJ   rg   rK   rh   rM   rN   rP   rQ   rO   rS   rT   rU   rV   rW   ri   r\   rm   )rH   rI   rJ   rg   rK   ri   rh   rn   zHcross_attention_dim must be specified for CrossAttnUpBlockSpatioTemporal)
rI   rJ   rg   rK   rH   rZ   rh   rQ   rO   ri   rc   r-   )rk   rd   rl   rm   rn   )rf   rH   rI   rJ   rg   rK   rh   rM   rN   rO   ri   rP   rQ   rS   rT   rU   rV   rW   rX   rj   rY   rZ   r[   r\   s                           r*   get_up_blockrp      s   > #!#% 3'%!''$;)
 	
 
.	.&[\\! 
!
#
 &
 !4	

 (
 &
 "
 (
 (
 !4
 !4
 "6
 #8
 "6
 .
  %<!
" *#
$ %
 	
( 
1	1$!#% 3')%
 	
 
:	:&ghh-#% 3'!)E% 3 3)
 	
 &67
88r,   c                   @  ^  \ rS rSr             SS\S\S\S\S\S\S\S	\S
\S\S\S\S\S\S\4U 4S jjjr     SS\	R                  S\\	R                     S\\	R                     S\\	R                     S\S\\\\4      S\	R                  4S jjrSrU =r$ )UNetMidBlock3DCrossAttni  rI   rK   r\   rH   rM   rW   rN   rP   resnet_pre_normrO   output_scale_factorrQ   rS   rT   rV   c                   > [         TU ]  5         SU l        Xl        Ub  UO[	        US-  S5      n[        UUUUUUUUUU	S9
/n[        UUSUS9/n/ n/ n[        U5       H  nUR                  [        X-  U
USUUUUS95        UR                  [        X-  U
USUUS	95        UR                  [        UUUUUUUUUU	S9
5        UR                  [        UUSUS95        M     [        R                  " U5      U l        [        R                  " U5      U l        [        R                  " U5      U l        [        R                  " U5      U l        g )
NT       
rI   rJ   rK   epsgroupsr\   time_embedding_normnon_linearityrt   pre_norm皙?r\   norm_num_groupsr   )rI   rH   rQ   r   rT   rV   rI   rH   rQ   r   )r"   r#   has_cross_attentionrO   minr   r   rangeappendr   r   r   
ModuleListresnets
temp_convs
attentionstemp_attentions)r%   rI   rK   r\   rH   rM   rW   rN   rP   rs   rO   rt   rQ   rS   rT   rV   r   r   r   r   _r)   s                        r*   r#    UNetMidBlock3DCrossAttn.__init__  s   $ 	#' #6 )6)BK[\L\^`Ha '(+$$;+$7(
  -	

 
z"A"6' + (;$1*?%5	 ""(6' + (;$1	 NN +!,"/"(#(?"/(;, !$1	K #\ }}W---
3--
3!}}_=r,   hidden_statestembencoder_hidden_statesattention_mask
num_framescross_attention_kwargsr]   c                 .   U R                   S   " X5      nU R                  S   " XS9n[        U R                  U R                  U R                   SS  U R                  SS  5       H,  u  pxpU" UUUSS9S   nU" UUUSS9S   nU	" X5      nU
" XS9nM.     U$ )Nr   r   r   Fr   r   return_dictr   r   r   )r   r   zipr   r   )r%   r   r   r   r   r   r   attn	temp_attnresnet	temp_convs              r*   forwardUNetMidBlock3DCrossAttn.forwardx  s     Q<*=P25OOT114<<3CT__UVUWEX3
.DV !&;'=!	
 M &%'=!	
 M #=7M%mKM!3
$ r,   )r   r   rO   r   r   r   )        r   ư>defaultswishrw   Tr         ?   FTFNNNr   N)r/   r0   r1   r2   intfloatstrboolr#   torchTensorr   r   r   r   r3   r4   r5   s   @r*   rr   rr     sk   
  '0$ $#$%(#'%*&*!&!c>c> c> 	c>
 c> c> "%c> c> c> c> !c> #c> !c> #c>  $c>  !c> c>P (,8<15;?|| u||$  (5	
 !.  !)c3h 8 
 r,   rr   c            '       x  ^  \ rS rSr                S S\S\S\S\S\S\S\S	\S
\S\S\S\S\S\S\S\S\S\S\4&U 4S jjjr     S!S\	R                  S\\	R                     S\\	R                     S\\	R                     S\S\\\4   S\\	R                  \\	R                  S4   4   4S jjrSrU =r$ )"r_   i  rI   rJ   rK   r\   rH   rM   rW   rN   rP   rs   rO   rQ   rt   rR   rL   rS   rT   rU   rV   c                   > [         TU ]  5         / n/ n/ n/ nSU l        Xl        [	        U5       H  nUS:X  a  UOUnUR                  [        UUUUU	UUUUU
S9
5        UR                  [        UUSU	S95        UR                  [        X+-  UUSUU	UUUS9	5        UR                  [        X+-  UUSUU	S95        M     [        R                  " U5      U l        [        R                  " U5      U l        [        R                  " U5      U l        [        R                  " U5      U l        U(       a(  [        R                  " [!        USUUS	S
9/5      U l        OS U l        SU l        g )NTr   rx   r~   r   r   rI   rH   rQ   r   rT   rU   rV   r   opuse_convrJ   paddingnameF)r"   r#   r   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   downsamplersgradient_checkpointing)r%   rI   rJ   rK   r\   rH   rM   rW   rN   rP   rs   rO   rQ   rt   rR   rL   rS   rT   rU   rV   r   r   r   r   ir)   s                            r*   r#   CrossAttnDownBlock3D.__init__  s   , 	

#' #6 z"A)*a+\KNN +!-"/"(#(?"/(;, !  $1	 " 7' , (;$1*?)=%5
 ""( 7' , (;$1	K #^ }}W---
3--
3!}}_= " $!%%1 2!
!D !%D&+#r,   r   r   r   r   r   r   r]   .c                 <   Sn[        U R                  U R                  U R                  U R                  5       H1  u  ppU" X5      nU	" XS9nU
" UUUSS9S   nU" UUUSS9S   nXq4-  nM3     U R
                  b   U R
                   H  nU" U5      nM     Xq4-  nX4$ )Nr-   r   Fr   r   r   )r   r   r   r   r   r   )r%   r   r   r   r   r   r   output_statesr   r   r   r   downsamplers                r*   r   CrossAttnDownBlock3D.forward  s     25LL$//4??D<P<P3
.Ft #=7M%mKM &;'=!	
 M &%'=!	
 M --M%3
( (#00 +M :  1 --M++r,   )r   r   r   r   rO   r   r   r   )r   r   r   r   r   rw   Tr   r   r   r   TFFFFr   )r/   r0   r1   r2   r   r   r   r   r#   r   r   r   r   r   r   r   r   r3   r4   r5   s   @r*   r_   r_     s     '0$ $#$#'%("##%*&+%*!&)b,b, b, 	b,
 b, b, b, "%b, b, b, b, !b, !b, #b,  b,  !b," ##b,$  $%b,& #'b,( )b, b,N (,8<1515&,||&, u||$&,  (5	&,
 !.&, &, !%S#X&, 
u||U5<<#455	6&, &,r,   r_   c                     ^  \ rS rSr          SS\S\S\S\S\S\S\S	\S
\S\S\S\S\4U 4S jjjr  SS\	R                  S\\	R                     S\S\\	R                  \\	R                  S4   4   4S jjrSrU =r$ )r^   i&  rI   rJ   rK   r\   rH   rM   rW   rN   rP   rs   rt   rL   rR   c                   > [         TU ]  5         / n/ n[        U5       HI  nUS:X  a  UOUnUR                  [	        UUUUU	UUUUU
S9
5        UR                  [        UUSU	S95        MK     [        R                  " U5      U l        [        R                  " U5      U l	        U(       a(  [        R                  " [        USUUSS9/5      U l        OS U l        SU l        g )	Nr   rx   r~   r   Tr   r   F)r"   r#   r   r   r   r   r   r   r   r   r   r   r   )r%   rI   rJ   rK   r\   rH   rM   rW   rN   rP   rs   rt   rL   rR   r   r   r   r)   s                    r*   r#   DownBlock3D.__init__'  s      	
z"A)*a+\KNN +!-"/"(#(?"/(;, !  $1	! #2 }}W---
3 " $!%%1 2!
!D !%D&+#r,   r   r   r   r]   .c                     Sn[        U R                  U R                  5       H  u  pVU" X5      nU" XS9nXA4-  nM     U R                  b   U R                   H  nU" U5      nM     XA4-  nX4$ )Nr-   r   )r   r   r   r   )r%   r   r   r   r   r   r   r   s           r*   r   DownBlock3D.forwardh  s     !$T\\4??!CF"=7M%mKM--M	 "D (#00 +M :  1 --M++r,   )r   r   r   r   )
r   r   r   r   r   rw   Tr   Tr   )Nr   )r/   r0   r1   r2   r   r   r   r   r#   r   r   r   r   r   r   r3   r4   r5   s   @r*   r^   r^   &  s     '0$ $%(#"#?,?, ?, 	?,
 ?, ?, ?, "%?, ?, ?, ?, #?, ?,  ?, ?,H (,	,||, u||$, 	,
 
u||U5<<#455	6, ,r,   r^   c            *         ^  \ rS rSr                S#S\S\S\S\S\S\S\S	\S
\S\S\S\S\S\S\S\S\S\S\S\\   4(U 4S jjjr	      S$S\
R                  S\\
R                  S4   S\\
R                     S\\
R                     S\\   S\\
R                     S\S\\\4   S \
R                  4S! jjrS"rU =r$ )%rl   i  rI   rJ   rg   rK   r\   rH   rM   rW   rN   rP   rs   rO   rQ   rt   rh   rS   rT   rU   rV   ri   c                   > [         TU ]  5         / n/ n/ n/ nSU l        Xl        [	        U5       H  nUUS-
  :X  a  UOUnUS:X  a  UOUnUR                  [        UU-   UUUU
UUU	UUS9
5        UR                  [        UUSU
S95        UR                  [        X,-  UUSUU
UUUS9	5        UR                  [        X,-  UUSUU
S95        M     [        R                  " U5      U l        [        R                  " U5      U l        [        R                  " U5      U l        [        R                  " U5      U l        U(       a&  [        R                  " [!        USUS	9/5      U l        OS U l        S
U l        UU l        g )NTr   r   rx   r~   r   r   r   r   rJ   F)r"   r#   r   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   
upsamplersr   ri   )r%   rI   rJ   rg   rK   r\   rH   rM   rW   rN   rP   rs   rO   rQ   rt   rh   rS   rT   rU   rV   ri   r   r   r   r   r   res_skip_channelsresnet_in_channelsr)   s                               r*   r#   CrossAttnUpBlock3D.__init__  s   . 	

#' #6 z"A01Z!^0C,89Q!4LNN 25F F!-"/"(#(?"/(;, !  $1	 " 7' , (;$1*?)=%5
 ""( 7' , (;$1	O #b }}W---
3--
3!}}_= mmZtbn-o,pqDO"DO&+#,r,   r   res_hidden_states_tuple.r   r   upsample_sizer   r   r   r]   c	                    [        U SS 5      =(       a5    [        U SS 5      =(       a!    [        U SS 5      =(       a    [        U SS 5      n	[        U R                  U R                  U R                  U R
                  5       H  u  ppUS   nUS S nU	(       aC  [        U R                  UUU R                  U R                  U R                  U R                  S9u  p[        R                  " X/SS9nU
" X5      nU" XS	9nU" UUUS
S9S   nU" UUUS
S9S   nM     U R                  b  U R                   H  nU" X5      nM     U$ )Ns1s2b1b2r   r   r   r   r   dimr   Fr   r   r   )getattrr   r   r   r   r   r   ri   r   r   r   r   r   catr   )r%   r   r   r   r   r   r   r   r   is_freeu_enabledr   r   r   r   res_hidden_states	upsamplers                   r*   r   CrossAttnUpBlock3D.forward  sj    D$% *dD)*dD)* dD)	 	 36LL$//4??D<P<P3
.Ft !8 ;&=cr&B#  3>''!%wwwwwwww40 "II}&HaPM"=7M%mKM &;'=!	
 M &%'=!	
 M;3
H ??&!__	 )- G - r,   )	r   r   r   rO   r   ri   r   r   r   )r   r   r   r   r   rw   Tr   r   r   TFFFFN)NNNNr   N)r/   r0   r1   r2   r   r   r   r   r   r#   r   r   r   r   r   r   r3   r4   r5   s   @r*   rl   rl     s     '0$ $#$#'%(!%*&+%*!&(,+\-\- \- !	\-
 \- \- \- \- "%\- \- \- \- !\- !\- #\-  !\-" ##\-$  $%\-& #'\-( )\-* !+\- \-D (,8<'+1515;||; "'u||S'8!9; u||$	;
  (5;  }; !.; ; !%S#X; 
; ;r,   rl   c                     ^  \ rS rSr          SS\S\S\S\S\S\S\S	\S
\S\S\S\S\S\\   4U 4S jjjr	   SS\
R                  S\\
R                  S4   S\\
R                     S\\   S\S\
R                  4S jjrSrU =r$ )rk   i  rI   rg   rJ   rK   r\   rH   rM   rW   rN   rP   rs   rt   rh   ri   c                   > [         TU ]  5         / n/ n[        U5       HY  nUUS-
  :X  a  UOUnUS:X  a  UOUnUR                  [	        UU-   UUUU
UUU	UUS9
5        UR                  [        UUSU
S95        M[     [        R                  " U5      U l        [        R                  " U5      U l	        U(       a&  [        R                  " [        USUS9/5      U l        OS U l        SU l        Xl        g )	Nr   r   rx   r~   r   Tr   F)r"   r#   r   r   r   r   r   r   r   r   r   r   r   ri   )r%   rI   rg   rJ   rK   r\   rH   rM   rW   rN   rP   rs   rt   rh   ri   r   r   r   r   r   r)   s                       r*   r#   UpBlock3D.__init__  s    " 	
z"A01Z!^0C,89Q!4LNN 25F F!-"/"(#(?"/(;, !  $1	% #6 }}W---
3 mmZtbn-o,pqDO"DO&+#,r,   r   r   .r   r   r   r]   c                 *   [        U SS 5      =(       a5    [        U SS 5      =(       a!    [        U SS 5      =(       a    [        U SS 5      n[        U R                  U R                  5       H}  u  pxUS   n	US S nU(       aC  [	        U R
                  UU	U R                  U R                  U R                  U R                  S9u  p[        R                  " X/SS9nU" X5      nU" XS	9nM     U R                  b  U R                   H  n
U
" X5      nM     U$ )
Nr   r   r   r   r   r   r   r   r   )r   r   r   r   r   ri   r   r   r   r   r   r   r   )r%   r   r   r   r   r   r   r   r   r   r   s              r*   r   UpBlock3D.forwardX  s    D$% *dD)*dD)* dD)	 	 "%T\\4??!CF 7 ;&=cr&B#  3>''!%wwwwwwww40 "II}&HaPM"=7M%mKM) "D, ??&!__	 )- G - r,   )r   r   ri   r   r   )
r   r   r   r   r   rw   Tr   TN)NNr   )r/   r0   r1   r2   r   r   r   r   r   r#   r   r   r   r   r3   r4   r5   s   @r*   rk   rk     s.     '0$ $%(!(,9-9- !9- 	9-
 9- 9- 9- 9- "%9- 9- 9- 9- #9- 9- !9- 9-~ (,'+(||( "'u||S'8!9( u||$	(
  }( ( 
( (r,   rk   c                      ^  \ rS rSr   SS\S\S\S\S\4
U 4S jjjrS\R                  S	\R                  4S
 jr	Sr
U =r$ )MidBlockTemporalDecoderi  rI   rJ   attention_head_dimrH   rV   c                 N  > [         T
U ]  5         / n/ n[        U5       H,  nUS:X  a  UOUn	UR                  [	        U	US SSSSSS95        M.     UR                  [        UX-  USUSSSS	95        [        R                  " U5      U l        [        R                  " U5      U l	        g )
Nr   r   h㈵>r   learnedTrI   rJ   rK   ry   temporal_epsmerge_factormerge_strategyswitch_spatial_to_temporal_mixrw   )	query_dimheadsdim_headry   rV   r   biasresidual_connection)
r"   r#   r   r   r   r   r   r   r   r   )r%   rI   rJ   r   rH   rV   r   r   r   input_channelsr)   s             r*   r#    MidBlockTemporalDecoder.__init__  s     	
z"A,-F[NNN& .!-"&!%!$#,37	 # 	%!7+!1 "$(		
 --
3}}W-r,   r   image_only_indicatorc                     U R                   S   " UUS9n[        U R                   SS  U R                  5       H  u  p4U" U5      nU" UUS9nM     U$ )Nr   r   r   )r   r   r   )r%   r   r   r   r   s        r*   r   MidBlockTemporalDecoder.forward  sc    
 Q!5
  QR 0$//BLF /M"%9M C r,   )r   r   )i   r   Fr/   r0   r1   r2   r   r   r#   r   r   r   r3   r4   r5   s   @r*   r   r     sm    
 #&!&).). ).  	).
 ). ). ).V|| $ll r,   r   c            	          ^  \ rS rSr  SS\S\S\S\4U 4S jjjrS\R                  S\R                  S	\R                  4S
 jr	Sr
U =r$ )UpBlockTemporalDecoderi  rI   rJ   rH   rh   c                 :  > [         TU ]  5         / n[        U5       H,  nUS:X  a  UOUnUR                  [	        UUS SSSSSS95        M.     [
        R                  " U5      U l        U(       a&  [
        R                  " [        USUS9/5      U l	        g S U l	        g )	Nr   r   r   r   r   Tr   r   )
r"   r#   r   r   r   r   r   r   r   r   )	r%   rI   rJ   rH   rh   r   r   r   r)   s	           r*   r#   UpBlockTemporalDecoder.__init__  s     	z"A,-F[NNN& .!-"&!%!$#,37	 # }}W- mmZtbn-o,pqDO"DOr,   r   r   r]   c                     U R                    H
  nU" UUS9nM     U R                  b  U R                   H  nU" U5      nM     U$ )Nr   r   r   )r%   r   r   r   r   s        r*   r   UpBlockTemporalDecoder.forward  sN    
 llF"%9M # ??&!__	 )- 8 - r,   r   r   Tr   r5   s   @r*   r   r     sm    
 !## # 	#
 # #>|| $ll 
	 r,   r   c                      ^  \ rS rSr    SS\S\S\S\\\\   4   S\S\4U 4S jjjr   SS	\R                  S
\
\R                     S\
\R                     S\
\R                     S\R                  4
S jjrSrU =r$ )UNetMidBlockSpatioTemporali  rI   rK   rH   rZ   rO   rQ   c                   > [         T
U ]  5         SU l        XPl        [	        U[
        5      (       a  U/U-  n[        UUUSS9/n/ n[        U5       H>  n	UR                  [        UX-  UXI   US95        UR                  [        UUUSS95        M@     [        R                  " U5      U l        [        R                  " U5      U l        SU l        g )NTr   rI   rJ   rK   ry   rI   rH   rQ   F)r"   r#   r   rO   
isinstancer   r   r   r   r   r   r   r   r   r   )r%   rI   rK   rH   rZ   rO   rQ   r   r   r   r)   s             r*   r#   #UNetMidBlockSpatioTemporal.__init__  s     	#' #6  2C88,H+IJ+V( #'(+	
 
z"A.'6 +;>(; NN& +!,"/	 #( --
3}}W-&+#r,   r   r   r   r   r]   c                 D   U R                   S   " UUUS9n[        U R                  U R                   SS  5       Hc  u  pV[        R                  " 5       (       a1  U R
                  (       a   U" UUUSS9S   nU R                  XaX$5      nMP  U" UUUSS9S   nU" XUS9nMe     U$ )Nr   r   r   Fr   r   r   )r   r   r   r   is_grad_enabledr   _gradient_checkpointing_func)r%   r   r   r   r   r   r   s          r*   r   "UNetMidBlockSpatioTemporal.forward+  s     Q!5
  ab1ABLD$$&&4+F+F $!*?)= %	!
 ! !% A A&Y] t $!*?)= %	!
 ! !'}Qe f! C$ r,   )r   r   r   rO   r   )r   r   r   r   NNN)r/   r0   r1   r2   r   r   r   r#   r   r   r   r   r3   r4   r5   s   @r*   r   r     s    
 ?@#$#'4,4, 4, 	4,
 ',CsO&<4, !4, !4, 4,r (,8<7;|| u||$  (5	
 'u||4 
 r,   r   c                      ^  \ rS rSr  SS\S\S\S\S\4
U 4S jjjr  SS\R                  S	\	\R                     S
\	\R                     S\
\R                  \
\R                  S4   4   4S jjrSrU =r$ )r`   iM  rI   rJ   rK   rH   rL   c           
      B  > [         TU ]  5         / n[        U5       H(  nUS:X  a  UOUnUR                  [	        UUUSS95        M*     [
        R                  " U5      U l        U(       a'  [
        R                  " [        USUSS9/5      U l	        OS U l	        SU l
        g )Nr   r   r   Tr   )r   rJ   r   F)r"   r#   r   r   r   r   r   r   r   r   r   )	r%   rI   rJ   rK   rH   rL   r   r   r)   s	           r*   r#    DownBlockSpatioTemporal.__init__N  s     	z"A)*a+\KNN& +!-"/	 # }}W- " $!%%1!		!D !%D&+#r,   r   r   r   r]   .c                     SnU R                    HM  n[        R                  " 5       (       a$  U R                  (       a  U R	                  XQX#5      nOU" XUS9nXA4-   nMO     U R
                  b   U R
                   H  nU" U5      nM     XA4-   nX4$ )Nr-   r   )r   r   r  r   r  r   )r%   r   r   r   r   r   r   s          r*   r   DownBlockSpatioTemporal.forwardv  s     llF$$&&4+F+F $ A A&Y] t &}Qe f),<<M # (#00 +M :  1 *,<<M++r,   )r   r   r   r   )NN)r/   r0   r1   r2   r   r   r#   r   r   r   r   r   r3   r4   r5   s   @r*   r`   r`   M  s     #&,&, &, 	&,
 &, &, &,V (,7;	,||, u||$, 'u||4	,
 
u||U5<<#455	6, ,r,   r`   c                   0  ^  \ rS rSr     SS\S\S\S\S\\\\   4   S\S\S	\4U 4S
 jjjr   SS\	R                  S\\	R                     S\\	R                     S\\	R                     S\\	R                  \\	R                  S4   4   4
S jjrSrU =r$ )ra   i  rI   rJ   rK   rH   rZ   rO   rQ   rL   c	                   > [         TU ]  5         / n	/ n
SU l        X`l        [	        U[
        5      (       a  U/U-  n[        U5       HH  nUS:X  a  UOUnU	R                  [        UUUSS95        U
R                  [        UX&-  UX[   US95        MJ     [        R                  " U
5      U l        [        R                  " U	5      U l        U(       a(  [        R                  " [        USUSSS9/5      U l        OS U l        S	U l        g )
NTr   r   r   r  r   r   r   F)r"   r#   r   rO   r  r   r   r   r   r   r   r   r   r   r   r   r   )r%   rI   rJ   rK   rH   rZ   rO   rQ   rL   r   r   r   r)   s               r*   r#   )CrossAttnDownBlockSpatioTemporal.__init__  s    	
#' #6 2C88,H+IJ+V(z"A)*a+\KNN& +!-"/	 .' 7 ,;>(; #( --
3}}W- " $!%%1 !!
!D !%D&+#r,   r   r   r   r   r]   .c                    Sn[        [        U R                  U R                  5      5      nU Hg  u  px[        R
                  " 5       (       a0  U R                  (       a  U R                  XqX$5      nU" UUUSS9S   nOU" XUS9nU" UUUSS9S   nXQ4-   nMi     U R                  b   U R                   H  n	U	" U5      nM     XQ4-   nX4$ )Nr-   Fr  r   r   )	listr   r   r   r   r  r   r  r   )
r%   r   r   r   r   r   blocksr   r   r   s
             r*   r   (CrossAttnDownBlockSpatioTemporal.forward  s     c$,,89"LF$$&&4+F+F $ A A&Y] t $!*?)= %	!
 ! !'}Qe f $!*?)= %	!
 ! *,<<M' #* (#00 +M :  1 *,<<M++r,   )r   r   r   r   rO   r   )r   r   r   r   Tr	  )r/   r0   r1   r2   r   r   r   r   r#   r   r   r   r   r3   r4   r5   s   @r*   ra   ra     s     ?@#$#'#:,:, :, 	:,
 :, ',CsO&<:, !:, !:, :, :,~ (,8<7;%,||%, u||$%,  (5	%,
 'u||4%, 
u||U5<<#455	6%, %,r,   ra   c                   
  ^  \ rS rSr    SS\S\S\S\S\\   S\S\S	\4U 4S
 jjjr   SS\	R                  S\\	R                  S4   S\\	R                     S\\	R                     S\\   S\	R                  4S jjrSrU =r$ )rm   i  rI   rg   rJ   rK   ri   rH   rM   rh   c	           
      h  > [         TU ]  5         / n	[        U5       H6  n
XS-
  :X  a  UOUnU
S:X  a  UOUnU	R                  [	        X-   UUUS95        M8     [
        R                  " U	5      U l        U(       a&  [
        R                  " [        USUS9/5      U l	        OS U l	        SU l
        XPl        g )Nr   r   r   Tr   F)r"   r#   r   r   r   r   r   r   r   r   r   ri   )r%   rI   rg   rJ   rK   ri   rH   rM   rh   r   r   r   r   r)   s                r*   r#   UpBlockSpatioTemporal.__init__  s     	z"A01!^0C,89Q!4LNN& 2 F!-"/"		 # }}W- mmZtbn-o,pqDO"DO&+#,r,   r   r   .r   r   r   r]   c                 H   U R                    Hi  nUS   nUS S n[        R                  " X/SS9n[        R                  " 5       (       a%  U R                  (       a  U R                  XaX45      nMb  U" XUS9nMk     U R                  b  U R                   H  nU" X5      nM     U$ )Nr   r   r   r   )r   r   r   r  r   r  r   )	r%   r   r   r   r   r   r   r   r   s	            r*   r   UpBlockSpatioTemporal.forward  s     llF 7 ;&=cr&B#!II}&HaPM$$&&4+F+F $ A A&Y] t &}Qe f # ??&!__	 )- G - r,   )r   r   ri   r   )Nr   r   Tr	  )r/   r0   r1   r2   r   r   r   r   r#   r   r   r   r   r3   r4   r5   s   @r*   rm   rm     s     )- !#-#- !#- 	#-
 #- !#- #- #- #- #-R (,7;'+|| "'u||S'8!9 u||$	
 'u||4  } 
 r,   rm   c                   L  ^  \ rS rSr       SS\S\S\S\S\\   S\S\\\\   4   S	\S
\S\S\	4U 4S jjjr
    SS\R                  S\\R                  S4   S\\R                     S\\R                     S\\R                     S\\   S\R                  4S jjrSrU =r$ )rn   i4  rI   rJ   rg   rK   ri   rH   rZ   rM   rO   rQ   rh   c                 4  > [         TU ]  5         / n/ nSU l        Xl        [	        U[
        5      (       a  U/U-  n[        U5       HW  nXS-
  :X  a  UOUnUS:X  a  UOUnUR                  [        UU-   UUUS95        UR                  [        U	X)-  UX~   U
S95        MY     [        R                  " U5      U l        [        R                  " U5      U l        U(       a&  [        R                  " [        USUS9/5      U l        OS U l        SU l        XPl        g )NTr   r   r   r  r   F)r"   r#   r   rO   r  r   r   r   r   r   r   r   r   r   r   r   r   ri   )r%   rI   rJ   rg   rK   ri   rH   rZ   rM   rO   rQ   rh   r   r   r   r   r   r)   s                    r*   r#   'CrossAttnUpBlockSpatioTemporal.__init__5  s    	
#' #6 2C88,H+IJ+V(z"A01!^0C,89Q!4LNN& 25F F!-"/"	 .' 7 ,;>(; #, --
3}}W- mmZtbn-o,pqDO"DO&+#,r,   r   r   .r   r   r   r   r]   c                    [        U R                  U R                  5       H  u  pxUS   n	US S n[        R                  " X/SS9n[        R
                  " 5       (       a1  U R                  (       a   U R                  XqX55      nU" UUUSS9S   nMp  U" XUS9nU" UUUSS9S   nM     U R                  b  U R                   H  n
U
" X5      nM     U$ )Nr   r   r   Fr  r   r   )	r   r   r   r   r   r  r   r  r   )r%   r   r   r   r   r   r   r   r   r   r   s              r*   r   &CrossAttnUpBlockSpatioTemporal.forwardn  s      doo>LF 7 ;&=cr&B#!II}&HaPM$$&&4+F+F $ A A&Y] t $!*?)= %	!
 ! !'}Qe f $!*?)= %	!
 !# ?0 ??&!__	 )- G - r,   )r   r   r   rO   r   ri   r   )Nr   r   r   r   r   T)NNNN)r/   r0   r1   r2   r   r   r   r   r   r   r#   r   r   r   r3   r4   r5   s   @r*   rn   rn   4  s3    )-?@ #$#'!7-7- 7- !	7-
 7- !7- 7- ',CsO&<7- 7- !7- !7- 7- 7-z (,8<7;'+%||% "'u||S'8!9% u||$	%
  (5% 'u||4%  }% 
% %r,   rn   )NNNFTFFr      rw   r   r   r   )NNNFTFFr   r   Nrw   r   r   r   )6typingr   r   r   r   r   r   r   utilsr
   r   utils.torch_utilsr   	attentionr   r   r   r   r   r   r   transformers.transformer_2dr   !transformers.transformer_temporalr   r   unet_motion_modelr   r   r   r   r   
get_loggerr/   loggerr   r   r   r   re   rp   Modulerr   r_   r^   rl   rk   r   r   r   r`   ra   rm   rn   r-   r,   r*   <module>r+     s5   5 4   ' , !  =  
		H	%*o **7 **M **3 **"= *" $()-(,!&"&!&"#,()#%;<DE-Y;Y;Y; Y; 	Y;
 Y; Y; Y; Y; Y; C=Y; "#Y; !Y; Y;  Y; Y;  !Y;" !#Y;$ #&%Y;& !'Y;( #(U3Z"8)Y;* ,1eCj+A+Y;, -Y;. (/Y;N %)#')-!&"&!&"#,()26#%;<DE1a9a9a9 a9 	a9
 a9 a9 a9 a9 a9 a9 SMa9 C=a9 "#a9 a9  a9  !a9" #a9$ !%a9& #&'a9( #+3-)a9* !+a9, #(U3Z"8-a9. ,1eCj+A/a90 1a92 &3a9HCbii CLK,299 K,\V,")) V,rZ Zzd		 dN<bii <~/RYY /dV Vr>,bii >,Bb,ryy b,J>BII >B_RYY _r,   