Ë
    @çi}  ã                   ó  — d dl mZ d dlmZmZ d dlmZ d dlZd dlm	Z	 d dl
ZddlmZ ddlmZ dd	lmZ d
ej$                  ej&                     defd„Z ed¬«       G d„ d«      «       Z G d„ d«      Z e«       Zdefd„Zdefd„Zy)é    )Úcontextmanager)Ú	dataclassÚfield)Úsha1N)ÚPathé   )Ú
DoraConfig)ÚLink)ÚjsonableÚdeltaÚreturnc                 ó”   — t        | «      }t        t        j                  |«      j	                  d«      «      j                  «       d d S )NÚutf8é   )Úsortedr   ÚjsonÚdumpsÚencodeÚ	hexdigest)r   Úsorted_deltas     ú\/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/dora/xp.pyÚ_get_sigr      s:   € ä˜%“=€LÜ”—
‘
˜<Ó(×/Ñ/°Ó7Ó8×BÑBÓDÀRÀaÐHÐHó    F)Úinitc                   óì  — e Zd ZU dZeed<   ej                  ed<   ej                  e	   ed<   e	ed<   ej                  ej                  ej                  e	ej                  f         ed<    ed¬«      Zeed	<   	 	 ddedej                  dej                  e	   dej                  ej                  ej                  e	ej                  f         dej                  e	   f
d„Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedej                  e   fd„«       Zedej                  e   fd„«       Zeddefd„«       Zy
)ÚXPz˜
    Represent a single experiment, i.e. a specific set of parameters
    that is linked to a unique signature.

    One XP can have multiple runs.
    ÚdoraÚcfgÚargvÚsigr   F)ÚcompareÚlinkNc           	      óB  — || _         || _        || _        |�2t        |D ��cg c]  \  }}|j	                  |«      rŒ||f‘Œ c}}«      }|| _        |€|€J ‚t        |«      }|| _        t        | j                  | j                   j                  z  «      | _        y c c}}w ©N)r   r   r   r   Úis_excludedr   r   r    r
   ÚfolderÚhistoryr"   )Úselfr   r   r   r   r    ÚkÚvs           r   Ú__init__zXP.__init__(   sš   € ð ˆŒ	ØˆŒØˆŒ	ØÐÜ±ÔR±©¨¨A¸d×>NÑ>NÈqÕ>Q˜q !šf°ÒRÓSˆEØˆŒ
Øˆ;ØÐ$Ð$Ð$Ü˜5“/ˆCØˆŒÜ˜Ÿ™ t§y¡y×'8Ñ'8Ñ8Ó9ˆ�	ùó Ss
   ¢B
¼B
r   c                 ó’   — | j                   €J ‚| j                  j                  | j                  j                  z  | j                   z  S r$   )r    r   ÚdirÚxps©r(   s    r   r&   z	XP.folder7   s6   € à�x‰xÐ#Ð#Ð#Ø�y‰y�}‰}˜tŸy™yŸ}™}Ñ,¨t¯x©xÑ7Ð7r   c                 ób   — | j                   j                  r| j                  dz  S t        d«      S )NÚcodeÚ.)r   Úgit_saver&   r   r/   s    r   Úcode_folderzXP.code_folder<   s(   € à�9‰9×ÒØ—;‘; Ñ'Ð'ä˜“9Ðr   c                 ó\   — | j                   | j                  j                  j                  z  S r$   )r&   r   ÚshepÚsubmitit_folderr/   s    r   Ú_xp_submititzXP._xp_submititC   ó   € à�{‰{˜TŸY™YŸ^™^×;Ñ;Ñ;Ð;r   c                 ó\   — | j                   | j                  j                  j                  z  S r$   )r&   r   r6   Úlatest_submititr/   s    r   Ú_latest_submititzXP._latest_submititG   r9   r   c                 óf   — | j                   j                  «       r| j                   S | j                  S r$   )r<   Úexistsr8   r/   s    r   ÚsubmititzXP.submititK   s,   € à× Ñ ×'Ñ'Ô)Ø×(Ñ(Ð(à×$Ñ$Ð$r   c                 óH   — | j                   | j                  j                  z  S r$   )r&   r   Úrendezvous_filer/   s    r   rA   zXP.rendezvous_fileR   s   € à�{‰{˜TŸY™Y×6Ñ6Ñ6Ð6r   c                 óH   — | j                   | j                  j                  z  S r$   )r&   r   r'   r/   s    r   r'   z
XP.historyV   s   € à�{‰{˜TŸY™Y×.Ñ.Ñ.Ð.r   c                 ó    — | j                   dz  S ©Nz
.argv.json)r&   r/   s    r   Ú_argv_cachezXP._argv_cacheZ   s   € à�{‰{˜\Ñ)Ð)r   c                 ó¤   — | j                   j                  �:| j                   j                  | j                   j                  z  | j                  z  S y r$   )r   Úsharedr.   r    r/   s    r   Ú_shared_folderzXP._shared_folder^   s;   € à�9‰9×ÑÐ'Ø—9‘9×#Ñ# d§i¡i§m¡mÑ3°d·h±hÑ>Ð>Ør   c                 ó:   — | j                   �| j                   dz  S y rD   )rH   r/   s    r   Ú_shared_argv_cachezXP._shared_argv_cached   s"   € à×ÑÐ*Ø×&Ñ&¨Ñ5Ð5Ør   Ústackc              #   ój   K  — t         j                  | |«      5  d–— ddd«       y# 1 sw Y   yxY w­w)a!  Context manager, fake being in the XP for its duration.

        Set `stack=True` if you want to allow this to happen from within
        another experiment.

        ..Warning:: For hydra experiment, this will not convert any path
            automatically, or setup loggers etc.
        N)Ú_contextÚenter_xp)r(   rK   s     r   ÚenterzXP.enterj   s&   è ø€ ô ×Ñ˜t UÕ+Û÷ ,×+Ñ+üs   ‚3™'ž	3§0¬3)NN©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   Ú__annotations__ÚtpÚAnyÚListÚstrÚOptionalÚTupler   r"   r
   r+   Úpropertyr   r&   r4   r8   r<   r?   rA   r'   rE   rH   rJ   r   ÚboolrO   © r   r   r   r      s
  … ñð ÓØ	�‰ƒKØ
�'‰'�#‰,ÓØ	ƒHØ�;‰;�r—w‘w˜rŸx™x¨¨R¯V©V¨Ñ4Ñ5Ñ6Ó6Ù˜uÔ%€Dˆ$Ó%ð GKØ)-ñ:˜Zð :¨b¯f©fð :¸B¿G¹GÀC¹Lð :ØŸ™ B§G¡G¨B¯H©H°S¸"¿&¹&°[Ñ,AÑ$BÑCð:à—k‘k #Ñ&ó:ð ð8˜ò 8ó ð8ð ð˜Tò ó ðð ð<˜dò <ó ð<ð ð< $ò <ó ð<ð ð%˜$ò %ó ð%ð ð7 ò 7ó ð7ð ð/˜ò /ó ð/ð ð*˜Tò *ó ð*ð ð §¡¨DÑ 1ò ó ðð
 ð B§K¡K°Ñ$5ò ó ðð
 ñ
˜4ò 
ó ñ
r   r   c                   ó0   — e Zd Zdd„Zeddedefd„«       Zy)Ú_ContextNc                 ó   — g | _         y r$   )Ú_xpsr/   s    r   r+   z_Context.__init__{   s	   € Ø!#ˆ�	r   ÚxprK   c              #   óô   K  — | j                   r|st        d«      ‚| j                   j                  |«       	 d –— | j                   j                  d«       y # | j                   j                  d«       w xY w­w)NzAlready in a xp.éÿÿÿÿ)rb   ÚRuntimeErrorÚappendÚpop)r(   rc   rK   s      r   rN   z_Context.enter_xp~   sU   è ø€ à�9Š9™UÜÐ1Ó2Ð2Ø�	‰	×Ñ˜Ôð	Ûà�I‰I�M‰M˜"ÕøˆD�I‰I�M‰M˜"Õüs   ‚5A8¸A ¼A8ÁA5Á5A8)r   NrP   )rQ   rR   rS   r+   r   r   r]   rN   r^   r   r   r`   r`   x   s)   „ ó$ð ñ˜2ð  dò ó ñr   r`   c                  ó^   — t         j                  st        d«      ‚t         j                  d   S )z_When running from within an XP, returns the XP object.
    Otherwise, raises RuntimeError.
    zNot in a xp!re   )rM   rb   rf   r^   r   r   Úget_xprj   Œ   s%   € ô �=Š=Ü˜>Ó*Ð*ä�}‰}˜RÑ Ð r   c                  ó4   — t        t        j                  «      S )z$Return True if running within an XP.)r]   rM   rb   r^   r   r   Úis_xprl   –   s   € ä”—‘ÓÐr   )Ú
contextlibr   Údataclassesr   r   Úhashlibr   r   Úpathlibr   ÚtypingrV   Úconfr	   r"   r
   Úutilsr   rX   rW   rY   r   r   r`   rM   rj   r]   rl   r^   r   r   Ú<module>rt      s‘   ðõ &ß (Ý Û Ý Û å Ý Ý ðI�B—G‘G˜BŸF™F‘Oð I¨ó Iñ �Ô÷[ð [ó ð[÷|ñ ñ" ‹:€ð!�ó !ðˆtô r   