
    i7                        S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJ	r	J
r
Jr  S SK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  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"  S SK#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1r.S\-SS4S jr/S&S jr0 " S S\%5      r1    S'S\	\   S\2S\	\\Rf                  RN                        S\	\\Rf                  RN                        4S jjr4S \4S! jr5S"\-S\\	\)      4S# jr6S\-SS4S$ jr7    S'S\	\   S\2S\	\\Rf                  RN                        S\	\\Rf                  RN                        4S% jjr8\8" 5         g)(    N)nullcontext)AnyListOptionalTupleType)EdgeCompileConfig)EdgeOpOverload)ExportErrorExportErrorType)LoweredBackendModule)DimOrderOpsMap)_EXECUTORCH_SYM_OPS)DISALLOW_LIST)EdgeOpArgValidatorRunHigherOrderOperatorError)enable_python_dispatcher)_detect_fake_mode_from_gm)SpecViolationErrorVerifier)
OpOverload)
FakeTensor)ExportedProgram)GraphModulespecstack_tracegmreturnc                    [         R                  " U R                  5       U R                  5       5       HJ  u  p[	        U[
        R                  5      (       d  M&  UR                  5       (       a  M=  [        SU S35      e   g )Nz,Tensors in Aten dialect must be contiguous, z is not contiguous)		itertoolschainnamed_parametersnamed_buffers
isinstancetorchTensoris_contiguousr   )r   nameparams      d/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/exir/verification/verifier.py_check_tensors_are_contiguousr+   *   sf     r':':'<b>N>N>PQeU\\**&&(((B4&HZ[  R    c                     U(       a  U [         ;   a  [        U  S35      eg U R                  S;   a  [        U  S35      eg )Nz% should not be used in dim_order mode)dim_order_opsz) should not be used in non-dim_order mode)r   r   	namespace)opuse_dim_orders     r*   _check_valid_dim_order_opsr2   4   sL    $t+P%QRR   <<--$t+T%UVV .r,   c                   P   ^  \ rS rSrSrS\\\   S4   4S jrU 4S jr	S r
SrU =r$ )	EXIRATenDialectVerifierBase=   OLD_EXIR_ATEN_DISABLEDr   .c                 ~    [         R                  R                  [        [         R                  [         R
                  4$ Nr%   fxr   r   r&   ScriptObjectselfs    r*   allowed_getattr_types1EXIRATenDialectVerifierBase.allowed_getattr_types@   s,    HH   LL	
 	
r,   c                 X   > [         TU ]  5       [        R                  R                  4-   $ r8   )superallowed_op_typesr%   _opsOpOverloadPacketr=   	__class__s    r*   rB   ,EXIRATenDialectVerifierBase.allowed_op_typesH   s#    w')UZZ-H-H,JJJr,   c                     [        U S5      (       a  U R                  " U0 UD6$ [        U S5      (       a  U R                  " U0 UD6$ [        S5      eN_check_graph_modulecheck_valid )hasattrrJ   rK   RuntimeError)r=   argskwargss      r*   __call__$EXIRATenDialectVerifierBase.__call__K   sT    4.//++T<V<<T=))##T4V44r""r,    )__name__
__module____qualname____firstlineno__dialectr   r   r   r>   rB   rQ   __static_attributes____classcell__)rF   s   @r*   r4   r4   =   s1    &G
uT#Y^'< 
K# #r,   r4   edge_compile_config
class_onlycore_aten_ops_exception_listpreserve_opsc                 :  ^^ U=(       d    / mU=(       d    / mU (       aX  U R                   (       a  TR                  U R                   5        U R                  (       a  TR                  U R                  5         " UU4S jS[        5      nUnU(       d  U" 5       nU$ )zV
Returns a verifier class that runs ATen dialect specific checks on the graph module.
c                   x   >^  \ rS rSrSrSU UU4S jjrS\\R                  R                     4S jr
S rSrU =r$ )	9EXIRATenDialectVerifier.<locals>._EXIRATenDialectVerifierh   OLD_EXIR_ATENr   c                 >   > [         TU ]  5         TU l        TU l        g r8   )rA   __init___core_aten_ops_exception_list_preserve_ops)r=   rF   rf   rg   s    r*   re   BEXIRATenDialectVerifier.<locals>._EXIRATenDialectVerifier.__init__k   s    G1ND.!.Dr,   c                    [         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                  /[        [        5      -   [        -   U R                  -   nU$ r8   )r%   opsatenmkldnn_rnn_layerdefault_upsample_bilinear2d_aaquantize_per_tensor
dequantizer=   maxmin	full_likelistr   r   rf   )r=   exception_lists     r*   !_get_core_aten_ops_exception_list[EXIRATenDialectVerifier.<locals>._EXIRATenDialectVerifier._get_core_aten_ops_exception_listq   s     IINN33;;IINN::BBIINN66>>IINN--22IINN&&..IINN&&..IINN,,44 *+	,  
  445  "!r,   c                    [        U[        5      (       GaE  UR                  S:w  d  XR                  5       ;   a  g XR                  ;   a  UR                  S:w  a  [        SU SUR                   S35      eUR                  (       a  [        SU S35      eUR                  R                  (       a  [        R                  " SU S35        g [        R                  R                  UR                  ;  ag  [        R                  R                  UR                  ;  a>  [!        S	UR"                   SUR$                   S
['        U5       S['        U5       S3	5      eg g g )Nrk   z$Only preserve aten ops. Received op z with namespace .zCannot preserve operator z because it is a view.zPreserving mutation ops like zX is a no-op because run_decomposition functionalizes it and prevents it from showing up.z

Operator z is not in Core ATen opset (https://pytorch.org/docs/stable/torch.compiler_ir.html#core-aten-ir)."
There are a few things to try:
1. You can proceed with `to_edge(compile_config=EdgeCompileConfig(_core_aten_ops_exception_list=[torch.ops.z]]))`.
   Please make sure that the backend(s) you are planning to lower to is able to handle a6  , or you have a corresponding kernel linked to your runtime.

2. Sometimes inference and training gives slightly different op set. Try adding `with torch.no_grad():` context manager if you are export for inference only.

3. If the error persists after 2, this is likely caused by torch.export() + core ATen decomposition producing unexpected operators for your model.
   If you believe this operator should be included into core ATen opset, please create an issue in https://github.com/pytorch/pytorch/issues and add `module: core aten` tag.
                        )r$   r   r/   rv   rg   rN   is_view_schema
is_mutableloggingwarningr%   Tagcoretags	view_copyr   rU   rT   strr=   r0   s     r*   check_valid_opHEXIRATenDialectVerifier.<locals>._EXIRATenDialectVerifier.check_valid_op   sX   "j)) LLF*CCEE+++||v-*B2$FVWYWcWcVddef 
 zz*7t;QR  zz,,;B4  @X  Y 99>>0UYY5H5HPRPWPW5W -

--"++ 'lloprlskt uXX[\^X_W` a	
  6X01 *r,   )rf   rg   r   N)rT   rU   rV   rW   rX   re   r   r%   rC   r   rv   r   rY   rZ   )rF   rf   rg   s   @r*   _EXIRATenDialectVerifierra   h   s7    !	/ 	/	"tEJJ<Q<Q7R 	"$(	 (	r,   r   )rf   extendr^   r4   )r[   r\   r]   r^   r   retrf   rg   s         @@r*   EXIRATenDialectVerifierr   T   s     %A$FB! &BM<<)00#AA ++  !4!A!ABC C#> CJ #CeJr,   configc                 n    U R                   (       a  [        SU R                  U R                  S9$ [        $ )NT)r\   r]   r^   )_check_ir_validityr   rf   r^   r4   )r   s    r*   get_aten_verifierr      s;     $$ 	 )/)M)M,,	
 )r,   graph_modulec                    ^  S[         R                  R                  S[        [           4U 4S jjnT R
                  R                   Vs/ s H  nUR                  S:X  d  M  U" U5      PM     sn$ s  snf )Nnoder   c                    > SU R                   ;   a  U R                   S   $ [        U R                  5      S:X  a  g [        [        R
                  ST S35      e)Nvalr   z,Cannot construct an input for graph module: ry   )metalenusersr   r   VIOLATION_OF_SPEC)r   r   s    r*   extract_input"_get_inputs.<locals>.extract_input   sU    DII99U##tzz?a --:<.J
 	
r,   placeholder)r%   r:   Noder   r   graphnodesr0   )r   r   r   s   `  r*   _get_inputsr      si    
EHHMM 
hz.B 
  !&&,,,D77m# 	d,  s   	A0!A0c                    [        U 5      n[        U 5      n[        U 5      =(       d
    [        5       n [	        5          U   UR
                  " U6   S S S 5        S S S 5        UR                  (       aY  SnUR                  R                  5        H*  u  pVUSU SUS    S3-  nUSUS   R                   S3-  nM,     [        SU S	35      eg ! , (       d  f       N= f! , (       d  f       N= f! [         a     g f = f)
NrL   z
Operator: z with args: r   
zstack trace:    zAThese operators are taking Tensor inputs with mismatched dtypes:
ziPlease make sure the dtypes of the Tensor inputs are the same as the dtypes of the corresponding outputs.)r   r   r   r   r   runr   violating_opsitemsr   r   )r   	validatorinputs	fake_mode	error_msgr0   r   s          r*   ,_check_tensor_args_matching_op_allowed_dtyper      s    "2&I_F)"->I
%'MM6" *3' 	!//557HB<t<QyCCI=a)<)<(=R@@I 8
 !PQZP[wx
 	
  *3''&  	sF   
C. CCCC. 
C	C
C+'C. +C. .
C;:C;c                 >  ^ ^^ U=(       d    / mU=(       d    / mT (       aX  T R                   (       a  TR                  T R                   5        T R                  (       a  TR                  T R                  5         " UUU 4S jS[        5      nUnU(       d  U" 5       nU$ )Nc                      >^  \ rS rSrSrSUUU4S jjrS\\\   S4   4S jr	U 4S jr
S	 rS
\SS4S jrS
\S\4S jrS rSrU =r$ )9EXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifieri  EDGEr   Nc                 t  > T=(       d
    [        5       nUR                  U l        UR                  U l        UR
                  (       + U l        TU l        TU l        [        TTS9U l
        U R                  R                  U l        U R                  (       a  U R                  U l        g U R                  U l        g )N)r]   r^   )r	   r   enable_use_edge_opscheck_edge_ops_skip_dim_orderr1   rf   rg   r   aten_op_verifierr   check_valid_aten_opcheck_valid_edge_op)r=   _edge_compile_configrf   rg   r[   s     r*   re   BEXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifier.__init__  s    #6#M:K:M .AADK"6"D"DD%9%I%I!ID1ND.!.D$;-J*%D! (,'<'<'K'KD$""&*&>&>#&*&>&>#r,   .c                 ~    [         R                  R                  [        [         R                  [         R
                  4$ r8   r9   r<   s    r*   r>   OEXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifier.allowed_getattr_types  s,    $$$""	 r,   c                 N   > [         TU ]  5       [        [        R                  4-   $ r8   )rA   rB   r
   typesFunctionTyperE   s    r*   rB   JEXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifier.allowed_op_types#  s!    7+-ASAS0TTTr,   c                 <   U R                   (       d  g U[        R                  /[        -   [	        [
        5      -   U R                  -   ;   a  g [        U[        5      (       aD  [        U[        5      (       d/  [        SR                  UR                  UR                  5      5      e[        U[        5      (       a0  [        XR                  5        U R!                  UR"                  5        [        U[$        R&                  5      (       a  UR                  S;   d   eg g )Nz'Operator {}.{} is not an Edge operator.)alloc)r   operatorgetitemr   rt   r   rf   r$   r   r
   r   formatrU   rT   r2   r1   r   _opr   r   r   s     r*   r   MEXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifier.check_valid_edge_op&  s    ;;$$% *+, 4455 "j))*R2P2P(=DDr{{ 
 "n--*2/A/AB((0"e0011{{j000 2r,   r   c                 x    U R                   (       d  g U R                  (       a  [        U5        [        U5        g g r8   )r   r   r+   r   r=   r   s     r*   check_additionalJEXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifier.check_additional?  s*    ;;""-b1<R@ #r,   c                 6     U " U5        g! [          a     gf = f)NTF)r   r   s     r*   is_validBEXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifier.is_validF  s#    R% s    
c                 
   U R                   (       d  g Un[        U[        5      (       a  UR                  n[	        U S5      (       a  U R                  U5      $ [	        U S5      (       a  U R                  U5      $ [        S5      erI   )r   r$   r   r   rM   rJ   rK   rN   )r=   ep_or_gmr   s      r*   rQ   BEXIREdgeDialectVerifier.<locals>._EXIREdgeDialectVerifier.__call__M  sq    ;;B"o..**t233//33}--''++"2&&r,   )rf   rg   r   r   r   r   r   r1   r   )rT   rU   rV   rW   rX   re   r   r   r   r>   rB   r   r   r   boolr   rQ   rY   rZ   )rF   rf   rg   r[   s   @r*   _EXIREdgeDialectVerifierr     si    	? 	?*	5cC+@ 		U	12	A{ 	At 	A	{ 	t 		' 	'r,   r   )rf   r   r^   r   )r[   r\   r]   r^   r   r   rf   rg   s   `     @@r*   EXIREdgeDialectVerifierr      s     %A$FB! &BM<<)00#AA ++  !4!A!ABU' U'8 U'n #CeJr,   r   )NFNN)9r    r}   r   r   
contextlibr   typingr   r   r   r   r   r%   executorch.exir.capture._configr	   "executorch.exir.dialects.edge._opsr
   executorch.exir.errorr   r   &executorch.exir.lowered_backend_moduler   -executorch.exir.passes.dim_order_ops_registryr   3executorch.exir.passes.executorch_prim_ops_registryr   2executorch.exir.passes.replace_aten_with_edge_passr   *executorch.exir.verification.arg_validatorr   r   torch._dispatch.pythonr   torch._export.utilsr   torch._export.verifierr   r   
torch._opsr   torch._subclassesr   torch.export.exported_programr   torch.fxr   ALLOWED_META_KEYSr+   r2   r4   r   rC   r   r   r   r   r   rS   r,   r*   <module>r      s       " 3 3  = = > G H S L
 < 9 ? ! ( 9   ]+ k d W#( #0 8<JN:>	\!"34\\ #+4

0E0E+F"G\ 4

 5 567	\~	/ 	k d8J3G.H ,
[ 
T 
< 8<JN:>	k!"34kk #+4

0E0E+F"Gk 4

 5 567	k\  r,   