ó
    Ð]j¥œ  ã                  óœ  • S r SSKJ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JrJrJrJrJrJr  SSKJrJrJr   " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S5      r\" 5       r  " S S\RB                  5      r!S<S jr" " S S\5      r#S=S jr$ " S S\%5      r& " S S5      r' " S S\(\'5      r) " S S\R&                  \R                     \'5      r* " S  S!5      r+ " S" S#\+5      r, " S$ S%\,5      r- " S& S'\,5      r. " S( S)\+5      r/\R`                  " S*5      r1S+r2S,r3 " S- S.\Rh                  5      r5 " S/ S0\%5      r6 " S1 S2\RB                  5      r7\R"                  \(\R                  4   r8 " S3 S4\/5      r9 " S5 S6\Rh                  5      r: " S7 S8\95      r; " S9 S:\;5      r<S>S; jr=g)?zA simple configuration system.é    )ÚannotationsN)ÚLogger)ÚAnyÚ	ContainerÚDictÚ	HasTraitsÚListÚ	TraitTypeÚ	Undefinedé   )Úcast_unicodeÚfilefindÚwarningsc                  ó   • \ rS rSrSrg)ÚConfigErroré   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/traitlets/config/loader.pyr   r      ó   † Úr   r   c                  ó   • \ rS rSrSrg)ÚConfigLoaderErroré   r   Nr   r   r   r   r   r      r   r   r   c                  ó   • \ rS rSrSrg)ÚConfigFileNotFoundé"   r   Nr   r   r   r   r!   r!   "   r   r   r!   c                  ó   • \ rS rSrSrg)ÚArgumentErroré&   r   Nr   r   r   r   r$   r$   &   r   r   r$   c                  ó(   • \ rS rSrSS jrSS jrSrg)Ú	_Sentinelé5   c                ó   • g)Nz<Sentinel deprecated>r   ©Úselfs    r   Ú__repr__Ú_Sentinel.__repr__6   s   € Ø&r   c                ó   • g)Nz<deprecated>r   r*   s    r   Ú__str__Ú_Sentinel.__str__9   s   € Ør   r   N©ÚreturnÚstr)r   r   r   r   r,   r/   r   r   r   r   r'   r'   5   s   † ô'÷r   r'   c                  ó~   ^ • \ rS rSrSrSSU 4S jjjr\R                  R
                  R                  \l        SrU =r	$ )ÚArgumentParseré@   z?Simple argparse subclass that prints help to stdout by default.c                óH   >• Uc  [         R                  n[        TU ]  U5      $ ©N)ÚsysÚstdoutÚsuperÚ
print_help)r+   ÚfileÚ	__class__s     €r   r<   ÚArgumentParser.print_helpC   s!   ø€ Ø‰<Ü—:‘:ˆDÜ‰wÑ! $Ó'Ð'r   r   r8   )r=   út.Anyr2   ÚNone)
r   r   r   r   Ú__doc__r<   Úargparser5   r   Ú__classcell__©r>   s   @r   r5   r5   @   s/   ø† ÙI÷(ñ (ð
 "×0Ñ0×;Ñ;×CÑC€J×Òr   r5   c                óš   • [        U S5       n[        [        UR                  5       U S5      X5        S S S 5        g ! , (       d  f       g = f)NÚrbÚexec)ÚopenrH   ÚcompileÚread)ÚfnameÚglobÚfs      r   ÚexecfilerO   P   s3   € Ü	ˆe�TÔ	˜aÜŒW�Q—V‘V“X˜u fÓ-¨tÔ:÷ 
×	Ö	ús	   �&<¼
A
c                  óØ   • \ rS rSr% SrSr\" 5       rS\S'   \" 5       r	S\S'   \" 5       r
S\S'   SS jrSS	 jrSS
 jrSS jrSS jr\" 5       rSS jrSS jrSS jrSS jrSS jrSrg)ÚLazyConfigValueéU   zýProxy object for exposing methods on configurable containers

These methods allow appending/extending/updating
to add to non-empty defaults instead of clobbering them.

Exposes:

- append, extend, insert on lists
- update on dicts
- update, add on sets
NzList[t.Any]Ú_extendÚ_prependÚ_insertsc                ó:   • U R                   R                  U5        g)zAppend an item to a ListN)rS   Úappend©r+   Úobjs     r   rW   ÚLazyConfigValue.appendi   s   € à�‰×Ñ˜CÕ r   c                ó:   • U R                   R                  U5        g)zExtend a listN)rS   Úextend©r+   Úothers     r   r\   ÚLazyConfigValue.extendm   s   € à�‰×Ñ˜EÕ"r   c                ó    • XR                   SS& g)z#like list.extend, but for the frontNr   )rT   r]   s     r   ÚprependÚLazyConfigValue.prependq   s   € à!�‰�b�qÑr   c                óî  • [        U[        5      (       aÐ  UR                  R                  U R                  5        UR                  U l        U R                  R                  UR                  5        UR
                  R                  U R
                  5        UR
                  U l        U R                  (       a,  UR                  U R                  5        UR                  U l        U $ U R                  U5      $ )aP  
Merge with another earlier LazyConfigValue or an earlier container.
This is useful when having global system-wide configuration files.

Self is expected to have higher precedence.

Parameters
----------
other : LazyConfigValue or container

Returns
-------
LazyConfigValue
    if ``other`` is also lazy, a reified container otherwise.
)	Ú
isinstancerQ   rS   r\   rT   rU   Ú_updateÚupdateÚ	get_valuer]   s     r   Ú
merge_intoÚLazyConfigValue.merge_intou   s¡   € ô  �eœ_×-Ñ-Ø�M‰M× Ñ  §¡Ô.Ø Ÿ=™=ˆDŒLà�M‰M× Ñ  §¡Ô0à�N‰N×!Ñ! $§-¡-Ô0Ø!ŸN™NˆDŒMà�|�|Ø—‘˜TŸ\™\Ô*Ø$Ÿ}™}�”ØˆKð —>‘> %Ó(Ð(r   c                ó|   • [        U[        5      (       d  [        S5      eU R                  R	                  X45        g )NzAn integer is required)rd   ÚintÚ	TypeErrorrU   rW   )r+   Úindexr^   s      r   ÚinsertÚLazyConfigValue.insert–   s/   € Ü˜%¤×%Ñ%ÜÐ4Ó5Ð5Ø�‰×Ñ˜e˜^Õ,r   c                ó¬   • U R                   c,  [        U[        5      (       a  0 U l         O[        5       U l         U R                   R	                  U5        g)zUpdate either a set or dictN)re   rd   ÚdictÚsetrf   r]   s     r   rf   ÚLazyConfigValue.updateŸ   s;   € à�<‰<ÑÜ˜%¤×&Ñ&Ø!�•ä"›u�”Ø�‰×Ñ˜EÕ"r   c                ó(   • U R                  U15        g)zAdd an item to a setN)rf   rX   s     r   ÚaddÚLazyConfigValue.add©   s   € à�‰�S�EÕr   c                óB  • U R                   b  U R                   $ [        R                  " U5      n[        U[        5      (       aQ  U R
                   H  u  p4UR                  X45        M     U R                  USS& UR                  U R                  5        Oƒ[        U[        5      (       a-  U R                  (       a  UR                  U R                  5        OA[        U[        5      (       a,  U R                  (       a  UR                  U R                  5        X l         U$ )z^construct the value from the initial one

after applying any insert / extend / update changes
Nr   )Ú_valueÚcopyÚdeepcopyrd   ÚlistrU   rn   rT   r\   rS   rq   re   rf   rr   )r+   ÚinitialÚvalueÚidxrY   s        r   rg   ÚLazyConfigValue.get_value­   sÁ   € ð
 �;‰;Ñ"Ø—;‘;ÐÜ—’˜gÓ&ˆÜ�eœT×"Ñ"Ø ŸMœM‘�Ø—‘˜SÖ&ñ *àŸ™ˆE�"�1ˆIØ�L‰L˜Ÿ™Õ&ä˜œt×$Ñ$Ø�|�|Ø—‘˜TŸ\™\Ô*øÜ˜œs×#Ñ#Ø�|�|Ø—‘˜TŸ\™\Ô*ØŒØˆr   c                ó  • 0 nU R                   (       a  U R                   US'   U R                  (       a  U R                  US'   U R                  (       a  U R                  US'   U$ U R                  (       a  U R                  US'   U$ )z€return JSONable dict form of my data

Currently update as dict or set, extend, prepend as lists, and inserts as list of tuples.
rf   r\   ra   Úinserts)re   rS   rT   rU   )r+   Úds     r   Úto_dictÚLazyConfigValue.to_dictÄ   sg   € ð
 ˆØ�<�<ØŸ,™,ˆAˆh‰KØ�<�<ØŸ,™,ˆAˆh‰KØ�=�=ØŸ=™=ˆAˆi‰Lð ˆð �]�]ØŸ=™=ˆAˆi‰LØˆr   c                óÄ   • U R                   b(  SU R                  R                   SU R                   < S3$ SU R                  R                   SU R                  5       < S3$ )NÚ<z value=Ú>Ú )rx   r>   r   rƒ   r*   s    r   r,   ÚLazyConfigValue.__repr__Ô   sW   € Ø�;‰;Ñ"Ø�t—~‘~×.Ñ.Ð/¨w°t·{±{±oÀQÐGÐGà�t—~‘~×.Ñ.Ð/¨q°·±³Ñ0BÀ!ÐDÐDr   )rS   rU   re   rx   )rY   r@   r2   rA   ©r^   r@   r2   rA   )r^   r@   r2   r@   )rm   rk   r^   r@   r2   rA   )r|   r@   r2   r@   ©r2   údict[str, t.Any]r1   )r   r   r   r   rB   rx   r	   rS   Ú__annotations__rT   rU   rW   r\   ra   rh   rn   r   re   rf   ru   rg   rƒ   r,   r   r   r   r   rQ   rQ   U   sq   ‡ ñ
ð €Fñ  ›6€Gˆ[Ó!Ù ›F€HˆkÓ"Ù ›F€HˆkÓ"ô!ô#ô"ô)ôB-ñ ‹e€Gô#ôôô.÷ Er   rQ   c                ó’   • [        U =(       a6    U S   R                  5       U S   :H  =(       a    U R                  S5      (       + 5      $ )z>Is a Config key a section name (does it start with a capital)?r   Ú_)ÚboolÚupperÚ
startswith©Úkeys    r   Ú_is_section_keyr•   Û   s6   € ä�×L˜˜A™Ÿ™›¨#¨a©&Ñ0×L¸¿¹ÈÓ9LÔ5LÓMÐMr   c                  óÀ   ^ • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SU 4S jjr
\
rSS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSrU =r$ )ÚConfigéà   af  An attribute-based dict that can do smart merges.

Accessing a field on a config object for the first time populates the key
with either a nested Config object for keys starting with capitals
or :class:`.LazyConfigValue` for lowercase keys,
allowing quick assignments such as::

    c = Config()
    c.Class.int_trait = 5
    c.Class.list_trait.append("x")

c                óX   • [         R                  " U /UQ70 UD6  U R                  5         g r8   )rq   Ú__init__Ú_ensure_subconfig)r+   ÚargsÚkwdss      r   rš   ÚConfig.__init__î   s$   € Ü�Š�dÐ*˜TÒ* TÒ*Ø×ÑÕ r   c                óÈ   • U  H\  nX   n[        U5      (       d  M  [        U[        5      (       d  M0  [        U[        5      (       a  MG  [	        X[        U5      5        M^     g)z»ensure that sub-dicts that should be Config objects are

casts dicts that are under section keys to Config objects,
which is necessary for constructing Config objects from dict literals.
N)r•   rd   rq   r—   Úsetattr)r+   r”   rY   s      r   r›   ÚConfig._ensure_subconfigò   sH   € ó ˆCØ‘)ˆCÜ˜s×#Ó#¬
°3¼×(=Ó(=ÄjÐQTÔV\×F]ÓF]Ü˜¤6¨#£;Ö/ò r   c                ó&   • U R                  U5        g)z$deprecated alias, use Config.merge()N)Úmerger]   s     r   Ú_mergeÚConfig._mergeý   s   € à�
‰
�5Õr   c                óT  • 0 nUR                  5        H�  u  p4X0;  a  XBU'   M  [        U[        5      (       a,  [        X   [        5      (       a  X   R                  U5        MQ  [        U[        5      (       a  UR                  X   5      X'   M}  XBU'   Mƒ     U R                  U5        g)z)merge another config object into this oneN)Úitemsrd   r—   r£   rQ   rh   rf   )r+   r^   Ú	to_updateÚkÚvs        r   r£   ÚConfig.merge  s„   € àˆ	Ø—K‘K–M‰DˆAØ‹}Ø ˜!“ä˜a¤×(Ñ(¬Z¸¹Ä×-HÑ-Hà‘G—M‘M !Ö$Ü ¤?×3Ñ3ØŸl™l¨4©7Ó3�D“Gð $%˜a“Lñ "ð 	�‰�IÕr   c                óº   • 0 nU  HR  nX1;  a  M
  X   nX   nU H:  nXe;   d  M
  XF   XV   :w  d  M  UR                  U0 5        XF   < SXV   < 3X#   U'   M<     MT     U$ )zÌCheck for collisions between two config objects.

Returns a dict of the form {"Class": {"trait": "collision message"}}`,
indicating which values have been ignored.

An empty dict indicates no collisions.
z ignored, using )Ú
setdefault)r+   r^   Ú
collisionsÚsectionÚmineÚtheirsr”   s          r   r®   ÚConfig.collisions  sy   € ð (*ˆ
ÛˆGØÓ#ÙØ‘=ˆDØ‘^ˆFÛ�Ø•= T¡Y°&±+Õ%=Ø×)Ñ)¨'°2Ô6Ø26±)±Ð>NÈvÉ{ÉoÐ/^�JÑ'¨Ó,ó ñ ð Ðr   c                óp   >• SU;   a!  UR                  SS5      u  p#X ;  a  gX0U   ;   $ [        TU ]	  U5      $ )NÚ.é   F)Úsplitr;   Ú__contains__)r+   r”   ÚfirstÚ	remainderr>   s       €r   r·   ÚConfig.__contains__'  sC   ø€ à�#‹:Ø"Ÿy™y¨¨aÓ0ÑˆEØÓ ØØ U¡Ñ+Ð+ä‰wÑ# CÓ(Ð(r   c                ó.   • [        U5      =(       a    X;   $ r8   )r•   ©r+   r”   s     r   Ú_has_sectionÚConfig._has_section4  s   € Ü˜sÓ#×3¨©Ð3r   c                óJ   • [        U 5      " [        R                  U 5      5      $ r8   )Útyperq   ry   r*   s    r   ry   ÚConfig.copy7  s   € Ü�DŒzœ$Ÿ)™) D›/Ó*Ð*r   c                ó"   • U R                  5       $ r8   )ry   r*   s    r   Ú__copy__ÚConfig.__copy__:  s   € Ø�y‰y‹{Ðr   c                ó6  • [        U 5      " 5       nU R                  5        Ht  u  p4[        U[        [        45      (       a  [
        R                  " XA5      nO9[        U5      [        [        [        [        1;   a  [
        R
                  " U5      nXBU'   Mv     U$ r8   )rÀ   r§   rd   r—   rQ   ry   rz   rq   r{   rr   Útuple)r+   ÚmemoÚ
new_configr”   r}   s        r   Ú__deepcopy__ÚConfig.__deepcopy__=  sq   € Ü˜$”Z“\ˆ
ØŸ*™*ž,‰JˆCÜ˜%¤&¬/Ð!:×;Ñ;äŸš eÓ2‘Ü�e“¤¤t¬S´%Ð 8Ó8äŸ	š	 %Ó(�Ø#�s‹Oñ 'ð Ðr   c                ó(  •  [         R                  X5      $ ! [         ap    [        U5      (       a$  [	        5       n[         R                  XU5        Us $ UR                  S5      (       d$  [        5       n[         R                  XU5        Us $ e f = f)Nr�   )rq   Ú__getitem__ÚKeyErrorr•   r—   Ú__setitem__r’   rQ   )r+   r”   Úcrª   s       r   rÌ   ÚConfig.__getitem__I  s}   € ð	Ü×#Ñ# DÓ.Ð.øÜó 	Ü˜s×#Ñ#Ü“H�Ü× Ñ  ¨AÔ.Ø’Ø—^‘^ C×(Ñ(ä#Ó%�Ü× Ñ  ¨AÔ.Ø’àð	ús   ‚ —<BÁ8BÂBc                ó    • [        U5      (       a(  [        U[        5      (       d  [        SU< SU< 35      e[        R                  XU5        g )NzIvalues whose keys begin with an uppercase char must be Config instances: ú, )r•   rd   r—   Ú
ValueErrorrq   rÎ   )r+   r”   r}   s      r   rÎ   ÚConfig.__setitem__Y  sO   € Ü˜3×ÑÜ˜e¤V×,Ñ,Ü ð6Ø69±W¸B¸u¹iðIóð ô 	×Ñ˜ EÕ*r   c                ó¸   • UR                  S5      (       a  [        R                  X5      $  U R                  U5      $ ! [         a  n[        U5      UeS nAff = f©NÚ__)r’   rq   Ú__getattr__rÌ   rÍ   ÚAttributeError©r+   r”   Úes      r   rØ   ÚConfig.__getattr__b  sU   € Ø�>‰>˜$×ÑÜ×#Ñ# DÓ.Ð.ð	+Ø×#Ñ# CÓ(Ð(øÜó 	+Ü  Ó#¨Ð*ûð	+ús   ­> ¾
AÁAÁAc                ó¼   • UR                  S5      (       a  [        R                  XU5      $  U R                  X5        g ! [         a  n[        U5      UeS nAff = frÖ   )r’   rq   Ú__setattr__rÎ   rÍ   rÙ   )r+   r”   r}   rÛ   s       r   rÞ   ÚConfig.__setattr__j  sT   € Ø�>‰>˜$×ÑÜ×#Ñ# D¨uÓ5Ð5ð	+Ø×Ñ˜SÕ(øÜó 	+Ü  Ó#¨Ð*ûð	+ús   ®A  Á 
AÁ
AÁAc                óÂ   • UR                  S5      (       a  [        R                  X5      $  [        R                  X5        g ! [         a  n[        U5      UeS nAff = frÖ   )r’   rq   Ú__delattr__Ú__delitem__rÍ   rÙ   rÚ   s      r   rá   ÚConfig.__delattr__r  sR   € Ø�>‰>˜$×ÑÜ×#Ñ# DÓ.Ð.ð	+Ü×Ñ˜TÕ'øÜó 	+Ü  Ó#¨Ð*ûð	+ús   ­A Á
AÁAÁAr   )rœ   r@   r�   r@   r2   rA   ©r2   rA   rŠ   )r^   r—   r2   rŒ   ©r”   r@   r2   r�   ©r”   r3   r2   r�   r‹   )rÇ   r@   r2   r—   ©r”   r3   r2   r@   )r”   r3   r}   r@   r2   rA   ©r”   r3   r2   rA   )r   r   r   r   rB   rš   r›   r¤   r£   r®   r·   Úhas_keyr½   ry   rÃ   rÉ   rÌ   rÎ   rØ   rÞ   rá   r   rD   rE   s   @r   r—   r—   à   s_   ø† ñô!ô	0ôôô$÷()ð €Gô4ô+ôô
ôô +ô+ô+÷+ò +r   r—   c                  ó:   ^ • \ rS rSrSrSS jrSU 4S jjrSrU =r$ )ÚDeferredConfigi{  z0Class for deferred-evaluation of config from CLIc                ó   • [        S5      e)NzImplement in subclasses©ÚNotImplementedError)r+   Útraits     r   rg   ÚDeferredConfig.get_value~  s   € Ü!Ð";Ó<Ð<r   c                ó4   >• [         U R                  U ]  5       $ r8   )r;   r>   r,   )r+   r>   s    €r   Ú_super_reprÚDeferredConfig._super_repr�  s   ø€ ä�T—^‘^ TÑ3Ó5Ð5r   r   ©rï   zTraitType[t.Any, t.Any]r2   r@   r1   )	r   r   r   r   rB   rg   rò   r   rD   rE   s   @r   rë   rë   {  s   ø† Ù:ô=÷6õ 6r   rë   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚDeferredConfigStringi†  a‹  Config value for loading config from a string

Interpretation is deferred until it is loaded into the trait.

Subclass of str for backward compatibility.

This class is only used for values that are not listed
in the configurable classes.

When config is loaded, `trait.from_string` will be used.

If an error is raised in `.from_string`,
the original string is returned.

.. versionadded:: 5.0
c                ó`   • [        U 5      n UR                  U5      $ ! [         a    Us $ f = f)ú#Get the value stored in this string)r3   Úfrom_stringÚ	Exception)r+   rï   Úss      r   rg   ÚDeferredConfigString.get_value˜  s7   € ä�‹Iˆð	Ø×$Ñ$ QÓ'Ð'øÜó 	ð ŠHð		ús   � ž-¬-c                óV   • U R                   R                   SU R                  5        S3$ ©NÚ(Ú)©r>   r   rò   r*   s    r   r,   ÚDeferredConfigString.__repr__£  ó*   € Ø—.‘.×)Ñ)Ð*¨!¨D×,<Ñ,<Ó,>Ð+?¸qÐAÐAr   r   Nrô   r1   ©r   r   r   r   rB   rg   r,   r   r   r   r   rö   rö   †  s   † ñô"	÷Br   rö   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚDeferredConfigListi§  av  Config value for loading config from a list of strings

Interpretation is deferred until it is loaded into the trait.

This class is only used for values that are not listed
in the configurable classes.

When config is loaded, `trait.from_string_list` will be used.

If an error is raised in `.from_string_list`,
the original string list is returned.

.. versionadded:: 5.0
c           	     ó(  • [        US5      (       a  [        U 5      nUR                  nOO[        U 5      S:”  a/  [	        UR
                   S[        U 5       S[        U 5       35      eU S   nUR                  n U" U5      $ ! [         a    Us $ f = f)rø   Úfrom_string_listrµ   z only accepts one value, got z: r   )Úhasattrr{   r  ÚlenrÓ   Únamerù   rú   )r+   rï   ÚsrcÚcasts       r   rg   ÚDeferredConfigList.get_value·  s›   € ä�5Ð,×-Ñ-Ü�t“*ˆCØ×)Ñ)‰Dô �4‹y˜1‹}Ü Ø—z‘z�lÐ"?ÄÀDÃ	¸{È"ÌTÐRVËZÈLÐYóð ð �q‘'ˆCØ×$Ñ$ˆDð	Ù˜“9ÐøÜó 	ð ŠJð		ús   Á:B ÂBÂBc                óV   • U R                   R                   SU R                  5        S3$ rþ   r  r*   s    r   r,   ÚDeferredConfigList.__repr__Í  r  r   r   Nrô   r1   r  r   r   r   r  r  §  s   † ñô÷,Br   r  c                  óD   • \ rS rSrSrS	S jrS
SS jjrSS jrSS jrSr	g)ÚConfigLoaderiÖ  a	  A object for loading configurations from just about anywhere.

The resulting configuration is packaged as a :class:`Config`.

Notes
-----
A :class:`ConfigLoader` does one thing: load a config from a source
(file, command line arguments) and returns the data as a :class:`Config` object.
There are lots of things that :class:`ConfigLoader` does not do.  It does
not implement complex logic for finding config files.  It does not handle
default values or merge multiple configs.  These things need to be
handled elsewhere.
c                óN   • SSK Jn  [        R                  " [        U" 5       5      $ )Nr   )Ú
get_logger)Útraitlets.logr  Útr  r   )r+   r  s     r   Ú_log_defaultÚConfigLoader._log_defaultå  s   € Ý,ä�vŠv”f™j›lÓ+Ð+r   Nc                ó˜   • U R                  5         Uc1  U R                  5       U l        U R                  R                  S5        gXl        g)a  A base class for config loaders.

log : instance of :class:`logging.Logger` to use.
      By default logger of :meth:`traitlets.config.application.Application.instance()`
      will be used

Examples
--------
>>> cl = ConfigLoader()
>>> config = cl.load_config()
>>> config
{}
NzUsing default logger)Úclearr  ÚlogÚdebug)r+   r  s     r   rš   ÚConfigLoader.__init__ê  s8   € ð 	�
‰
ŒØ‰;Ø×(Ñ(Ó*ˆDŒHØ�H‰H�N‰NÐ1Õ2à�Hr   c                ó"   • [        5       U l        g r8   )r—   Úconfigr*   s    r   r  ÚConfigLoader.clearÿ  s   € Ü“hˆ�r   c                ó:   • U R                  5         U R                  $ )zåLoad a config from somewhere, return a :class:`Config` instance.

Usually, this will cause self.config to be set and then returned.
However, in most cases, :meth:`ConfigLoader.clear` should be called
to erase any previous state.
)r  r  r*   s    r   Úload_configÚConfigLoader.load_config  s   € ð 	�
‰
ŒØ�{‰{Ðr   )r  r  )r2   r   r8   )r  zLogger | Noner2   rA   rä   ©r2   r—   )
r   r   r   r   rB   r  rš   r  r"  r   r   r   r   r  r  Ö  s   † ñô,ö
ô*÷r   r  c                  ó>   ^ • \ rS rSrSrSSU 4S jjjrSS jrSrU =r$ )	ÚFileConfigLoaderi  zxA base class for file based configurations.

As we add more file based config loaders, the common logic should go
here.
c                óL   >• [         TU ]  " S0 UD6  Xl        X l        SU l        g)zîBuild a config loader for a filename and path.

Parameters
----------
filename : str
    The file name of the config file.
path : str, list, tuple
    The path to search for the config file on, or a sequence of
    paths to try in order.
Ú Nr   )r;   rš   ÚfilenameÚpathÚfull_filename)r+   r)  r*  Úkwr>   s       €r   rš   ÚFileConfigLoader.__init__  s'   ø€ ô 	‰ÒÑ˜2ÒØ ŒØŒ	ØˆÕr   c                óN   • [        U R                  U R                  5      U l        g)z,Try to find the file by searching the paths.N)r   r)  r*  r+  r*   s    r   Ú
_find_fileÚFileConfigLoader._find_file$  s   € ä% d§m¡m°T·Y±YÓ?ˆÕr   )r)  r+  r*  r8   )r)  r3   r*  ú
str | Noner,  r@   r2   rA   rä   )	r   r   r   r   rB   rš   r/  r   rD   rE   s   @r   r&  r&    s   ø† ñ÷ ñ  ÷ @ò @r   r&  c                  óJ   • \ rS rSrSrS
S jrSS jrSS jrS
S jrSS jr	Sr
g	)ÚJSONFileConfigLoaderi)  a  A JSON file loader for config

Can also act as a context manager that rewrite the configuration file to disk on exit.

Example::

    with JSONFileConfigLoader('myapp.json','/home/jupyter/configurations/') as c:
        c.MyNewConfigurable.new_value = 'Updated'

c                óö   • U R                  5          U R                  5         U R                  5       nU R                  U5      U l        U R                  $ ! [         a  n[        [	        U5      5      UeSnAff = f©z=Load the config from a file and return it as a Config object.N)r  r/  ÚOSErrorr!   r3   Ú_read_file_as_dictÚ_convert_to_configr  )r+   rÛ   Údcts      r   r"  Ú JSONFileConfigLoader.load_config5  si   € à�
‰
Œð	4Ø�O‰OÔð ×%Ñ%Ó'ˆØ×-Ñ-¨cÓ2ˆŒØ�{‰{Ðøô	 ó 	4Ü$¤S¨£VÓ,°!Ð3ûð	4ús   ’A Á
A8ÁA3Á3A8c                ó¸   • [        U R                  5       n[        R                  " S[        R
                  " U5      5      sS S S 5        $ ! , (       d  f       g = f)NrŒ   )rI   r+  r  r  ÚjsonÚload)r+   rN   s     r   r7  Ú'JSONFileConfigLoader._read_file_as_dict@  s5   € Ü�$×$Ñ$Ô%¨Ü—6’6Ð,¬d¯iªi¸«lÓ;÷ &×%×%ús   –+AÁ
Ac                ót   • SU;   a  UR                  S5      nOSnUS:X  a  [        U5      $ [        SU 35      e)NÚversionrµ   z%Unknown version of JSON config file: )Úpopr—   rÓ   )r+   Ú
dictionaryr@  s      r   r8  Ú'JSONFileConfigLoader._convert_to_configD  sB   € Ø˜
Ó"Ø —n‘n YÓ/‰GàˆGà�a‹<Ü˜*Ó%Ð%äÐDÀWÀIÐNÓOÐOr   c                ó:   • U R                  5         U R                  $ r8   )r"  r  r*   s    r   Ú	__enter__ÚJSONFileConfigLoader.__enter__O  s   € Ø×ÑÔØ�{‰{Ðr   c                óæ   • SU R                   l        [        R                  " U R                   SS9n[	        U R
                  S5       nUR                  U5        SSS5        g! , (       d  f       g= f)z•
Exit the context manager but do not handle any errors.

In case of any error, we do not want to write the potentially broken
configuration to disk.
rµ   r   )ÚindentÚwN)r  r@  r<  ÚdumpsrI   r+  Úwrite)r+   Úexc_typeÚ	exc_valueÚ	tracebackÚjson_configrN   s         r   Ú__exit__ÚJSONFileConfigLoader.__exit__S  sN   € ð  ˆ�‰ÔÜ—j’j §¡°QÑ7ˆÜ�$×$Ñ$ cÔ*¨aØ�G‰G�KÔ ÷ +×*Ö*ús   ÁA"Á"
A0©r  Nr$  r‹   )rB  rŒ   r2   r—   )rL  ÚobjectrM  rS  rN  rS  r2   rA   )r   r   r   r   rB   r"  r7  r8  rE  rP  r   r   r   r   r3  r3  )  s!   † ñ	ô	ô<ô	Pô÷
!r   r3  c                  ó:   • \ rS rSrSrSS jrS	S
S jjrSS jrSrg)ÚPyFileConfigLoaderi`  z¤A config loader for pure python files.

This is responsible for locating a Python config file by filename and
path, then executing it to construct a Config object.
c                óÊ   • U R                  5          U R                  5         U R                  5         U R                  $ ! [         a  n[        [	        U5      5      UeSnAff = fr5  )r  r/  r6  r!   r3   r7  r  )r+   rÛ   s     r   r"  ÚPyFileConfigLoader.load_configg  sU   € à�
‰
Œð	4Ø�O‰OÔð 	×ÑÔ!Ø�{‰{Ðøô ó 	4Ü$¤S¨£VÓ,°!Ð3ûð	4ús   ’> ¾
A"ÁAÁA"Nc                ó¼   • Uc  U R                   nU R                  X5      n UR                  5       nU R                  R	                  U5        g! [
         a     gf = f)z5Injected into config file namespace as load_subconfigN)r*  r>   r"  r  r£   r!   )r+   rL   r*  ÚloaderÚ
sub_configs        r   Úload_subconfigÚ!PyFileConfigLoader.load_subconfigq  s[   € à‰<Ø—9‘9ˆDà—‘ Ó,ˆð	*Ø×+Ñ+Ó-ˆJð �K‰K×Ñ˜jÕ)øô "ó 	ñ ð	ús   ¢A Á
AÁAc                ó  ^ • SU 4S jjn[        T R                  T R                  UT R                  S9nT R                  n[	        US5       n[        [        UR                  5       US5      X"5        SSS5        g! , (       d  f       g= f)z>Load the config file into self.config, with recursive loading.c                 ó   >• T R                   $ )zKUnnecessary now, but a deprecation warning is more trouble than it's worth.rR  r*   s   €r   Ú
get_configÚ9PyFileConfigLoader._read_file_as_dict.<locals>.get_configƒ  s   ø€ à—;‘;Ðr   )rÏ   r[  r_  Ú__file__rG   rH   Nr$  )rq   r  r[  r+  rI   rH   rJ   rK   )r+   r_  Ú	namespaceÚconf_filenamerN   s   `    r   r7  Ú%PyFileConfigLoader._read_file_as_dict€  sn   ø€ ÷	ô Ø�k‰kØ×.Ñ.Ø!Ø×'Ñ'ñ	
ˆ	ð ×*Ñ*ˆÜ�- Ô&¨!Ü”˜Ÿ™› =°&Ó9¸9ÔP÷ '×&Ö&ús   Á&A;Á;
B	r   r$  r8   )rL   r3   r*  r1  r2   rA   rä   )	r   r   r   r   rB   r"  r[  r7  r   r   r   r   rU  rU  `  s   † ñôö*÷Qr   rU  c                  ó@   • \ rS rSrSr S       SS jjrS	S jrSrg)
ÚCommandLineConfigLoaderi’  zyA config loader for command line arguments.

As we add more command line based loaders, the common logic should go
here.
Nc                ó¬  • Un[        U[        5      (       ai  U(       a  UR                  U5      nOt[        U[        5      (       a:  [	        U5      S:X  a+  [        [        R                  R                  US   5      5      nO$U(       a  UR                  U5      nO[        U5      nUR                  S5      Gt pVU R                  nU H  nXx   nM	     XGU'   g)zjexecute self.config.<lhs> = <rhs>

* expands ~ with expanduser
* interprets value with trait if available
rµ   r   r´   N)rd   rë   rg   r  r
  rö   Úosr*  Ú
expanduserrù   r¶   r  )	r+   ÚlhsÚrhsrï   r}   r*  r”   r¯   Úparts	            r   Ú_exec_config_strÚ(CommandLineConfigLoader._exec_config_str™  s­   € ð ˆÜ�eœ^×,Ñ,ÞàŸ™¨Ó.‘Ü˜CÔ!3×4Ñ4¼¸S»ÀQ»ä,¬R¯W©W×-?Ñ-?ÀÀAÁÓ-GÓH�øæØ×)Ñ)¨%Ó0‘ä,¨UÓ3�à—Y‘Y˜s“^‰
ˆØ—+‘+ˆÛˆDØ‘mŠGñ à�‰Ør   c                óÄ   • [        U[        [        45      (       a8  UR                  5        H#  u  p#U R                  U   R                  U5        M%     g[        SU-  5      e)z=update self.config from a flag, which can be a dict or ConfigzInvalid flag: %rN)rd   rq   r—   r§   r  rf   rl   )r+   ÚcfgÚsecrÏ   s       r   Ú
_load_flagÚ"CommandLineConfigLoader._load_flag¶  sQ   € ä�cœD¤&˜>×*Ñ*ð Ÿ)™)ž+‘�Ø—‘˜CÑ ×'Ñ'¨Ö*ò &ô Ð.°Ñ4Ó5Ð5r   r   r8   )rj  r@   rk  r@   rï   zTraitType[t.Any, t.Any] | Noner2   rA   )rp  r@   r2   rA   )r   r   r   r   rB   rm  rr  r   r   r   r   rf  rf  ’  s8   † ñð OSðØðØ$ðØ-Kðà	õ÷:6r   rf  z^\-?\-[A-Za-z][\w]*(\.[\w]+)*$Ú__DOT__Ú__DASH__c                  ó:   • \ rS rSrSr S         SS jjrSrg)Ú	_KVActioniÍ  z<Custom argparse action for handling --Class.trait=x

Always
Nc                ó"  • [        U[        5      (       a  U/nU Vs/ s H  oU[        L a  SOUPM     nn[        X R                  S 5      nUc  [        5       nO[        U5      nUR                  U5        [        X R                  U5        g s  snf )NÚ-)rd   r3   Ú_DASH_REPLACEMENTÚgetattrÚdestr  r\   r    )r+   Úparserrb  ÚvaluesÚoption_stringrª   r§   s          r   Ú__call__Ú_KVAction.__call__Ó  s~   € ô �fœc×"Ñ"Ø�XˆFÙ@FÓGÂ¸1Ô/Ò/‘#°QÒ6ÁˆÐGÜ˜	§9¡9¨dÓ3ˆØ‰=Ü&Ó(‰Eä& uÓ-ˆEØ�‰�VÔÜ�	Ÿ9™9 eÕ,ùò Hs   �Br   r8   )
r}  zargparse.ArgumentParserrb  rŒ   r~  zt.Sequence[t.Any]r  r1  r2   rA   )r   r   r   r   rB   r€  r   r   r   r   rw  rw  Í  sF   † ñð %)ð-à'ð-ð $ð-ð "ð	-ð
 "ð-ð 
÷-ð -r   rw  c                  óX   ^ • \ rS rSrSrSS jrS	U 4S jjrS
U 4S jjrSSS jjrSr	U =r
$ )Ú_DefaultOptionDictiæ  zWLike the default options dict

but acts as if all --Class.trait options are predefined
c                ó„   • [        U/UR                  S5      R                  S[        5      UR                  S5      S9X'   g )Nry  r´   )Úoption_stringsr|  Úmetavar)rw  ÚlstripÚreplaceÚ_DOT_REPLACEMENTr¼   s     r   Ú_add_kv_actionÚ!_DefaultOptionDict._add_kv_actionì  s7   € ÜØ˜5Ø—‘˜C“×(Ñ(¨Ô.>Ó?à—J‘J˜s“Oñ	
ˆŠ	r   c                óÂ   >• SU;   a  g[         TU ]  U5      (       a  gUR                  S5      (       a,  [        R	                  U5      (       a  U R                  U5        gg)NÚ=FTry  )r;   r·   r’   Úclass_trait_opt_patternÚmatchrŠ  ©r+   r”   r>   s     €r   r·   Ú_DefaultOptionDict.__contains__ô  sT   ø€ Ø�#‹:ØÜ‰7Ñ ×$Ñ$Øà�>‰>˜#×ÑÔ#:×#@Ñ#@À×#EÑ#EØ×Ñ Ô$ØØr   c                óB   >• X;   a  [         TU ]  U5      $ [        U5      er8   )r;   rÌ   rÍ   r�  s     €r   rÌ   Ú_DefaultOptionDict.__getitem__ÿ  s"   ø€ Ø‹;Ü‘7Ñ& sÓ+Ð+ä˜3“-Ðr   c                ó0   •  X   $ ! [          a    Us $ f = fr8   )rÍ   )r+   r”   Údefaults      r   ÚgetÚ_DefaultOptionDict.get  s#   € ð	Ø‘9ÐøÜó 	ØŠNð	ús   ‚ †”r   rè   rå   rç   r8   )r”   r3   r•  r@   r2   r@   )r   r   r   r   rB   rŠ  r·   rÌ   r–  r   rD   rE   s   @r   rƒ  rƒ  æ  s!   ø† ñô

÷	÷ ÷ô r   rƒ  c                  ó@   ^ • \ rS rSrSr S     SU 4S jjjrSrU =r$ )Ú_KVArgParseri  zOsubclass of ArgumentParser where any --Class.trait option is implicitly definedc                ó~   >• X R                   4 H  n[        UR                  5      Ul        M     [        TU ]  X5      $ r8   )Ú
_optionalsrƒ  Ú_option_string_actionsr;   Úparse_known_args)r+   rœ   rb  Ú	containerr>   s       €r   r�  Ú_KVArgParser.parse_known_args  s9   ø€ ð
 §¡Ó0ˆIÜ/AÀ)×BbÑBbÓ/cˆIÖ,ñ 1ä‰wÑ'¨Ó8Ð8r   r   )NN)rœ   zt.Sequence[str] | Nonerb  zargparse.Namespace | Noner2   z+tuple[argparse.Namespace | None, list[str]])r   r   r   r   rB   r�  r   rD   rE   s   @r   r™  r™    s/   ø† ÙYð [_ð9Ø*ð9Ø>Wð9à	4÷9ö 9r   r™  c                  óÊ   ^ • \ rS rSrSr\r      S                 SU 4S jjjrSS\S4         SS jjr	SS jr
SS jrSS jrSS	 jrSS
 jrSS jrSrU =r$ )ÚArgParseConfigLoaderi  zEA loader that uses the argparse module to load from the command line.Nc                ó„  >• U=(       d    / n[         [        U ]  US9  U R                  5         Uc  [        R
                  SS nXl        U=(       d    0 U l        U=(       d    0 U l        XPl        X`l	        Xpl
        UR                  SS5      U l        [        [        R                  S9n	U	R!                  U5        X�l        g)av  Create a config loader for use with argparse.

Parameters
----------
classes : optional, list
    The classes to scan for *container* config-traits and decide
    for their "multiplicity" when adding them as *argparse* arguments.
argv : optional, list
    If given, used to read command-line arguments from, otherwise
    sys.argv[1:] is used.
*parser_args : tuple
    A tuple of positional arguments that will be passed to the
    constructor of :class:`argparse.ArgumentParser`.
**parser_kw : dict
    A tuple of keyword arguments that will be passed to the
    constructor of :class:`argparse.ArgumentParser`.
aliases : dict of str to str
    Dict of aliases to full traitlets names for CLI parsing
flags : dict of str to str
    Dict of flags to full traitlets names for CLI parsing
log
    Passed to `ConfigLoader`

Returns
-------
config : Config
    The resulting Config object.
)r  Nrµ   r@  )Úargument_default)r;   rf  rš   r  r9   ÚargvÚaliasesÚflagsÚclassesÚsubcommandsÚparser_argsrA  r@  rq   rC   ÚSUPPRESSrf   Ú	parser_kw)r+   r¤  r¥  r¦  r  r§  r¨  r©  r«  Úkwargsr>   s             €r   rš   ÚArgParseConfigLoader.__init__"  sž   ø€ ðN —-˜RˆÜÔ% tÑ5¸#Ð5Ñ>Ø�
‰
ŒØ‰<Ü—8‘8˜A˜B�<ˆDØŒ	Ø—} "ˆŒØ—[˜bˆŒ
ØŒØ&Ôà&ÔØ —}‘} Y°Ó5ˆŒÜ¤x×'8Ñ'8Ñ9ˆØ�‰�iÔ Ø�r   c                óŠ  • U[         La'  [        R                  " S[        U 5       S3[        SS9  U R                  5         Uc  U R                  nUb  X l        Ub  X@l        U R                  5         U R                  U R                  U R                  5        U R                  U5        U R                  5         U R                  $ )ao  Parse command line arguments and return as a Config object.

Parameters
----------
argv : optional, list
    If given, a list with the structure of sys.argv[1:] to parse
    arguments from. If not given, the instance's self.argv attribute
    (given at construction time) is used.
flags
    Deprecated in traitlets 5.0, instantiate the config loader with the flags.

zjThe `flag` argument to load_config is deprecated since Traitlets 5.0 and will be ignored, pass flags the `z` constructor.r   ©Ú
stacklevel)Ú_deprecatedr   ÚwarnrÀ   ÚDeprecationWarningr  r¤  r¥  r§  Ú_create_parserÚ_argcompleter¨  Ú_parse_argsr8  r  )r+   r¤  r¥  r¦  r§  s        r   r"  Ú ArgParseConfigLoader.load_configZ  s­   € ð( œÒ#Ü�MŠMð<Ü<@À»J¸<À~ðWä"Øò	ð 	�
‰
ŒØ‰<Ø—9‘9ˆDØÑØ"ŒLØÑØ"ŒLØ×ÑÔØ×Ñ˜$Ÿ,™,¨×(8Ñ(8Ô9Ø×Ñ˜ÔØ×ÑÔ!Ø�{‰{Ðr   c                ó@   • [        U S5      (       a  U R                  $ / $ )NÚ
extra_args)r	  r¹  r*   s    r   Úget_extra_argsÚ#ArgParseConfigLoader.get_extra_argsƒ  s   € Ü�4˜×&Ñ&Ø—?‘?Ð"àˆIr   c                ó¼   • U R                   " U R                  0 U R                  D6U l        U R	                  U R
                  U R                  U R                  5        g r8   )Úparser_classr©  r«  r}  Ú_add_argumentsr¥  r¦  r§  r*   s    r   r´  Ú#ArgParseConfigLoader._create_parser‰  sI   € Ø×'Ò'Ø×Ñð
à�n‰nñ
ˆŒð 	×Ñ˜DŸL™L¨$¯*©*°d·l±lÕCr   c                ó   • [        S5      e)Nz(subclasses must implement _add_argumentsrí   )r+   r¥  r¦  r§  s       r   r¾  Ú#ArgParseConfigLoader._add_arguments�  s   € Ü!Ð"LÓMÐMr   c                ó   • g)úGIf argcomplete is enabled, allow triggering command-line autocompletionNr   )r+   r§  r¨  s      r   rµ  Ú!ArgParseConfigLoader._argcomplete“  s   � r   c                óH  ^• U Vs/ s H  n[        U5      PM     nn0 mU R                  (       a|  0 mU R                  R                  5        H\  u  pEX@R                  ;   a  M  [	        U[
        5      (       d  U4nU H(  n[        U5      S:X  a  SU-   TSU-   '   SU-   TSU-   '   M*     M^     SU4S jjnSU;   a  UR                  S5      nX8S-   S n	USU n
O/ n	Un
U
 Vs/ s H
  o'" U5      PM     n
nU R                  R                  U
5      U l
        X�l        gs  snf s  snf )zself.parser->self.parsed_datarµ   ú--ry  c                óÈ   >• U S:X  a  [         $ TR                  5        H@  u  pX:X  a  Us  $ U R                  US-   5      (       d  M)  US-   U [        U5      S-   S  -   s  $    U $ )Nry  r�  rµ   )rz  r§   r’   r
  )Úargr©   rª   Úunpacked_aliasess      €r   Ú_replaceÚ2ArgParseConfigLoader._parse_args.<locals>._replace§  sg   ø€ Ø�c‹zÜ(Ð(Ø(×.Ñ.Ö0‘�Ø“8Ø’HØ—>‘> ! c¡'×*Ó*Ø˜s™7 S¬¨Q«°!©¨Ð%6Ñ6Ò6ñ	 1ð
 ˆJr   N)rÈ  r3   r2   r3   )r   r¥  r§   r¦  rd   rÆ   r
  rm   r}  Ú
parse_argsÚparsed_datar¹  )r+   rœ   ÚaÚuargsÚaliasÚalias_targetÚalrÊ  r~   r¹  Úto_parserÉ  s              @r   r¶  Ú ArgParseConfigLoader._parse_args–  s%  ø€ á*.Ó/ª$ Q”˜a–©$ˆÐ/à+-ÐØ�<�<Ø!ÐØ'+§|¡|×'9Ñ'9Ö';Ñ#�ØŸJ™JÓ&ÙÜ! %¬×/Ñ/Ø"˜H�EÛ�BÜ˜2“w !“|Ø59¸LÑ5HÐ(¨¨r©Ñ2Ø26¸Ñ2EÐ$ T¨B¡YÓ/ó  ñ (<÷	ð �5‹=Ø—+‘+˜dÓ#ˆCØ Q™w˜yÐ)ˆJØ˜T˜c�{‰HàˆJØˆHÙ)1Ó2ª A�H˜Q–K©ˆÐ2àŸ;™;×1Ñ1°(Ó;ˆÔØ$�ùòG 0ùò@ 3s   †DÃ Dc                óÌ   • [        U R                  5      R                  5        H=  u  pUR                  S5      Gt p4U R                  nU H  nXV   nM	     [        XTU5        M?     g)zself.parsed_data->self.configr´   N)ÚvarsrÍ  r§   r¶   r  r    )r+   r©   rª   r*  r”   r¯   Úps          r   r8  Ú'ArgParseConfigLoader._convert_to_config½  sU   € ä˜×)Ñ)Ó*×0Ñ0Ö2‰DˆAØŸ™ ›‰JˆTØ—k‘kˆGÛ�Ø!™*’ñ ä�G !Ö$ò 3r   )r¥  r¤  r§  r¹  r¦  rÍ  r}  r©  r«  r¨  r@  )NNNNNN)r¤  úlist[str] | Noner¥  údict[str, str] | Noner¦  rÚ  r  r@   r§  zlist[type[t.Any]] | Noner¨  úSubcommandsDict | Noner©  r@   r«  r@   r2   rA   )
r¤  rÙ  r¥  r@   r¦  r@   r§  r@   r2   r—   )r2   ú	list[str]rä   ©r¥  r@   r¦  r@   r§  r@   r2   rA   ©r§  zlist[t.Any]r¨  rÛ  r2   rA   )rœ   r@   r2   r@   )r   r   r   r   rB   r5   r½  rš   r±  r"  rº  r´  r¾  rµ  r¶  r8  r   rD   rE   s   @r   r¡  r¡    sí   ø† ÙOà!€Lð "&Ø)-Ø'+ØØ,0Ø.2ð6 àð6 ð 'ð6 ð %ð	6 ð
 ð6 ð *ð6 ð ,ð6 ð ð6 ð ð6 ð 
÷6 ð 6 ðt "&ØØ"Øð'àð'ð ð'ð ð	'ð
 ð'ð 
õ'ôRôDôNôVô%%÷N%ò %r   r¡  c                  óR   ^ • \ rS rSrSrSU 4S jjr S         SS jjrSrU =r$ )	Ú_FlagActioniÇ  z ArgParse action to handle a flagc                ó¾   >• UR                  S5      U l        UR                  SS 5      U l        [        US'   U R                  (       d  SUS'   [        TU ]  " U0 UD6  g )NÚflagrÐ  Úconstr   Únargs)rA  râ  rÐ  r   r;   rš   ©r+   rœ   r¬  r>   s      €r   rš   Ú_FlagAction.__init__Ê  sP   ø€ Ø—J‘J˜vÓ&ˆŒ	Ø—Z‘Z ¨Ó.ˆŒ
Ü#ˆˆw‰Ø�z�zØˆF�7‰OÜ‰Ò˜$Ð) &Ó)r   c                óÞ   • U R                   S:X  d	  U[        L a>  [        US5      (       d  / Ul        UR                  R	                  U R
                  5        g [        X R                  U5        g )Nr   Ú_flags)rä  r   r	  rè  rW   râ  r    rÐ  )r+   r}  rb  r~  r  s        r   r€  Ú_FlagAction.__call__Ò  sQ   € ð �:‰:˜‹?˜f¬	Ò1Ü˜9 h×/Ñ/Ø#%�	Ô Ø×Ñ×#Ñ# D§I¡IÕ.ä�IŸz™z¨6Õ2r   )rÐ  râ  ©rœ   r@   r¬  r@   r2   rA   r8   )
r}  r@   rb  r@   r~  r@   r  r1  r2   rA   )	r   r   r   r   rB   rš   r€  r   rD   rE   s   @r   rà  rà  Ç  sD   ø† Ù*÷*ð [_ð3Øð3Ø(-ð3Ø7<ð3ØMWð3à	÷3ó 3r   rà  c                  óD   • \ rS rSrSr\rS	S jrS
S jrSS jr	SS jr
Srg)ÚKVArgParseConfigLoaderiÝ  zfA config loader that loads aliases and flags with argparse,

as well as arbitrary --Class.trait value
c           	     ó
  • 0 nU R                   R                  nU R                   R                  / S9  U" SSS9  0 =U l        nU H�  nUR	                  SS9R                  5        Hi  u  p‰UR                   SU 3n
S[        0n[        U	[        [        45      (       a+  U	R                  R                  S	S
5      nUS
:X  a  XËS'   OXËS'   X›4Xj'   Mk     M�     UR                  5        Hd  u  nu  pï[        U[        5      (       d  U4nU H>  nUU;   a	  XäUU   '   M  [        U5      S:X  a
  SU-   SU-   4OSU-   4nU" U[        XïS.6  M@     Mf     UR                  5        GH"  u  pØ[        U[        5      (       d  U4nU Hþ  n[        UR!                  S["        5      US.nS nX†;   ad  Xh   u  n	nUR%                  U5        SU;   a  X„;   a  ['        SU SU S35      eU	R                  R                  S5      =(       d    [)        U	SS 5      nX„;   a&  UR+                  SS5        [        US'   XH   US'   X‹S'   [        U5      S:X  a
  SU-   SU-   4OSU-   4nU" U0 UD6nUc  Mã  [,        R.                  " UUS9Ul        GM      GM%     g )N)rè  r¹  Ú*)rä  TrR  r´   rÀ   ÚmultiplicityrW   Úactionrä  rµ   ry  rÆ  )rð  râ  Úhelp)rÀ   r|  r†  zThe alias `z*` for the 'append' sequence config-trait `z` cannot be also a flag!'ÚargcompleterÚ?râ  rÐ  r“   )r}  Úadd_argumentÚset_defaultsÚargparse_traitsÚclass_traitsr§   r   r3   rd   r   r   Úmetadatar–  rÆ   r
  rà  rˆ  r‰  rf   r$   r{  r­   Ú	functoolsÚpartialÚ	completer)r+   r¥  r¦  r§  Úalias_flagsÚpaarö  ÚclsÚ	traitnamerï   ÚargnameÚargparse_kwdsrï  Úkeysr}   Úfhelpr”   rò  r�   rð  s                       r   r¾  Ú%KVArgParseConfigLoader._add_argumentså  s¼  € Ø(*ˆð �k‰k×&Ñ&ˆØ�‰× Ñ ¨Ð Ñ+ÙˆL Ò$ð 24Ð3ˆÔ˜ÛˆCØ$'×$4Ñ$4¸DÐ$4Ð$A×$GÑ$GÖ$IÑ �	Ø Ÿ\™\˜N¨!¨I¨;Ð7�Ø!'¬ �Ü˜e¤i´Ð%6×7Ñ7Ø#(§>¡>×#5Ñ#5°nÀhÓ#O�LØ# xÓ/Ø2> hÒ/à1= gÑ.Ø,1Ð+A�Ó(ó %Jñ ð %*§K¡K¦MÑ ˆD‘.�5Ü˜d¤E×*Ñ*Ø�w�Û�Ø˜'“>Ø05 ¨¡Ñ-ÙÜ25°c³(¸a³-˜˜c™	 4¨#¡:Ñ.ÀdÈSÁjÀ]�Ù�T¤+°EÕFó ñ %2ð  'Ÿ}™}Ÿ‰OˆDÜ˜d¤E×*Ñ*Ø�w�ã�äØ%×-Ñ-¨cÔ3CÓDØ(ñ!�ð
  $�ØÓ/Ø"1Ñ"<‘K�E˜4Ø!×(Ñ(¨Ô.Ø =Ó0°YÓ5Mô ,Ø)¨#¨ð /-Ø-6¨KÐ7PðRóð ð $)§>¡>×#5Ñ#5°nÓ#E÷ $ÌØ˜~¨tóJ�Lð Ó+ð "×,Ñ,¨W°cÔ:Ü.9�M (Ñ+Ø,7Ñ,B�M &Ñ)Ø-6 'Ñ*Ü25°c³(¸a³-˜˜c™	 4¨#¡:Ñ.ÀdÈSÁjÀ]�Ù˜dÐ4 mÑ4�ØÓ+ä'0×'8Ò'8Ø$¨#ñ(�F×$ôI ò	  /r   c           
     ó2  • U R                   n[        U R                  5      R                  5        Hå  u  p#US:X  a(  U Vs/ s H  oD[        :X  a  SOUPM     snU-   U l         M3  US:X  a  M;  UR                  [        S5      nSU;  a  U R                  U5        Sn[        U[        5      (       a  [        U5      nO [        U[        5      (       a  [        U5      nU R                  R                  U5      nU(       a  US   n U R                  X#U5        Mç     U R                  R(                   H  nU R+                  U5        M     gs  snf ! [          a?  n[        U["        5      (       a  UR%                  5       n['        SU SU S	U 35      UeSnAff = f)
zJself.parsed_data->self.config, parse unrecognized extra args via KVLoader.r¹  ry  rè  r´   Nr   zError loading argument r�  rÒ   )r¹  rÖ  rÍ  r§   rz  rˆ  r‰  Ú_handle_unrecognized_aliasrd   r{   r  r3   rö   rö  r–  rm  rú   rë   rò   r$   rè  rr  )r+   r¹  rj  rk  rÎ  rï   rÛ   Úsubcs           r   r8  Ú)KVArgParseConfigLoader._convert_to_config6  sv  € à—_‘_ˆ
ä˜T×-Ñ-Ó.×4Ñ4Ö6‰HˆCØ�lÓ"ÙQTÓ"UÒQTÈAÔ/@Ó*@¡3ÀaÒ#GÑQTÑ"UÐXbÑ"b�”ÙØ�h‹áà—+‘+Ô.°Ó4ˆCØ˜#‹~Ø×/Ñ/°Ô4Ø�ä˜#œt×$Ñ$Ü(¨Ó-‘Ü˜C¤×%Ñ%Ü*¨3Ó/�à×(Ñ(×,Ñ,¨SÓ1ˆEÞØ˜a™�ðWØ×%Ñ% c°Ö6ñ1 7ð@ ×$Ñ$×+Ô+ˆDØ�O‰O˜DÖ!ò ,ùò= #Vøô. ó Wô ˜c¤>×2Ñ2ØŸ/™/Ó+�CÜ#Ð&=¸c¸UÀ!ÀCÀ5ÈÈ1È#Ð$NÓOÐUVÐVûðWús   ¿EÄEÅ
FÅ:FÆFc                ó<   • U R                   R                  SU5        g)zÕHandling for unrecognized alias arguments

Probably a mistyped alias. By default just log a warning,
but users can override this to raise an error instead, e.g.
self.parser.error("Unrecognized alias: '%s'" % arg)
z1Unrecognized alias: '%s', it will have no effect.N)r  Úwarning)r+   rÈ  s     r   r  Ú1KVArgParseConfigLoader._handle_unrecognized_alias]  s   € ð 	�‰×ÑÐLÈcÕRr   c           	     óÔ   •  SSK nSSKJn  UR	                  5       nXl        [        U=(       d    / 5      Ul        U" U R                  40 [        U S0 5      D6  g! [         a     gf = f)rÃ  r   Nrµ   )Úargcomplete_configÚ_argcomplete_kwargs)
ÚargcompleteÚImportErrorr(  r  ÚExtendedCompletionFinderÚconfig_classesr{   r¨  r}  r{  )r+   r§  r¨  r  r  Úfinders         r   rµ  Ú#KVArgParseConfigLoader._argcompletef  sd   € ð	Ûõ 	)à#×<Ñ<Ó>ˆØ 'ÔÜ! +×"3°Ó4ˆÔáˆt�{‰{ÑGœg dÐ,AÀ2ÓFÓGøô ó 	Ùð	ús   ‚A Á
A'Á&A')rö  r¹  NrÝ  rä   )rÈ  r3   r2   rA   rÞ  )r   r   r   r   rB   r™  r½  r¾  r8  r  rµ  r   r   r   r   rì  rì  Ý  s'   † ñð
  €LôOôb%"ôNS÷Hr   rì  c                  ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )ÚKeyValueConfigLoaderiv  z8Deprecated in traitlets 5.0

Use KVArgParseConfigLoader
c                óZ   >• [         R                  " S[        SS9  [        TU ]  " U0 UD6  g )Nz[KeyValueConfigLoader is deprecated since Traitlets 5.0. Use KVArgParseConfigLoader instead.r   r¯  )r   r²  r³  r;   rš   rå  s      €r   rš   ÚKeyValueConfigLoader.__init__|  s.   ø€ Ü�Šð3äØò		
ô 	‰Ò˜$Ð) &Ó)r   r   rê  )r   r   r   r   rB   rš   r   rD   rE   s   @r   r  r  v  s   ø† ñ÷
*õ *r   r  c                ó¸   • [        5       nU  H.  n[        X1S9n UR                  5       nUR                  U5        M0     U$ ! [         a     MA  [
         a    e f = f)zûLoad multiple Python config files, merging each of them in turn.

Parameters
----------
config_files : list of str
    List of config files names to load and merge into the config.
path : unicode
    The full path to the location of the config files.
)r*  )r—   rU  r"  r£   r!   rú   )Úconfig_filesr*  r  ÚcfrY  Únext_configs         r   Úload_pyconfig_filesr  †  sf   € ô ‹X€FÛˆÜ# BÑ2ˆð	&Ø ×,Ñ,Ó.ˆKð �L‰L˜Ö%ñ ð €Møô "ó 	ÚÜó 	Øð	ús   šAÁ
AÁA)rL   r3   rM   zdict[str, Any]r2   rA   ræ   )r  rÜ  r*  r3   r2   r—   )>rB   Ú
__future__r   rC   ry   rù  r<  rh  Úrer9   Útypingr  Úloggingr   Útraitlets.traitletsr   r   r   r   r	   r
   r   Úutilsr   r   r   rú   r   r   r!   r$   r'   r±  r5   rO   rQ   r•   rq   r—   rë   r3   rö   r  r  r&  r3  rU  rf  rJ   rŽ  r‰  rz  ÚActionrw  rƒ  r™  ÚSubcommandsDictr¡  rà  rì  r  r  r   r   r   Ú<module>r&     sß  ðÙ $õ #ã Û Û Û Û 	Û 	Û 
Û Ý ç [× [Ñ [ç 4Ñ 4ô	�)ô 	ô	˜ô 	ô	˜ô 	ô	Ð%ô 	÷ñ ñ ‹k€ôD�X×,Ñ,ô Dô ;ô
CE�iô CEôLNô
X+ˆTô X+÷v6ñ 6ôB˜3 ô BôB'B˜Ÿ™ §¡™¨ô 'B÷^4ñ 4ôn@�|ô @ô84!Ð+ô 4!ôn/QÐ)ô /Qôd,6˜lô ,6ðj Ÿ*š*Ð%FÓGÐ àÐ ØÐ ô-�—‘ô -ô2#˜ô #ôL
9�8×*Ñ*ô 
9ð —&‘&˜˜aŸe™e˜Ñ$€ôg%Ð2ô g%ôT3�(—/‘/ô 3ô,VHÐ1ô VHôr*Ð1ô *õ r   