
    
Ng:{                       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	 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 d dlmZmZmZmZmZ d dlmZ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(e)dk    r ej*                     dS dS )     )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                  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    X/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/test/test_external_data.pysetUpzTestLoadExternalDataBase.setUp%   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    cleanupr,   s    r.   tearDownz!TestLoadExternalDataBase.tearDown,       ""$$$$$r0   c                    t           j                            | j        t	          t          j                              dz             S Nz.onnxospathjoinr"   r   uuiduuid4r,   s    r.   get_temp_model_filenamez0TestLoadExternalDataBase.get_temp_model_filename/   -    w||DM3tz||+<+<w+FGGGr0    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rE   wbraw_data)r   r#   arrayr!   r   openr:   r;   r<   r"   writerJ   
ClearFieldonnxr   EXTERNALdata_location)r-   rB   rD   rE   tensortensor_filename	data_files          r.   create_external_data_tensorz4TestLoadExternalDataBase.create_external_data_tensor2   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outputsrB   input_value
test_graphrZ   r[   initializer
model.onnx)rO   r   	make_noderU   r)   r(   make_tensor_value_infor   FLOATshape
make_graph
make_modelr:   r;   r<   r"   
save_modelr   )r-   rE   constant_nodeinitializersrZ   graphmodelr+   s           r.   r*   z*TestLoadExternalDataBase.create_test_model@   s   --J22$&7 	 . 
 
 ,,&x 
 )t/5t7M7S 
 !O$
 
 
 !%((dm\BB~t/HIIIr0   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+   r,   s    r.   test_check_modelz)TestLoadExternalDataBase.test_check_modelc   sE    $
22MMV   	D/00000r0   Nr   r   )r   r   rA   rB   rC   rD   r   rE   r   r   r   )rE   r   r   r   )__name__
__module____qualname____doc__r   __annotations__r/   r5   r?   rU   r*   ro    r0   r.   r   r      s          
 !+****7 7 7 7% % % %H H H H CE    ! ! ! ! !F1 1 1 1 1 1r0   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   rO   
load_modelr+   r   rj   r_   r#   testingassert_allcloser   r(   node	attributetr)   r-   rk   initializer_tensorattribute_tensors       r.   test_load_external_dataz,TestLoadExternalData.test_load_external_datar   s     3T5NOO"[4Q7

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

""8,<#=#=t?STTTTTr0   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   )rO   r   r+   r   r   r"   rj   r_   r#   r   r   r   r(   r   r   r   r)   r   s       r.   !test_load_external_data_for_modelz6TestLoadExternalData.test_load_external_data_for_modelz   s    !:u
 
 
 	%UDM:::"[4Q7

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

""8,<#=#=t?STTTTTr0   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_copyr`   r   rO   r   r+   r   r:   r;   r<   r"   mkdirrg   rj   r_   r#   r   r   r   r(   r   r   r   r)   r-   rk   r"   new_model_filename	new_modelr   r   s          r.   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Tr0   Nrp   )rs   rt   ru   r   r   r   rx   r0   r.   r{   r{   k   s^        U U U U	U 	U 	U 	UU U U U U Ur0   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abi   r       )rE   offsetlengthrJ   )rL   r:   r;   r<   r"   r   r#   rK   tellrM   rJ   r   r!   rN   rO   r   rP   rQ   append)	r-   r   rS   tensorsrT   rB   rD   rR   r   s	            r.   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       r.   #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Tr0   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          r.   #test_save_external_single_file_datazBTestLoadExternalDataSingleFile.test_save_external_single_file_data   r   r0   )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   invlid_external_datar   z#../invlid_external_data/tensors.binexternal_datar`   rk   r   rE   r   c                n    | j         j        D ]'}|                    d          rt          ||           (d S )NrJ   )rj   r_   HasFieldr   )rk   rE   rR   s      r.   '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 8r0   rH   Fr   )rk   r   rE   r   )rO   r   r+   r   r:   r;   r<   r"   r   rg   assertRaisesr   ValidationErrorr   )r-   r   r   rk   	model_dirtraversal_external_data_dir traversal_external_data_locationexternal_data_dirnew_model_filepathr   _
onnx_models               r.   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1'
 '
# 	,--- 	U/1w||+]0 0,, 0U,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   rp   )r   r   r   r   r   r   )rs   rt   ru   r   r   r   parameterizedexpand	itertoolsproductr   rx   r0   r.   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r0   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_protork   r,   s    r.   r/   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


r0   c                    t           j                            | j        t	          t          j                              dz             S r8   r9   r,   s    r.   r?   z8TestSaveAllTensorsAsExternalData.get_temp_model_filename  r@   r0   r   r   r   c                    g }|D ]B\  }}t          t          j        |                    }||_        |                    |           C|S r2   )r   r#   rK   r!   r   )r-   r   r   rB   rD   rR   s         r.   create_data_tensorsz4TestSaveAllTensorsAsExternalData.create_data_tensors  sS     ". 	# 	#E;00F%FKNN6""""r0   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\   rW   rX   r   rY   r]      r^   )r   r)   r(   rO   r   ra   rb   r   rc   rd   re   rf   )r-   r   rh   rZ   rj   s        r.   r   z8TestSaveAllTensorsAsExternalData.create_test_model_proto  s    **%'89'7
 
 --rH:WQZ . 
 

 )t/5t7M7S 
 !O 
 
 
  '''r0   :check_model supports protobuf only when provided as a pathc                8    t          j        | j                   d S r2   r   rn   rk   r,   s    r.   ro   z1TestSaveAllTensorsAsExternalData.test_check_model8      
 	DJ'''''r0   c                B   |                                  }t          | j        d           t          j        | j        || j                   t          j        || j                  }|j        j        d         }| 	                    |
                    d                     d S )N   size_thresholdr   rQ   )r?   r   rk   rO   rg   r   r   rj   r_   assertFalser   r-   model_file_pathrk   r   s       r.   7test_convert_model_to_external_data_with_size_thresholdzXTestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_with_size_threshold?  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Fr0   c                   |                                  }t          | j        d           t          j        | j        || j                   t          j        || j                  }|j        j        d         }| 	                    |
                    d                     t          j                            t          |          | j                   d S )Nr   r   rQ   )r?   r   rk   rO   rg   r   r   rj   r_   
assertTruer   r#   r   r   r   r(   r   s       r.   :test_convert_model_to_external_data_without_size_thresholdz[TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_without_size_thresholdI  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Xr0   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_filerE   )#r?   r   r=   r>   r   rk   rO   rg   r   r   r:   r;   isfiler<   r"   r   r
   rj   r_   r   lenr   assertEqualrQ   r   DEFAULTr#   r   r   r   r(   r   r   r   r)   )r-   r   external_data_filerk   r   r   s         r.   ?test_convert_model_to_external_data_from_one_file_with_locationz`TestSaveAllTensorsAsExternalData.test_convert_model_to_external_data_from_one_file_with_locationS  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Tr0   c                   |                                  }t          | j        dd           t          j        | j        || j                   |                     t          j        	                    |                     |                     t          j        	                    t          j        
                    | j        |                               d S )Nr   T)r   r   r?   r   rk   rO   rg   r   r   r:   r;   r   r<   r"   r-   r   s     r.   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_namer  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Ur0   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)   )r?   r   rk   rO   rg   r   r   r:   r;   r   r<   r"   r   r   s     r.   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Xr0   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     r.   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Wr0   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)   rQ   )r?   r   rk   rO   rg   r   r   r:   r;   r   r<   r"   r   r   rj   r_   r   r   r   r   r-   r   rk   r   r   s        r.   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Dr0   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   rQ   )r?   r   rk   rO   rg   r   r   rj   r_   r#   r   r   r   r(   r   r   r   r   r   r)   r   s        r.   =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Cr0   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   rQ   )r?   rO   rg   rk   r   r   r:   r;   r   r   rj   r_   r   r   r   r   r   r   s        r.   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Dr0   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   rE   r   r   rQ   r?   rO   rg   rk   r   r   rj   r_   r   r   r#   r   r   r   r(   r   r   r   r   r)   r   s        r.   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Tr0   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   rE   r   r   r   rQ   r   r   s        r.   -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Tr0   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)r?   rk   rj   r_   rJ   rO   rg   r   r   r:   r;   r   r   r   r"   r   )r-   r   original_raw_datark   r   s        r.   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Hr0   Nrp   r   r   r   )rs   rt   ru   r   rw   r/   r?   r   r   unittestskipIfro   r   r   r   r   r   r   r   r   r   r   r   r   rx   r0   r.   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r0   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 )Nr`   
   <   d   )   i,  )r   r   r    r!   r"   r:   r;   r<   _model_file_pathr#   randomrandr&   r'   
large_data
small_datar*   rk   r,   s    r.   r/   zTestExternalDataToArray.setUp6  s    %8::!/4%'W\\$-%N%N)..R55<<RZHH$++--


r0   c                    | j         S r2   )r  r,   s    r.   r   z'TestExternalDataToArray.model_file_path>  s    $$r0   c                8    | j                                          d S r2   r3   r,   s    r.   r5   z TestExternalDataToArray.tearDownB  r6   r0   r   c                   t          j        dt          j        | j        j                  }t          j        dt          j        | j        j        | j                                        d          }t          j	        | j
        t          j                  }t          j        dt          j        |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)rZ   r[   Cast)rZ   r[   toz
test-model)r_   zonnx-example)producer_name)r   rb   r   rc   r
  rd   make_tensortobytesr#   rK   r  int64INT64rO   ra   re   rf   )
r-   r  
input_init
shape_data
shape_initr  r%   cast	graph_defrk   s
             r.   r*   z)TestExternalDataToArray.create_test_modelE  sn   )#{/@$/BWXX'!'&((**
 
 

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

 )#{/@$/RR+''>E ( 
 

 {$$C53%K4E % 
 
 %dOCC#Z0
 
 
	 !)>JJJr0   r   c                8    t          j        | j                   d S r2   r   r,   s    r.   ro   z(TestExternalDataToArray.test_check_modell  r   r0   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)
rO   rg   rk   r   r   loadr   r	   InferenceErrorinfer_shapes)r-   model_without_external_datas     r.   .test_reshape_inference_with_external_data_failzFTestExternalDataToArray.test_reshape_inference_with_external_data_fails  s    J %"&$)	
 	
 	
 	
 '+i $";PU'
 '
 '
# 	*('	 	 	
 	
 	
 	
 	
r0   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   )rO   rg   rk   r   r   r(  r   rj   r_   r"   r#   r   r   r
  )r-   rk   loaded_large_datas      r.    test_to_array_with_external_dataz8TestExternalDataToArray.test_to_array_with_external_data  s    J %"&$)	
 	
 	
 	
 	 $";PU
 
 
 %U[%<Q%?OO

""#4doFFFFFr0   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   rQ   r   )rO   rg   rk   r   r   r(  rj   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_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	
 	
 	
 	
 	
r0   Nrp   r   )rs   rt   ru   r   rw   r/   propertyr   r5   r*   r   r   ro   r,  r/  r4  rx   r0   r.   r  r  -  s          !+****. . . . % % X%% % % %% % % %N X_
*D ( ( (	 (
 
 
 
,G G G G"5
 5
 5
 5
 5
 5
r0   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.
    rA   rB   rC   rD   r   rE   r   r   c                    t          t          j        |                    }||_        |p| d}t	          ||           |                    d           t          j        j        |_	        |S )NrG   rH   rJ   )
r   r#   rK   r!   r   rN   rO   r   rP   rQ   )r-   rB   rD   rE   rR   rS   s         r.   rU   zOTestNotAllowToLoadExternalDataOutsideModelDirectory.create_external_data_tensor  sm     BHUOO,,!":&:&:&:&?;;;;*%%%#/8r0   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   rO   r   r   rn   r,   s    r.   ro   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.binNr<  r,   s    r.   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 	5r=  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.binNr<  r,   s    r.   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 	5r=  Nrq   rr   rp   )rs   rt   ru   rv   rU   ro   r@  rC  rx   r0   r.   r7  r7    sz         
 CE    5 5 5 55 5 5 55 5 5 5 5 5r0   r7  ntzSkip Windows test)reasonc                  *    e Zd ZdZddZddZddZdS )	<TestNotAllowToLoadExternalDataOutsideModelDirectoryOnWindowsr8  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 )r;  z..\..\file.binNr<  r,   s    r.   ro   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 	5r=  c                    |                      d          | _        |                     t          j        j                  5  t	          j        | j                   ddd           dS # 1 swxY w Y   dS )r?  z..\test\..\file.binNr<  r,   s    r.   r@  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 	5r=  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C:/file.binNr<  r,   s    r.   rC  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 	5r=  Nrp   )rs   rt   ru   rv   ro   r@  rC  rx   r0   r.   rG  rG    sZ         5 5 5 55 5 5 55 5 5 5 5 5r0   rG  c                        e Zd Zd fdZ xZS )(TestSaveAllTensorsAsExternalDataWithPathr   pathlib.Pathc                h    t          j        t                                                                S r2   )pathlibPathsuperr?   )r-   	__class__s    r.   r?   z@TestSaveAllTensorsAsExternalDataWithPath.get_temp_model_filename  s#    |EGG;;==>>>r0   r   rM  )rs   rt   ru   r?   __classcell__)rR  s   @r.   rL  rL    s=        ? ? ? ? ? ? ? ? ? ?r0   rL  c                  &    e Zd Zedd            ZdS )TestExternalDataToArrayWithPathr   rM  c                4    t          j        | j                  S r2   )rO  rP  r  r,   s    r.   r   z/TestExternalDataToArrayWithPath.model_file_path  s    |D1222r0   NrS  )rs   rt   ru   r5  r   rx   r0   r.   rV  rV    s2        3 3 3 X3 3 3r0   rV  __main__)+
__future__r   r   r:   rO  r   r   r=   typingr   numpyr#   r   rO   r   r   r   r   r	   onnx.external_data_helperr
   r   r   r   r   onnx.numpy_helperr   r   TestCaser   parameterized_classr{   r   r   r  r7  r   r!   rG  rL  rV  rs   mainrx   r0   r.   <module>ra     s   # " " " " "     				                    J J J J J J J J J J J J J J              3 2 2 2 2 2 2 2K1 K1 K1 K1 K1x0 K1 K1 K1\ #"	,	- !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 zHMOOOOO r0   