Ë
    @çi+  ã                   ó  — 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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jJ                  e&«      Z'dejP                  dejP                  fd„Z) edd«      Z* G d„ d«      Z+ e+«       Z,g fd„Z-dej\                  e/   dej`                  e/   fd„Z1d„ Z2d„ Z3 G d„ de«      Z4de/d e/fd!„Z5y# e$ r ddlmZmZ d
ZY Œ¼w xY w)"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     ú_/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/dora/hydra.pyÚ_no_copyr   (   s	   € ð €Kó    Ú_Differencez(path key ref other ref_value other_valuec                   ó   — e Zd Zy)Ú	_NotThereN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   1   s   „ Ør   r   c           	   #   óˆ  K  — t        | j                  «       «      }t        t        |j                  «       «      t        | j                  «       «      z
  «      }g }|j                  d«       |D ]�  }||d<   | |   }||v s
J d|› �«       ‚||   }t	        |t
        «      r=t	        |t
        «      sJ d|› dt        |«      › d�«       ‚t        |||«      E d{  –—†  Œm||k7  sŒst        t        |«      || |||«      –— Œ� |D ]+  }||d<   ||   }t        t        |«      || |t        |«      –— Œ- |j                  d«       |S 7 Œk­w)zŠ
    Given two configs, gives an iterator over all the differences. For each difference,
    this will give a _Difference namedtuple.
    Néÿÿÿÿz4XP 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   sT  è ø€ ô
 �#—(‘(“*Ó€DÜ”s˜5Ÿ:™:›<Ó(¬3¨s¯x©x«z«?Ñ:Ó;€IØ€EØ‡K�K�ÔÛˆØˆˆR‰Ø˜‘Hˆ	Ø�e‰|ÐYÐSÐTWÐSXÐYÓYˆ|Ø˜C‘jˆä�i¤Ô,Ü˜k¬:Ô6ð Wð"Ø"% Ð&AÄ$À{ÓBSÐATÐTUðWóWÐ6ô ' y°+¸tÓD×DÑDØ˜IÓ%Üœd 4›j¨#¨s°E¸9ÀkÓRÓRð ó ˆØˆˆR‰Ø˜C‘jˆÜœ$˜t›* c¨3°´xÀÓMÓMð ð 	‡H�HˆR„LØ€Lð Eús   ‚CEÃE Ã
EÃ A!EÚargvÚreturnc                 ó  — g }t        «       }t        | «      d d d…   D ]]  }d|v sJ d|› d�«       ‚|j                  dd«      \  }}|j                  «       }||v rŒ<|j	                  |«       |j                  |«       Œ_ |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Ü‹5€DÜ�D‹z™$˜B˜$ÔˆØ�c‰zÐ?˜Y s eÐ+>Ð?Ó?ˆzØ—Y‘Y˜s AÓ&‰
ˆˆUØ�i‰i‹kˆØ�$‰;Øà�H‰H�SŒMØ×Ñ˜cÕ"ð  ð ‘d˜�dÑÐr   c                 ó¸   — | €y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\   € Ø
€{ØÜ	�Cœ$¤¤UÐ+Ô	,Ü�3‹xˆÜ	�CœÔ	Ø˜#‰~Ðˆ~Øˆ
äÐ4´T¸#³Y°K¸yÈÈÐNÓOÐOr   c                 ó†  — | €yt        | t        t        t        t        f«      rt        j                  | «      S t        | t        «      r,ddj                  d„ | j                  «       D «       «      z   dz   S t        | t        t        f«      rddj                  d„ | D «       «      z   dz   S t        d	t        | «      › d
| › �«      ‚)NrE   Ú{z, c              3   óT   K  — | ]   \  }}t        |«      › d t        |«      › �–— Œ" y­w)z: N)rL   Ú_hydra_value_as_override)Ú.0r5   Úvals      r   Ú	<genexpr>z+_hydra_value_as_override.<locals>.<genexpr>z   s3   è ø€ ð 
á)‘��Sô ˜‹~Ð˜bÔ!9¸#Ó!>Ð ?Ô@Ù)ùs   ‚&(Ú}Ú[c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )rP   )rQ   rR   s     r   rS   z+_hydra_value_as_override.<locals>.<genexpr>   s   è ø€ ÐNÉÀÔ7¸×<Éùs   ‚Ú]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º   € ð €}ØÜ	�EœD¤#¤u¬cÐ2Ô	3Ü�z‰z˜%Ó Ð Ü	�Eœ4Ô	 Ø�T—Y‘Yñ 
à!ŸK™KœMó
ó 
ñ 
ð ñð 	ô 
�EœD¤%˜=Ô	)Ø�T—Y‘YÑNÉÓNÓNÑNÐQTÑTÐTäÐ1´$°u³+°¸kÈ%ÈÐQÓ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j0                  eej                  ej0                  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(  rŽt        j
                  |   j                  }|€.t        j                  d   }|j                  dd«      d   | _	        n‚|j                  €J ‚|j                  }|j                  }|j                  dd«      d   | _	        nAt        |«      }|�|j                  €J ‚|j                  }|j                  dd«      d   | _	        t        |«      j                  j                  «       | _        |�| j                   |z  | _        d| _        | j%                  «       | _        | j)                  «       | _        | j-                  «       }t.        ‰	| �a  ||«       d|_        y )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__‡   se  ø€ Ø&ˆÔØ&ˆÔØ"ˆÔà—‘ˆØ�ZÒÜ—;‘;˜vÑ&×/Ñ/ˆDØˆ|Ü!Ÿh™h q™k�Ø!,×!3Ñ!3°C¸Ó!;¸AÑ!>�•à—{‘{Ð.Ð.Ð.Ø"Ÿk™k�ØŸ™�Ø!'§¡¨s°AÓ!6°qÑ!9�•ä˜VÓ$ˆDØÐ#¨¯©Ð(?Ð?Ð?ØŸ+™+ˆKØ#Ÿ]™]¨3°Ó2°1Ñ5ˆDŒNÜ $ [Ó 1× 8Ñ 8× @Ñ @Ó BˆÔØÐ"Ø$(×$9Ñ$9¸KÑ$GˆDÔ!à!ˆÔØ×)Ñ)Ó+ˆŒØ"×5Ñ5Ó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ª   sR   € Ü‹|ˆÜ�4—>‘> 6Ô*Ü˜d D§N¡N×$7Ñ$7Ô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²   s2   € ô “ˆÜ�4—>‘> 7Ô+Ü˜e T§^¡^×%9Ñ%9Ô:Øˆr   r8   c                 óÂ   — t        |«      }| j                  |«      }| j                  |«      \  }}|| j                  ||«      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º   s^   € Ü˜dÓ#ˆØ×Ñ˜tÓ$ˆØ×+Ñ+¨DÓ1‰ˆˆeØ�—‘  sÓ+Ñ+ˆÜ�T—Y‘Y C¨d¸%Ô@ˆØˆ	r   rA   c                 ó€  — g }t        |t        «      r|j                  |«       |S t        |t        «      rI|j	                  «       D ]4  \  }}|| j
                  vrt        |«      }|j                  |› d|› �«       Œ6 |S t        |t        t        f«      r|D ]  }|| j                  |«      z  }Œ |S t        d|› �«      ‚)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Ë   € ð
 ˆÜ�cœ3ÔØ�K‰K˜Ôð ˆô ˜œTÔ"Ø!Ÿi™ižk‘
��UØ˜d×1Ñ1Ñ1ô 5°UÓ;�EØ—‘˜s˜e 1 U GÐ,Õ-ð *ð ˆô ˜œd¤E˜]Ô+Û�Ø˜×*Ñ*¨4Ó0Ñ0‘ð ð ˆô ÐTÐUXÐTYÐZÓ[Ð[r   r‹   c                 óh   — t        «       }|j                  €J ‚|j                  D ]
  \  }}|||<   Œ |S r   )r   r4   )r   r‹   Úpartsrm   rB   s        r   Úget_name_partszHydraMain.get_name_partsØ   s9   € Ü“ˆØ�x‰xÐ#Ð#Ð#ØŸ8œ8‰KˆD�%ØˆE�$ŠKð $àˆr   c                 óÌ  — t        «       r6dt        «       j                  › �}t        j                  j                  |«       	   t        j                  d| j                  | j                  dœ| j                  ¤Ž| j                  «      «       t        «       r t        j                  j                  «       S S # t        «       r t        j                  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µ   € ÜŒ7Ø&¤v£x§¡Ð&7Ð8ˆGÜ�H‰H�O‰O˜GÔ$ð	)ð0ð %”5—:‘:ð %Ø ×,Ñ,Ø ×,Ñ,ñ%ð ×#Ñ#ñ%ð &*§Y¡Yó0ó 2ô
 ŒwÜ—‘—‘ Õ(ð øŒuŒwÜ—‘—‘ Õ(ð ús   ÁA
B7 Â7,C#c                 ó  — t        t        | j                  «      fd| j                  i| j                  ¤Ž5  t        j                  «       j                  }|€J ‚t        |j                  «       «      cd d d «       S # 1 sw Y   y xY w)NÚjob_name)
r
   rJ   rp   rk   rf   r   Úinstancer–   r-   Úlist_all_config_groups)r   Úghs     r   rt   zHydraMain._get_config_groupsì   so   € Ü"¤3 t×'<Ñ'<Ó#=ñ 8ÈÏÉð 8Ø%)×%6Ñ%6ó8ä×%Ñ%Ó'×-Ñ-ˆBØ�>Ð!�>Ü˜×1Ñ1Ó3Ó4÷	8÷ 8ò 8ús   ¶;A;Á;Bc                 ó   — d|v sd|v ryy)Nz-mz
--multirunFTr   )r   r8   s     r   Ú
_is_activezHydraMain._is_activeó   s   € Ø�4‰<˜<¨4Ñ/ØØr   Ú	overridesc           	      óP  — t        t        | j                  «      fd| j                  i| j                  ¤Ž5  t        j                  «       j                  }|€J ‚g }g }|D ]}  }| j                  D ]l  }|j                  |› d�«      sŒ|j                  |«       |j                  dd«      \  }}|D �	�
cg c]  \  }	}
|	|k7  sŒ|	|
f‘Œ }}	}
|j                  ||f«       Œn Œ |s| j                  g fcddd«       S | j                  |«      }||fcddd«       S c c}
}	w # 1 sw Y   yxY w)zr
        Return base config based on composition, along with delta for the
        composition overrides.
        r›   Nr;   r   )r
   rJ   rp   rk   rf   r   rœ   r–   ru   Ú
startswithr)   r<   rs   Ú_get_config_noinit)r   r¡   rž   Úto_keepr4   rA   ÚgroupÚ_rB   ÚgÚvr‡   s               r   rˆ   zHydraMain._get_base_configø   s'  € ô #¤3 t×'<Ñ'<Ó#=ñ 8ÈÏÉð 8Ø%)×%6Ñ%6ó8ä×%Ñ%Ó'×-Ñ-ˆBØ�>Ð!�>ØˆGØ13ˆEÛ �Ø!×0Ô0�EØ—~‘~¨¨¨q kÕ2ØŸ™ sÔ+Ø#&§9¡9¨S°!Ó#4™˜˜5Ù49Ô H±E©D¨A¨q¸QÀ%»Z ! Q¢°E˜Ñ HØŸ™ e¨U ^Õ4ñ 1ð !ñ Ø—~‘~ rÐ)÷8ñ 8ð ×)Ñ)¨'Ó2ˆCØ˜�:÷!8ñ 8ùó !I÷8ð 8ús0   ¶ADÂ+DÂ1DÂ?DÃ)DÃ8DÄDÄD%c                 óº   — t        t        | j                  «      fd| j                  i| j                  ¤Ž5  | j                  |«      cddd«       S # 1 sw Y   yxY w)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  sP   € ô #¤3 t×'<Ñ'<Ó#=ñ 8ÈÏÉð 8Ø%)×%6Ñ%6ó8à×*Ñ*¨9Ó5÷8÷ 8ò 8ús   ¶AÁAc                 ó  — t         r_t        j                  j                  t        dt
        «      5  t        | j                  |«      }d d d «       t        j                  «      }|S t        | j                  |«      }|S # 1 sw Y   Œ8xY w)NÚ__deepcopy__)
Ú	old_hydrar   ÚpatchÚobjectr   r   r	   ra   ÚcopyÚdeepcopy)r   r¡   r‡   s      r   r¤   zHydraMain._get_config_noinit  sk   € ÝÜ—‘×"Ñ"¤:¨~¼xÕHÜ˜d×.Ñ.°	Ó:�÷ Iä—-‘- Ó$ˆCð ˆ
ô ˜$×*Ñ*¨IÓ6ˆCØˆ
÷ IÐHús   °A>Á>BÚinitr1   c                 óœ   — g }t        ||«      D ]:  }dj                  |j                  «      }|j                  ||j                  f«       Œ< |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$  sJ   € ð ˆÜ# D¨%Ö0ˆDØ—8‘8˜DŸI™IÓ&ˆDØ�L‰L˜$ × 0Ñ 0Ð1Õ2ð 1ð ˆ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_   „   sQ  ø„ Ø€Eð!%˜Wð !%°3ð !%ÀSõ !%ðF˜:ó ð +ó ð˜2Ÿ;™; sÑ+ó ð §¡ð ¨B¯G©G°C©Ló ð, ð ¨ó ò)ð5 B§G¡G¨C¡Ló 5ð˜rŸw™w s™|ð °ó ð -/ñØŸW™W S™\ðà—‘˜* b§g¡g¨b¯h©h°s¸C°xÑ.@Ñ&AÐAÑBóð4 /1ñ6Ø!Ÿw™w s™|ð6Ø5?ó6ð <>ñ ¨B¯G©G°C©Lð À*ó ð˜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ð
 €Iå +ç <Ñ <ß (ß !Ñ !à	ˆ×	Ñ	˜8Ó	$€ð�2—6‘6ð  §¡ó ñ ˜Ð(RÓS€÷	ñ 	ñ ‹;€ð &(ó ð>˜Ÿ™ SÑ)ð ¨b¯g©g°c©ló ò	PòSô$h�ô hðV˜Cð ¨cô øðm ò ßAØ‚Iðús   ¼C1 Ã1DÄD