
    Vh}                     "   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dS )    )contextmanager)	dataclassfield)sha1N)Path   )
DoraConfig)Link)jsonabledeltareturnc                     t          |           }t          t          j        |                              d                                                    d d         S )Nutf8   )sortedr   jsondumpsencode	hexdigest)r   sorted_deltas     M/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/dora/xp.py_get_sigr      sH    %==L
<((//7788BBDDRaR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d
S )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                     | _         || _        || _        |t          fd|D                       }|| _        ||J t          |          }|| _        t          | j        | j         j	        z            | _
        d S )Nc                 H    g | ]\  }}                     |          ||fS  )is_excluded).0kvr   s      r   
<listcomp>zXP.__init__.<locals>.<listcomp>/   s4    RRRAd>N>Nq>Q>QRq!fRRRr   )r   r   r   r   r   r   r    r
   folderhistoryr"   )selfr   r   r   r   r    s    `    r   __init__zXP.__init__(   s     		RRRRRRRSSE
;$$$5//Cty'8899			r   r   c                 V    | j         J | j        j        | j        j        z  | j         z  S N)r    r   dirxpsr-   s    r   r+   z	XP.folder7   s*    x###y}ty},tx77r   c                 L    | j         j        r
| j        dz  S t          d          S )Ncode.)r   git_saver+   r   r3   s    r   code_folderzXP.code_folder<   s(    9 	;''99r   c                 4    | j         | j        j        j        z  S r0   )r+   r   shepsubmitit_folderr3   s    r   _xp_submititzXP._xp_submititC       {TY^;;;r   c                 4    | j         | j        j        j        z  S r0   )r+   r   r:   latest_submititr3   s    r   _latest_submititzXP._latest_submititG   r=   r   c                 P    | j                                         r| j         S | j        S r0   )r@   existsr<   r3   s    r   submititzXP.submititK   s+     '')) 	%(($$r   c                 *    | j         | j        j        z  S r0   )r+   r   rendezvous_filer3   s    r   rE   zXP.rendezvous_fileR   s    {TY666r   c                 *    | j         | j        j        z  S r0   )r+   r   r,   r3   s    r   r,   z
XP.historyV   s    {TY...r   c                     | j         dz  S Nz
.argv.json)r+   r3   s    r   _argv_cachezXP._argv_cacheZ   s    {\))r   c                 `    | j         j        !| j         j        | j         j        z  | j        z  S d S r0   )r   sharedr2   r    r3   s    r   _shared_folderzXP._shared_folder^   s-    9'9#dim3dh>>tr   c                 (    | j         
| j         dz  S d S rH   )rL   r3   s    r   _shared_argv_cachezXP._shared_argv_cached   s    *&55tr   stackc              #   z   K   t                               | |          5  dV  ddd           dS # 1 swxY w Y   dS )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-   rO   s     r   enterzXP.enterj   s       tU++ 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   044)NNF)__name__
__module____qualname____doc__r	   __annotations__tpAnyListstrOptionalTupler   r"   r
   r.   propertyr   r+   r8   r<   r@   rC   rE   r,   rI   rL   rN   r   boolrS   r%   r   r   r   r      s          	KKK
'#,	HHH;rwrxRV456666u%%%D$%%% GK)-: :Z :bf :BGCL :BGBHS"&[,A$BC:k#&: : : : 8 8 8 8 X8 T    X <d < < < X< <$ < < < X< %$ % % % X% 7 7 7 7 X7 / / / / X/ *T * * * X* D 1    X
 BK$5    X
 
 
4 
 
 
 ^
 
 
r   r   c                   8    e Zd ZddZed	dedefd            ZdS )
_Contextr   Nc                     g | _         d S r0   )_xpsr3   s    r   r.   z_Context.__init__{   s    !#			r   FxprO   c              #      K   | j         r|st          d          | j                             |           	 d V  | j                             d           d S # | j                             d           w xY w)NzAlready in a xp.)re   RuntimeErrorappendpop)r-   rf   rO   s      r   rR   z_Context.enter_xp~   s~      9 	3U 	31222		EEEIMM"DIMM"s   A A2)r   NrT   )rU   rV   rW   r.   r   r   ra   rR   r%   r   r   rc   rc   x   s[        $ $ $ $  2 d    ^  r   rc   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!rh   )rQ   re   ri   r%   r   r   get_xprm      s)     = !>***}R  r   c                  4    t          t          j                  S )z$Return True if running within an XP.)ra   rQ   re   r%   r   r   is_xpro      s    r   )
contextlibr   dataclassesr   r   hashlibr   r   pathlibr   typingrZ   confr	   r"   r
   utilsr   r\   r[   r]   r   r   rc   rQ   rm   ra   ro   r%   r   r   <module>rw      s   & % % % % % ( ( ( ( ( ( ( (                                   IBGBFO I I I I I [ [ [ [ [ [ [ [|       " 8::! ! ! ! !t      r   