ó
    "Eñi'z  ã                   óT  • 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	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  S SKJr  S SK	Jr  S SKJr  \\\\ " S5      \!\"\#\$\%4	r&\" S	\\-  \-  \!-  \"-  \#-  \$-  \%-  S-  S
9r'\(" 5       r)\" SS9 " S S\\'   5      5       r*\(       a:  \)SSSSS4S\'\(-  S\!S-  S\!\"\!   -  S-  S\!\"\!   -  S-  S\ S-  S\!S-  S\'4S jjr+O<\)SSSSS4S\'\(-  S\!S-  S\!\"\!   -  S-  S\!\"\!   -  S-  S\ S-  S\!S-  S\*\'   4S jjr+S\!S\\!-  S-  4S jr,S\SS4S jr-Sr.S\S\#\!   4S jr/\ " S S5      5       r0 " S  S!\5      r1 " S" S#\ Rd                  5      r2 " S$ S%5      r3S&\(S\!S'\(S\(4S( jr4S+S\!S\S\S-  4S) jjr5S* r6g),é    N)ÚCallable)Ú	dataclass)ÚFunctionTypeÚ
ModuleType)ÚAnyÚGenericÚNoReturnÚOptionalÚTYPE_CHECKINGÚTypeVar)Ú
deprecated)Úmock)Újustknobs_checkÚT)ÚboundT)Úkw_onlyc                   óÞ   • \ rS rSr% Sr\\-  \S'   Sr\	S-  \S'   Sr
\\	   S-  \S'   Sr\\	   S-  \S'   Sr\S-  \S'   Sr\	S-  \S	'   SS jr\S\	\\	   -  S-  S
\\	   S-  4S j5       rSrg)Ú_Configé    a‰  Represents a config with richer behaviour than just a default value.
::
    i.e.
    foo = Config(justknob="//foo:bar", default=False)
    install_config_module(...)

This configs must be installed with install_config_module to be used

Precedence Order:
    alias: If set, the directly use the value of the alias.
    env_name_force: If set, this environment variable has precedence over
        everything after this.
        If multiple env variables are given, the precedence order is from
        left to right.
    user_override: If a user sets a value (i.e. foo.bar=True), that
        has precedence over everything after this.
    env_name_default: If set, this environment variable will override everything
        after this.
        If multiple env variables are given, the precedence order is from
        left to right.
    justknob: If this pytorch installation supports justknobs, that will
        override defaults, but will not override the user_override precedence.
    default: This value is the lowest precedence, and will be used if nothing is
        set.

Environment Variables:
    These are interpreted to be either "0" or "1" to represent true and false.

Arguments:
    justknob: the name of the feature / JK. In OSS this is unused.
    default: is the value to default this knob to in OSS.
    alias: The alias config to read instead.
    env_name_force: The environment variable, or list of, to read that is a FORCE
        environment variable. I.e. it overrides everything except for alias.
    env_name_default: The environment variable, or list of, to read that changes the
        default behaviour. I.e. user overrides take preference.
ÚdefaultNÚjustknobÚenv_name_defaultÚenv_name_forceÚ
value_typeÚaliasÚreturnc                 ó:  • [         R                  U R                  5      U l        [         R                  U R                  5      U l        U R                  bF  U R
                  [        Ld'  U R                  c  U R                  c  U R                  b  [        S5      eg g )Nztif alias is set, none of {default, justknob,                         env_name_default and env_name_force} can be set)	r   Ú string_or_list_of_string_to_listr   r   r   r   Ú_UNSET_SENTINELr   ÚAssertionError©Úselfs    ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/utils/_config_module.pyÚ__post_init__Ú_Config.__post_init__O   s“   € Ü '× HÑ HØ×!Ñ!ó!
ˆÔô &×FÑFØ×Ñó
ˆÔð �:‰:Ñ!à—‘¤OÒ3Ø—=‘=Ñ,Ø×(Ñ(Ñ4Ø×&Ñ&Ñ2ä$ðIóð ð 3ð "ó    Úvalc                 ó–   • U c  g [        U [        5      (       a  U /$ [        U [        5      (       d  [        S[	        U 5       35      eU $ )Nzval is not a list, got )Ú
isinstanceÚstrÚlistr    Útype)r'   s    r#   r   Ú(_Config.string_or_list_of_string_to_listc   sI   € ð ‰;ØÜ�cœ3×ÑØ�5ˆLÜ˜#œt×$Ñ$Ü Ð#:¼4À»9¸+Ð!FÓGÐGØˆ
r&   )r   r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚobjectÚ__annotations__r   r*   r   r+   r   r   r,   r   r$   Ústaticmethodr   Ú__static_attributes__© r&   r#   r   r       s¤   ‡ ñ$ðL �‰ZÓØ€Hˆc�D‰jÓØ)-Ð�d˜3‘i $Ñ&Ó-Ø'+€N�D˜‘I Ñ$Ó+Ø"€J��t‘Ó"Ø€Eˆ3�‰:Óôð( ð	Ø�4˜‘9‰_˜tÑ#ð	à	ˆc‰�TÑ	ó	ó ó	r&   r   r   r   r   r   r   r   r   c                 ó   • g ©Nr8   ©r   r   r   r   r   r   s         r#   ÚConfigr<   v   s   € ð r&   c           	      ó   • [        U UUUUUS9$ )Nr;   )r   r;   s         r#   r<   r<   �   s#   € ô ØØØ-Ø)Ø!Øñ
ð 	
r&   Únamec                 ó`   • [         R                  R                  U 5      nUS:X  a  gUS:X  a  gU$ ©NÚ1TÚ0F©ÚosÚenvironÚget)r>   Úvalues     r#   Ú_read_env_variablerH   “   s-   € Ü�J‰J�N‰N˜4Ó €EØ�ƒ|ØØ�ƒ|ØØ€Lr&   Úmodulec                 óô   ^ ^^•  " S S[         5      nS[        [        -  S[        [        -  S[        SS4UU U4S jjm0 m[        T 5      nT" T T S	5        TT l        UT l        UT l        S
T l	        ST l
        g)z“
Converts a module-level config into a `ConfigModule()`.

See _config_typing.pyi for instructions on how to get the converted module to typecheck.
c                   ó(   • \ rS rSr\" 1 Sk5      rSrg)Ú3install_config_module.<locals>.ConfigModuleInstanceé£   >   Ú	_is_dirtyÚ_hash_digestr5   r8   N)r/   r0   r1   r2   ÚsetÚ_bypass_keysr7   r8   r&   r#   ÚConfigModuleInstancerL   £   s   † áÒKÓL‹r&   rR   ÚsourceÚdestÚprefixr   Nc                 ób  >• [         R                  " U 5      n[        U R                  R	                  5       5       GHð  u  pEUR                  S5      (       d†  [        U[        [        45      (       dk  [        US5      (       a0  UR                  S:X  dJ  UR                  R                  S5      (       d*  [        U[        5      (       a  [        U[        5      (       a  M¤  U U 3nUR                  US5      n[        U[        5      (       a*  [!        [        XWS95      T	U'   UT
L a  [#        T
U5        Mù  Mû  [        U[        5      (       a;  Ub  UR$                  c  Xul        [!        U5      T	U'   UT
L a  [#        T
U5        GMH  GMK  [        U[        5      (       au  UR                  T
R&                  :w  a  [)        SU ST
R&                   35      e[+        T
U S	35      nT" XXU S	35        UT
L a  [-        XU5        GMÄ  X�R                  U'   GMÕ  [)        S
U SU S[        U5       S35      e   g)z?Walk the module structure and move everything to module._configÚ__r0   Útypingzcollections.abcN)r   r   zsubconfig class z must be defined in module Ú.zUnhandled config Ú=z (Ú))ÚinspectÚget_annotationsr+   Ú__dict__ÚitemsÚ
startswithr)   r   r   Úhasattrr0   r,   Ú
issubclassr   rF   ÚCONFIG_TYPESÚ_ConfigEntryÚdelattrr   r/   r    ÚSubConfigProxyÚsetattr)rS   rT   rU   Ú
type_hintsÚkeyrG   r>   Úannotated_typeÚproxyÚconfigrI   Úvisits            €€€r#   rm   Ú$install_config_module.<locals>.visit§   sð  ø€ ô ×,Ò,¨VÓ4ˆ
Ü˜vŸ™×4Ñ4Ó6×7‰JˆCà—‘˜t×$Ñ$Ü˜e¤j´,Ð%?×@Ñ@ä˜E <×0Ñ0à×(Ñ(¨HÓ4Ø ×+Ñ+×6Ñ6Ð7H×IÑIô ˜u¤d×+Ñ+´
¸5Ä'×0JÑ0Jáà�X˜c˜UÐ#ˆDØ'Ÿ^™^¨C°Ó6ˆNÜ˜%¤×.Ñ.Ü+Ü EÑEó ��t‘ð ˜6’>Ü˜F CÖ(ñ "ä˜E¤7×+Ñ+Ø!Ñ-°%×2BÑ2BÑ2JØ'5Ô$ä+¨EÓ2��t‘à˜6’>Ü˜F C×(ò "ä˜E¤4×(Ñ(Ø×#Ñ# v§¡Ó6Ü(Ø*¨5¨'Ð1LÈVÏ_É_ÐL]Ð^óð ô ' v°$°°q¨zÓ:�Ù�e t f¨A JÔ/Ø˜6’>Ü˜D u×-à).—M‘M #Ô&ä$Ð'8¸¸¸Q¸u¸gÀRÌÈUËÀ}ÐTUÐ%VÓWÐWò[ 8r&   Ú T)ÚConfigModuler   r,   rf   r*   Ú-get_assignments_with_compile_ignored_commentsÚ_configÚ_compile_ignored_keysÚ	__class__rN   rO   )rI   rR   Úcompile_ignored_keysrl   rm   s   `  @@r#   Úinstall_config_modulerv   œ   s•   ú€ ôMœ|ô Mð4XÜœTÑ!ð4Xäœ>Ñ)ð4Xô ð4Xð 
÷	4Xñ 4Xðl ')€FäHÈÓPÐá	ˆ&�&˜"ÔØ€F„NØ#7€FÔ Ø+€FÔØ€FÔØ€FÕr&   z@compile_ignoredc                 ó>  • [         R                  " U 5      n[        5       n[        R                  " [        R
                  " UR                  S5      5      R                  5      nSnSnU GH  nUR                  [        R                  :X  aR  SnUR                  R                  5       n[        U;   a*  US:w  a  [        S[         35      eXvR                  S   4nMr  Mt  UR                  [        R                  :X  a  U(       d  UR                  nM§  M©  UR                  [        R                   :X  d  MÉ  UR                  S:X  d  MÛ  [        US   ;   a,  US   UR                  S   S-
  :X  a  UR#                  U5        SnSnGM     US:w  a  [        S[         35      eU$ )Núutf-8)ro   éÿÿÿÿro   zunconsumed r   rZ   é   )r\   Ú	getsourcerP   ÚtokenizeÚioÚBytesIOÚencodeÚreadliner,   ÚCOMMENTÚstringÚstripÚCOMPILE_IGNORED_MARKERr    ÚstartÚNAMEÚOPÚadd)rI   Úsource_codeÚassignmentsÚtokensÚcurrent_commentÚ	prev_nameÚtokenÚmaybe_currents           r#   rq   rq   í   s^  € Ü×#Ò# FÓ+€KÜ“%€Kô ×ÒœrŸzšz¨+×*<Ñ*<¸WÓ*EÓF×OÑOÓP€FØ€OØ€IäˆØ�:‰:œ×)Ñ)Ó)ØˆIØ!ŸL™L×.Ñ.Ó0ˆMÜ%¨Ó6Ø" hÓ.Ü(¨;Ô7MÐ6NÐ)OÓPÐPØ"/·±¸Q±Ð"?’ñ 7ð �Z‰Zœ8Ÿ=™=Ó(ö Ø!ŸL™L’	ñ à�Z‰Zœ8Ÿ;™;Õ&¨5¯<©<¸3Õ+>ô '¨/¸!Ñ*<Ó<Ø# AÑ&¨%¯+©+°a©.¸1Ñ*<Ó<à—‘ 	Ô*Ø"(�Ø‹Iñ- ð. ˜(Ó"Ü˜{Ô+AÐ*BÐCÓDÐDØÐr&   c                   óœ   • \ rS rSr% \\S'   \\S'   \r\\S'   Sr	\
S-  \S'   \r\\S'   \r\\S'   S	r\\S
'   Sr\
S-  \S'   S\SS4S jrSrg)rd   i  r   r   Úuser_overrideNr   Úenv_value_forceÚenv_value_defaultFÚhider   rl   r   c                 ó4  • UR                   U l         UR                  b  UR                  O[        U R                   5      U l        UR                  U l        UR                  U l        UR
                  b)  UR
                   H  n[        U5      =nc  M  X0l          O   UR                  b)  UR                   H  n[        U5      =nc  M  X0l	          O   U R                  bE  U R                   b8  [        U R                   [        5      (       d  [        SU R                    S35      eU R                  bg  UR
                  c  UR                  bL  U R                  [        [        [        [           [        [           4;  a  [        SU R                   S35      eg g g )Nz!justknobs only support booleans, z is not a booleanz<envvar configs only support (optional) booleans or strings, z is neither)r   r   r,   r   r   r   rH   r“   r   r’   r)   Úboolr    r*   r
   )r"   rl   r'   Ú	env_values       r#   Ú__init__Ú_ConfigEntry.__init__.  sw  € Ø—~‘~ˆŒà!'×!2Ñ!2Ñ!>ˆF×ÒÄDÈÏÉÓDVð 	Œð Ÿ™ˆŒØ—\‘\ˆŒ
Ø×"Ñ"Ñ.Ø×.Ô.�Ü!3°CÓ!8Ð8�IÓEØ-6Ô*Ùñ /ð × Ñ Ñ,Ø×,Ô,�Ü!3°CÓ!8Ð8�IÓEØ+4Ô(Ùñ -ð �=‰=Ñ$¨¯©Ñ)AÜ˜dŸl™l¬D×1Ñ1Ü$Ø7¸¿¹°~ÐEVÐWóð ð �?‰?Ñ&Ø×#Ñ#Ñ/°6×3HÑ3HÑ3Tà�‰ÜÜÜœ‘Üœ‘ð	'ó ô %ØRÐSW×SbÑSbÐRcÐcnÐoóð ðð 4Uð 'r&   )r   r   r“   r’   r   r   )r/   r0   r1   r2   r   r5   r,   r   r‘   r   r*   r’   r“   r”   r–   r   r   r˜   r7   r8   r&   r#   rd   rd     sk   ‡ ð ƒLàÓð )€M�3Ó(à€Hˆc�D‰jÓà*€O�SÓ*Ø,Ð�sÓ,ð €Dˆ$ÓØ€Eˆ3�‰:Óð#˜wð #¨4÷ #r&   rd   c                   óÀ  ^ • \ rS rSr% \\\4   \S'   \\   \S'   \\   \S'   \	\S'   \
S-  \S'   S3S	 jrS
\S\SS4U 4S jjrS
\S\4S jrS
\SS4S jrS\S\\\4   S-  4S jrS\S\4S jrS\S\SS4S jrS
\S\	4S jr   S4S\\   S-  S\\   S-  S\	S\\\4   4S jjrS\S\4S jrS\
4S jrSS.S\	S\\\4   4S jjrS\4S  jrS\
4S! jr\" S"\ S#9S\\\4   4S$ j5       r!\" S%\ S#9S\\\4   4S& j5       r"S'\
\\\4   -  SS4S( jr#S\\\4   4S) jr$S\\\4   4S* jr%  S5S+\\\\4   -  S-  S,\S-\\\4   SS.4S/ jjr&S0\\\4   S\4S1 jr'S2r(U =r)$ )6rp   iT  rr   rQ   rs   rN   NrO   r   c                 ó(   • [        S[         S35      e)Nzuse z-.install_config_module(sys.modules[__name__]))ÚNotImplementedErrorr/   r!   s    r#   r˜   ÚConfigModule.__init__`  s   € Ü!Ø”8�*ÐIÐJó
ð 	
r&   r>   rG   c                 óh  >• XR                   ;   a  [        TU ]	  X5        g XR                  ;  a  [	        U R
                   SU S35      eU R                  U   R                  b   U R                  U R                  U   U5        g X R                  U   l        SU l	        SU R                  U   l
        g )NrY   ú does not existTF)rQ   ÚsuperÚ__setattr__rr   ÚAttributeErrorr/   r   Ú_set_alias_valr‘   rN   r”   )r"   r>   rG   rt   s      €r#   r¡   ÚConfigModule.__setattr__e  s—   ø€ Ø×$Ñ$Ó$Ü‰GÑ Õ,ØŸ™Ó%Ü  D§M¡M ?°!°D°6¸Ð!IÓJÐJØ�\‰\˜$Ñ×%Ñ%Ñ1Ø×Ñ §¡¨TÑ 2°EÕ:à/4�L‰L˜ÑÔ,Ø!ˆDŒNØ&+ˆD�L‰L˜ÑÕ#r&   c                 óì  •  U R                   U   nUR                  (       a  [        U R                   SU S35      eU R	                  U5      nU[
        La  U$ UR                  [
        La  UR                  $ UR                  [
        La  UR                  $ UR                  [
        La  UR                  $ UR                  b  [        UR                  UR                  S9$ [        UR                  [        [        [        45      (       a1  [         R"                  " UR                  5      Ul        UR                  $ UR                  $ ! [$         a!  n[        U R                   SU S35      UeS nAff = f)NrY   rŸ   )r>   r   )rr   r”   r¢   r/   Ú_get_alias_valr   r’   r‘   r“   r   r   r   r)   r+   rP   ÚdictÚcopyÚdeepcopyÚKeyError)r"   r>   rl   Ú	alias_valÚes        r#   Ú__getattr__ÚConfigModule.__getattr__q  s:  € ð!	RØ—\‘\ $Ñ'ˆFà�{�{Ü$¨¯© °a¸°v¸_Ð%MÓNÐNà×+Ñ+¨FÓ3ˆIØ¤Ò/Ø Ð à×%Ñ%¬_Ò<Ø×-Ñ-Ð-à×#Ñ#¬?Ò:Ø×+Ñ+Ð+à×'Ñ'¬Ò>Ø×/Ñ/Ð/à�‰Ñ*ä&¨F¯O©OÀVÇ^Á^ÑTÐTô
 ˜&Ÿ.™.¬4´´dÐ*;×<Ñ<Ü'+§}¢}°V·^±^Ó'D�Ô$Ø×+Ñ+Ð+Ø—>‘>Ð!øäó 	Rä  D§M¡M ?°!°D°6¸Ð!IÓJÐPQÐQûð	Rús=   ‚AE ÁE Á8E ÂE Â6*E Ã!AE Ä<E Å
E3ÅE.Å.E3c                 ój   • SU l         [        U R                  U   l        SU R                  U   l        g ©NT)rN   r   rr   r‘   r”   ©r"   r>   s     r#   Ú__delattr__ÚConfigModule.__delattr__•  s-   € ØˆŒô ,;ˆ�‰�TÑÔ(Ø"&ˆ�‰�TÑÕr&   Úentryc                 óÂ   • UR                   nUc  g UR                  SS5      u  p4 [        R                  " U5      nXT4$ ! [         a  n[        SU S35      UeS nAff = f)NrY   rz   zconfig alias rŸ   )r   ÚrsplitÚ	importlibÚimport_moduleÚImportErrorr¢   )r"   r´   r   Úmodule_nameÚconstant_namerI   r¬   s          r#   Ú_get_alias_module_and_nameÚ'ConfigModule._get_alias_module_and_nameœ  ss   € ð —‘ˆØ‰=ØØ%*§\¡\°#°qÓ%9Ñ"ˆð	PÜ×,Ò,¨[Ó9ˆFð Ð$Ð$øô ó 	PÜ  =°°°Ð!GÓHÈaÐOûð	Pús   ¦? ¿
AÁ	AÁAc                 óX   • U R                  U5      nUc  [        $ Uu  p4[        X45      nU$ r:   )r¼   r   Úgetattr)r"   r´   ÚdatarI   r»   Úconstant_values         r#   r¦   ÚConfigModule._get_alias_val©  s5   € Ø×.Ñ.¨uÓ5ˆØ‰<Ü"Ð"Ø $ÑˆÜ  Ó7ˆØÐr&   r'   c                 ób   • U R                  U5      nUc  [        S5      eUu  pE[        XEU5        g )Nz6alias data should not be None when setting alias value)r¼   r    rg   )r"   r´   r'   rÀ   rI   r»   s         r#   r£   ÚConfigModule._set_alias_val±  s;   € Ø×.Ñ.¨uÓ5ˆØ‰<Ü ØHóð ð !%ÑˆÜ� sÕ+r&   c                 óÌ  • U R                   U   nUR                  [        L =(       d    UR                  UR                  :H  nUR                  [        L =(       d    UR                  UR                  :H  nUR
                  [        L n[        UR                  [        [        [        45      (       a"  U=(       d    UR
                  UR                  :H  nU=(       a    U=(       a    U$ )zo
Returns true if the config is at its default value.
configs overridden by the env are not considered default.
)
rr   r“   r   r   r’   r‘   r)   r+   rP   r§   )r"   r>   Ú
config_valÚnot_set_env_defaultÚnot_set_env_forceÚunsets         r#   Ú_is_defaultÚConfigModule._is_defaultº  sÉ   € ð
 —\‘\ $Ñ'ˆ
ð
 ×(Ñ(¬OÐ;÷ BØ×+Ñ+¨z×/AÑ/AÑAð 	ð
 ×&Ñ&¬/Ð9÷ @Ø×)Ñ)¨Z×-?Ñ-?Ñ?ð 	ð
 ×(Ñ(¬OÐ;ˆä�j×(Ñ(¬4´´dÐ*;×<Ñ<Ø×K˜Z×5Ñ5¸×9KÑ9KÑKˆEØ×BÐ,×BÐ1BÐBr&   Úignored_keysÚignored_prefixesÚskip_defaultc                 óR  ^• 0 nU R                    H“  mU(       a  TU;   a  M  U(       a  [        U4S jU 5       5      (       a  M5  U(       a  U R                  T5      (       a  MT  U R                   T   R                  b  Mp  [        R
                  " [        U T5      5      UT'   M•     U$ )ag  Export a dictionary of current configuration keys and values.

This function is design to provide a single point which handles
accessing config options and exporting them into a dictionary.
This is used by a number of different user facing export methods
which all have slightly different semantics re: how and what to
skip.
If a config is aliased, it skips this config.

Arguments:
    ignored_keys are keys that should not be exported.
    ignored_prefixes are prefixes that if a key matches should
        not be exported
    skip_default does two things. One if a key has not been modified
        it skips it.
c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr:   )r`   )Ú.0rU   ri   s     €r#   Ú	<genexpr>Ú)ConfigModule._get_dict.<locals>.<genexpr>í  s   øé € ÐMÒ<L°&�s—~‘~ f×-Ð-Ò<Lùs   ƒ!)rr   ÚanyrÊ   r   r¨   r©   r¿   )r"   rÌ   rÍ   rÎ   rl   ri   s        @r#   Ú	_get_dictÚConfigModule._get_dictÒ  s‹   ø€ ð, "$ˆØ—<”<ˆCÞ  |Ó 3ÙÞÜÔMÑ<LÓM×MÑMÙÞ × 0Ñ 0°× 5Ñ 5ÙØ�|‰|˜CÑ ×&Ñ&Ñ2ÙÜŸ-š-¬°°cÓ(:Ó;ˆF�3‹Kñ  ð ˆr&   Úconfig_namec                 ó4   • U R                   U   R                  $ r:   )rr   r   )r"   r×   s     r#   Úget_typeÚConfigModule.get_type÷  s   € Ø�|‰|˜KÑ(×3Ñ3Ð3r&   c                 ó`   • [        U S/ 5      n[        R                  " U R                  US9SS9$ )z Convert config to a pickled blobÚ_save_config_ignore©rÌ   é   )Úprotocol)r¿   ÚpickleÚdumpsrÕ   )r"   rÌ   s     r#   Úsave_configÚConfigModule.save_configú  s3   € ä˜tÐ%:¸BÓ?ˆÜ�|Š|Ø�N‰N¨ˆNÐ5Øñ
ð 	
r&   T)Úignore_private_configsrä   c                óŒ   • / nU(       a  UR                  S5        UR                  [        U S/ 5      5        U R                  US9$ )z!Convert config to portable formatÚ_Ú_cache_config_ignore_prefix)rÍ   )ÚappendÚextendr¿   rÕ   )r"   rä   Úprefixess      r#   Úsave_config_portableÚ!ConfigModule.save_config_portable  s?   € ð ˆÞ!Ø�O‰O˜CÔ Ø�‰œ Ð&CÀRÓHÔIØ�~‰~¨xˆ~Ð8Ð8r&   c                 ó  ^^^	^
^• [        5       m
S[        S[        S[        4S jmS[        SS4UU
4S jjmS[        [         -  S[        [           4U4S jjmS[
        S[        4S	 jm	S[        4UUU	U4S
 jjn/ nU R                  nU R                  [        U S/ 5      SS9R                  5        H  u  pEUR                  U" X4U5      5        M     T
 H  nUR                  SSU 35        M     SR                  U5      $ )z…Convert config to Python statements that replicate current config.
This does NOT include config settings that are at default values.
ÚfuncÚadd_dotr   c                 óR   • U R                   nUS:X  a  SnU(       a  US:w  a  US-  nU$ )NÚbuiltinsro   rY   )r0   )rî   rï   rº   s      r#   Úget_module_nameÚ4ConfigModule.codegen_config.<locals>.get_module_name  s2   € ØŸ/™/ˆKØ˜jÓ(Ø �Þ˜;¨"Ó,Ø˜sÑ"�ØÐr&   Nc                 óJ   >• T" U S5      nU(       a  TR                  U5        g g )NF)rˆ   )rî   rº   rò   Úimportss     €€r#   Ú
add_importÚ/ConfigModule.codegen_config.<locals>.add_import  s#   ø€ Ù)¨$°Ó6ˆKÞØ—‘˜KÕ(ð r&   Úvc                 ó^   >• U  Vs/ s H  nT" US5       UR                    3PM     sn$ s  snf r°   )r/   )rø   Úitemrò   s     €r#   Úlist_of_callables_to_stringÚ@ConfigModule.codegen_config.<locals>.list_of_callables_to_string!  s2   ø€ ÙPQÓRÒPQÈ‘ t¨TÓ2Ð3°D·M±M°?ÓCÑPQÑRÐRùÒRs   †!*c                 ód   • [        U 5      =(       a    [        U S5      =(       a    [        U S5      $ )Nr0   r/   )Úcallablera   )rø   s    r#   Úimportable_callableÚ8ConfigModule.codegen_config.<locals>.importable_callable$  s$   € ä˜A“;×V¤7¨1¨lÓ#;×VÄÈÈ:Ó@VÐVr&   c                 óŒ  >• T" U5      (       a%  T" U5        U  SU ST" US5       UR                    3$ [        U[        [        45      (       al  [	        U4S jU 5       5      (       aR  U H  nT" U5        M     T" U5      n[        U[        5      (       a
  U  SU SU 3$ U  SU SSR                  U5       S3$ U  SU SU< 3$ )a�  
Return a string version of the config line.
Handle v when v is a callable, or a list/dict of callables. Add import statements for callables if necessary.
We assume that the value of a single config won't be a mix of callables and non-callables.

Example output:
    import logging
    import _warnings
    torch._dynamo.config.reorderable_logging_functions = { _warnings.warn, logging.warn, print }
rY   z = Tc              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr:   r8   )rÑ   rú   rÿ   s     €r#   rÒ   ÚGConfigModule.codegen_config.<locals>.get_config_line.<locals>.<genexpr>6  s   øé € ð 4Ú67¨dÑ# D×)Ð)²aùs   ƒz = { z, z })r/   r)   r+   rP   ÚallÚjoin)	ÚmodÚkrø   rú   Úv_liströ   rò   rÿ   rû   s	        €€€€r#   Úget_config_lineÚ4ConfigModule.codegen_config.<locals>.get_config_line(  sä   ø€ ñ # 1×%Ñ%Ù˜1”Ø˜˜a ˜s #¡o°a¸Ó&>Ð%?ÀÇ
Á
¸|ÐLÐLÜ˜A¤¤c˜{×+Ñ+´ô 4Ù67ó4÷ 1ñ 1ó �DÙ˜tÖ$ñ á4°QÓ7�Ü˜a¤×&Ñ&Ø!˜U ! A 3 c¨&¨Ð2Ð2à!˜U ! A 3 f¨T¯Y©Y°vÓ->Ð,?¸sÐCÐCà˜˜a ˜s # a¡UÐ+Ð+r&   rÜ   T)rÌ   rÎ   r   zimport Ú
)rP   r   r–   r*   r+   r   r/   rÕ   r¿   r_   rè   Úinsertr  )r"   r	  Úlinesr  r  rø   Úimport_namerö   rò   rÿ   rõ   rû   s          @@@@@r#   Úcodegen_configÚConfigModule.codegen_config  s  ü€ ô “%ˆð	¤(ð 	´Tð 	¼cô 	ð	)œXð 	)¨$÷ 	)ð 	)ð
	S¬4´#©:ð 	S¼$¼s¹)÷ 	Sð	W¤3ð 	W¬4ô 	Wð	,¬#÷ 	,ò 	,ð6 ˆØ�m‰mˆØ—N‘NÜ  Ð'<¸bÓAÐPTð #ð 
ç
‰%‹'ò‰DˆAð �L‰L™¨°Ó3Ö4ñó #ˆKØ�L‰L˜˜g k ]Ð3Ö4ñ #à�y‰y˜ÓÐr&   c                 óZ  • U R                   (       d  U R                  c‚  U R                  [        U R                  5      S9n[        [        UR                  5       5      5      n[        R                  " UR                  S5      SS9R                  5       U l        SU l         U R                  $ )z/Hashes the configs that are not compile_ignoredrÝ   rx   F)Úusedforsecurity)rN   rO   rÕ   r+   rs   ÚreprÚsortedr_   ÚhashlibÚmd5r   Údigest)r"   Údict_to_hashÚstring_to_hashs      r#   Úget_hashÚConfigModule.get_hashM  s‡   € à�>�>˜T×.Ñ.Ñ6ØŸ>™>´t¸D×<VÑ<VÓ7W˜>ÐXˆLÜ!¤&¨×);Ñ);Ó)=Ó">Ó?ˆNÜ '§¢Ø×%Ñ% gÓ.Àñ!ç‰f‹hð Ôð #ˆDŒNØ× Ñ Ð r&   zÒ`config.to_dict()` has been deprecated. It no longer changes the underlying config. use `config.get_config_copy()` instead if you just want a copy of the config, or config.load_config if you need mutable access)Úcategoryc                 ó"   • U R                  5       $ r:   ©Úget_config_copyr!   s    r#   Úto_dictÚConfigModule.to_dictX  ó   € ð ×#Ñ#Ó%Ð%r&   zÜ`config.shallow_copy_dict()` has been deprecated. It no longer changes the underlying config. use `config.get_config_copy()` instead if you just want a copy of the config, or config.load_config if you need mutable accessc                 ó"   • U R                  5       $ r:   r  r!   s    r#   Úshallow_copy_dictÚConfigModule.shallow_copy_dicta  r"  r&   Úmaybe_pickled_configc                 óö   • [        U[        5      (       d  [        R                  " U5      nOUnUR	                  5        H7  u  p4X0R
                  ;   a  [        XU5        M"  SSKJn  U" SU SU S35        M9     g)zARestore from a prior call to save_config() or shallow_copy_dict()r   )Ú	warn_oncezkey z with value z! is not understood by this configN)	r)   r§   rà   Úloadsr_   rr   rg   Útorch._dynamo.utilsr(  )r"   r&  rl   r  rø   r(  s         r#   Úload_configÚConfigModule.load_configj  se   € äÐ.´×5Ñ5Ü—\’\Ð"6Ó7‰Fà)ˆFØ—L‘L–N‰DˆAØ—L‘LÓ Ü˜ Ö#å9á˜D   <°¨sÐ2SÐTÖUò #r&   c                 ó"   • U R                  5       $ r:   )rÕ   r!   s    r#   r  ÚConfigModule.get_config_copyx  s   € Ø�~‰~ÓÐr&   c                 ó6   • U R                  [        U S/ 5      S9$ )NrÜ   rÝ   )rÕ   r¿   r!   s    r#   Úget_serializable_config_copyÚ)ConfigModule.get_serializable_config_copy{  s   € Ø�~‰~¬7°4Ð9NÐPRÓ+Sˆ~ÐTÐTr&   Úarg1Úarg2ÚkwargsÚContextDecoratorc                 ó|  ^^^• Ub\  Ub$  [        U[        5      (       d  [        S5      eX0mO"[        U[        5      (       d  [        S5      eUmU(       a  [        S5      eOUmUb  [        S5      e[        T[        5      (       d  [        S[	        T5       35      e0 mU m " UUU4S jS[
        5      nU" 5       $ )a<  
Decorator and/or context manager to make temporary changes to a config.

As a decorator:

    @config.patch("name", val)
    @config.patch(name1=val1, name2=val2)
    @config.patch({"name1": val1, "name2", val2})
    def foo(...):
        ...

As a context manager:

    with config.patch("name", val):
        ...
zGfirst argument must be a string when passing 2 positional args to patchzKfirst argument must be a dict when passing a single positional arg to patchz:cannot pass both positional and keyword arguments to patchzLsecond positional argument is only valid when first argument is a key stringzexpected `dict` got c                   óF   >• \ rS rSrSU 4S jjrSUU4S jjrUU4S jrSrg)Ú'ConfigModule.patch.<locals>.ConfigPatchi´  Nc                 ó   >• TU l         g r:   ©Úchanges)r"   r;  s    €r#   r˜   Ú0ConfigModule.patch.<locals>.ConfigPatch.__init__µ  s
   ø€ Ø&�•r&   c                 óà   >• T(       a  [        S5      eU R                   H  nTR                  U5      TU'   M     U R                  R                  5        H  u  p#TR	                  X#5        M     g )Nz/prior should be empty when entering ConfigPatch)r    r;  r­   r_   r¡   )r"   ri   r  rø   rl   Úpriors       €€r#   Ú	__enter__Ú1ConfigModule.patch.<locals>.ConfigPatch.__enter__¸  sc   ø€ ÞÜ(ØIóð ð  Ÿ<œ<�Cà!'×!3Ñ!3°CÓ!8�E˜#“Jñ (ð !ŸL™L×.Ñ.Ö0‘D�AØ×&Ñ& qÖ,ò 1r&   c                 óz   >• TR                  5        H  u  pETR                  XE5        M     TR                  5         g r:   )r_   r¡   Úclear)r"   Úexc_typeÚexc_valÚexc_tbr  rø   rl   r>  s         €€r#   Ú__exit__Ú0ConfigModule.patch.<locals>.ConfigPatch.__exit__Ã  s,   ø€ Ø!ŸK™KžM‘D�AØ×&Ñ& qÖ,ñ *à—‘•r&   r:  r.   )r/   r0   r1   r2   r˜   r?  rF  r7   )r;  rl   r>  s   €€€r#   ÚConfigPatchr8  ´  s   ø† ÷'÷	-ð 	-÷ñ r&   rH  )r)   r*   r    r§   r,   r5  )r"   r2  r3  r4  rH  r;  rl   r>  s        @@@r#   ÚpatchÚConfigModule.patch~  sÜ   ú€ ð. ÑØÑÜ! $¬×,Ñ,Ü(Øaóð ð  ˜,‘ä! $¬×-Ñ-Ü(Øeóð ð �ÞÜ$ØPóð ð ð ˆGØÑÜ$Øbóð ô ˜'¤4×(Ñ(Ü Ð#7¼¸W»°Ð!GÓHÐHØ "ˆØˆ÷	ñ 	Ô*ô 	ñ( ‹}Ðr&   r;  c                 óN   ^ ^^• T R                   mS[        / S4   4UUU 4S jjnU$ )zþ
A lower-overhead version of patch() for things on the critical path.

Usage:

    # do this off the critical path
    change_fn = config.make_closure_patcher(foo=True)

    ...

    revert = change_fn()
    try:
      ...
    finally:
        revert()

r   Nc                  óÀ   >^• T V s0 s H  o TU    R                   _M     sn mTR                  5        H  u  pUTR                  U    l         M     SUU4S jjnU$ s  sn f )Nc                  ó`   >• TR                  5        H  u  pUTR                  U    l        M     g r:   )r_   rr   r‘   )r  rø   r>  r"   s     €€r#   ÚrevertÚBConfigModule._make_closure_patcher.<locals>.change.<locals>.revertã  s%   ø€ Ø!ŸK™KžM‘D�AØ45�D—L‘L ‘OÖ1ò *r&   r.   )r‘   r_   rr   )r  rø   rN  r>  r;  rl   r"   s      @€€€r#   ÚchangeÚ2ConfigModule._make_closure_patcher.<locals>.changeÞ  s]   ù€ Ù9@ÓAº°A˜˜q™	×/Ñ/Ò/¹ÑAˆEØŸ™ž‘�Ø01�—‘˜Q‘Ö-ñ (÷6ð 6ð ˆMùò Bs   ‡A)rr   r   )r"   r;  rP  rl   s   `` @r#   Ú_make_closure_patcherÚ"ConfigModule._make_closure_patcherÊ  s/   ú€ ð$ —‘ˆð		œ  T Ñ*÷ 		ñ 		ð ˆr&   )rO   rN   r.   )NNF)NN)*r/   r0   r1   r2   r§   r*   rd   r5   rP   r–   Úbytesr˜   r4   r¡   r   r­   r²   Útupler   r¼   r¦   r£   rÊ   r+   rÕ   r,   rÙ   râ   rë   r  r  r   ÚFutureWarningr   r$  r+  r  r0  rI  rR  r7   Ú__classcell__©rt   s   @r#   rp   rp   T  s¶  ø‡ ð �#�|Ð#Ñ$Ó$Ø�c‘(ÓØ˜s™8Ó#ØƒOØ˜$‘,Óô
ð

, ð 
,¨Fð 
,°t÷ 
,ð"R ð "R¨ô "RðH' ð '¨ô 'ð%Ø!ð%à	ˆz˜3ˆÑ	 $Ñ	&ô%ð Lð °Sô ð, Lð ,°sð ,¸tô ,ðC ð C¨ô Cð4 *.Ø-1Ø"ñ	#à˜3‘i $Ñ&ð#ð ˜s™) dÑ*ð#ð ð	#ð
 
ˆc�3ˆh‰õ#ðJ4 Cð 4¨Dô 4ð
˜Uô 
ð 15ò9Ø)-ð9à	ˆc�3ˆh‰õ9ð?  ô ? ðB	!˜%ô 	!ñ ð	8ð ñ	ð&˜˜c 3˜h™ó &óð&ñ ð	8ð ñ	ð& 4¨¨S¨¡>ó &óð&ðV°¸¸SÀ#¸X¹Ñ0Fð VÈ4ô Vð   c¨3 h¡ô  ðU¨d°3¸°8©nô Uð
 -1ØñJà�D˜˜c˜‘NÑ" TÑ)ðJð ðJð �s˜C�x‘.ð	Jð
 
õJðX¨t°C¸°H©~ð À#÷ ò r&   rp   c                   ó\   ^ • \ rS rSrSrS	S jrS\4S jrS\\	/\	4   S\	4U 4S jjr
SrU =r$ )
r5  iì  zO
Same as contextlib.ContextDecorator, but with support for
`unittest.TestCase`
r   c                 ó   • [        S5      e©NÚNYI©rœ   r!   s    r#   r?  ÚContextDecorator.__enter__ò  ó   € Ü! %Ó(Ð(r&   c                 ó   • [        S5      er[  r]  )r"   rC  rD  rE  s       r#   rF  ÚContextDecorator.__exit__õ  r_  r&   rî   c                 ó  >^ • [        U[        5      (       ab  [        U[        R                  5      (       aC   " U 4S jSU5      nUR
                  Ul        UR                  Ul        UR                  Ul        U$ [        TT ]%  U5      $ )Nc                   óV   >^ • \ rS rSr\SU U4S jj5       r\SU U4S jj5       rSrU =r$ )Ú,ContextDecorator.__call__.<locals>._TestCaseiû  c                 óˆ   >• TR                  5          [        TU ]	  5         g ! [         a    TR	                  S S S 5        e f = fr:   )r?  r    Ú
setUpClassÚ	ExceptionrF  ©Úclsrt   r"   s    €€r#   rf  Ú7ContextDecorator.__call__.<locals>._TestCase.setUpClassü  s?   ø€ à—N‘NÔ$ðÜ™Ñ*Õ,øÜ$ó ØŸ™ d¨D°$Ô7Øðús	   “" ¢Ac                 óz   >•  [         TU ]  5         TR                  S S S 5        g ! TR                  S S S 5        f = fr:   )r    ÚtearDownClassrF  rh  s    €€r#   rl  Ú:ContextDecorator.__call__.<locals>._TestCase.tearDownClass  s4   ø€ ð8Ü™Ñ-Ô/àŸ™ d¨D°$Õ7ø˜Ÿ™ d¨D°$Õ7ús   ƒ% ¥:r8   r.   )	r/   r0   r1   r2   Úclassmethodrf  rl  r7   rW  )rt   r"   s   @€r#   Ú	_TestCaserd  û  s)   ù† Ø÷ó ðð ÷8ó ö8r&   ro  )
r)   r,   rb   ÚunittestÚTestCaser/   r1   r0   r    Ú__call__)r"   rî   ro  rt   s   `  €r#   rr  ÚContextDecorator.__call__ø  sl   ù€ Ü�dœD×!Ñ!¤j°´x×7HÑ7H×&IÑ&I÷8˜Dô 8ð" "&§¡ˆIÔØ%)×%6Ñ%6ˆIÔ"Ø#'§?¡?ˆIÔ àÐä‰wÑ Ó%Ð%r&   r8   r.   )r/   r0   r1   r2   r3   r?  r	   rF  r   r   rr  r7   rW  rX  s   @r#   r5  r5  ì  s<   ø† ñô
)ð)°Xô )ð&˜X s e¨S jÑ1ð &°c÷ &õ &r&   r5  c                   óv   ^ • \ rS rSrSrS\S\SS4U 4S jjrS\S	\SS4S
 jrS\S\	4S jr
S\SS4S jrSrU =r$ )rf   i  zb
Shim to redirect to main config.
`config.triton.cudagraphs` maps to _config["triton.cudagraphs"]
rl   rU   r   Nc                 óF   >• [         TU ]  SU5        [         TU ]  SU5        g )Nrr   Ú_prefix)r    r¡   )r"   rl   rU   rt   s      €r#   r˜   ÚSubConfigProxy.__init__  s!   ø€ ä‰Ñ˜I vÔ.Ü‰Ñ˜I vÕ.r&   r>   rG   c                 óT   • U R                   R                  U R                  U-   U5      $ r:   )rr   r¡   rv  )r"   r>   rG   s      r#   r¡   ÚSubConfigProxy.__setattr__   s"   € Ø�|‰|×'Ñ'¨¯©°tÑ(;¸UÓCÐCr&   c                 óR   • U R                   R                  U R                  U-   5      $ r:   )rr   r­   rv  r±   s     r#   r­   ÚSubConfigProxy.__getattr__#  ó    € Ø�|‰|×'Ñ'¨¯©°tÑ(;Ó<Ð<r&   c                 óR   • U R                   R                  U R                  U-   5      $ r:   )rr   r²   rv  r±   s     r#   r²   ÚSubConfigProxy.__delattr__&  r|  r&   r8   )r/   r0   r1   r2   r3   r4   r*   r˜   r¡   r   r­   r²   r7   rW  rX  s   @r#   rf   rf     sk   ø† ñð
/˜vð /¨sð /°t÷ /ð
D ð D¨Fð D°tô Dð= ð =¨ô =ð= ð =¨÷ =ò =r&   rf   ÚobjrG   c                 óŽ   • [        U [        5      (       a  U R                  X5      $ [        R                  R	                  XU5      $ )z8
Workaround `mock.patch.object` issue with ConfigModule
)r)   rp   rI  r   r4   )r  r>   rG   s      r#   Úpatch_objectr�  *  s7   € ô �#”|×$Ñ$Ø�y‰y˜Ó%Ð%Ü�:‰:×Ñ˜S¨Ó.Ð.r&   c                 ó`   • [         R                  R                  U 5      nUS:X  a  gUS:X  a  gU$ r@   rC   )r>   r   rG   s      r#   Úget_tristate_envrƒ  3  s-   € Ü�J‰J�N‰N˜4Ó €EØ�ƒ|ØØ�ƒ|ØØ€Nr&   c                 ó   ^ • U 4S jnU$ )Nc                 ó¸   >• TR                   R                  5        H:  u  pUR                  S5      (       a  M  XR                   ;  d  M.  [        XU5        M<     U $ )Nræ   )r^   r_   r`   rg   )Ú	child_clsr  rø   Ú
parent_clss      €r#   ÚwrapperÚ$inherit_fields_from.<locals>.wrapper=  sJ   ø€ Ø×'Ñ'×-Ñ-Ö/‰DˆAà—<‘< ×$Ó$¨×2DÑ2DÕ)DÜ˜	 aÖ(ñ 0ð Ðr&   r8   )r‡  rˆ  s   ` r#   Úinherit_fields_fromrŠ  <  s   ø€ õð €Nr&   r:   )7Ú
contextlibr¨   r  r·   r\   r}   rD   rà   r|   rp  Úcollections.abcr   Údataclassesr   Útypesr   r   rX   r   r   r	   r
   r   r   Útyping_extensionsr   r   Útorch._utils_internalr   ÚintÚfloatr–   r,   r*   r+   rP   rU  r§   rc   r   r4   r   r   r<   rH   rv   r„   rq   rd   rp   r5  rf   r�  rƒ  rŠ  r8   r&   r#   Ú<module>r“     s¯  ðÛ Û Û Û Û Û 	Û 	Û Û Û Ý $Ý !ß *ß K× KÝ (Ý å 1ð �U˜D¡$ t£*¨c°4¸¸eÀTÐJ€ñ ˆC�s˜U‘{ TÑ)¨CÑ/°$Ñ6¸Ñ<¸uÑDÀtÑKÈdÑRÑS€ñ “(€ñ �4ÑôLˆg�a‰jó Ló ðLöf ð .Ø#Ø37Ø15Ø"&Ø ñØ�V‘ðà˜‘*ðð   S¡	™/¨DÑ0ðð ˜d 3™i™¨$Ñ.ð	ð
 ˜4‘Kðð �T‰zðð 
öð .Ø#Ø37Ø15Ø"&Ø ñ
Ø�V‘ð
à˜‘*ð
ð   S¡	™/¨DÑ0ð
ð ˜d 3™i™¨$Ñ.ð	
ð
 ˜4‘Kð
ð �T‰zð
ð 
�‰õ
ð$˜Sð  T¨C¡Z°$Ñ%6ô ðJ *ð J°ô JðZ ,Ð ð"¸*ð "ÈÈSÉô "ðJ ÷>ð >ó ð>ôBU�:ô Uôp&&�z×2Ñ2ô &&÷R=ñ =ð*/�fð / Cð /°ð /¸6ô /ñ˜3ð ¨ð ¸¸t¹õ ór&   