
    BjL                        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 d dl mZ d dlmZmZmZ d dlZd dlZd dlmZ d dlmZ d dlmZ d	d
lmZ d	dlm Z m!Z! d	dl"m#Z# erd	dl$m%Z% d	dl&m'Z'm(Z(  ej)        e*          Z+dej,        dedede-e.ef         fdZ/e G d d                      Z0 G d dej1                  Z2 G d dej3                  Z4e G d d                      Z5de.de6fdZ7e G d d                       Z8	 d.d!ed"e9e9ed#f         e-e.ef         f         d$e#d%e
ej:        j;        e<ej=                 ge!f         d&e>dz  de8fd'Z?e G d( d)                      Z@e G d* d+                      ZAd!ejB        jC        d,e<e@         d$e#d%e
ej:        j;        e<ej=                 ge!f         deAf
d-ZDdS )/    N)CallableSequence)AbstractContextManager	ExitStacknullcontext)	dataclass)AnyOptionalTYPE_CHECKING)GraphRuntimeEnv)_graph_device_type)
SystemInfo   )convert_frame)&BundledAOTAutogradSerializableCallableSerializableCallable)Hooks)GuardManagerWrapper)SerializedCode
SourceInfo	signatureargskwargsreturnc                 R     | j         |i |}|                                 |j        S N)bindapply_defaults	arguments)r   r   r   bound_argumentss       \/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/torch/_dynamo/aot_compile.pybind_localsr"   %   s5     %ind5f55O""$$$$$    c                       e Zd ZU ej        ed<   ed         ed<   eed<   eed<   e	ed<   e
j        ed<   eed<   d	ed
<   eed<   eed<    ej        ej                  Zeed<   ddZdS )CompileArtifactsr   r   guard_managerguards_state
backend_idcompiled_fnoriginal_coderuntime_envr   source_infodevice_typebackend_name)default_factorysystem_infor   Nc                 l    t          j                    }|                    | j        | j                   d S r   )r   currentcheck_compatibilityr0   r-   )selfcurrent_systems     r!   r3   z$CompileArtifacts.check_compatibility;   s2    #+--**4+;T=MNNNNNr#   r   N)__name__
__module____qualname__inspect	Signature__annotations__r
   bytesstrr   typesCodeTyper   dataclassesfieldr   r2   r0   r3    r#   r!   r%   r%   -   s             12222OOO%%%%>!!!    /k/
@RSSSKSSSO O O O O Or#   r%   c                       e Zd Zdeeef         dej        ddf fdZdede	ez  dz  fdZ
ededefd	            Zed
ededej        fd            Zededej        fd            Zedddej        fd            Zedej        dededeedf         dz  deej        df         dz  dej        fd            ZdedefdZ xZS )AOTCompilePicklerexternal_databufr   Nc                     t                                          |           || _        d |                                D             | _        i | _        d S )Nc                 4    i | ]\  }}t          |          |S rC   )id).0keyvalues      r!   
<dictcomp>z.AOTCompilePickler.__init__.<locals>.<dictcomp>D   s1     '
 '
 '
)sEBuIIs'
 '
 '
r#   )super__init__rF   itemsid_maperrors)r4   rF   rG   	__class__s      r!   rP   zAOTCompilePickler.__init__A   s\    *'
 '
-:-@-@-B-B'
 '
 '
 r#   objc                     t          |          | j        v r| j        t          |                   S t          |t          j        j                  r&|| j        t          |          <   t          |          S d S r   )rJ   rR   
isinstancetorchnnModulerS   )r4   rU   s     r!   persistent_idzAOTCompilePickler.persistent_idI   s`    c77dk!!;r#ww''UX_-- 	#&DK3 c77N4r#   valc                 J    dt           ffd}|j        J |j        d         S )Nr   c                       S r   rC   )r\   s   r!   _z+AOTCompilePickler._unpickle_cell.<locals>._T   s    Jr#   r   )object__closure__)clsr\   r_   s    ` r!   _unpickle_cellz AOTCompilePickler._unpickle_cellR   sE    	6 	 	 	 	 	 	 }(((}Qr#   funcbasec                 ,    t          j        ||          S r   )r?   
MethodType)rb   rd   re   s      r!   _unpickle_bound_methodz(AOTCompilePickler._unpickle_bound_methodZ   s     d+++r#   namec                 *    t          j        |          S r   )	importlibimport_module)rb   ri   s     r!   _unpickle_modulez"AOTCompilePickler._unpickle_module_   s    &t,,,r#   serialized_coder   c                 .    ddl m}  |j        |          S )Nr   r   )torch._dynamo.packager   to_code_object)rb   rn   r   s      r!   _unpickle_codez AOTCompilePickler._unpickle_codec   s'    888888,~,_===r#   codemodulequalnameargdefs.closurec                 d    t          j        |          j        }t          j        |||||          S r   )rk   rl   __dict__r?   FunctionType)rb   rt   ru   rv   rw   rx   	f_globalss          r!   _unpickle_nested_functionz+AOTCompilePickler._unpickle_nested_functioni   s0     +F33<	!$	8WgNNNr#   c                    t          |t           d d          j        d                             rt          |           j        |j        ffS t          j        |          r+ddlm} t          |           j	         |j
        |          ffS t          j        |          rt          |           j        |j        ffS t          j        |          r\	 |j        }|j        }t#          ||j                  }t          j        |          r|j        }||urt          |           j        ||ffS nQt          j        |          r=d|j        v r4t          |           j        |j        |j        |j        |j        |j        ffS t2          S )Nc                       fdS )Nc                       S r   rC   xs   r!   <lambda>zFAOTCompilePickler.reducer_override.<locals>.<lambda>.<locals>.<lambda>w   s    1 r#   rC   r   s   `r!   r   z4AOTCompilePickler.reducer_override.<locals>.<lambda>w   s    9999 r#   r   rp   z<locals>)rW   typera   rc   cell_contentsr:   iscoderq   r   rs   from_code_objectismodulerm   r7   ismethod__func____self__getattrrh   
isfunctionr9   r}   __code__r8   __defaults__NotImplemented)r4   rU   r   rd   method_self
inner_funcs         r!   reducer_overridez"AOTCompilePickler.reducer_overridev   s   c4!4!4!4a 8 8 DQ GHHII 	::,s/@.BBB^C   	<<<<<<::,/N~/Ns/S/S.UUUc"" 	::.??c"" 	 <D,K dm<<J
++ 1'0
:%%Dzz84:MMM &$$ 	S---Dzz;LN$$O>   r#   )r7   r8   r9   dictr>   r`   ioBytesIOrP   intr[   classmethodrc   r   r?   rg   rh   
ModuleTyperm   r@   rs   tupleCellTyper{   r}   r	   r   __classcell__rT   s   @r!   rE   rE   @   s       d3;&7 bj T       C#I,<        F       [  ,( ,& ,UEU , , , [, -C -E,< - - - [- >-= >%. > > > [>
 	On	O 	O 		O
 vs{#d*	O u~s*+d2	O 
		O 	O 	O [	O"C "C " " " " " " " "r#   rE   c                   V     e Zd Zdeeef         dej        def fdZdedefdZ	 xZ
S )AOTCompileUnpicklerrF   filer   c                 X    t                                          |           || _        d S r   )rO   rP   rF   )r4   rF   r   rT   s      r!   rP   zAOTCompileUnpickler.__init__   s)    *r#   rL   c                 b    || j         vrt          d| d| j                    | j         |         S )Nz-Missing required external reference to data: zS. Please load AOT compiled function with `external_data=<external data dictionary>`)rF   RuntimeError)r4   rL   s     r!   persistent_loadz#AOTCompileUnpickler.persistent_load   sU    d(((( ( ( %( (   !#&&r#   )r7   r8   r9   r   r>   r`   r   r   rP   r   r   r   s   @r!   r   r      s        +d3;&7 +rz +f + + + + + +'3 '6 ' ' ' ' ' ' ' 'r#   r   c                       e Zd ZU eed<   dS )AOTCompileSaveResultserialized_dataN)r7   r8   r9   r=   r<   rC   r#   r!   r   r      s         r#   r   	file_pathdatac                 |   t           j                            |           pd}t          j        |dd          5 }|j        }|                    |           |                                 t          j        |	                                           d d d            n# 1 swxY w Y   t          j
        ||            d S )N.Fwb)dirdeletemode)ospathdirnametempfileNamedTemporaryFileri   writeflushfsyncfilenoreplace)r   r   dir_name	temp_file	temp_paths        r!   atomic_write_binaryr      s    wy))0SH		$U
 
 
 %	N	
!!##$$$% % % % % % % % % % % % % % % Jy)$$$$$s   ABB #B c            
       v   e Zd ZU eed<   dZeed<   dZee	e
f         dz  ed<   de
de
dee	e
f         fd	Zdededefd
ZddZdededefdZddZ	 dde	dee	ef         dz  defdZe	 ddd dee	ef         dz  defd            Ze	 	 ddedee	e
f         dz  dee	ef         dz  dd fd            ZddZdS )AOTCompiledFunction
_artifactsT_guard_check_enabledN_extra_globalsr   r   r   c                 V   i }| j         j        }|j        rf|j        j        r/t          |j                  t          |j        j                  k    sJ d t          |j        j        |j                  D             }|                    t          | j         j	        g|R i |           |S )Nc                 $    i | ]\  }}||j         S rC   )r   )rK   ri   cells      r!   rN   z8AOTCompiledFunction.prepare_f_locals.<locals>.<dictcomp>   s1       D$ d(  r#   )
r   r+   rx   bytecodeco_freevarslenzipupdater"   r   )r4   r   r   f_localsenvs        r!   prepare_f_localsz$AOTCompiledFunction.prepare_f_locals   s    &(o); 	<+ CK0@0@C(E E 1 1 1  "%cl&>"L"L  H 	DO$=OOOOOOPPPr#   c                 v     | j         |i |}| j        j        J | j        j                            |          S r   )r   r   r&   check)r4   r   r   r   s       r!   guard_checkzAOTCompiledFunction.guard_check   sC    (4($9&99,888,228<<<r#   c                 d   ddl m}m} | j                                         | j        j                            | j        j        | j        j        | j	                  | _
        | j        j        B || j        j                  } ||| j        j        | j
        j                  | j        _        d S d S )Nr   )load_guard_managerload_guards_state)extra_globals)packager   r   r   r3   r+   forward_callabler(   r)   r   fnr&   r'   r*   __globals__)r4   r   r   r'   s       r!   __post_init__z!AOTCompiledFunction.__post_init__   s    BBBBBBBB++---/->>O&O'- ? 
 
 ?(0,,T_-IJJL,>,>-#- -DO))) 10r#   c                     | j         j        J | j        rX | j        |i |sK | j        |i |}t          | j         j                            |                    }t          d|            | j        |i |S )Nz#GuardManager check failed, reason: )	r   r&   r   r   r   r>   check_verboser   r   )r4   r   r   r   reasons        r!   __call__zAOTCompiledFunction.__call__   s    ,888$ 	O-=T-=t-Nv-N-N 	O,t,d=f==H6DDXNNOOFMVMMNNNtw''''r#   r   c                     | j         j        S r   )r   r,   r4   s    r!   r,   zAOTCompiledFunction.source_info   s    **r#   r   rF   c                 v    t          |                               | |          }t          ||j                   |S r   )r   	serializer   r   )r4   r   rF   results       r!   save_compiled_functionz*AOTCompiledFunction.save_compiled_function   s7     d%%dM::D&"8999r#   r   c                    ddl m} |j        j                                        }d |d<   t          j        |d          |j        |d         j                            |d<   |d         }t          |          j
        t          |                              |          f|d<    |j        |d                   |d<   t          j                    }t          |pi |          }|                    |           |j        r7t#          dt%          |j                                                   d	          t)          |                                
          S )Nr   rp   r&   r+   r   r)   r*   z+Failed to serialize the following objects: zI
Please mark these as external data by using `external_data={'key': ...}`)r   )rq   r   r   rz   copyrA   r   r   r   r   deserialize_compile_artifactsserialize_compile_artifactsr   r   rE   dumprS   r   listvaluesr   getvalue)rb   r   rF   r   stater)   rG   picklers           r!   r   zAOTCompiledFunction.serialize   sh    	988888&++--!%o*2- 4^4U=5I5RSS 
  
  
m M*;99+FF 
m "A!@AW!X!Xojll#M$7R==U> 	[d7>CXCXCZCZ>[>[ [ [ [   $CLLNNCCCCr#   r   r|   external_closure_datac                 T   ddl m} t          j        |          }|                    d           t          |pi |          }|                                }|                                 t          j	        |d          |j
        |d         j                            |d<   |d         \  }}	t          j        j                            d          5   ||	          |d<   d d d            n# 1 swxY w Y    |j
        |d                   |d<   t!          d
i |}
 | |
|	          S )Nr   rp   r+   r   r)   T)enable_autograd_for_aotr*   )r   rC   )rq   r   r   r   seekr   loadcloserA   r   rr   r   rX   	_inductorconfigpatchr%   )rb   r   r|   r   r   f	unpicklerr   deserializercompiled_fn_state	artifactss              r!   deserializezAOTCompiledFunction.deserialize  s    	988888Jt	q			'(=(CQGG	  				*2- 2^253G3PQQ 
  
  
m +0*>''_#))$)GG 	C 	C#/<0A#B#BE- 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C!>!>u_?U!V!Vo$--u--	s9Y7777s   C--C14C1c                     d| _         d S )NF)r   r   s    r!   disable_guard_checkz'AOTCompiledFunction.disable_guard_check2  s    $)!!!r#   r6   )r   r   r   )NN)r7   r8   r9   r%   r<   r   boolr   r   r>   r`   r   r	   r   r   r   r,   r   r   r   r   r=   r   r   rC   r#   r!   r   r      s            !%$%%%/3NDf%,333f  4VCT    = = = = = = =
   &(c (S (S ( ( ( (+ + + + AE (,S#X(=	    OSD D&D7;CH~7LD	D D D [D6  /37;	8 88 V$t+8  $CH~4	8
 
8 8 8 [82* * * * * *r#   r   modelexample_inputs.hooksbackenddynamicc                    ddl m ddlm} ddlm}m} ddlm} ddl	m
}	 |\  }
}t                      }|ddlm}  ||          } |            5   |d          5  t          j        j                            d	
          5  |5  |5  t%          j        | |
|          }|j        }|j        J |j        s2ddlm} dt2          |         dt2          t4                   ffd}||_        t%          j        |           \  }}|j        }|J |j        |j        _        tA          |j        j!                  }|j"        j#        |j        j#        u sJ  |	|j"                  }|j$        |_$        t          j%        &                    |          5  t          j        j                            d	d	d	d	d	d          5   ||j        |j'                  }tQ          |t          j)                  sUtU          |d          r.tQ          |j+        t          j,        j-        j.        j/                  stU          |d          r|j0        tc          |          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   tQ          |td                    sAtU          |d          r|j+        }n|}tg          dti          |           dd| dz             tk                      }|j6        r'|7                    |8                                           |5  |9                    |j:        |d	d	          }d d d            n# 1 swxY w Y   |j;        J  |ty                                }|j=        D ]}|>                    |           t          t%          j@        |          |jA        |j;        |j        ||j:        |B                                ||t          |dd          
  
        }t          ||jE                  }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )Nr   )CheckFunctionManager)r   )dynamo_timedget_metrics_context)#torch_function_mode_stack_state_mgr)TracingContext)set_enable_dynamicfullgraph_captureT)strict_autograd_cache)GuardFilterEntryguard_entriesr   c                      fd| D             S )Nc                 <    g | ]}|j         p|j        j        v  S rC   )	is_global
guard_type%UNSUPPORTED_SERIALIZATION_GUARD_TYPES)rK   gr  s     r!   
<listcomp>zFaot_compile_fullgraph.<locals>.new_guard_filter_fn.<locals>.<listcomp>^  sI     	 	 	  K Z |3Y Z	 	 	r#   rC   )r  r  s    r!   new_guard_filter_fnz2aot_compile_fullgraph.<locals>.new_guard_filter_fn[  s0    	 	 	 	 +	 	 	 	r#   )r  bypass_autograd_cache_keybundled_autograd_cache force_non_lazy_backward_loweringforce_autograd_cachecompiler_fnr   zCompiled function type z (produced zfrom backend z*) does not implement SerializableCallable.)r  savestrict_error)inlined_sourcescompiler_nameunknown)
r   r&   r'   r(   r)   r*   r+   r,   r-   r.   )r   r   )Ftorch._dynamo.guardsr  rq   r   torch._dynamo.utilsr  r	  &torch._dynamo.variables.torch_functionr
  torch._guardsr  r   torch._dynamo.eval_framer  rX   
_functorchr   r   r   r  graph_capture_outputoutput_graphguard_filter_fntorch._dynamo.typesr  r   r   get_traced_fnbackend_inputr(   graph_module_backend_idr   graph	fake_mode	shape_envtensor_to_context_guardstracingr  rW   _TorchCompileInductorWrapperhasattrr  _dynamobackendscommonAotAutogradr   r   r   r   r   r   stackenter_contexttemp_restore_stackbuild_guardsr   r'   settraced_codeadd_coder%   _get_signaturer&   get_runtime_envr   r   r   ) r  r  r  r  r  r   r  r	  r
  r  r   r   dynamic_ctxr  capture_outputr)  r  r  r   r_   r.  r-   tracing_contextr)   r  build_guards_ctxcheck_fnr,   rB  r   aot_compiled_fnr  s                                   @r!   aot_compile_fullgraphrL  6  s    :99999000000EEEEEEEE      -,,,,,!LD&--K??????((11 	u
 u
())u
 u
 	%%D%AAu
 u
 		u
 u

 	,u
 u
 '8fMM-B#0<<<$ 	8<<<<<<'(89$      %8E!+E22A&4(((1>1I".()C)IJJ#-#0:; ; ; ; ).)@AA,9,K)M!!/22	R 	R#))-115.28<,0  	R 	R "'*M,H K 7E$FGGR G]33R #+U]-C-J-V 	R K55R $-9 E[QQ?	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	RB +';<< 	w.. &%1%H${*;*;HHHY+YYYZ   %;;.4 	**3FFHH    	 	+885t$ 9  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 $000 j777/; 	. 	.K  ----$#2266"0!.$/#+,<<>>## /9EE
 
 
	 . 
 
 
gu
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
 u
n s  Q!&Q
P3P	
DP+I.6BII.II.II."P.I22P5I26BPL8,P8L<<P?L< B9P9P	P		P	P	P	P3P  P3#P $P3'Q
3P77Q
:P7;Q
>Q!
Q	Q!Q	Q!!Q%(Q%c                   f    e Zd ZU dZee         ed<   eeef         ed<   e	e
e                  ed<   dS )
ModelInputa%  
    WIP type: represents a single model input
    Which consists of a tuple of arguments and a set of contexts in which to run the model.

    For each ModelInput, we'll compile one full graph of the model, and then use the guards generated
    to dispatch between the compiled graphs.


    r   r   contextsN)r7   r8   r9   __doc__r   r	   r<   r   r>   r   r   rC   r#   r!   rN  rN    sY           *cN)#.//////r#   rN  c                       e Zd ZU ej        j        ed<   ee         ed<   de	de	de	fdZ
defdZedej        j        dedd fd	            Zd
S )AOTCompiledModelr  compiled_resultsr   r   r   c                     | j         D ]+} |j        | j        g|R i |r || j        g|R i |c S , | j         d         | j        g|R i |S )Nr   )rS  r   r  )r4   r   r   r   s       r!   r   zAOTCompiledModel.__call__  s    + 	; 	;F!v!$*>t>>>v>> ;vdj:4:::6:::::; (t$Q'
DTDDDVDDDr#   c                     g }| j         D ]4}|                    t                              |          j                   5t          j        |          S r   )rS  appendr   r   r   pickledumps)r4   r   r   s      r!   r   zAOTCompiledModel.serialize  sR    + 	O 	OFKK+55f==MNNNN|D!!!r#   r   c                    ddl m} ddlm}m} t          j        |          }g }|D ]} | |t          j        i                               5   |            5  |	                    t                              |                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y    | ||          S )Nr   )r	  )compile_contextCompileContext)r$  r	  r&  rZ  r[  rW  loadsr   get_compile_idrV  r   r   )	rb   r  r   r	  rZ  r[  resultsrS  r   s	            r!   r   zAOTCompiledModel.deserialize  s   ;;;;;;AAAAAAAA%|D11 	Q 	QF}/KB/O/O P PQQQ Q##%%Q Q !''(;(G(G(O(OPPP	Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q
 s5*+++s6   B+.BB+BB+BB++B/	2B/	N)r7   r8   r9   rX   rY   rZ   r<   r   r   r	   r   r=   r   r   r   rC   r#   r!   rR  rR    s          8?.////Ec ES ES E E E E"5 " " " " , ,u ,AS , , , [, , ,r#   rR  inputsc                      dt           dt          f fd}g }|D ];}t                              d|           |                     ||                     <t          |          dk    sJ t           |          S )zi
    Compiles a single nn.Module with any number of inputs, and returns a compiled forward function.
    model_inputr   c                     | j         | j        f}j        }t                      5 }| j        D ]}|                    |           t          ||          cd d d            S # 1 swxY w Y   d S )N)r  r  )r   r   forwardr   rO  r>  rL  )ra  r  orig_forwardr=  ctxr  r  r  s        r!   compile_single_graphz0aot_compile_module.<locals>.compile_single_graph  s    %*K,>?}[[ 	E"+ ) )##C(((((	  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   2A$$A(+A(zCompiling input %s..r   )rN  r   loginforV  r   rR  )r  r_  r  r  rf  rS  ra  s   ` ``   r!   aot_compile_moduleri    s    * 9L          C C'555 4 4[ A ABBBB  1$$$$E#3444r#   r   )ErA   rk   r:   r   loggingr   rW  r   r?   collections.abcr   r   
contextlibr   r   r   r   typingr	   r
   r   rX   torch.fxtorch._dynamo.convert_framer   torch._dynamo.graph_utilsr   rq   r    r   aot_compile_typesr   r   r  r   guardsr   r   r   r   	getLoggerr7   rg  r;   r   r>   r"   r%   PicklerrE   	Unpicklerr   r   r=   r   r   r   fxGraphModuler   Tensorr   rL  rN  rR  rY   rZ   ri  rC   r#   r!   <module>rz     s            				  				    . . . . . . . . E E E E E E E E E E ! ! ! ! ! ! / / / / / / / / / /   7 7 7 7 7 7 8 8 8 8 8 8 , , , , , ,                     4++++++33333333 g!!% %),%8;%	#s(^% % % % O O O O O O O O$X X X X X X X Xv' ' ' ' '&* ' ' '         %3 %e % % % % t* t* t* t* t* t* t* t*x  N NN%S/4S>9:N N ux+T%,-?@BVVW	N
 D[N N N N Nb 0 0 0 0 0 0 0 0   ,  ,  ,  ,  ,  ,  ,  ,F58?55 5 ux+T%,-?@BVVW	5
 5 5 5 5 5 5r#   