
    9jL                        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jR                  e*      Z+dejX                  dedede-e.ef   fdZ/e G d d             Z0 G d dejb                        Z2 G d dejf                        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jt                  jv                  e<ejz                     ge!f   d&e>dz  de8fd'Z?e G d( d)             Z@e G d* d+             ZAd!ej                  j                  d,e<e@   d$e#d%e
ejt                  jv                  e<ejz                     ge!f   deAf
d-ZDy)/    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                 ^     | j                   |i |}|j                          |j                  S N)bindapply_defaults	arguments)r   r   r   bound_argumentss       Y/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_dynamo/aot_compile.pybind_localsr"   %   s1     %innd5f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y)CompileArtifactsr   r   guard_managerguards_state
backend_idcompiled_fnoriginal_coderuntime_envr   source_infodevice_typebackend_name)default_factorysystem_infoNc                 x    t        j                         }|j                  | j                  | j                         y r   )r   currentcheck_compatibilityr0   r-   )selfcurrent_systems     r!   r3   z$CompileArtifacts.check_compatibility;   s,    #++-**4+;+;T=M=MNr#   r   N)__name__
__module____qualname__inspect	Signature__annotations__r
   bytesstrr   typesCodeTyper   dataclassesfieldr   r2   r0   r3    r#   r!   r%   r%   -   sp       122O%%>>!  /k//
@R@RSKS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         |   |       || _        |j                         D ci c]  \  }}t	        |      | c}}| _        i | _        y c c}}w r   )super__init__rF   itemsidid_maperrors)r4   rF   rG   keyvalue	__class__s        r!   rJ   zAOTCompilePickler.__init__A   sR    *-:-@-@-B'
)sEBuIsN'
 '
s   Aobjc                     t        |      | j                  v r| j                  t        |         S t        |t        j                  j
                        r#|| j                  t        |      <   t        |      S y r   )rL   rM   
isinstancetorchnnModulerN   )r4   rR   s     r!   persistent_idzAOTCompilePickler.persistent_idI   sU    c7dkk!;;r#w''UXX__-#&DKK3 c7Nr#   valc                 V    dt         ffd}|j                  J |j                  d   S )Nr   c                       S r   rC   )rY   s   r!   _z+AOTCompilePickler._unpickle_cell.<locals>._T   s    Jr#   r   )object__closure__)clsrY   r\   s    ` r!   _unpickle_cellz AOTCompilePickler._unpickle_cellR   s0    	6 	 }}(((}}Qr#   funcbasec                 .    t        j                  ||      S r   )r?   
MethodType)r_   ra   rb   s      r!   _unpickle_bound_methodz(AOTCompilePickler._unpickle_bound_methodZ   s     d++r#   namec                 ,    t        j                  |      S r   )	importlibimport_module)r_   rf   s     r!   _unpickle_modulez"AOTCompilePickler._unpickle_module_   s    &&t,,r#   serialized_coder   c                 2    ddl m}  |j                  |      S )Nr   r   )torch._dynamo.packager   to_code_object)r_   rk   r   s      r!   _unpickle_codez AOTCompilePickler._unpickle_codec   s    8,~,,_==r#   codemodulequalnameargdefs.closurec                 r    t        j                  |      j                  }t        j                  |||||      S r   )rh   ri   __dict__r?   FunctionType)r_   rq   rr   rs   rt   ru   	f_globalss          r!   _unpickle_nested_functionz+AOTCompilePickler._unpickle_nested_functioni   s3     ++F3<<	!!$	8Wg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                  |      rs	 |j                  }|j                   }t#        ||j                        }t        j                  |      r|j                  }||urt        |       j$                  ||ffS t2        S t        j&                  |      r\d|j(                  v rNt        |       j*                  |j,                  |j.                  |j(                  |j0                  |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    9 r#   r   rm   z<locals>)rT   typer^   r`   cell_contentsr:   iscodern   r   rp   from_code_objectismodulerj   r7   ismethod__func____self__getattrre   
isfunctionr9   rz   __code__r8   __defaults__NotImplemented)r4   rR   r   ra   method_self
inner_funcs         r!   reducer_overridez"AOTCompilePickler.reducer_overridev   s   c4!4a 8 D DQ GHI:,,s/@/@.BBB^^C <:,,/N~/N/Ns/S.UUUc":..??c" <<D,,K dmm<J
+'00
:%Dz884:MMM  $S---Dz;;LLNN$$$$OO>   r#   )r7   r8   r9   dictr>   r]   ioBytesIOrJ   intrX   classmethodr`   r   r?   rd   re   
ModuleTyperj   r@   rp   tupleCellTyperx   rz   r	   r   __classcell__rQ   s   @r!   rE   rE   @   sz   d3;&7 bjj T  C#I,<     F     ,( ,& ,UEUEU , , -C -E,<,< - - >-= >%.. > >
 	Onn	O 	O 		O
 vs{#d*	O u~~s*+d2	O 
			O 	O"C "C "r#   rE   c                   Z     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                 2    t         |   |       || _        y r   )rI   rJ   rF   )r4   rF   r   rQ   s      r!   rJ   zAOTCompileUnpickler.__init__   s    *r#   rO   c                 r    || 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   rO   s     r!   persistent_loadz#AOTCompileUnpickler.persistent_load   sP    d(((?u E= %%&(  !!#&&r#   )r7   r8   r9   r   r>   r]   r   r   rJ   r   r   r   s   @r!   r   r      s=    +d3;&7 +rzz +f +'3 '6 'r#   r   c                       e Zd ZU eed<   y)AOTCompileSaveResultserialized_dataN)r7   r8   r9   r=   r<   rC   r#   r!   r   r      s    r#   r   	file_pathdatac                 p   t         j                  j                  |       xs d}t        j                  |dd      5 }|j
                  }|j                  |       |j                          t        j                  |j                                d d d        t        j                  |        y # 1 sw Y    xY w)N.Fwb)dirdeletemode)ospathdirnametempfileNamedTemporaryFilerf   writeflushfsyncfilenoreplace)r   r   dir_name	temp_file	temp_paths        r!   atomic_write_binaryr      s    wwy)0SH		$	$U
 %	NN	
!!#$% JJy)$% %s   AB,,B5c            
       D   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y)AOTCompiledFunction
_artifactsT_guard_check_enabledN_extra_globalsr   r   r   c                    i }| j                   j                  }|j                  r|j                  j                  r5t        |j                        t        |j                  j                        k(  sJ t        |j                  j                  |j                        D ci c]  \  }}||j                   }}}|j                  t        | j                   j                  g|i |       |S c c}}w r   )r   r+   ru   bytecodeco_freevarslenzipr   updater"   r   )r4   r   r   f_localsenvrf   cells          r!   prepare_f_localsz$AOTCompiledFunction.prepare_f_locals   s    &(oo));;<<++CKK0@C((E 1  
 #&cll&>&>"LD$ d(((H  	DOO$=$=OOOPs   C-c                      | j                   |i |}| j                  j                  J | j                  j                  j                  |      S r   )r   r   r&   check)r4   r   r   r   s       r!   guard_checkzAOTCompiledFunction.guard_check   sJ    (4(($9&9,,888,,228<<r#   c                    ddl m}m} | j                  j	                          | j                  j
                  j                  | j                  j                  | j                  j                  | j                        | _
        | j                  j                  ^ || j                  j                        } ||| j                  j                  | j                  j                        | j                  _        y y )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++-//-->>OO&&OO''-- ? 
 ??((0,T__-I-IJL,>--##-DOO) 1r#   c                 .   | j                   j                  J | j                  r` | j                  |i |sN | j                  |i |}t        | j                   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$$-=T-=-=t-Nv-N,t,,d=f=H66DDXNOF!DVHMNNtww'''r#   c                 .    | j                   j                  S r   )r   r,   r4   s    r!   r,   zAOTCompiledFunction.source_info   s    ***r#   r   rF   c                 h    t        |       j                  | |      }t        ||j                         |S r   )r   	serializer   r   )r4   r   rF   results       r!   save_compiled_functionz*AOTCompiledFunction.save_compiled_function   s/     d%%dM:D&"8"89r#   r   c                    ddl m} |j                  j                  j	                         }d |d<   t        j                  |d    |j                  |d   j                              |d<   |d   }t        |      j                  t        |      j                  |      f|d<    |j                  |d         |d<   t        j                         }t        |xs i |      }|j                  |       |j                   r0t#        dt%        |j                   j'                                d	      t)        |j+                         
      S )Nr   rm   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   )rn   r   r   rw   copyrA   r   r   r   r   deserialize_compile_artifactsserialize_compile_artifactsr   r   rE   dumprN   r   listvaluesr   getvalue)r_   r   rF   r   stater)   rG   picklers           r!   r   zAOTCompiledFunction.serialize   s/    	9&&++-!%o*22- 4^44U=5I5R5RS 
m M*;;99+F 
m "A!@!@AW!Xojjl#M$7R=U>>=d7>>CXCXCZ>[=\ ][ [  $CLLNCCr#   r   ry   external_closure_datac                 ,   ddl m} t        j                  |      }|j	                  d       t        |xs i |      }|j                         }|j                          t        j                  |d    |j                  |d   j                              |d<   |d   \  }}	t        j                  j                  j                  d      5   ||	      |d<   d d d         |j                  |d         |d<   t!        d
i |}
 | |
|	      S # 1 sw Y   6xY w)Nr   rm   r+   r   r)   T)enable_autograd_for_aotr*   )r   rC   )rn   r   r   r   seekr   loadcloserA   r   ro   r   rU   	_inductorconfigpatchr%   )r_   r   ry   r   r   f	unpicklerr   deserializercompiled_fn_state	artifactss              r!   deserializezAOTCompiledFunction.deserialize  s    	9JJt	q	'(=(CQG	 		*22- 2^2253G3P3PQ 
m +0*>''__##))$)G 	C#/0A#BE- 	C!>!>!>u_?U!Vo$-u-	9Y77	C 	Cs   	D

Dc                     d| _         y )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f  4VCT = = = =
&(c (S (S (+ AE(,S#X(=	 OSD&D7;CH~7LD	D D6  /37;	88 V$t+8  $CH~4	8
 
8 82*r#   r   modelexample_inputs.hooksbackenddynamicc                 8	   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                   j#                  d	
      5  |5  |5  t%        j&                  | |
|      }|j(                  }|j*                  J |j,                  s)ddlm} dt2        |   dt2        t4           ffd}||_        t%        j6                  |       \  }}|j8                  }|J |j:                  |j<                  _        tA        |j<                  jB                        }|jD                  jF                  |j*                  jF                  u sJ  |	|jD                        }|jH                  |_$        t        jJ                  jM                  |      5  t        j                  j                   j#                  d	d	d	d	d	d      5   ||j<                  |jN                        }tQ        |t        jR                        sftU        |d      rBtQ        |jV                  t        jX                  jZ                  j\                  j^                        stU        |d      r|j`                  tc        |      }d d d        d d d        tQ        td              s:tU        |d      r|jV                  }n|}tg        dti        |       dd| dz         tk               }|jl                  r|jo                  |jq                                |5  |js                  |jt                  |d	d	      }d d d        jv                  J  |ty                     }|jz                  D ]  }|j}                  |        t        t%        j                  |      |j                  |jv                  |j:                  ||jt                  |j                         ||t        |dd      
      }t        ||j                        }d d d        d d d        d d d        d d d        d d d        S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   VxY w# 1 sw Y   ZxY w# 1 sw Y   ^xY w# 1 sw Y   S xY w)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                 x    | D cg c])  }|j                   xs |j                  j                  v  + c}S c c}w r   )	is_global
guard_type%UNSUPPORTED_SERIALIZATION_GUARD_TYPES)r  gr  s     r!   new_guard_filter_fnz2aot_compile_fullgraph.<locals>.new_guard_filter_fn[  sL     +	  KK Z ||3YY Z	 	 	s   .7)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  rn   r   torch._dynamo.utilsr  r  &torch._dynamo.variables.torch_functionr  torch._guardsr  r   torch._dynamo.eval_framer  rU   
_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   rT   _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,   r<  r   aot_compiled_fnr  s                                   @r!   aot_compile_fullgraphrF  6  s~    :0E -!LD&-K?(1 	u
()u
 	%%D%Au
 		u

 	,u
 '88fM-BB#00<<<$$<'(89$ %8E!++E2A&44(((1>1I1I"".()C)C)I)IJ##--#00::;	
; ))@)@A,9,K,K)MM!!/2	R##))-115.28<,0	R "**M,H,HK 7E$F$FGG]3"++U]]-C-C-J-J-V-V
 K5#--9 E[Q?	R 	RB +';<w.%11%)${*;)<KH!+.XYZ  %;.44**3FFH  	+885t$ 9 H	
 $$000 7/;; 	.K  -	. %#2226"00!..$//#++,<<>## /9E
	 . 
gu
 u
 u
 u
 u
n [	R 	R 	R 	Rd	 	yu
 u
 u
 u
 u
 u
 u
 u
 u
n s   	R+R<Q7?Q+	D9Q;0Q+B)P8QB	Q% QC	QQ+	Q7R&R8Q=QQ
QQQQ($Q+	+Q40Q77R <RR	RRc                   L    e Zd ZU dZee   ed<   eeef   ed<   e	e
e      ed<   y)
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!   rH  rH    s2     *cN)#.//r#   rH  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y
)AOTCompiledModelr   compiled_resultsr   r   r   c                     | j                   D ]:  } |j                  | j                  g|i |s$ || j                  g|i |c S   | j                   d   | j                  g|i |S )Nr   )rM  r   r   )r4   r   r   r   s       r!   r   zAOTCompiledModel.__call__  sv    ++ 	;F!v!!$**>t>v>djj:4:6::	; (t$$Q'

DTDVDDr#   c                     g }| j                   D ]0  }|j                  t        j                  |      j                         2 t        j                  |      S r   )rM  appendr   r   r   pickledumps)r4   r   r   s      r!   r   zAOTCompiledModel.serialize  sK    ++ 	OFKK+55f=MMN	O||D!!r#   r   c                 X   ddl m} ddlm}m} t        j                  |      }g }|D ]`  } | |t        j                  i                   5   |       5  |j                  t        j                  |             d d d        d d d        b  | ||      S # 1 sw Y   xY w# 1 sw Y   xY w)Nr   )r  )compile_contextCompileContext)r  r  r   rT  rU  rQ  loadsr   get_compile_idrP  r   r   )	r_   r   r   r  rT  rU  resultsrM  r   s	            r!   r   zAOTCompiledModel.deserialize  s    ;A%||D1 	QF}/K/KB/O PQQ#%Q !''(;(G(G(OP	Q Q Q	Q 5*++Q Q Q Qs$   B %B9B BB  B)	N)r7   r8   r9   rU   rV   rW   r<   r   r   r	   r   r=   r   r   r   rC   r#   r!   rL  rL    sz     88??.//Ec ES ES E"5 " , ,u ,AS , ,r#   rL  inputsc                      dt         dt        f fd}g }|D ]/  }t        j                  d|       |j	                   ||             1 t        |      dkD  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 ]  }|j                  |        t        ||      cd d d        S # 1 sw Y   y xY w)N)r   r   )r   r   forwardr   rI  r8  rF  )r[  r   orig_forwardr7  ctxr   r   r   s        r!   compile_single_graphz0aot_compile_module.<locals>.compile_single_graph  su    %**K,>,>?}}[ 	E"++ )##C()(		 	 	s   1A++A4zCompiling input %s..r   )rH  r   loginforP  r   rL  )r   rY  r   r   r`  rM  r[  s   ` ``   r!   aot_compile_modulerc    sw    * 9L   C'5 4[ ABC  1$$$E#344r#   r   )ErA   rh   r:   r   loggingr   rQ  r   r?   collections.abcr   r   
contextlibr   r   r   r   typingr	   r
   r   rU   torch.fxtorch._dynamo.convert_framer   torch._dynamo.graph_utilsr   rn   r    r   aot_compile_typesr   r   r   r   guardsr   r   r   r   	getLoggerr7   ra  r;   r   r>   r"   r%   PicklerrE   	Unpicklerr   r   r=   r   r   r   fxGraphModuler   Tensorr   rF  rH  rL  rV   rW   rc  rC   r#   r!   <module>rt     sK      	  	    . E E ! / /   7 8 ,   +3 g!%  %),%8;%	#s(^% O O O$X Xv'&** '    %3 %e % t* t* t*x  NN%S/4S>9:N N uxx++T%,,-?@BVVW	N
 D[N Nb 0 0 0   ,  ,  ,F588??55 5 uxx++T%,,-?@BVVW	5
 5r#   