
    i1                         S SK r S SKrS SKrS SKJr  S SK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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\RB                  5      r"g)    N)Tuple)XnnpackFloatingPointPartitioner)to_edge)CompileSpec
to_backend)BackendWithCompilerDemo)AddMulPartitionerDemo)EdgeProgramManagerto_edge_transform_and_lower)deserialize	serialize)nn)export)ExportedProgram)_pytreec                       \ rS rSr SS\S\S\\R                  S4   S\SS4
S	 jjr	SSS
 jj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S jrSS jrSS jrSS jrSrg)	TestSerde'   ep1ep2inputs.compare_closenessreturnNc                 f   UR                  5       " U6 nUR                  5       " U6 n[        R                  " U5      u  px[        R                  " U5      u  p[        XySS9 H*  u  pU R	                  [
        R                  " X5      5        M,     U(       Ga  U R                  [        UR                  R                  5      [        UR                  R                  5      5        [        UR                  R                  UR                  R                  5       GH  u  pU R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        UR                  S:w  a  M  U R                  UR                  R!                  S5      UR                  R!                  S5      5        UR                  R!                  S5      nUR                  R!                  S5      nUc  U R#                  U5        GMA  U R%                  U5        [        X5       H4  u  nnU R                  UR'                  5       UR'                  5       5        M6     GM     gg)z%
Checks if two graphs are equivalent
Tstrictcall_functiondebug_handle	from_nodeN)modulepytreetree_flattenzip
assertTruetorchallcloseassertEquallengraphnodestargetnametypeopmetagetassertIsNoneassertIsNotNoneto_dict)selfr   r   r   r   orig_outputsloaded_outputsflat_orig_outputs_flat_loaded_outputsorigloadednode_anode_bfrom_node_afrom_node_bnode_source_anode_source_bs                     _/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/exir/tests/test_serde.pycheck_epTestSerde.check_ep(   s    zz|V,v.%22<@!'!4!4^!D 1tTLDOOENN489 U S13syy3GH"%ciioosyy"G  >  fkk:  fkk:  FII699/  KKOON3V[[__^5T %kkook:$kkook:&%%k2((58;K8U4}(()113]5J5J5L 9V% #H     c                    [        XSS9n[        [        U5      5      nU R                  XEUSS9  [	        U5      n[        [        UR                  5       5      5      nU R                  UR                  5       XrSS9  [        R                  " 5       n[        R                  " UR                  5       U5        UR                  S5        [        R                  " U5      n	U R                  UR                  5       X5        UR                  5       R                  5       n
[        [        U
5      5      nU(       a  [        R                  " 5          U R                  XU5        [        R                  " 5       n[        R                  " X5        UR                  S5        [        R                  " U5      n	U R                  XU5        S S S 5        g g ! , (       d  f       g = f)NTr   )r   r   )r   r   r   rC   r   exported_programioBytesIOexirsaveseekloadto_executorchr%   no_grad)r4   mr   check_executorchatenaten_newedgeedge_newbuffer	loaded_ep
executorchexecutorch_news               rB   check_serdeTestSerde.check_serdeU   sM   a-y/dfEt}y)>)>)@ABd++-xSWX		$'')62AIIf%	d++-yA'')::<
$Yz%:;j&A		*-A IIf-	jV< !  s   A7G
Gc                      " S S[         R                  R                  5      n[         R                  " S/SS94nU R	                  U" 5       U5        g )Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )&TestSerde.test_basic.<locals>.MyModuleq   c                 "   > [         TU ]  5         g Nsuper__init__r4   	__class__s    rB   rd   /TestSerde.test_basic.<locals>.MyModule.__init__r        "rE   c                 <    X-   nX-  nX-  nXR                  5       4$ ra   )cloner4   xs     rB   forward.TestSerde.test_basic.<locals>.MyModule.forwardu   s%    EEE'')|#rE    __name__
__module____qualname____firstlineno__rd   rm   __static_attributes____classcell__rf   s   @rB   MyModuler^   q   s    #$ $rE   rx   i   T)requires_grad)r%   r   ModuleonesrZ   )r4   rx   r   s      rB   
test_basicTestSerde.test_basicp   s?    	$uxx 	$ **cU$79V,rE   c                      " S S[         R                  R                  5      nU" 5       nUR                  5       nU R	                  X#SS9  g )Nc                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )CTestSerde.test_to_out_variant_singleon_tensor_list.<locals>.MyModel   c                 "   > [         TU ]  5         g ra   rb   re   s    rB   rd   LTestSerde.test_to_out_variant_singleon_tensor_list.<locals>.MyModel.__init__   rh   rE   c                 0    [         R                  " US5      $ N
   )r%   splitrk   s     rB   rm   KTestSerde.test_to_out_variant_singleon_tensor_list.<locals>.MyModel.forward   s    {{1b))rE   c                 0    [         R                  " S5      4$ r   r%   randnr4   s    rB   get_random_inputsUTestSerde.test_to_out_variant_singleon_tensor_list.<locals>.MyModel.get_random_inputs       B))rE   ro   	rq   rr   rs   rt   rd   rm   r   ru   rv   rw   s   @rB   MyModelr      s    #** *rE   r   F)rQ   r%   r   rz   r   rZ   r4   r   modelr   s       rB   (test_to_out_variant_singleon_tensor_list2TestSerde.test_to_out_variant_singleon_tensor_list~   sB    	*ehhoo 	* 	((* 	?rE   c                      " S S[         R                  R                  5      nU" 5       nUR                  5       nU R	                  X#5        g )Nc                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ );TestSerde.test_to_out_variant_multiple_out.<locals>.MyModel   c                 "   > [         TU ]  5         g ra   rb   re   s    rB   rd   DTestSerde.test_to_out_variant_multiple_out.<locals>.MyModel.__init__   rh   rE   c                 :    [         R                  " US5      u  p#X#4$ )N   )r%   topk)r4   rl   valuesindicess       rB   rm   CTestSerde.test_to_out_variant_multiple_out.<locals>.MyModel.forward   s    "'**Q"2((rE   c                 0    [         R                  " S5      4$ r   r   r   s    rB   r   MTestSerde.test_to_out_variant_multiple_out.<locals>.MyModel.get_random_inputs   r   rE   ro   r   rw   s   @rB   r   r      s    #)* *rE   r   r   r   s       rB    test_to_out_variant_multiple_out*TestSerde.test_to_out_variant_multiple_out   s;    		*ehhoo 		* 	((*'rE   c                   ^  " S S[         R                  R                  5      nU" 5       n[         R                  " S5      4n[	        [        X#SS95      nUS   R                  S   n[        S[        U/5      5      /n[        [        R                  UR                  5       U5      m " U4S jS	[         R                  R                  5      nU" 5       n[         R                  " S5      4nU" U6   [	        [        XSS95      n	[        [        U	R                  5       5      5      n
U R                  U	R                  5       X5        g )
Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )*TestSerde.test_delegate.<locals>.SinModule   c                 "   > [         TU ]  5         g ra   rb   re   s    rB   rd   3TestSerde.test_delegate.<locals>.SinModule.__init__   rh   rE   c                 .    [         R                  " U5      $ ra   )r%   sinrk   s     rB   rm   2TestSerde.test_delegate.<locals>.SinModule.forward   s    yy|#rE   ro   rp   rw   s   @rB   	SinModuler      s    #$ $rE   r      Tr   r   	max_valuec                   2   >^  \ rS rSrU U4S jrS rSrU =r$ )0TestSerde.test_delegate.<locals>.CompositeModule   c                 0   > [         TU ]  5         TU l        g ra   )rc   rd   lowered_linear_sin)r4   rf   lowered_sin_modules    rB   rd   9TestSerde.test_delegate.<locals>.CompositeModule.__init__   s     "*<'rE   c                 $    U R                  U5      $ ra   r   rk   s     rB   rm   8TestSerde.test_delegate.<locals>.CompositeModule.forward   s    ..q11rE   r   rp   )rf   r   s   @rB   CompositeModuler      s    =2 2rE   r   )r%   r   rz   r{   r   r   shaper   bytesr   r   rq   rG   r   r   rC   )r4   r   
sin_modulemodel_inputsedgeir_mr   compile_specsr   composite_modelrT   rU   r   s              @rB   test_delegateTestSerde.test_delegate   s   	$ 	$ [


1'6*4HI O))!,	$[%2DEF'#,,h.G.G.I=
	2ehhoo 	2 *+

1'&voDIJy)>)>)@ABd++-xFrE   c                      " S S[         R                  5      nU" SS5      nUR                  5       nU R                  X#5        g )Nc                   J   ^  \ rS rSrS\S\4U 4S jjrS r\S 5       rSr	U =r
$ )4TestSerde.test_model_with_weights.<locals>.LinearAdd   MNc                    > [         TU ]  5         Xl        X l        [        R
                  R                  X5      U l        g ra   )rc   rd   r   r   r%   r   Linearlinear)r4   r   r   rf   s      rB   rd   =TestSerde.test_model_with_weights.<locals>.LinearAdd.__init__   s,     "#hhooa3rE   c                 r    U R                  U5      nU R                  U5      n[        R                  " X5      $ ra   )r   r%   addr4   rl   ys      rB   rm   <TestSerde.test_model_with_weights.<locals>.LinearAdd.forward   s*    KKNKKNyy&rE   c                 ^    [         R                  " SS5      [         R                  " SS5      4$ )N      )r%   rand)clss    rB   _get_random_inputsGTestSerde.test_model_with_weights.<locals>.LinearAdd._get_random_inputs   s#    

3+UZZR-@AArE   )r   r   r   )rq   rr   rs   rt   intrd   rm   classmethodr   ru   rv   rw   s   @rB   	LinearAddr      s1    4# 4# 4'
 B BrE   r   r      )r   rz   r   rZ   )r4   r   
linear_addr   s       rB   test_model_with_weights!TestSerde.test_model_with_weights   s>    	B		 	B  r2&
 3352rE   c                     " S S[         R                  R                  5      nU" 5       n[         R                  " SS5      [         R                  " SS5      [         R                  " SS5      4n[	        [        X#SS95      nUR                  [        5       5      n[        [        UR                  5       5      5      nU R                  UR                  5       Xc5        g )Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )2TestSerde.test_delegate_partitioner.<locals>.Model   c                 "   > [         TU ]  5         g ra   rb   re   s    rB   rd   ;TestSerde.test_delegate_partitioner.<locals>.Model.__init__   rh   rE   c                 v    [         R                  " X5      nXC-   nXQ-
  n[         R                  " X5      nXC-   nU$ ra   )r%   mm)r4   arl   br   zs         rB   rm   :TestSerde.test_delegate_partitioner.<locals>.Model.forward   s6    HHQNEEHHQNErE   ro   rp   rw   s   @rB   Modelr      s    # rE   r      Tr   )r%   r   rz   r   r   r   r   r	   r   r   rG   rC   )r4   r   rP   r   eprT   rU   s          rB   test_delegate_partitioner#TestSerde.test_delegate_partitioner   s    
	EHHOO 
	 G++a#U[[A%6Aq8IJVAd34}}245y)>)>)@ABd++-x@rE   c                 P  ^  " U4S jS[         R                  5      m[        R                  " SSS5      nT" 5       n[        R                  R	                  X!45      n[        U[        5       /S9n[        R                  " 5        n[        R                  " UR                  5       U5        [        [        R                  " U5      5      nU R                  UR                  5       R                   UR                  5       R                   :H  5        S S S 5        g ! , (       d  f       g = f)Nc                   2   >^  \ rS rSrUU 4S jrS rSrU =r$ ):TestSerde.test_delegate_xnnpack.<locals>.SimpleConv1DModel   c                 \   > [         TU ]  5         [        R                  " SSSSSS9U l        g )Nr         )in_channelsout_channelskernel_sizestridepadding)rc   rd   r   Conv1dconv1)r4   SimpleConv1DModelrf   s    rB   rd   CTestSerde.test_delegate_xnnpack.<locals>.SimpleConv1DModel.__init__   s-    '79YY !!UV
rE   c                 (    U R                  U5      nU$ ra   r  rk   s     rB   rm   BTestSerde.test_delegate_xnnpack.<locals>.SimpleConv1DModel.forward   s    JJqMrE   r  rp   )rf   r  s   @rB   r  r      s     rE   r  @   r   d   )partitioner)r   rz   r%   r   r   r   r   tempfileNamedTemporaryFilerJ   rK   rG   r
   rM   r$   rN   rV   )r4   rl   r   r   	edge_origfedge_deserializedr  s          @rB   test_delegate_xnnpackTestSerde.test_delegate_xnnpack   s    				 		 KKAs#!#\\  -/<>?
	 ((*aIIi002A6 2499Q< @OO'')00$224;;< +**s   B	D
D%c                   ^  " U4S jS[         R                  5      mT" 5       n[        R                  " SSSS5      4nSn[	        [        XSS95      nUR                  5       R                  R                  R                   HT  nS[        UR                  5      ;   d  M  UR                  R                  S	5      UR                  R                  S
5      4nMV     Sn[        [        UR                  5       5      5      nUR                  R                  R                   HT  nS[        UR                  5      ;   d  M  UR                  R                  S	5      UR                  R                  S
5      4nMV     U R!                  [#        U5      S:g  =(       a    [#        U5      S:g  5        U R!                  [%        S U 5       5      =(       a    [%        S U 5       5      5        U R'                  US   US   5        U R'                  [)        US   R+                  5       5      [)        US   R+                  5       5      5        g )Nc                   2   >^  \ rS rSrUU 4S jrS rSrU =r$ )?TestSerde.test_meta_stack_trace_module_hierarchy.<locals>.Modeli  c                 Z   > [         TU ]  5         [        R                  " SSSSS9U l        g Nr   r  r   )r   r   r   r   rc   rd   r   Conv2d
conv_layerr4   r   rf   s    rB   rd   HTestSerde.test_meta_stack_trace_module_hierarchy.<locals>.Model.__init__  )    eT+-"$)) !1#rE   c                 $    U R                  U5      $ ra   r  rk   s     rB   rm   GTestSerde.test_meta_stack_trace_module_hierarchy.<locals>.Model.forward      q))rE   r  rp   rf   r   s   @rB   r   r        * *rE   r   r       ro   Tr   convolutionstack_tracenn_module_stackr   c              3   (   #    U  H  oS Lv   M
     g 7fra   ro   .0vals     rB   	<genexpr>CTestSerde.test_meta_stack_trace_module_hierarchy.<locals>.<genexpr>+  s     48C48   c              3   (   #    U  H  oS Lv   M
     g 7fra   ro   r(  s     rB   r+  r,  ,  s     >~tO~r-  )r   rz   r%   r   r   r   rG   graph_moduler)   r*   strr+   r/   r0   r   r   r$   r(   allr'   listkeys)	r4   rP   r   metadatarT   nodemetadata_serderU   r   s	           @rB   &test_meta_stack_trace_module_hierarchy0TestSerde.test_meta_stack_trace_module_hierarchy
  s   	*BII 	* G++aB+-va56))+88>>DDDDKK 00IIMM-0IIMM"34 E y)>)>)@AB))//55DDKK 00IIMM-0IIMM"34" 6 	H*Gs>/Ba/GH4844 ?>~>>	
 	!nQ&78hqk..014q8I8N8N8P3QRrE   c           	        ^	  " U	4S jS[         R                  5      m	T	" 5       n[        R                  " SSSS5      4n[	        [        XSS95      n[        [        UR                  5       5      5      n[        UR                  5       R                  R                  R                  UR                  R                  R                  5       GH{  u  pVUR                  S;  d  M  U R                  UR                  R!                  S5      5        U R                  UR                  R!                  S	5      5        U R#                  UR                  R!                  S5      UR                  R!                  S5      5        U R#                  [%        UR                  R!                  S	5      5      [%        UR                  R!                  S	5      5      5        [        UR                  R!                  S	5      UR                  R!                  S	5      5       H3  u  pxU R#                  UR'                  5       UR'                  5       5        M5     GM~     g )
Nc                   2   >^  \ rS rSrUU 4S jrS rSrU =r$ )=TestSerde.test_meta_debug_handle_and_from_node.<locals>.Modeli2  c                 Z   > [         TU ]  5         [        R                  " SSSSS9U l        g r  r  r  s    rB   rd   FTestSerde.test_meta_debug_handle_and_from_node.<locals>.Model.__init__3  r  rE   c                 $    U R                  U5      $ ra   r  rk   s     rB   rm   ETestSerde.test_meta_debug_handle_and_from_node.<locals>.Model.forward9  r   rE   r  rp   r!  s   @rB   r   r;  2  r"  rE   r   r   r#  Tr   >   outputplaceholderr   r   )r   rz   r%   r   r   r   r   r   rG   r#   r/  r)   r*   r.   r2   r/   r0   r'   r(   r3   )
r4   rP   r   rT   rU   r5  node_newnode_sourcenode_source_newr   s
            @rB   $test_meta_debug_handle_and_from_node.TestSerde.test_meta_debug_handle_and_from_node1  s   	*BII 	* G++aB+-va56y)>)>)@AB!!!#0066<<!!''--
ND ww77$$TYY]]>%BC$$TYY]];%?@  IIMM.18==3D3D^3T   		k23S9J9J;9W5X 58IIMM+.0A0A+0N50K $$[%8%8%:O<S<S<UV5
rE   c                      " S S[         R                  5      n[        R                  " S5      [        R                  " SS5      4nU R	                  U" 5       U5        g )Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )2TestSerde.test_memory_ops.<locals>.MemoryOpsModuleiT  c                 "   > [         TU ]  5         g ra   rb   re   s    rB   rd   ;TestSerde.test_memory_ops.<locals>.MemoryOpsModule.__init__U  rh   rE   c                 J    [         R                  R                  US5      nX-   $ )N)r   r   )rJ   memoryviewr   s      rB   rm   :TestSerde.test_memory_ops.<locals>.MemoryOpsModule.forwardX  s    KK$$Q1urE   ro   rp   rw   s   @rB   MemoryOpsModulerI  T  s    # rE   rP  r	  r   )r   rz   r%   r   rZ   )r4   rP  r   s      rB   test_memory_opsTestSerde.test_memory_opsS  sJ    	bii 	 KKKKB
 	*F3rE   ro   )F)T)r   N)rq   rr   rs   rt   TorchExportedProgramr   rJ   ValueboolrC   rZ   r|   r   r   r   r   r   r  r7  rE  rQ  ru   ro   rE   rB   r   r   '   s     #(*!* "* djj#o&	*
  * 
*Z=6-@((  GD3,A*6%SN WD4rE   r   )#rH   r  unittesttypingr   executorch.exirrJ   r%   9executorch.backends.xnnpack.partition.xnnpack_partitionerr   r   #executorch.exir.backend.backend_apir   r   7executorch.exir.backend.test.backend_with_compiler_demor   0executorch.exir.backend.test.op_partitioner_demor	    executorch.exir.program._programr
   r   executorch.exir.serde.serializer   r   r   torch.exportr   torch.export.exported_programr   rS  torch.utilsr   r!   TestCaser   ro   rE   rB   <module>rc     s\    
      $ G S C   Q )y4!! y4rE   