
    ]i}                        S SK Jr  S SKJrJr  S SKJr  S SKrS SKJ	r	  S SK
rSSKJr  SSKJr  SS	KJr  S
\R$                  \R&                     S\4S jr\" SS9 " S S5      5       r " S S5      r\" 5       rS\4S jrS\4S jrg)    )contextmanager)	dataclassfield)sha1N)Path   )
DoraConfig)Link)jsonabledeltareturnc                     [        U 5      n[        [        R                  " U5      R	                  S5      5      R                  5       S S $ )Nutf8   )sortedr   jsondumpsencode	hexdigest)r   sorted_deltas     D/mnt/rpi/tmp/demucs-venv-sys/lib/python3.13/site-packages/dora/xp.py_get_sigr      s:    %=L

<(//78BBDRaHH    F)initc                   
   \ rS rSr% Sr\\S'   \R                  \S'   \R                  \
   \S'   \
\S'   \R                  \R                  \R                  \
\R                  4         \S'   \" SS	9r\\S
'     SS\S\R                  S\R                  \
   S\R                  \R                  \R                  \
\R                  4         S\R                  \
   4
S jjr\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\R                  \   4S j5       r\S\R                  \   4S j5       r\SS\4S jj5       rSr g)XP   z
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           	      L   Xl         X l        X0l        Ub9  [        U VVs/ s H   u  pgUR	                  U5      (       a  M  Xg4PM"     snn5      nX@l        Uc  Uc   e[        U5      nXPl        [        U R                  U R                   R                  -  5      U l        g s  snnf N)r   r   r    r   is_excludedr   r   r!   r
   folderhistoryr#   )selfr   r   r    r   r!   kvs           r   __init__XP.__init__(   s     		Rd>N>Nq>QfqfRSE
;$$$5/Ctyy'8'889	 Ss   B 
 B 
r   c                     U R                   c   eU R                  R                  U R                  R                  -  U R                   -  $ r%   )r!   r   dirxpsr)   s    r   r'   	XP.folder7   s6    xx###yy}}tyy}},txx77r   c                 l    U R                   R                  (       a  U R                  S-  $ [        S5      $ )Ncode.)r   git_saver'   r   r1   s    r   code_folderXP.code_folder<   s(    99;;''9r   c                 \    U R                   U R                  R                  R                  -  $ r%   )r'   r   shepsubmitit_folderr1   s    r   _xp_submititXP._xp_submititC       {{TYY^^;;;;r   c                 \    U R                   U R                  R                  R                  -  $ r%   )r'   r   r:   latest_submititr1   s    r   _latest_submititXP._latest_submititG   r>   r   c                 p    U R                   R                  5       (       a  U R                   $ U R                  $ r%   )rA   existsr<   r1   s    r   submititXP.submititK   s/      ''))((($$$r   c                 H    U R                   U R                  R                  -  $ r%   )r'   r   rendezvous_filer1   s    r   rH   XP.rendezvous_fileR   s    {{TYY6666r   c                 H    U R                   U R                  R                  -  $ r%   )r'   r   r(   r1   s    r   r(   
XP.historyV   s    {{TYY....r   c                      U R                   S-  $ Nz
.argv.json)r'   r1   s    r   _argv_cacheXP._argv_cacheZ   s    {{\))r   c                     U R                   R                  b:  U R                   R                  U R                   R                  -  U R                  -  $ g r%   )r   sharedr0   r!   r1   s    r   _shared_folderXP._shared_folder^   s;    99'99##diimm3dhh>>r   c                 <    U R                   b  U R                   S-  $ g rM   )rR   r1   s    r   _shared_argv_cacheXP._shared_argv_cached   s"    *&&55r   stackc              #   r   #    [         R                  X5         Sv   SSS5        g! , (       d  f       g= f7f)zContext 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)   rW   s     r   enterXP.enterj   s#      t+ ,++s   7&	7
47)r    r   r   r   r#   r!   )NNF)!__name__
__module____qualname____firstlineno____doc__r	   __annotations__tpAnyListstrOptionalTupler   r#   r
   r,   propertyr   r'   r7   r<   rA   rE   rH   r(   rN   rR   rU   r   boolr[   __static_attributes__ 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                   >    \ rS rSrSS jr\S	S\S\4S jj5       rSr	g)
_Contextx   Nc                     / U l         g r%   _xpsr1   s    r   r,   _Context.__init__{   s	    !#	r   xprW   c              #     #    U R                   (       a  U(       d  [        S5      eU R                   R                  U5         S v   U R                   R                  S5        g ! U R                   R                  S5        f = f7f)NzAlready in a xp.)rs   RuntimeErrorappendpop)r)   ru   rW   s      r   rZ   _Context.enter_xp~   sT     99U122			IIMM"DIIMM"s   ?BA" B"A??Brr   )r   Nr]   )
r^   r_   r`   ra   r,   r   r   rk   rZ   rl   rm   r   r   ro   ro   x   s)    $ 2 d  r   ro   c                  h    [         R                  (       d  [        S5      e[         R                  S   $ )zWWhen running from within an XP, returns the XP object.
Otherwise, raises RuntimeError.
zNot in a xp!rw   )rY   rs   rx   rm   r   r   get_xpr}      s%     ==>**}}R  r   c                  4    [        [        R                  5      $ )z$Return True if running within an XP.)rk   rY   rs   rm   r   r   is_xpr      s    r   )
contextlibr   dataclassesr   r   hashlibr   r   pathlibr   typingrd   confr	   r#   r
   utilsr   rf   re   rg   r   r   ro   rY   r}   rk   r   rm   r   r   <module>r      s    & (       IBGGBFFO I I [ [ [| " :! !t r   