
    m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     A/var/www/stems/demucs_env/lib/python3.12/site-packages/dora/xp.py_get_sigr      s:    %=L

<(//78BBDRa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Ad>N>Nq>Qq!fRSE
;$$$5/Ctyy'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    xx###yy}}tyy}},txx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(    99;;''9r   c                 \    | j                   | j                  j                  j                  z  S r$   )r&   r   shepsubmitit_folderr/   s    r   _xp_submititzXP._xp_submititC       {{TYY^^;;;;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    {{TYY6666r   c                 H    | j                   | j                  j                  z  S r$   )r&   r   r'   r/   s    r   r'   z
XP.historyV   s    {{TYY....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;    99'99##diimm3dhh>>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/      tU+ 		 	 	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;;rwwrxxRVV4566u%D$% GK)-:Z :bff :BGGCL :BGGBHHS"&&[,A$BC:kk#&: 8 8 8 T   <d < < <$ < < %$ % % 7 7 7 / / / *T * * D 1  
 BKK$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     99U122			IIMM"DIIMM"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BGGBFFO I I [ [ [| " :! !t r   