ó
    jï’jç;  ã                   óV  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSKJr  SSKJr  SSKJrJr  SSKJrJrJrJrJrJr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$  SSK%J&r&J'r'  SSK(J)r)  \RT                  S:¼  a  SSKJ+r+  OSSK,J+r+  \SLS\S\\   4S jj5       r- " S S5      r. " S S\+5      r/ " S S5      r0 " S S\+5      r1SLS\\2   SS4S jjr3SMS jr4S\Rj                  " 5       4S\2S \6S!\2SS4S" jjr7S\Rj                  " 5       4S\2S \6S!\2S\24S# jjr8 SLS$\&S%\\\2      SS4S& jjr9S'\2S(\S\2\\2   4   S\24S) jr:SS*SS+S, 4S-\S.\S%\\2   S/\\2\\2   4   S0\\2\\2   4   S1\S\2\\2   4   S2\2S3\\\2\24      S4\;S5\S6\\2   4   S\24S7 jjr<SLS8\S9\S\24S: jjr=    SNS8\S9\S;\;S<\;S=\;S\\2\24   4S> jjr>    SOS8\S9\S<\;S=\;S?\\?   S\\2\24   4S@ jjr@SA\2S\24SB jrA SPSC\2SD\2SE\2SF\2SS4
SG jjrB SPSC\2SD\2SE\2SF\2SS4
SH jjrC SPSI\2SJ\2SE\2SF\2SS4
SK jjrDg)Qz
Utilities used by tests
é    N)Úcontextmanager)Úunified_diff)ÚPath)ÚPIPEÚPopen)ÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚTupleÚUnion)Ú	ContainerÚ
DictConfigÚ	OmegaConf)ÚHydra)Údetect_task_name)ÚGlobalHydra)Ú	JobReturnÚvalidate_config_path)ÚTaskFunction)é   é   r   )ÚProtocolÚenter_resultÚreturnc              #   ó   #   • U v •  g 7f©N© )r   s    Ú©C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\hydra/test_utils/test_utils.pyÚdoes_not_raiser"   "   s   é € à
Óùs   ‚c                   óX   • \ rS rSrSrSS jrS\S\4S jrSS jr	S	\S
\S\SS4S jr
Srg)ÚTaskTestFunctioné'   ú
Context function
r   Nc                 ó‚   • S U l         S U l        S U l        S U l        S U l        S U l        S U l        S U l        SU l        g ©NF)	Útemp_dirÚ	overridesÚcalling_fileÚcalling_moduleÚconfig_pathÚconfig_nameÚhydraÚjob_retÚconfigure_logging©Úselfs    r!   Ú__init__ÚTaskTestFunction.__init__,   sF   € Ø'+ˆŒØ.2ˆŒØ+/ˆÔØ-1ˆÔØ*.ˆÔØ*.ˆÔØ&*ˆŒ
Ø,0ˆŒØ',ˆÕó    Úcfgc                 ó   • g©z)
Actual function being executed by Hydra
éd   r    ©r3   r7   s     r!   Ú__call__ÚTaskTestFunction.__call__7   s   € ð
 r6   c                 ót  •  [        U R                  5        [        U R                  U R                  5      n[
        R                  " U R                  U R                  U R                  US9U l        [        R                  " 5       U l
        [        R                  " U R                  5      nUc   eUR                  SU R                   35        U R                  R                  U R                   U UU R"                  S9U l        U ['        5       R)                  5         $ ! ['        5       R)                  5         f = f)N©r+   r,   r-   Újob_namezhydra.run.dir=©r.   Útask_functionr*   Úwith_log_configuration)r   r-   r   r+   r,   r   Ú create_main_hydra_file_or_moduler/   ÚtempfileÚmkdtempr)   ÚcopyÚdeepcopyr*   ÚappendÚrunr.   r1   r0   r   Úclear)r3   r@   r*   s      r!   Ú	__enter__ÚTaskTestFunction.__enter__>   sù   € ð	"Ü  ×!1Ñ!1Ô2ä'¨×(9Ñ(9¸4×;NÑ;NÓOˆHä×?Ò?Ø!×.Ñ.Ø#×2Ñ2Ø ×,Ñ,Ø!ñ	ˆDŒJô %×,Ò,Ó.ˆDŒMÜŸš d§n¡nÓ5ˆIØÑ(Ð(Ð(Ø×Ñ˜~¨d¯m©m¨_Ð=Ô>ØŸ:™:Ÿ>™>Ø ×,Ñ,Ø"Ø#Ø'+×'=Ñ'=ð	 *ð ˆDŒLð ä‹M×ÑÕ!øŒK‹M×ÑÕ!ús   ‚DD ÄD7Úexc_typeÚexc_valÚexc_tbc                 ó¬   • U R                   (       a  [        R                  " 5         U R                  c   e[        R
                  " U R                  SS9  g ©NT)Úignore_errors©r1   ÚloggingÚshutdownr)   ÚshutilÚrmtree©r3   rN   rO   rP   s       r!   Ú__exit__ÚTaskTestFunction.__exit__X   s9   € à×!×!Ü×ÒÔØ�}‰}Ñ(Ð(Ð(Ü�Š�d—m‘m°4Ó8r6   )	r+   r,   r.   r-   r1   r/   r0   r*   r)   ©r   N)r   r$   ©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r4   r   r   r<   rL   rZ   Ú__static_attributes__r    r6   r!   r$   r$   '   sE   † ñô	-ð˜Jð ¨3ô ô"ð49 ð 9¨sð 9¸Cð 9ÀD÷ 9r6   r$   c                   óf   • \ rS rSr  SS\\   S\\   S\\   S\\   S\\\      S\S	\4S
 jjr	Sr
g)ÚTTaskRunneré`   Nr+   r,   r-   r.   r*   r1   r   c                 ó   • g r   r    )r3   r+   r,   r-   r.   r*   r1   s          r!   r<   ÚTTaskRunner.__call__a   s   € ð 	r6   r    r(   )r^   r_   r`   ra   r   Ústrr   Úboolr$   r<   rc   r    r6   r!   re   re   `   sq   † ð *.Ø"'ñ	à˜s‘mð	ð ! ™ð	ð ˜c‘]ð		ð
 ˜c‘]ð	ð ˜D ™IÑ&ð	ð  ð	ð 
÷	ð 	r6   re   c                   óX   • \ rS rSrSrSS jrS\S\4S jrSS jr	S	\S
\S\SS4S jr
Srg)ÚSweepTaskFunctioném   r&   r   Nc                 ó�   • SU l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        g)za
if sweep_dir is None,  we use a temp dir, else we will create dir with the path from sweep_dir.
NF)
r)   r*   r+   r,   rB   r-   r.   ÚsweepsÚreturnsr1   r2   s    r!   r4   ÚSweepTaskFunction.__init__r   sP   € ð (,ˆŒØ.2ˆŒØ+/ˆÔØ-1ˆÔØ59ˆÔØ*.ˆÔØ*.ˆÔØˆŒØˆŒØ',ˆÕr6   r7   c                 ó@   • U R                   b  U R                  U5      $ gr9   )rB   r;   s     r!   r<   ÚSweepTaskFunction.__call__�   s$   € ð ×ÑÑ)Ø×%Ñ% cÓ*Ð*Ør6   c                 óÀ  • [         R                  " U R                  5      nUc   eU R                  (       a$  [	        U R                  5      R                  SSS9  O[        R                  " 5       U l        UR                  SU R                   35         [        U R                  5        [        U R                  U R                  5      n[        R                  " U R                  U R                  U R                  US9nUR!                  U R"                  U UU R$                  S9U l        [)        5       R+                  5         U $ ! [)        5       R+                  5         f = f)NT©ÚparentsÚexist_okzhydra.sweep.dir=r?   rA   )rG   rH   r*   r)   r   ÚmkdirrE   rF   rI   r   r-   r   r+   r,   r   rD   Úmultirunr.   r1   rp   r   rK   )r3   r*   r@   Úhydra_s       r!   rL   ÚSweepTaskFunction.__enter__‰   s  € Ü—M’M $§.¡.Ó1ˆ	ØÑ$Ð$Ð$Ø�=�=Ü�—‘Ó×%Ñ%¨d¸TÐ%ÒBä$×,Ò,Ó.ˆDŒMØ×ÑÐ+¨D¯M©M¨?Ð;Ô<ð	"Ü  ×!1Ñ!1Ô2Ü'¨×(9Ñ(9¸4×;NÑ;NÓOˆHä×;Ò;Ø!×.Ñ.Ø#×2Ñ2Ø ×,Ñ,Ø!ñ	ˆFð "Ÿ?™?Ø ×,Ñ,Ø"Ø#Ø'+×'=Ñ'=ð	 +ð ˆDŒLô ‹M×ÑÔ!àˆøô ‹M×ÑÕ!ús   ÂBE ÅErN   rO   rP   c                 ó¬   • U R                   (       a  [        R                  " 5         U R                  c   e[        R
                  " U R                  SS9  g rR   rT   rY   s       r!   rZ   ÚSweepTaskFunction.__exit__¨   s9   € Ø×!×!Ü×ÒÔØ�}‰}Ñ(Ð(Ð(Ü�Š�d—m‘m°4Ó8r6   )
r+   r,   r.   r-   r1   r*   rp   ro   rB   r)   r\   )r   rl   r]   r    r6   r!   rl   rl   m   sE   † ñô-ð˜Jð ¨3ô ôð>9 ð 9¨sð 9¸Cð 9ÀD÷ 9r6   rl   c                   óŒ   • \ rS rSr% \\\      \S'    SS\\   S\\   S\\	   S\\   S\\   S	\\\      S
\\
   S\4S jjrSrg)ÚTSweepRunneré¯   rp   Nr+   r,   rB   r-   r.   r*   r)   r   c                 ó   • g r   r    )r3   r+   r,   rB   r-   r.   r*   r)   s           r!   r<   ÚTSweepRunner.__call__²   s   € ð 	r6   r    r   )r^   r_   r`   ra   r   r   Ú__annotations__r   ri   r   r   rl   r<   rc   r    r6   r!   r   r   ¯   s�   ‡ Ø�$�y‘/Ñ"Ó"ð $(ñ
à˜s‘mð
ð ! ™ð
ð   Ñ-ð	
ð
 ˜c‘]ð
ð ˜c‘]ð
ð ˜D ™IÑ&ð
ð ˜4‘.ð
ð 
÷
ð 
r6   r   Úsubdirc                 óJ   • [        SS9  U b  [        R                  " U 5        gg)zx
Change the cwd to the root of the hydra project.
used from unit tests to make them runnable from anywhere in the tree.
ÚATTRIBUTION©ÚtargetN)Ú_chdir_to_dir_containingÚosÚchdir)r„   s    r!   Úchdir_hydra_rootrŒ   ¿   s#   € ô
  MÒ2àÑÜ
�Š�Õð r6   c                  ó   • [        SS9  g)zA
Change the cwd to the root of the plugin (location of setup.py)
zsetup.pyr‡   N)r‰   r    r6   r!   Úchdir_plugin_rootrŽ   Ê   s   € ô  JÓ/r6   é   rˆ   Úmax_upÚinitial_dirc                 óH   • [        XU5      n[        R                  " U5        g r   )Úfind_parent_dir_containingrŠ   r‹   ©rˆ   r�   r‘   Úcurs       r!   r‰   r‰   Ñ   s   € ô % V°[Ó
A€CÜ‡H‚HˆS…Mr6   c                 ó  • Un[         R                  R                  [         R                  R                  X05      5      (       d‘  US:”  a‹  [         R                  R	                  [         R                  R                  US5      5      nUS-
  n[         R                  R                  [         R                  R                  X05      5      (       d  US:”  a  M‹  US:X  a$  [        SU  S[         R                  " 5        35      eU$ )Nr   z..é   zCould not find z in parents of )rŠ   ÚpathÚexistsÚjoinÚrelpathÚIOErrorÚgetcwdr”   s       r!   r“   r“   Ø   s­   € ð €CÜ�g‰g�n‰nœRŸW™WŸ\™\¨#Ó6×7Ñ7¸FÀQ»JÜ�g‰g�o‰oœbŸg™gŸl™l¨3°Ó5Ó6ˆØ˜!‘ˆô �g‰g�n‰nœRŸW™WŸ\™\¨#Ó6×7Ñ7¸FÀQ½Jð �ƒ{Ü˜¨ x¨¼r¿yºy»{¸mÐLÓMÐMØ€Jr6   Ú
job_returnr*   c                 ó�  • [        U [        5      (       d   eU R                  c   eU R                  c   eU R                  c   e[
        R                  R                  [
        R                  R                  U R                  U R                  S-   5      5      (       d   e[
        R                  R                  U R                  U R                  R                  R                  5      n[
        R                  R                  [
        R                  R                  US5      5      (       d   e[
        R                  R                  [
        R                  R                  US5      5      (       d   e[        R                  " [
        R                  R                  US5      5      [        R                  " U=(       d    / 5      :X  d   eg)z*
Verify that directory output makes sense
Nz.logúconfig.yamlzoverrides.yaml)Ú
isinstancer   Úworking_dirÚ	task_nameÚ	hydra_cfgrŠ   r˜   r™   rš   r/   Úoutput_subdirr   ÚloadÚcreate)rž   r*   Ú	hydra_dirs      r!   Úverify_dir_outputsr©   ä   sS  € ô �j¤)×,Ñ,Ð,Ð,Ø×!Ñ!Ñ-Ð-Ð-Ø×ÑÑ+Ð+Ð+Ø×ÑÑ+Ð+Ð+ä�7‰7�>‰>Ü
�‰�‰�Z×+Ñ+¨Z×-AÑ-AÀFÑ-JÓK÷ñ ð ð ô —‘—‘Ø×Ñ 
× 4Ñ 4× :Ñ :× HÑ Hó€Iô �7‰7�>‰>œ"Ÿ'™'Ÿ,™, y°-Ó@×AÑAÐAÐAÜ�7‰7�>‰>œ"Ÿ'™'Ÿ,™, yÐ2BÓC×DÑDÐDÐDÜ�>Š>Ü
�‰�‰�YÐ 0Ó1óä	×	Ò	˜)Ÿ/ rÓ	*ó+ð +ñ +r6   ÚindentÚ
statementsc                 óŠ   • [        U[        5      (       a  U/nSnUb  [        U5      S:X  a  SnU$ U H  nX  U S3-  nM     U$ )NÚ r   ÚpassÚ
)r¡   ri   Úlen)rª   r«   ÚcodeÚps       r!   Ú_get_statementsr³   ü   s\   € Ü�*œc×"Ñ"Ø �\ˆ
à€DØÑœS ›_°Ó1Øˆð €Kó ˆAØ�h˜q˜c Ð$Ñ$ŠDñ à€Kr6   ztask.pyFc                 ó   • U $ r   r    )ÚcmdÚargsÚkwargss      r!   Ú<lambda>r¸     s   € ÑQTr6   ÚtmpdirÚtask_configÚprintsÚexpected_outputsÚprologÚfilenameÚenv_overrideÚclean_environmentÚgenerate_custom_cmd.c
                 óê  • [        U 5      R                  SSS9  [        U[        5      (       a  U/n[        U[        5      (       d  [
        R                  " U5      n[        U[        5      (       a  U/nU V
s/ s H	  n
SU
 S3PM     nn
[        R                  " S5      n[        SUS9n[        SUS9nUbJ  U S	-  n[        [        U5      S
5       nUR                  S5        [
        R                  " X5        S S S 5        [        U S-  5      nUR                  SS5      nUR                  UUUS9nX-  nUR                  [        U5      SS9  [         R"                  [        U5      /n[$        R&                  " 5       n [$        R(                  " [        U 5      5        U	" UU5      nUR+                  U5        U(       a  0 nO2[$        R,                  R/                  5       nUb  UR1                  U5        [2        R4                  " UUS9  [        US5       nUR7                  5       n[        R9                  U5      nS S S 5        UbR  [;        W5      [;        U5      :X  d   SU SW 35       e[=        [;        U5      5       H  n[?        UU   UU   5        M     W[$        R(                  " U5        $ s  sn
f ! , (       d  f       GNÄ= f! , (       d  f       N’= f! [$        R(                  " U5        f = f)NTru   zf.write(z + "\n")a
  import hydra
import os
from hydra.core.hydra_config import HydraConfig

$PROLOG

@hydra.main(version_base=None, config_path='.', config_name='config')
def experiment(cfg):
    with open("$OUTPUT_FILE", "w") as f:
$PRINTS

if __name__ == "__main__":
    experiment()
z        )rª   r«   r­   r    Úwz# @package _global_
z
output.txtÚ\z\\)ÚPRINTSÚOUTPUT_FILEÚPROLOGúutf-8)Úencoding)ÚenvÚrz'Unexpected number of output lines from z, output lines:

) r   rx   r¡   ri   r   r   r§   ÚstringÚTemplater³   ÚopenÚwriteÚsaveÚreplaceÚ
substituteÚ
write_textÚsysÚ
executablerŠ   r�   r‹   ÚextendÚenvironrG   ÚupdateÚ
subprocessÚ
check_callÚreadÚ
splitlinesr°   ÚrangeÚassert_regex_match)r¹   rº   r*   r»   r¼   r½   r¾   r¿   rÀ   rÁ   r²   ÚsÚ
print_codeÚprolog_codeÚcfg_fileÚfÚoutput_filer±   Ú	task_filerµ   Úorig_dirÚmodified_envÚfile_strÚoutputÚidxs                            r!   Úintegration_testrë   	  sž  € ô 	ˆƒL×Ñ˜t¨dÐÑ3ÜÐ"¤C×(Ñ(Ø,Ð-ÐÜ�k¤9×-Ñ-Ü×&Ò& {Ó3ˆÜ�&œ#×ÑØ�ˆÙ/5Ó6ªv¨!�˜˜˜9Ó%©v€FÐ6ä�Šð	ó	€Aô" !¨
¸vÑF€JÜ!¨¸Ñ?€KàÑØ˜MÑ)ˆÜ”#�h“- Ô%¨Ø�G‰GÐ+Ô,Ü�NŠN˜;Ô*÷ &ô �f˜|Ñ+Ó,€Kà×%Ñ% d¨FÓ3€KØ�<‰<ØØØð ð €Dð
 Ñ!€IØ×Ñœ˜T›¨WÐÑ5ä�>‰>œ3˜y›>Ð
*€CÜ�yŠy‹{€HðÜ
�Š”�V“ÔÙ! # xÓ0ˆØ�
‰
�9ÔÞØ‰LäŸ:™:Ÿ?™?Ó,ˆLØÑ'Ø×#Ñ# LÔ1Ü×Ò˜c |Ò4ä�+˜sÔ# qØ—v‘v“xˆHÜ—^‘^ HÓ-ˆF÷ $ð Ñ'Ü�v“;¤#Ø ó#ó ð bà8¸¸ÐCVÐW_ÐV`Ðaóbð ô œS ›[Ö)�Ü"Ð#3°CÑ#8¸&À¹+ÖFñ *ð ä
�Š�ÕùòC 7÷0 &Ö%ú÷8 $Õ#ûô 	�Š�Õús8   Á9J2Ã(J7ÆBK È&K	È=AK Ê7
KË	
KËK ËK2rµ   rÊ   c                 ó6  • [         R                  S/U -   n [        U [        [        US9 nUR	                  5       u  p4UR                  S5      R                  5       R                  SS5      nUR                  S:w  d   e S S S 5        U$ ! , (       d  f       W$ = f)Nú-Werror)ÚstdoutÚstderrrÊ   rÈ   ú
r¯   r   )	rÔ   rÕ   r   r   ÚcommunicateÚdecodeÚrstriprÑ   Ú
returncode)rµ   rÊ   r²   Ú_stdoutrï   Úerrs         r!   Úrun_with_errorr÷   `  s„   € Ü�>‰>˜9Ð
%¨Ñ
+€CÜ	ˆsœ4¬°#Ò	6¸!ØŸ-™-›/‰ˆØ�m‰m˜GÓ$×+Ñ+Ó-×5Ñ5°f¸dÓCˆØ�|‰|˜qÓ Ð Ñ ÷ 
7ð €J÷	 
7Ô	6ð €Jús   ªAB	Â	
BÚallow_warningsÚprint_errorÚraise_exceptionc                 ó|   • U(       a  [         R                  /U -   n O[         R                  S/U -   n [        XX45      $ )Nrí   )rÔ   rÕ   Úrun_process)rµ   rÊ   rø   rù   rú   s        r!   Úrun_python_scriptrý   i  s8   € ö Ü�~‰~Ð Ñ$‰ä�~‰~˜yÐ)¨CÑ/ˆÜ�s Ó>Ð>r6   Útimeoutc                 óŽ  •  [         R                  " U SU[         R                  [         R                  S9nUR                  US9u  pg[	        UR                  5       R                  5       5      n[	        UR                  5       R                  5       5      n	UR                  S:w  aP  U(       a#  [        R                  R                  SU	 S35        U(       a  [         R                  " UR                  U S9eX‰4$ ! [         aB  n
U(       a4  SR                  U 5      n [        R                  R                  S	U  S
35        U
eS n
A
ff = f)NF)r¶   ÚshellrÊ   rî   rï   )rþ   r   zSubprocess error:
r¯   )rô   rµ   Ú z=== Error executing:
z
===================)rÙ   r   r   rñ   Únormalize_newlinesrò   ró   rô   rÔ   rï   rÏ   ÚCalledProcessErrorÚ	Exceptionrš   )rµ   rÊ   rù   rú   rþ   ÚprocessÚbstdoutÚbstderrrî   rï   Úes              r!   rü   rü   w  s  € ðÜ×"Ò"ØØØÜ—?‘?Ü—?‘?ñ
ˆð #×.Ñ.°wÐ.Ð?ÑˆÜ# G§N¡NÓ$4×$;Ñ$;Ó$=Ó>ˆÜ# G§N¡NÓ$4×$;Ñ$;Ó$=Ó>ˆØ×Ñ Ó"ÞÜ—
‘
× Ñ Ð#6°v°h¸bÐ!AÔBÞÜ ×3Ò3Ø&×1Ñ1°sñð ð ˆ~ÐøÜó ÞØ—(‘(˜3“-ˆCÜ�J‰J×ÑÐ5°c°UÐ:OÐPÔQØˆûð	ús   ‚C5C8 Ã8
EÄ=D?Ä?Erß   c                 óF   • U R                  SS5      R                  SS5      $ )ze
Normalizes new lines such they are comparable across different operating systems
:param s:
:return:
rð   r¯   Ú)rÑ   )rß   s    r!   r  r  ˜  s"   € ð �9‰9�V˜TÓ"×*Ñ*¨4°Ó6Ð6r6   Ú	from_lineÚto_lineÚ	from_nameÚto_namec                 ó:  • [        U 5      n [        U5      n[        U R                  5       UR                  5       UUS9 Vs/ s H  nUPM     nnSR                  U5      n[	        U5      S:”  a(  [        S5        [        U5        [        S5         S5       eg s  snf )N)ÚaÚbÚfromfileÚtofiler¯   r   z 
------------ DIFF -------------ú-------------------------------z)Mismatch between expected and actual text)r  r   rÜ   rš   r°   Úprint)r  r  r  r  ÚlineÚlinesÚdiffs          r!   Úassert_text_samer  ¡  sª   € ô # 9Ó-€IÜ  Ó)€Gô !Ø×"Ñ"Ó$Ø× Ñ Ó"ØØò	
óò
ˆDó 	ñ
ð 
ð ð �9‰9�UÓ€DÜ
ˆ4ƒy�1ƒ}ÜÐ1Ô2ÜˆdŒÜÐ/Ô0ØAÐAÓAˆuð	 ùòs   ÁBc                 ó¨  • [        U 5      R                  S5       Vs/ s H  oD(       d  M  UPM     nn[        U5      R                  S5       Vs/ s H  oD(       d  M  UPM     nn[        U5      [        U5      :w  a  [        U UUUS9  [	        XV5       H1  u  pxXx:w  d  M  [
        R                  " Xx5      b  M%  [        U UUUS9  M3     gs  snf s  snf )z×Check that the lines of `from_line` (which can be a regex expression)
matches the corresponding lines of `to_line` string.

In case the regex match fails, we display the diff as if `from_line` was a regular string.
r¯   )r  r  r  r  N)r  Úsplitr°   r  ÚzipÚreÚmatch)	r  r  r  r  ÚxÚnormalized_from_lineÚnormalized_to_lineÚline1Úline2s	            r!   rÞ   rÞ   ¸  sÅ   € ô (:¸)Ó'D×'JÑ'JÈ4Ô'PÓVÒ'P !ÓTUŸAÑ'PÐÐVÜ%7¸Ó%@×%FÑ%FÀtÔ%LÓRÒ%L ÓPQŸ!Ñ%LÐÐRÜ
ÐÓ ¤CÐ(:Ó$;Ó;ÜØØØØò		
ô Ð0ÖE‰ˆØ�>œbŸhšh uÓ4Ó<ÜØ#ØØ#Øô	ò Fùò WùÚRs   �
C
«C
Á
CÁCÚpatternrÌ   c                 óô   • [        U 5      n [        U5      n[        R                  " X[        R                  S9c>  [	        S5        [	        U 5        [	        S5        [	        U5        [	        S5         S5       eg)zÄCheck that `pattern` (which can be a regex expression)
matches the corresponding lines of `string` string.
In case the regex match fails, we display the diff as if `pattern` was a regular string.
)ÚflagsNz
-------- PATTERN: -----------z---------- STRING: ------------r  zRegex pattern did not match)r  r  ÚsearchÚ	MULTILINEr  )r$  rÌ   r  r  s       r!   Úassert_multiline_regex_searchr)  Ó  sf   € ô ! Ó)€GÜ Ó'€FÜ	‡y‚y�¬¯©Ñ5Ñ=ÜÐ/Ô0ÜˆgŒÜÐ/Ô0ÜˆfŒÜÐ/Ô0Ø3Ð3Ó3ˆuð >r6   r   r\   )NFTT)NTTN)ÚExpectedÚActual)Erb   rG   rU   rŠ   r  rW   rÌ   rÙ   rÔ   rE   Ú
contextlibr   Údifflibr   Úpathlibr   r   r   Útypingr   r	   r
   r   r   r   r   r   Ú	omegaconfr   r   r   Úhydra._internal.hydrar   Úhydra._internal.utilsr   Úhydra.core.global_hydrar   Úhydra.core.utilsr   r   Úhydra.typesr   Úversion_infor   Útyping_extensionsr"   r$   re   rl   r   ri   rŒ   rŽ   r�   Úintr‰   r“   r©   r³   rj   rë   r÷   rý   Úfloatrü   r  r  rÞ   r)  r    r6   r!   Ú<module>r:     sÞ  ðñó Û Û 	Û 	Û Û Û Û 
Û Ý %Ý  Ý ß "ß N× NÓ Nç 6Ñ 6å 'Ý 2Ý /ß <Ý $à×Ñ�yÓ Þå*ð ñ ð °¸±ô ó ð÷69ñ 69ôr
�(ô 
÷?9ñ ?9ôD�8ô ñ ˜X c™]ð °dõ ô0ð  !°R·Y²Y³[ñØðØðØ/2ðà	õð  !°R·Y²Y³[ñ	Øð	Øð	Ø/2ð	àõ	ð =Añ+Øð+Ø&.¨t°C©yÑ&9ð+à	õ+ð0
˜Cð 
¨U°4¸¸dÀ3¹iÐ3GÑ-Hð 
ÈSô 
ð& +/ØØ-1Ø#Ù4TñTØðTàðTð �C‰yðTð �#�t˜C‘y�.Ñ!ð	Tð
 ˜C  c¡˜NÑ+ðTð �$˜˜T #™YÐ&Ñ'ðTð ðTð ˜4  S ™>Ñ*ðTð ðTð " # t¨C¡y .Ñ1ðTð 	õTñn˜ð  #ð °õ ð Ø ØØ ñ?Ø	ð?à	ð?ð ð?ð ð	?ð
 ð?ð ˆ3�ˆ8�_õ?ð  ØØ Ø#ñØ	ðà	ðð ðð ð	ð
 �e‰_ðð ˆ3�ˆ8�_õðB7˜#ð 7 #ô 7ð OWñBØðBØ ðBØ-0ðBØHKðBà	õBð0 OWñØðØ ðØ-0ðØHKðà	õð8 LTñ4Øð4Øð4Ø*-ð4ØEHð4à	ö4r6   