
    iG#                         S SK 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
\R"                  R$                  5      r " S S\ R(                  5      r " S S\ R(                  5      rg)    N)to_edge)ConstPropPass)Tensor
TensorList)Interpreter)EXIREdgeDialectVerifier)SpecViolationError)exportc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )WrapperModule   c                 .   > [         TU ]  5         Xl        g N)super__init__fn)selfr   	__class__s     f/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/exir/tests/test_verification.pyr   WrapperModule.__init__   s        c                 &    U R                   " U0 UD6$ r   r   )r   argskwargss      r   forwardWrapperModule.forward   s    ww'''r   r   __name__
__module____qualname____firstlineno__r   r   __static_attributes____classcell__r   s   @r   r   r      s    ( (r   r   c                   2    \ rS rSrSS jrSS jrSS jrSrg)TestVerification   Nc                 
   S[         R                  S[         R                  4S jn[        [        [	        U5      [         R
                  " S5      4SS95      R                  [        5       /5      R                  5       R                  R                  n[        U5      n[        [        UR                  R                  5      5       Hu  nUR                  R                  U   R                   n[#        U[        5      (       a  UR$                  S:X  a  MM  [#        U[&        5      (       a  Md  UR)                  U5        Mw     UR+                  5       nU H^  n[#        U[         R                  5      (       d  M$  U R-                  [         R.                  " U[         R0                  " S5      5      5        M`     U R3                  [        U Vs/ s H&  n[#        U[         R                  5      (       d  M$  UPM(     sn5      S5        g s  snf )Nxreturnc                 b    [         R                  " S5      U -   [         R                  " S5      -   $ N   )torchones)r*   s    r   f0TestVerification.test_constant_buffer.<locals>.f!   s"    ::a=1$uzz!}44r   r.   Tstrictr   )r/   r   r   r
   r   randn	transformr   to_executorch_emitter_outputprogramr   rangelenexecution_planvaluesval
isinstancedata_buffer_idxr   
load_valueget_value_list
assertTrueallcloser0   assertEqual)r   r1   r9   testval_idxr>   vlistes           r   test_constant_buffer%TestVerification.test_constant_buffer    sg   	5 	5%,, 	5
 F=+ekk!n->tLMY!O
 ]__WW 	 7#S!4!4!;!;<=G%%,,W599C3''C,?,?1,D j11( > ##%A!U\\**q%**Q- @A 
 	NA*Q2MaNOQRSNs   #H -H c                 r    " S S[         R                  R                  5      n " S S[         R                  R                  5      nU" 5       n[         R                  " SS5      4n[	        [        X4SS95      R                  5       R                  R                  n[        U5      nU R                  [        UR                  5       5      [         R                  R                  R                  R                   [         R                  R                  R"                  R                   15        U" 5       n[         R                  " SS5      4n[	        [        XtSS95      R                  5       R                  R                  n[        U5      nU R                  [        UR                  5       5      [         R                  R                  R$                  R&                  [         R                  R                  R(                  R                   [         R                  R                  R*                  R                   15        g )Nc                   f   ^  \ rS rSrSU 4S jjrS\R                  S\R                  4S jrSrU =r	$ )0TestVerification.test_operator_list.<locals>.Op1@   r+   c                    > [         TU ]  5         [        R                  " SS5      U l        S[        R                  " SS5      -  U l        g r-   r   r   r/   r0   abr   r   s    r   r   9TestVerification.test_operator_list.<locals>.Op1.__init__A   7     "Aq)UZZ1--r   r*   c                 d    [        S5       H   nU R                  U-  nX0R                  -
  nM"     W$ N
   r:   rR   rS   r   r*   _zys        r   r   8TestVerification.test_operator_list.<locals>.Op1.forwardF   s/    rA
AFF
A # r   rR   rS   r+   N
r   r    r!   r"   r   r/   r   r   r#   r$   r%   s   @r   Op1rN   @   s(    .
 %,,  r   rc   c                   f   ^  \ rS rSrSU 4S jjrS\R                  S\R                  4S jrSrU =r	$ )0TestVerification.test_operator_list.<locals>.Op2L   r+   c                    > [         TU ]  5         [        R                  " SS5      U l        S[        R                  " SS5      -  U l        g r-   rQ   rT   s    r   r   9TestVerification.test_operator_list.<locals>.Op2.__init__M   rV   r   r*   c                 r    [        S5       H$  nU R                  U-  nX0R                  -  nX3-   nM&     WW-   $ rX   rZ   r[   s        r   r   8TestVerification.test_operator_list.<locals>.Op2.forwardR   :    rA
AFF
AA # 1ur   r`   ra   rb   r%   s   @r   Op2re   L   (    .
 %,,  r   rl   r.   Tr3   )r/   nnModuler0   r   r
   r7   r8   r9   r   rE   setget_operators_listopsatenmuloutsub	remainder
Tensor_outdivadd)r   rc   rl   model1inputsr9   rF   model2s           r   test_operator_list#TestVerification.test_operator_list?   sz   
	%((// 
		%((// 	 **Q"$F6$78]__WW 	 7#'')*YY^^##UYY^^%7%7%;%;<	
 **Q"$F6$78]__WW 	 7#'')*		((33		""&&		""&&	
r   c                     " S S[         R                  R                  5      nU" 5       n[         R                  " SS5      n[	        [        X#4SS95      R                  5       nUR                  5       nUR                  5       " U5      S   ng )Nc                   f   ^  \ rS rSrSU 4S jjrS\R                  S\R                  4S jrSrU =r	$ )/TestVerification.test_verification.<locals>.Op2~   r+   c                    > [         TU ]  5         [        R                  " SS5      U l        S[        R                  " SS5      -  U l        g r-   rQ   rT   s    r   r   8TestVerification.test_verification.<locals>.Op2.__init__   rV   r   r*   c                 r    [        S5       H$  nU R                  U-  nX0R                  -  nX3-   nM&     WW-   $ rX   rZ   r[   s        r   r   7TestVerification.test_verification.<locals>.Op2.forward   rk   r   r`   ra   rb   r%   s   @r   rl   r   ~   rm   r   rl   r.   Tr3   r   )	r/   rn   ro   r0   r   r
   r7   exported_programmodule)r   rl   r}   r|   	exec_progexported_progress          r   test_verification"TestVerification.test_verification}   sq    	%((// 	 Aq!F69TBCQQS	!224""$V,Q/r    ra   )r   r    r!   r"   rJ   r~   r   r#   r   r   r   r'   r'      s    T><
|0r   r'   c                   P    \ rS rSrS
S jrS
S jrS
S jrS
S jrS
S jrS
S jr	S	r
g)TestEdgeVerification   Nc                 z    " S S[         R                  R                  5      nU" 5       n[        [	        U[         R
                  " SSSS5      R                  [         R                  S94SS95      R                  5       R                  n[        5       nU" U5        U R                  UR                  U5      5        g )	Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )7TestEdgeVerification.test_edge_happy.<locals>.TestModel   c           	      t   > [         TU ]  5         U R                  S[        R                  " SSSS5      5        g NrR         d   r   r   register_bufferr/   r5   rT   s    r   r   @TestEdgeVerification.test_edge_happy.<locals>.TestModel.__init__   -     "$$S%++aC*EFr   c                 N    U R                   U-   n[        R                  " X!/5      $ r   rR   r/   _to_cpur   r*   rS   s      r   r   ?TestEdgeVerification.test_edge_happy.<locals>.TestModel.forward        FFQJ}}aV,,r   r   r   r%   s   @r   	TestModelr          G- -r   r   r   r   r   dtypeTr3   r/   rn   ro   r   r
   r5   tointr   graph_moduler   rC   is_validr   r   megmverifiers        r   test_edge_happy$TestEdgeVerification.test_edge_happy   s    	- 	- KAq#s366UYY6GIRV
 \ 	 +,))#./r   c                     " S S[         R                  R                  5      nU" 5       n[        [	        U[         R
                  " SSSS5      [         R
                  " S5      [         R
                  " S5      4SS95      R                  5       R                  n[        5       nU" U5        U R                  UR                  U5      5        g )Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )RTestEdgeVerification.test_edge_happy_with_optional_tensor_input.<locals>.TestModel   c                 "   > [         TU ]  5         g r   r   r   rT   s    r   r   [TestEdgeVerification.test_edge_happy_with_optional_tensor_input.<locals>.TestModel.__init__        "r   c                 2    [         R                  " USX#5      $ )N   )r/   
group_norm)r   r*   weightbiass       r   r   ZTestEdgeVerification.test_edge_happy_with_optional_tensor_input.<locals>.TestModel.forward   s    ''1f;;r   r   r   r%   s   @r   r   r      s    #< <r   r             Tr3   )r/   rn   ro   r   r
   randr   r   r   rC   r   r   s        r   *test_edge_happy_with_optional_tensor_input?TestEdgeVerification.test_edge_happy_with_optional_tensor_input   s    	< 	< KZZAr2.

1uzz!}M \ 	 +,))#./r   c                     " S S[         R                  R                  5      nU" 5       n[        [	        U/ 4SS95      R                  5       R                  n[        5       nU" U5        U R                  UR                  U5      5        g )Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )STestEdgeVerification.test_edge_happy_with_empty_tensorlist_input.<locals>.TestModel   c                 "   > [         TU ]  5         g r   r   rT   s    r   r   \TestEdgeVerification.test_edge_happy_with_empty_tensorlist_input.<locals>.TestModel.__init__   r   r   c                 .    [         R                  " U5      $ r   )r/   r   r   r*   s     r   r   [TestEdgeVerification.test_edge_happy_with_empty_tensorlist_input.<locals>.TestModel.forward   s    }}Q''r   r   r   r%   s   @r   r   r      s    #( (r   r   Tr3   )
r/   rn   ro   r   r
   r   r   r   rC   r   r   s        r   +test_edge_happy_with_empty_tensorlist_input@TestEdgeVerification.test_edge_happy_with_empty_tensorlist_input   si    	( 	( KfQd34EEGTT*,))#./r   c           	      j    " S S[         R                  R                  5      nU" 5       n[        U[         R                  " SSSS5      R                  [         R                  S94SS9R                  n[        5       nU R                  [        5         U" U5        S S S 5        g ! , (       d  f       g = f)	Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )5TestEdgeVerification.test_edge_sad.<locals>.TestModel   c           	      t   > [         TU ]  5         U R                  S[        R                  " SSSS5      5        g r   r   rT   s    r   r   >TestEdgeVerification.test_edge_sad.<locals>.TestModel.__init__   r   r   c                 N    U R                   U-   n[        R                  " X!/5      $ r   r   r   s      r   r   =TestEdgeVerification.test_edge_sad.<locals>.TestModel.forward   r   r   r   r   r%   s   @r   r   r      r   r   r   r   r   r   r   Tr3   )r/   rn   ro   r
   r5   r   r   r   r   assertRaisesr	   r   s        r   test_edge_sad"TestEdgeVerification.test_edge_sad   s    	- 	- KAq#s+..UYY.?A$

, 	 +,12SM 322s   	B$$
B2c                 z    " S S[         R                  R                  5      nU" 5       n[        [	        U[         R
                  " SSSS5      R                  [         R                  S94SS95      R                  5       R                  n[        5       nU" U5        U R                  UR                  U5      5        g )	Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )ETestEdgeVerification.test_edge_happy_with_edge_ops.<locals>.TestModel   c                 "   > [         TU ]  5         g r   r   rT   s    r   r   NTestEdgeVerification.test_edge_happy_with_edge_ops.<locals>.TestModel.__init__   r   r   c                 
    X-   $ r   r   r   s     r   r   MTestEdgeVerification.test_edge_happy_with_edge_ops.<locals>.TestModel.forward   	    ur   r   r   r%   s   @r   r   r          # r   r   r   r   r   r   Tr3   r   r   s        r   test_edge_happy_with_edge_ops2TestEdgeVerification.test_edge_happy_with_edge_ops   s    	 	 KAq#s366UYY6GIRV
 \ 	 +,))#./r   c                 t    " S S[         R                  R                  5      nU" 5       nU R                  [        5         [        [        U[         R                  " SSSS5      R                  [         R                  S94SS95      R                  5       R                  nS S S 5        g ! , (       d  f       g = f)	Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )CTestEdgeVerification.test_edge_sad_with_edge_ops.<locals>.TestModel   c                 "   > [         TU ]  5         g r   r   rT   s    r   r   LTestEdgeVerification.test_edge_sad_with_edge_ops.<locals>.TestModel.__init__  r   r   c                 
    X-   $ r   r   r   s     r   r   KTestEdgeVerification.test_edge_sad_with_edge_ops.<locals>.TestModel.forward  r   r   r   r   r%   s   @r   r   r      r   r   r   r   r   r   r   Tr3   )r/   rn   ro   r   r	   r   r
   r5   r   	complex64r   r   )r   r   r   r\   s       r   test_edge_sad_with_edge_ops0TestEdgeVerification.test_edge_sad_with_edge_ops   s    	 	 K12Q3477eoo7NP# "!#  322s    A B))
B7r   ra   )r   r    r!   r"   r   r   r   r   r   r   r#   r   r   r   r   r      s     00020$0,r   r   )unittestr/   executorch.exirr   &executorch.exir.passes.const_prop_passr   executorch.exir.schemar   r   (executorch.exir.verification.interpreterr   %executorch.exir.verification.verifierr   torch._export.verifierr	   torch.exportr
   rn   ro   r   TestCaser'   r   r   r   r   <module>r      s_      # @ 5 @ I 5 (EHHOO (r0x(( r0n}8,, }r   