
    ie6                        S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	J
r
JrJrJrJr  S SKrS SKJr  S SKJrJrJr  S SKJr  S S	KJrJr  S S
KJrJrJrJrJ r   S SK!J"r"  S SKJ#r#  S SK$J%r%  S SK&J'r'  S SK(J)r)J*r*  S SK+J,r,  S SK-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8  S SK9J:r:  S SK;J<r<  S SK=J>r>  S SK?J@rA  \	rB\" S/ SQ5      rC\" SSS/5      rD\:" SS9S\4S j5       rE\S \R                  R                  4S! j5       rH " S" S#\R                  R                  5      rI\:" SS9  S+S$\
S%\	4   S&\\ S%4   S'\\   S(\\\	      S\4
S) jj5       rJS* rKg),    N)
namedtuple)contextmanager)
MethodType)AnyCallablecastListOptionalTuple)CaptureConfig)ExportErrorExportErrorTypeInternalError)ExirExportedProgram)
_transformHackedUpExportedProgramDONOTUSE)_default_decomposition_tabledispatch_tracedynamo_traceflatten_outputValue)EXIRATenDialectVerifierBase)_guards)enable_python_dispatcher)!ReplaceViewOpsWithViewCopyOpsPass)
FakeTensorFakeTensorMode)export)	ExportedProgramExportGraphSignature	InputKind	InputSpecModuleCallEntryModuleCallSignature
OutputKind
OutputSpecTensorArgument)functionalize)compatibility)make_fx)ShapeEnv)_pytreeCompileSpec)method_namecallableargsdynamic_shapesCallSpecin_specout_specF)is_backward_compatiblereturnc                 x   [         R                  " S[        SS9  [        X5      n[	        [
        R                  " U5      S   5      nUR                  UR                  pT[        X#5        UR                  [        R                  R                  5        UR                  R                   Vs/ s H   ofR                   S:X  d  M  UR"                  PM"     nn[%        UR                  R                  5      S   nUR                   S:X  d   eUR&                  S    V	s/ s H  oR"                  PM     n
n	UR                  R                   H  nUR                   S:X  d  M  S	UR(                  ;  d  M'   [
        R*                  " [        R,                  R.                  S
 UR&                  UR0                  45      u  pUR2                  " U0 UD6UR(                  S	'   M     [7        UUR                  [9        U Vs/ s H#  n[;        [<        R>                  [A        US9SS9PM%     snU
 Vs/ s H#  n[C        [D        RF                  [A        US9SS9PM%     snS9[I        XE5      0 0 [K        S[M        / / UUS9S9/S[N        S9	n[Q        US5      $ s  snf s  sn	f ! [4         a    SUR(                  S	'    GMh  f = fs  snf s  snf )zO
This is a legacy API that should be avoided. Prefer to use capture() instead.
zThis function is now deprecated, please use `torch.export and exir.to_edge` instead. See https://github.com/pytorch/functorch for more details.   
stacklevelr   placeholderoutputcall_functionvalc                      U R                   S   $ )Nr?   )meta)xs    _/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/exir/capture/_capture.py<lambda>,_capture_legacy_do_not_use.<locals>.<lambda>[   s    QVVE]    Nnamekindargtarget)input_specsoutput_specs inputsoutputsr3   r4   fqn	signature)	rootgraphgraph_signature	call_spec
state_dictrange_constraintsmodule_call_graphexample_inputsverifierF))warningswarnDeprecationWarningr   tuplepytreetree_flattenr3   r4   5_instantiate_missing_placeholder_val_with_real_inputs_applytorchTensor
contiguousrW   nodesoprH   listr0   rA   tree_map_onlyfxNodekwargsrL   	Exceptionr   r    r"   r!   
USER_INPUTr'   r&   r%   USER_OUTPUTr2   r#   r$   r   r   )fr0   graph_module	flat_argsr3   r4   nodeuser_inputsoutput_noderK   user_outputsnrp   ioeps                   rC   _capture_legacy_do_not_user   =   s   
 MM	E	 "!*Lf))$/23I$,,l.C.CX9,R//0 +00666d'']:R			6   |))//04K>>X%%%(3(8(8(;<(;HH(;L<%%44?"uAFF':%%33HHMM#:QVVQXX<N  !"$ 9& 9u & 
)  ,
 %	 %A "-->q3IRV %	 &	 &A #//^5KTX &	
 7-- $ &	
 ,I%
BL r5))o
 =  % $u%s1   +JJJ.A(J4*J2$*J7J/.J/objc              #      #    U R                   nUR                  X R                  5      U l          Sv   X l         g! X l         f = f7f)zHelper method to make it easier to cleanly torch.export() a method on a
module that is not `forward`.

TODO(suo): upstream this to torch.export.wrapper.
N)forward__get__	__class__)r   
new_methodoriginal_methods      rC   patch_forwardr      s<      kkO $$S--8CK& &os   -A; AAAc                   (   ^  \ rS rSrU 4S jrSrU =r$ )WrapperModule   c                 .   > [         TU ]  5         Xl        g N)super__init__r   )selfrt   r   s     rC   r   WrapperModule.__init__   s    rF   )r   )__name__
__module____qualname____firstlineno__r   __static_attributes____classcell__)r   s   @rC   r   r      s     rF   r   rt   .r0   configr1   c                 h  ^^^ [         R                  " S[        SS9  [        U[        5      (       d'  [        [        R                  S[        U5       S35      eU=(       d
    [        5       nS n[	        [        R                  " U5      S   5      nUR                  (       d+  UR                  (       a  [        [        R                  S5      eUR                  (       Ga  UR                  (       Ga  UR                   (       a  [        [        R                  S5      eUR"                  (       d  [        [        R                  S	5      e[        U [$        5      (       a  [        U R&                  [(        R*                  R,                  5      (       aX  [/        U R&                  U 5         [1        [3        [(        R*                  R,                  U R&                  5      UUS
S9nS S S 5        OA[        U [(        R*                  R,                  5      (       a  U O
[5        U 5      n[1        XqUS
S9nWR7                  [9        5       5      n[;        U[=        5       5      nUR                  (       d  [?        US5      $ [3        [(        R@                  RB                  URE                  5       5      mO^UR                   (       a'  [G        U US
SURH                  UURJ                  S9u  mnO&[G        U US
SURH                  S URJ                  S9u  mnUc  [        TRL                  RN                  [(        R@                  RL                  RP                  5      (       a+  TRL                  RN                  RR                  RT                  nO:[W        TS5      (       a  TRX                  nO[        R                  " U " U6 5      S   n[        R                  " U0 45      S   n	UR"                  (       Ga  UR                  (       Gdz  [Z        R\                  " U5      nU4S jn
[_        U
SS9n[        U[`        5      (       d   eUR                   (       Ga  [c        SS
[e        5       S9n/ mTRL                  Rf                   H^  nURh                  S:X  d  M  SURj                  ;   d  M'  URj                  S   n[        U[l        5      (       d   eTRo                  U5        M`     [p        Rr                  " T5      =n(       a  UnSmUU4S jn[        Rt                  " [(        Rv                  UU5      n[y        5          U   [{        USS
S9" U6 mS S S 5        S S S 5        O#UR                  (       a  SOSn[{        UUS
S9" U6 m[}        T5        O[        S5      e[        TU5        TR                  [(        Rv                  R                  5        TRL                  Rf                   Vs/ s H?  nURh                  S:X  d  M  [        [        R                  [        UR                  S9S S9PMA     nn[        TRL                  Rf                  5      S   nURh                  S:X  d   eUR                  S    Vs/ s H-  n[        [        R                  [        UR                  S9S S9PM/     nnTRL                  R                  5         [        TTRL                  [        UU5      0 0 [        S[        / / U	US 9S!9/S [        /S"9n[?        US5      $ ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= fs  snf s  snf )#NzUThis function is now deprecated, please use `torch.export and exir.to_edge` instead. r8   r9   z'Expect `args` to be a tuple, got type: .r   zS_unlift config doesn't do anything without enable_aot enabled. Please do not set itzVUnder enable_aot, enable_dynamic_shapes flag doesn't do anything. Please do not set itz-Functionalization is required for enable_aot.T)r1   strictFsymbolic)
aten_graphtracing_modedynamo_configr1   _use_old_decomp_tablefake	_out_specc                     > [         R                  R                  R                  5          [         R                  R	                  T5      R
                  " U 6 sS S S 5        $ ! , (       d  f       g = fr   )rg   rn   	tracebackpreserve_node_metaInterpreterrun)r0   ru   s    rC   graph_with_interpreter'capture.<locals>.graph_with_interpreter  sB    XX''::< 88//=AA4H =<<s   ,A  
A.mutations_and_views)remove)allow_fallback_kernelsallow_non_fake_inputs	shape_envr;   r?   c                    > TT   nTS-  mU$ )Nr8    )rB   r?   countinpss     rC   convert_to_fake capture.<locals>.convert_to_fake(  s    u+CQJEJrF   real)r   _allow_non_fake_inputsz'pt2=False path is officially deprecatedrG   rI   r<   r=   rO   rP   rS   )rV   rW   rX   rZ   r[   r\   r]   	verifiers)Sr_   r`   ra   
isinstancerb   r   r   INVALID_INPUT_TYPEtyper   rc   rd   
enable_aot_unliftNOT_SUPPORTEDpt2_modeenable_dynamic_shapeenable_functionalizationr   __self__rg   nnModuler   r   r   r   run_decompositionsr   r   r   r   rn   GraphModulemoduler   _dynamo_configr   rW   _codegen_PyTreeCodeGenpytree_infor4   hasattrr   copydeepcopyr(   r   r   r+   rj   rk   rA   r   appendr   detect_fake_moderm   rh   r   r*   r   r   re   rf   ri   r"   r!   rr   r'   rH   rl   r0   r&   r%   rs   eliminate_dead_coder   r    r#   r$   r   )rt   r0   r   r1   r4   rv   r~   mod_r3   r   functionalized_callablefake_tensor_moderw   example_fake_tensordetected_fake_moder   	fake_argsr   rx   ry   rK   rz   r   ru   r   s                          @@@rC   capturer      s    MM_
 dE""..5d4j\C
 	

 &}FHf))$/23I>>--e  **!#11l  22!#11C  !Z((Z

EHHOO-T-T"1::q1UXX__ajj9'5#	B 21 &a99a}Q?OCnTR&&'C'EFBB A CDB>>*2u55 4 4biikBL((*'$33-&,&B&BOL! +#$33#&,&B&BOL! ,,,55uxx~~7T7TUU'--66BBKK{33'11!..q$x8; %%tRj1!4***63D3D3D==&DI '4&,'# 5x@@@@***#1+0*.&j$  ,.(..44Dww-/ETYY4F.2ii.>+)*=zJJJJ$78	 5 *1)A)A$)GG%G'9$ #00PTU	-/1A#*/%+/3$ !	$"L 2B// *0vf&+!-+/  	  	|$ EFF9,	R//0 !&&,,	 -D77m#		
	%%>tyy+IRV	
 -	   |))//04K>>X%%%
 ##A&	 'C 	''^-JSW	
 '	   **,	  ,[,G-# &

 ./)
B, r5)) 21@ 2B1A//0sB   %9[4%\(\7\\*'.\*4\/4
\
\	\
\'c                 h   U R                   R                   Vs/ s H  o"R                  S:X  d  M  UPM     nn[        U5      [        U5      :w  a  [	        [
        R                  S5      e[        X15       H5  u  p$SUR                  ;  d  UR                  S   b  M'  XBR                  S'   M7     g s  snf )Nr;   z<Expect number of placeholders to be the same as user inputs.r?   )	rW   rj   rk   lenr   r   r   ziprA   )gmr0   rw   phsrK   s        rC   re   re   t  s    HHNN
GNDgg.F4NC
G
3x3t9))J
 	
 ^			!TYYu%5%="IIe $ Hs
   B/B/)NN)Lr   r_   collectionsr   
contextlibr   typesr   typingr   r   r   r	   r
   r   rg   executorch.exir.capture._configr   executorch.exir.errorr   r   r   executorch.exir.programr    executorch.exir.program._programr   r   executorch.exir.tracerr   r   r   r   r   %executorch.exir.verification.verifierr   r   torch._dispatch.pythonr   torch._export.passesr   torch._subclasses.fake_tensorr   r   torch.exportr   torch.export.exported_programr   r    r!   r"   r#   r$   r%   r&   r'   
torch.funcr(   torch.fx._compatibilityr)   "torch.fx.experimental.proxy_tensorr*   %torch.fx.experimental.symbolic_shapesr+   torch.utilsr,   rc   Valr-   r2   r   r   r   r   r   r   re   r   rF   rC   <module>r      sq     " %  = =  9 M M 7 X  N  ; B D 
 
 
 % 1 6 : ) 
 H
 j9j"9: e,I*+> I* -I*X &uxx & &&EHHOO  e, '+*.	J*SJ*
s

J* ]#J* T#Y'	J*
 J* -J*^	#rF   