§
     ’ÞjÛ*  ã                   óÀ   — d dl Z d dlZd dlZd dlmZ  ej        ¦   «         ZdZdZd„ Z	d„ Z
d„ Zd„ Zdd	d
œd„Zd„ Zd„ Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„ZdS )é    N)Úset_generation_stateÚmain_process_runningÚprocess_namesc                 ód   — |                       dd ¦  «        }|d k    rt          ¦   «         }|| d<   |S )NÚgen)ÚgetÚdict)ÚstateÚcaches     úBC:\Users\johnn\OneDrive\Documents\AI\shared\utils\process_locks.pyÚget_gen_infor      s5   € Ø�IŠI�e˜TÑ"Ô"€EØ�‚}€}Ý‘”ˆØˆˆe‰Ø€Ló    c                 óR   — t          |                      t          d¦  «        ¦  «        S )NF)Úboolr   Ú_MAIN_PROCESS_RUNNING_KEY)r   s    r   Ú_main_generation_active_lockedr      s   € Ý�—’Õ1°5Ñ9Ô9Ñ:Ô:Ð:r   c                 ó´   — t          | ¦  «        }t          5  |rd|t          <   n|                     t          d ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ©NT)r   Úgen_lockr   Úpop)r
   Úrunningr   s      r   Úset_main_generation_runningr      s¤   € Ý
�uÑ
Ô
€CÝ	ð 5ð 5Øð 	5Ø-1ˆCÕ)Ñ*Ð*à�GŠGÕ-¨tÑ4Ô4Ð4ð	5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5s   —)AÁAÁAc                 ó€   — t          | ¦  «        }t          5  t          |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S ©N)r   r   r   )r
   r   s     r   Úmain_generation_runningr      s„   € Ý
�uÑ
Ô
€CÝ	ð 3ð 3Ý-¨cÑ2Ô2ð3ð 3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð 3ð 3s   —3³7º7F)Úwait_for_lockc                ó(  — t          | ¦  «        }|st                               ¦   «         rdS t          5  |                     dd ¦  «        }|dk    rt	          |¦  «        s	 d d d ¦  «         dS |d uo|dk    o| cd d d ¦  «         S # 1 swxY w Y   d S )NTÚprocess_statusúprocess:mainF)r   r   Úlockedr   r   )r
   Ú
process_idÚignore_mainr   r   r   s         r   Úany_GPU_process_runningr#   $   s)  € Ý
�uÑ
Ô
€Càð �XŸ_š_Ñ.Ô.ð ØˆtÝ	ð dð dØŸšÐ!1°4Ñ8Ô8ˆØ˜^Ò+Ð+Õ4RÐSVÑ4WÔ4WÐ+Øðdð dð dñ dô dð dð dð dð  TÐ)Ðc°>ÀNÒ3RÐ3bÐWbÐ.cð	dð dð dð dñ dô dð dð dð dð dð dð døøøð dð dð dð dð dð ds   ´-BÁ.BÂBÂBc                 óD   — |                       dd ¦  «        }|€i }|| d<   |S )NÚgpu_residents)r   )r   Ú	residentss     r   Ú_get_gpu_residentsr'   0   s0   € Ø—’˜¨Ñ.Ô.€IØÐØˆ	Ø(ˆˆOÑØÐr   c                 óL   — t          | ¦  «                             |d ¦  «         d S r   )r'   r   )r   r!   s     r   Ú_drop_gpu_resident_lockedr)   8   s&   € Ý�sÑÔ×Ò 
¨DÑ1Ô1Ð1Ð1Ð1r   c                 óô  — g }t          | ¦  «        }t          |                     ¦   «         ¦  «        D ]Ä\  }}||k    r|                     |d ¦  «         Œ"t	          |                     dd¦  «        ¦  «        sŒF|                     dd ¦  «        }t          |¦  «        s|                     |d ¦  «         Œ‚|                     ||                     d|¦  «        |f¦  «         |                     |d ¦  «         ŒÅ|S )NÚforce_release_on_acquireFÚrelease_vram_callbackÚprocess_name)r'   ÚlistÚitemsr   r   r   ÚcallableÚappend)r   Úrequester_idÚrelease_actionsr&   Úresident_idÚresident_infoÚrelease_callbacks          r   Ú(_collect_resident_release_actions_lockedr7   <   s  € Ø€OÝ" 3Ñ'Ô'€IÝ&*¨9¯?ª?Ñ+<Ô+<Ñ&=Ô&=ð )ð )Ñ"ˆ�]Ø˜,Ò&Ð&Ø�MŠM˜+ tÑ,Ô,Ð,ØÝ�M×%Ò%Ð&@À%ÑHÔHÑIÔIð 	ØØ(×,Ò,Ð-DÀdÑKÔKÐÝÐ(Ñ)Ô)ð 	Ø�MŠM˜+ tÑ,Ô,Ð,ØØ×Ò ¨]×->Ò->¸~È{Ñ-[Ô-[Ð]mÐnÑoÔoÐoØ�Š�k 4Ñ(Ô(Ð(Ð(ØÐr   c           
      ó2  — | D ]@\  }}}	  |¦   «          Œ# t           $ r"}t          d|› d|› d|› �¦  «         Y d }~Œ9d }~ww xY wt          | ¦  «        dk    r>t          j                             ¦   «         r"t          j                             ¦   «          d S d S d S )Nz*[GPU] Unable to release resident VRAM for z (z): r   )Ú	ExceptionÚprintÚlenÚtorchÚcudaÚis_availableÚsynchronize)r3   r4   r-   r6   Úexcs        r   Ú_run_release_actionsrA   N   sÛ   € Ø7Fð fð fÑ3ˆ�\Ð#3ð	fØÐÑÔÐÐøÝð 	fð 	fð 	fÝÐd¸|ÐdÐdÈ{ÐdÐdÐ_bÐdÐdÑeÔeÐeÐeÐeÐeÐeÐeøøøøð	føøøå
ˆ?ÑÔ˜aÒÐ¥E¤J×$;Ò$;Ñ$=Ô$=ÐÝŒ
×ÒÑ Ô Ð Ð Ð ð  ÐÐÐs   Š
•
AŸ<¼ATc                 óª   — t          | ¦  «        }t          5  ||t          |¦  «        dœt          |¦  «        |<   d d d ¦  «         d S # 1 swxY w Y   d S )N©r-   r,   r+   )r   r   r   r'   )r
   r!   r-   r,   r+   r   s         r   Úregister_GPU_residentrD   X   s¥   € Ý
�uÑ
Ô
€CÝ	ð 
ð 
à(Ø%:Ý(,Ð-EÑ(FÔ(Fð/
ð /
Õ˜3ÑÔ 
Ñ+ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s   —$AÁAÁAc                 ó„   — t          | ¦  «        }t          5  t          ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r   )r   r   r)   )r
   r!   r   s      r   Úunregister_GPU_residentrF   b   s‰   € Ý
�uÑ
Ô
€CÝ	ð 3ð 3Ý! # zÑ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð 3ð 3s   —5µ9¼9c                 óŽ  — t          | ¦  «        }d }t          5  t          |¦  «                             |d ¦  «        }|�|                     dd ¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |¦  «        rH |¦   «          t          j                             ¦   «         r"t          j         	                    ¦   «          d S d S d S )Nr,   )
r   r   r'   r   r   r0   r<   r=   r>   r?   )r
   r!   r   r6   r5   s        r   Úforce_release_GPU_residentrH   h   s!  € Ý
�uÑ
Ô
€CØÐÝ	ð Pð PÝ*¨3Ñ/Ô/×3Ò3°JÀÑEÔEˆØÐ$Ø,×0Ò0Ð1HÈ$ÑOÔOÐðPð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Põ Ð Ñ!Ô!ð %ØÐÑÔÐÝŒ:×"Ò"Ñ$Ô$ð 	%ÝŒJ×"Ò"Ñ$Ô$Ð$Ð$Ð$ð%ð %ð	%ð 	%s   ™<A!Á!A%Á(A%c                 ó¦  — t          | ¦  «        }g }d}	 t          5  |                     dd¦  «        }|�|dk    r/t          |d¬¦  «        }t	          |d¬¦  «         	 ddd¦  «         nœ|                     dd	¦  «        r	 ddd¦  «         d	S ||k    r5|                     d
d¦  «        d         }d|t                   |         › d�}|}t	          ||¬¦  «         ddd¦  «         n# 1 swxY w Y   t          j        d¦  «         Œñt          |¦  «         t          j                             ¦   «         rt          j                             ¦   «          dS )zaClaim the GPU for the main generation. False when the user aborts while another process holds it.NTr   r   Úmain©r2   ©r   ÚabortFú:é   z Media generation is waiting for z to release GPU resources...)Ústatusçš™™™™™¹?)r   r   r   r7   r   ÚsplitÚ_PROCESS_NAMES_KEYÚtimeÚsleeprA   r<   r=   r>   r?   )r
   r   r3   Ú
waiting_onr   r!   Úwait_msgs          r   Úacquire_main_GPU_ressourcesrX   u   sÚ  € å
�uÑ
Ô
€CØ€OØ€JðÝð 	7ð 	7Ø ŸWšWÐ%5°tÑ<Ô<ˆNØÐ%¨¸>Ò)IÐ)IÝ"JÈ3Ð]cÐ"dÑ"dÔ"d�Ý$ S¸ÐHÑHÔHÐHØð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð �wŠw�w Ñ&Ô&ð Øð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð  Ò+Ð+Ø+×1Ò1°#°qÑ9Ô9¸!Ô<�
Ø¸cÕBTÔ>UÐV`Ô>aÐÐÐ�Ø+�
Ý  ¨XÐ6Ñ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7õ 	Œ
�3‰Œˆðõ ˜Ñ)Ô)Ð)Ý„z×ÒÑ Ô ð !ÝŒ
×ÒÑ Ô Ð Øˆ4s   œAC&Á*C&ÂAC&Ã&C*Ã-C*c                 ó$  — t          | ¦  «        }t          5  |                     d¦  «        }|�#|dk    rt          |¦  «        r	 ddd¦  «         dS t	          ||¬¦  «        }d|                     di ¦  «        |<   ||                     t          i ¦  «        |<   t          |d|z   ¬¦  «         ddd¦  «         n# 1 swxY w Y   t          |¦  «         t          j
                             ¦   «         rt          j
                             ¦   «          d	S )
zFAtomically claim an idle GPU, without suspending an active generation.r   Nr   FrK   Úprocess_hierarchyúprocess:rL   T)r   r   r   r   r7   Ú
setdefaultrS   r   rA   r<   r=   r>   r?   )r
   r!   r-   r   rP   r3   s         r   Útry_acquire_GPU_ressourcesr]   Ž   s~  € å
�uÑ
Ô
€CÝ	ð Jð JØ—’Ð)Ñ*Ô*ˆØÐ v°Ò'?Ð'?ÕHfÐgjÑHkÔHkÐ'?ØðJð Jð Jñ Jô Jð Jð Jð Jõ CÀ3ÐU_Ð`Ñ`Ô`ˆØ>Bˆ�ŠÐ*¨BÑ/Ô/°
Ñ;Ø=Iˆ�ŠÕ)¨2Ñ.Ô.¨zÑ:Ý˜S°¸jÑ1HÐIÑIÔIÐIðJð Jð Jñ Jô Jð Jð Jð Jð Jð Jð Jøøøð Jð Jð Jð Jõ ˜Ñ)Ô)Ð)Ý„z×ÒÑ Ô ð !ÝŒ
×ÒÑ Ô Ð Øˆ4s   —.B:ÁAB:Â:B>ÃB>c                 óü  — t          | ¦  «        }d }g }	 t          5  |                     dd ¦  «        }	|	€t          ¦   «         }	|	|d<   |                     t          d ¦  «        }
|
€t          ¦   «         }
|
|t          <   ||
|<   |                     dd ¦  «        }|€Et          ||¦  «         d }t          ||¬¦  «        }t          |d|z   ¬¦  «         	 d d d ¦  «         �n8|d|z   k    rSt          |¦  «        sDt          ||¦  «         d }t          ||¬¦  «        }t          |d|z   ¬¦  «         	 d d d ¦  «         nÜ|dk    r‚t          |¦  «        sDt          ||¦  «         d }t          ||¬¦  «        }t          |d|z   ¬¦  «         	 d d d ¦  «         nƒ|}t          |d|z   ¬¦  «         |�|nd	|› �|d
<   	 d d d ¦  «         nT|d|z   k    rt          ||¦  «         	 d d d ¦  «         n.	 d d d ¦  «         n# 1 swxY w Y   t          j
        d¦  «         �Œt          |¦  «         |�òd}d}d}	 t          5  |                     dd ¦  «        }|d|z   k    r	 d d d ¦  «         n·|�|d|z   k    r0t          |¦  «        s!t          |d|z   ¬¦  «         	 d d d ¦  «         n|d d d ¦  «         n# 1 swxY w Y   ||z  }t          |d¦  «        dk    r7|�5|s3d}|€|                     d|› d�¦  «         n|                     |¦  «         t          j
        |¦  «         Œët          5  ||	|<   d d d ¦  «         n# 1 swxY w Y   t          j                             ¦   «         r t          j                             ¦   «          d S d S )NTrZ   r   rK   r[   rL   zrequest:r   z!Generation Suspended while using Ú	pause_msgrQ   r   Fé   é   zProcess z@ is Suspended while waiting that GPU Ressources become available)r   r   r   r	   rS   r)   r7   r   r   rT   rU   rA   ÚroundÚInfor<   r=   r>   r?   )r
   r!   r-   ÚgrÚcustom_pause_msgÚcustom_wait_msgr   Úoriginal_process_statusr3   rZ   r   r   Ú
total_waitÚ	wait_timeÚwait_msg_displayeds                  r   Úacquire_GPU_ressourcesrk   Ÿ   s¾  € Ý
�uÑ
Ô
€CØ"ÐØ€Oð(Ýð &	ð &	Ø #§¢Ð(;¸TÑ BÔ BÐØ Ð(Ý$(¡F¤FÐ!Ø*;�Ð'Ñ(ØŸGšGÕ$6¸Ñ=Ô=ˆMØÐ$Ý $¡¤�Ø*7�Õ&Ñ'Ø(4ˆM˜*Ñ%à ŸWšWÐ%5°tÑ<Ô<ˆNØÐ%Ý)¨#¨zÑ:Ô:Ð:Ø*.Ð'Ý"JÈ3Ð]gÐ"hÑ"hÔ"h�Ý$ S¸ÀjÑ9PÐQÑQÔQÐQØð#&	ð &	ð &	ñ &	ô &	ð &	ñ &	ð$   :°
Ñ#:Ò:Ð:ÕCaÐbeÑCfÔCfÐ:Ý)¨#¨zÑ:Ô:Ð:Ø*.Ð'Ý"JÈ3Ð]gÐ"hÑ"hÔ"h�Ý$ S¸ÀjÑ9PÐQÑQÔQÐQØð/&	ð &	ð &	ñ &	ô &	ð &	ð &	ð0   >Ò1Ð1Ý5°cÑ:Ô:ð Ý-¨c°:Ñ>Ô>Ð>Ø.2Ð+Ý&NÈsÐakÐ&lÑ&lÔ&l�OÝ(¨¸ZÈ*Ñ=TÐUÑUÔUÐUØð=&	ð &	ð &	ñ &	ô &	ð &	ð &	ð> +9Ð'Ý$ S¸ÀjÑ9PÐQÑQÔQÐQà7GÐ7SÐ#3Ð#3ð  ZLð  ~Jð  ZLð  ZL��KÑ ØðG&	ð &	ð &	ñ &	ô &	ð &	ð &	ðH   :°
Ñ#:Ò:Ð:Ý)¨#¨zÑ:Ô:Ð:ØðM&	ð &	ð &	ñ &	ô &	ð &	ð &	ðH ;ðI&	ð &	ð &	ñ &	ô &	ð &	ð &	ð &	ð &	ð &	ð &	øøøð &	ð &	ð &	ð &	õN 	Œ
�3‰ŒˆñQ(õT ˜Ñ)Ô)Ð)àÐ*Øˆ
Øˆ	Ø"Ðð	"Ýð ð Ø!$§¢Ð)9¸4Ñ!@Ô!@�Ø! Z°*Ñ%<Ò<Ð<Øðð ð ñ ô ð ð ð "Ð)¨nÀ
ÈZÑ@WÒ.WÐ.WÕ`~ð  @Cñ  aDô  aDÐ.Wå(¨¸ZÈ*Ñ=TÐUÑUÔUÐUØðð ð ñ ô ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˜)Ñ#ˆJÝ�Z Ñ"Ô" aÒ'Ð'¨B¨NÐCU¨NØ%)Ð"Ø"Ð*Ø—G’GÐu |ÐuÐuÐuÑvÔvÐvÐvà—G’G˜OÑ,Ô,Ð,åŒJ�yÑ!Ô!Ð!ð%	"õ( 
ð @ð @Ø(?Ð˜*Ñ%ð@ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @å„z×ÒÑ Ô ð !ÝŒ
×ÒÑ Ô Ð Ð Ð ð!ð !sV   œB6G6ÃAG6Ä;AG6Æ#G6ÇG6Ç6G:Ç=G:È6!J*É#/J*Ê*J.Ê1J.Ì!L3Ì3L7Ì:L7c                 óR  — t          | ¦  «        }t          j                             ¦   «         rt          j                             ¦   «          t
          5  |r&|p||t          |¦  «        dœt          |¦  «        |<   nt          ||¦  «         | 	                    di ¦  «        }| 
                    |d ¦  «        }|dk    rt          |¦  «        sd }t          ||¬¦  «         | 	                    t          i ¦  «         
                    |d ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrC   rZ   r   rL   )r   r<   r=   r>   r?   r   r   r'   r)   r   r   r   r   rS   )	r
   r!   Úkeep_residentr-   r,   r+   r   rZ   Úrestore_statuss	            r   Úrelease_GPU_ressourcesro   ì   sr  € Ý
�uÑ
Ô
€CÝ„z×ÒÑ Ô ð !ÝŒ
×ÒÑ Ô Ð Ý	ð >ð >Øð 	7à ,Ð :°
Ø)>Ý,0Ð1IÑ,JÔ,Jð3ð 3Õ˜sÑ#Ô# JÑ/Ð/õ & c¨:Ñ6Ô6Ð6ØŸGšGÐ$7¸Ñ<Ô<ÐØ*×.Ò.¨z¸4Ñ@Ô@ˆØ˜^Ò+Ð+Õ4RÐSVÑ4WÔ4WÐ+Ø!ˆNÝ˜S°Ð@Ñ@Ô@Ð@Ø�ŠÕ" BÑ'Ô'×+Ò+¨J¸Ñ=Ô=Ð=ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >ð >ð >s   ÁB<DÄD Ä#D )Fr   r   )NNN)FNNT)rT   Ú	threadingr<   Úshared.utils.generation_stater   ÚLockr   r   rS   r   r   r   r   r#   r'   r)   r7   rA   rD   rF   rH   rX   r]   rk   ro   © r   r   ú<module>rt      s{  ðà €€€Ø Ð Ð Ð Ø €€€Ø >Ð >Ð >Ð >Ð >Ð >àˆ9Œ>ÑÔ€Ø2Ð Ø$Ð ðð ð ð;ð ;ð ;ð5ð 5ð 5ð3ð 3ð 3ð
	dÐW\ð 	dð 	dð 	dð 	dð 	dðð ð ð2ð 2ð 2ðð ð ð ð$!ð !ð !ð
ð 
ð 
ð 
ð3ð 3ð 3ð
%ð 
%ð 
%ðð ð ð2ð ð ð"K!ð K!ð K!ð K!ðZ>ð >ð >ð >ð >ð >r   