§
    ÎÐjD  ã                  óf   — U d Z ddlmZ ddlZi Zded<   ddd
„Zddd„Zdd„Zdd„Z	ddd„Z
ddd„ZdS )aH  Registry of mmgp offload objects owned by WanGP extensions (postprocessing
upsamplers, voice converters, ...).

Every extension that creates its own ``offload.profile(...)`` object should
register it here so WanGP can track extension VRAM/RAM usage and release it
centrally (for instance from the toolbar "Unload Models" tool).
é    )ÚannotationsNz dict[str, tuple[object, object]]Ú_extension_offloadobjsÚnameÚstrÚreturnÚNonec                ó   — ||ft           | <   dS )zOTrack the offload object owned by extension `name` (replaces any previous one).N)r   )r   Ú
offloadobjÚ
release_fns      úEC:\Users\johnn\OneDrive\Documents\AI\shared\utils\offload_registry.pyÚregister_offloadobjr      s   € à$.°
Ð#;Õ˜4Ñ Ð Ð ó    c                ó”   — t                                | ¦  «        }|�)|�
|d         |u rt                                | d¦  «         dS dS dS )zŽStop tracking the offload object of extension `name`.

    If `offloadobj` is provided, only unregister when it is still the tracked one.
    Nr   )r   ÚgetÚpop)r   r
   Úentrys      r   Úunregister_offloadobjr      sZ   € õ
 #×&Ò& tÑ,Ô,€EØÐ˜jÐ0°E¸!´HÀ
Ð4JÐ4JÝ×"Ò" 4¨Ñ.Ô.Ð.Ð.Ð.ð ÐÐ4JÐ4Jr   ú	list[str]c                 ó*   — t          t          ¦  «        S ©N)Úlistr   © r   r   Úregistered_namesr   #   s   € ÝÕ&Ñ'Ô'Ð'r   údict[str, object]c                 óH   — d„ t                                ¦   «         D ¦   «         S )Nc                ó&   — i | ]\  }}||d          “ŒS )r   r   )Ú.0r   r   s      r   ú
<dictcomp>z%query_offloadobjs.<locals>.<dictcomp>(   s"   € ÐMÐMÐM™{˜t UˆD�%˜”(ÐMÐMÐMr   )r   Úitemsr   r   r   Úquery_offloadobjsr    '   s#   € ØMÐMÕ.D×.JÒ.JÑ.LÔ.LÐMÑMÔMÐMr   c                ó†  — g }| €t          t          ¦  «        nt          | ¦  «        D ]M}t                               |¦  «        }|€Œ|\  }}|                     ¦   «          |                     |¦  «         ŒN|rIt          j        ¦   «          dd l}|j         	                    ¦   «         r|j         
                    ¦   «          |S )Nr   )r   r   r   Ú
unload_allÚappendÚgcÚcollectÚtorchÚcudaÚis_availableÚempty_cache)ÚnamesÚunloadedr   r   r
   Ú_r&   s          r   Úunload_vramr-   +   sÄ   € Ø€HØ05°•Õ+Ñ,Ô,Ð,Å4ÈÁ;Ä;ð ð ˆÝ&×*Ò*¨4Ñ0Ô0ˆØˆ=ØØ‰ˆ
�AØ×ÒÑÔÐØ�Š˜ÑÔÐÐØð %Ý
Œ
‰ŒˆØˆˆˆØŒ:×"Ò"Ñ$Ô$ð 	%ØŒJ×"Ò"Ñ$Ô$Ð$Ø€Or   c                ó¢  — g }| €t          t          ¦  «        nt          | ¦  «        D ][}t                               |d¦  «        }|€Œ |\  }}|� |¦   «          n|                     ¦   «          |                     |¦  «         Œ\|rIt          j        ¦   «          ddl}|j         	                    ¦   «         r|j         
                    ¦   «          |S )z‘Release the offload objects of the given extensions (all when `names` is None).

    Returns the names of the extensions that were released.
    Nr   )r   r   r   Úreleaser#   r$   r%   r&   r'   r(   r)   )r*   Úreleasedr   r   r
   r   r&   s          r   Úrelease_allr1   <   sÜ   € ð
 €HØ05°•Õ+Ñ,Ô,Ð,Å4ÈÁ;Ä;ð 	ð 	ˆÝ&×*Ò*¨4°Ñ6Ô6ˆØˆ=ØØ!&Ñˆ
�JØÐ!ØˆJ‰LŒLˆLˆLà×ÒÑ Ô Ð Ø�Š˜ÑÔÐÐØð %Ý
Œ
‰ŒˆØˆˆˆØŒ:×"Ò"Ñ$Ô$ð 	%ØŒJ×"Ò"Ñ$Ô$Ð$Ø€Or   r   )r   r   r   r   )r   r   )r   r   )Ú__doc__Ú
__future__r   r$   r   Ú__annotations__r   r   r   r    r-   r1   r   r   r   ú<module>r5      sß   ððð ð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	ð
 <>Ð Ð =Ð =Ð =Ñ =ð<ð <ð <ð <ð <ð
/ð /ð /ð /ð /ð(ð (ð (ð (ðNð Nð Nð Nðð ð ð ð ð"ð ð ð ð ð ð r   