
    Vh+                        d Z ddlZddlmZmZ ddlmZ ddlZddlZddl	m
Z
 ddlZddlZddlmZ ddlZddlmZ 	 ddlmZmZ d	Zn# e$ r ddlmZmZ d
ZY nw xY wddlmZ ddlmZmZmZ ddlmZm Z  ddl!m"Z"m#Z#m$Z$  ej%        e&          Z'dej(        dej(        fdZ) edd          Z* G d d          Z+ e+            Z,g fdZ-dej.        e/         dej0        e/         fdZ1d Z2d Z3 G d de          Z4de/d e/fd!Z5dS )"zz
This module provides support for Hydra, in particular the `main` wrapper between
the end user `main` function and Hydra.
    N)
namedtupleOrderedDict)	find_spec)Path)mock)GlobalHydra)composeinitialize_config_dirFT)
DictConfig   )
DoraConfigSlurmConfigupdate_from_hydra)DecoratedMainMainFun)XPget_xpis_xpselfmemoc                     | S N )r   r   s     P/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/dora/hydra.py_no_copyr   (   s	     K    _Differencez(path key ref other ref_value other_valuec                       e Zd ZdS )	_NotThereN)__name__
__module____qualname__r   r   r   r   r   1   s        Dr   r   c           	   #      K   t          |                                           }t          t          |                                          t          |                                           z
            }g }|                    d           |D ]}||d<   | |         }||v sJ d|             ||         }t	          |t
                    rKt	          |t
                    sJ d| dt          |           d            t          |||          E d{V  ||k    r#t          t          |          || |||          V  |D ]7}||d<   ||         }t          t          |          || |t          |          V  8|                    d           |S )z
    Given two configs, gives an iterator over all the differences. For each difference,
    this will give a _Difference namedtuple.
    Nz4XP config shouldn't be missing any key. Missing key zDStructure of config should be identical between XPs. Wrong type for z, expected DictConfig, got .)sortedkeyssetappend
isinstancer   type_compare_configr   listNotTherepop)	refotherpathr'   	remainingdeltakey	ref_valueother_values	            r   r,   r,   8   s     
 #((**Ds5::<<((3sxxzz??:;;IEKK S SRH	e|||YTWYY|||Cji,, 	Sk:66 W WW"%W WBF{BSBSW W WW W6 'y+tDDDDDDDDDDI%%d4jj#sE9kRRRRR N NRCj$t**c3xMMMMMMHHRLLLLr   argvreturnc                 J   g }t                      }t          |           d d d         D ]p}d|v sJ d| d            |                    dd          \  }}|                                }||v rF|                    |           |                    |           q|d d d         S )Nr$   =z	Argument z does not contain =r   )r(   r-   splitstripaddr)   )r8   
simplifiedseenargr5   values         r   _simplify_argvrC   W   s    J55DDzz$$B$ # #czzz?s???zzzYYsA&&
Uiikk$;;HHSMMMc""""dddr   c                     | dS t          | t          t          t          f          rt	          |           S t          | t                    rd| vsJ | S t          dt          |            d|            )Nnull:zUnsupported dict key type z	 for key )r*   boolintfloatstr	TypeErrorr+   )r5   s    r   	_dump_keyrL   f   s{    
{v	C$U+	,	, P3xx	C		 P#~~~~
NT#YYNNNNOOOr   c                    | dS t          | t          t          t          t          f          rt          j        |           S t          | t                    r7dd                    d | 	                                D                       z   dz   S t          | t          t          f          r%dd                    d | D                       z   dz   S t          d	t          |            d
|            )NrE   {z, c              3   ^   K   | ](\  }}t          |           d t          |           V  )dS )z: N)rL   _hydra_value_as_override).0r5   vals      r   	<genexpr>z+_hydra_value_as_override.<locals>.<genexpr>z   sW       
 
S ~~@@!9#!>!>@@
 
 
 
 
 
r   }[c              3   4   K   | ]}t          |          V  d S r   )rP   )rQ   rR   s     r   rS   z+_hydra_value_as_override.<locals>.<genexpr>   s+      NN7<<NNNNNNr   ]zUnsupported value type z for value )r*   rG   rH   rI   rJ   jsondumpsdictjoinitemsr-   tuplerK   r+   )rB   s    r   rP   rP   r   s    }v	ED#uc2	3	3 
Sz%   	E4	 	  STYY 
 
!KKMM
 
 
 
 
 
  	 
ED%=	)	) STYYNNNNNNNNQTTTQ$u++QQ%QQRRRr   c            
           e Zd ZdZdededef fdZdefdZde	fdZ
d	ej        e         fd
Zdej        dej        e         fdZdedefdZd Zdej        e         fdZd	ej        e         defdZg fdej        e         dej        eej        ej        eef                  f         fdZg fdej        e         defdZg fdej        e         defdZdedefdZ xZS )	HydraMainTmainconfig_nameconfig_pathc                 @   || _         || _        || _        |j        }|dk    rt          j        |         j        }|4t          j        d         }|                    dd          d         | _	        n{|j
        J |j
        }|j        }|                    dd          d         | _	        nBt          |          }||j
        J |j
        }|                    dd          d         | _	        t          |          j                                        | _        || j        |z  | _        d| _        |                                 | _        |                                 | _        |                                 }t/                                          ||           d|_        d S )N__main__r   r%      r   F)ra   rb   hydra_kwargsr!   sysmodules__spec__r8   rsplit	_job_nameoriginnamer   r   parentresolvefull_config_path_initialized_get_config	_base_cfg_get_config_groups_config_groups	_get_dorasuper__init__)
r   r`   ra   rb   kwargsmodulespecmodule_pathdora	__class__s
            r   rx   zHydraMain.__init__   s}   &&"Z;v&/D|!hqk!,!3!3C!;!;A!>{..."k!'sA!6!6q!9V$$D#(?(??+K#]]32215DN $[ 1 1 8 @ @ B B"$($9K$GD!!))++"5577~~t$$$ %r   r9   c                     t                      }t          | j        d          rt          || j        j                   |xj        ddgz  c_        t          |j                  |_        |S )Nr}   zdora.*zslurm.*)r   hasattrrs   r   r}   excluder   dir)r   r}   s     r   rv   zHydraMain._get_dora   s]    ||4>6** 	9dDN$78889-->>r   c                     t                      }t          | j        d          rt          || j        j                   |S )zEReturn default Slurm config for the launch and grid actions.
        slurm)r   r   rs   r   r   )r   r   s     r   get_slurm_configzHydraMain.get_slurm_config   s;     4>7++ 	;eT^%9:::r   r8   c                     t          |          }|                     |          }|                     |          \  }}||                     ||          z  }t	          | j        |||          }|S )N)r}   cfgr8   r4   )rC   rr   _get_base_config
_get_deltar   r}   )r   r8   r   baser4   xps         r   r   zHydraMain.get_xp   sn    d##t$$++D11es+++TYCd%@@@	r   rA   c                    g }t          |t                    r|                    |           nt          |t                    rM|                                D ]7\  }}|| j        vrt          |          }|                    | d|            8nLt          |t          t          f          r|D ]}|| 	                    |          z  }nt          d|           |S )Nr;   z5Can only process dict, tuple, lists and str, but got )r*   rJ   r)   rZ   r\   ru   rP   r-   r]   value_to_argv
ValueError)r   rA   r8   r5   rB   parts         r   r   zHydraMain.value_to_argv   s
   
 c3 	\KKT"" 	\!iikk . .
Ud111 5U;;Es,,U,,----. dE]++ 	\ 1 1**40001 ZUXZZ[[[r   r   c                 X    t                      }|j        J |j        D ]
\  }}|||<   |S r   )r   r4   )r   r   partsrm   rB   s        r   get_name_partszHydraMain.get_name_parts   s>    x###8 	  	 KD%E$KKr   c                    t                      r5dt                      j         }t          j                            |           	   t          j        d| j        | j	        d| j
        | j                              t                      r t          j                            |           S S # t                      r t          j                            |           w w xY w)Nzhydra.run.dir=ra   rb   r   )r   r   folderrg   r8   r)   hydrar`   ra   rb   rf   remove)r   run_dirs     r   _mainzHydraMain._main   s    77 	%8vxx88GHOOG$$$	)0 %5: % , ,% % #% % &*Y0 0 2 2
 ww )(((()uww )(((()s   8B, ,0Cc                    t          t          | j                  fd| j        i| j        5  t          j                    j        }|J t          |	                                          cd d d            S # 1 swxY w Y   d S )Njob_name)
r
   rJ   rp   rk   rf   r   instancer   r-   list_all_config_groups)r   ghs     r   rt   zHydraMain._get_config_groups   s    "3t'<#=#= 8 8 8%)%68 8 	5 	5%''-B>>>113344		5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   =A66A:=A:c                     d|v sd|v rdS dS )Nz-mz
--multirunFTr   )r   r8   s     r   
_is_activezHydraMain._is_active   s    4<<<4//5tr   	overridesc                 "  	 t          t          | j                  fd| j        i| j        5  t          j                    j        }|J g }g }|D ]w}| j        D ]m	|	                    	 d          rS|
                    |           |                    dd          \  }}	fd|D             }|
                    	|f           nx|s| j        g fcddd           S |                     |          }||fcddd           S # 1 swxY w Y   dS )zr
        Return base config based on composition, along with delta for the
        composition overrides.
        r   Nr;   r   c                 *    g | ]\  }}|k    ||fS r   r   )rQ   gvgroups      r   
<listcomp>z.HydraMain._get_base_config.<locals>.<listcomp>
  s&     H H HDAqQ%ZZ!QZZZr   )r
   rJ   rp   rk   rf   r   r   r   ru   
startswithr)   r<   rs   _get_config_noinit)
r   r   r   to_keepr4   rA   _rB   r   r   s
            @r   r   zHydraMain._get_base_config   s    #3t'<#=#= 8 8 8%)%68 8 	 	%''-B>>>G13E  5 5!0 5 5E~~kkk22 5s+++#&99S!#4#45 H H H HE H H HeU^4445  *~r)	 	 	 	 	 	 	 	 ))'22C:!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B%DDDDc                     t          t          | j                  fd| j        i| j        5  |                     |          cddd           S # 1 swxY w Y   dS )z|
        Internal method, returns the config for the given override,
        but without the dora.sig field filled.
        r   N)r
   rJ   rp   rk   rf   r   )r   r   s     r   rr   zHydraMain._get_config  s     #3t'<#=#= 8 8 8%)%68 8 	6 	6**955	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   AAAc                    t           rmt          j                            t          dt
                    5  t          | j        |          }d d d            n# 1 swxY w Y   t          j	        |          }nt          | j        |          }|S )N__deepcopy__)
	old_hydrar   patchobjectr   r   r	   ra   copydeepcopy)r   r   r   s      r   r   zHydraMain._get_config_noinit  s     	7"":~xHH ; ;d.	::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;-$$CC$*I66C
s   AAAinitr1   c                     g }t          ||          D ]8}d                    |j                  }|                    ||j        f           9|S )za
        Returns an iterator over all the differences between the init and other config.
        r%   )r,   r[   r2   r)   r7   )r   r   r1   r4   diffrm   s         r   r   zHydraMain._get_delta$  sW     #D%00 	3 	3D88DI&&DLL$ 012222r   )r    r!   r"   _slowr   rJ   rx   r   rv   r   r   tpSequencer   AnyListr   r   r   r   r   rt   rG   r   Tupler   r   rr   r   r   __classcell__)r~   s   @r   r_   r_      s.       E!%W !%3 !%S !% !% !% !% !% !%F:    +    2;s+     BGCL    ,     ) ) )5BGCL 5 5 5 5rws|      -/ WS\*bgbhsCx.@&AAB   4 /16 6!ws|65?6 6 6 6 <>  BGCL *    z *        r   r_   ra   rb   c                 *     dt           f fd}|S )zmWrap your main function with this.
    You can pass extra kwargs, e.g. `version_base` introduced in 1.2.
    r`   c                 $    t          | fdS )Nr   )r_   )r`   ra   rb   ry   s    r   
_decoratorzhydra_main.<locals>._decorator3  s-     #;K # #!# # 	#r   )r   )ra   rb   ry   r   s   ``` r   
hydra_mainr   /  s<    # # # # # # # # # r   )6__doc__r   collectionsr   r   importlib.utilr   rX   loggingpathlibr   rg   typingr   unittestr   r   hydra.core.global_hydrar   r	   r
   r   ImportErrorhydra.experimentalomegaconf.dictconfigr   confr   r   r   r`   r   r   r   r   r   r   	getLoggerr    loggerr   r   r   r   r.   r,   r   rJ   r   rC   rL   rP   r_   r   r   r   r   <module>r      s     / / / / / / / / $ $ $ $ $ $         



            / / / / / /44444444
 II	    AAAAAAAAIII , + + + + + < < < < < < < < < < ( ( ( ( ( ( ( ( ! ! ! ! ! ! ! ! ! !		8	$	$26      j(RSS	 	 	 	 	 	 	 	 9;; &(    >S) bgcl    	P 	P 	PS S S$h h h h h h h hVC c      s   A AA