
    Χg5              	       f   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
mZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ eee ed          eeeeef	Z deddfdZ!d	Z"dedee         fd
Z# G d de          Z$ G d de j%                  Z% G d d          Z&de'dede'de'fdZ(dS )    N)FunctionType
ModuleType)AnyCallableDictNoReturnOptionalSetUnion)
deprecated)mockmodulereturnc                      G d dt                     }dt          t          t          f         dt          t          t          f         dt
          ddf fdi i t                     }   d	            _         _        t          
                                           _        | _        | _        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ddh          ZdS )3install_config_module.<locals>.ConfigModuleInstance	_is_dirty_hash_digestN)__name__
__module____qualname__set_bypass_keys     V/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/utils/_config_module.pyConfigModuleInstancer      s"        sK899r   r   sourcedestprefixr   Nc                    t          | j                                                  D ]\  }}|                    d          s7t	          |t
          t          f          st          |d          r|j        dk    rS| | }t	          |t                    r||<   ||<   |	u rt          	|           t	          |t                    rV|j        	j        k    sJ t          	| d          } 
||| d           |	u rt          |||           ||j        |<   t          d| d| dt          |           d          d	S )
z?Walk the module structure and move everything to module._config__r   typing.zUnhandled config =z ()N)list__dict__items
startswith
isinstancer   r   hasattrr   CONFIG_TYPESdelattrtyper   SubConfigProxysetattrAssertionError)r   r   r    keyvaluenameproxyconfigdefaultr   visits          r   r9   z$install_config_module.<locals>.visit   s    v446677 	X 	XJCt$$ej,%?@@ E<00 6;5E5Q5Q#c##D%.. X$t %6>>FC(((E4(( 
X'6?::::&v$zzz::eUtJJJ///6>>D#u----).DM#&&$%V%V%Vu%V%VU%V%V%VWWW1	X 	Xr    T)ConfigModuler   r   r/   r0   str-get_assignments_with_compile_ignored_comments_config_defaultr   keys_allowed_keys_compile_ignored_keys	__class__r   r   )r   r   compile_ignored_keysr7   r8   r9   s   `  @@@r   install_config_modulerE      s   : : : : :| : : :Xj$&'XJ./X X 
	X X X X X X X X X@  F GHPP	E&&"FNFOv{{}}--F#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)r:   r:   zunconsumed r   r%      )inspect	getsourcer   tokenizeioBytesIOencodereadliner/   COMMENTstringstripCOMPILE_IGNORED_MARKERstartNAMEOPadd)r   source_codeassignmentstokenscurrent_comment	prev_nametokenmaybe_currents           r   r=   r=   Q   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            	       P    e Zd ZU eeef         ed<   eeef         ed<   ee         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
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deeef         fdZdee
eeef         f         dd	fdZdeeef         fdZ	 	 d#de	eeeeef         f                  dedeeef         ddfdZd eeef         defd!Z xZS )$r;   r?   r>   rA   r   rB   r   r   r   Nc                 2    t          dt           d          )Nzuse z-.install_config_module(sys.modules[__name__]))NotImplementedErrorr   selfs    r   __init__zConfigModule.__init__   s"    !J8JJJ
 
 	
r   r5   r4   c                     || j         v r$t                                          ||           d S || j        vrt	          | j         d| d          || j        |<   d S Nr$   z does not exist)r   super__setattr__rA   AttributeErrorr   r>   )rd   r5   r4   rC   s      r   ri   zConfigModule.__setattr__   sr    4$$$GGe,,,,,+++ DM!I!ID!I!I!IJJJ!&DLr   c                 x    	 | j         |         S # t          $ r }t          | j         d| d          |d }~ww xY wrg   )r>   KeyErrorrj   r   )rd   r5   es      r   __getattr__zConfigModule.__getattr__   s\    	R<%% 	R 	R 	R DM!I!ID!I!I!IJJPQQ	Rs    
949c                     | j         |= d S Nr>   rd   r5   s     r   __delattr__zConfigModule.__delattr__   s     Lr   c                     t          | j                  }|                    dd          D ]}|                    |           t	          j        |d          S )z Convert config to a pickled blob_save_config_ignorer      )protocol)dictr>   getpoppickledumpsrd   r7   r3   s      r   save_configzConfigModule.save_config   sU    dl##::3R88 	 	CJJsOOOO|FQ////r   c                     i }t          | j                  D ]O                    d          rt          fd| j        d         D                       r?| j                 |<   P|S )z!Convert config to portable format_c              3   B   K   | ]}                     |          V  d S rp   )r*   ).0rm   r3   s     r   	<genexpr>z4ConfigModule.save_config_portable.<locals>.<genexpr>   s@        &'q!!     r   _cache_config_ignore_prefix)sortedr>   r*   anyr}   s     @r   save_config_portablez!ConfigModule.save_config_portable   s    !#$,'' 	, 	,C~~c""     +/<8U+V      ,s+F3KKr   c                 l   g }| j         }| j                                        D ]}\  }}|| j                            dd          v r,|| j        |         k    rt          j        d| d|            N|| j        |         k    r`|                    | d| d|           ~d                    |          S )zConvert config to Python statements that replicate current config.
        This does NOT include config settings that are at default values.
        ru   r   zSkipping serialization of z value r$   z = 
)	r   r>   r)   ry   r?   warningswarnappendjoin)rd   linesmodkvs        r   codegen_configzConfigModule.codegen_config   s     mL&&(( 	/ 	/DAqDL$$%:B????a(((M"Lq"L"L"L"LMMMDM!$$$LLC--!----....yyr   c                 ^     j         s j         fd j                                        D             }t	          t          |                                                    }t          j        |                    d                    	                                 _        d _          j        S )z/Hashes the configs that are not compile_ignoredNc                 .    i | ]\  }}|j         v||S r   )rB   )r   r   r   rd   s      r   
<dictcomp>z)ConfigModule.get_hash.<locals>.<dictcomp>   s7       AqD666 1666r   rG   F)
r   r   r>   r)   reprr   hashlibmd5rO   digest)rd   dict_to_hashstring_to_hashs   `  r   get_hashzConfigModule.get_hash   s    > 	#T.6    L..00  L
 "&););)=)=">">??N 'N,A,A',J,J K K R R T TD"DN  r   z`config.to_dict()` has been deprecated. It may no longer change the underlying config. use `config.shallow_copy_dict()` or `config.get_config_copy()` instead)categoryc                 *    |                                  S rp   )shallow_copy_dictrc   s    r   to_dictzConfigModule.to_dict   s     %%'''r   c                     i | j         S rp   rq   rc   s    r   r   zConfigModule.shallow_copy_dict   s    $,r   maybe_pickled_configc                     t          |t                    st          j        |          }n|}| j                            |           dS )zARestore from a prior call to save_config() or shallow_copy_dict()N)r+   rx   r{   loadsr>   update)rd   r   r7   s      r   load_configzConfigModule.load_config   sH    .55 	*\"677FF)FF#####r   c                 4    t          j        | j                  S rp   )copydeepcopyr>   rc   s    r   get_config_copyzConfigModule.get_config_copy   s    }T\***r   arg1arg2kwargsContextDecoratorc                 @   |<|t          |t                    sJ ||int          |t                    sJ ||rJ n||J t          t                    sJ dt                                 i | d 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 Fc                   0    e Zd Zd fdZfdZdS )'ConfigModule.patch.<locals>.ConfigPatchr   Nc                     rJ                                  D ]}j        |         |<   |j        vj                                       _        d S rp   )r@   r>   rB   r   r   )rd   r3   changesr7   dirtypriors     r   	__enter__z1ConfigModule.patch.<locals>.ConfigPatch.__enter__  sk        "<<>> D DC!'!4E#Jv'CCEE%%g...#(   r   c                 r    j                                        _                                         d S rp   )r>   r   r   clear)rd   exc_typeexc_valexc_tbr7   r   r   s       r   __exit__z0ConfigModule.patch.<locals>.ConfigPatch.__exit__  s2    %%e,,,#( r   r   N)r   r   r   r   r   )r   r7   r   r   s   r   ConfigPatchr     se        ) ) ) ) ) ) ) ) )        r   r   )r+   r<   rx   r/   r   )	rd   r   r   r   r   r   r7   r   r   s	        @@@@r   patchzConfigModule.patch   s    . !$,,,,,,!$----- G<<<'4((PP*Pg*P*PPPP "	 	 	 	 	 	 	 	 	 	* 	 	 	" {}}r   r   c                 D    | 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fd} | S )Nc                 "    i | ]}||         S r   r   )r   r   r7   s     r   r   zFConfigModule._make_closure_patcher.<locals>.change.<locals>.<dictcomp>9  s    333aQq	333r   r   c                  2                                     d S rp   r   )r7   r   s   r   revertzBConfigModule._make_closure_patcher.<locals>.change.<locals>.revert<  s    e$$$$$r   r   r   )r   r   r   r7   s    @r   changez2ConfigModule._make_closure_patcher.<locals>.change8  sY    33337333EMM'"""% % % % % % % Mr   )r>   r   )rd   r   r   r7   s    ` @r   _make_closure_patcherz"ConfigModule._make_closure_patcher$  sG    $ 	T* 	 	 	 	 	 	 	 r   r   )NN)r   r   r   r   r<   r   __annotations__r
   boolr	   bytesre   objectri   rn   rs   r~   r   r   r   r   FutureWarningr   r   r   r   r   r   r   __classcell__rC   s   @r   r;   r;   w   s        
 38n #s(^s8c(s8###OOO5/!!!
 
 
 

' 'F 't ' ' ' ' ' 'R R R R R R     
0U 0 0 0 0d38n              !% ! ! ! ! Z	R  
(c3h ( ( ( 
( 4S>        $eT#s(^6K0L $QU $ $ $ $+c3h + + + +
 6:; ;uS$sCx.012; ; sCx.	;
 
; ; ; ;ztCH~ #        r   r;   c                   R     e Zd ZdZddZdefdZdeegef         def fdZ	 xZ
S )	r   z[
    Same as contextlib.ContextDecorator, but with support for
    `unittest.TestCase`
    r   Nc                      t          d          NNYIrb   rc   s    r   r   zContextDecorator.__enter__J      !%(((r   c                      t          d          r   r   )rd   r   r   r   s       r   r   zContextDecorator.__exit__M  r   r   funcc                     t          |t                    rPt          |t          j                  r6 G  fdd|          }|j        |_        |j        |_        |j        |_        |S t                      	                    |          S )Nc                   R     e Zd Zed fd            Zed fd            Z xZS ),ContextDecorator.__call__.<locals>._TestCaser   Nc                                                       	 t                                                       d S # t          $ r                     d d d             w xY wrp   )r   rh   
setUpClass	Exceptionr   clsrC   rd   s    r   r   z7ContextDecorator.__call__.<locals>._TestCase.setUpClassT  sh    NN$$$**,,,,,$   dD$777s	    9 #Ac                     	 t                                                                           d d d            d S #                     d d d            w xY wrp   )rh   tearDownClassr   r   s    r   r   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   r   r   )rC   rd   s   @r   	_TestCaser   S  s|               8 8 8 8 8 8 8 8 8 8 8r   r   )
r+   r/   
issubclassunittestTestCaser   r   r   rh   __call__)rd   r   r   rC   s   `  r   r   zContextDecorator.__call__P  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   __doc__r   r   r   r   r   r   r   r   s   @r   r   r   D  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 )r0   zn
    Shim to redirect to main config.
    `config.triton.cudagraphs` maps to _config["triton.cudagraphs"]
    r7   r    c                     t                                          d|           t                                          d|           d S )Nr>   _prefix)rh   ri   )rd   r7   r    rC   s      r   re   zSubConfigProxy.__init__s  s=    Iv...Iv.....r   r5   r4   r   Nc                 H    | j                             | j        |z   |          S rp   )r>   ri   r   )rd   r5   r4   s      r   ri   zSubConfigProxy.__setattr__x  s!    |''t(;UCCCr   c                 F    | j                             | j        |z             S rp   )r>   rn   r   rr   s     r   rn   zSubConfigProxy.__getattr__{      |''t(;<<<r   c                 F    | j                             | j        |z             S rp   )r>   rs   r   rr   s     r   rs   zSubConfigProxy.__delattr__~  r   r   )r   r   r   r   r   r<   re   ri   r   rn   rs   r   r   s   @r   r0   r0   m  s         
/v /s / / / / / /
D DF Dt D D D D= = = = = == = = = = = = = = =r   r0   objr5   r4   c                     t          | t                    r|                     ||          S t          j                            | ||          S )z@
    Workaround `mock.patch.object` issue with ConfigModule
    )r+   r;   r   r   r   )r   r5   r4   s      r   patch_objectr     sD     #|$$ &yyu%%%:S$...r   ))
contextlibr   r   rJ   rM   r{   rL   r   r   typesr   r   r#   r   r   r   r   r	   r
   r   typing_extensionsr   r   intfloatr   r/   r<   r'   r   tuplerx   r-   rE   rT   r=   r;   r   r0   r   r   r   r   r   <module>r      s          				     * * * * * * * * F F F F F F F F F F F F F F F F F F ( ( ( ( ( (       UD$$t**c4eTJ6* 6 6 6 6 6r , #* #S # # # #LJ J J J J: J J JZ&& && && && &&z2 && && &&R= = = = = = = =*/f /C / /6 / / / / / /r   