
    hs                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJr  S SK	r
S SKrS SKrS SKJrJrJrJrJr  S SKJrJrJrJrJr  S SKJrJr   " S S\R6                  5      r\R:                  " S	S
0S	S0/5       " S S\5      5       r\R:                  " S	S
0S	S0/5       " S S\5      5       r\R:                  " S	S
0S	S0/5       " S S\R6                  5      5       r \R:                  " S	S
0S	S0/5       " S S\R6                  5      5       r! " S S\5      r"\RF                  " \RH                  S:g  SS9 " S S\"5      5       r% " S S\ 5      r& " S S\!5      r'\(S:X  a  \RR                  " 5         gg)     )annotationsN)Any)
ModelProtoTensorProtocheckerhelper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_arrayc                  |    \ rS rSr% SrSrS\S'   SS jrSS jrSS jr	 S       SS	 jjr
SSS
 jjrSS jrSrg)TestLoadExternalDataBase   zyBase class for testing external data related behaviors.

Subclasses should be parameterized with a serialization format.
protobufstrserialization_formatc                   [         R                  " 5       U l        U R                  R                  U l        [
        R                  " S5      R                  SS5      R                  [
        R                  5      S-   U l
        [
        R                  " S5      R                  SS5      R                  [
        R                  5      S-   U l        U R                  5       U l        g 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    V/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/test/test_external_data.pysetUpTestLoadExternalDataBase.setUp$   s    %88:!//44!#1!5!5a!;!B!B2::!NQT!T!yy|33Aq9@@LsR"446    c                8    U R                   R                  5         g Nr   cleanupr+   s    r-   tearDown!TestLoadExternalDataBase.tearDown+       ""$r0   c                    [         R                  R                  U R                  [	        [
        R                  " 5       5      S-   5      $ Nz.onnxospathjoinr!   r   uuiduuid4r+   s    r-   get_temp_model_filename0TestLoadExternalDataBase.get_temp_model_filename.   +    ww||DMM3tzz|+<w+FGGr0   c                   [        [        R                  " U5      5      nX$l        U=(       d    U S3n[	        XES9  [        [        R                  R                  U R                  U5      S5       nUR                  UR                  5        S S S 5        UR                  S5        [        R                  R                  Ul        U$ ! , (       d  f       N@= f)N.binlocationwbraw_data)r   r"   arrayr    r   openr;   r<   r=   r!   writerH   
ClearFieldonnxr   EXTERNALdata_location)r,   valuetensor_namerF   tensortensor_filename	data_files          r-   create_external_data_tensor4TestLoadExternalDataBase.create_external_data_tensor1   s     BHHUO,!":T&:&;"'',,t}}o>EOOFOO, F*%#//88	 FEs   1C
Cc           	     6   [         R                  R                  S/ S/U R                  U R                  S5      S9nU R                  U R
                  SU5      /n[        R                  " S[         R                  R                  U R
                  R                  5      /n[        R                  " U/SU/ US9n[        R                  " U5      n[        R                  R                  U R                  S5      n[         R                   " XgU R"                  5        U$ )	NConstantvaluesr(   inputsoutputsrP   input_value
test_graphr[   r\   initializer
model.onnx)rM   r   	make_noderU   r(   r'   make_tensor_value_infor   FLOATshape
make_graph
make_modelr;   r<   r=   r!   
save_modelr   )r,   rF   constant_nodeinitializersr[   graphmodelr*   s           r-   r)   *TestLoadExternalDataBase.create_test_model?   s   --J22$$&7	 . 
 ,,&&x
 ))t//55t7M7M7S7S
 !!O$
 !!%(dmm\Bt/H/HIr0   c                    U R                   S:w  a  U R                  S5        [        R                  " U R                  5        g )Nr   zDcheck_model supports protobuf only as binary when provided as a path)r   skipTestr   check_modelr*   r+   s    r-   test_check_model)TestLoadExternalDataBase.test_check_modelb   s5    $$
2MMV 	D//0r0   )r   r(   r'   r*   r!   NreturnNone)rt   r    rP   z	list[Any]rQ   r   rF   r   rt   r   )rF   r   rt   r   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r.   r5   r@   rU   r)   rq   __static_attributes__ r0   r-   r   r      s[    
 !+#*7%H CE-0<?	!F1r0   r   r   r   	textprotoc                  2    \ rS rSrSS jrSS jrSS jrSrg)TestLoadExternalDataj   c                   [         R                  " U R                  U R                  5      nUR                  R
                  S   n[        R                  R                  [        U5      U R                  5        UR                  R                  S   R                  S   R                  n[        R                  R                  [        U5      U R                  5        g Nr   rM   
load_modelr*   r   rk   r`   r"   testingassert_allcloser   r'   node	attributetr(   r,   rl   initializer_tensorattribute_tensors       r-   test_load_external_data,TestLoadExternalData.test_load_external_dataq   s     3 3T5N5NO"[[44Q7


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


""8,<#=t?S?STr0   c                   [         R                  " U R                  U R                  SS9n[	        XR
                  5        UR                  R                  S   n[        R                  R                  [        U5      U R                  5        UR                  R                  S   R                  S   R                  n[        R                  R                  [        U5      U R                   5        g )NFload_external_datar   )rM   r   r*   r   r   r!   rk   r`   r"   r   r   r   r'   r   r   r   r(   r   s       r-   !test_load_external_data_for_model6TestLoadExternalData.test_load_external_data_for_modely   s    !:!:u
 	%UMM:"[[44Q7


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


""8,<#=t?S?STr0   c                   [         R                  " U R                  U R                  5      n[        R
                  R                  U R                  S5      n[        R                  " U5        [        R
                  R                  US5      n[         R                  " XU R                  5        [         R                  " X0R                  5      nUR                  R                  S   n[        R                  R                  [        U5      U R                   5        UR                  R"                  S   R$                  S   R&                  n[        R                  R                  [        U5      U R(                  5        g N	save_copyra   r   rM   r   r*   r   r;   r<   r=   r!   mkdirrh   rk   r`   r"   r   r   r   r'   r   r   r   r(   r,   rl   r!   new_model_filename	new_modelr   r   s          r-   test_save_external_data,TestLoadExternalData.test_save_external_data        3 3T5N5NO77<<{;
WW\\(LA43L3LMOO$68Q8QR	&__88;


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


""8,<#=t?S?STr0   r   Nrs   )ry   rz   r{   r|   r   r   r   r   r   r0   r-   r   r   j   s    U	UUr0   r   c                  :    \ rS rSr    SS jrSS jrSS jrSrg)	TestLoadExternalDataSingleFile   c           	     z   Sn/ n[        [        R                  R                  U R                  U5      S5       nU H  u  pV[        [        R                  " U5      5      nUR                  5       nUS-  S:w  a%  UR                  SSUS-  -
  -  5        US-   US-  -
  nUR                  UR                  5        [        UUUUR                  5       U-
  S9  Xgl        UR                  S5        [        R                  R                   Ul        UR%                  U5        M     S S S 5        U$ ! , (       d  f       U$ = f)Nztensors.binabi   r       )rF   offsetlengthrH   )rJ   r;   r<   r=   r!   r   r"   rI   tellrK   rH   r   r    rL   rM   r   rN   rO   append)	r,   tensors_datarS   tensorsrT   rP   rQ   rR   r   s	            r-   create_external_data_tensors;TestLoadExternalDataSingleFile.create_external_data_tensors   s    ("'',,t}}o>E&2"#BHHUO4")D=A%OOETFTM-A$BC#d]Vd]:F0!,!$>>+f4	 *!!*-'+'7'7'@'@$v&# '3 F( ) FE( s   C(D++
D:c                   [         R                  " U R                  U R                  5      nUR                  R
                  S   n[        R                  R                  [        U5      U R                  5        UR                  R                  S   R                  S   R                  n[        R                  R                  [        U5      U R                  5        g r   r   r   s       r-   #test_load_external_single_file_dataBTestLoadExternalDataSingleFile.test_load_external_single_file_data   s     3 3T5N5NO"[[44Q7


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


""8,<#=t?S?STr0   c                   [         R                  " U R                  U R                  5      n[        R
                  R                  U R                  S5      n[        R                  " U5        [        R
                  R                  US5      n[         R                  " XU R                  5        [         R                  " X0R                  5      nUR                  R                  S   n[        R                  R                  [        U5      U R                   5        UR                  R"                  S   R$                  S   R&                  n[        R                  R                  [        U5      U R(                  5        g r   r   r   s          r-   #test_save_external_single_file_dataBTestLoadExternalDataSingleFile.test_save_external_single_file_data   r   r0   r   Nr   zlist[tuple[list[Any], Any]]rt   zlist[TensorProto]rs   )ry   rz   r{   r|   r   r   r   r   r   r0   r-   r   r      s#    7	8UUr0   r   c                     \ rS rSr% SrS\S'   SS jrS r    SS jrSS jr	\
R                  " \S:g  S	5      SS
 j5       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S jrSS jrSrg) TestSaveAllTensorsAsExternalData   r   r   r   c                   [         R                  " 5       U l        U R                  R                  U l        [
        R                  " S5      R                  SS5      R                  [
        R                  5      S-   U l
        [
        R                  " S5      R                  SS5      R                  [
        R                  5      S-   U l        U R                  5       U l        g r   )r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   create_test_model_protorl   r+   s    r-   r.   &TestSaveAllTensorsAsExternalData.setUp   s    %88:!//44!#1!5!5a!;!B!B2::!NQT!T!yy|33Aq9@@LsR113
r0   c                    [         R                  R                  U R                  [	        [
        R                  " 5       5      S-   5      $ r9   r:   r+   s    r-   r@   8TestSaveAllTensorsAsExternalData.get_temp_model_filename   rB   r0   c                    / nU H;  u  p4[        [        R                  " U5      5      nXEl        UR	                  U5        M=     U$ r2   )r   r"   rI   r    r   )r,   r   r   rP   rQ   rR   s         r-   create_data_tensors4TestSaveAllTensorsAsExternalData.create_data_tensors   s@     ".E0F%KNN6" #/
 r0   c                   U R                  U R                  S4U R                  S4/5      n[        R                  R                  S/ S/US   S9n[        R                  " S[        R                  R                  U R                  R                  5      /n[        R                  " U/SU/ US   /S	9n[        R                  " U5      $ )
Nr(   r]   rX   rY   r   rZ   r^      r_   )r   r(   r'   rM   r   rb   rc   r   rd   re   rf   rg   )r,   r   ri   r[   rk   s        r-   r   8TestSaveAllTensorsAsExternalData.create_test_model_proto   s    **%%'89''7
 --rH:WQZ . 

 ))t//55t7M7M7S7S
 !!O 
   ''r0   :check_model supports protobuf only when provided as a pathc                D    [         R                  " U R                  5        g r2   r   rp   rl   r+   s    r-   rq   1TestSaveAllTensorsAsExternalData.test_check_model	      
 	DJJ'r0   c                T   U R                  5       n[        U R                  SS9  [        R                  " U R                  XR
                  5        [        R                  " XR
                  5      nUR                  R                  S   nU R                  UR                  S5      5        g )N   size_thresholdr   rO   )r@   r   rl   rM   rh   r   r   rk   r`   assertFalseHasFieldr,   model_file_pathrl   r   s       r-   7test_convert_model_to_external_data_with_size_thresholdXTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_with_size_threshold  sy    668&tzz$G

O5N5NO1J1JK"[[44Q7+44_EFr0   c                   U R                  5       n[        U R                  SS9  [        R                  " U R                  XR
                  5        [        R                  " XR
                  5      nUR                  R                  S   nU R                  UR                  S5      5        [        R                  R                  [        U5      U R                  5        g )Nr   r   rO   )r@   r   rl   rM   rh   r   r   rk   r`   
assertTruer   r"   r   r   r   r'   r   s       r-   :test_convert_model_to_external_data_without_size_threshold[TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_without_size_threshold  s    668&tzz!D

O5N5NO1J1JK"[[44Q7*33ODE


""8,>#?AWAWXr0   c                   U R                  5       n[        [        R                  " 5       5      n[	        U R
                  SSUS9  [        R                  " U R
                  XR                  5        U R                  [        R                  R                  [        R                  R                  U R                  U5      5      5        [        R                  " XR                  5      n[!        U5        U R                  5       n[        R                  " X1U R                  5        [        R                  " XR                  5      nUR"                  R$                  S   nU R'                  [)        UR*                  5      5        U R-                  UR.                  [0        R2                  5        [4        R6                  R9                  [;        U5      U R<                  5        UR"                  R>                  S   R@                  S   RB                  nU R'                  [)        UR*                  5      5        U R-                  UR.                  [0        R2                  5        [4        R6                  R9                  [;        U5      U RD                  5        g )Nr   T)r   all_tensors_to_one_filerF   )#r@   r   r>   r?   r   rl   rM   rh   r   r   r;   r<   isfiler=   r!   r   r
   rk   r`   r   lenexternal_dataassertEqualrO   r   DEFAULTr"   r   r   r   r'   r   r   r   r(   )r,   r   external_data_filerl   r   r   s         r-   ?test_convert_model_to_external_data_from_one_file_with_location`TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_from_one_file_with_location$  s   668 .&JJ$('		
 	

O5N5NOrww||DMMCU'VWX1J1JK 	)/6680I0IJ1J1JK"[[44Q7/==>?+99;;N;NO


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


""8,<#=t?S?STr0   c                   U R                  5       n[        U R                  SSS9  [        R                  " U R                  XR
                  5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  [        R                  R                  U R                  U5      5      5        g )Nr   T)r   r   r@   r   rl   rM   rh   r   r   r;   r<   r   r=   r!   r,   r   s     r-   Rtest_convert_model_to_external_data_from_one_file_without_location_uses_model_namesTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_from_one_file_without_location_uses_model_nameC  s     668&JJq$	
 	

O5N5NO78rww||DMM?'STUr0   c                Z   U R                  5       n[        U R                  SSSS9  [        R                  " U R                  XR
                  5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  [        R                  R                  U R                  S5      5      5        U R                  [        R                  R                  [        R                  R                  U R                  S5      5      5        g )Nr   Fr   r   convert_attributer]   r(   )r@   r   rl   rM   rh   r   r   r;   r<   r   r=   r!   r   r   s     r-   Itest_convert_model_to_external_data_one_file_per_tensor_without_attributejTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_one_file_per_tensor_without_attributeP  s     668&JJ$)#		
 	

O5N5NO78rww||DMM='QRST]]DU(VWXr0   c                Z   U R                  5       n[        U R                  SSSS9  [        R                  " U R                  XR
                  5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  [        R                  R                  U R                  S5      5      5        U R                  [        R                  R                  [        R                  R                  U R                  S5      5      5        g )Nr   FTr   r]   r(   r   r   s     r-   Ftest_convert_model_to_external_data_one_file_per_tensor_with_attributegTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_one_file_per_tensor_with_attributea  s     668&JJ$)"		
 	

O5N5NO78rww||DMM='QRSrww||DMMCT'UVWr0   c                P   U R                  5       n[        U R                  SSSS9  [        R                  " U R                  XR
                  5        U R                  [        R                  R                  [        R                  R                  U R                  S5      5      5        U R                  [        R                  R                  [        R                  R                  U R                  S5      5      5        [        R                  " XR
                  5      nUR                  R                  S   nU R                  UR!                  S5      5        UR                  R"                  S   R$                  S   R&                  nU R                  UR!                  S5      5        g )Nr   F)r   r   r   r]   r(   rO   )r@   r   rl   rM   rh   r   r   r;   r<   r   r=   r!   r   r   rk   r`   r   r   r   r   r,   r   rl   r   r   s        r-   Etest_convert_model_to_external_data_does_not_convert_attribute_valuesfTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_does_not_convert_attribute_valuesr  s     668&JJ#$)		
 	

O5N5NOrww||DMM='QRST]]DU(VWX1J1JK"[[44Q7*33ODE ;;++A.88;==)22?CDr0   c                   U R                  5       n[        U R                  SSS9  [        R                  " U R                  XR
                  5        [        R                  " XR
                  5      nUR                  R                  S   n[        R                  R                  [        U5      U R                  5        U R                  UR                  S5      5        UR                  R                   S   R"                  S   R$                  n[        R                  R                  [        U5      U R&                  5        U R                  UR                  S5      5        g )Nr   T)r   r   rO   )r@   r   rl   rM   rh   r   r   rk   r`   r"   r   r   r   r'   r   r   r   r   r   r(   r   s        r-   =test_convert_model_to_external_data_converts_attribute_values^TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_converts_attribute_values  s    668&JJqD	
 	

O5N5NO1J1JK"[[44Q7


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


""8,<#=t?S?ST(11/BCr0   c                (   U R                  5       n[        R                  " U R                  UU R                  SS9  U R                  [        R                  R                  U5      5        [        R                  " XR                  5      nUR                  R                  S   nU R                  UR                  S5      5        UR                  R                  S   R                  S   R                   nU R                  UR                  S5      5        g )NF)save_as_external_datar   rO   )r@   rM   rh   rl   r   r   r;   r<   r   r   rk   r`   r   r   r   r   r   r   s        r-   Etest_save_model_does_not_convert_to_external_data_and_saves_the_modelfTestSaveAllTensorsAsExternalData.test_save_model_does_not_convert_to_external_data_and_saves_the_model  s     668JJ%%"'		
 	781J1JK"[[44Q7+44_EF ;;++A.88;==)22?CDr0   c                   U R                  5       n[        R                  " U R                  UU R                  SSS SSS9  [        R
                  " XR                  5      nUR                  R                  S   nU R                  UR                  S5      5        [        R                  R                  [        U5      U R                  5        UR                  R                  S   R                   S   R"                  nU R%                  UR                  S5      5        [        R                  R                  [        U5      U R&                  5        g )NTr   Fr   r   rF   r   r   rO   r@   rM   rh   rl   r   r   rk   r`   r   r   r"   r   r   r   r'   r   r   r   r   r(   r   s        r-   0test_save_model_does_convert_and_saves_the_modelQTestSaveAllTensorsAsExternalData.test_save_model_does_convert_and_saves_the_model  s   668JJ%%"&$(#		
 1J1JK"[[44Q7*33ODE


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


""8,<#=t?S?STr0   c           
     $   U R                  5       n[        R                  " U R                  UU R                  SS SSS9  [        R
                  " XR                  SS9n[        R                  " UUU R                  SS SSS9  [        R
                  " XR                  5      nUR                  R                  S   nU R                  UR                  S5      5        [        R                  R                  [        U5      U R                  5        UR                  R                  S   R                   S   R"                  nU R%                  UR                  S5      5        [        R                  R                  [        U5      U R&                  5        g )NTr   F)r   rF   r   r   r   rO   r   r   s        r-   -test_save_model_without_loading_external_dataNTestSaveAllTensorsAsExternalData.test_save_model_without_loading_external_data  sB   668JJ%%"&#	
 665
 	%%"&#	
 1J1JK"[[44Q7*33ODE


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


""8,<#=t?S?STr0   c                   U R                  5       nU R                  R                  R                  S   R                  n[
        R                  " U R                  UU R                  SSS9  U R                  [        R                  R                  U5      5        [
        R                  " XR                  SS9nUR                  R                  S   nSUl        [        X@R                  5        U R                  UR                  U5        g )Nr   T)r   r   Fr   s   dummpy_raw_data)r@   rl   rk   r`   rH   rM   rh   r   r   r;   r<   r   r   r   r!   r   )r,   r   original_raw_datarl   r   s        r-   6test_save_model_with_existing_raw_data_should_overrideWTestSaveAllTensorsAsExternalData.test_save_model_with_existing_raw_data_should_override  s    668 JJ,,88;DDJJ%%"&	
 	78665
 #[[44Q7&8#%&8--H+446GHr0   )r   r(   r'   rl   r!   Nrs   r   rt   r   )ry   rz   r{   r|   r   r~   r.   r@   r   r   unittestskipIfrq   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r0   r-   r   r      s     !+#*4H	7			(6 __
*D(	(GYU>V	VY	Y"X	X"E	E.D$E	E&U.!UFIr0   r   c                      \ rS rSr% SrS\S'   SS jr\S 5       rSS jr	SS jr
\R                  " \S:g  S	5      SS
 j5       rSS jrSS jrSS jrSrg)TestExternalDataToArrayi  r   r   r   c                   [         R                  " 5       U l        U R                  R                  U l        [
        R                  R                  U R                  S5      U l        [        R                  R                  SSS5      R                  [        R                  5      U l        SU l        U R!                  5       U l        g )Nra   
   <   d   )   i,  )r   r   r   r    r!   r;   r<   r=   _model_file_pathr"   randomrandr%   r&   
large_data
small_datar)   rl   r+   s    r-   r.   TestExternalDataToArray.setUp  s    %88:!//44%'WW\\$--%N))..R5<<RZZH$++-
r0   c                    U R                   $ r2   )r  r+   s    r-   r   'TestExternalDataToArray.model_file_path  s    $$$r0   c                8    U R                   R                  5         g r2   r3   r+   s    r-   r5    TestExternalDataToArray.tearDown  r7   r0   c                ^   [         R                  " S[        R                  U R                  R
                  5      n[         R                  " S[        R                  U R                  R
                  U R                  R                  5       SS9n[        R                  " U R                  [        R                  5      n[         R                  " S[        R                  UR
                  UR                  5       SS9n[         R                  " S[        R                  U R                  5      n[        R                   R                  SSS/S/S9n[        R                   R                  S	S/S/[        R                  S
9n[         R                  " Xg/SU/U/X$/S9n[         R                   " USS9n	U	$ )NXT)r    	data_typedimsvalsrawShapeCReshapeY)r[   r\   Cast)r[   r\   toz
test-model)r`   zonnx-example)producer_name)r   rc   r   rd   r  re   make_tensortobytesr"   rI   r  int64INT64rM   rb   rf   rg   )
r,   r  
input_init
shape_data
shape_initr"  r$   cast	graph_defrl   s
             r-   r)   )TestExternalDataToArray.create_test_model  si   ))#{/@/@$//BWBWX''!''&&((*

 XXdoorxx8
''!''!!##%

 ))#{/@/@$//R++''>E ( 

 {{$$C53%K4E4E % 
 %%OCC#0
	 !!)>Jr0   r   c                D    [         R                  " U R                  5        g r2   r   r+   s    r-   rq   (TestExternalDataToArray.test_check_model=  r   r0   c           	     "   [         R                  " U R                  U R                  U R                  SSSS9  [         R
                  " U R                  U R                  SS9nU R                  [        R                  [        R                  USS9  g )NTFr   r   r   r   r   )strict_mode)
rM   rh   rl   r   r   loadassertRaisesr	   InferenceErrorinfer_shapes)r,   model_without_external_datas     r-   .test_reshape_inference_with_external_data_failFTestExternalDataToArray.test_reshape_inference_with_external_data_failD  s    JJ  %%"&$)	
 '+ii  $";";PU'
# 	**(('	 	 	
r0   c           	     r   [         R                  " U R                  U R                  U R                  SSSS9  [         R
                  " U R                  U R                  SS9n[        UR                  R                  S   U R                  5      n[        R                  R                  X R                  5        g )NTFr   r5  r   )rM   rh   rl   r   r   r7  r   rk   r`   r!   r"   r   r   r  )r,   rl   loaded_large_datas      r-    test_to_array_with_external_data8TestExternalDataToArray.test_to_array_with_external_dataZ  s    JJ  %%"&$)	
 		  $";";PU
 %U[[%<%<Q%?O


""#4ooFr0   c                "   [         R                  " U R                  U R                  U R                  SSS SSS9  [         R
                  " U R                  U R                  SS9nUR                  R                  S   nU R                  UR                  S5      5        [        R                  R                  [        X R                  5      U R                  5        UR                  R                  S   nU R                  UR                  S5      (       + 5        [        R                  R                  [        U5      U R                   5        [         R                  " UU R                  U R                  SSS SSS9  [         R
                  " U R                  U R                  SS9nUR                  R                  S   nU R                  UR                  S5      5        [        R                  R                  [        X R                  5      U R                  5        UR                  R                  S   nU R                  UR                  S5      5        [        R                  R                  [        X0R                  5      U R                   5        g )	NTFr   r   r   r   rO   r   )rM   rh   rl   r   r   r7  rk   r`   r   r   r"   r   r   r   r!   r  r  )r,   model_without_loading_externallarge_input_tensorsmall_shape_tensors       r-   1test_save_model_with_external_data_multiple_timesITestExternalDataToArray.test_save_model_with_external_data_multiple_timesk  s    	JJ  %%"&$)"		
 *.  $";";PU*
& <AAMMaP*33ODE


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


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


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


""'7	
r0   )r  r   r  rl   r  r!   Nrs   r  )ry   rz   r{   r|   r   r~   r.   propertyr   r5   r)   r  r	  rq   r<  r@  rF  r   r   r0   r-   r  r    sk     !+#*. % %%%N __
*D(	(
,G"5
r0   r  c                  T    \ rS rSrSr S	       S
S jjrSS jrSS jrSS jrSr	g)3TestNotAllowToLoadExternalDataOutsideModelDirectoryi  wEssential test to check that onnx (validate) C++ code will not allow to load external_data outside the model
directory.c                    [        [        R                  " U5      5      nX$l        U=(       d    U S3n[	        XES9  UR                  S5        [        R                  R                  Ul	        U$ )NrD   rE   rH   )
r   r"   rI   r    r   rL   rM   r   rN   rO   )r,   rP   rQ   rF   rR   rS   s         r-   rU   OTestNotAllowToLoadExternalDataOutsideModelDirectory.create_external_data_tensor  s[     BHHUO,!":T&:&;*%#//88r0   c                    U R                  S5      U l        U R                  [        R                  R
                  5         [        R                  " U R                  5        SSS5        g! , (       d  f       g= f)MWe only test the model validation as onnxruntime uses this to load the model.z../../file.binNr)   r*   r8  rM   r   ValidationErrorrp   r+   s    r-   rq   DTestNotAllowToLoadExternalDataOutsideModelDirectory.test_check_model  sN    "445EFt||;;< 3 34 =<<    !A**
A8c                    U R                  S5      U l        U R                  [        R                  R
                  5         [        R                  " U R                  5        SSS5        g! , (       d  f       g= f)More relative path test.z../test/../file.binNrP  r+   s    r-   test_check_model_relativeMTestNotAllowToLoadExternalDataOutsideModelDirectory.test_check_model_relative  sN    "445JKt||;;< 3 34 =<<rS  c                    U R                  S5      U l        U R                  [        R                  R
                  5         [        R                  " U R                  5        SSS5        g! , (       d  f       g= f)JONNX checker disallows using absolute path as location in external tensor.z
//file.binNrP  r+   s    r-   test_check_model_absoluteMTestNotAllowToLoadExternalDataOutsideModelDirectory.test_check_model_absolute  sM    "44\Bt||;;< 3 34 =<<rS  r*   Nrv   rx   rs   )
ry   rz   r{   r|   r}   rU   rq   rV  rZ  r   r   r0   r-   rJ  rJ    sB     CE-0<?	555r0   rJ  ntzSkip Windows test)reasonc                  6    \ rS rSrSrSS jrSS jrSS jrSrg)	<TestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindowsi  rK  c                    U R                  S5      U l        U R                  [        R                  R
                  5         [        R                  " U R                  5        SSS5        g! , (       d  f       g= f)rO  z..\..\file.binNrP  r+   s    r-   rq   MTestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindows.test_check_model  sN    "445GHt||;;< 3 34 =<<rS  c                    U R                  S5      U l        U R                  [        R                  R
                  5         [        R                  " U R                  5        SSS5        g! , (       d  f       g= f)rU  z..\test\..\file.binNrP  r+   s    r-   rV  VTestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindows.test_check_model_relative  sN    "445MNt||;;< 3 34 =<<rS  c                    U R                  S5      U l        U R                  [        R                  R
                  5         [        R                  " U R                  5        SSS5        g! , (       d  f       g= f)rY  zC:/file.binNrP  r+   s    r-   rZ  VTestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindows.test_check_model_absolute  sM    "44]Ct||;;< 3 34 =<<rS  r\  Nrs   )	ry   rz   r{   r|   r}   rq   rV  rZ  r   r   r0   r-   r`  r`    s    555r0   r`  c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )(TestSaveAllTensorsAsExternalDataWithPathi  c                H   > [         R                  " [        TU ]  5       5      $ r2   )pathlibPathsuperr@   )r,   	__class__s    r-   r@   @TestSaveAllTensorsAsExternalDataWithPath.get_temp_model_filename  s    ||EG;=>>r0   r   rt   zpathlib.Path)ry   rz   r{   r|   r@   r   __classcell__)rm  s   @r-   rh  rh    s    ? ?r0   rh  c                  (    \ rS rSr\SS j5       rSrg)TestExternalDataToArrayWithPathi  c                B    [         R                  " U R                  5      $ r2   )rj  rk  r  r+   s    r-   r   /TestExternalDataToArrayWithPath.model_file_path  s    ||D1122r0   r   Nro  )ry   rz   r{   r|   rH  r   r   r   r0   r-   rr  rr    s    3 3r0   rr  __main__)*
__future__r   r;   rj  r   r  r>   typingr   numpyr"   parameterizedrM   r   r   r   r   r	   onnx.external_data_helperr
   r   r   r   r   onnx.numpy_helperr   r   TestCaser   parameterized_classr   r   r   r  rJ  r	  r    r`  rh  rr  ry   mainr   r0   r-   <module>r     s   # 	         J J  3K1x00 K1\ ""	,	-!U3 !U!UH ""	,	-3U%= 3U3Ul ""	,	-eIx'8'8 eIeIP	 ""	,	-\
h// \
\
~!5:R !5H 
D)<=575 >52?/O ?
3&= 3 zMMO r0   