Ë
    [^(h—s  ã                   ó6  — 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ee  e!d«      e"e#e$e%e&f	Z' edeeee de"e#e$e%e&f	   ¬	«      Z( e)«       Z*e G d
„ dee(   «      «       Z+er>e*dddddfdee(e)f   dee"   deee"e#e"   f      deee"e#e"   f      dee!   dee"   de(fd„Z,n@e*dddddfdee(e)f   dee"   deee"e#e"   f      deee"e#e"   f      dee!   dee"   de+e(   fd„Z,de"deee e"f      fd„Z-deddfd„Z.dZ/dede$e"   fd„Z0e G d„ d«      «       Z1 G d„ de«      Z2 G d„ d e jf                  «      Z3 G d!„ d"«      Z4d#e)de"d$e)de)fd%„Z5d'de"dedee    fd&„Z6y)(é    N)Ú	dataclass)ÚFunctionTypeÚ
ModuleType)ÚAnyÚCallableÚGenericÚNoReturnÚOptionalÚTYPE_CHECKINGÚTypeVarÚUnion)Ú
deprecated)Úmock)Újustknobs_checkÚT)Úboundc                   ó4  — e Zd ZU dZeeef   ed<   dZe	e
   ed<   dZe	ee
      ed<   dZe	ee
      ed<   dZe	e
   ed<   edddddfdeeef   de	e
   de	ee
ee
   f      de	ee
ee
   f      de	e   de	e
   fd	„Zed
e	ee
ee
   f      de	ee
      fd„«       Zy)Ú_Configa  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 precendence 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 precendence order is from
            left to right.
        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.
        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ÚaliasÚ
value_typec                 óè   — || _         || _        t        j                  |«      | _        t        j                  |«      | _        || _        || _        | j                  �|t        u r|€|€|�J d«       ‚y y )NzCif alias is set, none of {default, justknob and env var} can be set)	r   r   r   Ú string_or_list_of_string_to_listr   r   r   r   Ú_UNSET_SENTINEL)Úselfr   r   r   r   r   r   s          úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/utils/_config_module.pyÚ__init__z_Config.__init__W   s�   € ð ˆŒØ ˆŒÜ '× HÑ HØó!
ˆÔô &×FÑFÀ~ÓVˆÔØ$ˆŒØˆŒ
Ø�:‰:Ð!àœ?Ñ*ØÐ$Ø$Ð,Ø"Ð*ð	Uð
 UóUð+ð +ð "ó    ÚvalÚreturnc                 óV   — | €y t        | t        «      r| gS t        | t        «      sJ ‚| S ©N)Ú
isinstanceÚstrÚlist)r"   s    r   r   z(_Config.string_or_list_of_string_to_listq   s2   € ð ˆ;ØÜ�cœ3ÔØ�5ˆLÜ˜#œtÔ$Ð$Ð$Øˆ
r!   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚobjectÚ__annotations__r   r
   r'   r   r(   r   r   r   Útyper    Ústaticmethodr   © r!   r   r   r   )   s.  … ñ$ðL �1�f�9ÑÓØ"€Hˆh�s‰mÓ"Ø,0Ð�h˜t C™yÑ)Ó0Ø*.€N�H˜T #™YÑ'Ó.Ø€Eˆ8�C‰=Óð %4Ø"&Ø<@Ø:>Ø%)Ø#ñUà�q˜&�yÑ!ðUð ˜3‘-ðUð # 5¨¨d°3©i¨Ñ#8Ñ9ð	Uð
 !  s¨D°©I ~Ñ!6Ñ7ðUð ˜T‘NðUð ˜‰}óUð4 ðØ�e˜C  c¡˜NÑ+Ñ,ðà	�$�s‘)Ñ	òó ñr!   r   r   r   r   r   r   r   r#   c                  ó   — y r%   r1   ©r   r   r   r   r   r   s         r   ÚConfigr4   ƒ   s   € ð 	r!   c                 ó"   — t        | |||||«      S r%   )r   r3   s         r   r4   r4   �   s   € ô Ø�XÐ/°ÀÈUó
ð 	
r!   Únamec                 ó\   — t         j                  j                  | «      }|dk(  ry|dk(  ry|S ©NÚ1TÚ0F©ÚosÚenvironÚget)r6   Úvalues     r   Ú_read_env_variabler@   œ   s-   € Ü�J‰J�N‰N˜4Ó €EØ�‚|ØØ�‚|ØØ€Lr!   Ú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‰ _        y)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y)ú3install_config_module.<locals>.ConfigModuleInstance>   Ú	_is_dirtyÚ_hash_digestr.   N)r)   r*   r+   ÚsetÚ_bypass_keysr1   r!   r   ÚConfigModuleInstancerD   ¬   s   „ áÒKÓL‰r!   rI   ÚsourceÚdestÚprefixr#   Nc                 óØ  •— t         j                  dd dk  rt        | di «      }nt        j                  | «      }t        | j                  j                  «       «      D �]‰  \  }}|j                  d«      sQt        |t        t        f«      s;t        |d«      r|j                  dk(  s t        |t        «      rt        |t         «      rŒj|› |› �}|j#                  |d«      }t        |t$        «      r+t'        t!        ||¬«      «      ‰	|<   |‰
u sŒ°t)        ‰
|«       Œ½t        |t         «      r6|�|j*                  €||_        t'        |«      ‰	|<   |‰
u sŒõt)        ‰
|«       �Œt        |t        «      r[|j                  ‰
j,                  k(  sJ ‚t/        ‰
|› d	�«      } ‰|||› d	�«       |‰
u rt1        |||«       �Œ]||j                  |<   �Œnt3        d
|› d|› dt        |«      › d�«      ‚ y)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_annotationsr(   Ú__dict__ÚitemsÚ
startswithr&   r   r   Úhasattrr*   r/   Ú
issubclassr   r>   ÚCONFIG_TYPESÚ_ConfigEntryÚdelattrr   r)   ÚSubConfigProxyÚsetattrÚAssertionError)rJ   rK   rL   Ú
type_hintsÚkeyr?   r6   Úannotated_typeÚproxyÚconfigrA   Úvisits            €€€r   rk   z$install_config_module.<locals>.visit°   sË  ø€ ô ×Ñ˜B˜QÐ 'Ò)Ü  Ð):¸BÓ?‰Jä ×0Ñ0°Ó8ˆJÜ˜vŸ™×4Ñ4Ó6Ó7ó $	X‰JˆC�à—‘˜tÔ$Ü˜e¤j´,Ð%?Ô@Ü˜E <Ô0°U×5EÑ5EÈÒ5Qä˜u¤dÔ+´
¸5Ä'Ô0Jàà�X˜c˜UÐ#ˆDØ'Ÿ^™^¨C°Ó6ˆNÜ˜%¤Ô.Ü+Ü E°nÔEó ��t‘ð ˜6’>Ü˜F CÕ(Ü˜E¤7Ô+Ø!Ð-°%×2BÑ2BÐ2JØ'5�EÔ$ä+¨EÓ2��t‘à˜6’>Ü˜F CÖ(Ü˜E¤4Ô(Ø×'Ñ'¨6¯?©?Ò:Ð:Ð:ä& v°$°°q¨zÓ:�Ù�e˜U t f¨A JÔ/Ø˜6‘>Ü˜D # uÖ-à).�D—M‘M #Ó&ä$Ð'8¸¸¸Q¸u¸gÀRÌÈUËÀ}ÐTUÐ%VÓWÐWñI$	Xr!   Ú T)ÚConfigModuler   r   r/   rc   r'   Ú-get_assignments_with_compile_ignored_commentsÚ_configÚ_compile_ignored_keysÚ	__class__rE   rF   )rA   rI   Úcompile_ignored_keysrj   rk   s   `  @@r   Úinstall_config_modulers   ¥   s™   ú€ ôMœ|ô Mð.XÜ”j¤$Ð&Ñ'ð.Xä”J¤Ð.Ñ/ð.Xô ð.Xð 
÷	.Xð` ')€FäHÈÓPÐá	ˆ&�&˜"ÔØ€F„NØ#7€FÔ Ø+€FÔØ€FÔØ€FÕr!   z@compile_ignoredc                 óö  — t        j                  | «      }t        «       }t        j                  t	        j
                  |j                  d«      «      j                  «      }d}d}|D ]ü  }|j                  t        j                  k(  rJd}|j                  j                  «       }t        |v sŒE|dk(  sJ dt        › �«       ‚||j                  d   f}Œj|j                  t        j                  k(  r|rŒŠ|j                  }Œ—|j                  t        j                  k(  sŒµ|j                  dk(  sŒÅt        |d   v r+|d   |j                  d   dz
  k(  r|j!                  |«       d}d}Œþ |dk(  sJ dt        › �«       ‚|S )Núutf-8)rl   éÿÿÿÿrl   zunconsumed r   rT   é   )rY   Ú	getsourcerG   ÚtokenizeÚioÚBytesIOÚencodeÚreadliner/   ÚCOMMENTÚstringÚstripÚCOMPILE_IGNORED_MARKERÚstartÚNAMEÚOPÚadd)rA   Úsource_codeÚassignmentsÚtokensÚcurrent_commentÚ	prev_nameÚtokenÚmaybe_currents           r   rn   rn   ð   si  € Ü×#Ñ# FÓ+€KÜ“%€Kô ×ÑœrŸz™z¨+×*<Ñ*<¸WÓ*EÓF×OÑOÓP€FØ€OØ€Iàò ˆØ�:‰:œ×)Ñ)Ò)ØˆIØ!ŸL™L×.Ñ.Ó0ˆMÜ%¨Ò6Ø&ð +ò ð :ð !Ô!7Ð 8Ð9ó:ð ð #0°·±¸Q±Ð"?‘Ø�Z‰Zœ8Ÿ=™=Ò(ò Ø!ŸL™L‘	Ø�Z‰Zœ8Ÿ;™;Ó&¨5¯<©<¸3Ó+>ô '¨/¸!Ñ*<Ñ<Ø# AÑ&¨%¯+©+°a©.¸1Ñ*<Ò<à—‘ 	Ô*Ø"(�Ø‰Ið1ð2 ˜hÒ&ÐN¨+Ô6LÐ5MÐ(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Ze	e
   ed
<   defd„Zy)ra   r   r   Úuser_overrideNr   Úenv_value_forceÚenv_value_defaultFÚhider   rj   c                 óþ  — |j                   | _         |j                  �|j                  nt        | j                   «      | _        |j                  | _        |j                  | _        |j
                  �'|j
                  D ]  }t        |«      x}€Œ|| _         n |j                  �'|j                  D ]  }t        |«      x}€Œ|| _	         n | j                  �;| j                   �/t        | j                   t        «      sJ d| j                   › d�«       ‚| j                  �_|j
                  €|j                  �F| j                  t        t        t        t           t        t           fv sJ d| j                  › d�«       ‚y y y )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   r@   r�   r   r�   r&   Úboolr'   r
   )r   rj   r"   Ú	env_values       r   r    z_ConfigEntry.__init__2  s†  € Ø—~‘~ˆŒà!'×!2Ñ!2Ð!>ˆF×ÒÄDÈÏÉÓDVð 	Œð Ÿ™ˆŒØ—\‘\ˆŒ
Ø×"Ñ"Ð.Ø×.Ñ.ò �Ü!3°CÓ!8Ð8�IÑEØ-6�DÔ*Ùðð × Ñ Ð,Ø×,Ñ,ò �Ü!3°CÓ!8Ð8�IÑEØ+4�DÔ(Ùðð �=‰=Ð$¨¯©Ð)AÜØ—‘œdôð Sà2°4·<±<°.Ð@QÐRóSð ð �?‰?Ð&Ø×#Ñ#Ð/°6×3HÑ3HÐ3Tà—?‘?ÜÜÜœ‘Üœ‘ð	'ñ ð kð
 NÈdÏoÉoÐM^Ð^iÐjókñ ð 4Uð 'r!   )r)   r*   r+   r   r.   r/   r   rŽ   r   r
   r'   r�   r�   r‘   r“   r   r   r    r1   r!   r   ra   ra     sf   … ð ƒLàÓð )€M�3Ó(à"€Hˆh�s‰mÓ"à*€O�SÓ*Ø,Ð�sÓ,ð €Dˆ$ÓØ€Eˆ8�C‰=Óðk˜wô kr!   ra   c                   óz  ‡ — 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	eeef      fd„Zdedefd„Zde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 )0rm   ro   rH   rp   rE   rF   r#   Nc                 ó(   — t        dt        › d�«      ‚)Nzuse z-.install_config_module(sys.modules[__name__]))ÚNotImplementedErrorr)   ©r   s    r   r    zConfigModule.__init__`  s   € Ü!Ø”8�*ÐIÐJó
ð 	
r!   r6   r?   c                 óf  •— || j                   v rt        ‰| �	  ||«       y || j                  vrt	        | j
                  › d|› d�«      ‚| j                  |   j                  � | j                  | j                  |   |«       y || j                  |   _        d| _	        d| j                  |   _
        y )NrS   ú does not existTF)rH   ÚsuperÚ__setattr__ro   ÚAttributeErrorr)   r   Ú_set_alias_valrŽ   rE   r‘   )r   r6   r?   rq   s      €r   rœ   zConfigModule.__setattr__e  sŸ   ø€ Ø�4×$Ñ$Ñ$Ü‰GÑ  eÕ,Ø˜Ÿ™Ñ%Ü  D§M¡M ?°!°D°6¸Ð!IÓJÐJØ�\‰\˜$Ñ×%Ñ%Ð1Ø×Ñ §¡¨TÑ 2°EÕ:à/4ˆD�L‰L˜ÑÔ,Ø!ˆDŒNØ&+ˆD�L‰L˜ÑÕ#r!   c                 óÐ  — 	 | j                   |   }|j                  rt        | j                  › d|› d�«      ‚| j	                  |«      }|t
        ur|S |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«      r0t!        j"                  |j                  «      |_        |j                  S |j                  S # t$        $ r!}t        | j                  › d|› d�«      |‚d }~ww xY w)NrS   rš   )r6   r   )ro   r‘   r�   r)   Ú_get_alias_valr   r�   rŽ   r�   r   r   r   r&   r(   rG   ÚdictÚcopyÚdeepcopyÚKeyError)r   r6   rj   Ú	alias_valÚes        r   Ú__getattr__zConfigModule.__getattr__q  s7  € ð!	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D; ÁD; Á1D; ÂD; Â-,D; ÃAD; Ä/D; Ä;	E%ÅE Å E%c                 ój   — d| _         t        | j                  |   _        d| j                  |   _        y ©NT)rE   r   ro   rŽ   r‘   ©r   r6   s     r   Ú__delattr__zConfigModule.__delattr__•  s-   € ØˆŒô ,;ˆ�‰�TÑÔ(Ø"&ˆ�‰�TÑÕr!   Úentryc                 ó¸   — |j                   }|€y |j                  dd«      \  }}	 t        j                  |«      }||fS # t        $ r}t        d«      |‚d }~ww xY w)NrS   rw   z#config alias {alias} does not exist)r   ÚrsplitÚ	importlibÚimport_moduleÚImportErrorr�   )r   r¬   r   Úmodule_nameÚconstant_namerA   r¦   s          r   Ú_get_alias_module_and_namez'ConfigModule._get_alias_module_and_nameœ  so   € ð —‘ˆØˆ=ØØ%*§\¡\°#°qÓ%9Ñ"ˆ�]ð	OÜ×,Ñ,¨[Ó9ˆFð �}Ð$Ð$øô ò 	OÜ Ð!FÓGÈQÐNûð	Oús   ¦? ¿	AÁAÁAc                 óZ   — | j                  |«      }|€t        S |\  }}t        ||«      }|S r%   )r´   r   rX   )r   r¬   ÚdatarA   r³   Úconstant_values         r   r    zConfigModule._get_alias_val©  s9   € Ø×.Ñ.¨uÓ5ˆØˆ<Ü"Ð"Ø $Ñˆ�Ü  ¨Ó7ˆØÐr!   r"   c                 óR   — | j                  |«      }|€J ‚|\  }}t        |||«       y r%   )r´   rd   )r   r¬   r"   r¶   rA   r³   s         r   rž   zConfigModule._set_alias_val±  s4   € Ø×.Ñ.¨uÓ5ˆØÐÐÐØ $Ñˆ�Ü�˜ sÕ+r!   c                 ó�  — | j                   |   }|j                  t        u xs |j                  |j                  k(  }|j                  t        u xs |j                  |j                  k(  }|j
                  t        u }t        |j                  t        t        t        f«      r|xs |j
                  |j                  k(  }|xr |xr |S )z†
        Returns true if the config is at its default value.
        configs overriden by the env are not considered default.
        )
ro   r�   r   r   r�   rŽ   r&   r(   rG   r¡   )r   r6   Ú
config_valÚnot_set_env_defaultÚnot_set_env_forceÚunsets         r   Ú_is_defaultz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                 ó
  ‡— i }| j                   D ]p  Š|r‰|v rŒ
|rt        ˆfd„|D «       «      rŒ!|r| j                  ‰«      rŒ5| j                   ‰   j                  �ŒOt	        j
                  t        | ‰«      «      |‰<   Œr |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.
        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   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr%   )r]   )Ú.0rL   rg   s     €r   ú	<genexpr>z)ConfigModule._get_dict.<locals>.<genexpr>ê  s   øè ø€ ÒM°&�s—~‘~ f×-ÑMùs   ƒ)ro   Úanyr¾   r   r¢   r£   rX   )r   r¿   rÀ   rÁ   rj   rg   s        @r   Ú	_get_dictzConfigModule._get_dictÏ  sŠ   ø€ ð, "$ˆØ—<‘<ò 
	<ˆCÙ  |Ñ 3ØÙÜÓMÐ<LÔMÔMØÙ × 0Ñ 0°Ô 5ØØ�|‰|˜CÑ ×&Ñ&Ð2ØÜŸ-™-¬°°cÓ(:Ó;ˆF�3ŠKð
	<ð ˆr!   Úconfig_namec                 ó4   — | j                   |   j                  S r%   )ro   r   )r   rÈ   s     r   Úget_typezConfigModule.get_typeô  s   € Ø�|‰|˜KÑ(×3Ñ3Ð3r!   c                 ój   — t        | dg «      }t        j                  | j                  |¬«      d¬«      S )z Convert config to a pickled blobÚ_save_config_ignore©r¿   rN   )Úprotocol)rX   ÚpickleÚdumpsrÇ   )r   r¿   s     r   Úsave_configzConfigModule.save_config÷  s3   € ä˜tÐ%:¸BÓ?ˆÜ�|‰|Ø�N‰N¨ˆNÓ5Øô
ð 	
r!   c                 ód   — dg}|j                  t        | dg «      «       | j                  |¬«      S )z!Convert config to portable formatÚ_Ú_cache_config_ignore_prefix)rÀ   )ÚextendrX   rÇ   )r   Úprefixess     r   Úsave_config_portablez!ConfigModule.save_config_portableÿ  s0   € à�5ˆØ�‰œ Ð&CÀRÓHÔIØ�~‰~¨xˆ~Ó8Ð8r!   c                 ó  ‡‡‡	‡
‡— t        «       Š
dt        dt        dt        fd„Šdt        ddfˆˆ
fd„Šdt        t
        t         f   dt
        t           fˆfd„Šdt        dt        fd	„Š	dt        fˆˆˆ	ˆfd
„}g }| j                  }| j                  t        | dg «      d¬«      j                  «       D ]  \  }}|j                   ||||«      «       Œ  ‰
D ]  }|j                  dd|› �«       Œ dj                  |«      S )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                 óD   — | j                   }|dk(  rd}|r
|dk7  r|dz  }|S )NÚbuiltinsrl   rS   )r*   )rÙ   rÚ   r²   s      r   Úget_module_namez4ConfigModule.codegen_config.<locals>.get_module_name  s2   € ØŸ/™/ˆKØ˜jÒ(Ø �Ù˜;¨"Ò,Ø˜sÑ"�ØÐr!   Nc                 ó@   •—  ‰| d«      }|r‰j                  |«       y y )NF)r…   )rÙ   r²   rÝ   Úimportss     €€r   Ú
add_importz/ConfigModule.codegen_config.<locals>.add_import  s#   ø€ Ù)¨$°Ó6ˆKÙØ—‘˜KÕ(ð r!   Úvc                 óX   •— | D �cg c]  } ‰|d«      › |j                   › �‘Œ c}S c c}w r©   )r)   )rá   ÚitemrÝ   s     €r   Úlist_of_callables_to_stringz@ConfigModule.codegen_config.<locals>.list_of_callables_to_string  s,   ø€ ØPQÖRÈ‘ t¨TÓ2Ð3°D·M±M°?ÒCÒRÐRùÒRs   †'c                 óP   — t        | «      xr t        | d«      xr t        | d«      S )Nr*   r)   )Úcallabler^   )rá   s    r   Úimportable_callablez8ConfigModule.codegen_config.<locals>.importable_callable  s$   € ä˜A“;ÒV¤7¨1¨lÓ#;ÒVÄÈÈ:Ó@VÐVr!   c                 ó\  •—  ‰|«      r% ‰|«       | › d|› d ‰|d«      › |j                   › �S t        |t        t        f«      r_t	        ˆfd„|D «       «      rK|D ]
  } ‰|«       Œ  ‰|«      }t        |t        «      r
| › d|› d|› �S | › d|› ddj                  |«      › d�S | › d|› d|›�S )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 }
            rS   z = Tc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr%   r1   )rÄ   rã   rç   s     €r   rÅ   zGConfigModule.codegen_config.<locals>.get_config_line.<locals>.<genexpr>/  s   øè ø€ ò 4Ø.2Ñ# D×)ñ4ùs   ƒz = { z, z })r)   r&   r(   rG   ÚallÚjoin)	ÚmodÚkrá   rã   Úv_listrà   rÝ   rç   rä   s	        €€€€r   Úget_config_linez4ConfigModule.codegen_config.<locals>.get_config_line!  sÛ   ø€ ñ # 1Ô%Ù˜1”Ø˜˜a ˜s #¡o°a¸Ó&>Ð%?ÀÇ
Á
¸|ÐLÐLÜ˜A¤¤c˜{Ô+´ó 4Ø67ô4ô 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 ú
)rG   r   r“   r'   r   r(   r   r)   rÇ   rX   r\   ÚappendÚinsertrë   )r   rï   Úlinesrì   rí   rá   Úimport_namerà   rÝ   rç   rß   rä   s          @@@@@r   Úcodegen_configzConfigModule.codegen_config  s  ü€ ô “%ˆð	¤(ð 	´Tð 	¼có 	ð	)œXð 	)¨$ö 	)ð
	S¬5´´s°Ñ+;ð 	SÄÄSÁ	õ 	Sð	W¤3ð 	W¬4ó 	Wð	,¬#÷ 	,ð 	,ð6 ˆØ�m‰mˆØ—N‘NÜ  Ð'<¸bÓAÐPTð #ó 
ç
‰%‹'ò	5‰DˆAˆqð �L‰L™¨¨a°Ó3Õ4ð	5ð #ò 	5ˆKØ�L‰L˜˜g k ]Ð3Õ4ð	5à�y‰y˜ÓÐr!   c                 óX  — | j                   s| j                  €‡| j                  t        | j                  «      ¬«      }t        t        |j                  «       «      «      }t        j                  |j                  d«      d¬«      j                  «       | _        d| _         | j                  S )z/Hashes the configs that are not compile_ignoredrÍ   ru   F)Úusedforsecurity)rE   rF   rÇ   r(   rp   ÚreprÚsortedr\   ÚhashlibÚmd5r|   Údigest)r   Údict_to_hashÚstring_to_hashs      r   Úget_hashzConfigModule.get_hashF  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                 ó"   — | j                  «       S r%   ©Úget_config_copyr˜   s    r   Úto_dictzConfigModule.to_dictQ  ó   € ð ×#Ñ#Ó%Ð%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                 ó"   — | j                  «       S r%   r  r˜   s    r   Úshallow_copy_dictzConfigModule.shallow_copy_dictZ  r  r!   Úmaybe_pickled_configc                 óæ   — t        |t        «      st        j                  |«      }n|}|j	                  «       D ]6  \  }}|| j
                  v rt        | ||«       Œ"ddlm}  |d|› d|› d�«       Œ8 y)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\   ro   rd   Útorch._dynamo.utilsr
  )r   r  rj   rí   rá   r
  s         r   Úload_configzConfigModule.load_configc  so   € äÐ.´Ô5Ü—\‘\Ð"6Ó7‰Fà)ˆFØ—L‘L“Nò 	V‰DˆAˆqØ�D—L‘LÑ Ü˜˜a Õ#å9á˜D   <°¨sÐ2SÐTÕUñ	Vr!   c                 ó"   — | j                  «       S r%   )rÇ   r˜   s    r   r  zConfigModule.get_config_copyq  s   € Ø�~‰~ÓÐr!   Úarg1Úarg2ÚkwargsÚContextDecoratorc                 óü   ‡‡‡— |�1|�t        |t        «      sJ ‚||iŠnt        |t        «      sJ ‚|Š|rJ ‚|Š|�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):
                ...
        zexpected `dict` got c                   ó*   •— e Zd Zdˆ ˆˆfd„Zˆˆfd„Zy)ú'ConfigModule.patch.<locals>.ConfigPatchNc                 ó´   •— ‰rJ ‚‰j                  «       D ]  }‰j                  |«      ‰|<   Œ ‰j                  «       D ]  \  }}‰j                  ||«       Œ y r%   )Úkeysr§   r\   rœ   )r   rg   rí   rá   Úchangesrj   Úpriors       €€€r   Ú	__enter__z1ConfigModule.patch.<locals>.ConfigPatch.__enter__ž  s_   ø€ Ù Ð �yØ"Ÿ<™<›>ò 9�Cà!'×!3Ñ!3°CÓ!8�E˜#’Jð9ð $ŸM™M›Oò -‘D�A�qØ×&Ñ& q¨!Õ,ñ-r!   c                 óz   •— ‰j                  «       D ]  \  }}‰j                  ||«       Œ ‰j                  «        y r%   )r\   rœ   Úclear)r   Úexc_typeÚexc_valÚexc_tbrí   rá   rj   r  s         €€r   Ú__exit__z0ConfigModule.patch.<locals>.ConfigPatch.__exit__¦  s5   ø€ Ø!ŸK™K›Mò -‘D�A�qØ×&Ñ& q¨!Õ,ð-à—‘•r!   ©r#   N)r)   r*   r+   r  r   )r  rj   r  s   €€€r   ÚConfigPatchr  �  s   ø„ ÷-ör!   r"  )r&   r'   r¡   r/   r  )r   r  r  r  r"  r  rj   r  s        @@@r   ÚpatchzConfigModule.patcht  sŸ   ú€ ð. ÐØÐÜ! $¬Ô,Ð,Ð,à ˜,‘ä! $¬Ô-Ð-Ð-à�ÙÐ�:ð ˆGØ�<Ð�<Ü˜'¤4Ô(ÐPÐ,@ÄÀgÃÀÐ*PÓPÐ(Ø "ˆØˆ÷	ð 	Ô*ô 	ñ ‹}Ðr!   r  c                 óJ   ‡ ‡‡— ‰ 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                  ó¶   •‡— ‰D � ci c]  } | ‰|    j                   “Œ c} Š‰j                  «       D ]  \  } }|‰j                  |    _         Œ dˆˆfd„}|S c c} w )Nc                  ó^   •— ‰j                  «       D ]  \  } }|‰j                  |    _        Œ y r%   )r\   ro   rŽ   )rí   rá   r  r   s     €€r   ÚrevertzBConfigModule._make_closure_patcher.<locals>.change.<locals>.revertÆ  s,   ø€ Ø!ŸK™K›Mò 6‘D�A�qØ45�D—L‘L ‘OÕ1ñ6r!   r!  )rŽ   r\   ro   )rí   rá   r'  r  r  rj   r   s      @€€€r   Úchangez2ConfigModule._make_closure_patcher.<locals>.changeÁ  s]   ù€ Ø9@ÖA°A�Q˜˜q™	×/Ñ/Ñ/ÒAˆEØŸ™›ò 2‘��1Ø01�—‘˜Q‘Õ-ð2ö6ð ˆMùò Bs   ‡A)ro   r   )r   r  r(  rj   s   `` @r   Ú_make_closure_patcherz"ConfigModule._make_closure_patcher­  s*   ú€ ð$ —‘ˆð		œ  T Ñ*÷ 		ð ˆr!   r!  )NNF)NN))r)   r*   r+   r¡   r'   ra   r.   rG   r“   r
   Úbytesr    r-   rœ   r   r§   r«   Útupler   r´   r    rž   r¾   r(   rÇ   r/   rÊ   rÑ   r×   rõ   rÿ   r   ÚFutureWarningr  r  r   r  r  r#  r)  Ú__classcell__©rq   s   @r   rm   rm   T  s“  ø… ð �#�|Ð#Ñ$Ó$Ø�c‘(ÓØ˜s™8Ó#ØƒOØ˜5‘/Ó!ó
ð

, ð 
,¨Fð 
,°tõ 
,ð"R ð "R¨ó "RðH' ð '¨ó 'ð%Ø!ð%à	�%˜
 C˜Ñ(Ñ	)ó%ð Lð °Só ð, Lð ,°sð ,¸tó ,ðC ð C¨ó Cð4 -1Ø04Ø"ñ	#à˜t C™yÑ)ð#ð # 4¨¡9Ñ-ð#ð ð	#ð
 
ˆc�3ˆh‰ó#ðJ4 Cð 4¨Dó 4ð
˜Uó 
ð9 d¨3°¨8¡nó 9ð?  ó ? ðB	!˜%ó 	!ñ ð	8ð ô	ð&˜˜c 3˜h™ò &óð&ñ ð	8ð ô	ð& 4¨¨S¨¡>ò &óð&ðV°°e¸TÀ#ÀsÀ(¹^Ð6KÑ0Lð VÐQUó Vð   c¨3 h¡ó  ð
 6:Øñ7à�u˜S $ s¨C x¡.Ð0Ñ1Ñ2ð7ð ð7ð �s˜C�x‘.ð	7ð
 
ó7ðr¨t°C¸°H©~ð À#÷ r!   rm   c                   óL   ‡ — 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#   c                 ó   — t        d«      ‚©NÚNYI©r—   r˜   s    r   r  zContextDecorator.__enter__Õ  ó   € Ü! %Ó(Ð(r!   c                 ó   — t        d«      ‚r1  r3  )r   r  r  r  s       r   r   zContextDecorator.__exit__Ø  r4  r!   rÙ   c                 óü   •‡ — t        |t        «      r\t        |t        j                  «      rB G ˆ fd„d|«      }|j
                  |_        |j                  |_        |j                  |_        |S t        ‰‰ �%  |«      S )Nc                   óF   •‡ — e Zd Zedˆ ˆfd„«       Zedˆ ˆfd„«       Zˆ xZS )ú,ContextDecorator.__call__.<locals>._TestCasec                 ó†   •— ‰j                  «        	 t        ‰| �	  «        y # t        $ r ‰j	                  d d d «       ‚ w xY wr%   )r  r›   Ú
setUpClassÚ	Exceptionr   ©Úclsrq   r   s    €€r   r:  z7ContextDecorator.__call__.<locals>._TestCase.setUpClassß  s?   ø€ à—N‘NÔ$ðÜ™Ñ*Õ,øÜ$ò ØŸ™ d¨D°$Ô7Øðús	   “" ¢A c                 óz   •— 	 t         ‰| �  «        ‰j                  d d d «       y # ‰j                  d d d «       w xY wr%   )r›   ÚtearDownClassr   r<  s    €€r   r?  z:ContextDecorator.__call__.<locals>._TestCase.tearDownClassè  s4   ø€ ð8Ü™Ñ-Ô/àŸ™ d¨D°$Õ7ø˜Ÿ™ d¨D°$Õ7ús   ƒ% ¥:r!  )r)   r*   r+   Úclassmethodr:  r?  r-  )rq   r   s   @€r   Ú	_TestCaser8  Þ  s)   ù„ Øõó ðð õ8ó ô8r!   rA  )
r&   r/   r_   ÚunittestÚTestCaser)   r+   r*   r›   Ú__call__)r   rÙ   rA  rq   s   `  €r   rD  zContextDecorator.__call__Û  sf   ù€ Ü�dœDÔ!¤j°´x×7HÑ7HÔ&Iö8˜Dô 8ð" "&§¡ˆIÔØ%)×%6Ñ%6ˆIÔ"Ø#'§?¡?ˆIÔ àÐä‰wÑ Ó%Ð%r!   r!  )r)   r*   r+   r,   r  r	   r   r   r   rD  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 )rc   zn
    Shim to redirect to main config.
    `config.triton.cudagraphs` maps to _config["triton.cudagraphs"]
    rj   rL   c                 óF   •— t         ‰| �  d|«       t         ‰| �  d|«       y )Nro   Ú_prefix)r›   rœ   )r   rj   rL   rq   s      €r   r    zSubConfigProxy.__init__þ  s!   ø€ ä‰Ñ˜I vÔ.Ü‰Ñ˜I vÕ.r!   r6   r?   r#   Nc                 óT   — | j                   j                  | j                  |z   |«      S r%   )ro   rœ   rG  )r   r6   r?   s      r   rœ   zSubConfigProxy.__setattr__  s"   € Ø�|‰|×'Ñ'¨¯©°tÑ(;¸UÓCÐCr!   c                 óR   — | j                   j                  | j                  |z   «      S r%   )ro   r§   rG  rª   s     r   r§   zSubConfigProxy.__getattr__  ó    € Ø�|‰|×'Ñ'¨¯©°tÑ(;Ó<Ð<r!   c                 óR   — | j                   j                  | j                  |z   «      S r%   )ro   r«   rG  rª   s     r   r«   zSubConfigProxy.__delattr__	  rJ  r!   )r)   r*   r+   r,   r-   r'   r    rœ   r   r§   r«   r-  r.  s   @r   rc   rc   ø  s_   ø„ ñð
/˜vð /¨sõ /ð
D ð D¨Fð D°tó Dð= ð =¨ó =ð= ð =¨÷ =r!   rc   Úobjr?   c                 óˆ   — t        | t        «      r| j                  ||«      S t        j                  j	                  | ||«      S )z@
    Workaround `mock.patch.object` issue with ConfigModule
    )r&   rm   r#  r   r-   )rL  r6   r?   s      r   Úpatch_objectrN    s8   € ô �#”|Ô$Ø�y‰y˜˜uÓ%Ð%Ü�:‰:×Ñ˜S $¨Ó.Ð.r!   c                 ó\   — t         j                  j                  | «      }|dk(  ry|dk(  ry|S r8   r;   )r6   r   r?   s      r   Úget_tristate_envrP    s-   € Ü�J‰J�N‰N˜4Ó €EØ�‚|ØØ�‚|ØØ€Nr!   r%   )7Ú
contextlibr¢   rú   r¯   rY   rz   r<   rÏ   rV   ry   rB  Údataclassesr   Útypesr   r   rR   r   r   r   r	   r
   r   r   r   Útyping_extensionsr   r   Útorch._utils_internalr   ÚintÚfloatr“   r/   r'   r(   rG   r+  r¡   r`   r   r-   r   r   r4   r@   rs   r�   rn   ra   rm   r  rc   rN  rP  r1   r!   r   ú<module>rX     sÇ  ðÛ Û Û Û Û Û 	Û 	Û Û 
Û Û Ý !ß *÷	÷ 	ó 	õ )Ý å 1ð �U˜D¡$ t£*¨c°4¸¸eÀTÐJ€ñ ˆC�u˜S %¨¨t°S¸$ÀÀUÈDÐPÑQÔR€ñ “(€ð ôPˆg�a‰jó Pó ðPñn ð %4Ø"&Ø<@Ø:>Ø%)Ø#ñØ�q˜&�yÑ!ðà˜3‘-ðð # 5¨¨d°3©i¨Ñ#8Ñ9ðð !  s¨D°©I ~Ñ!6Ñ7ð	ð
 ˜T‘Nðð ˜‰}ðð 
ôð %4Ø"&Ø<@Ø:>Ø%)Ø#ñ

Ø�q˜&�yÑ!ð

à˜3‘-ð

ð # 5¨¨d°3©i¨Ñ#8Ñ9ð

ð !  s¨D°©I ~Ñ!6Ñ7ð	

ð
 ˜T‘Nð

ð ˜‰}ð

ð 
�‰ó

ð˜Sð  X¨e°D¸#°IÑ.>Ñ%?ó ðD *ð D°ó DðN ,Ð ð#¸*ð #ÈÈSÉó #ðL ÷:kð :kó ð:kôzx�:ô xôv&&�z×2Ñ2ô &&÷R=ñ =ð*/�fð / Cð /°ð /¸6ó /ñ˜3ð ¨ð ¸À¹ô r!   