ó
    jï’j \  ã            
       óÐ  • S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	J
r
Jr  SSKJrJr  SSKJrJrJr  SSKJr  SSKJr  SS	KJrJrJr  \R6                  " S
5       " S S5      5       r\R6                  " S
5       " S S5      5       rS\S\	\   S\
\   S\SS4
S jrS\S\	\   S\
\   S\SS4
S jr S\S\	\   S\
\   S\SS4
S jr!\R6                  " S
5       " S S5      5       r"g)z)
Common test functions testing launchers
é    N)ÚPath)ÚAnyÚCallableÚListÚOptionalÚSet)Ú
DictConfigÚ	OmegaConf)ÚmarkÚparamÚraises)ÚTaskFunction)ÚHydraException)ÚTSweepRunnerÚintegration_testÚverify_dir_outputsÚhydra_restore_singletonsc            
       óx  • \ rS rSrS\\\/\4      4S jrS\S\	S\
\	   S\SS4
S	 jrS\S\	S\
\	   S\SS4
S
 jrS\S\	S\
\	   S\SS4
S jrS\S\	S\
\	   S\SS4
S jrS\S\	S\
\	   S\SS4
S jrS\S\	S\
\	   S\SS4
S jrS\S\	S\
\	   S\SS4
S jrS\S\	S\
\	   S\SS4
S jrS\S\	S\
\	   S\SS4
S jrSrg)ÚLauncherTestSuiteé   Úreturnc                 ó(   • S[         S[        4S jnU$ )NÚ_r   c                 ó   • g)Néd   © )r   s    Ú´C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\hydra/test_utils/launcher_common_tests.pyÚ	task_funcÚ6LauncherTestSuite.get_task_function.<locals>.task_func   s   € Øó    )r	   r   )Úselfr   s     r   Úget_task_functionÚ#LauncherTestSuite.get_task_function   s   € ð	œð 	¬ô 	ð Ðr    Úhydra_sweep_runnerÚlauncher_nameÚ	overridesÚtmpdirNc                 óF   • [        USU-   /U-   U R                  5       US9  g ©Núhydra/launcher=©r&   Útask_functionÚtemp_dir©Úsweep_1_jobr"   ©r!   r$   r%   r&   r'   s        r   Útest_sweep_1_jobÚ"LauncherTestSuite.test_sweep_1_job   ó.   € ô 	ØØ(¨=Ñ8Ð9¸IÑEØ×0Ñ0Ó2Øó		
r    c                 óF   • [        USU-   /U-   U R                  5       US9  g r)   )Úsweep_2_jobsr"   r0   s        r   Útest_sweep_2_jobsÚ#LauncherTestSuite.test_sweep_2_jobs-   s.   € ô 	ØØ(¨=Ñ8Ð9¸IÑEØ×0Ñ0Ó2Øó		
r    c                 óÜ   • [        [        [        R                  " S5      S9   U" S SS SSUSU-   SS/-   US	9    S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
NzQSweeping over Hydra's configuration is not supported : 'hydra.verbose=true,false')Úmatchúhydra.test_utils.a_moduleÚconfigsúcompose.yamlr*   ú+a=0,1zhydra.verbose=true,false©Úcalling_fileÚcalling_moduler,   Úconfig_pathÚconfig_namer&   r-   )r   r   ÚreÚescaper0   s        r   Ú!test_not_sweeping_hydra_overridesÚ3LauncherTestSuite.test_not_sweeping_hydra_overrides;   s�   € ô ÜÜ—)’)Øcóó
ñ $Ø!Ø:Ø"Ø%Ø*Ø#à%¨Ñ5ØØ.ðñð  óð ÷÷
ð 
÷õ ú÷
õ 
ús!   £A¹A»AÁ
A	ÁAÁ
A+c                 óF   • [        USU-   /U-   U R                  5       US9  g r)   r.   r0   s        r   Útest_sweep_1_job_strictÚ)LauncherTestSuite.test_sweep_1_job_strictX   r3   r    c                 óš   • [        [        5         [        USU-   S/U-   U R                  5       US9  S S S 5        g ! , (       d  f       g = f)Nr*   zboo=barr+   )r   Ú	Exceptionr/   r"   r0   s        r   Ú#test_sweep_1_job_strict_and_bad_keyÚ5LauncherTestSuite.test_sweep_1_job_strict_and_bad_keyf   sD   € ô ”IÕÜØ"Ø,¨}Ñ<¸iÐHÈ9ÑTØ"×4Ñ4Ó6Øò	÷ ×Öús	   �#<¼
A
c                 óF   • [        USU-   /U-   U R                  5       US9  g r)   )Úsweep_two_config_groupsr"   r0   s        r   Útest_sweep_2_optimizersÚ)LauncherTestSuite.test_sweep_2_optimizersw   s.   € ô 	 ØØ(¨=Ñ8Ð9¸IÑEØ×0Ñ0Ó2Øó		
r    c           
      ó
  • SU-   S/nU" S SU R                  5       SSXS-   US9nS/S//n[        R                  " S	S
05      [        R                  " S	S05      /nU   UR                  c   e[	        UR                  S   5      S:X  d   e[        S5       HR  n	UR                  S   U	   n
U
R                  Xy   :X  d   eU
R                  X‰   :X  d   e[        XªR                  5        MT     S S S 5        g ! , (       d  f       g = f)Nr*   úgroup1=file1,file2r:   r;   Úunspecified_mandatory_defaultr>   úgroup1=file1úgroup1=file2Úfooé
   é   r   é   )	r"   r
   ÚcreateÚreturnsÚlenÚranger&   Úcfgr   ©r!   r$   r%   r&   r'   Úbase_overridesÚsweepÚexpected_overridesÚexpected_confÚiÚjob_rets              r   Ú-test_sweep_over_unspecified_mandatory_defaultÚ?LauncherTestSuite.test_sweep_over_unspecified_mandatory_default…   s  € ð ,¨mÑ;Ð=QÐRˆÙ"ØØ6Ø×0Ñ0Ó2Ø!Ø7Ø$Ñ0Øñ
ˆð  .Ð.°Ð0@ÐAÐÜ"×)Ò)¨5°"¨+Ó6¼	×8HÒ8HÈ%ÐQSÈÓ8UÐVˆÚØ—=‘=Ñ,Ð,Ð,Ü�u—}‘} QÑ'Ó(¨AÓ-Ð-Ð-Ü˜1–X�ØŸ-™-¨Ñ*¨1Ñ-�Ø×(Ñ(Ð,>Ñ,AÓAÐAÐAØ—{‘{ mÑ&6Ó6Ð6Ð6Ü" 7×,=Ñ,=Ö>ñ	 ÷ �UŽUús   ÁBC4Ã4
Dc           
      ó¶  • SU-   SS/nU" SSSSSXS-   US9nS	S/S
S//nSSSSS.0SSSSSS.0/nU   UR                   c   e[        UR                   S   5      S:X  d   e[        S5       HR  n	UR                   S   U	   n
U
R                  Xy   :X  d   eU
R                  X‰   :X  d   e[        XªR                  5        MT     SSS5        g! , (       d  f       g= f)a>  
Tests that we can override things in the configs merged in only during the sweep config construction
db.user=someone does not exist db_conf.yaml, and is only appear when we merge in db=mysql or db=postgresql.
This presents a tricky situation when operating in strict mode, this tests verifies it's handled correctly.
r*   zdb=mysql,postgresqlzdb.user=someoneNr:   r;   zdb_conf.yamlr>   zdb=mysqlzdb=postgresqlÚdbÚmysqlÚsecretÚsomeone)ÚdriverÚpasswordÚuserÚ
postgresqlÚdrowssaprX   )rp   rn   ro   Útimeoutr   rZ   )r\   r]   r^   r&   r_   r   r`   s              r   Útest_sweep_and_overrideÚ)LauncherTestSuite.test_sweep_and_override¡   s!  € ð  Ñ-Ø!Øð
ˆñ
 #ØØ6ØØ!Ø&Ø$Ñ0Øñ
ˆð Ð*Ð+ØÐ/Ð0ð
Ðð
 ˜g°8ÀYÑOÐPàØ%Ø*Ø *Ø!ñ	ðð

ˆò Ø—=‘=Ñ,Ð,Ð,Ü�u—}‘} QÑ'Ó(¨AÓ-Ð-Ð-Ü˜1–X�ØŸ-™-¨Ñ*¨1Ñ-�Ø×(Ñ(Ð,>Ñ,AÓAÐAÐAØ—{‘{ mÑ&6Ó6Ð6Ð6Ü" 7×,=Ñ,=Ö>ñ	 ÷ �UŽUús   ²BC
Ã

Cc           
      óV  • SU-   /U-   nS[         S[        4S jnU" S SUSSUUS9nS[        4S	 jn[        R                  " S
U5        U   UR                  c   eUR                  S   n	[        U	5      S:X  d   eU	S   R                  S:X  d   e S S S 5        g ! , (       d  f       g = f)Nr*   Úcr   c                 ó   • U R                   $ )N)Úx)rw   s    r   r   ÚDLauncherTestSuite.test_sweep_with_custom_resolver.<locals>.task_funcÜ   s   € Ø—3‘3ˆJr    r:   r;   Úcustom_resolverr>   c                  ó   • g)NrW   r   r   r    r   Úmy_custom_resolverÚMLauncherTestSuite.test_sweep_with_custom_resolver.<locals>.my_custom_resolveré   s   € Ør    r}   r   é   rW   )r	   r   r
   Úregister_new_resolverr\   r]   Úreturn_value)
r!   r$   r%   r&   r'   Ú
overrides1r   rb   r}   rf   s
             r   Útest_sweep_with_custom_resolverÚ1LauncherTestSuite.test_sweep_with_custom_resolverÓ   s¿   € ð (¨-Ñ7Ð8¸9ÑDˆ
ð	œð 	¬ô 	ñ #ØØ6Ø#Ø!Ø)Ø Øñ
ˆð	¤Cô 	ô 	×'Ò'Ð(<Ð>PÔQÚØ—=‘=Ñ,Ð,Ð,Ø—m‘m AÑ&ˆGÜ�w“< 1Ó$Ð$Ð$Ø˜1‘:×*Ñ*¨eÓ3Ð3Ñ3÷	 �UŽUús   ÁABÂ
B(r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r   r"   r   Ústrr   r   r1   r6   rE   rH   rL   rP   rg   rt   rƒ   Ú__static_attributes__r   r    r   r   r      s   † ð 8¨H°c°U¸C°ZÑ,@Ñ#Aô ð
à(ð
ð ð
ð ˜‘9ð	
ð
 ð
ð 
ô
ð
à(ð
ð ð
ð ˜‘9ð	
ð
 ð
ð 
ô
ðà(ðð ðð ˜‘9ð	ð
 ðð 
ôð:
à(ð
ð ð
ð ˜‘9ð	
ð
 ð
ð 
ô
ðà(ðð ðð ˜‘9ð	ð
 ðð 
ôð"
à(ð
ð ð
ð ˜‘9ð	
ð
 ð
ð 
ô
ð?à(ð?ð ð?ð ˜‘9ð	?ð
 ð?ð 
ô?ð80?à(ð0?ð ð0?ð ˜‘9ð	0?ð
 ð0?ð 
ô0?ðd4à(ð4ð ð4ð ˜‘9ð	4ð
 ð4ð 
÷4r    r   c            
       ó8   • \ rS rSrS\S\S\\   S\SS4
S jrS	r	g)
ÚBatchedSweeperTestSuiteéô   r$   r%   r&   r'   r   Nc           
      ó  • SS/nSU-   /nUR                  U5        UR                  U5        U" S SS SSUUS9nSS	/SS
/SS/SS	/SS
/SS//nSSS.SSS.SSS.SSS.SSS.SSS./n	[        5       n
U   UR                  nUc   e[        U5      S-  nUR	                  5       (       d   e[
        R                  " U5      nUR                  R                  R                  U:X  d   eUR                  c   e[        UR                  5      S:X  d   eUR                   H  n[        U5      S:X  a  M   e   UR                   VVs/ s H  oî  H  oÿPM     M     nnn[        U5      S:X  d   e[        U5       Ha  u  nnUR                  UU   :X  d   eUR                  U	U   :X  d   eU
R                  UR                  5        [!        UUR                  5        Mc     S S S 5        [        U
5      S:X  d   eg s  snnf ! , (       d  f       N&= f)NrS   zbar=100,200,300r*   r:   r;   r<   r>   rU   zbar=100zbar=200zbar=300rV   rX   r   ©rW   ÚbaréÈ   i,  rY   úmultirun.yamlé   rZ   é   )ÚextendÚsetr-   r   Úexistsr
   ÚloadÚhydrar&   Útaskr\   r]   Ú	enumerater_   ÚaddÚworking_dirr   )r!   r$   r%   r&   r'   Újob_overridesÚhydra_overridesrb   rc   rd   Údirsr-   Úmultirun_cfg_pathÚmultirun_cfgÚbatchÚrtÚflatÚidxrf   s                      r   Útest_sweep_2_jobs_2_batchesÚ3BatchedSweeperTestSuite.test_sweep_2_jobs_2_batchesö   s?  € ð .Ð/@ÐAˆØ,¨}Ñ<Ð=ˆØ×Ñ˜Ô'Ø×Ñ˜Ô)Ù"ØØ6ØØ!Ø&ØØñ
ˆð ˜YÐ'Ø˜YÐ'Ø˜YÐ'Ø˜YÐ'Ø˜YÐ'Ø˜YÐ'ð
Ðð ˜sÑ#Ø˜sÑ#Ø˜sÑ#Ø˜sÑ#Ø˜sÑ#Ø˜sÑ#ð
ˆô ›ˆÚØ—~‘~ˆHØÑ'Ð'Ð'Ü $ X£°Ñ @ÐØ$×+Ñ+×-Ñ-Ð-Ð-Ü$Ÿ>š>Ð*;Ó<ˆLØ×%Ñ%×/Ñ/×4Ñ4¸ÓEÐEÐEà—=‘=Ñ,Ð,Ð,ä�u—}‘}Ó%¨Ó*Ð*Ð*ØŸœ�Ü˜5“z Q•Ð&�ñ 'ð %*§M¢MÔB¢M˜5»E°b’B¹E‘B¡MˆDÑBÜ�t“9 “>Ð!�>Ü )¨$¦‘��WØ×(Ñ(Ð,>¸sÑ,CÓCÐCÐCØ—{‘{ m°CÑ&8Ó8Ð8Ð8Ø—‘˜×,Ñ,Ô-Ü" 7¨G×,=Ñ,=Ö>ñ	 !0÷! ô* �4‹y˜A‹~Ð‰~ùó C÷ �Uús&   Á3B9G;Ä0G;ÅG5ÅBG;Ç5G;Ç;
H	r   )
r…   r†   r‡   rˆ   r   r‰   r   r   r§   rŠ   r   r    r   rŒ   rŒ   ô   s;   † ð<à(ð<ð ð<ð ˜‘9ð	<ð
 ð<ð 
÷<r    rŒ   r$   r&   r,   r-   r   c           
      óÎ  • U " SSUSSUUS9nU   UR                   c   eUR                   S   n[        U5      S:X  d   eUS   R                  / :X  d   eUS   R                  SS	S
.:X  d   eUS   R                  R
                  R                  R                  S:X  d5   SUS   R                  R
                  R                  R                  -   5       eUS   R                  R
                  R                  R                  c   eUS   R                  R
                  R                  R                  c   e[        UR                   S   S   5        SSS5        g! , (       d  f       g= f)z
Runs a sweep with one job
Nr:   r;   r<   r>   r   r   rX   r   r�   Úa_moduleúUnexpected job name: )r\   r]   r&   r_   Ú	hydra_cfgr™   ÚjobÚnameÚidÚnumr   )r$   r&   r,   r-   rb   rf   s         r   r/   r/   5  sR  € ñ ØØ2Ø#ØØ"ØØñ€Eò 
Ø�}‰}Ñ(Ð(Ð(Ø—-‘- Ñ"ˆÜ�7‹|˜qÓ Ð Ð Ø�q‰z×#Ñ# rÓ)Ð)Ð)Ø�q‰z�~‰~¨°CÑ!8Ó8Ð8Ð8Ø�q‰z×#Ñ#×)Ñ)×-Ñ-×2Ñ2°jÓ@ð 	
Ø# g¨a¡j×&:Ñ&:×&@Ñ&@×&DÑ&D×&IÑ&IÑIó	
Ð@ð �q‰z×#Ñ#×)Ñ)×-Ñ-×0Ñ0Ñ<Ð<Ð<Ø�q‰z×#Ñ#×)Ñ)×-Ñ-×1Ñ1Ñ=Ð=Ð=Ü˜5Ÿ=™=¨Ñ+¨AÑ.Ô/÷ 
�Žús   �D>EÅ
E$c           
      ó"  • S/nUR                  U5        U " SSUSSUUS9nSSS	S
.nU   UR                  c   eUR                  c   e[        UR                  5      nUS-  nUR	                  5       (       d   e[
        R                  " U5      nUR                  R                  R                  U:X  d   e[        UR                  S	   5      S:X  d   e[        S5       GH�  n	UR                  S	   U	   n
[
        R                  " U5      nX›l        U
R                  SU	 3/:X  d   eU
R                  U:X  d   eU
R                  R                  R                   R"                  S:X  d2   SU
R                  R                  R                   R"                  -   5       eU
R                  R                  R                   R$                  c   eU
R                  R                  R                   R&                  c   e[)        XªR                  5        U[+        U	5      -  nUR-                  5        Vs/ s H  oÝR/                  5       (       d  M  UPM     nnUR	                  5       (       a  GM…   SU SU 35       e   SSS5        gs  snf ! , (       d  f       g= f)z
Runs a sweep with two jobs
r=   Nr:   r;   Úcomposer>   rX   r   r   )rW   r�   Úar’   rZ   z+a=rª   r«   Ú'z' does not exist, dirs: )r•   r-   r\   r   r—   r
   r˜   r™   r&   rš   r]   r^   r[   r³   r_   r¬   r­   r®   r¯   r°   r   r‰   ÚiterdirÚis_dir)r$   r&   r,   r-   rž   rb   Úbase_cfgr¡   r¢   re   rf   rd   Úpathry   Úlsts                  r   r5   r5   V  sV  € ð �J€MØ×Ñ�]Ô#ÙØØ2Ø#ØØØØñ€Eð  #¨AÑ.€Hâ	Ø�~‰~Ñ)Ð)Ð)Ø�}‰}Ñ(Ð(Ð(ä˜Ÿ™Ó'ˆà$ Ñ6ÐØ ×'Ñ'×)Ñ)Ð)Ð)Ü —~’~Ð&7Ó8ˆØ×!Ñ!×+Ñ+×0Ñ0°MÓAÐAÐAä�5—=‘= Ñ#Ó$¨Ó)Ð)Ð)Ü�q—ˆAØ—m‘m AÑ& qÑ)ˆGÜ%×,Ò,¨XÓ6ˆMØŒOØ×$Ñ$¨3¨q¨c¨¨Ó3Ð3Ð3Ø—;‘; -Ó/Ð/Ð/Ø×$Ñ$×*Ñ*×.Ñ.×3Ñ3°zÓAð Ø'¨'×*;Ñ*;×*AÑ*A×*EÑ*E×*JÑ*JÑJóÐAð ×$Ñ$×*Ñ*×.Ñ.×1Ñ1Ñ=Ð=Ð=Ø×$Ñ$×*Ñ*×.Ñ.×2Ñ2Ñ>Ð>Ð>ä˜w×(9Ñ(9Ô:Øœc !›fÑ$ˆDØ&×.Ñ.Ô0Ó?Ò0˜·H±H·J—1Ñ0ˆCÐ?Ø—;‘;—=”=ÐI A d VÐ+CÀCÀ5Ð"IÓI�=ñ ÷ 
ˆùò4 @÷5 
�ús*   ©G>J È'I;ÉI;É	J É#J É;J Ê 
Jc           
      ó0  • [         R                  " U5      nUR                  S/5        U " SSUSSUUS9nS/S//n[        R                  " S	S
S.5      [        R                  " SS
S.5      /nU   UR
                  c   e[        UR
                  S   5      S:X  d   e[        S5       HR  nUR
                  S   U   nUR                  XW   :X  d   eUR                  Xg   :X  d   e[        XˆR                  5        MT     SSS5        g! , (       d  f       g= f)zB
Make sure that optimizers=adam,nesterov is interpreted correctly
rS   Nr:   r;   r²   r>   rU   rV   rX   r   r�   rY   r   rZ   )ÚcopyÚdeepcopyr•   r
   r[   r\   r]   r^   r&   r_   r   )	r$   r&   r,   r-   rb   rc   rd   re   rf   s	            r   rO   rO   Š  s  € ô —’˜iÓ(€IØ×ÑÐ*Ð+Ô,ÙØØ2Ø#ØØØØñ€Eð *Ð*¨^Ð,<Ð=Ðä×Ò ¨CÑ0Ó1Ü×Ò ¨CÑ0Ó1ð€Mò 
Ø�}‰}Ñ(Ð(Ð(Ü�5—=‘= Ñ#Ó$¨Ó)Ð)Ð)Ü�q–ˆAØ—m‘m AÑ& qÑ)ˆGØ×$Ñ$Ð(:Ñ(=Ó=Ð=Ð=Ø—;‘; -Ñ"2Ó2Ð2Ð2Ü˜w×(9Ñ(9Ö:ñ	 ÷ 
�Žús   Á/BDÄ
Dc                   ór  • \ rS rSrS\\   4S jrS\S\4S jrS\S\	\
   4   4S jr\R                  " S\" S	/ S
SSS9\" S	S/S
SSS9\" SSSS000/ SSSS9\" SSSS000S/SSSS9/5      S\S\S\	\
   S\
S\
S\S\	\
   SS	4S j5       r\R                  " S\" SSS S!S".00/ S#S$S9\" 0 S%S&/S'S(S9\" SSS S!S".00S%S&/S'S)S9\" SS*S+S".0S,S-S..S/S0/S1S2S9\" S*S+S".S3S4S5S6S7/S8.00S9.S,S-S:S;./ S<QS=S>S9/5      S\S\
S\	\
   S?\
S\S\	\
   SS	4S@ j5       rS\S\S\	\
   SS	4SA jrS\S\S\	\
   SS	4SB jrSCrg	)DÚIntegrationTestSuitei­  r   c                 ó   • g)z±
By default test applications working dir is tmpdir, override this method if that's not the case.
This could be helpful when the tests kick off applications on remote machines.
Nr   )r!   s    r   Úget_test_app_working_dirÚ-IntegrationTestSuite.get_test_app_working_dir¯  s   € ð
 r    r'   c                 ó   • U$ )zf
By default test applications will use tmpdir provided by the
This can be customized by applications.
r   )r!   r'   s     r   Úget_test_scratch_dirÚ)IntegrationTestSuite.get_test_scratch_dir¶  s	   € ð
 ˆr    .c                 óP   • S[         [           S[        S[         [           4S jnU$ )zy
By default this does nothing, but it allows custom execution commands.
Useful if the tests are not kicked off by python
ÚcmdÚfilenamer   c                 ó   • U $ )z¨
param cmd: old python commands in list of strings
param filename: file name to be executed as main hydra module
return: new commands to be executed in list of strings
r   )rÆ   rÇ   s     r   ÚfunÚ5IntegrationTestSuite.generate_custom_cmd.<locals>.funÃ  s	   € ð ˆJr    )r   r‰   )r!   rÉ   s     r   Úgenerate_custom_cmdÚ(IntegrationTestSuite.generate_custom_cmd½  s+   € ð	”Tœ#‘Yð 	¬#ð 	´$´s±)ô 	ð ˆ
r    z/task_config, overrides, filename, expected_nameNzno_config.pyÚ	no_config)r¯   zhydra.job.name=overridden_nameÚoverridden_nameÚdifferent_filenamer™   r­   r®   Úname_from_config_filezwith_config.pyÚ0different_filename_and_config_file_name_overrideÚJdifferent_filename_and_config_file_name_override_and_command_line_overrideÚtask_configr&   rÇ   Úexpected_nameÚtask_launcher_cfgÚextra_flagsc           
      ó:  • Xs-   n[         R                  " U=(       d    0 5      n[         R                  " U=(       d    0 5      n[         R                  " Xb5      n[        U[        5      (       d   e[        U R                  U5      UUSUUU R                  5       S9  g )NzHydraConfig.get().job.name)r'   rÓ   r&   ÚprintsÚexpected_outputsrÇ   rË   )r
   r[   ÚmergeÚ
isinstancer	   r   rÃ   rË   )	r!   r'   rÓ   r&   rÇ   rÔ   rÕ   rÖ   r_   s	            r   Útest_custom_task_nameÚ*IntegrationTestSuite.test_custom_task_nameÍ  sŒ   € ðJ  Ñ+ˆ	Ü%×,Ò,Ð->×-DÀ"ÓEÐÜ×&Ò& {×'8°bÓ9ˆÜ�oŠoÐ/Ó=ˆÜ˜#œz×*Ñ*Ð*Ð*äØ×,Ñ,¨VÓ4ØØØ/Ø*ØØ $× 8Ñ 8Ó :ó	
r    z$task_config, overrides, expected_dirrb   Útask_cfgztask_cfg_${hydra.job.num})ÚdirÚsubdirztask_cfg/task_cfg_0Úsweep_dir_config_overrideúhydra.sweep.dir=cli_dirú+hydra.sweep.subdir=cli_dir_${hydra.job.num}úcli_dir/cli_dir_0Úsweep_dir_cli_overrideÚ sweep_dir_cli_overridding_configr¬   z${hydra.job.override_dirname}ÚhellorY   )r™   r³   Úbúa=1úb=2zhydra_cfg/a=1,b=2zsubdir:override_dirnameÚconfigÚoverride_dirnamer   Ú+Úseed)Úkv_sepÚitem_sepÚexclude_keys)rb   r­   z???)r™   r³   rè   rî   )ré   rê   zseed=10zhydra_cfg/a_1+b_2zsubdir:custom_override_dirnameÚexpected_dirc           	      óâ  • Xc-   n[         R                  " U=(       d    0 5      n[         R                  " U=(       d    0 5      n[         R                  " XR5      n[        U[        5      (       d   eU R                  5       nU(       a  [        U R                  U5      U-  5      O[        U R                  U5      U-  5      n	[        U R                  U5      UUS/-   SU	U R                  5       S9  g )Núhydra.job.chdir=Trueúos.getcwd()©r'   rÓ   r&   rØ   rÙ   rË   )
r
   r[   rÚ   rÛ   r	   rÀ   r‰   rÃ   r   rË   )
r!   r'   rÓ   r&   rò   rÕ   rÖ   r_   Útest_app_dirrÙ   s
             r   Útest_custom_sweeper_run_workdirÚ4IntegrationTestSuite.test_custom_sweeper_run_workdir  sÞ   € ðz  Ñ+ˆ	Ü%×,Ò,Ð->×-DÀ"ÓEÐÜ×&Ò& {×'8°bÓ9ˆÜ�oŠoÐ/Ó=ˆÜ˜#œz×*Ñ*Ð*Ð*Ø×4Ñ4Ó6ˆö ô �×)Ñ)¨,Ó7¸,ÑFÔGä�T×.Ñ.¨vÓ6¸ÑEÓFð 	ô 	Ø×,Ñ,¨VÓ4ØØÐ#9Ð":Ñ:Ø Ø-Ø $× 8Ñ 8Ó :ó	
r    c                 óŠ  • Un[         R                  " U=(       d    0 5      n[         R                  " 5       n[         R                  " X%5      n[        U[        5      (       d   e[        U R                  U5      UUS[        R                  R                  [        U R                  U5      5      5      U R                  5       S9  g )Nzhydra.utils.get_original_cwd()rö   )r
   r[   rÚ   rÛ   r	   r   rÃ   Úosr¸   Úrealpathr‰   rË   )r!   r'   rÕ   rÖ   r&   rÓ   r_   s          r   Útest_get_orig_dir_multirunÚ/IntegrationTestSuite.test_get_orig_dir_multirunt  s�   € ð  ˆ	Ü%×,Ò,Ð->×-DÀ"ÓEÐÜ×&Ò&Ó(ˆÜ�oŠoÐ/Ó=ˆÜ˜#œz×*Ñ*Ð*Ð*äØ×,Ñ,¨VÓ4ØØØ3ÜŸW™W×-Ñ-¬c°$×2KÑ2KÈFÓ2SÓ.TÓUØ $× 8Ñ 8Ó :ó	
r    c           	      ó°  • SnU/ SQ-   n[         R                  " U=(       d    0 5      n[         R                  " 5       n[         R                  " X&5      n[        U[        5      (       d   e[        [        S5      R                  5       5      n[        U R                  U5      UUSUU R                  5       S9  U R                  5       n	U	(       a  U	OUn
[        R                  R                  [        U R                  U5      S-  5      5      [        U R                  U
5      U-  5      /n[        U R                  U5      UUSS/UU R                  5       S9  g )	Nrä   )rô   râ   rã   z/foo/barz(hydra.utils.to_absolute_path('/foo/bar')rö   zfoo/barz'hydra.utils.to_absolute_path('foo/bar')rõ   )r
   r[   rÚ   rÛ   r	   r‰   r   Úabsoluter   rÃ   rË   rÀ   rû   r¸   rü   )r!   r'   rÕ   rÖ   rò   r&   rÓ   r_   r¸   r÷   r�   Úoutputss               r   Útest_to_absolute_path_multirunÚ3IntegrationTestSuite.test_to_absolute_path_multirun†  s=  € ð +ˆØò #
ñ 
ˆ	ô
 &×,Ò,Ð->×-DÀ"ÓEÐÜ×&Ò&Ó(ˆÜ�oŠoÐ/Ó=ˆÜ˜#œz×*Ñ*Ð*Ð*Ü”4˜
Ó#×,Ñ,Ó.Ó/ˆÜØ×,Ñ,¨VÓ4ØØØ=Ø!Ø $× 8Ñ 8Ó :ò	
ð ×4Ñ4Ó6ˆÞ&2‘l¸ˆô �G‰G×ÑœS ×!:Ñ!:¸6Ó!BÀYÑ!NÓOÓPÜ�×)Ñ)¨+Ó6¸ÑEÓFð
ˆô 	Ø×,Ñ,¨VÓ4ØØØ=¸}ÐMØ$Ø $× 8Ñ 8Ó :ó	
r    r   )r…   r†   r‡   rˆ   r   r   rÀ   rÃ   r   r   r‰   rË   r   Úparametrizer   r	   rÜ   rø   rý   r  rŠ   r   r    r   r¾   r¾   ­  s"  † ð¨(°4©.ô ð¨4ð °Dô ð X¨c°4¸±9¨nÑ%=ô ð  
×ÒØ9á�$˜˜N¨K¸KÑHÙØØ1Ð2ØØ!Ø'ññ Ø˜5 6Ð+BÐ"CÐDÐEØØ Ø'ØEññ Ø˜5 6Ð+BÐ"CÐDÐEØ1Ð2Ø Ø!Ø_ñð!	
óð6
àð
ð  ð
ð ˜‘9ð	
ð
 ð
ð ð
ð &ð
ð ˜#‘Yð
ð 
ó
ó7ð6
ð4 
×ÒØ.áàØØ#-Ø&Añ"ððð Ø%Ø.ññ Øà-ØAðð $Ø+ññ àØØ#-Ø&Añ"ððð .ØAðð $Ø5ññ  ð  Ø#.Ø&Eñ"ðð !Øñ	ð ˜�Ø#Ø,ññ ð
 $/Ø&Eñ"ð
 %Ø 2Ø.1Ø03Ø5;°Hñ5"ð'ð ñð !ØØ!ñ%ò( *Ø#Ø3ñ1ðmP	
óSðh
àð
ð ð
ð ˜‘9ð	
ð
 ð
ð &ð
ð ˜#‘Yð
ð 
ó
óiSðh
ð<
Øð
Ø/9ð
ØHLÈSÉ	ð
à	ô
ð$$
Øð$
Ø/9ð$
ØHLÈSÉ	ð$
à	÷$
r    r¾   )#Ú__doc__r»   rû   rC   Úpathlibr   Útypingr   r   r   r   r   Ú	omegaconfr	   r
   Úpytestr   r   r   r™   r   Úhydra.errorsr   Úhydra.test_utils.test_utilsr   r   r   Úusefixturesr   rŒ   r‰   r/   r5   rO   r¾   r   r    r   Ú<module>r     sk  ðñó Û 	Û 	Ý ß 5Õ 5ç +ß &Ñ &å Ý '÷ñ ð ×ÒÐ,Ó-÷Y4ð Y4ó .ðY4ðx ×ÒÐ,Ó-÷=ð =ó .ð=ð@0Ø$ð0à�C‰yð0ð ˜LÑ)ð0ð ð	0ð
 
ô0ðB1JØ$ð1Jà�C‰yð1Jð ˜LÑ)ð1Jð ð	1Jð
 
ô1Jðh ;Ø$ð ;à�C‰yð ;ð ˜LÑ)ð ;ð ð	 ;ð
 
ô ;ðF ×ÒÐ,Ó-÷|
ð |
ó .ñ|
r    