
    QVjit                        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,nae*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 j3                  Z3 G d! d"          Z4d#e)de"d$e)de)fd%Z5d'de"dedee          fd&Z6dS )(    N)	dataclass)FunctionType
ModuleType)AnyCallableGenericNoReturnOptionalTYPE_CHECKINGTypeVarUnion)
deprecated)mock)justknobs_checkT)boundc                      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dS )_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 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alias
value_typec                     || _         || _        t                              |          | _        t                              |          | _        || _        || _        | j        |t          u r|||J d            d S d S )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          T/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/utils/_config_module.py__init__z_Config.__init__W   s       ' H H!
 !
 &FF~VV$
:!?**$$,"**T +*+ "!
 +*    valreturnc                 l    | d S 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   sB     ;4c3 	5L#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 1f9"Hhsm""",0htCy)000*.NHT#Y'...E8C= %4"&<@:>%)#U Uq&y!U 3-U #5d3i#89	U
 !sDI~!67U TNU }U U U U4 eCcN+,	$s)	   \  r!   r   r   r   r   r   r   r   r#   c                     d S r%   r1   r   r   r   r   r   r   s         r   Configr4      s	     Cr!   c                 *    t          | |||||          S r%   )r   r3   s         r   r4   r4      s$     X/U
 
 	
r!   namec                 d    t           j                            |           }|dk    rdS |dk    rdS |S N1T0Fosenvironget)r6   values     r   _read_env_variabler@      s6    JNN4  E||t||u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 _        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_keysr1   r!   r   ConfigModuleInstancerD      s$        sKKKLLr!   rI   sourcedestprefixr#   Nc                 X   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}| | }|                    |d          }t          |t$                    r6t'          t!          ||                    	|<   |
u rt)          
|           t          |t                     r8||j        ||_        t'          |          	|<   |
u rt)          
|           1t          |t                    rX|j        
j        k    sJ t/          
| d	          } ||| d	           |
u rt1          |||           ||j        |<   t3          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_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   sp    BQB')) ):B??JJ 088Jv446677 $	X $	XJCt$$ej,%?@@ E<00 6;5E5Q5Qud++ 6R0:5'0J0J 6R #c##D'^^C66N%.. X+EnEEE   t 6>>FC(((E7++ X!-%2B2J'5E$+E22t6>>FC(((E4(( 
X'6?::::&v$zzz::eUtJJJ///6>>D#u----).DM#&&$%V%V%Vu%V%VU%V%V%VWWWI$	X $	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 M M M| M M M.Xj$&'.XJ./.X .X 
	.X .X .X .X .X .X .X .X` ')FHPP	E&&"FN#7F +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)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      s   #F++K%%K rz+*<*<W*E*EFFOPPFOI  :)))I!L..00M%66& +    :!799   #0Q"?Z8=((  )!L	Z8;&&5<3+>+> '/!*<<<#A&%+a.1*<<<	***"(Ih&&&(N6L(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dS )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        4| j         -t          | j         t                    sJ d| j          d            | j        X|j        |j        N| j        t          t          t          t                   t          t                   fv sJ d| j         d            d S d S d S )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__1  s   ~!'!2!>FDDVDV 	 \
"..  !3C!8!88IE-6D*E F  ,,  !3C!8!88IE+4D(E F
 =$)AdlD11  SDLSSS 1 ?&#/63H3T?	'    ltkkk   '&  4U3Tr!   )r)   r*   r+   r   r.   r/   r   r   r   r
   r'   r   r   r   r   r   r   r    r1   r!   r   ra   ra     s          LLL )M3((("Hhsm"""*OS***,s,,, D$E8C=!w ! ! ! ! ! !r!   ra   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<   d1d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	 	 	 d2d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dde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%	 	 d3d*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d0Z' xZ(S )4rm   ro   rH   rp   rE   rF   r#   Nc                 2    t          dt           d          )Nzuse z-.install_config_module(sys.modules[__name__]))NotImplementedErrorr)   r   s    r   r    zConfigModule.__init__a  s"    !J8JJJ
 
 	
r!   r6   r?   c                 h   || j         v r$t                                          ||           d S || j        vrt	          | j         d| d          | j        |         j        #|                     | j        |         |           d S || j        |         _        d| _	        d| j        |         _
        d S )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__f  s    4$$$GGe,,,,,%% DM!I!ID!I!I!IJJJ\$%1T 2E:::::/4DL,!DN&+DL###r!   c                 b   	 | j         |         }|j        rt          | j         d| d          |                     |          }|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          r%t!          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__r  sQ   !	R\$'F{ O$%M%M%M%M%MNNN++F33I//  %_<<--#?::++'>>//*&FOV^TTTT
 &.4d*;<< ,'+}V^'D'D$++>! 	R 	R 	R DM!I!ID!I!I!IJJPQQ	Rs=   AD D %D :D !D 1AD =D 
D.D))D.c                 f    d| _         t          | j        |         _        d| j        |         _        d S )NT)rE   r   ro   r   r   r   r6   s     r   __delattr__zConfigModule.__delattr__  s/     ,;T("&Tr!   entryc                     |j         }|d S |                    dd          \  }}	 t          j        |          }n"# t          $ r}t          d          |d }~ww xY w||fS )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  s     =4%*\\#q%9%9"]	O,[99FF 	O 	O 	O !FGGQN	O}$$s   ; 
AAAc                 l    |                      |          }|t          S |\  }}t          ||          }|S r%   )r   r   rX   )r   r   datarA   r   constant_values         r   r   zConfigModule._get_alias_val  s?    ..u55<"" $ 77r!   r"   c                 d    |                      |          }|J |\  }}t          |||           d S r%   )r   rd   )r   r   r"   r   rA   r   s         r   r   zConfigModule._set_alias_val  sC    ..u55 $s+++++r!   c                 .   | j         |         }|j        t          u p|j        |j        k    }|j        t          u p|j        |j        k    }|j        t          u }t          |j        t          t          t          f          r|p|j        |j        k    }|o|o|S )z
        Returns true if the config is at its default value.
        configs overridden 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 	
 &/9 @)Z-?? 	
 (O;j(4d*;<< 	LKZ59KKEB,B1BBr!   Fignored_keysignored_prefixesskip_defaultc                 
   i }| j         D ]w|r|v r	|rt          fd|D                       r'|r|                               r?| j                  j        Rt	          j        t          |                     |<   x|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   B   K   | ]}                     |          V  d S r%   )r]   ).0rL   rg   s     r   	<genexpr>z)ConfigModule._get_dict.<locals>.<genexpr>  s/      MM&s~~f--MMMMMMr!   )ro   anyr   r   r   r   rX   )r   r   r   r   rj   rg   s        @r   	_get_dictzConfigModule._get_dict  s    , "$< 
	< 
	<C | 3 3 MMMM<LMMMMM   0 0 5 5 |C &2-c(:(:;;F3KKr!   config_namec                 &    | j         |         j        S r%   )ro   r   )r   r   s     r   get_typezConfigModule.get_type  s    |K(33r!   c                 x    t          | dg           }t          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  sA    t%:B??|NNN55
 
 
 	
r!   T)ignore_private_configsr   c                    g }|r|                     d           |                    t          | dg                      |                     |          S )z!Convert config to portable format__cache_config_ignore_prefix)r   )appendextendrX   r   )r   r   prefixess      r   save_config_portablez!ConfigModule.save_config_portable   sV     ! 	!OOC   &CRHHIII~~x~888r!   c                 T  	
 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        }|                     t          | dg           d          
                                D ]%\  }}|                     ||||                     &
D ]}|                    dd|            d                    |          S )zConvert config to Python statements that replicate current config.
        This does NOT include config settings that are at default values.
        funcadd_dotr#   c                 >    | j         }|dk    rd}|r|dk    r|dz  }|S )Nbuiltinsrl   rS   )r*   )r   r   r   s      r   get_module_namez4ConfigModule.codegen_config.<locals>.get_module_name  s;    /Kj((  #;",,s"r!   Nc                 R     | d          }|r                     |           d S d S )NF)r   )r   r   r   importss     r   
add_importz/ConfigModule.codegen_config.<locals>.add_import  s>    )/$66K )K((((() )r!   vc                      fd| D             S )Nc                 :    g | ]} |d            |j          S )T)r)   )r   itemr   s     r   
<listcomp>zTConfigModule.codegen_config.<locals>.list_of_callables_to_string.<locals>.<listcomp>   s2    RRRtT22CDMCCRRRr!   r1   )r   r   s    r   list_of_callables_to_stringz@ConfigModule.codegen_config.<locals>.list_of_callables_to_string  s    RRRRPQRRRRr!   c                 `    t          |           ot          | d          ot          | d          S )Nr*   r)   )callabler^   )r   s    r   importable_callablez8ConfigModule.codegen_config.<locals>.importable_callable"  s,    A;;V71l#;#;V:@V@VVr!   c                     |          r& |           |  d| d |d           |j          S t          |t          t          f          rst	          fd|D                       rX|D ]} |            |          }t          |t                    r
|  d| d| S |  d| dd                    |           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   | ]} |          V  d S r%   r1   )r   r   r   s     r   r   zGConfigModule.codegen_config.<locals>.get_config_line.<locals>.<genexpr>4  s@       4 4.2##D))4 4 4 4 4 4r!   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&  sK    #"1%% ,
1LLLLooa&>&>L
LLLAc{++ , 4 4 4 4674 4 4 1 1 ,  % %DJt$$$$44Q77a&& D!22A22&222!CCACCTYYv->->CCCC++++a+++r!   r   T)r   r   r   zimport 
)rG   r   r   r'   r   r(   r   r)   r   rX   r\   r   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 	S 	S 	S 	S 	S	W3 	W4 	W 	W 	W 	W	,# 	, 	, 	, 	, 	, 	, 	, 	, 	,6 mNN '<bAAPT # 
 

%''	5 	5DAq LLa334444" 	5 	5KLL3k334444yyr!   c                 f   | j         s| j        |                     t          | j                            }t          t          |                                                    }t          j	        |
                    d          d                                          | _        d| _         | j        S )z/Hashes the configs that are not compile_ignoredNr   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_hashK  s    > 	#T.6>>tD<V7W7W>XXL!&););)=)=">">??N '%%g..! ! !fhh  #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                 *    |                                  S r%   get_config_copyr   s    r   to_dictzConfigModule.to_dictV       ##%%%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 ]8\  }}|| j        v rt          | ||            ddlm}  |d| d| d           9dS )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_configh  s    .55 	*\"677FF)FLLNN 	V 	VDAqDL  a####999999	TTTTTTUUUU	V 	Vr!   c                 *    |                                  S r%   )r   r   s    r   r  zConfigModule.get_config_copyv  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                   6    e Zd Zd fdZdfdZfdZdS )'ConfigModule.patch.<locals>.ConfigPatchr#   Nc                     | _         d S r%   )changes)r   r  s    r   r    z0ConfigModule.patch.<locals>.ConfigPatch.__init__  s    &r!   c                     rJ | j                                         D ]}                    |          |<   | j                                         D ]\  }}                    ||           d S r%   )r  keysr   r\   r   )r   rg   r   r   rj   priors       r   	__enter__z1ConfigModule.patch.<locals>.ConfigPatch.__enter__  s       y<,,.. 9 9C!'!3!3C!8!8E#JJ L..00 - -DAq&&q!,,,,- -r!   c                                                      D ]\  }}                    ||                                            d S r%   )r\   r   clear)r   exc_typeexc_valexc_tbr   r   rj   r  s         r   __exit__z0ConfigModule.patch.<locals>.ConfigPatch.__exit__  sH    !KKMM - -DAq&&q!,,,,r!   r#   N)r)   r*   r+   r    r  r#  )r  rj   r  s   r   ConfigPatchr    st        ' ' ' ' ' '- - - - - - -       r!   r%  )r&   r'   r   r/   r  )r   r  r  r  r%  r  rj   r  s        @@@r   patchzConfigModule.patchy  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 r1   )r   )r   r   rj   s     r   
<dictcomp>zFConfigModule._make_closure_patcher.<locals>.change.<locals>.<dictcomp>  s"    AAAAQq	/AAAr!   r#   c                  `                                     D ]\  } }|j        |          _        d S r%   r\   ro   r   )r   r   r  r   s     r   revertzBConfigModule._make_closure_patcher.<locals>.change.<locals>.revert  s9    !KKMM 6 6DAq45DLO116 6r!   r$  r,  )r   r   r-  r  r  rj   r   s      @r   changez2ConfigModule._make_closure_patcher.<locals>.change  ss    AAAAAAAE 2 2101Q--6 6 6 6 6 6 6 Mr!   )ro   r   )r   r  r.  rj   s   `` @r   _make_closure_patcherz"ConfigModule._make_closure_patcher  sM    $ 		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   U  sF         #|#$$$$c(s8###OOO5/!!!
 
 
 


, 
,F 
,t 
, 
, 
, 
, 
, 
,"R "R "R "R "R "RH' ' ' ' ' '%!%	%
C(	)% % % %L S    ,L ,s ,t , , , ,C C C C C C4 -104"	# #tCy)# #49-# 	#
 
c3h# # # #J4C 4D 4 4 4 4
U 
 
 
 
 159 9 9)-9	c3h9 9 9 9?  ?  ?  ?  ? B	!% 	! 	! 	! 	! Z	8 	  &c3h & & & & Z	8 	  &4S> & & & &VeT#s(^6K0L VQU V V V V c3h        
 6:: :uS$sCx.012: : sCx.	:
 
: : : :xtCH~ #        r!   rm   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          r7  r9  )r   r   r!  r"  s       r   r#  zContextDecorator.__exit__  r:  r!   r   c                     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#  clsrq   r   s    r   r@  z7ContextDecorator.__call__.<locals>._TestCase.setUpClass  sh    NN$$$**,,,,,$   dD$777s	    9 #Ac                     	 t                                                                           d d d            d S #                     d d d            w xY wr%   )r   tearDownClassr#  rB  s    r   rE  z:ContextDecorator.__call__.<locals>._TestCase.tearDownClass  sV    8--///dD$77777dD$7777s	    < Ar$  )r)   r*   r+   classmethodr@  rE  r3  )rq   r   s   @r   	_TestCaser>    s|               8 8 8 8 8 8 8 8 8 8 8r!   rG  )
r&   r/   r_   unittestTestCaser)   r+   r*   r   __call__)r   r   rG  rq   s   `  r   rJ  zContextDecorator.__call__  s    dD!! 	jx7H&I&I 	8 8 8 8 8 8 8D 8 8 8" "&I%)%6I"#'?I ww%%%r!   r$  )r)   r*   r+   r,   r  r	   r#  r   r   rJ  r3  r4  s   @r   r  r    s         
) ) ) ))X ) ) ) )&XseSj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                     t                                          d|           t                                          d|           d S )Nro   _prefix)r   r   )r   rj   rL   rq   s      r   r    zSubConfigProxy.__init__  s=    Iv...Iv.....r!   r6   r?   r#   Nc                 H    | j                             | j        |z   |          S r%   )ro   r   rM  )r   r6   r?   s      r   r   zSubConfigProxy.__setattr__  s!    |''t(;UCCCr!   c                 F    | j                             | j        |z             S r%   )ro   r   rM  r   s     r   r   zSubConfigProxy.__getattr__      |''t(;<<<r!   c                 F    | j                             | j        |z             S r%   )ro   r   rM  r   s     r   r   zSubConfigProxy.__delattr__  rP  r!   )r)   r*   r+   r,   r-   r'   r    r   r   r   r   r3  r4  s   @r   rc   rc      s         
/v /s / / / / / /
D DF Dt D D D D= = = = = == = = = = = = = = =r!   rc   objr?   c                     t          | t                    r|                     ||          S t          j                            | ||          S )z@
    Workaround `mock.patch.object` issue with ConfigModule
    )r&   rm   r&  r   r-   )rR  r6   r?   s      r   patch_objectrT    sD     #|$$ &yyu%%%:S$...r!   c                 d    t           j                            |           }|dk    rdS |dk    rdS |S r8   r;   )r6   r   r?   s      r   get_tristate_envrV    s6    JNN4  E||t||uNr!   r%   )7
contextlibr   r   r   rY   rz   r<   r   rV   ry   rH  dataclassesr   typesr   r   rR   r   r   r   r	   r
   r   r   r   typing_extensionsr   r   torch._utils_internalr   intfloatr   r/   r'   r(   rG   r1  r   r`   r   r-   r   r   r4   r@   rs   r   rn   ra   rm   r  rc   rT  rV  r1   r!   r   <module>r^     s              				 				  



   ! ! ! ! ! ! * * * * * * * *	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ) ( ( ( ( (       1 1 1 1 1 1 UD$$t**c4eTJ GCuS%tS$UDPQRRR &(( P P P P Pgaj P P Pn  
 %4"&<@:>%)# q&y!3- #5d3i#89 !sDI~!67	
 TN } 
     %4"&<@:>%)#

 

q&y!

3-

 #5d3i#89

 !sDI~!67	


 TN

 }

 


 

 

 

S XeD#I.>%?    D* D D D D DN , #* #S # # # #L < < < < < < < <~    :   D&& && && && &&z2 && && &&R= = = = = = = =*/f /C / /6 / / / / 3        r!   