§
    ‘M§jòB  ã                   óœ   — d dl Z d dlZd dlmZ dedefd„Zd„ Zd„ Zdd	e	fd
„Z
d„ Zd„ Zd„ Z G d„ d¦  «        Zdde	fd„Z	 	 	 	 ddefd„ZdS )é    N)Úrandn_tensorÚsÚreturnc                 óH   — 	 t          | ¦  «         dS # t          $ r Y dS w xY w)NTF)ÚintÚ
ValueError)r   s    úAC:\Users\johnn\OneDrive\Documents\AI\shared\utils\self_refiner.pyÚis_int_stringr
      s9   € ðÝˆA‰ŒˆØˆtøÝð ð ð Øˆuˆuðøøøs   ‚ “
! !c                 ó  — g }|                       ¦   «         sg dfS |                      d¦  «        D �]@}|                      ¦   «         }|sŒd|vr
g d|› d�fc S |                     dd¦  «        \  }}|                      ¦   «         }|                      ¦   «         }|s
g d|› d�fc S d	|v r|                     d	d¦  «        \  }}n|x}}|                      ¦   «         }|                      ¦   «         }t          |¦  «        rt          |¦  «        s
g d
|› d�fc S t          |¦  «        s
g d|› d�fc S |                     t	          |¦  «        t	          |¦  «        t	          |¦  «        dœ¦  «         �ŒB|                     d„ ¬¦  «         |dfS )NÚ ú,ú:zInvalid format in 'z/'. Entries must be in 'start-end:steps' format.é   zMissing step count in 'z'.ú-zRange 'z' must contain integers.zSteps 'z' must be an integer.©ÚstartÚendÚstepsc                 ó   — | d         S ©Nr   © ©Úxs    r	   ú<lambda>z>_normalize_single_self_refiner_plan_from_str.<locals>.<lambda>2   s
   € ˜q œz€ ó    ©Úkey)ÚstripÚsplitr
   Úappendr   Úsort)Úplan_strÚentriesÚchunkÚ
range_partÚ
steps_partÚstart_sÚend_ss          r	   Ú,_normalize_single_self_refiner_plan_from_strr)      sö  € Ø€GØ�>Š>ÑÔð Ø�2ˆvˆà—’ Ñ$Ô$ð ñ ˆØ—’‘”ˆØð 	ØØ�eÐÐØÐc¨UÐcÐcÐcÐcÐcÐcÐcà!&§¢¨S°!Ñ!4Ô!4Ñˆ
�JØ×%Ò%Ñ'Ô'ˆ
Ø×%Ò%Ñ'Ô'ˆ
àð 	;ØÐ:°Ð:Ð:Ð:Ð:Ð:Ð:Ð:à�*ÐÐØ'×-Ò-¨c°1Ñ5Ô5‰NˆG�U�Uà(Ð(ˆG�eà—-’-‘/”/ˆØ—’‘”ˆå˜WÑ%Ô%ð 	F­]¸5Ñ-AÔ-Að 	FØÐE ÐEÐEÐEÐEÐEÐEÐEÝ˜ZÑ(Ô(ð 	CØÐB ÐBÐBÐBÐBÐBÐBÐBà�ŠÝ˜‘\”\Ý�u‘:”:Ý˜‘_”_ð
ð 
ñ 	ô 	ð 	ñ 	ð ‡L‚LÐ)Ð)€LÑ*Ô*Ð*Ø�Bˆ;Ðr   c                 ó^  — g }| D ]”}t          |t          ¦  «        r}|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }||k    r|                     |› d|› �¦  «         Œw|                     |› d|› d|› �¦  «         Œ•d                     |¦  «        S )Nr   r   r   r   r   r   )Ú
isinstanceÚdictÚgetr    Újoin)Ú
rules_listÚpartsÚrr   r   r   s         r	   Úconvert_refiner_list_to_stringr2   5   sº   € Ø€EØð 7ð 7ˆÝ�a�ÑÔð 	7Ø—E’E˜'‘N”NˆEØ—%’%˜‘,”,ˆCØ—E’E˜'‘N”NˆEØ˜Š|ˆ|Ø—’ Ð/Ð/¨Ð/Ð/Ñ0Ô0Ð0Ð0à—’ Ð5Ð5¨Ð5Ð5¨eÐ5Ð5Ñ6Ô6Ð6øØ�8Š8�E‰?Œ?Ðr   r   Ú	max_plansc                 ó  — | €g gdfS t          | t          ¦  «        r>g }| D ]4}t          |t          ¦  «        rd|v rd|v r|                     |¦  «         Œ5|gdfS t	          | ¦  «                             ¦   «         }|sg gdfS d„ |                     d¦  «        D ¦   «         }|dk    rt          |¦  «        |k    r	 g }|D ]I}|s|                     g ¦  «         Œt          |¦  «        \  }}	|	rg |	fc S |                     |¦  «         ŒJ|dfS )Nr   r   r   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )r   )Ú.0Úsegs     r	   ú
<listcomp>z/normalize_self_refiner_plan.<locals>.<listcomp>R   s    € Ð;Ð;Ð; �—	’	‘”Ð;Ð;Ð;r   ú;r   )	r+   Úlistr,   r    Ústrr   r   Úlenr)   )
Ú
plan_inputr3   Úcleaned_planÚruler"   ÚsegmentsÚplansr7   Ú
plan_rulesÚerrors
             r	   Únormalize_self_refiner_planrD   B   s\  € ØÐØˆt�Rˆxˆå�*�dÑ#Ô#ð "ØˆØð 	*ð 	*ˆDÝ˜$¥Ñ%Ô%ð *¨'°T¨/¨/¸eÀt¸m¸mØ×#Ò# DÑ)Ô)Ð)øàˆ~˜rÐ!Ð!å�:‰Œ×$Ò$Ñ&Ô&€HØð Øˆt�Rˆxˆà;Ð; x§~¢~°cÑ':Ô':Ð;Ñ;Ô;€Hà�1‚}€}�˜X™œ¨Ò2Ð2Øà€EØð !ð !ˆØð 	Ø�LŠL˜ÑÔÐØåHÈÑMÔMÑˆ
�EØð 	Ø�u�9ÐÐÐØ�Š�ZÑ Ô Ð Ð à�"ˆ9Ðr   c                 ó¼   — t          | t          ¦  «        r| S t          | t          ¦  «        r/t          | ¦  «        \  }}|rt	          |¦  «        dk    r|d         S g S ©Nr   )r+   r:   r;   rD   r<   )Ú	plan_datarA   Ú_s      r	   Úensure_refiner_listrI   d   sa   € Ý�)�TÑ"Ô"ð ØÐå�)�SÑ!Ô!ð Ý.¨yÑ9Ô9‰ˆˆqØð 	•S˜‘Z”Z !’^�^Ø˜”8ˆOà€Ir   c                 óà  — t          | ¦  «        } t          |t          ¦  «        r¡|                     ¦   «                              dd¦  «                             dd¦  «        }d|v r|                     dd¦  «        \  }}n|x}}t          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        }}n*t          |d         ¦  «        t          |d         ¦  «        }}||k    r||}}| D ]H}||d         k    r:||d         k    r.ddlm}	  |	d	|› d|› d
|d         › d|d         › d�	¦  «         | c S ŒI||t          |¦  «        dœ}
| |
gz   }t          |d„ ¬¦  «        S )Nr   r   r   r   r   r   r   )ÚInfozOverlap detected! Steps z conflict with existing rule ú.r   c                 ó   — | d         S r   r   r   s    r	   r   z"add_refiner_rule.<locals>.<lambda>Š   s
   € ¨a°¬j€ r   r   )
rI   r+   r;   r   Úreplacer   r   ÚgradiorK   Úsorted)Úcurrent_rulesÚ	range_valÚ	steps_valÚ	raw_ranger'   r(   Ú	new_startÚnew_endr?   rK   Únew_ruleÚupdated_lists               r	   Úadd_refiner_rulerY   o   s®  € Ý'¨Ñ6Ô6€MÝ�)�SÑ!Ô!ð BØ—O’OÑ%Ô%×-Ò-¨c°3Ñ7Ô7×?Ò?ÀÀSÑIÔIˆ	Ø�)ÐÐØ&Ÿ_š_¨S°!Ñ4Ô4‰NˆG�U�Uà'Ð'ˆG�eÝ  §¢¡¤Ñ1Ô1µ3°u·{²{±}´}Ñ3EÔ3E�7ˆ	ˆ	å  ¨1¤Ñ.Ô.µ°I¸a´LÑ0AÔ0A�7ˆ	à�7ÒÐØ% y�Gˆàð !ð !ˆØ˜˜UœÒ#Ð#¨°4¸´=Ò(@Ð(@Ø#Ð#Ð#Ð#Ð#Ð#ØˆDÐ|¨IÐ|Ð|¸Ð|Ð|Ð^bÐcjÔ^kÐ|Ð|ÐnrÐsxÔnyÐ|Ð|Ð|Ñ}Ô}Ð}Ø Ð Ð Ð øð ØÝ�Y‘”ðð €Hð
 ! H :Ñ-€LÝ�,Ð$8Ð$8Ð9Ñ9Ô9Ð9r   c                 óˆ   — t          | ¦  «        } d|cxk    rt          | ¦  «        k     rn n|                      |¦  «         | S rF   )rI   r<   Úpop)rQ   Úindexs     r	   Úremove_refiner_ruler]   Œ   sS   € Ý'¨Ñ6Ô6€MØˆEÐ&Ð&Ò&Ð&•C˜Ñ&Ô&Ò&Ð&Ð&Ð&Ð&Ø×Ò˜%Ñ Ô Ð ØÐr   c                   óL   — e Zd Zddefd„Zd„ Zd„ Zd„ Zdd
„Zdd„Z	dd„Z
d„ Zd	S )Ú
PnPHandlerç        r   ç+‡ÙÎ÷ï?Úchannel_dimc                 ó�   — |                       |¦  «        | _        || _        || _        || _        || _        d g| _        d| _        d S ©NF)Ú_build_stochastic_step_mapÚstochastic_step_mapÚths_uncertaintyÚp_normÚcertain_percentagerb   ÚbufferÚcertain_flag)ÚselfÚstochastic_planrg   rh   ri   rb   s         r	   Ú__init__zPnPHandler.__init__“   sN   € Ø#'×#BÒ#BÀ?Ñ#SÔ#SˆÔ Ø.ˆÔØˆŒØ"4ˆÔØ&ˆÔØ�fˆŒØ!ˆÔÐÐr   c                 ót  — i }|s|S |D �]-}t          |t          ¦  «        r‘|                     d|                     d¦  «        ¦  «        }|                     d|                     d¦  «        ¦  «        }|                     d|                     d|                     dd¦  «        ¦  «        ¦  «        }n6t          |t          t          f¦  «        r|d	         |d         |d
         }}}nŒßt          |¦  «        }t          |¦  «        }t          |¦  «        }	|	d	k    rt          ||dz   ¦  «        D ]}
|	||
<   Œ�Œ/|S )Nr   Úbeginr   Ústopr   ÚannealÚnum_anneal_stepsr   r   é   )r+   r,   r-   r:   Útupler   Úrange)rl   ÚplanÚstep_mapÚentryr   r   r   Ústart_iÚend_iÚsteps_iÚidxs              r	   re   z%PnPHandler._build_stochastic_step_mapœ   s2  € ØˆØð 	ØˆOàð 	,ñ 	,ˆEÝ˜%¥Ñ&Ô&ð ØŸ	š	 '¨5¯9ª9°WÑ+=Ô+=Ñ>Ô>�Ø—i’i  u§y¢y°Ñ'8Ô'8Ñ9Ô9�ØŸ	š	 '¨5¯9ª9°X¸u¿yºyÐI[Ð]^Ñ?_Ô?_Ñ+`Ô+`ÑaÔa��Ý˜E¥D­% =Ñ1Ô1ð Ø$)¨!¤H¨e°A¬h¸¸a¼˜E�s��àå˜%‘j”jˆGÝ˜‘H”HˆEÝ˜%‘j”jˆGà˜Š{ˆ{Ý  ¨%°!©)Ñ4Ô4ð ,ð ,�CØ$+�H˜S‘M�MùØˆr   c                 ó8   — | j                              |d¦  «        S rF   )rf   r-   )rl   Ú
step_indexs     r	   Úget_anneal_stepszPnPHandler.get_anneal_steps´   s   € ØÔ'×+Ò+¨J¸Ñ:Ô:Ð:r   c                 ó$   — d g| _         d| _        d S rd   )rj   rk   )rl   s    r	   Úreset_bufferzPnPHandler.reset_buffer·   s   € Ø�fˆŒØ!ˆÔÐÐr   Nc	                 óò  — |€|||z  z
  }|€|||z
  |z  z   }| j         d         ��2|| j         d         d         z
  }	| j        }
|
dk     r
|
|j        z  }
t          j        |	| j        |
¬¦  «        |j        |
         z  }|| j        k     }| j         d         d         �|| j         d         d         z  }|                     ¦   «         | 	                    ¦   «         z  | j
        k    rd| _        |                     |j        ¦  «                             |
¦  «        }|| j         d         d         z  d|z
  |z  z   }|| j         d         d         z  d|z
  |z  z   }|}nd }| j                              |||g¦  «         |S )Néÿÿÿÿr   r   )ÚpÚdimTrt   ç      ð?)rj   rb   ÚndimÚtorchÚnormrh   Úshaperg   ÚsumÚnumelri   rk   ÚtoÚdtypeÚ	unsqueezer    )rl   ÚlatentsÚ
noise_predÚsigmaÚ
sigma_nextÚ	generatorÚdeviceÚlatents_nextÚpred_original_sampleÚdiffrb   ÚuncertaintyÚcertain_maskÚcertain_mask_floatÚcertain_mask_storeds                  r	   Úprocess_stepzPnPHandler.process_step»   sž  € ØÐ'Ø#*¨U°ZÑ-?Ñ#?Ð àÐØ" j°5Ñ&8¸JÑ%FÑFˆLàŒ;�rŒ?Ñ&Ø'¨$¬+°b¬/¸!Ô*<Ñ<ˆDØÔ*ˆKØ˜QŠˆØ˜wœ|Ñ+�åœ* T¨T¬[¸kÐJÑJÔJÈWÌ]Ð[fÔMgÑgˆKà&¨Ô)=Ò=ˆLØŒ{˜2Œ˜qÔ!Ð-Ø+¨d¬k¸"¬o¸aÔ.@Ñ@�à×ÒÑ!Ô! L×$6Ò$6Ñ$8Ô$8Ñ8¸4Ô;RÒRÐRØ$(�Ô!à!-§¢°´Ñ!?Ô!?×!IÒ!IÈ+Ñ!VÔ!VÐà-°´¸B´ÀÔ0BÑBÀcÐL^ÑF^ÐbnÑEnÑnˆLØ#5¸¼ÀB¼ÈÔ8JÑ#JÈcÐTfÑNfÐj~ÑM~Ñ#~Ð à".ÐÐà"&ÐØŒ×ÒÐ/Ð1EÀ|ÐTÑUÔUÐUØÐr   c                 ó²   — t          |j        |||j        ¬¦  «        }|€d|z
  |z  ||z  z   S |                     |j        ¦  «        |z  }d|z
  |z  ||z  z   S )N)r•   r–   r�   r‡   )r   r‹   r�   rŽ   )	rl   r‘   Úbuffer_latentr“   r•   r–   Ú
noise_maskÚnoiseÚsigma_ts	            r	   Úperturb_latentszPnPHandler.perturb_latentsÜ   sl   € Ý˜Wœ]°iÈÐV]ÔVcÐdÑdÔdˆàÐØ˜%‘K =Ñ0°5¸5±=Ñ@Ð@à—=’= ¤Ñ/Ô/°%Ñ7ˆØ�g‘ Ñ.°¸5±Ñ@Ð@r   c           	      óÌ  — |€d S d }|r
 |¦   «         } |||¦  «        \  }}|�|€d S |                       ||||||¬¦  «        }| j        r|S t          d|¦  «        D ]‡}|	r|� |	|¦  «         |                      || j        d         d         ||
||¬¦  «        } ||¦  «        }|€ d S  |||¦  «        \  }}|�|€ d S |                       ||||||¬¦  «        }| j        r nŒˆ|S )N©r—   r˜   r   r„   ©r•   r–   r¡   )rž   rk   rv   r¤   rj   )rl   r‘   r’   Úcurrent_sigmaÚ
next_sigmaÚm_stepsÚdenoise_funcÚ	step_funcÚ
clone_funcÚrestore_funcr•   r–   r¡   Úscheduler_stateÚlatents_next_0Úpred_original_sample_0r—   ÚiiÚlatents_perturbedÚn_predÚlatents_next_loopÚpred_original_sample_loops                         r	   Úrun_refinement_loopzPnPHandler.run_refinement_loopå   s‰  € ØÐØ�4àˆØð 	+Ø(˜j™lœlˆOà1:°¸:ÀwÑ1OÔ1OÑ.ˆÐ.ØÐ!Ð%;Ð%CØ�4à×(Ò(Ø�Z °
Ø'Ð>Tð )ñ 
ô 
ˆð
 Ôð 	 ØÐå˜˜7Ñ#Ô#ð 	ð 	ˆBØð . Ð ;Ø�˜_Ñ-Ô-Ð-à $× 4Ò 4ØØ”˜B” Ô"ØØ#ØØ%ð !5ñ !ô !Ðð "�\Ð"3Ñ4Ô4ˆFØˆ~Ø�t�tà;D¸9ÀVÐM^Ñ;_Ô;_Ñ8ÐÐ8Ø Ð(Ð,EÐ,MØ�t�tà×,Ò,Ø! 6¨=¸*Ø.ÐE^ð -ñ ô ˆLð
 Ô ð Ø�ðð Ðr   c                 óž  ‡‡‡‡	‡‡— |€d ‰fS |                       ¦   «          ‰                     ¦   «         dz  }|t          |¦  «        dz
  k    rdn||dz                                 ¦   «         dz  }|                      |¦  «        }|dk    rO| j        sHd„ Šˆfd„Šˆˆˆˆ	ˆˆfd„}ˆfd„}ˆfd„}|                      ||||||
|||||j        ¬	¦  «        }|€d ‰fS nq|d d …d |j        d         …d ‰d         …f         } ‰j        |‰|fi ‰	¤Ž}t          |d
¦  «        r|j
        }n't          |t          t          f¦  «        r	|d         }n|}|‰fS )Nç     @�@r   r`   c                 ó|   — t          | d¦  «        r| j        S t          | t          t          f¦  «        r| d         S | S )NÚprev_sampler   )Úhasattrr»   r+   ru   r:   )Ústep_outs    r	   Ú_get_prev_samplez)PnPHandler.step.<locals>._get_prev_sample%  sB   € Ý˜8 ]Ñ3Ô3ð 0Ø#Ô/Ð/Ý˜h­µ¨Ñ6Ô6ð 'Ø# Aœ;Ð&Ø�r   c                 ó¶   •— t          | d¦  «        r| j        S t          j        ‰¦  «        r‰                     ¦   «         nt          ‰¦  «        }||dz  |z  z
  S )Nr˜   r¹   )r¼   r˜   r‰   Ú	is_tensorÚitemÚfloat)r½   Ú
latents_inÚn_pred_slicedÚt_valÚts       €r	   Ú_get_pred_original_samplez2PnPHandler.step.<locals>._get_pred_original_sample,  sY   ø€ Ý˜8Ð%;Ñ<Ô<ð 9Ø#Ô8Ð8Ý$)¤O°AÑ$6Ô$6ÐD˜Ÿš™œ˜½EÀ!¹H¼H�Ø! U¨V¡^°}Ñ$DÑDÐDr   c                 ó    •— | d d …d |j         d         …d ‰d         …f         } ‰j        |‰
|fi ‰	¤Ž} ‰|¦  «        } ‰|||¦  «        }||fS )Nr   )r‹   Ústep)Ú	n_pred_inrÃ   rÄ   r½   Úlatents_next_outÚpred_original_sample_outrÇ   r¾   Úsample_schedulerÚscheduler_kwargsrÆ   Útarget_shapes         €€€€€€r	   r¬   z"PnPHandler.step.<locals>.step_func2  s„   ø€ Ø )¨!¨!¨!Ð-A¨jÔ.>¸qÔ.AÐ-AÐCSÀLÐQRÄOÐCSÐ*SÔ T�à0Ð+Ô0°ÀÀ:ÐbÐbÐQaÐbÐb�Ø#3Ð#3°HÑ#=Ô#=Ð Ø+DÐ+DÀXÈzÐ[hÑ+iÔ+iÐ(Ø'Ð)AÐAÐAr   c                  óZ   •— ‰ €d S t          ‰ dd¦  «        rt          j        ‰ ¦  «        S d S )NÚis_statefulT)ÚgetattrÚcopyÚdeepcopy)rÍ   s   €r	   r­   z#PnPHandler.step.<locals>.clone_func:  s9   ø€ Ø#Ð+Ø˜4ÝÐ+¨]¸DÑAÔAð ;Ýœ=Ð)9Ñ:Ô:Ð:Ø�tr   c                 ó8   •— | rt          j        | ¦  «        Šd S d S ©N)rÓ   rÔ   )Úsaved_staterÍ   s    €r	   r®   z%PnPHandler.step.<locals>.restore_funcA  s.   ø€ àð CÝ(,¬°kÑ(BÔ(BÐ%Ð%Ð%ðCð Cr   )r‘   r’   r¨   r©   rª   r«   r¬   r­   r®   r•   r–   r»   r   )r‚   rÁ   r<   r€   rk   r·   r–   r‹   rÉ   r¼   r»   r+   ru   r:   )rl   r   r‘   r’   rÆ   Ú	timestepsrÏ   Úseed_grÍ   rÎ   r«   r¨   r©   rª   r¬   r­   r®   rÄ   r½   rÇ   r¾   s       ` ` ``         @@r	   rÉ   zPnPHandler.step  s.  øøøøøø€ ØÐØÐ)Ð)Ð)à×ÒÑÔÐàŸš™œ 6Ñ)ˆØ&­#¨i©.¬.¸Ñ*:Ò:Ð:�b�bÀ	È*ÐUVÉ,Ô@W×@\Ò@\Ñ@^Ô@^ÐbhÑhˆ
à×'Ò'¨
Ñ3Ô3ˆà�QŠ;ˆ;˜tÔ0ˆ;ð ð  ð  ðEð Eð Eð Eð EðBð Bð Bð Bð Bð Bð Bð Bð Bð Bðð ð ð ð ðCð Cð Cð Cð Cð
 ×.Ò.ØØ%Ø+Ø%ØØ)Ø#Ø%Ø)Ø Ø”~ð /ñ ô ˆGð ˆØÐ-Ð-Ð-ð ð ' q q qÐ*;¨7¬=¸Ô+;Ð*;Ð=M¸lÈ1¼oÐ=MÐ'MÔNˆMØ,Ð'Ô,¨m¸QÀÐ\Ð\ÐK[Ð\Ð\ˆHÝ�x Ñ/Ô/ð #Ø"Ô.��Ý˜H¥u­d mÑ4Ô4ð #Ø" 1œ+��à"�àÐ(Ð(Ð(r   )r`   r   ra   r   )NNNN)NNN)NNNNN)Ú__name__Ú
__module__Ú__qualname__r   rn   re   r€   r‚   rž   r¤   r·   rÉ   r   r   r	   r_   r_   ’   s¸   € € € € € ð"ð "Ðnqð "ð "ð "ð "ðð ð ð0;ð ;ð ;ð"ð "ð "ðð ð ð ðBAð Að Að Að1ð 1ð 1ð 1ðfG)ð G)ð G)ð G)ð G)r   r_   rb   c                 ó¬   — t          | d¬¦  «        \  }}d }|rt          |¦  «        dk    r|d         }|sddddœdd	ddœg}t          |||||¬
¦  «        S )Nrt   )r3   r   r   é   é   r   é   é   )rg   rh   ri   rb   )rD   r<   r_   )Úpnp_planÚpnp_f_uncertaintyÚ
pnp_p_normÚpnp_certain_percentagerb   rA   rH   rm   s           r	   Úcreate_self_refiner_handlerræ   a  s�   € Ý*¨8¸qÐAÑAÔA�H€Eˆ1Ø€Oàð #•�U‘”˜a’�Ø œ(ˆàð 
à ¨AÐ.Ð.Ø ¨QÐ/Ð/ð
ˆõ
 ØØ)ØØ1Øðñ ô ð r   ÚallÚ	stop_whenc                 ó8  ‡ ‡— |dk    r|S |€d S t          |t          t          f¦  «        rt          d„ |D ¦   «         ¦  «        rd S ˆ ˆfd„} |||¦  «        \  }}|�|€d S t	          |¦  «        t	          ‰ ¦  «        k    s t	          |¦  «        t	          ‰ ¦  «        k    rd S g }t          ‰ |||¦  «        D ]5\  }}}}|                     |                     |d ||||¬¦  «        ¦  «         Œ6 |¦   «         r|S t          d|¦  «        D �]}g }t          t          ‰ |¦  «        ¦  «        D ]p\  }\  }}|�||         nd }|	�|	|         n|j
        }|
�|
|         nd }|                     |                     ||j        d         d         ||||¬¦  «        ¦  «         Œq ||¦  «        }|€ d S  |||¦  «        \  }}|�|€ d S g }t          ‰ |||¦  «        D ]5\  }}}}|                     |                     |d ||||¬¦  «        ¦  «         Œ6 |¦   «         r n�Œ|S )Nr   c              3   ó   K  — | ]}|d u V — Œ	d S rÖ   r   )r6   Úpreds     r	   ú	<genexpr>z,run_refinement_loop_multi.<locals>.<genexpr>ˆ  s&   è è € Ð<fÐ<fÈd¸TÀT¸\Ð<fÐ<fÐ<fÐ<fÐ<fÐ<fr   c                  ót   •— ‰dk    rt          d„ ‰ D ¦   «         ¦  «        S t          d„ ‰ D ¦   «         ¦  «        S )NÚanyc              3   ó$   K  — | ]}|j         V — Œd S rÖ   ©rk   ©r6   Úhandlers     r	   rì   zBrun_refinement_loop_multi.<locals>._should_stop.<locals>.<genexpr>�  s%   è è € ÐDÐD°�wÔ+ÐDÐDÐDÐDÐDÐDr   c              3   ó$   K  — | ]}|j         V — Œd S rÖ   rð   rñ   s     r	   rì   zBrun_refinement_loop_multi.<locals>._should_stop.<locals>.<genexpr>Ž  s%   è è € Ð@Ð@¨G�7Ô'Ð@Ð@Ð@Ð@Ð@Ð@r   )rî   rç   )Úhandlersrè   s   €€r	   Ú_should_stopz/run_refinement_loop_multi.<locals>._should_stop‹  sH   ø€ Ø˜ÒÐÝÐDÐD¸8ÐDÑDÔDÑDÔDÐDÝÐ@Ð@°xÐ@Ñ@Ô@Ñ@Ô@Ð@r   r¦   r„   r§   )r+   r:   ru   rî   r<   Úzipr    rž   rv   Ú	enumerater–   r¤   rj   )rô   Úlatents_listÚnoise_pred_listr¨   r©   rª   r«   r¬   Ú
generatorsÚdevicesÚnoise_masksrè   rõ   Úlatents_next_listÚpred_original_listÚrefined_latents_listrò   r‘   r—   Úpred_originalrH   Úperturbed_listr}   r•   r–   r¡   s   `          `              r	   Úrun_refinement_loop_multir  v  s1  øø€ ð �!‚|€|ØÐØÐØˆtÝ�o­­e }Ñ5Ô5ð ½Ð<fÐ<fÐVeÐ<fÑ<fÔ<fÑ9fÔ9fð ØˆtðAð Að Að Að Að Að
 -6¨I°oÀ|Ñ,TÔ,TÑ)ÐÐ)ØÐ Ð$6Ð$>Øˆtå
ÐÑÔ¥ X¡¤Ò.Ð.µ#Ð6HÑ2IÔ2IÍSÐQYÉ]Ì]Ò2ZÐ2ZØˆtàÐÝ9<Ø�,Ð 1Ð3Eñ:ô :ð 
ð 
Ñ5ˆ�˜,¨ð 	×#Ò#Ø× Ò ØØØØØ)Ø%2ð !ñ ô ñ		
ô 		
ð 		
ð 		
ð €|�~„~ð $Ø#Ð#å�1�gÑÔð (ñ (ˆØˆÝ'0µ°X¸|Ñ1LÔ1LÑ'MÔ'Mð 	ð 	Ñ#ˆCÑ#�'˜7Ø+5Ð+A˜
 3œ˜ÀtˆIØ%,Ð%8�W˜S”\�\¸g¼nˆFØ-8Ð-D˜ SÔ)Ð)È$ˆJØ×!Ò!Ø×'Ò'ØØ”N 2Ô& qÔ)Ø!Ø'Ø!Ø)ð (ñ ô ñ	ô 	ð 	ð 	ð '˜, ~Ñ6Ô6ˆØÐ"Ø�4�4à09°	¸/È>Ñ0ZÔ0ZÑ-ÐÐ-ØÐ$Ð(:Ð(BØ�4�4à!ÐÝ=@Ø�nÐ&7Ð9Kñ>
ô >
ð 	ð 	Ñ9ˆG�W˜l¨Mð !×'Ò'Ø×$Ò$ØØØ!ØØ!-Ø)6ð %ñ ô ñ	ô 	ð 	ð 	ð ˆ<‰>Œ>ð 	ØˆEñ	ð  Ðr   )r   )NNNrç   )r‰   rÓ   Údiffusers.utils.torch_utilsr   r;   Úboolr
   r)   r2   r   rD   rI   rY   r]   r_   ræ   r  r   r   r	   ú<module>r     sM  ðØ €€€Ø €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð�Sð ˜Tð ð ð ð ð'ð 'ð 'ðRð ð ð ð  °sð  ð  ð  ð  ðD	ð 	ð 	ð:ð :ð :ð:ð ð ðM)ð M)ð M)ð M)ð M)ñ M)ô M)ð M)ð^ð Ðnqð ð ð ð ð< ØØØð\ ð \ ð ð\ ð \ ð \ ð \ ð \ ð \ r   