
    9i24                        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 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"  ej#        e$          Z%dej&        dedede'e(ef         fdZ)e G d d                      Z* G d dej+                  Z,e G d d                      Z-dede.e.edf         e'e(ef         f         dedeej/        j0        e1ej2                 gef         de-f
dZ3e G d  d!                      Z4e G d" d#                      Z5dej6        j7        d$e1e4         dedeej/        j0        e1ej2                 gef         de5f
d%Z8dS )&    N)Callable)AbstractContextManager	ExitStack)	dataclass)AnyOptionalTYPE_CHECKING)GraphRuntimeEnv)_graph_device_type)
SystemInfo   )convert_frame)&BundledAOTAutogradSerializableCallableSerializableCallable)Hooks)GuardManagerWrapper
SourceInfo	signatureargskwargsreturnc                 R     | j         |i |}|                                 |j        S N)bindapply_defaults	arguments)r   r   r   bound_argumentss       L/var/www/icac/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_compatibilityr.   r+   )selfcurrent_systems     r   r1   z$CompileArtifacts.check_compatibility8   s2    #+--**4+;T=MNNNNNr!   r   N)__name__
__module____qualname__inspect	Signature__annotations__r   bytesstrr   typesCodeTyper
   dataclassesfieldr   r0   r.   r1    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ededefd            ZdedefdZdS )AOTCompilePicklervalr   c                 J    dt           ffd}|j        J |j        d         S )Nr   c                       S r   rA   )rD   s   r   _z+AOTCompilePickler._unpickle_cell.<locals>._@   s    Jr!   r   )r   __closure__)clsrD   rG   s    ` r   _unpickle_cellz AOTCompilePickler._unpickle_cell>   sE    	3 	 	 	 	 	 	 }(((}Qr!   objc                     t          |t           d d          j        d                             rt          |           j        |j        ffS t
          S )Nc                       fdS )Nc                       S r   rA   xs   r   <lambda>zFAOTCompilePickler.reducer_override.<locals>.<lambda>.<locals>.<lambda>H   s    1 r!   rA   rO   s   `r   rQ   z4AOTCompilePickler.reducer_override.<locals>.<lambda>H   s    9999 r!   r   )
isinstancetyperH   rJ   cell_contentsNotImplemented)r2   rK   s     r   reducer_overridez"AOTCompilePickler.reducer_overrideG   sT    c4!4!4!4a 8 8 DQ GHHII 	C::,s/@.BBBr!   N)r5   r6   r7   classmethodr   rJ   rV   rA   r!   r   rC   rC   =   sb                  [ C C      r!   rC   c            	          e Zd ZU eed<   dZeed<   dZee	e
ef                  ed<   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e
ddfdZedd defd            Ze	 ddedee	e
ef                  dd fd            ZddZdS )AOTCompiledFunction
_artifactsT_guard_check_enabledN_extra_globalsr   r   r   c                    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 |           | j         j
        J | j         j
                            |          S )Nc                 $    i | ]\  }}||j         S rA   )rT   ).0namecells      r   
<dictcomp>z3AOTCompiledFunction.guard_check.<locals>.<dictcomp>Z   s1       D$ d(  r!   )rZ   r)   closurebytecodeco_freevarslenzipupdater    r   r$   check)r2   r   r   f_localsenvs        r   guard_checkzAOTCompiledFunction.guard_checkS   s    #%o); 	<+ CK0@0@C(E E 1 1 1 1 "%cl&>"L"L  H 	DO$=OOOOOOPPP,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)packagern   ro   rZ   r1   r)   forward_callabler&   r'   r\   fnr$   r%   r(   __globals__)r2   rn   ro   r%   s       r   __post_init__z!AOTCompiledFunction.__post_init__b   s    BBBBBBBB++--- /->>O&O'- ? 
 
 ?(0,,T_-IJJL,>,>-#- -DO))) 10r!   c                    | j         j        J | j        re | j        |i |sXt	          | j         j        g|R i |}t          | j         j                            |                    }t          d|            | j	        |i |S )Nz#GuardManager check failed, reason: )
rZ   r$   r[   rl   r    r   r<   check_verboseRuntimeErrorrs   )r2   r   r   rj   reasons        r   __call__zAOTCompiledFunction.__call__v   s    ,888$ 	O-=T-=t-Nv-N-N 	O"4?#<NtNNNvNNH6DDXNNOOFMVMMNNNtw''''r!   r   c                     | j         j        S r   )rZ   r*   r2   s    r   r*   zAOTCompiledFunction.source_info~   s    **r!   pathc                     t          |d          5 }|                    t          |                               |                      d d d            d S # 1 swxY w Y   d S )Nwb)openwriterS   	serialize)r2   r}   fs      r   save_compiled_functionz*AOTCompiledFunction.save_compiled_function   s    $ 	0GGDJJ((..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   6AAArs   c                 "   ddl m} |j        j                                        }d |d<   t          j        |d         |                    |d         j                            |d<   |d         }t          |          j
        t          |                              |          f|d<   |                    |d                   |d<   t          j                    }t          |          }|                    |           |                                S )Nr   SerializedCoder$   r)   rd   r'   r(   )torch._dynamo.packager   rZ   __dict__copyr?   replacefrom_code_objectrd   rS   deserialize_compile_artifactsserialize_compile_artifactsioBytesIOrC   dumpgetvalue)rI   rs   r   stater'   bufpicklers          r   r   zAOTCompiledFunction.serialize   s   888888&++--!%o*2- #44U=5I5RSS 
  
  
m M*;99+FF 
m "0!@!@AW!X!Xojll#C((U||~~r!   data	f_globalsc                    ddl m} t          j        |          }t	          j        |d         |                    |d         j                            |d<   |d         \  }}t          j	        j
                            d          5   ||          |d<   d d d            n# 1 swxY w Y   |                    |d                   |d<   t          d
i |} | ||	          S )Nr   r   r)   r   r'   T)enable_autograd_for_aotr(   )r\   rA   )r   r   pickleloadsr?   r   to_code_objectrd   torch	_inductorconfigpatchr#   )rI   r   r   r   r   deserializercompiled_fn_state	artifactss           r   deserializezAOTCompiledFunction.deserialize   sP    	988888T""*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   B##B'*B'c                     d| _         d S )NF)r[   r|   s    r   disable_guard_checkz'AOTCompiledFunction.disable_guard_check   s    $)!!!r!   r4   )r   r   r   )r5   r6   r7   r#   r:   r[   boolr\   r   dictr<   objectr   rl   ru   rz   r*   r   rW   r;   r   r   r   rA   r!   r   rY   rY   M   s~            !%$%%%26NHT#v+./666= = = = = = =   ((c (S (S ( ( ( (+ + + +03 04 0 0 0 0 0 U    [( CG8 88%-d3;.?%@8	8 8 8 [8$* * * * * *r!   rY   modelexample_inputs.hooksbackendc                    ddl m ddlm} ddlm}m} ddlm} |\  }}	 |            5   |d          5  t          j
        j                            d          5  t          j        | ||	          }
|
j        }|j        J |j        s2dd	lm} d
t(          |         dt(          t*                   ffd}||_        t          j        |           \  }}|
j        }|J |j        |j        _        t7          |j        j                  }|j        j        |j        j        u sJ  ||j                  }|j        |_        t          j         !                    |          5  t          j
        j                            ddd          5   ||j        |j"                  }tG          |t          j$                  rtK          |          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   tG          |tL                    sAtO          |d          r|j(        }n|}tS          dtU          |           dd| dz             |+                    |j,        |dd          }|j-        J  |t]                                }|j/        D ]}|0                    |           tc          t          j2        |          |j3        |j-        |j        ||j,        |4                                ||tk          |dd          
  
        }tm          ||j7                  }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   )CheckFunctionManagerr   )dynamo_timedget_metrics_context)TracingContextfullgraph_captureT)strict_autograd_cache)GuardFilterEntryguard_entriesr   c                      fd| D             S )Nc                 <    g | ]}|j         p|j        j        v  S rA   )	is_global
guard_type%UNSUPPORTED_SERIALIZATION_GUARD_TYPES)r_   gr   s     r   
<listcomp>zFaot_compile_fullgraph.<locals>.new_guard_filter_fn.<locals>.<listcomp>   sI     	 	 	  K Z |3Y Z	 	 	r!   rA   )r   r   s    r   new_guard_filter_fnz2aot_compile_fullgraph.<locals>.new_guard_filter_fn   s0    	 	 	 	 +	 	 	 	r!   )bundled_autograd_cache force_non_lazy_backward_loweringcompiler_fnz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,   )rZ   r\   )8torch._dynamo.guardsr   r   r   torch._dynamo.utilsr   r   torch._guardsr   r   
_functorchr   r   r   r   graph_capture_outputoutput_graphguard_filter_fntorch._dynamo.typesr   listr   get_traced_fnbackend_inputr&   graph_module_backend_idr   graph	fake_mode	shape_envtensor_to_context_guardstracingr   rR   _TorchCompileInductorWrapperr   r   hasattrr   rx   rS   build_guards__code__r%   settraced_codeadd_coder#   _get_signaturer$   get_runtime_envgetattrrY   rt   )r   r   r   r   r   r   r   r   r   r   capture_outputr   r   r   rs   rG   r   r+   tracing_contextr'   r   check_fnr*   r   r   aot_compiled_fnr   s                             @r   aot_compile_fullgraphr      s    :99999000000EEEEEEEE,,,,,,!LD& 	[
 [
())[
 [
 	%%D%AA[
 [

 '8fMM-B#0<<<$ 	8<<<<<<#$45d      %8E!+E22A&4(((1>1I".()C)IJJ#-#0:; ; ; ; ).)@AA,9,K)M!!/22	R 	R#)).28<  	R 	R "'*M,H K
 '5#EFF RD[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" +';<< 	w.. &%1%H${*;*;HHHY+YYYZ  
 (44Ku4d 5 
 
 $000 j777/; 	. 	.K  ----$#2266"0!.$/#+,<<>>## /9EE
 
 
	 . 
 
 
s[
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
 [
z s   M&MDL*(G)	A GG)	GG)	GG)	L*)G--L*0G-1D-L*M*L..M1L.2M5MM	MM		MMM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)r5   r6   r7   __doc__tupler   r:   r   r<   r   r   rA   r!   r   r   r     sY           *cN)#.//////r!   r   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   )r   rl   r   )r2   r   r   results       r   rz   zAOTCompiledModel.__call__6  s    + 	; 	;F!v!$*>t>>>v>> ;vdj:4:::6:::::; (t$Q'
DTDDDVDDDr!   c                     g }| j         D ]/}|                    t                              |                     0t	          j        |          S r   )r   appendrY   r   r   dumps)r2   r   r   s      r   r   zAOTCompiledModel.serialize=  sM    + 	? 	?FKK+55f==>>>>|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   r   r   r   r   r   get_compile_idr   rY   r   )	rI   r   r   r   r   r   resultsr   r   s	            r   r   zAOTCompiledModel.deserializeC  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)r5   r6   r7   r   nnModuler:   r   rY   r   rz   r;   r   rW   r   rA   r!   r   r   r   /  s          8?.////Ec ES ES E E E E"5 " " " " , ,u ,AS , , , [, , ,r!   r   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   r   enter_contextr   )r   r   orig_forwardstack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   )r   rY   loginfor   rf   r   )r   r   r   r   r  r   r   s   ` ``   r   aot_compile_moduler
  S  s    * 9L          C C'555 4 4[ A ABBBB  1$$$$E#3444r!   )9r?   r8   r   loggingr   r=   collections.abcr   
contextlibr   r   r   typingr   r   r	   r   torch.fxtorch._dynamo.convert_framer
   torch._dynamo.graph_utilsr   r   r    r   aot_compile_typesr   r   r   r   guardsr   rq   r   	getLoggerr5   r  r9   r   r<   r    r#   PicklerrC   rY   r   fxGraphModuler   Tensorr   r   r   r   r   r
  rA   r!   r   <module>r     s        				    $ $ $ $ $ $ 8 8 8 8 8 8 8 8 ! ! ! ! ! ! / / / / / / / / / /   7 7 7 7 7 7 8 8 8 8 8 8 , , , , , ,                     $++++++###### g!!% %),%8;%	#s(^% % % % O O O O O O O O$         `* `* `* `* `* `* `* `*Fjj%S/4S>9:j j ux+T%,-?@BVVW	j
 j j j jZ 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!   