
    <ЦiU              	          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
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JrJr  S SKJr  S SK	Jr  S SKJr  \ " S S	5      5       r\\ \!\"" S5      \#\$\%\&\'4	r(S
\#S\\!   4S jr)S\SS4S jr*Sr+S\S\\#   4S jr,\-" 5       r.\ " S S5      5       r/ " S S\5      r0 " S S\ Rb                  5      r1 " S S5      r2S\-S
\#S\-S\-4S jr3SS
\#S\S\\!   4S jjr4g)    N)	dataclass)FunctionType
ModuleType)AnyCallableDictListNoReturnOptionalSetUnion)
deprecated)mock)justknobs_checkc                       \ rS rSr% SrSr\\S'   Sr\	\
   \S'   Sr\	\
   \S'   Sr\	\
   \S'   Sr\	\   \S	'        SS\S\	\
   S\	\
   S\	\
   S	\	\   4
S
 jj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:
    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                     Xl         X l        X0l        X@l        XPl        U R                  b5  [        U R                   [        5      (       d   SU R                    S35       eg g )Nz!justknobs only support booleans, z is not a boolean)r   r   r   r   r   
isinstancebool)selfr   r   r   r   r   s         Y/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/utils/_config_module.py__init__Config.__init__<   sf       0,$==$d  S24<<.@QRS  %    )r   r   r   r   r   )TNNNN)__name__
__module____qualname____firstlineno____doc__r   r   __annotations__r   r   strr   r   r   typer   __static_attributes__ r    r   r   r      s    > GS"Hhsm"&*hsm*$(NHSM(!%J% "&*.(,%)SS 3-S #3-	S
 !S TNS Sr    r   namereturnc                 ^    [         R                  R                  U 5      nUS:X  a  gUS:X  a  gg N1T0Fosenvironget)r+   values     r   _read_env_variabler6   T   s+    JJNN4 E||r    modulec                   ^ ^^  " S S[         5      nS[        [        [        4   S[        [        [        4   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>.ConfigModuleInstanced   >   	_is_dirty_hash_digestr&   r*   N)r!   r"   r#   r$   set_bypass_keysr)   r*   r    r   ConfigModuleInstancer:   d   s    KLr    r@   sourcedestprefixr,   Nc                   > [         R                  SS S:  a  [        U S0 5      nO[        R                  " U 5      n[        U R                  R                  5       5       GH  u  pEUR                  S5      (       df  [        U[        [        45      (       dK  [        US5      (       a  UR                  S:X  d*  [        U[        5      (       a  [        U[         5      (       a  M  U U 3n[        U["        5      (       a<  UR%                  US5      n['        [!        XWS95      T	U'   UT
L a  [)        T
U5        M  M  [        U[         5      (       a%  ['        U5      T	U'   UT
L a  [)        T
U5        GM  GM  [        U[        5      (       a\  UR                  T
R*                  :X  d   e[-        T
U S	35      nT" XXU S	35        UT
L a  [/        XU5        GMu  XR                  U'   GM  [1        S
U SU S[        U5       S35      e   g)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_TYPESr4   _ConfigEntrydelattrr!   SubConfigProxysetattrAssertionError)rA   rB   rC   
type_hintskeyr5   r+   annotated_typeproxyconfigr7   visits            r   rc   $install_config_module.<locals>.visith   s    BQ') ):B?J 008Jv4467JCt$$ej,%?@@E<00U5E5E5Qud++
5&0I0IXcU#D%..!+T!:+5D t 6>FC( "E6**+E2t6>FC( "E4((''6??:::&v$qz:etfAJ/6>Du-).MM#&$'8QugRU}TU%VWWC 8r     T)ConfigModuler   r   r(   r[   r'   -get_assignments_with_compile_ignored_comments_config_compile_ignored_keys	__class__r<   r=   )r7   r@   compile_ignored_keysrb   rc   s   `  @@r   install_config_modulerl   ]   s    M| M+Xj$&'+XJ./+X +X 
	+X +XZ ')FHP	&&"FN#7F +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  aN  SnUR                  R                  5       n[        U;   a&  US:X  d   S[         35       eXvR                  S   4nMn  Mp  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:X  d   S[         35       eU$ )Nutf-8)re   re   zunconsumed r   rK      )rP   	getsourcer>   tokenizeioBytesIOencodereadliner(   COMMENTstringstripCOMPILE_IGNORED_MARKERstartNAMEOPadd)r7   source_codeassignmentstokenscurrent_comment	prev_nametokenmaybe_currents           r   rg   rg      sn   ##F+K%K rzz+*<*<W*EFOOPFOI::)))I!LL..0M%6& +  : !!7 89:  #0Q"? 7 ZZ8==( !LL	 ZZ8;;&5<<3+> '/!*<<#A&%++a.1*<<	*"(I1 2 h&N+6L5M(NN&r    c                       \ rS rSr% \\S'   \\S'   \r\\S'   Sr	\
\   \S'   \r\\S'   \r\\S'   S	r\\S
'   S\4S jrSrg)rY      r   r   user_overrideNr   env_value_forceenv_value_defaultFhiderb   c                 ^   UR                   U l         UR                  b  UR                  O[        U R                   5      U l        UR                  U l        UR                  b  [        UR                  5      =nb  X l        UR                  b   [        UR                  5      =nb  X l        g g g N)	r   r   r(   r   r   r6   r   r   r   )r   rb   	env_values      r   r   _ConfigEntry.__init__   s    ~~!'!2!2!>FDDV 	 ""./0G0GHH	U)2&  ,/0E0EFF	S'0$ T -r    )r   r   r   r   r   )r!   r"   r#   r$   r   r&   r(   _UNSET_SENTINELr   r   r   r'   r   r   r   r   r   r   r)   r*   r    r   rY   rY      sV     L )M3("Hhsm"*OS*,s, D$1v 1r    rY   c                   Z  ^  \ rS rSr% \\\4   \S'   \\   \S'   \\   \S'   \	\S'   \
\   \S'   S*S	 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 jr   S+S\
\\      S\
\\      S\	S\\\4   4S jjrS\S\4S jrS\4S jrS\\\4   4S 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   4   SS4S  jr S\\\4   4S! jr!  S,S"\
\\\\\4   4      S#\S$\\\4   SS%4S& jjr"S'\\\4   S\4S( jr#S)r$U =r%$ )-rf      rh   r?   ri   r<   r=   r,   Nc                 (    [        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+   r5   c                    > XR                   ;   a  [        TU ]	  X5        g XR                  ;  a  [	        U R
                   SU S35      eX R                  U   l        SU l        SU R                  U   l        g )NrJ    does not existTF)	r?   super__setattr__rh   AttributeErrorr!   r   r<   r   )r   r+   r5   rj   s      r   r   ConfigModule.__setattr__  si    $$$G,% DMM?!D6!IJJ/4LL,!DN&+DLL#r    c                     U R                   U   nUR                  (       a  [        U R                   SU S35      e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)NrJ   r   )r+   r   )rh   r   r   r!   r   r   r   r   r   r   r   r   rR   r>   dictcopydeepcopyKeyError)r   r+   rb   es       r   __getattr__ConfigModule.__getattr__  s   	R\\$'F{{$av_%MNN%%_<---##?:+++''>///*&FOOV^^TT
 &..4d*;<<'+}}V^^'D$+++>>! 	R DMM?!D6!IJPQQ	Rs7   AD, D, ;D, *D, AD,  D, ,
E6EEc                 j    SU l         [        U R                  U   l        SU R                  U   l        g )NT)r<   r   rh   r   r   r   r+   s     r   __delattr__ConfigModule.__delattr__2  s-     ,;T("&Tr    c                 @    U R                   U   R                  [        L $ r   )rh   r   r   r   s     r   _is_defaultConfigModule._is_default9  s    ||D!//?BBr    ignored_keysignored_prefixesskip_defaultc           
        ^ 0 nU R                    H  mU(       aK  TU;   aE  U(       a<  U R                  T5      (       d&  [        R                  " ST S[	        U T5       35        MU  U(       a  [        U4S jU 5       5      (       a  Mx  U(       a  U R                  T5      (       a  M  [        R                  " [	        U T5      5      UT'   M     U$ )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   F   >#    U  H  nTR                  U5      v   M     g 7fr   )rU   ).0rC   r_   s     r   	<genexpr>)ConfigModule._get_dict.<locals>.<genexpr>[  s     M<L&s~~f--<Ls   !)rh   r   warningswarnrO   anyr   r   )r   r   r   r   rb   r_   s        @r   	_get_dictConfigModule._get_dict<  s    , "$<<C| 3(8(8(=(=MM4SEsAS@TU M<LMMM 0 0 5 5--c(:;F3K   r    config_namec                 4    U R                   U   R                  $ r   )rh   r   )r   r   s     r   get_typeConfigModule.get_typeb  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   rE   )protocol)rO   pickledumpsr   )r   r   s     r   save_configConfigModule.save_confige  s3    t%:B?||NNN5
 	
r    c                 ^    S/nUR                  [        U S/ 5      5        U R                  US9$ )z!Convert config to portable format__cache_config_ignore_prefix)r   )extendrO   r   )r   prefixess     r   save_config_portable!ConfigModule.save_config_portablem  s0    5&CRHI~~x~88r    c                     / nU R                   nU R                  [        U S/ 5      SS9R                  5        H  u  p4UR	                  U SU SU< 35        M!     SR                  U5      $ )zConvert config to Python statements that replicate current config.
This does NOT include config settings that are at default values.
r   T)r   r   rJ   z = 
)r!   r   rO   rT   appendjoin)r   linesmodkvs        r   codegen_configConfigModule.codegen_configs  sx     mmNN '<bAPT # 

%'DA LLC5!Cu-. yyr    c                 \   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      5      R                  5       U l        SU l         U R                  $ )z/Hashes the configs that are not compile_ignoredr   rn   F)r<   r=   r   rR   ri   reprsortedrT   hashlibmd5ru   digest)r   dict_to_hashstring_to_hashs      r   get_hashConfigModule.get_hash  s    >>T..6>>tD<V<V7W>XL!&););)=">?N 'N,A,A',J K R R TD"DN   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_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                 "    U R                  5       $ r   r   r   s    r   shallow_copy_dictConfigModule.shallow_copy_dict  r   r    maybe_pickled_configc                    [        U[        5      (       d  [        R                  " U5      nOUnUR	                  5        H?  u  p4X0R
                  ;   a  [        XU5        M"  [        R                  " SU SU S35        MA     g)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   loadsrT   rh   r\   r   r   )r   r   rb   r   r   s        r   load_configConfigModule.load_config  si    .55\\"67F)FLLNDALL #1#\!,MN	 #r    c                 "    U R                  5       $ r   )r   r   s    r   r   ConfigModule.get_config_copy  s    ~~r    arg1arg2kwargsContextDecoratorc                 ,  ^^^ UbA  Ub  [        U[        5      (       d   eX0mO[        U[        5      (       d   eUmU(       a   eOUmUb   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):
        ...
zexpected `dict` got c                   8   > \ rS rSrSU UU4S jjrUU4S jrSrg)'ConfigModule.patch.<locals>.ConfigPatchi  Nc                    > T(       a   eTR                  5        H  nTR                  U5      TU'   M     TR                  5        H  u  p#TR                  X#5        M     g r   )keysr   rT   r   )r   r_   r   r   changesrb   priors       r   	__enter__1ConfigModule.patch.<locals>.ConfigPatch.__enter__  sQ      y"<<>C!'!3!3C!8E#J * $MMODA&&q, ,r    c                 z   > TR                  5        H  u  pETR                  XE5        M     TR                  5         g r   )rT   r   clear)r   exc_typeexc_valexc_tbr   r   rb   r   s         r   __exit__0ConfigModule.patch.<locals>.ConfigPatch.__exit__  s,    !KKMDA&&q, *r    r*   r,   N)r!   r"   r#   r$   r   r  r)   )r   rb   r   s   r   ConfigPatchr     s    - - r    r  )r   r'   r   r(   r   )r   r   r   r   r  r   rb   r   s        @@@r   patchConfigModule.patch  s    . !$,,,,,!$----:v G<<'4((P,@g*PP( "	 	* 	 }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   )rT   rh   r   )r   r   r   r   s     r   revertBConfigModule._make_closure_patcher.<locals>.change.<locals>.revert  s%    !KKMDA45DLLO1 *r    r  )r   rT   rh   )r   r   r  r   r   rb   r   s      @r   change2ConfigModule._make_closure_patcher.<locals>.change  s]    9@AAq	///AE01Q- (6 6 M Bs   A)rh   r   )r   r   r  rb   s   `` @r   _make_closure_patcher"ConfigModule._make_closure_patcher  s/    $ 		T* 		 		 r    )r=   r<   r  )NNF)NN)&r!   r"   r#   r$   r   r'   rY   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  r)   __classcell__rj   s   @r   rf   rf      sD    #|#$$c(s8#O5/!

, ,F ,t ,R R R@' ' 'C C C
 -104"	$tCy)$ #49-$ 	$
 
c3h$L4C 4D 4
U 
9d38n 9
  
 !% ! 	8 	&c3h && 	8 	&4S> &&eT#s(^6K0L QU  c3h  
 6:7uS$sCx.0127 7 sCx.	7
 
7rtCH~ #  r    rf   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$ )
r   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   r   r  r  s       r   r  ContextDecorator.__exit__  r  r    funcc                   >^  [        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	Exceptionr  clsrj   r   s    r   r%  7ContextDecorator.__call__.<locals>._TestCase.setUpClass  s?    NN$*,$ dD$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   tearDownClassr  r'  s    r   r+  :ContextDecorator.__call__.<locals>._TestCase.tearDownClass  s4    8-/dD$7dD$7s   % :r*   r  )	r!   r"   r#   r$   classmethodr%  r+  r)   r  )rj   r   s   @r   	_TestCaser#    s)      8 8r    r.  )
r   r(   rW   unittestTestCaser!   r#   r"   r   __call__)r   r   r.  rj   s   `  r   r1  ContextDecorator.__call__  sl    dD!!jx7H7H&I&I8D 8" "&I%)%6%6I"#'??I w%%r    r*   r  )r!   r"   r#   r$   r%   r   r
   r  r   r   r1  r)   r  r  s   @r   r   r     s<    
))X )&XseSj1 &c & &r    r   c                   r   ^  \ rS rSrSr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$ )r[   i/  zb
Shim to redirect to main config.
`config.triton.cudagraphs` maps to _config["triton.cudagraphs"]
rb   rC   c                 F   > [         TU ]  SU5        [         TU ]  SU5        g )Nrh   _prefix)r   r   )r   rb   rC   rj   s      r   r   SubConfigProxy.__init__5  s!    Iv.Iv.r    r+   r5   r,   Nc                 T    U R                   R                  U R                  U-   U5      $ r   )rh   r   r5  )r   r+   r5   s      r   r   SubConfigProxy.__setattr__:  s"    ||''t(;UCCr    c                 R    U R                   R                  U R                  U-   5      $ r   )rh   r   r5  r   s     r   r   SubConfigProxy.__getattr__=       ||''t(;<<r    c                 R    U R                   R                  U R                  U-   5      $ r   )rh   r   r5  r   s     r   r   SubConfigProxy.__delattr__@  r;  r    r*   )r!   r"   r#   r$   r%   r  r'   r   r   r   r   r   r)   r  r  s   @r   r[   r[   /  sd    
/v /s /
D DF Dt D= = == = = =r    r[   objr5   c                     [        U [        5      (       a  U R                  X5      $ [        R                  R	                  XU5      $ )z8
Workaround `mock.patch.object` issue with ConfigModule
)r   rf   r  r   r  )r>  r+   r5   s      r   patch_objectr@  D  s7     #|$$yy%%::S..r    r   c                 `    [         R                  R                  U 5      nUS:X  a  gUS:X  a  gU$ r.   r1   )r+   r   r5   s      r   get_tristate_envrB  M  s-    JJNN4 E||Nr    r   )5
contextlibr   r   rP   rs   r2   r   rM   rr   r/  r   dataclassesr   typesr   r   rI   r   r   r   r	   r
   r   r   r   typing_extensionsr   r   torch._utils_internalr   r   intfloatr   r(   r'   rR   r>   tupler   rX   r6   rl   rz   rg   r  r   rY   rf   r   r[   r@  rB  r*   r    r   <module>rK     sU       	 	  
    ! * L L L (  1 7S 7S 7Sv UD$t*c4eTJS Xd^ A* A AH , #* #S #L ( %1 %1 %1PL: L^&&z22 &&R= =*/f /C / /6 /3   r    