
    wi^                    Z   d dl m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Zd dlZd dlZd dlmZmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZmZ e	rd dlm Z   G d d	ej!                  Z" ej#        d
did
dig           G d de"                      Z$ ej#        d
did
dig           G d de"                      Z% ej#        d
did
dig           G d dej!                              Z& ej#        d
did
dig           G d dej!                              Z' G d de"          Z( ej)        ej*        dk    d           G d de(                      Z+ G d de&          Z, G d de'          Z- G d  d!ej!                  Z.e/d"k    r ej0                     dS dS )#    )annotationsN)TYPE_CHECKINGAny)
ModelProto	NodeProtoTensorProtocheckerhelperparsershape_inference) convert_model_from_external_dataconvert_model_to_external_dataload_external_data_for_modelload_external_data_for_tensorset_external_data)
from_arrayto_array)Sequencec                  X    e Zd ZU dZdZded<   ddZddZdd	Z	 dddZ	dddZ
ddZdS )TestLoadExternalDataBasezBase class for testing external data related behaviors.

    Subclasses should be parameterized with a serialization format.
    protobufstrserialization_formatreturnNonec                   t          j                    | _        | j        j        | _        t          j        d                              dd                              t
          j	                  dz   | _
        t          j        d                              dd                              t
          j	                  dz   | _        |                                 | _        d S N         i      )tempfileTemporaryDirectory_temp_dir_objnametemp_dirnparangereshapeastypefloat32initializer_valueattribute_valuecreate_test_modelmodel_filenameselfs    l/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/onnx/test/test_external_data.pysetUpzTestLoadExternalDataBase.setUp0   s    %8::!/4!#1!5!5a!;!;!B!B2:!N!NQT!T!y||33Aq99@@LLsR"4466    c                8    | j                                          d S Nr$   cleanupr0   s    r2   tearDownz!TestLoadExternalDataBase.tearDown7       ""$$$$$r4   c                    t           j                            | j        t	          t          j                              dz             S Nz.onnxospathjoinr&   r   uuiduuid4r0   s    r2   get_temp_model_filenamez0TestLoadExternalDataBase.get_temp_model_filename:   -    w||DM3tz||+<+<w+FGGGr4    value	list[Any]tensor_namelocationr   c                   t          t          j        |                    }||_        |p| d}t	          ||           t          t          j                            | j	        |          d          5 }|
                    |j                   d d d            n# 1 swxY w Y   |                    d           t          j        j        |_        |S )N.binrI   wbraw_data)r   r'   arrayr%   r   openr>   r?   r@   r&   writerN   
ClearFieldonnxr   EXTERNALdata_location)r1   rF   rH   rI   tensortensor_filename	data_files          r2   create_external_data_tensorz4TestLoadExternalDataBase.create_external_data_tensor=   s     BHUOO,,!":&:&:&:&?;;;;"',,t}o>>EE 	-OOFO,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-*%%%#/8s   4BB"Bc           	        t           j                            dg dg|                     | j        d                    }|                     | j        d|          g}t          j        dt           j        j        | j        j	                  g}t          j
        |gd|g |          }t          j        |          }t          j                            | j        d          }t          j        ||| j                   |S )	NConstantvaluesr-   inputsoutputsrF   input_value
test_graphr^   r_   initializer
model.onnx)rS   r
   	make_noderY   r-   r,   make_tensor_value_infor   FLOATshape
make_graph
make_modelr>   r?   r@   r&   
save_modelr   )r1   rI   constant_nodeinitializersr^   graphmodelr/   s           r2   r.   z*TestLoadExternalDataBase.create_test_modelK   s	   --J22$! 	 . 
 
 ,,& 
 )t/5t7M7S 
 !O$
 
 
 !%((dm\BB~t/HIIIr4   c                x    | j         dk    r|                     d           t          j        | j                   d S )Nr   zDcheck_model supports protobuf only as binary when provided as a path)r   skipTestr	   check_modelr/   r0   s    r2   test_check_modelz)TestLoadExternalDataBase.test_check_modelq   sE    $
22MMV   	D/00000r4   Nr   r   )r   r   rE   rF   rG   rH   r   rI   r   r   r   )rI   r   r   r   )__name__
__module____qualname____doc__r   __annotations__r3   r9   rC   rY   r.   rs    r4   r2   r   r   (   s          
 !+****7 7 7 7% % % %H H H H CE    $ $ $ $ $L1 1 1 1 1 1r4   r   r   r   	textprotoc                  &    e Zd ZddZddZddZdS )TestLoadExternalDatar   r   c                t   t          j        | j        | j                  }|j        j        d         }t          j                            t          |          | j
                   |j        j        d         j        d         j        }t          j                            t          |          | j                   d S Nr   rS   
load_modelr/   r   rn   rc   r'   testingassert_allcloser   r,   node	attributetr-   r1   ro   initializer_tensorattribute_tensors       r2   test_load_external_dataz,TestLoadExternalData.test_load_external_data   s     3T5NOO"[4Q7

""8,>#?#?AWXXX ;+A.8;=

""8,<#=#=t?STTTTTr4   c                   t          j        | j        | j        d          }t	          || j                   |j        j        d         }t          j	        
                    t          |          | j                   |j        j        d         j        d         j        }t          j	        
                    t          |          | j                   d S )NFload_external_datar   )rS   r   r/   r   r   r&   rn   rc   r'   r   r   r   r,   r   r   r   r-   r   s       r2   !test_load_external_data_for_modelz6TestLoadExternalData.test_load_external_data_for_model   s    !:u
 
 
 	%UDM:::"[4Q7

""8,>#?#?AWXXX ;+A.8;=

""8,<#=#=t?STTTTTr4   c                   t          j        | j        | j                  }t          j                            | j        d          }t	          j        |           t          j                            |d          }t          j	        ||| j                   t          j        || j                  }|j
        j        d         }t          j                            t          |          | j                   |j
        j        d         j        d         j        }t          j                            t          |          | j                   d S N	save_copyrd   r   rS   r   r/   r   r>   r?   r@   r&   mkdirrk   rn   rc   r'   r   r   r   r,   r   r   r   r-   r1   ro   r&   new_model_filename	new_modelr   r   s          r2   test_save_external_dataz,TestLoadExternalData.test_save_external_data        3T5NOO7<<{;;
W\\(LAA143LMMMO$68QRR	&_8;

""8,>#?#?AWXXX$?/2<Q?A

""8,<#=#=t?STTTTTr4   Nrt   )rw   rx   ry   r   r   r   r|   r4   r2   r   r   y   s^        U U U U	U 	U 	U 	UU U U U U Ur4   r   c                      e Zd ZddZddZddZej                             ej	        d	d	                    dd            Z
dS )TestLoadExternalDataSingleFiletensors_datalist[tuple[list[Any], Any]]r   list[TensorProto]c           	        d}g }t          t          j                            | j        |          d          5 }|D ]\  }}t          t          j        |                    }|                                }|dz  dk    r)|	                    dd|dz  z
  z             |dz   |dz  z
  }|	                    |j
                   t          ||||                                |z
             ||_        |                    d           t          j        j        |_        |                    |           	 d d d            n# 1 swxY w Y   |S )Ntensors.binab   r       )rI   offsetlengthrN   )rP   r>   r?   r@   r&   r   r'   rO   tellrQ   rN   r   r%   rR   rS   r   rT   rU   append)	r1   r   rW   tensorsrX   rF   rH   rV   r   s	            r2   create_external_data_tensorsz;TestLoadExternalDataSingleFile.create_external_data_tensors   s    ("',,t}o>>EE 	'&2 ' '"{#BHUOO44"))D=A%%OOETFTM-A$BCCC#d]Vd]:F000!,!$>>++f4	    *!!*---'+'7'@$v&&&&#'	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'( s   C9D>>EEr   c                t   t          j        | j        | j                  }|j        j        d         }t          j                            t          |          | j
                   |j        j        d         j        d         j        }t          j                            t          |          | j                   d S r   r   r   s       r2   #test_load_external_single_file_datazBTestLoadExternalDataSingleFile.test_load_external_single_file_data   s     3T5NOO"[4Q7

""8,>#?#?AWXXX ;+A.8;=

""8,<#=#=t?STTTTTr4   c                   t          j        | j        | j                  }t          j                            | j        d          }t	          j        |           t          j                            |d          }t          j	        ||| j                   t          j        || j                  }|j
        j        d         }t          j                            t          |          | j                   |j
        j        d         j        d         j        }t          j                            t          |          | j                   d S r   r   r   s          r2   #test_save_external_single_file_datazBTestLoadExternalDataSingleFile.test_save_external_single_file_data   r   r4   )TFuse_absolute_pathbooluse_model_pathc                   t          j        | j        | j                  }t          j                            | j        d          }t	          j        |           t          j                            | j        d          }t	          j        |           |r!t          j                            |d          }nd}t          j                            | j        d          }t	          j        |           t          j                            |d          }dd}	 |	||           t          j	        ||| j                   |rY| 
                    t           j        j                  5  t          j        || j                  }
d d d            d S # 1 swxY w Y   d S t          j        || j        d          }| 
                    t           j        j                  5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   invalid_external_datar   z$../invalid_external_data/tensors.binexternal_datard   ro   r   rI   r   c                n    | j         j        D ]'}|                    d          rt          ||           (d S )NrN   )rn   rc   HasFieldr   )ro   rI   rV   s      r2   'convert_model_to_external_data_no_checkzTestLoadExternalDataSingleFile.test_save_external_invalid_single_file_data_and_check.<locals>.convert_model_to_external_data_no_check   sE    +1 8 8??:.. 8%fh7778 8r4   rL   Fr   )ro   r   rI   r   )rS   r   r/   r   r>   r?   r@   r&   r   rk   assertRaisesr	   ValidationErrorr   )r1   r   r   ro   	model_dirtraversal_external_data_dir traversal_external_data_locationexternal_data_dirnew_model_filepathr   _
onnx_models               r2   5test_save_external_invalid_single_file_data_and_checkzTTestLoadExternalDataSingleFile.test_save_external_invalid_single_file_data_and_check   s     3T5NOOGLL<<	
&(gllM2'
 '
# 	,--- 	V/1w||+]0 0,, 0V,GLLHH
"###W\\)\BB	8 	8 	8 	8
 	0/5	
 	
 	
 	

 	143LMMM 	L""4<#?@@ S SO$68QRRS S S S S S S S S S S S S S S S S S "D$=RW  J ""4<#?@@ L L,Z9JKKKL L L L L L L L L L L L L L L L L Ls$   "F

FFG55G9<G9Nr   r   r   r   rt   )r   r   r   r   r   r   )rw   rx   ry   r   r   r   parameterizedexpand	itertoolsproductr   r|   r4   r2   r   r      s           8U U U UU U U U  ''(9	(9-(W(WXX+L +L +L YX+L +L +Lr4   r   c                      e Zd ZU dZded<   ddZd ZddZddZ e	j
        edk    d          dd            ZddZddZddZddZddZddZddZddZddZddZddZddZdS )  TestSaveAllTensorsAsExternalDatar   r   r   r   r   c                   t          j                    | _        | j        j        | _        t          j        d                              dd                              t
          j	                  dz   | _
        t          j        d                              dd                              t
          j	                  dz   | _        |                                 | _        d S r   )r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   create_test_model_protoro   r0   s    r2   r3   z&TestSaveAllTensorsAsExternalData.setUp  s    %8::!/4!#1!5!5a!;!;!B!B2:!N!NQT!T!y||33Aq99@@LLsR1133


r4   c                    t           j                            | j        t	          t          j                              dz             S r<   r=   r0   s    r2   rC   z8TestSaveAllTensorsAsExternalData.get_temp_model_filename  rD   r4   r   r   r   c                    g }|D ]B\  }}t          t          j        |                    }||_        |                    |           C|S r6   )r   r'   rO   r%   r   )r1   r   r   rF   rH   rV   s         r2   create_data_tensorsz4TestSaveAllTensorsAsExternalData.create_data_tensors   sS     ". 	# 	#E;00F%FKNN6""""r4   r   c                j   |                      | j        df| j        dfg          }t          j                            dg dg|d                   }t	          j        dt          j        j        | j        j	                  g}t	          j
        |gd|g |d         g	          }t	          j        |          S )
Nr-   r`   r[   r\   r   r]   ra      rb   )r   r-   r,   rS   r
   re   rf   r   rg   rh   ri   rj   )r1   r   rl   r^   rn   s        r2   r   z8TestSaveAllTensorsAsExternalData.create_test_model_proto+  s    **%'89'7
 
 --rH:WQZ . 
 

 )t/5t7M7S 
 !O 
 
 
  '''r4   :check_model supports protobuf only when provided as a pathc                8    t          j        | j                   d S r6   r	   rr   ro   r0   s    r2   rs   z1TestSaveAllTensorsAsExternalData.test_check_modelF      
 	DJ'''''r4   c                B   |                                  }t          | j        d           t          j        | j        || j                   t          j        || j                  }|j        j        d         }| 	                    |
                    d                     d S )N   size_thresholdr   rU   )rC   r   ro   rS   rk   r   r   rn   rc   assertFalser   r1   model_file_pathro   r   s       r2   7test_convert_model_to_external_data_with_size_thresholdzXTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_with_size_thresholdM  s    6688&tz$GGGG
OT5NOOO1JKK"[4Q7+44_EEFFFFFr4   c                   |                                  }t          | j        d           t          j        | j        || j                   t          j        || j                  }|j        j        d         }| 	                    |
                    d                     t          j                            t          |          | j                   d S )Nr   r   rU   )rC   r   ro   rS   rk   r   r   rn   rc   
assertTruer   r'   r   r   r   r,   r   s       r2   :test_convert_model_to_external_data_without_size_thresholdz[TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_without_size_thresholdW  s    6688&tz!DDDD
OT5NOOO1JKK"[4Q7*33ODDEEE

""8,>#?#?AWXXXXXr4   c                   |                                  }t          t          j                              }t	          | j        dd|           t          j        | j        || j                   | 	                    t          j                            t          j                            | j        |                               t          j        || j                  }t!          |           |                                  }t          j        ||| j                   t          j        || j                  }|j        j        d         }|                     t)          |j                             |                     |j        t0          j                   t4          j                            t;          |          | j                   |j        j        d         j         d         j!        }|                     t)          |j                             |                     |j        t0          j                   t4          j                            t;          |          | j"                   d S )Nr   T)r   all_tensors_to_one_filerI   )#rC   r   rA   rB   r   ro   rS   rk   r   r   r>   r?   isfiler@   r&   r   r   rn   rc   r   lenr   assertEqualrU   r   DEFAULTr'   r   r   r   r,   r   r   r   r-   )r1   r   external_data_filero   r   r   s         r2   ?test_convert_model_to_external_data_from_one_file_with_locationz`TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_from_one_file_with_locationa  s   6688 ..&J$('		
 	
 	
 	
 	
OT5NOOOrw||DMCU'V'VWWXXX1JKK 	)///66880IJJJ1JKK"[4Q7/=>>???+9;;NOOO

""8,>#?#?AWXXX ;+A.8;=-;<<===)79LMMM

""8,<#=#=t?STTTTTr4   c                   |                                  }t          | j        dd           t          j        | j        || j                   |                     t          j        	                    |                     |                     t          j        	                    t          j        
                    | j        |                               d S )Nr   T)r   r   rC   r   ro   rS   rk   r   r   r>   r?   r   r@   r&   r1   r   s     r2   Rtest_convert_model_to_external_data_from_one_file_without_location_uses_model_namezsTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_from_one_file_without_location_uses_model_name  s     6688&Jq$	
 	
 	
 	
 	
OT5NOOO77888rw||DM?'S'STTUUUUUr4   c                V   |                                  }t          | j        ddd           t          j        | j        || j                   |                     t          j        	                    |                     |                     t          j        	                    t          j        
                    | j        d                               |                     t          j        	                    t          j        
                    | j        d                               d S )Nr   Fr   r   convert_attributer`   r-   )rC   r   ro   rS   rk   r   r   r>   r?   r   r@   r&   r   r   s     r2   Itest_convert_model_to_external_data_one_file_per_tensor_without_attributezjTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_one_file_per_tensor_without_attribute  s     6688&J$)#		
 	
 	
 	
 	
OT5NOOO77888rw||DM='Q'QRRSSST]DU(V(VWWXXXXXr4   c                V   |                                  }t          | j        ddd           t          j        | j        || j                   |                     t          j        	                    |                     |                     t          j        	                    t          j        
                    | j        d                               |                     t          j        	                    t          j        
                    | j        d                               d S )Nr   FTr   r`   r-   r   r   s     r2   Ftest_convert_model_to_external_data_one_file_per_tensor_with_attributezgTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_one_file_per_tensor_with_attribute  s     6688&J$)"		
 	
 	
 	
 	
OT5NOOO77888rw||DM='Q'QRRSSSrw||DMCT'U'UVVWWWWWr4   c                .   |                                  }t          | j        ddd           t          j        | j        || j                   |                     t          j        	                    t          j        
                    | j        d                               |                     t          j        	                    t          j        
                    | j        d                               t          j        || j                  }|j        j        d         }|                     |                    d                     |j        j        d         j        d         j        }|                     |                    d                     d S )Nr   F)r   r   r   r`   r-   rU   )rC   r   ro   rS   rk   r   r   r>   r?   r   r@   r&   r   r   rn   rc   r   r   r   r   r1   r   ro   r   r   s        r2   Etest_convert_model_to_external_data_does_not_convert_attribute_valueszfTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_does_not_convert_attribute_values  sE    6688&J#$)		
 	
 	
 	
 	
OT5NOOOrw||DM='Q'QRRSSST]DU(V(VWWXXX1JKK"[4Q7*33ODDEEE ;+A.8;=)22?CCDDDDDr4   c                   |                                  }t          | j        dd           t          j        | j        || j                   t          j        || j                  }|j        j        d         }t          j
                            t          |          | j                   |                     |                    d                     |j        j        d         j        d         j        }t          j
                            t          |          | j                   |                     |                    d                     d S )Nr   Tr   r   rU   )rC   r   ro   rS   rk   r   r   rn   rc   r'   r   r   r   r,   r   r   r   r   r   r-   r   s        r2   =test_convert_model_to_external_data_converts_attribute_valuesz^TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_converts_attribute_values  s   6688&JqD	
 	
 	
 	
 	
OT5NOOO1JKK"[4Q7

""8,>#?#?AWXXX*33ODDEEE ;+A.8;=

""8,<#=#=t?STTT(11/BBCCCCCr4   c                   |                                  }t          j        | j        || j        d           |                     t          j                            |                     t          j	        || j                  }|j
        j        d         }|                     |                    d                     |j
        j        d         j        d         j        }|                     |                    d                     d S )NF)save_as_external_datar   rU   )rC   rS   rk   ro   r   r   r>   r?   r   r   rn   rc   r   r   r   r   r   r   s        r2   Etest_save_model_does_not_convert_to_external_data_and_saves_the_modelzfTestSaveAllTensorsAsExternalData.test_save_model_does_not_convert_to_external_data_and_saves_the_model  s     6688J%"'		
 	
 	
 	
 	778881JKK"[4Q7+44_EEFFF ;+A.8;=)22?CCDDDDDr4   c           
     ~   |                                  }t          j        | j        || j        ddd dd           t          j        || j                  }|j        j        d         }|                     |	                    d                     t          j                            t          |          | j                   |j        j        d         j        d         j        }|                     |	                    d                     t          j                            t          |          | j                   d S )NTr   Fr   r   rI   r   r   rU   rC   rS   rk   ro   r   r   rn   rc   r   r   r'   r   r   r   r,   r   r   r   r   r-   r   s        r2   0test_save_model_does_convert_and_saves_the_modelzQTestSaveAllTensorsAsExternalData.test_save_model_does_convert_and_saves_the_model  s   6688J%"&$(#		
 		
 		
 		
 1JKK"[4Q7*33ODDEEE

""8,>#?#?AWXXX ;+A.8;=)22?CCDDD

""8,<#=#=t?STTTTTr4   c           	        |                                  }t          j        | j        || j        dd dd           t          j        || j        d          }t          j        ||| j        dd dd           t          j        || j                  }|j        j        d         }|                     |	                    d                     t          j                            t          |          | j                   |j        j        d         j        d         j        }|                     |	                    d                     t          j                            t          |          | j                   d S )NTr   F)r   rI   r   r   r   rU   r   r   s        r2   -test_save_model_without_loading_external_datazNTestSaveAllTensorsAsExternalData.test_save_model_without_loading_external_data  sn   6688J%"&#	
 	
 	
 	
 T65
 
 
 	%"&#	
 	
 	
 	
 1JKK"[4Q7*33ODDEEE

""8,>#?#?AWXXX ;+A.8;=)22?CCDDD

""8,<#=#=t?STTTTTr4   c                   |                                  }| j        j        j        d         j        }t          j        | j        || j        dd           |                     t          j
                            |                     t          j        || j        d          }|j        j        d         }d|_        t          || j                   |                     |j        |           d S )Nr   T)r   r   Fr   s   dummpy_raw_data)rC   ro   rn   rc   rN   rS   rk   r   r   r>   r?   r   r   r   r&   r   )r1   r   original_raw_dataro   r   s        r2   6test_save_model_with_existing_raw_data_should_overridezWTestSaveAllTensorsAsExternalData.test_save_model_with_existing_raw_data_should_override%  s    6688 J,8;DJ%"&	
 	
 	
 	
 	77888T65
 
 
 #[4Q7&8#%&8$-HHH+46GHHHHHr4   Nrt   r   r   r   )rw   rx   ry   r   r{   r3   rC   r   r   unittestskipIfrs   r   r   r   r   r   r   r   r   r   r   r   r  r|   r4   r2   r   r     s         !+****4 4 4 4H H H	 	 	 	( ( ( (6 X_
*D ( ( (	 (G G G GY Y Y YU U U U>V V V VY Y Y Y"X X X X"E E E E.D D D D$E E E E&U U U U.!U !U !U !UFI I I I I Ir4   r   c                      e Zd ZU dZded<   ddZed             ZddZdd
Z	 e
j        edk    d          dd            ZddZddZddZdS )TestExternalDataToArrayr   r   r   r   r   c                r   t          j                    | _        | j        j        | _        t
          j                            | j        d          | _        t          j
                            ddd                              t          j                  | _        d| _        |                                 | _        d S )Nrd   
   <   d   )   i,  )r"   r#   r$   r%   r&   r>   r?   r@   _model_file_pathr'   randomrandr*   r+   
large_data
small_datar.   ro   r0   s    r2   r3   zTestExternalDataToArray.setUpD  s    %8::!/4%'W\\$-%N%N)..R55<<RZHH$++--


r4   c                    | j         S r6   )r  r0   s    r2   r   z'TestExternalDataToArray.model_file_pathL  s    $$r4   c                8    | j                                          d S r6   r7   r0   s    r2   r9   z TestExternalDataToArray.tearDownP  r:   r4   r   c                "   t          j        dt          j        | j        j                  }t          j        dt          j        | j        j        t          j        	                    | j                  d          }t          j        | j        t          j                  }t          j        dt          j        |j        t          j        	                    |          d          }t          j        dt          j        | j                  }t          j                             dddgdg          }t          j                             d	dgdgt          j        
          }t          j        ||gd|g|g||g          }t          j        |d          S )NXT)r%   	data_typedimsvalsrawShapeCReshapeY)r^   r_   Cast)r^   r_   toz
test-model)rc   zonnx-example)producer_name)r
   rf   r   rg   r  rh   make_tensorrS   numpy_helpertobytes_little_endianr'   rO   r  int64INT64re   ri   rj   )	r1   r  
input_init
shape_data
shape_initr  r)   cast	graph_defs	            r2   r.   z)TestExternalDataToArray.create_test_modelS  st   )#{/@$/BWXX'!'&"88II
 
 

 Xdorx88
'!'!"88DD
 
 

 )#{/@$/RR+''>E ( 
 

 {$$C53%K4E % 
 
 %dOCC#Z0
 
 
	  .IIIIr4   r   c                8    t          j        | j                   d S r6   r   r0   s    r2   rs   z(TestExternalDataToArray.test_check_modely  r   r4   c                    t          j        | j        | j        | j        ddd           t          j        | j        | j        d          }|                     t          j        t          j	        |d           d S )NTFr   r   r   r   r   )strict_mode)
rS   rk   ro   r   r   loadr   r   InferenceErrorinfer_shapes)r1   model_without_external_datas     r2   .test_reshape_inference_with_external_data_failzFTestExternalDataToArray.test_reshape_inference_with_external_data_fail  s    J %"&$)	
 	
 	
 	
 '+i $";PU'
 '
 '
# 	*('	 	 	
 	
 	
 	
 	
r4   c                .   t          j        | j        | j        | j        ddd           t          j        | j        | j        d          }t          |j        j        d         | j	                  }t          j                            || j                   d S )NTFr   r-  r   )rS   rk   ro   r   r   r/  r   rn   rc   r&   r'   r   r   r  )r1   ro   loaded_large_datas      r2    test_to_array_with_external_dataz8TestExternalDataToArray.test_to_array_with_external_data  s    J %"&$)	
 	
 	
 	
 	 $";PU
 
 
 %U[%<Q%?OO

""#4doFFFFFr4   c           
        t          j        | j        | j        | j        ddd dd           t          j        | j        | j        d          }|j        j        d         }|                     |	                    d                     t          j                            t          || j                  | j                   |j        j        d         }|                     |	                    d                      t          j                            t          |          | j                   t          j        || j        | j        ddd dd           t          j        | j        | j        d          }|j        j        d         }|                     |	                    d                     t          j                            t          || j                  | j                   |j        j        d         }|                     |	                    d                     t          j                            t          || j                  | j                   d S )	NTFr   r   r   r   rU   r   )rS   rk   ro   r   r   r/  rn   rc   r   r   r'   r   r   r   r&   r  r  )r1   model_without_loading_externallarge_input_tensorsmall_shape_tensors       r2   1test_save_model_with_external_data_multiple_timeszITestExternalDataToArray.test_save_model_with_external_data_multiple_times  sN    	J %"&$)"		
 		
 		
 		
 *. $";PU*
 *
 *
& <AMaP*33ODDEEE

""'77	
 	
 	
 <AMaP.77HHHIII

""8,>#?#?QQQ 	* %"&$)"		
 		
 		
 		
 *. $";PU*
 *
 *
& <AMaP*33ODDEEE

""'77	
 	
 	
 <AMaP*33ODDEEE

""'77	
 	
 	
 	
 	
r4   Nrt   r  )rw   rx   ry   r   r{   r3   propertyr   r9   r.   r  r  rs   r3  r6  r;  r|   r4   r2   r  r  ;  s         !+****. . . . % % X%% % % %$J $J $J $JL X_
*D ( ( (	 (
 
 
 
,G G G G"5
 5
 5
 5
 5
 5
r4   r  c                  6    e Zd ZdZ	 ddd
ZddZddZddZdS )3TestNotAllowToLoadExternalDataOutsideModelDirectoryEssential test to check that onnx (validate) C++ code will not allow to load external_data outside the model
    directory.
    rE   rF   rG   rH   r   rI   r   r   c                    t          t          j        |                    }||_        |p| d}t	          ||           |                    d           t          j        j        |_	        |S )NrK   rL   rN   )
r   r'   rO   r%   r   rR   rS   r   rT   rU   )r1   rF   rH   rI   rV   rW   s         r2   rY   zOTestNotAllowToLoadExternalDataOutsideModelDirectory.create_external_data_tensor  sm     BHUOO,,!":&:&:&:&?;;;;*%%%#/8r4   r   c                    |                      d          | _        |                     t          j        j                  5  t	          j        | j                   ddd           dS # 1 swxY w Y   dS )MWe only test the model validation as onnxruntime uses this to load the model.z../../file.binNr.   r/   r   rS   r	   r   rr   r0   s    r2   rs   zDTestNotAllowToLoadExternalDataOutsideModelDirectory.test_check_model  s    "445EFFt|;<< 	5 	5 3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5   A&&A*-A*c                    |                      d          | _        |                     t          j        j                  5  t	          j        | j                   ddd           dS # 1 swxY w Y   dS )More relative path test.z../test/../file.binNrC  r0   s    r2   test_check_model_relativezMTestNotAllowToLoadExternalDataOutsideModelDirectory.test_check_model_relative  s    "445JKKt|;<< 	5 	5 3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5rD  c                    |                      d          | _        |                     t          j        j                  5  t	          j        | j                   ddd           dS # 1 swxY w Y   dS )JONNX checker disallows using absolute path as location in external tensor.z
//file.binNrC  r0   s    r2   test_check_model_absolutezMTestNotAllowToLoadExternalDataOutsideModelDirectory.test_check_model_absolute  s    "44\BBt|;<< 	5 	5 3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5rD  Nru   rv   rt   )rw   rx   ry   rz   rY   rs   rG  rJ  r|   r4   r2   r>  r>    sz         
 CE    5 5 5 55 5 5 55 5 5 5 5 5r4   r>  ntzSkip Windows test)reasonc                  *    e Zd ZdZddZddZddZdS )	<TestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindowsr?  r   r   c                    |                      d          | _        |                     t          j        j                  5  t	          j        | j                   ddd           dS # 1 swxY w Y   dS )rB  z..\..\file.binNrC  r0   s    r2   rs   zMTestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindows.test_check_model  s    "445GHHt|;<< 	5 	5 3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5rD  c                    |                      d          | _        |                     t          j        j                  5  t	          j        | j                   ddd           dS # 1 swxY w Y   dS )rF  z..\test\..\file.binNrC  r0   s    r2   rG  zVTestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindows.test_check_model_relative  s    "445MNNt|;<< 	5 	5 3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5rD  c                    |                      d          | _        |                     t          j        j                  5  t	          j        | j                   ddd           dS # 1 swxY w Y   dS )rI  zC:/file.binNrC  r0   s    r2   rJ  zVTestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindows.test_check_model_absolute  s    "44]CCt|;<< 	5 	5 3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5rD  Nrt   )rw   rx   ry   rz   rs   rG  rJ  r|   r4   r2   rN  rN    sZ         5 5 5 55 5 5 55 5 5 5 5 5r4   rN  c                        e Zd Zd fdZ xZS )(TestSaveAllTensorsAsExternalDataWithPathr   pathlib.Pathc                h    t          j        t                                                                S r6   )pathlibPathsuperrC   )r1   	__class__s    r2   rC   z@TestSaveAllTensorsAsExternalDataWithPath.get_temp_model_filename   s#    |EGG;;==>>>r4   r   rT  )rw   rx   ry   rC   __classcell__)rY  s   @r2   rS  rS    s=        ? ? ? ? ? ? ? ? ? ?r4   rS  c                  &    e Zd Zedd            ZdS )TestExternalDataToArrayWithPathr   rT  c                4    t          j        | j                  S r6   )rV  rW  r  r0   s    r2   r   z/TestExternalDataToArrayWithPath.model_file_path%  s    |D1222r4   NrZ  )rw   rx   ry   r<  r   r|   r4   r2   r]  r]  $  s2        3 3 3 X3 3 3r4   r]  c                  F    e Zd ZddZddZddZddZddZddZddZ	dS )TestFunctionsAndSubGraphsr   r   c                $   t          j                    | _        | j        j        }t          j                            |d          | _        t          j	        d          
                    t          j                  }t          |d          | _        d S )Nrd   r   rV   )r"   r#   r$   r%   r>   r?   r@   r  r'   r(   r*   r+   r   _tensor)r1   r&   rO   s      r2   r3   zTestFunctionsAndSubGraphs.setUp+  sh    %8::%*%'W\\(L%I%I	$&&rz22!%22r4   c                8    | j                                          d S r6   r7   r0   s    r2   r9   z"TestFunctionsAndSubGraphs.tearDown2  r:   r4   rV   r   c                P    |                      |j        t          j                   d S r6   )r   rU   r   r   r1   rV   s     r2   _check_is_internalz,TestFunctionsAndSubGraphs._check_is_internal5  s$    -{/BCCCCCr4   c                P    |                      |j        t          j                   d S r6   )r   rU   r   rT   re  s     r2   _check_is_externalz,TestFunctionsAndSubGraphs._check_is_external8  s$    -{/CDDDDDr4   ro   r   nodesSequence[NodeProto]c                D   |D ]^}|                      |j        d           |j        d         j        }|                    | j                   |                     |           _t          |dd           |D ])}|j        d         j        }|                     |           *dS )a  Check that the tensors in the model are externalized.

        The tensors in the specified sequence of Constant nodes are set to self._tensor,
        an internal tensor. The model is then converted to external data format.
        The tensors are then checked to ensure that they are externalized.

        Arguments:
            model: The model to check.
            nodes: A sequence of Constant nodes.

        r[   r   Tr   N)	r   op_typer   r   CopyFromrb  rf  r   rh  )r1   ro   ri  r   rV   s        r2   _checkz TestFunctionsAndSubGraphs._check;  s      	, 	,DT\:666^A&(FOODL)))##F++++&uQRVWWWW 	, 	,D^A&(F##F++++	, 	,r4   c                    d}t          j        |          }|                     ||j        d         j        d         g           d S )Na|  
           <ir_version: 7,  opset_import: ["": 15, "local": 1]>
           agraph (float[N] X) => (float[N] Y)
            {
              Y = local.add(X)
            }

            <opset_import: ["" : 15],  domain: "local">
            add (float[N] X) => (float[N] Y) {
              C = Constant <value = float[1] {1.0}> ()
              Y = Add (X, C)
           }
        r   )r   parse_modelrn  	functionsr   )r1   
model_textro   s      r2   test_functionz'TestFunctionsAndSubGraphs.test_functionS  sG    
 ":..EEOA.3A6788888r4   c                    d}t          j        |          }|j        j        d         }d |j        D             }|                     ||           d S )Na2  
           <ir_version: 7,  opset_import: ["": 15, "local": 1]>
           agraph (bool flag, float[N] X) => (float[N] Y)
            {
              Y = if (flag) <
                then_branch = g1 () => (float[N] Y_then) {
                    B = Constant <value = float[1] {0.0}> ()
                    Y_then = Add (X, C)
                },
                else_branch = g2 () => (float[N] Y_else) {
                    C = Constant <value = float[1] {1.0}> ()
                    Y_else = Add (X, C)
                }
              >
            }
        r   c                2    g | ]}|j         j        d          S )r   )gr   ).0attrs     r2   
<listcomp>z;TestFunctionsAndSubGraphs.test_subgraph.<locals>.<listcomp>w  s     GGGT$&+a.GGGr4   )r   rp  rn   r   r   rn  )r1   rr  ro   if_nodeconstant_nodess        r2   test_subgraphz'TestFunctionsAndSubGraphs.test_subgraphd  sZ    
  ":..+"1%GGW5FGGGE>*****r4   Nrt   )rV   r   r   r   )ro   r   ri  rj  r   r   )
rw   rx   ry   r3   r9   rf  rh  rn  rs  r|  r|   r4   r2   r`  r`  *  s        3 3 3 3% % % %D D D DE E E E, , , ,09 9 9 9"+ + + + + +r4   r`  __main__)1
__future__r   r   r>   rV  r"   r  rA   typingr   r   numpyr'   r   rS   r   r   r   r	   r
   r   r   onnx.external_data_helperr   r   r   r   r   onnx.numpy_helperr   r   collections.abcr   TestCaser   parameterized_classr   r   r   r  r>  r  r%   rN  rS  r]  r`  rw   mainr|   r4   r2   <module>r     ss   # " " " " "     				     % % % % % % % %                                        3 2 2 2 2 2 2 2 )((((((N1 N1 N1 N1 N1x0 N1 N1 N1b #"	,	- !U !U !U !U !U3 !U !U !UH #"	,	- aL aL aL aL aL%= aL aL aLH #"	,	- eI eI eI eI eIx'8 eI eI eIP	 #"	,	- [
 [
 [
 [
 [
h/ [
 [
 [
|"5 "5 "5 "5 "5:R "5 "5 "5J D)<===5 5 5 5 575 5 >=54? ? ? ? ?/O ? ? ?
3 3 3 3 3&= 3 3 3N+ N+ N+ N+ N+ 1 N+ N+ N+b zHMOOOOO r4   