
    9i                         S SK r S SKrSSKJrJrJrJr  SSKJrJ	r	  / SQr
S r   SS jrS r " S	 S
\5      r " S S\5      r " S S\5      rg)    N   )
DPM_SolverNoiseScheduleVPmodel_wrappermodel_wrapper_guided_diffusion)#discretized_gaussian_log_likelihoodkl_divergence)GaussianDiffusionbeta_scheduleGaussianDiffusion_stylec                     UR                  S5      4SUR                  S-
  -  -   nU R                  UR                  :w  a  U R                  UR                  5      n X   R	                  U5      R                  U5      $ )z?Index tensor using t and format the output according to x.
    r   r   r   )sizendimdevicetoview)tensortxshapes       u/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/multi_modal/videocomposer/diffusion.py_ir      sc     VVAYMEQVVaZ00E}} 188$9>>% ##A&&    c           
         U S:X  aE  SU-  nU=(       d    US-  nU=(       d    US-  n[         R                  " X#U[         R                  S9$ U S:X  a.  [         R                  " US-  US-  U[         R                  S9S-  $ U S	:X  aD  U=(       d    S
nU=(       d    Sn[         R                  " US-  US-  U[         R                  S9S-  $ U S:X  as  / n[        U5       H?  nXa-  nUS-   U-  nS n	UR	                  [        SU	" U5      U	" U5      -  -
  S5      5        MA     [         R                  " U[         R                  S9$ [        SU  35      e)a  
This code defines a function beta_schedule that generates a sequence of beta
values based on the given input parameters.
These beta values can be used in video diffusion processes. The function has the following parameters:
    schedule(str): Determines the type of beta schedule to be generated.
        It can be 'linear', 'linear_sd', 'quadratic', or 'cosine'.
    num_timesteps(int, optional): The number of timesteps for the generated beta schedule. Default is 1000.
    init_beta(float, optional): The initial beta value.
        If not provided, a default value is used based on the chosen schedule.
    last_beta(float, optional): The final beta value.
        If not provided, a default value is used based on the chosen schedule.
The function returns a PyTorch tensor containing the generated beta values.
The beta schedule is determined by the schedule parameter:
    1.Linear: Generates a linear sequence of beta values betweeninit_betaandlast_beta.
    2.Linear_sd: Generates a linear sequence of beta values between the square root of
        init_beta and the square root oflast_beta, and then squares the result.
    3.Quadratic: Similar to the 'linear_sd' schedule, but with different default values forinit_betaandlast_beta.
    4.Cosine: Generates a sequence of beta values based on a cosine function,
        ensuring the values are between 0 and 0.999.
If an unsupported schedule is provided, a ValueError is raised with a message indicating the issue.
linear     @@-C6?g{Gz?dtype	linear_sd      ?   	quadraticg~jtX?g+?cosiner   c                 h    [         R                  " U S-   S-  [         R                  -  S-  5      S-  $ )NgMb?gT㥛 ?r#   )mathcospi)us    r   <lambda>beta_schedule.<locals>.<lambda>E   s/    488Ue#dgg-13456r         ?g+?zUnsupported schedule: )torchlinspacefloat64rangeappendminr   
ValueError)
schedulenum_timesteps	init_beta	last_betascalebetasstept1t2fns
             r   r   r      s]   2 8&/	-	~~-u}}F 	F	[	 ~~sNIsNM--!"#$ 	$ 
[	 '	'	~~sNIsNM--!"#$ 	$ 
X	-(D%B(m+B6BLLS2b6BrF?2E:; ) ||E771(<==r   c                    SS K nUR                  5       n[        U R                  5       5      nU H  nUR	                  S5      S:  d  M  UR                  S5      S   nUS;   a  UR                  SS5      nU(       au  UR	                  S5      S:  a  UR                  SS	5      nUR	                  S
5      S:  a  UR                  S
S5      nUR	                  S5      S:  a  UR                  SS5      nX   X6'   M     U$ )Nr   diffusion_modelzdiffusion_model.)zinput_blocks.3.0.op.weightzinput_blocks.3.0.op.biaszinput_blocks.6.0.op.weightzinput_blocks.6.0.op.biaszinput_blocks.9.0.op.weightzinput_blocks.9.0.op.biasz0.opopzmiddle_block.2zmiddle_block.3zoutput_blocks.5.2zoutput_blocks.5.3zoutput_blocks.8.2zoutput_blocks.8.3)collectionsOrderedDictlistkeysfindsplitreplace)
state_dicttemporal_attentionrC   sd_newrF   kk_news          r    load_stable_diffusion_pretrainedrO   M   s    $$&F
!"D66#$)GG./3E  
 fd3!::./14!MM*:<LME::12a7!MM*=*=?E::12a7!MM*=*=?E&MFM% ( Mr   c                   *    \ rS rSrSS jrS rS rSrg)AddGaussianNoisei   c                     X l         Xl        g N)stdmean)selfrV   rU   s      r   __init__AddGaussianNoise.__init__k   s    	r   c                 n   [        U[        R                  5      (       d   eUR                  nUR	                  5       (       d  UR                  [        R                  5      nXR                  [        R                  " U5      -  -   U R                  -   nUR                  U:w  a  UR                  U5      nU$ rT   )

isinstancer.   Tensorr    is_floating_pointr   float32rU   
randn_likerV   )rW   imgr    outs       r   __call__AddGaussianNoise.__call__o   s    #u||,,,,		$$&&&&'CHHu//444tyy@99&&-C
r   c                 |    U R                   R                  SR                  U R                  U R                  5      -   $ )Nz(mean={0}, std={1}))	__class____name__formatrV   rU   )rW   s    r   __repr__AddGaussianNoise.__repr__y   s4    ~~&&)>)E)EIItxx*! ! 	!r   )rV   rU   N)        g?)rf   
__module____qualname____firstlineno__rX   rb   rh   __static_attributes__ r   r   rQ   rQ   i   s    !r   rQ   c                      \ rS rSr     SS jrSS jrS rS r\R                  " 5       0 SSSS4S j5       r
\R                  " 5       0 SSSS4S	 j5       r0 SSS4S
 jr\R                  " 5       0 SSSSSS4S j5       r\R                  " 5       0 SSSSSS4S j5       r\R                  " 5       0 SSSS4S j5       r\R                  " 5       0 SSSS4S j5       r\R                  " 5       0 SSSSS4S j5       r\R                  " 5       0 SSSSS4S j5       r0 SSS4S jr0 SS4S jr\R                  " 5       0 SS4S j5       rS rSrg)r
   ~   Fc                    [        U[        R                  5      (       d#  [        R                  " U[        R                  S9n[        U5      S:  a  [        U5      S::  d   eUS;   d   eUS;   d   eUS;   d   eXl        [        U5      U l	        X l
        X0l        X@l        XPl        X`l        SU R                  -
  n[        R                  " USS9U l        [        R"                  " UR%                  S/5      U R                   S S /5      U l        [        R"                  " U R                   SS  UR)                  S/5      /5      U l        [        R,                  " U R                   5      U l        [        R,                  " S	U R                   -
  5      U l        [        R2                  " S	U R                   -
  5      U l        [        R,                  " S	U R                   -  5      U l        [        R,                  " S	U R                   -  S-
  5      U l        US	U R&                  -
  -  S	U R                   -
  -  U l        [        R2                  " U R:                  R=                  S
5      5      U l        U[        R,                  " U R&                  5      -  S	U R                   -
  -  U l         S	U R&                  -
  [        R,                  " U5      -  S	U R                   -
  -  U l!        g )Nr   r   r   x0x_{t-1}epslearnedlearned_rangefixed_largefixed_small)mserescaled_mseklrescaled_kll1rescaled_l1charbonnierdimrA   r-   #B;)"r[   r.   DoubleTensorr   r0   r3   maxr:   lenr6   	mean_typevar_type	loss_typeepsilonrescale_timestepscumprodalphas_cumprodcatnew_onesalphas_cumprod_prev	new_zerosalphas_cumprod_nextsqrtsqrt_alphas_cumprodsqrt_one_minus_alphas_cumprodloglog_one_minus_alphas_cumprodsqrt_recip_alphas_cumprodsqrt_recipm1_alphas_cumprodposterior_varianceclampposterior_log_variance_clippedposterior_mean_coef1posterior_mean_coef2)rW   r:   r   r   r   r   r   alphass           r   rX   GaussianDiffusion.__init__   s    %!3!344LLemm<E5zA~#e*/114444 
 
 	
 
  
 
 	
 
 
 Z" "!2 TZZ#mmF:#(99__aS!4#6#6s#;<$> #(99  $qc"$$% 
 $)::d.A.A#B -2ZZ:>:M:M9N .O*,1IIc8<8K8K7L -M)).C$:M:M4M)N&+0::cD<O<O6O897: ,;( #(31I1I+I"J$%%%#'.3ii##))%0/2+$)EJJ$$-& %&),t/B/B)B%D! $***ejj.@%Ad)))%+!r   Nc                     Uc  [         R                  " U5      OUn[        U R                  X!5      U-  [        U R                  X!5      U-  -   $ z"Sample from q(x_t | x_0).
        )r.   r_   r   r   r   )rW   rt   r   noises       r   q_sampleGaussianDiffusion.q_sample   sP     ).  $5$**A2R7$44a<uDE 	Er   c                     [        U R                  X!5      U-  n[        SU R                  -
  X!5      n[        U R                  X!5      nX4U4$ z&Distribution of q(x_t | x_0).
        r-   r   r   r   r   rW   rt   r   muvarlog_vars         r   q_mean_variance!GaussianDiffusion.q_mean_variance   O     ((!025t***A2T66>r   c                     [        U R                  X25      U-  [        U R                  X25      U-  -   n[        U R                  X25      n[        U R                  X25      nXEU4$ z/Distribution of q(x_{t-1} | x_t, x_0).
        r   r   r   r   r   rW   rt   xtr   r   r   r   s          r   q_posterior_mean_variance+GaussianDiffusion.q_posterior_mean_variance   i     ))11B6%%q:.02:3 3((!0T88!@r   c	           	         U R                  XX4XVU5      u  pp[        R                  " U5      nUR                  S5      R	                  5       R
                  " S/SUR                  S-
  -  Q76 nUb;  U" XR                  U5      40 UD6nU	R	                  5       XR	                  5       -  -   n	X[        R                  " SU-  5      -  U-  -   nUU4$ zSample from p(x_{t-1} | x_t).
- condition_fn: for classifier-based guidance (guided-diffusion).
- guide_scale: for classifier-free guidance (glide/dalle-2).
r   rA   r   r   r"   )	p_mean_variancer.   r_   nefloatr   r   _scale_timestepsexp)rW   r   r   modelmodel_kwargsr   
percentilecondition_fnguide_scaler   r   r   rt   r   maskgradxt_1s                    r   p_sampleGaussianDiffusion.p_sample   s      $33B5494? A
   $ttAw}}##ww{ #$9$9!$<MMDcJJL00B599S7]33e;;Rxr   c                 &   UR                  S5      nUn	[        R                  " U R                  5      R	                  S5       HJ  n
[        R
                  " U4U
[        R                  U	R                  S9nU R                  XX#UXVU5      u  pML     U	$ zLSample from p(x_{t-1} | x_t) p(x_{t-2} | x_{t-1}) ... p(x_0 | x_1).
        r   r    r   	r   r.   aranger6   flipfulllongr   r   rW   r   r   r   r   r   r   r   br   r;   r   _s                r   p_sample_loopGaussianDiffusion.p_sample_loop        JJqM LL!3!3499!<D

A5$ejjKAMM"e",KIEB = 	r   c           	         Uc  U" XR                  U5      40 UD6nO[        U[        5      (       a  [        U5      S:X  d   eU" XR                  U5      40 US   D6n	U" XR                  U5      40 US   D6n
U R                  R                  S5      (       a  U	R                  S5      OU	R                  S5      S-  n[        R                  " U
SS2SU24   UU	SS2SU24   U
SS2SU24   -
  -  -   U	SS2US24   /SS9nU R                  S:X  a*  UR                  SSS9u  p[        R                  " U5      nGO/U R                  S:X  a  UR                  SSS9u  p[        U R                  X!5      n[        [        R                  " U R                  5      X!5      nUS-   S	-  nUU-  SU-
  U-  -   n[        R                  " U5      nOU R                  S
:X  aT  [        [        R                  " U R                  SS U R                  SS /5      UU5      n[        R                  " U5      nO<U R                  S:X  a,  [        U R                  X!5      n[        U R                  X!5      nU R                   S:X  aF  Un[        SU R"                  -  X!5      U-  [        U R$                  U R"                  -  X!5      U-  -
  nOU R                   S:X  a  UnU R'                  UX5      u  n  nOYU R                   S:X  aI  [        U R(                  X!5      U-  [        U R*                  X!5      U-  -
  nU R'                  UX5      u  n  nUb  US:  a  US::  d   e[        R,                  " WR/                  S5      R1                  5       USS9R3                  S5      R5                  SSSS5      n[        R6                  " U[        R8                  " U* U5      5      U-  nOUb  WR;                  U* U5      nWWWW4$ )*Distribution of p(x_{t-1} | x_t).
        Nr#   r   r   fixedr   rx   ry          @rz   r{   ru   r-   rt   rv   rA   )r   r[   rE   r   r   
startswithr   r.   r   chunkr   r   r   r   r:   r   r   r   r   r   r   r   quantileflattenabsclamp_r   r3   r   r   )rW   r   r   r   r   r   r   r   ra   y_outu_outr   r   r   fractionmin_log_varmax_log_varr   rt   r   ss                        r   r   !GaussianDiffusion.p_mean_variance  s    11!4EEC lD11c,6G16LLL"33A6J,q/JE"33A6J,q/JE#'==#;#;$ $%**Q-#jjmq0 ))!TcT'N[1dsd7^eAttGn4&6 6!ST'N
 C ==I%99QA9.LC))G$C]]o-IIaQI/MCT@@!HKUYYtzz2A:K 1+H,H/KKG))G$C]]m+		4221Q7ABHI1C iinG]]m+T,,a4C<<aDG >>Y&BC$333Q;b@D--0I0II1QTVVWB^^t#B55b"@HB1^^u$D22A:R?D44a<sBCB55b"@HB1 !>jAo55

1!!#Zvc{44Aq!#4  1eiiB/014B5&%(B3##r      rj   c           	      &   U R                   U	-  nU R                  XX4UXh5      u      pUb  [        U R                  X!5      n[        U R                  X!5      U-  U-
  [        U R
                  X!5      -  nUSU-
  R                  5       U" XR                  U5      40 UD6-  -
  n[        U R                  X!5      U-  [        U R
                  X!5      U-  -
  n[        U R                  X!5      U-  U-
  [        U R
                  X!5      -  n[        U R                  X!5      n[        U R                  X+-
  R                  S5      U5      nU
[        R                  " SU-
  SU-
  -  SUU-  -
  -  5      -  n[        R                  " U5      n[        R                  " SU-
  US-  -
  5      U-  nUR                  S5      R                  5       R                  " S/SUR                  S-
  -  Q76 n[        R                  " U5      U-  U-   UU-  U-  -   nUU4$ )Sample from p(x_{t-1} | x_t) using DDIM.
- condition_fn: for classifier-based guidance (guided-diffusion).
- guide_scale: for classifier-free guidance (glide/dalle-2).
r   r   r#   rA   r   )r6   r   r   r   r   r   r   r   r   r.   r_   r   r   r   r   )rW   r   r   r   r   r   r   r   r   ddim_timestepsetastrider   rt   alpharv   r   alphas_prevsigmasr   	directionr   r   s                          r   ddim_sampleGaussianDiffusion.ddim_sampleO  s     ##~5 **2%u+5D1a#t**A2Ed44a<rABFT55q=>CU((*\))!,.>0<.> > >C D22A:R?D44a<sBCB $00!82=B1119:D''/,,qz.@.@.CRHuzz1{?q6z"B#$v';#;#= > >   $JJq;:;cA	ttAw}}##BA%277Q;*?Azz+&+i7$-%:OORxr   c
                    UR                  S5      n
UnS[        R                  " SU R                  U R                  U-  5      -   R	                  SU R                  S-
  5      R                  S5      nU HK  n[        R                  " U
4U[        R                  UR                  S9nU R                  XX#UXVUX5
      u  pMM     U$ Nr   r   r   )
r   r.   r   r6   r   r   r   r   r   r   )rW   r   r   r   r   r   r   r   r   r   r   r   stepsr;   r   r   s                   r   ddim_sample_loop"GaussianDiffusion.ddim_sample_loop  s     JJqM U\\!T%7%7"&"4"4"FH HIN&'););a)?JAAEa 	 D

A5$ejjKA$$RE%/{%3:EB 
 	r   c	           	         U R                   U-  n	U R                  XX4UXg5      u      p[        U R                  X!5      U-  U-
  [        U R                  X!5      -  n[        [
        R                  " U R                  U R                  R                  S/5      /5      X)-   R                  SU R                   5      U5      n[
        R                  " U5      U-  [
        R                  " SU-
  5      U-  -   nX4$ )MSample from p(x_{t+1} | x_t) using DDIM reverse ODE (deterministic).
        r   r   )r6   r   r   r   r   r.   r   r   r   r   r   )rW   r   r   r   r   r   r   r   r   r   r   rt   rv   alphas_nextr   s                  r   ddim_reverse_sample%GaussianDiffusion.ddim_reverse_sample  s     ##~5 **2%u+5D1a $00!82=B1119:II$$$$..s356 Zq$"4"45r	; ZZ$r)EJJq;,G#,MMvr   c                 *   UR                  S5      nUn	[        R                  " SU R                  U R                  U-  5      n
U
 HJ  n[        R                  " U4U[        R
                  U	R                  S9nU R                  XX#UXVU5      u  pML     U	$ )Nr   r   )r   r.   r   r6   r   r   r   r   )rW   rt   r   r   r   r   r   r   r   r   r   r;   r   r   s                 r   ddim_reverse_sample_loop*GaussianDiffusion.ddim_reverse_sample_loop  s     GGAJ Q 2 2!//>ACD

A5$ejjKA,,RE-7-;=EB 
 	r   c
                 D  ^ ^^^^^^^^ T R                   U	-  mUUUUUUU 4S jn
U UU4S jnU
" TU5      n[        [        5      S:X  a,  U" X5      u  pU
" XT-
  R                  S5      5      nX-   S-  nO[        [        5      S:X  a  SU-  [        S   -
  S-  nOx[        [        5      S:X  a#  S	U-  S
[        S   -  -
  S[        S   -  -   S-  nOB[        [        5      S:  a/  SU-  S[        S   -  -
  S[        S   -  -   S[        S   -  -
  S-  nU" WU5      u  pXU4$ )Sample from p(x_{t-1} | x_t) using PLMS.
- condition_fn: for classifier-based guidance (guided-diffusion).
- guide_scale: for classifier-free guidance (glide/dalle-2).
c           	         > TR                  XT	T
TTT5      u      p#Tb  [        TR                  X5      n[        TR                  X5      U -  U-
  [        TR                  X5      -  nUSU-
  R                  5       T" U TR                  U5      40 T
D6-  -
  n[        TR                  X5      U -  [        TR                  X5      U-  -
  n[        TR                  X5      U -  U-
  [        TR                  X5      -  nU$ Nr   )r   r   r   r   r   r   r   )r   r   r   rt   r   rv   r   r   r   r   r   r   rW   s         r   compute_eps2GaussianDiffusion.plms_sample.<locals>.compute_eps  s    ..re\/4j+OKAq! '4..6$88!@2EJ991ABQY,,.--a02B4@2B B B 66>C88!@3FG d44a<rABFT55q=>CJr   c                 6  > [        TR                  UT5      T-  [        TR                  UT5      U -  -
  n[        TR                  UT-
  R	                  S5      T5      n[
        R                  " SU-
  5      U -  n[
        R                  " U5      U-  U-   nXR4$ )Nr   r   )r   r   r   r   r   r.   r   )	rv   r   rt   r   r   r   rW   r   r   s	         r   
compute_x01GaussianDiffusion.plms_sample.<locals>.compute_x0  s    D22Ar:R?D44a<sBCB T001v:2D2DQ2GLK

1{?3c9I::k*R/);D8Or   r   r   r      rA   r#                  (@7   ;   %   	         8@)r6   r   	eps_cacher   )rW   r   r   r   r   r   r   r   r   plms_timestepsr  r
  rv   r   rt   eps_next	eps_primer   s   `` ``````        @r   plms_sampleGaussianDiffusion.plms_sample  s1    ##~5	 	0		 "a y>Q!#)HD"4f*););A)>?H3.I^q S9R=0C7I^q cB2$66y},-045I^q cB2$66im9KKy},-045Ii+}r   c	                    UR                  S5      n	Un
S[        R                  " SU R                  U R                  U-  5      -   R	                  SU R                  S-
  5      R                  S5      n/ nU H  n[        R                  " U	4U[        R                  U
R                  S9nU R                  XX#UXVXxU5
      u  pnUR                  U5        [        U5      S:  d  Mn  UR                  S5        M     U
$ Nr   r   r      )r   r.   r   r6   r   r   r   r   r   r  r2   r   pop)rW   r   r   r   r   r   r   r   r  r   r   r   r  r;   r   r   rv   s                    r   plms_sample_loop"GaussianDiffusion.plms_sample_loop  s     JJqM U\\!T%7%7"&"4"4"FH HIN&'););a)?JAAEa 	 	D

A5$ejjKA))"e*4*5*35JB3 S!9~"a   	r   c                   ^ Uc  [         R                  " U5      OUnU R                  XUS9nU R                  S;   a5  U R	                  XX#U5      u  pU R                  S:X  a  XR
                  -  n	U	$ U R                  S;   Ga  U" XR                  U5      40 UD6nSnU R                  S;   a  UR                  SSS	9u  p[         R                  " UR                  5       U/SS	9mU R	                  XUU4S
 jS9u  pU R                  R                  S5      (       a  XR
                  -  S-  nUUU R                  XU5      S   S.U R                     nX-
  R                  U R                  R                  S5      (       a  SOS5      R!                  5       R#                  S5      R%                  SS	9n	Ub  X-  n	U(       a  U R                  S:X  a|  UR&                  S   S:  ai  [)        U R*                  X(5      U-  [)        U R,                  X(5      U-  -
  nSUR/                  SS	9R#                  S5      R%                  SS	9S-   -  nU	U-   n	X-   n	U	$ U R                  S;   Ga   U" XR                  U5      40 UD6nSnU R                  S;   a  UR                  SSS	9u  p[         R                  " UR                  5       U/SS	9mU R	                  XUU4S jS9u  pU R                  R                  S5      (       a  XR
                  -  S-  nUUU R                  XU5      S   S.U R                     n[         R0                  " X-
  S-  U R2                  -   5      n	Ub  X-  n	U	R#                  S5      R%                  SS	9n	X-   n	W	$ )Nr   r~   r   r   r|   r}   r   r   rj   rx   ry   r#   r   r   c                     > T$ rT   ro   argskwargsfrozens     r   r+   (GaussianDiffusion.loss.<locals>.<lambda>Z      Vr   )r   	rescaled_r   r   rv   rt   ru   r   rv   gMbP?r   )r   c                     > T$ rT   ro   r*  s     r   r+   r.    r/  r   )r.   r_   r   r   variational_lower_boundr6   r   r   r   r   detachr   r   r   powendswithr   r   rV   r   r   r   r   rU   r   r   )rW   rt   r   r   r   r   weightuse_div_lossr   lossr   ra   loss_vlbr   targetx0_div_lossr-  s                    @r   r9  GaussianDiffusion.loss;  s    =   &+ 	]]2]. >>2222213?AGD~~.000J I ^^  / /11!4EEC H}} !# #99QA9.JJL#$ #::A%C ; E>>,,[99'*<*<<vEH 99"!DQG nn	F
 L%%4>>+B+B4+H+Haa ((+ggaj! !} % 7BHHQK!O 77?"Dt77?#EF !GGGN**1-22q29D@Bh ?D6 5 ^^.11!4EEC H}} <<99QA9.CJJL##6A>"::A%C ; E>>,,[99'*<*<<vEH 99"!DQG nn	F
 ::s|a/$,,>?D!}<<?''A'.D ?Dr   c                    U R                  XU5      u  pn
U R                  X#XEXg5      u  pp[        XX5      nUR                  S5      R	                  SS9[
        R                  " S5      -  n[        XSU-  S9* nUR                  S5      R	                  SS9[
        R                  " S5      -  n[        R                  " US:H  X5      nX4$ )Nr   r   r   r"   rV   	log_scaler   )
r   r   r	   r   rV   r'   r   r   r.   where)rW   rt   r   r   r   r   r   r   mu1r   log_var1mu2log_var2r~   nllvlbs                   r   r3  )GaussianDiffusion.variational_lower_bound  s      99"!D#33B549 G 3#8ZZ]A&#6 3C(N4 4kk!n!!a!(488C=8 kk!q&#*wr   c           
         UR                  S5      n/ / / S.n[        R                  " U R                  5      R	                  S5       GH9  n[        R
                  " U4U[        R                  UR                  S9n	[        R                  " U5      n
U R                  XU
5      nU R                  XXX4U5      u  p[        U R                  X5      U-  U-
  [        U R                  X5      -  nUS   R                  U5        US   R                  X-
  R                  5       R!                  S5      R#                  SS95        US   R                  X-
  R                  5       R!                  S5      R#                  SS95        GM<     UR%                  5        VVs0 s H  u  nnU[        R&                  " USS9_M     nnnU R)                  UW	5      u  nnn[+        UU[        R,                  " U5      [        R,                  " U5      5      nUR!                  S5      R#                  SS9[.        R0                  " S	5      -  nUUS
'   US   R3                  SS9U-   US'   U$ s  snnf zNCompute the entire variational lower bound, measured in bits-per-dim.
        r   )rH  r|   x0_mser   rH  rL  r   r   r|   r   prior_bits_per_dimtotal_bits_per_dimr   r.   r   r6   r   r   r   r   r_   r   r3  r   r   r   r2   squarer   rV   itemsstackr   r	   
zeros_liker'   r   sumrW   rt   r   r   r   r   r   metricsr;   r   r   r   rH  pred_x0rv   rM   vr   r   r   kl_priors                        r   variational_lower_bound_loop.GaussianDiffusion.variational_lower_bound_loop  1    GGAJR26 LL!3!3499!<D

A5$ejjKA$$R(Ere,B77,zCLC d44a<rABFT55q=>C EN!!#&H$$%%'//277A7>@EN!!$$&..q16616=?! =$ 9@H11ekk!++H --b!4Aw We.>.>r.B!&!1!1'!:<##A&+++2TXXc]B )1$%(/(:(:q(:(AH(L$% I   #Ic                 h    U R                   (       a   UR                  5       S-  U R                  -  $ U$ Nr   r   r   r6   rW   r   s     r   r   "GaussianDiffusion._scale_timesteps  ,    !!779v%(:(:::r   )r   r   r   r:   r   r   r   r   r6   r   r   r   r   r   r   r   r   r   r   )rv   ry   r|   g-q=FrT   )rf   rk   rl   rm   rX   r   r   r   r.   no_gradr   r   r   r   r   r   r  r  r"  r9  r3  rZ  r   rn   ro   r   r   r
   r
   ~   s    !) #(7+rE   ]]_
 ! "! < ]]_ $& !%#'"& 2 &("#'$(G$R ]]_
 "$#!% $#%- -^ ]]_ ')#$(&*%)(*  4 ]]_
 *,"&'+(,+- < ]]_ /1'+,0-102 , ]]_
 "$#!% $#%G GR ]]_ ')#$(&*%)(* H Vz .0&*+/4 ]]_ 35+/04* *Xr   r
   c                      \ rS rSr    S%S jrS&S jrS rS r\R                  " 5       0 SSSS4S j5       r
\R                  " 5       0 SSSS4S	 j5       r0 SSS4S
 jr\R                  " 5       0 SSSSSS4S j5       r\R                  " 5       0 SSSSSS4S j5       r\R                  " 5       0 SSSS4S j5       r\R                  " 5       0 SSSS4S j5       r\R                  " 5       0 SSSSS4S j5       r\R                  " 5       0 SSSSS4S j5       r\R                  " 5       0 SSSSSSSSSSSSSS4S j5       r\R                  " 5       0 SSS4S j5       r\R                  " 5       0 SSS4S j5       r\R                  " 5       0 SSSS4S j5       r\R                  " 5       0 SSSS4S j5       r0 SSS4S  jr0 SSS4S! jr\R                  " 5       0 SS4S" j5       rS# rS$rg)'r   i  Fc                    [        U[        R                  5      (       d#  [        R                  " U[        R                  S9n[        U5      S:  a  [        U5      S::  d   eUS;   d   eUS;   d   eUS;   d   eXl        [        U5      U l	        X l
        X0l        X@l        XPl        SU R                  -
  n[        R                  " USS9U l        [        R                   " UR#                  S/5      U R                  S S /5      U l        [        R                   " U R                  SS  UR'                  S/5      /5      U l        [        R*                  " U R                  5      U l        [        R*                  " S	U R                  -
  5      U l        [        R0                  " S	U R                  -
  5      U l        [        R*                  " S	U R                  -  5      U l        [        R*                  " S	U R                  -  S-
  5      U l        US	U R$                  -
  -  S	U R                  -
  -  U l        [        R0                  " U R8                  R;                  S
5      5      U l        U[        R*                  " U R$                  5      -  S	U R                  -
  -  U l        S	U R$                  -
  [        R*                  " U5      -  S	U R                  -
  -  U l         g )Nr   r   r   rs   rw   )r|   r}   r~   r   r   r   r   rA   r-   r   )!r[   r.   r   r   r0   r3   r   r:   r   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rW   r:   r   r   r   r   r   s          r   rX    GaussianDiffusion_style.__init__  s    %!3!344LLemm<E5zA~#e*/114444 
 
 	
 
  
 
 	
 
 
 Z" "!2 TZZ#mmF:#(99__aS!4#6#6s#;<$> #(99  $qc"$$% 
 $)::d.A.A#B -2ZZ:>:M:M9N .O*,1IIc8<8K8K7L -M)).C$:M:M4M)N&+0::cD<O<O6O897: ,;( #(31I1I+I"J$%%%#'.3ii##))%0/2+$)EJJ$$-& %&),t/B/B)B%D! $***ejj.@%Ad)))%+!r   Nc                     Uc  [         R                  " U5      OUn[        U R                  X!5      U-  [        U R                  X!5      U-  -   nUR                  U5      $ r   )r.   r_   r   r   r   type_as)rW   rt   r   r   r   s        r   r    GaussianDiffusion_style.q_sample  sZ     ).  $5((!02522A:UBCzz"~r   c                     [        U R                  X!5      U-  n[        SU R                  -
  X!5      n[        U R                  X!5      nX4U4$ r   r   r   s         r   r   'GaussianDiffusion_style.q_mean_variance   r   r   c                     [        U R                  X25      U-  [        U R                  X25      U-  -   n[        U R                  X25      n[        U R                  X25      nXEU4$ r   r   r   s          r   r   1GaussianDiffusion_style.q_posterior_mean_variance(  r   r   c	           	         UR                   n	U R                  XX4XVU5      u  pp[        R                  " U5      nUR	                  S5      R                  5       R                  " S/SUR                  S-
  -  Q76 nUb<  U" XR                  U5      40 UD6nU
R                  5       UUR                  5       -  -   n
X[        R                  " SU-  5      -  U-  -   nUR                  U	5      UR                  U	5      4$ r   )r    r   r.   r_   r   r   r   r   r   r   type)rW   r   r   r   r   r   r   r   r   r    r   r   r   rt   r   t_maskr   r   s                     r   r    GaussianDiffusion_style.p_sample1  s       $33B5494? A
   $a%%ww{ #$9$9!$<MMDcDJJL00BUYYsW}55==yy//r   c                 &   UR                  S5      nUn	[        R                  " U R                  5      R	                  S5       HJ  n
[        R
                  " U4U
[        R                  U	R                  S9nU R                  XX#UXVU5      u  pML     U	$ r   r   r   s                r   r   %GaussianDiffusion_style.p_sample_loopR  r   r   c           	         Uc  U" U4SU R                  U5      0UD6nO[        U[        5      (       a  [        U5      S:X  d   eU" U4SU R                  U5      0US   D6n	US:w  a  U" U4SU R                  U5      0US   D6n
U R                  R                  S5      (       a  U	R                  S5      OU	R                  S5      S-  n[        R                  " U
SS2SU24   UU	SS2SU24   U
SS2SU24   -
  -  -   U	SS2US24   /SS9nOU	nU R                  S	:X  a*  UR                  SSS9u  p[        R                  " U5      nGO/U R                  S
:X  a  UR                  SSS9u  p[        U R                  X!5      n[        [        R                  " U R                  5      X!5      nUS-   S-  nUU-  SU-
  U-  -   n[        R                  " U5      nOU R                  S:X  aT  [        [        R                  " U R                  SS U R                  SS /5      UU5      n[        R                  " U5      nO<U R                  S:X  a,  [        U R                  X!5      n[        U R                  X!5      nU R                   S:X  aF  Un[        SU R"                  -  X!5      U-  [        U R$                  U R"                  -  X!5      U-  -
  nOVU R                   S:X  a  UnOCU R                   S:X  a3  [        U R&                  X!5      U-  [        U R(                  X!5      U-  -
  nUb  US:  a  US::  d   e[        R*                  " WR-                  S5      R/                  5       USS9R1                  S5      R3                  SSSSS5      n[        R4                  " U[        R6                  " U* U5      5      U-  nOUb  WR9                  U* U5      nU R;                  WX5      u  n  nUWWU4$ )r   Nr   r#   r   r-   r   r   r   rx   ry   r   rz   r{   ru   rt   rv   rA   )r   r[   rE   r   r   r   r   r.   r   r   r   r   r   r   r:   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   )rW   r   r   r   r   r   r   r   ra   r   r   r   r   r   r   r   r   r   rt   r   r   s                        r   r   'GaussianDiffusion_style.p_mean_varianceh  s    Gd33A6G,GC lD11c,6G16LLL"L 5 5a 8LLOLEc!G//2G6B1oG'+}}'?'?( (ejjm"'**Q-1"4 iia#gq$3$w%4C4.8*: :ag
   ==I%99QA9.LC))G$C]]o-IIaQI/MCT@@!HKUYYtzz2A:K 1+H,H/KKG))G$C]]m+		4221Q7ABHI1C iinG]]m+T,,a4C<<aDG >>Y&BC$333Q;b@D--0I0II1QTVVWB^^t#B^^u$D22A:R?D44a<sBCB !>jAo55

1!!#Zvc{44Aq!Q#7  1eiiB/014B5&%(B 11"b<Aq3##r   r   rj   c           	      8   UR                   nU R                  XXEUXy5      u      pUb  [        U R                  X!5      n[        U R                  X!5      U-  U-
  [        U R
                  X!5      -  nUSU-
  R                  5       U" XR                  U5      40 UD6-  -
  n[        U R                  X!5      U-  [        U R
                  X!5      U-  -
  n[        U R                  X!5      U-  U-
  [        U R
                  X!5      -  n[        U R                  X!5      n[        U R                  X15      nU[        R                  " SU-
  SU-
  -  SUU-  -
  -  5      -  n[        R                  " U5      n[        R                  " SU-
  US-  -
  5      U-  nUR                  S5      R                  5       R                  " S/SUR                  S-
  -  Q76 n[        R                  " U5      U-  U-   UU-  U-  -   nUR                  U5      UR                  U5      4$ )r   r   r#   r   rA   r   )r    r   r   r   r   r   r   r   r.   r_   r   r   r   r   rp  )rW   r   r   t_prevr   r   r   r   r   r   r   r   r    r   rt   r   rv   r   r   r   r   r   rq  r   s                           r   r   #GaussianDiffusion_style.ddim_sample  s%   "  **2%u+5D1a#t**A2Ed44a<rABFT55q=>CU((*\))!,.>0<.> > >C D22A:R?D44a<sBCB $00!82=B1119:D''/,,f9uzz1{?q6z"B#$v';#;#= > >   $JJq;:;cA	a%%bCERWWq[,ACzz )*,2VOe,CDyy//r   c
                 6   UR                  S5      n
UnS[        R                  " SU R                  U R                  U-  5      -   R	                  SU R                  S-
  5      R                  S5      n[        U5       H  u  p[        R                  " U
4U[        R                  UR                  S9n[        R                  " U
4U[        U5      S-
  :  a  XS-      OS[        R                  UR                  S9nU R                  XUX#UXVUX5      u  nnM     U$ r   )r   r.   r   r6   r   r   	enumerater   r   r   r   r   )rW   r   r   r   r   r   r   r   r   r   r   r   r   ir;   r   rx  r   s                     r   r   (GaussianDiffusion_style.ddim_sample_loop  s    JJqM U\\!T%7%7"&"4"4"FH HIN&'););a)?JAAEa 	 !'GA

A5$ejjKAZZ01CJN0B!e&+jj')yy2F $$RFE%/{%3:EB ( 	r   c
           	         UR                   n
U R                  XXEUXx5      u      p[        U R                  X!5      U-  U-
  [        U R                  X!5      -  n[        [
        R                  " U R                  U R                  R                  S/5      /5      X15      n[
        R                  " U5      U-  [
        R                  " SU-
  5      U-  -   nUR                  U
5      UR                  U
5      4$ )r   r   )r    r   r   r   r   r.   r   r   r   r   rp  )rW   r   r   t_nextr   r   r   r   r   r   r    r   rt   rv   r   r   s                   r   r   +GaussianDiffusion_style.ddim_reverse_sample  s      **2%u+5D1a $00!82=B1119:II$$$$..s3567=C ZZ$r)EJJq;,G#,MMwwu~rwwu~--r   c                    UR                  S5      nUn	S[        R                  " SU R                  U R                  U-  5      -   R	                  SU R                  S-
  5      n
[        U
5       H  u  p[        R                  " U4US:  a  XS-
     OS[        R                  U	R                  S9n[        R                  " U4U[        R                  U	R                  S9nU R                  XXX4UXg5	      u  pM     U	$ r   )
r   r.   r   r6   r   r{  r   r   r   r   )rW   rt   r   r   r   r   r   r   r   r   r   r|  r;   r   r  r   s                   r   r  0GaussianDiffusion_style.ddim_reverse_sample_loop&  s     GGAJ U\\!T%7%7"&"4"4"FH HIN&'););a)?JA 	 !'GA

A5+,q55Q<a!&"$))-A ZZ $&+jj')yy2F ,,RF-9*-8JEB ( 	r   c                   ^ ^^^^^^^^	 UUU	UUUU 4S jnU UU4S jnU" TU5      n[        [        5      S:X  a  U" X5      u  pU" UT5      nUU-   S-  nO[        [        5      S:X  a  SU-  [        S   -
  S-  nOx[        [        5      S:X  a#  S	U-  S
[        S   -  -
  S[        S   -  -   S-  nOB[        [        5      S:  a/  SU-  S[        S   -  -
  S[        S   -  -   S[        S   -  -
  S-  nU" WU5      u  pXU4$ )r  c           	      6  > U R                   nTR                  XT
TTTT	5      u      p4Tb  [        TR                  X5      n[        TR                  X5      U -  U-
  [        TR
                  X5      -  nUSU-
  R                  5       T" U TR                  U5      40 TD6-  -
  n[        TR                  X5      U -  [        TR
                  X5      U-  -
  n[        TR                  X5      U -  U-
  [        TR
                  X5      -  nUR                  U5      $ r  )	r    r   r   r   r   r   r   r   rp  )r   r   r    r   rt   r   rv   r   r   r   r   r   r   rW   s          r   r  8GaussianDiffusion_style.plms_sample.<locals>.compute_epsW  s4   HHE ..re\/4j+OKAq! '4..6$88!@2EJ991ABQY,,.--a02B4@2B B B 66>C88!@3FG d44a<rABFT55q=>C88E?"r   c                 h  > U R                   n[        TR                  UT	5      T	-  [        TR                  UT	5      U -  -
  n[        TR                  TT	5      n[
        R                  " SU-
  5      U -  n[
        R                  " U5      U-  U-   nUR                  U5      UR                  U5      4$ r  )r    r   r   r   r   r.   r   rp  )
rv   r   r    rt   r   r   r   rW   rx  r   s
          r   r
  7GaussianDiffusion_style.plms_sample.<locals>.compute_x0q  s    IIE D22Ar:R?D44a<sBCB T00&"=K

1{?3c9I::k*R/);D99U#RWWU^33r   r   r   r   r  rA   r#   r  r  r  r  r  r  r  r  r  r  r  )r   r  )rW   r   r   rx  r   r   r   r   r   r   r  r  r
  rv   r   rt   r  r  s   `` ```````        r   r  #GaussianDiffusion_style.plms_sampleE  s   $	# 	#4	4 "a y>Q!#)HD"40Hx3.I^q S9R=0C7I^q cB2$66y},-045I^q cB2$66im9KKy},-045Ii+}r   c	                    UR                  S5      n	Un
S[        R                  " SU R                  U R                  U-  5      -   R	                  SU R                  S-
  5      R                  S5      n/ n[        U5       H  u  p[        R                  " U	4U[        R                  U
R                  S9n[        R                  " U	4U[        U5      S-
  :  a  XS-      OS[        R                  U
R                  S9nU R                  XUX#XEUXxU5      u  n
nnUR                  U5        [        U5      S:  d  M  UR                  S5        M     U
$ r  )r   r.   r   r6   r   r   r{  r   r   r   r   r  r2   r!  )rW   r   r   r   r   r   r   r   r  r   r   r   r  r|  r;   r   rx  r   rv   s                      r   r"  (GaussianDiffusion_style.plms_sample_loop  s7    JJqM U\\!T%7%7"&"4"4"FH HIN&'););a)?JAAEa 	 	 'GA

A5$ejjKAZZ01CJN0B!e&+jj')yy2F ))"*/\*5*35JB3 S!9~"a  (  	r   r#   logSNR	multistepzdpmsolver++T	dpmsolverc                 J   U R                   S;   d   eUS;   d   eUb  Ub   e[        SU R                  R                  5       S9n[	        UUU R
                  U R                   UU R                  U R                  U
U	S9	n[        UUUUUS9nUR                  UUUUUUUUUUS9
nU$ )zSample using DPM-Solver-based method.
- condition_fn: for classifier-based guidance (guided-diffusion).
- guide_scale: for classifier-free guidance (glide/dalle-2).

Please check all the parameters in `dpm_solver.sample` before using.
)rv   rt   )Ngףp=
?discrete)r5   r:   )	r   noise_scheduler   r   r   r   r6   r   r   )model_fnr  algorithm_typer   r   )	r   order	skip_typemethodsolver_typet_startt_endlower_order_finaldenoise_to_zero)
r   r   r:   r   r   r   r   r6   r   sample)rW   r   r   r   r  r  r  r   r   r   r   dpm_solver_timestepsr  r  r  r  r  r  r  r  
dpm_solverr   s                         r   dpm_solver_sample_loop.GaussianDiffusion_style.dpm_solver_sample_loop  s    2 ~~...]***}
 222(tzz'7'7'9;1)]]nn%"44,,#%	'  ))!
 &#/+  
- 	r   c
           	         UR                   n
U R                  X25      U-  USU-
  -  -   nU R                  XXVXxU	5      u  ppUR                  S5      R	                  5       R
                  " S/SUR                  S-
  -  Q76 nX[        R                  " SU-  5      -  [        R                  " U5      -  -   nUR                  U
5      UR                  U
5      4$ )z+DDPM sampling step for inpainting.
        r   r   rA   r   r"   )r    r   r   r   r   r   r   r.   r   r_   rp  )rW   r   r   yr   r   r   r   r   r   r    r   r   r   rt   rq  r   s                    r   inpaint_p_sample(GaussianDiffusion_style.inpaint_p_sample  s      ]]1 4'"D/9#33B5494? A
 a%%ww{ UYYsW}558H8H8LLLyy//r   c	                 &   UR                  S5      n	Un
[        R                  " U R                  5      R	                  S5       HJ  n[        R
                  " U	4U[        R                  U
R                  S9nU R                  XX#XEXgU5	      u  pML     U
$ )z+DDPM sampling loop for inpainting.
        r   r   )	r   r.   r   r6   r   r   r   r   r  )rW   r   r  r   r   r   r   r   r   r   r   r;   r   r   s                 r   inpaint_p_sample_loop-GaussianDiffusion_style.inpaint_p_sample_loop  s     JJqM LL!3!3499!<D

A5$ejjKA))"%*/[JEB = 	r   r-   c           
         UR                   n[        R                  " 5          UR                  S5        U R	                  XXVXxU	5      u  ppX4-  X-  -
  R                  5       R                  5       n[        R                  R                  UU5      S   nSSS5        UR                  S5      R                  5       R                  " S/SUR                  S-
  -  Q76 nWU[        R                  " SW-  5      -  [        R                  " U5      -  -   nUU
W-  -
  nU R                  X25      U-  USU-
  -  -   nUR!                  U5      WR!                  U5      4$ ! , (       d  f       N= f)z`DDPM sampling step for inpainting, with Manifold Constrained Gradient (MCG) correction.
        Tr   NrA   r   r   r"   )r    r.   enable_gradrequires_grad_r   rP  rV   autogradr   r   r   r   r   r   r_   r   rp  )rW   r   r   r  r   r   r   r   r   r   	mcg_scaler    r   r   r   rt   r9  r   rq  r   s                       r   inpaint_mcg_p_sample,GaussianDiffusion_style.inpaint_mcg_p_sample'  sH      d##'#7#7uE{$L BWHry(002779D>>&&tR03D ! a%%ww{ FUYYsW}558H8H8LLLi$&& }}Q"T)DAH,==yy//# ! s   A1E
E&c
                 (   UR                  S5      n
Un[        R                  " U R                  5      R	                  S5       HK  n[        R
                  " U
4U[        R                  UR                  S9nU R                  XX#UXVUX5
      u  pMM     U$ )z`DDPM sampling loop for inpainting, with Manifold Constrained Gradient (MCG) correction.
        r   r   )	r   r.   r   r6   r   r   r   r   r  )rW   r   r  r   r   r   r   r   r   r  r   r   r;   r   r   s                  r   inpaint_mcg_p_sample_loop1GaussianDiffusion_style.inpaint_mcg_p_sample_loopK  s     JJqM LL!3!3499!<D

A5$ejjKA--bQe.::.9FEB =
 	r   rV   c                   ^ US;   d   eUc  [         R                  " U5      OUnUc  UOUnU R                  XbUS9nU R                  S;   a5  U R	                  XX#U5      u  pU R                  S:X  a  XR
                  -  n	U	$ U R                  S;   Ga?  U" U4SU R                  U5      0UD6nSnU R                  S;   a  UR                  S	S
S9u  p[         R                  " UR                  5       U/S
S9mU R	                  UUUU4S jUS9u  pU R                  R                  S5      (       a  XR
                  -  S-  nUUU R                  XU5      S   S.U R                     nUU-
  R                  U R                  R                  S5      (       a  S
OS	5      R!                  5       n	US:X  a  U	R#                  S
5      R%                  S
S9n	X-   n	W	$ )NrV   noner%  r&  r   r'  r   rj   r(  r#   r   r   c                     > T$ rT   ro   r*  s     r   r+   .GaussianDiffusion_style.loss.<locals>.<lambda>  s    &r   )r   	reductionr0  r   r   r1  r   rV   )r.   r_   r   r   r3  r6   r   r   r   r   r4  r   r   r   r5  r6  r   r   rV   )rW   rt   r   r   r   r   input_x0r  r   r9  r   ra   r:  r   r;  r-  s                  @r   r9  GaussianDiffusion_style.lossd  s    ,,,,(-  $5!)2x]]8e]4 >>2222213?AGD~~.000D C ^^KKGd33A6G,GC H}} <<99QA9.JJL#$ #::8' ; ) >>,,[99'*<*<<vEH 99"!DQG nn	F #4>>#:#:4#@#@aaH  F"||A+++2 ?Dr   c	                 
   US;   d   eU R                  XU5      u  pnU R                  X#XEXg5      u  pp[        XX5      [        R                  " S5      -  nUS:X  a  UR                  S5      R                  SS9n[        XSU-  S9* [        R                  " S5      -  nUS:X  a  UR                  S5      R                  SS9nUR                  " S/S	UR                  S-
  -  Q76 n[        R                  " US
:H  X5      nUU4$ )Nr  r   rV   r   r   r"   r@  rA   r   r   )r   r   r	   r'   r   r   rV   r   r   r   r.   rB  )rW   rt   r   r   r   r   r   r   r  rC  r   rD  rE  rF  r~   rG  rH  s                    r   r3  /GaussianDiffusion_style.variational_lower_bound  s    ,,,,  99"!D#33B549 G 3#8488C=HA###*B 3C(N4 46:hhsmD++a.%%!%,C FF2/A./kk!q&#*Bwr   c           
         UR                  S5      n/ / / S.n[        R                  " U R                  5      R	                  S5       GH9  n[        R
                  " U4U[        R                  UR                  S9n	[        R                  " U5      n
U R                  XU
5      nU R                  XXX4U5      u  p[        U R                  X5      U-  U-
  [        U R                  X5      -  nUS   R                  U5        US   R                  X-
  R                  5       R!                  S5      R#                  SS95        US   R                  X-
  R                  5       R!                  S5      R#                  SS95        GM<     UR%                  5        VVs0 s H  u  nnU[        R&                  " USS9_M     nnnU R)                  UW	5      u  nnn[+        UU[        R,                  " U5      [        R,                  " U5      5      nUR!                  S5      R#                  SS9[.        R0                  " S	5      -  nUUS
'   US   R3                  SS9U-   US'   U$ s  snnf rK  rO  rU  s                        r   rZ  4GaussianDiffusion_style.variational_lower_bound_loop  r\  r]  c                 h    U R                   (       a   UR                  5       S-  U R                  -  $ U$ r_  r`  ra  s     r   r   (GaussianDiffusion_style._scale_timesteps  rc  r   )r   r   r   r:   r   r   r   r6   r   r   r   r   r   r   r   r   r   r   )rv   r{   r|   FrT   )rf   rk   rl   rm   rX   r   r   r   r.   rd  r   r   r   r   r   r   r  r  r"  r  r  r  r  r  r9  r3  rZ  r   rn   ro   r   r   r   r     s    !' #(4+l   ]]_
 ! "!0 0@ ]]_ $& !%#'"& 2 &("#'$(M$^ ]]_ "$#!% $#%/0 /0b ]]_ ')#$(&*%)(*  : ]]_ *,"&'+(,+-. .< ]]_ /1'+,0-102 < ]]_ "$#!% $#%K KZ ]]_ ')#$(&*%)(*" "H ]]_ -/%&)1&1%)*.,0+/46.;'+%)15/4+6#8 8t ]]_ ')#$(%)0 08 ]]_ ,.$()-*. , ]]_ +-#'(,)-'*!0 !0F ]]_ 02(,-1.2,/ 8 4v .0&*+/*0@ ]]_ 35+/04* *Xr   r   )i  NN)r'   r.   r  r   r   r   r   
ops.lossesr   r	   __all__r   r   rO   objectrQ   r
   r   ro   r   r   <module>r     sc     9 9 J
K' !%  3>l8!v !*_	 _	DJf Jr   