§
    Ë²ÅjðW  ã            	       ó8  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dl	mZ d dlmZ e G d„ d	¦  «        ¦   «         Zee e! e"d¦  «        e#e$e%e&e'f	Z(d
e#dee!         fd„Z)deddfd„Z*dZ+dedee#         fd„Z, e-¦   «         Z.e G d„ d¦  «        ¦   «         Z/ G d„ de¦  «        Z0 G d„ de j1        ¦  «        Z1 G d„ d¦  «        Z2de-d
e#de-de-fd„Z3dd
e#dedee!         fd„Z4dS )é    N)Ú	dataclass)ÚFunctionTypeÚ
ModuleType)ÚAnyÚCallableÚDictÚListÚNoReturnÚOptionalÚSetÚUnion)Ú
deprecated)Úmock)Újustknobs_checkc                   óâ   — e Zd ZU dZdZeed<   dZee	         ed<   dZ
ee	         ed<   dZee	         ed<   dZee         ed<   	 	 	 	 	 d
dedee	         dee	         dee	         dee         f
d	„ZdS )ÚConfigaz  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:
        env_name_force: If set, this environment variable overrides everything
        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.
        justknob: If this pytorch installation supports justknobs, that will
            override defaults, but will not override the user_override precendence.
        default: This value is the lowest precendance, 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.
        env_name_force: The environment variable to read that is a FORCE
            environment variable. I.e. it overrides everything
        env_name_default: The environment variable to read that changes the
            default behaviour. I.e. user overrides take preference.
    TÚdefaultNÚjustknobÚenv_name_defaultÚenv_name_forceÚ
value_typec                 ó¸   — || _         || _        || _        || _        || _        | j        �-t          | j         t          ¦  «        sJ d| j         › d�¦   «         ‚d S d S )Nz!justknobs only support booleans, z is not a boolean)r   r   r   r   r   Ú
isinstanceÚbool)Úselfr   r   r   r   r   s         úKC:\Projects\Historical\venv\Lib\site-packages\torch/utils/_config_module.pyÚ__init__zConfig.__init__<   s†   € ð ˆŒØ ˆŒØ 0ˆÔØ,ˆÔØ$ˆŒØŒ=Ð$ÝØ”�dñô ð Sð SàR°4´<ÐRÐRÐRñSô Sð ð %Ð$ðSð Só    )TNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   r   Ústrr   r   r   Útyper   © r   r   r   r      sù   € € € € € € ðð ð> €GˆSÐÐÑØ"€Hˆh�sŒmÐ"Ð"Ñ"Ø&*Ð�h˜s”mÐ*Ð*Ñ*Ø$(€N�H˜S”MÐ(Ð(Ñ(Ø!%€J�˜”Ð%Ð%Ñ%ð Ø"&Ø*.Ø(,Ø%)ðSð SàðSð ˜3”-ðSð # 3œ-ð	Sð
 ! œðSð ˜T”NðSð Sð Sð Sð Sð Sr   r   ÚnameÚreturnc                 ód   — t           j                             | ¦  «        }|dk    rdS |dk    rdS d S ©NÚ1TÚ0F©ÚosÚenvironÚget)r'   Úvalues     r   Ú_read_env_variabler2   T   s6   € ÝŒJ�NŠN˜4Ñ Ô €EØ�‚|€|ØˆtØ�‚|€|ØˆuØˆ4r   Úmodulec                 ó:  ‡ ‡‡—  G d„ dt           ¦  «        }dt          t          t          f         dt          t          t          f         dt
          ddfˆˆ ˆfd„Ši Št          ‰ ¦  «        } ‰‰ ‰ d	¦  «         ‰‰ _        |‰ _        |‰ _	        d
‰ _
        d‰ _        dS )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                   ó(   — e Zd Z eh d£¦  «        ZdS )ú3install_config_module.<locals>.ConfigModuleInstance>   Ú	_is_dirtyÚ_hash_digestr#   N)r   r    r!   ÚsetÚ_bypass_keysr&   r   r   ÚConfigModuleInstancer6   d   s$   € € € € € à�sÐKÐKÐKÑLÔLˆˆˆr   r;   ÚsourceÚdestÚprefixr(   Nc                 ó8  •— t           j        dd…         dk     rt          | di ¦  «        }nt          j        | ¦  «        }t          | j                             ¦   «         ¦  «        D �]²\  }}|                     d¦  «        sat          |t          t          f¦  «        sEt          |d¦  «        r|j        dk    s*t          |t          ¦  «        rt          |t           ¦  «        rŒ}|› |› �}t          |t"          ¦  «        rL|                     |d¦  «        }t'          t!          ||¬¦  «        ¦  «        ‰	|<   |‰
u rt)          ‰
|¦  «         Œät          |t           ¦  «        r(t'          |¦  «        ‰	|<   |‰
u rt)          ‰
|¦  «         �Œ!t          |t          ¦  «        rX|j        ‰
j        k    sJ ‚t-          ‰
|› d	�¦  «        } ‰|||› d	�¦  «         |‰
u rt/          |||¦  «         �Œ‚||j        |<   �ŒŽt1          d
|› d|› dt          |¦  «        › d�¦  «        ‚dS )z?Walk the module structure and move everything to module._configNé   )é   é
   r#   Ú__r    Útyping)r   r   ú.zUnhandled config ú=z (ú))ÚsysÚversion_infoÚgetattrÚinspectÚget_annotationsÚlistÚ__dict__ÚitemsÚ
startswithr   r   r   Úhasattrr    r%   Ú
issubclassr   ÚCONFIG_TYPESr0   Ú_ConfigEntryÚdelattrr   ÚSubConfigProxyÚsetattrÚAssertionError)r<   r=   r>   Ú
type_hintsÚkeyr1   r'   Úannotated_typeÚproxyÚconfigr3   Úvisits            €€€r   r^   z$install_config_module.<locals>.visith   sZ  ø€ õ Ô˜B˜Q˜BÔ 'Ò)Ð)Ý  Ð):¸BÑ?Ô?ˆJˆJå Ô0°Ñ8Ô8ˆJÝ˜vœ×4Ò4Ñ6Ô6Ñ7Ô7ð !	Xñ !	X‰JˆC�à—’˜tÑ$Ô$ðå˜e¥jµ,Ð%?Ñ@Ô@ðõ ˜E <Ñ0Ô0ðð 6;Ô5EÈÒ5QÐ5Qå˜u¥dÑ+Ô+ð 6Rå0:¸5Å&Ñ0IÔ0Ið 6Rð àÐ#˜cÐ#Ð#ˆDÝ˜%¥Ñ.Ô.ð XØ!+§¢°°TÑ!:Ô!:�Ý+Ý 5°^ÐDÑDÔDñ ô  ��t‘ð ˜6�>�>Ý˜F CÑ(Ô(Ð(øÝ˜E¥6Ñ*Ô*ð XÝ+¨EÑ2Ô2��t‘à˜6�>�>Ý˜F CÑ(Ô(Ð(ùÝ˜E¥4Ñ(Ô(ð 
XØÔ'¨6¬?Ò:Ð:Ð:Ð:å& v°$¨z¨z¨zÑ:Ô:�Ø��e˜U t J J JÑ/Ô/Ð/Ø˜6�>�>Ý˜D # uÑ-Ô-Ð-Ñ-à).�D”M #Ñ&Ñ&å$Ð%V¸Ð%VÐ%V¸uÐ%VÐ%VÍÈUÉÌÐ%VÐ%VÐ%VÑWÔWÐWðC!	Xð !	Xr   Ú T)ÚConfigModuler   r   r%   rV   r$   Ú-get_assignments_with_compile_ignored_commentsÚ_configÚ_compile_ignored_keysÚ	__class__r7   r8   )r3   r;   Úcompile_ignored_keysr]   r^   s   `  @@r   Úinstall_config_modulerf   ]   sú   øøø€ ðMð Mð Mð Mð M�|ñ Mô Mð Mð+XÝ•j¥$Ð&Ô'ð+Xå•J¥Ð.Ô/ð+Xõ ð+Xð 
ð	+Xð +Xð +Xð +Xð +Xð +Xð +Xð +XðZ ')€FåHÈÑPÔPÐà	€Eˆ&�&˜"ÑÔÐØ€F„NØ#7€FÔ Ø+€FÔØ€FÔØ€FÔÐÐr   z@compile_ignoredc                 óÌ  — t          j        | ¦  «        }t          ¦   «         }t          j        t	          j        |                     d¦  «        ¦  «        j        ¦  «        }d}d}|D ]ä}|j        t          j	        k    rLd}|j
                             ¦   «         }t          |v r'|dk    sJ dt          › �¦   «         ‚||j        d         f}Œc|j        t          j        k    r
|s|j
        }Œ‚|j        t          j        k    rM|j
        dk    rBt          |d         v r1|d         |j        d         dz
  k    r|                     |¦  «         d}d}Œå|dk    sJ dt          › �¦   «         ‚|S )Núutf-8)r_   éÿÿÿÿr_   zunconsumed r   rF   é   )rK   Ú	getsourcer9   ÚtokenizeÚioÚBytesIOÚencodeÚreadliner%   ÚCOMMENTÚstringÚstripÚCOMPILE_IGNORED_MARKERÚstartÚNAMEÚOPÚadd)r3   Úsource_codeÚassignmentsÚtokensÚcurrent_commentÚ	prev_nameÚtokenÚmaybe_currents           r   ra   ra   ¥   sŠ  € ÝÔ# FÑ+Ô+€KÝ‘%”%€Kõ Ô�rœz¨+×*<Ò*<¸WÑ*EÔ*EÑFÔFÔOÑPÔP€FØ€OØ€Iàð ð ˆØŒ:�Ô)Ò)Ð)ØˆIØ!œL×.Ò.Ñ0Ô0ˆMÝ%¨Ð6Ð6Ø&ð +ò ð ð ð :Õ!7Ð9Ð9ñô ð ð #0°´¸Q´Ð"?�øØŒZ�8œ=Ò(Ð(ð ð )Ø!œL�	øØŒZ�8œ;Ò&Ð&¨5¬<¸3Ò+>Ð+>õ '¨/¸!Ô*<Ð<Ð<Ø# AÔ&¨%¬+°a¬.¸1Ñ*<Ò<Ð<à—’ 	Ñ*Ô*Ð*Ø"(�ØˆIøØ˜hÒ&Ð&Ð&Ð(NÕ6LÐ(NÐ(NÑ&Ô&Ð&ØÐr   c                   ó‚   — e Zd ZU eed<   eed<   eZeed<   dZe	e
         ed<   eZeed<   eZeed<   dZeed	<   d
efd„ZdS )rT   r   r   Úuser_overrideNr   Úenv_value_forceÚenv_value_defaultFÚhider]   c                 ó  — |j         | _         |j        �|j        nt          | j         ¦  «        | _        |j        | _        |j        �t          |j        ¦  «        x}�|| _        |j        �t          |j        ¦  «        x}�|| _        d S d S d S ©N)	r   r   r%   r   r   r2   rƒ   r   r‚   )r   r]   Ú	env_values      r   r   z_ConfigEntry.__init__é   sœ   € Ø”~ˆŒà!'Ô!2Ð!>ˆFÔÐÅDÈÌÑDVÔDVð 	Œð œˆŒØÔ"Ð.Ý/°Ô0GÑHÔHÐH�	ÐUØ)2�Ô&ØÔ Ð,Ý/°Ô0EÑFÔFÐF�	ÐSØ'0�Ô$Ð$Ð$ð -Ð,ØSÐSr   )r   r    r!   r   r#   r%   Ú_UNSET_SENTINELr�   r   r   r$   r‚   rƒ   r„   r   r   r   r&   r   r   rT   rT   Î   s¡   € € € € € € ð €L€L�LàÐÐÑð )€M�3Ð(Ð(Ñ(à"€Hˆh�sŒmÐ"Ð"Ñ"à*€O�SÐ*Ð*Ñ*Ø,Ð�sÐ,Ð,Ñ,ð €Dˆ$ÐÐÑð1˜vð 1ð 1ð 1ð 1ð 1ð 1r   rT   c                   óÆ  ‡ — e Zd ZU eeef         ed<   ee         ed<   ee         ed<   eed<   e	e
         ed<   d)d„Zd	ed
eddfˆ fd„Zd	edefd„Zd	eddfd„Zd	edefd„Z	 	 	 d*de	ee                  de	ee                  dedeeef         fd„Zdedefd„Zde
fd„Zdeeef         fd„Zdefd„Zde
fd„Z ede¬¦  «        deeef         fd„¦   «         Z ede¬¦  «        deeef         fd„¦   «         Zdee
eeef         f         ddfd „Zdeeef         fd!„Z 	 	 d+d"e	eeeeef         f                  d#ed$eeef         dd%fd&„Z!d'eeef         defd(„Z"ˆ xZ#S ),r`   rb   r:   rc   r7   r8   r(   Nc                 ó2   — t          dt          › d�¦  «        ‚)Nzuse z-.install_config_module(sys.modules[__name__]))ÚNotImplementedErrorr   ©r   s    r   r   zConfigModule.__init__  s"   € Ý!ØJ•8ÐJÐJÐJñ
ô 
ð 	
r   r'   r1   c                 óþ   •— || j         v r$t          ¦   «                              ||¦  «         d S || j        vrt	          | j        › d|› d�¦  «        ‚|| j        |         _        d| _        d| j        |         _        d S )NrE   ú does not existTF)	r:   ÚsuperÚ__setattr__rb   ÚAttributeErrorr   r�   r7   r„   )r   r'   r1   rd   s      €r   r�   zConfigModule.__setattr__  sŠ   ø€ Ø�4Ô$Ð$Ð$Ý‰GŒG×Ò  eÑ,Ô,Ð,Ð,Ð,Ø˜œÐ%Ð%Ý  D¤MÐ!IÐ!I°DÐ!IÐ!IÐ!IÑJÔJÐJà/4ˆDŒL˜ÔÔ,Ø!ˆDŒNØ&+ˆDŒL˜ÔÔ#Ð#Ð#r   c                 ó"  — 	 | j         |         }|j        rt          | j        › d|› d�¦  «        ‚|j        t
          ur|j        S |j        t
          ur|j        S |j        t
          ur|j        S |j        �t          |j        |j
        ¬¦  «        S t          |j
        t          t          t          f¦  «        r%t          j        |j
        ¦  «        |_        |j        S |j
        S # t"          $ r }t          | j        › d|› d�¦  «        |‚d }~ww xY w)NrE   rŽ   )r'   r   )rb   r„   r‘   r   r‚   rˆ   r�   rƒ   r   r   r   r   rM   r9   ÚdictÚcopyÚdeepcopyÚKeyError)r   r'   r]   Úes       r   Ú__getattr__zConfigModule.__getattr__  s-  € ð	RØ”\ $Ô'ˆFàŒ{ð OÝ$¨¬Ð%MÐ%M¸Ð%MÐ%MÐ%MÑNÔNÐNàÔ%­_Ð<Ð<ØÔ-Ð-àÔ#­?Ð:Ð:ØÔ+Ð+àÔ'­Ð>Ð>ØÔ/Ð/àŒÐ*å&¨F¬OÀVÄ^ÐTÑTÔTÐTõ
 ˜&œ.­4µµdÐ*;Ñ<Ô<ð ,Ý'+¤}°V´^Ñ'DÔ'D�Ô$ØÔ+Ð+Ø”>Ð!øåð 	Rð 	Rð 	Rå  D¤MÐ!IÐ!I°DÐ!IÐ!IÐ!IÑJÔJÐPQÐQøøøøð	Røøøs7   ‚AC$ ÁC$ ÁC$ Á/!C$ ÂAC$ ÃC$ Ã$
DÃ.D	Ä	Dc                 óf   — d| _         t          | j        |         _        d| j        |         _        d S )NT)r7   rˆ   rb   r�   r„   ©r   r'   s     r   Ú__delattr__zConfigModule.__delattr__2  s/   € ØˆŒõ ,;ˆŒ�TÔÔ(Ø"&ˆŒ�TÔÔÐÐr   c                 ó4   — | j         |         j        t          u S r†   )rb   r�   rˆ   rš   s     r   Ú_is_defaultzConfigModule._is_default9  s   € ØŒ|˜DÔ!Ô/µ?ÐBÐBr   FÚignored_keysÚignored_prefixesÚskip_defaultc           
      ób  ‡— i }| j         D ]£Š|rD‰|v r@|r=|                      ‰¦  «        s(t          j        d‰› dt	          | ‰¦  «        › �¦  «         ŒH|rt          ˆfd„|D ¦   «         ¦  «        rŒf|r|                      ‰¦  «        rŒ~t          j        t	          | ‰¦  «        ¦  «        |‰<   Œ¤|S )a  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.

        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. The other is it modified the logging behaviour
                to match what codegen already did for modified skipped keys
        zSkipping serialization of z value c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r†   )rP   )Ú.0r>   rZ   s     €r   ú	<genexpr>z)ConfigModule._get_dict.<locals>.<genexpr>[  s/   øè è € ÐMÐM°&�s—~’~ fÑ-Ô-ÐMÐMÐMÐMÐMÐMr   )rb   r�   ÚwarningsÚwarnrJ   Úanyr”   r•   )r   rž   rŸ   r    r]   rZ   s        @r   Ú	_get_dictzConfigModule._get_dict<  sõ   ø€ ð, "$ˆØ”<ð 	<ð 	<ˆCØð   |Ð 3Ð 3Øð ¨×(8Ò(8¸Ñ(=Ô(=ð Ý”MØU°SÐUÐUÅÈÈsÑASÔASÐUÐUñô ð ð Øð ÝÐMÐMÐMÐMÐ<LÐMÑMÔMÑMÔMð ØØð  × 0Ò 0°Ñ 5Ô 5ð ØÝœ-­°°cÑ(:Ô(:Ñ;Ô;ˆF�3‰KˆKØˆr   Úconfig_namec                 ó&   — | j         |         j        S r†   )rb   r   )r   r©   s     r   Úget_typezConfigModule.get_typeb  s   € ØŒ|˜KÔ(Ô3Ð3r   c                 óx   — t          | dg ¦  «        }t          j        |                      |¬¦  «        d¬¦  «        S )z Convert config to a pickled blobÚ_save_config_ignore©rž   r@   )Úprotocol)rJ   ÚpickleÚdumpsr¨   )r   rž   s     r   Úsave_configzConfigModule.save_confige  sA   € å˜tÐ%:¸BÑ?Ô?ˆÝŒ|Ø�NŠN¨ˆNÑ5Ô5Øð
ñ 
ô 
ð 	
r   c                 ó|   — dg}|                      t          | dg ¦  «        ¦  «         |                      |¬¦  «        S )z!Convert config to portable formatÚ_Ú_cache_config_ignore_prefix)rŸ   )ÚextendrJ   r¨   )r   Úprefixess     r   Úsave_config_portablez!ConfigModule.save_config_portablem  s<   € à�5ˆØ�Š� Ð&CÀRÑHÔHÑIÔIÐIØ�~Š~¨xˆ~Ñ8Ô8Ð8r   c                 óô   — g }| j         }|                      t          | dg ¦  «        d¬¦  «                             ¦   «         D ]"\  }}|                     |› d|› d|›�¦  «         Œ#d                     |¦  «        S )z•Convert config to Python statements that replicate current config.
        This does NOT include config settings that are at default values.
        r­   T)rž   r    rE   z = ú
)r   r¨   rJ   rO   ÚappendÚjoin)r   ÚlinesÚmodÚkÚvs        r   Úcodegen_configzConfigModule.codegen_configs  s‘   € ð ˆØŒmˆØ—N’NÝ  Ð'<¸bÑAÔAÐPTð #ñ 
ô 
ç
Š%‰'Œ'ð	/ð 	/‰DˆAˆqð �LŠL˜CÐ-Ð- !Ð-Ð-¨Ð-Ð-Ñ.Ô.Ð.Ð.Ø�yŠy˜ÑÔÐr   c                 ób  — | j         s| j        €›|                      t          | j        ¦  «        ¬¦  «        }t          t          |                     ¦   «         ¦  «        ¦  «        }t          j	        | 
                    d¦  «        ¦  «                             ¦   «         | _        d| _         | j        S )z/Hashes the configs that are not compile_ignoredNr®   rh   F)r7   r8   r¨   rM   rc   ÚreprÚsortedrO   ÚhashlibÚmd5ro   Údigest)r   Údict_to_hashÚstring_to_hashs      r   Úget_hashzConfigModule.get_hash  s�   € àŒ>ð 	#˜TÔ.Ð6ØŸ>š>µt¸DÔ<VÑ7WÔ7W˜>ÑXÔXˆLÝ!¥&¨×);Ò);Ñ)=Ô)=Ñ">Ô">Ñ?Ô?ˆNÝ '¤¨N×,AÒ,AÀ'Ñ,JÔ,JÑ KÔ K× RÒ RÑ TÔ TˆDÔØ"ˆ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                 ó*   — |                       ¦   «         S r†   ©Úget_config_copyrŒ   s    r   Úto_dictzConfigModule.to_dictˆ  ó   € ð ×#Ò#Ñ%Ô%Ð%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                 ó*   — |                       ¦   «         S r†   rÍ   rŒ   s    r   Úshallow_copy_dictzConfigModule.shallow_copy_dict‘  rÐ   r   Úmaybe_pickled_configc                 óþ   — t          |t          ¦  «        st          j        |¦  «        }n|}|                     ¦   «         D ];\  }}|| j        v rt          | ||¦  «         Œ t          j        d|› d|› d�¦  «         Œ<dS )zARestore from a prior call to save_config() or shallow_copy_dict()zkey z with value z! is not understood by this configN)	r   r“   r°   ÚloadsrO   rb   rW   r¥   r¦   )r   rÓ   r]   r¿   rÀ   s        r   Úload_configzConfigModule.load_configš  s¢   € åÐ.µÑ5Ô5ð 	*Ý”\Ð"6Ñ7Ô7ˆFˆFà)ˆFØ—L’L‘N”Nð 	ð 	‰DˆAˆqØ�D”LÐ Ð Ý˜˜a Ñ#Ô#Ð#Ð#å”ØN˜1ÐNÐN¨!ÐNÐNÐNñô ð ð ð		ð 	r   c                 ó*   — |                       ¦   «         S r†   )r¨   rŒ   s    r   rÎ   zConfigModule.get_config_copy¨  s   € Ø�~Š~ÑÔÐr   Úarg1Úarg2ÚkwargsÚContextDecoratorc                 ó8  ‡‡‡— |�<|�t          |t          ¦  «        sJ ‚||iŠnt          |t          ¦  «        sJ ‚|Š|rJ ‚n|Š|�J ‚t          ‰t          ¦  «        sJ dt          ‰¦  «        › �¦   «         ‚i Š| Š G ˆˆˆfd„dt          ¦  «        } |¦   «         S )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):
                ...
        Nzexpected `dict` got c                   ó,   •— e Zd Zdˆ ˆˆfd„Zˆˆfd„ZdS )ú'ConfigModule.patch.<locals>.ConfigPatchr(   Nc                 óÎ   •— ‰rJ ‚‰                      ¦   «         D ]}‰                     |¦  «        ‰|<   Œ‰                     ¦   «         D ]\  }}‰                     ||¦  «         Œd S r†   )Úkeysr˜   rO   r�   )r   rZ   r¿   rÀ   Úchangesr]   Úpriors       €€€r   Ú	__enter__z1ConfigModule.patch.<locals>.ConfigPatch.__enter__Õ  s|   ø€ Ø Ð Ð �yØ"Ÿ<š<™>œ>ð 9ð 9�Cà!'×!3Ò!3°CÑ!8Ô!8�E˜#‘J�JØ#ŸMšM™OœOð -ð -‘D�A�qØ×&Ò& q¨!Ñ,Ô,Ð,Ð,ð-ð -r   c                 ó�   •— ‰                      ¦   «         D ]\  }}‰                     ||¦  «         Œ‰                     ¦   «          d S r†   )rO   r�   Úclear)r   Úexc_typeÚexc_valÚexc_tbr¿   rÀ   r]   râ   s         €€r   Ú__exit__z0ConfigModule.patch.<locals>.ConfigPatch.__exit__Ý  sH   ø€ Ø!ŸKšK™MœMð -ð -‘D�A�qØ×&Ò& q¨!Ñ,Ô,Ð,Ð,Ø—’‘”���r   ©r(   N)r   r    r!   rã   ré   )rá   r]   râ   s   €€€r   ÚConfigPatchrÞ   Ô  s[   ø€ € € € € ð-ð -ð -ð -ð -ð -ð -ð -ðð ð ð ð ð ð ð r   rë   )r   r$   r“   r%   rÛ   )r   rØ   rÙ   rÚ   rë   rá   r]   râ   s        @@@r   ÚpatchzConfigModule.patch«  sñ   øøø€ ð. ÐØÐÝ! $­Ñ,Ô,Ð,Ð,Ð,à ˜,��å! $­Ñ-Ô-Ð-Ð-Ð-à�ØÐÐ�:Ðð ˆGØ�<�<�<Ý˜'¥4Ñ(Ô(ÐPÐPÐ*PÅÀgÁÄÐ*PÐ*PÑPÔPÐ(Ø "ˆØˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	Õ*ñ 	ô 	ð 	ð ˆ{‰}Œ}Ðr   rá   c                 óH   ‡ ‡‡— ‰ j         Šdt          g df         fˆˆˆ fd„}|S )aV  
        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                  óŒ   •‡— ˆfd„‰D ¦   «         Š‰                      ¦   «         D ]\  } }|‰j        |          _        Œdˆˆfd„}|S )Nc                 ó,   •— i | ]}|‰|         j         “ŒS r&   )r�   )r£   r¿   r]   s     €r   ú
<dictcomp>zFConfigModule._make_closure_patcher.<locals>.change.<locals>.<dictcomp>ù  s"   ø€ ÐAÐAÐA°A�Q˜˜qœ	Ô/ÐAÐAÐAr   r(   c                  ó`   •— ‰                      ¦   «         D ]\  } }|‰j        |          _        Œd S r†   ©rO   rb   r�   )r¿   rÀ   râ   r   s     €€r   ÚrevertzBConfigModule._make_closure_patcher.<locals>.change.<locals>.revertý  s9   ø€ Ø!ŸKšK™MœMð 6ð 6‘D�A�qØ45�D”L ”OÔ1Ð1ð6ð 6r   rê   rò   )r¿   rÀ   ró   râ   rá   r]   r   s      @€€€r   Úchangez2ConfigModule._make_closure_patcher.<locals>.changeø  ss   øø€ ØAÐAÐAÐA¸ÐAÑAÔAˆEØŸš™œð 2ð 2‘��1Ø01�”˜Q”Ô-Ð-ð6ð 6ð 6ð 6ð 6ð 6ð 6ð ˆMr   )rb   r   )r   rá   rô   r]   s   `` @r   Ú_make_closure_patcherz"ConfigModule._make_closure_patcherä  sM   øøø€ ð$ ”ˆð		�  T Ô*ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð ˆr   rê   )NNF)NN)$r   r    r!   r   r$   rT   r#   r   r   r   Úbytesr   Úobjectr�   r   r˜   r›   r�   r	   r¨   r%   r«   r²   r¸   rÁ   rÊ   r   ÚFutureWarningrÏ   rÒ   r   rÖ   rÎ   rì   rõ   Ú__classcell__©rd   s   @r   r`   r`   ÷   sª  ø€ € € € € € ð �#�|Ð#Ô$Ð$Ð$Ñ$Ø�c”(ÐÐÑØ˜sœ8Ð#Ð#Ñ#Ø€O€O�OØ˜5”/Ð!Ð!Ñ!ð
ð 
ð 
ð 
ð
, ð ,¨Fð ,°tð ,ð ,ð ,ð ,ð ,ð ,ðR ð R¨ð Rð Rð Rð Rð@' ð '¨ð 'ð 'ð 'ð 'ðC ð C¨ð Cð Cð Cð Cð
 -1Ø04Ø"ð	$ð $à˜t CœyÔ)ð$ð # 4¨¤9Ô-ð$ð ð	$ð
 
ˆc�3ˆhŒð$ð $ð $ð $ðL4 Cð 4¨Dð 4ð 4ð 4ð 4ð
˜Uð 
ð 
ð 
ð 
ð9 d¨3°¨8¤nð 9ð 9ð 9ð 9ð
  ð 
 ð 
 ð 
 ð 
 ð!˜%ð !ð !ð !ð !ð €Zð	8ð ð	ñ ô ð&˜˜c 3˜hœð &ð &ð &ñô ð&ð €Zð	8ð ð	ñ ô ð& 4¨¨S¨¤>ð &ð &ð &ñô ð&ð°°e¸TÀ#ÀsÀ(¼^Ð6KÔ0Lð ÐQUð ð ð ð ð   c¨3 h¤ð  ð  ð  ð  ð
 6:Øð7ð 7à�u˜S $ s¨C x¤.Ð0Ô1Ô2ð7ð ð7ð �s˜C�x”.ð	7ð
 
ð7ð 7ð 7ð 7ðr¨t°C¸°H¬~ð À#ð ð ð ð ð ð ð ð r   r`   c                   óR   ‡ — e Zd ZdZdd„Zdefd„Zdeegef         defˆ fd„Z	ˆ xZ
S )	rÛ   z[
    Same as contextlib.ContextDecorator, but with support for
    `unittest.TestCase`
    r(   Nc                 ó    — t          d¦  «        ‚©NÚNYI©r‹   rŒ   s    r   rã   zContextDecorator.__enter__  ó   € Ý! %Ñ(Ô(Ð(r   c                 ó    — t          d¦  «        ‚rý   rÿ   )r   ræ   rç   rè   s       r   ré   zContextDecorator.__exit__  r   r   Úfuncc                 ó  •‡ — t          |t          ¦  «        rPt          |t          j        ¦  «        r6 G ˆ fd„d|¦  «        }|j        |_        |j        |_        |j        |_        |S t          ¦   «          	                    |¦  «        S )Nc                   óR   •‡ — e Zd Zedˆ ˆfd„¦   «         Zedˆ ˆfd„¦   «         Zˆ xZS )ú,ContextDecorator.__call__.<locals>._TestCaser(   Nc                 ó¾   •— ‰                      ¦   «          	 t          ¦   «                              ¦   «          d S # t          $ r ‰                     d d d ¦  «         ‚ w xY wr†   )rã   r�   Ú
setUpClassÚ	Exceptionré   ©Úclsrd   r   s    €€r   r  z7ContextDecorator.__call__.<locals>._TestCase.setUpClass  sh   ø€ à—N’NÑ$Ô$Ð$ðÝ™œ×*Ò*Ñ,Ô,Ð,Ð,Ð,øÝ$ð ð ð ØŸš d¨D°$Ñ7Ô7Ð7Øðøøøs	   — 9 ¹#Ac                 ó°   •— 	 t          ¦   «                              ¦   «          ‰                     d d d ¦  «         d S # ‰                     d d d ¦  «         w xY wr†   )r�   ÚtearDownClassré   r	  s    €€r   r  z:ContextDecorator.__call__.<locals>._TestCase.tearDownClass  sV   ø€ ð8Ý™œ×-Ò-Ñ/Ô/Ð/àŸš d¨D°$Ñ7Ô7Ð7Ð7Ð7ø˜Ÿš d¨D°$Ñ7Ô7Ð7Ð7øøøs	   ƒ < ¼Arê   )r   r    r!   Úclassmethodr  r  rù   )rd   r   s   @€r   Ú	_TestCaser    s|   øø€ € € € € Øðð ð ð ð ð ñ ”ðð ð8ð 8ð 8ð 8ð 8ð 8ñ ”ð8ð 8ð 8ð 8ð 8r   r  )
r   r%   rR   ÚunittestÚTestCaser   r!   r    r�   Ú__call__)r   r  r  rd   s   `  €r   r  zContextDecorator.__call__  s�   øø€ Ý�d�DÑ!Ô!ð 	¥j°µxÔ7HÑ&IÔ&Ið 	ð8ð 8ð 8ð 8ð 8ð 8ð 8˜Dñ 8ô 8ð 8ð" "&¤ˆIÔØ%)Ô%6ˆIÔ"Ø#'¤?ˆIÔ àÐå‰wŒw×Ò Ñ%Ô%Ð%r   rê   )r   r    r!   r"   rã   r
   ré   r   r   r  rù   rú   s   @r   rÛ   rÛ     s�   ø€ € € € € ðð ð
)ð )ð )ð )ð)°Xð )ð )ð )ð )ð&˜X s e¨S jÔ1ð &°cð &ð &ð &ð &ð &ð &ð &ð &ð &ð &r   rÛ   c                   ó`   ‡ — e Zd ZdZdedefˆ fd„Zdededdfd	„Zdedefd
„Z	deddfd„Z
ˆ xZS )rV   zn
    Shim to redirect to main config.
    `config.triton.cudagraphs` maps to _config["triton.cudagraphs"]
    r]   r>   c                 ó�   •— t          ¦   «                              d|¦  «         t          ¦   «                              d|¦  «         d S )Nrb   Ú_prefix)r�   r�   )r   r]   r>   rd   s      €r   r   zSubConfigProxy.__init__5  s=   ø€ å‰Œ×Ò˜I vÑ.Ô.Ð.Ý‰Œ×Ò˜I vÑ.Ô.Ð.Ð.Ð.r   r'   r1   r(   Nc                 óH   — | j                              | j        |z   |¦  «        S r†   )rb   r�   r  )r   r'   r1   s      r   r�   zSubConfigProxy.__setattr__:  s!   € ØŒ|×'Ò'¨¬°tÑ(;¸UÑCÔCÐCr   c                 óF   — | j                              | j        |z   ¦  «        S r†   )rb   r˜   r  rš   s     r   r˜   zSubConfigProxy.__getattr__=  ó   € ØŒ|×'Ò'¨¬°tÑ(;Ñ<Ô<Ð<r   c                 óF   — | j                              | j        |z   ¦  «        S r†   )rb   r›   r  rš   s     r   r›   zSubConfigProxy.__delattr__@  r  r   )r   r    r!   r"   r÷   r$   r   r�   r   r˜   r›   rù   rú   s   @r   rV   rV   /  sÉ   ø€ € € € € ðð ð
/˜vð /¨sð /ð /ð /ð /ð /ð /ð
D ð D¨Fð D°tð Dð Dð Dð Dð= ð =¨ð =ð =ð =ð =ð= ð =¨ð =ð =ð =ð =ð =ð =ð =ð =r   rV   Úobjr1   c                 óš   — t          | t          ¦  «        r|                      ||¦  «        S t          j                             | ||¦  «        S )z@
    Workaround `mock.patch.object` issue with ConfigModule
    )r   r`   rì   r   r÷   )r  r'   r1   s      r   Úpatch_objectr  D  sD   € õ �#•|Ñ$Ô$ð &Ø�yŠy˜˜uÑ%Ô%Ð%ÝŒ:×Ò˜S $¨Ñ.Ô.Ð.r   r   c                 ód   — t           j                             | ¦  «        }|dk    rdS |dk    rdS |S r*   r-   )r'   r   r1   s      r   Úget_tristate_envr  M  s6   € ÝŒJ�NŠN˜4Ñ Ô €EØ�‚|€|ØˆtØ�‚|€|ØˆuØ€Nr   r†   )5Ú
contextlibr”   rÅ   rK   rm   r.   r°   rH   rl   r  r¥   Údataclassesr   Útypesr   r   rD   r   r   r   r	   r
   r   r   r   Útyping_extensionsr   r   Útorch._utils_internalr   r   ÚintÚfloatr   r%   r$   rM   r9   Útupler“   rS   r2   rf   rt   ra   r÷   rˆ   rT   r`   rÛ   rV   r  r  r&   r   r   ú<module>r&     s  ðØ Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð à 1Ð 1Ð 1Ð 1Ð 1Ð 1ð ð7Sð 7Sð 7Sð 7Sð 7Sñ 7Sô 7Sñ „ð7Sðv �U˜D $ $ t¡*¤*¨c°4¸¸eÀTÐJ€ð˜Sð  X¨d¤^ð ð ð ð ðA *ð A°ð Að Að Að AðH ,Ð ð#¸*ð #ÈÈSÌð #ð #ð #ð #ðL �&‘(”(€ð ð%1ð %1ð %1ð %1ð %1ñ %1ô %1ñ „ð%1ðPLð Lð Lð Lð L�:ñ Lô Lð Lð^&&ð &&ð &&ð &&ð &&�zÔ2ñ &&ô &&ð &&ðR=ð =ð =ð =ð =ñ =ô =ð =ð*/�fð / Cð /°ð /¸6ð /ð /ð /ð /ðð ˜3ð ¨ð ¸À¼ð ð ð ð ð ð r   