o
    toiI                    @  s   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	Z	d dl
Zd dlmZmZmZmZmZmZ G dd dejZedkrIe  dS dS )    )annotationsN)
GraphProto
ModelProtoOperatorSetIdProtoTensorProtocheckerhelperc                   @  s  e Zd Zdd	d
ZdddZdddZdddZdddZdddZdddZ	dddZ
dddZdddZdddZdd d!Zdd"d#Zdd$d%Zdd&d'Zdd(d)Zdd*d+Zdd,d-Zdd.d/Zdd0d1Zdd2d3Zdd4d5Zdd6d7Zdd8d9Zdd:d;Zdd<d=Zdd>d?Zdd@dAZddBdCZddDdEZ ddFdGZ!ddHdIZ"ddJdKZ#ddLdMZ$ddNdOZ%ddPdQZ&ddRdSZ'ddTdUZ(ddVdWZ)ddXdYZ*ddZd[Z+dd\d]Z,dd^d_Z-dd`daZ.ddbdcZ/ddddeZ0ddfdgZ1ddhdiZ2ddjdkZ3dddodpZ4dddqdrZ5ddsdtZ6ddudvZ7ddwdxZ8ddydzZ9dd{d|Z:dd}d~Z;dddZ<dddZ=dddZ>dddZ?dddZ@dddZAdddZBdddZCdddZDdddZEdddZFdddZGdddZHdddZIdddZJdd ZKdddZLdddZMeNjNOddddddePjQdfddddddePjQdfddddddePjQdfddddddePjQdlfddddddePjQdlfddddddePjQdlfddddddePjQdlfdddddePjRddlfddddddePjSdlfg	dddĄZTeNjNOg dŢdddȄZUdddʄZVdS )TestVersionConvertergraphr   initial_versionr   target_versionintreturnr   c                 C  s.   t j|d|gd}tj||}t| |S )Nz	onnx-test)producer_nameopset_imports)r   
make_modelonnxversion_converterconvert_versionr   check_model)selfr
   r   r   
orig_modelconverted_model r   T/home/ubuntu/.local/lib/python3.10/site-packages/onnx/test/version_converter_test.py
_converted   s   
zTestVersionConverter._convertedNonec                      d fdd}  t| d S )Nr   r   c                    s   t dddgdgt dddgdgt dddgdgg} t | d	t dtjd
t dtjdt dtjdgt dtjd
g} |t ddd d S )NAddWZshapeReshapeXAYtest             r   	make_node
make_graphmake_tensor_value_infor   FLOATr   make_operatorsetidnodesr
   r   r   r   r&   -   s   
z>TestVersionConverter.test_backwards_incompatible.<locals>.testr   r   assertRaisesRuntimeErrorr   r&   r   r6   r   test_backwards_incompatible,   s   z0TestVersionConverter.test_backwards_incompatiblec              
   C  s   t dddgdgg}t |dt dtjdt dtjdgt dtjdg}| |t ddd	}|jj	d
 j
dks>J |jd
 jd	ksHJ d S )Nr   X1X2r%   r&   r'   r+      r-   r   r   r/   r0   r1   r   r2   r   r3   r
   nodeop_typeopset_importversionr   r5   r
   r   r   r   r   test_backwards_compatibleB      	z.TestVersionConverter.test_backwards_compatiblec                   r   )Nr   r   c               
     sZ   t ddgdgg} t | dt dtjdgt dtjdg} |t ddd d S )	NCosr#   r%   r&   r'   r+   r,      r.   r4   r6   r   r   r&   T   s   z7TestVersionConverter.test_non_existent_op.<locals>.testr7   r8   r;   r   r6   r   test_non_existent_opS   s   
z)TestVersionConverter.test_non_existent_opc              
   C     t dddgdgg}t |dt dtjdt dtjdgt dtjdg}| |t dd	d
}|jj	d j
dks>J |jd jd
ksHJ d S )Nr   r=   r>   r%   r&   r'   r)   r+   r,   r(   r   r@   rE   r   r   r   test_add_8_5a   rG   z!TestVersionConverter.test_add_8_5c              
   C  rK   )Nr   r=   r>   r%   r&   r'   r)   r+   r(   r,   r   r@   rE   r   r   r   test_add_5_8r   rG   z!TestVersionConverter.test_add_5_8c              
   C  s   t jdddgdgdddg}t |dt dtjd	t dtjd
gt dtjd
g}| |t ddd}|jj	d j
dksAJ |jj	d j
dksLJ |jd jdksVJ d S )Nr   r=   r>   r%   r   r*   )axis	broadcastr&   )r(   r-   r'   r+   r(   r,   	Unsqueezer@   rE   r   r   r   test_add_5_8_with_unsqueeze   s   	z0TestVersionConverter.test_add_5_8_with_unsqueezec              
   C  rK   )NMulr=   r>   r%   r&   r'   r)   r+   r,   r(   r   r@   rE   r   r   r   test_mul_8_5   rG   z!TestVersionConverter.test_mul_8_5c              
   C  rK   )NrR   r=   r>   r%   r&   r'   r)   r+   r(   r,   r   r@   rE   r   r   r   test_mul_5_8   rG   z!TestVersionConverter.test_mul_5_8c                 C     t dg ddgg}t |dt dtjdt dtjdt dtjdgt dtjdg}| |t d	d
d}|jj	d j
dksEJ |jd jdksOJ d S )NGemmr$   BCr%   r&   r$   r(   r(   rX   rY   r+   r*   r,   r   r@   rE   r   r   r   test_gemm_up   <   (z!TestVersionConverter.test_gemm_upc                 C  rU   )NrV   rW   r%   r&   r$   rZ   rX   rY   r+   r,   r*   r   r@   rE   r   r   r   test_gemm_down   r\   z#TestVersionConverter.test_gemm_downc              
   C     t ddgdgg}t |dt dtjdgt dtjdg}| |t ddd}|jj	d	 j
dks6J |jd	 jdks@J d S )
NRelur#   r%   r&   r'   r+   r(      r   r@   rE   r   r   r   test_relu_5_7     z"TestVersionConverter.test_relu_5_7c              
   C  r^   )
Nr_   r#   r%   r&   r'   r+   r`   r(   r   r@   rE   r   r   r   test_relu_7_5%  rb   z"TestVersionConverter.test_relu_7_5c                 C     t dg ddgg}t |dt dtjdt dtjdt d	tjdt d
tjdt dtjdgt dtjdg}| |t ddd}|jj	d j
dksSJ |jd jdks]J d S )NBatchNormalizationr#   scalerX   meanvarr%   r&   r#   r'   rg   r)   rX   rh   ri   r+   r,   r(   r   r@   rE   r   r   r   test_batch_normalization_8_53  $   z1TestVersionConverter.test_batch_normalization_8_5c                 C  rd   )Nre   rf   r%   r&   r#   r'   rg   r)   rX   rh   ri   r+   r(   r,   r   r@   rE   r   r   r   test_batch_normalization_5_8K  rk   z1TestVersionConverter.test_batch_normalization_5_8c                 C  s   t dg ddgg}t |dt dtjdt dtjdt dtjdt d	tjdt d
tjdgt dtjdg}| |t ddd}|jj	d j
dksSJ |jd jdks]J d S )NConcatr=   r>   X3X4X5r%   r&   r=   r)   r>   ro   rp   rq   r'   r+   r?   r(   r   r@   rE   r   r   r   test_concat_3_5c  s   z$TestVersionConverter.test_concat_3_5c                 C  s   t jdg ddgddg}t |dt dtjdt d	tjdt d
tjdt dtjdt dtjdgt dtjdg}| |t ddd}|jj	d j
dksUJ |jd jdks_J d S )Nrm   rn   r%   r   rN   r&   r=   r)   r>   ro   rp   rq   r'   r+   r(   r?   r@   rE   r   r   r   test_concat_5_3w  s    z$TestVersionConverter.test_concat_5_3c              
   C  s   t jdg dgt dtjdgdgdt dddgd	gg}t |d
t dtjdgt d	tjdg}| |t 	ddd}|j
jd jdksIJ |jd jdksSJ d S )NConstantr!   r+   r*   r(   valuer"   r#   r%   r&   r'   rI      r   r   r/   make_tensorr   INT64r0   r1   r2   r   r3   r
   rA   rB   rC   rD   rE   r   r   r   test_reshape_6_4  "   	z%TestVersionConverter.test_reshape_6_4c              
   C  s   t jddgdgdgdg}t |dt dtjdgt dtjdg}| |t dd	d
}|jj	d j
dks9J |jj	d j
dksDJ |jd jd
ksNJ d S )Nr"   r#   r%   r(   )r!   r&   r'   r+   rx   rI   r   ru   r*   r@   rE   r   r   r   test_reshape_4_6  s   z%TestVersionConverter.test_reshape_4_6c                 C     t dg ddgg}t |dt dtjdt dtjdt dtjdt d	tjdt d
tjdgt dtjdg}| |t ddd}|jj	d j
dksSJ |jd jdks]J d S )NSumdata_0data_1data_2data_3data_4sumr&   r   r'   r   r   r   r   r+   r`   r,   r   r@   rE   r   r   r   test_sum_7_8  rk   z!TestVersionConverter.test_sum_7_8c                 C  r   )Nr   r   r   r&   r   r'   r   r   r   r   r+   r(   r`   r   r@   rE   r   r   r   test_sum_5_8  rk   z!TestVersionConverter.test_sum_5_8c                 C  r   )Nr   r   r   r&   r   r'   r   r   r   r   r+   r,   r(   r   r@   rE   r   r   r   test_sum_8_5  rk   z!TestVersionConverter.test_sum_8_5c              
   C     t jddgdgddgdg}t |dt dtjdgt dtjdg}| |t ddd	}|jj	d
 j
dks:J |jd
 jd	ksDJ d S NAveragePoolr#   r%   r*   kernel_shaper&   r(   r(   r(   r(   r+   r,   r   r@   rE   r   r   r   test_averagepool_up     z(TestVersionConverter.test_averagepool_upc              
   C     t jddgdgddgdg}t |dt dtjdgt dtjdg}| |t dd	d}|jj	d
 j
dks:J |jd
 jdksDJ d S r   r@   rE   r   r   r   test_averagepool_down  r   z*TestVersionConverter.test_averagepool_downc              
   C  s   t jddgdgddg}t |dt dtjdgt dtjdg}| |t ddd	}|jj	d
 j
dks8J |jd
 jd	ksBJ d S )NDropoutdataoutputr*   )is_testr&   rZ   r+   r,   r   r@   rE   r   r   r   test_dropout_up  s(   z$TestVersionConverter.test_dropout_upc              
   C  r^   )
Nr   r   r   r&   rZ   r+   r,   r*   r   r@   rE   r   r   r   test_dropout_down6  s(   z&TestVersionConverter.test_dropout_downc              
   C     d}d}t j}d}tjjddgdgdg}t|dtjd||gtjd||g}| |td	||}|j	j
d
 jdksAJ |j	jd
 jjj|ksNJ |jd
 j|ksXJ d S )Nr`   r,   r-   r?   rx   Maxr#   r%   inputsoutputstest_maxr+   r   r   r2   r   r   r/   r0   r1   r   r3   r
   rA   rB   r   typetensor_type	elem_typerC   rD   r   
from_opsetto_opset	data_type
data_shaper5   r
   r   r   r   r   test_max_7_8V  "   z!TestVersionConverter.test_max_7_8c              
   C  r   )Nr`   r,   r   Minr#   r%   r   test_minr+   r   r   r   r   r   r   test_min_7_8n  r   z!TestVersionConverter.test_min_7_8c              
   C  r   )Nr`   r,   r?   Meanr#   r%   r   	test_meanr+   r   r   r   r   r   r   test_mean_7_8  r   z"TestVersionConverter.test_mean_7_8c              
   C  r   NMaxPoolr#   r%   r*   r   r&   r   r+   r,   r   r@   rE   r   r   r   test_maxpool_up  r   z$TestVersionConverter.test_maxpool_upc                 C  s   d}d}t j}tjjddgdgdddd	g}t|d
tjd|g dgtjd|g dg}| |td||}t	|j
jdksEJ |j
jd jdksPJ dd |j
jd jD }d|v sbJ d|vshJ d|vsnJ |jd j|ksxJ d S )NrI   r`   Upsampler#   r%   nearest      @       @)r   r   modewidth_scaleheight_scaletest_upsample_6_7r*   r*   r-   r-   r*   r*   rx   rI   r+   r*   r   c                 S  s   g | ]}|j qS r   name).0attrr   r   r   
<listcomp>  s    z:TestVersionConverter.test_upsample_6_7.<locals>.<listcomp>scalesr   r   )r   r2   r   r   r/   r0   r1   r   r3   lenr
   rA   rB   	attributerC   rD   )r   r   r   r   r5   r
   r   attribute_namesr   r   r   r     s<   z&TestVersionConverter.test_upsample_6_7c              
   C  r   r   r@   rE   r   r   r   test_maxpool_down  r   z&TestVersionConverter.test_maxpool_downc              	   C  s   d}d}t j}tjdg ddgdg}d}td||}td	||d
 g}td||d
 g}td||d
 g}	td||d
 g}
td||}t|d||||	|
g|g}| |td||}|jj	d j
dksoJ |jd j|ksyJ d S )Nr,   	   re   )xsbiasrh   ri   yr   )r*   r-   r*   r?   r   r   r*   r   rh   ri   test_batchnormalization_8_9r+   r   )r   r2   r   r/   r1   r0   r   r3   r
   rA   rB   rC   rD   r   r   r   r   r5   input_shaper   rg   rX   rh   ri   r   r
   r   r   r   r   test_batch_normalization_8_9  s0   z1TestVersionConverter.test_batch_normalization_8_9c              	   C  s  d}d}t j}tjjdg ddgdg}d}tjd||}tjd	||d
 g}tjd||d
 g}tjd||d
 g}	tjd||d
 g}
tjd||}tj|d||||	|
g|g}| |td||}|j	j
d jdkswJ |jd j|ksJ d S )Nr   r,   re   rf   r%   r   )r-   r?   rx   r(   r#   rg   r*   rX   rh   ri   test_batchnormalizationr+   r   )r   r2   r   r   r/   r1   r0   r   r3   r
   rA   rB   rC   rD   r   r   r   r   test_batchnormalization_9_8  s0   z0TestVersionConverter.test_batchnormalization_9_8c           	   
   C     d}d}t j}g d}td}tjdg dgtd|||dg}t|d	g tj	d||g}| 
|td||}|jjd
 jdksFJ |jjd
 jjj|ksSJ |jd
 j|ks]J d S )Nr,   r   r      ru   r%   r+   r   r   rw   test_constantr   )r   r2   nparanger   r/   rz   r0   r   r1   r   r3   r
   rA   rB   r   r   r   r   rC   rD   	r   r   r   r   output_shapeoutput_valuer5   r
   r   r   r   r   test_constant_8_9"  0   
	z&TestVersionConverter.test_constant_8_9c           	   
   C  r   )Nr   r,   r   r   ru   r%   r+   r   r   r   )r   UINT64r   r   r   r/   rz   r0   r   r1   r   r3   r
   rA   rB   r   r   r   r   rC   rD   r   r   r   r   test_constant_9_8C  r   z&TestVersionConverter.test_constant_9_8c                 C  s   d}d}t j}tjjddgdgddg}t|dtjd|g d	gtjd|d
dgg}| |td||}|j	j
d jdksDJ |j	jd jjj|ksQJ |jd j|ks[J d S )Nr,   r   Flattenr#   r%   r*   r   r   rN   test_flattenr   r-      r+   r   r   r   r   r   r   r5   r
   r   r   r   r   test_flatten_8_9d      z%TestVersionConverter.test_flatten_8_9c                 C  s   d}d}t j}tjjddgdgddg}t|dtjd|g d	gtjd|d
dgg}| |td||}|j	j
d jdksDJ |j	jd jjj|ksQJ |jd j|ks[J d S )Nr   r,   r   r#   r%   r*   r   r   r   r-   r   r+   r   r   r   r   r   r/   r0   r1   r   r3   r
   rA   rB   r   r   r   r   rC   rD   r   r   r   r   test_flatten_9_8{  r   z%TestVersionConverter.test_flatten_9_8c              
   C  s   d}d}t j}tjjdddgdgdg}g d}t|d	tjd||tjd||gtjd||g}| |td
||}|j	j
d jdksKJ |j	jd jjj|ksXJ |jd j|ksbJ d S )Nr,   r   PRelur#   Sloper%   r   r   
test_prelur+   r   r   r   r   r   r   r5   r   r
   r   r   r   r   test_prelu_8_9  &   
z#TestVersionConverter.test_prelu_8_9c              
   C  s   d}d}t j}tjjdddgdgdg}g d}t|d	tjd||tjd||gtjd||g}| |td
||}|j	j
d jdksKJ |j	jd jjj|ksXJ |jd j|ksbJ d S )Nr   r,   r   r#   r   r%   r   r   r   r+   r-   r   r   r   r   r   r   test_prelu_9_8  r   z#TestVersionConverter.test_prelu_9_8c              
   C     d}d}t j}tjjdddgdgdg}g d}t|d	tjd||tjd||gtjdt j|g}| |t	d
||}|j
jd jdksLJ |j
jd jjjt jksZJ |jd j|ksdJ d S )Nr,   r   Greaterr=   r>   r%   r   r   test_greaterr+   r   r   r2   r   r   r/   r0   r1   BOOLr   r3   r
   rA   rB   r   r   r   r   rC   rD   r   r   r   r   test_greater_8_9  *   
z%TestVersionConverter.test_greater_8_9c              
   C     d}d}t j}tjjdddgdgdg}g d}t|d	tjd||tjd||gtjdt j|g}| |t	d
||}|j
jd jdksLJ |j
jd jjjt jksZJ |jd j|ksdJ d S )Nr   r,   r   r=   r>   r%   r   r   r   r+   r-   r   r   r   r   r   r/   r0   r1   r   r   r3   r
   rA   rB   r   r   r   r   rC   rD   r   r   r   r   test_greater_9_8  r   z%TestVersionConverter.test_greater_9_8c              
   C  r   )Nr,   r   Lessr=   r>   r%   r   r   	test_lessr+   r   r   r   r   r   r   test_less_8_9  r   z"TestVersionConverter.test_less_8_9c              
   C  r   )Nr   r,   r   r=   r>   r%   r   r   r   r+   r-   r   r   r   r   r   r   test_less_9_8"  r   z"TestVersionConverter.test_less_9_8c                 C  s   d}d}t j}tjjdddgdgdg}t|dtjd|d	d
gtjd|d
d	ggtjd|d	d	gg}| |td||}|j	j
d jdksMJ |j	jd jjj|ksZJ |jd j|ksdJ d S )Nr,   r   MatMulr=   r>   r%   r   test_matmulr?   rx   r+   r   r   r   r   r   r   test_matmul_8_9@  $   
z$TestVersionConverter.test_matmul_8_9c                 C  s   d}d}t j}tjjdddgdgdg}t|dtjd|d	d
gtjd|d
d	ggtjd|d	d	gg}| |td||}|j	j
d jdksMJ |j	jd jjj|ksZJ |jd j|ksdJ d S )Nr   r,   r  r=   r>   r%   r   r  r?   rx   r+   r-   r   r   r   r   r   r   test_matmul_9_8Z  r  z$TestVersionConverter.test_matmul_9_8c                 C  s   d}d}t j}tjjdg ddgdg}t|dtjd|d	d
gtjd|d
d	gtjd|d	d	ggtjd|d	d	gg}| |td||}|j	j
d jdksVJ |j	jd jjj|kscJ |jd j|ksmJ d S )Nr,   r   rV   r=   r>   ro   r%   r   	test_gemmr=   r?   rx   r>   ro   r+   r   r   r   r   r   r   test_gemm_8_9t  (   z"TestVersionConverter.test_gemm_8_9c                 C  s   d}d}t j}tjjdg ddgdg}t|dtjd|d	d
gtjd|d
d	gtjd|d	d	ggtjd|d	d	gg}| |td||}|j	j
d	 jdksVJ |j	jd jjj|kscJ |jd j|ksmJ d S )Nr   r,   rV   r  r%   r   r  r=   r?   rx   r>   ro   r+   r   r   r   r   r   r   test_gemm_9_8  r	  z"TestVersionConverter.test_gemm_9_8c                 C  s  d}d}t j}tjjddgdgdg ddg}t|d	tjd|g d
gtjd|g dg}| |td||}t	|j
jdksFJ |j
jd jdksQJ |j
jd jdks\J t	|j
jd jdksiJ |j
jd jd jdkswJ |jd j|ksJ d S )Nr,   r   r   r#   r%   r         ?r  r   r   )r   r   r   r   test_upsample_8_9r   r   r+   r-   r   ru   r*   r   )r   r2   r   r   r/   r0   r1   r   r3   r   r
   rA   rB   r   r   rC   rD   r   r   r   r   r    s4   
z&TestVersionConverter.test_upsample_8_9F	raw_scaleboolc           
      C  s<  d}d}t j}tjjdddgdgddg}g d	}tjdtj jd
g|r/ttjdg|R  n||}t	|dtj
d|g dtj
d|d
ggtj
d|g dg|g}| |td||}	|	jjd jdksmJ t|	jjdkswJ t|	jjd jdksJ |	jjd jd jdksJ |	jd j|ksJ d S )Nr   r,   r   r#   Scalesr%   r   r   r   r   r  rx   4ftest_upsampler   r   r+   r   r-   r*   r   )r   r2   r   r   r/   rz   bytesstructpackr0   r1   r   r3   r
   rA   rB   r   initializerr   r   rC   rD   )
r   r  r   r   r   r5   scale_valuescale_tensorr
   r   r   r   r    helper_upsample_with_initializer  s@   z5TestVersionConverter.helper_upsample_with_initializerc           
   
   C  sP  d}d}t j}g d}tjdtj jdg|r!ttjdg|R  n||}tjjdg dg|d	tjjd
ddgdgddg}tj	|dtj
d|g dgtj
d|g dgtj
d|dggd}| |td||}	t|	jjdksvJ |	jjd jd
ksJ t|	jjd jdksJ |	jjd jd jdksJ |	jd j|ksJ d S )Nr   r,   r  const_valuerx   r  ru   Constant_Outputr   r   r#   r%   r   r  r  r   r   )
value_infor+   r*   r   r-   r   )r   r2   r   r   rz   r  r  r  r/   r0   r1   r   r3   r   r
   rA   rB   r   r   rC   rD   )
r   r  r   r   r   r  r  r5   r
   r   r   r   r   helper_upsample_with_constant  sJ   

z2TestVersionConverter.helper_upsample_with_constantc                 C     | j dd d S NFr  r  r6   r   r   r   $test_upsample_with_constant_node_9_8(     z9TestVersionConverter.test_upsample_with_constant_node_9_8c                 C  r  r   )r  r6   r   r   r   "test_upsample_with_initializer_9_8,  r$  z7TestVersionConverter.test_upsample_with_initializer_9_8c                 C  r  NTr!  r"  r6   r   r   r   &test_upsample_with_raw_initializer_9_80  r$  z;TestVersionConverter.test_upsample_with_raw_initializer_9_8c                 C  r  r&  r"  r6   r   r   r   (test_upsample_with_raw_constant_node_9_84  r$  z=TestVersionConverter.test_upsample_with_raw_constant_node_9_8c                 C  sf  d}d}t j}tjjdddgdgd}tjjddgd	gd}tj||gd
tjd|dgtjd|dggtjd|dgtjd	|dgg}d}tjjd|ddgddg|ddg}tjd|ddg}	tjd|g d}
tjd|ddg}tjd|g d}tj|d|	|
g||g}| |td||}|j	j
d jdksJ |jd j|ksJ d S )Nr,   r   r   sum_innextsum_outr   Identityscan_out	scan_bodyr-   r+   Scaninitialr   r   zr*   )r   r   bodynum_scan_inputs)r*   r?   r-   test_scan_8_9r   )r   r2   r   r   r/   r0   r1   r   r3   r
   rA   rB   rC   rD   )r   r   r   r   node1node2gno_sequence_lensr5   r0  r   r   r1  r
   r   r   r   r   r4  8  sT   
z"TestVersionConverter.test_scan_8_9c                 C  s   d}d}t j}t j}tjjddgdgt jdg}t|dtjd|dd	ggtjd|dd	gg}| |t	d
||}|j
jd jdksHJ |j
jd jjj|ksUJ |jd j|ks_J d S )Nr,   r   Castr#   r%   )r   r   to	test_castr-   r?   r+   r   )r   r2   UINT32r   r   r/   r0   r1   r   r3   r
   rA   rB   r   r   r   r   rC   rD   )r   r   r   data_type_fromdata_type_tor5   r
   r   r   r   r   test_cast_8_9n  s(   z"TestVersionConverter.test_cast_8_9c                 C  s   t jdg dgt dtjdgddgdt dddgd	d
gg}t |dt dtjdgt d	tjdt d
tjdg}| |t 	ddd}|j
jd jdksRJ |jd jdks\J d S )Nru   splitr+   r-   r?   rv   Splitr#   Y1Y2r&   r'   r-   r      r   r   ry   rE   r   r   r   test_split_13_12  s&   		z%TestVersionConverter.test_split_13_12c                 C  s   t jddgddgddg}t |dt dtjdgt dtjd	t dtjd	g}| |t d
dd}|jj	d j
dks@J |jd jdksJJ t|jj	d jdksWJ d S )NrA  r#   rB  rC  r*   rs   test_split_optional_input)rI   r   r+   r      r   r-   )r   r/   r0   r1   r   r2   r   r3   r
   rA   rB   rC   rD   r   r   rE   r   r   r   test_split_with_optional_input  s   	z3TestVersionConverter.test_split_with_optional_inputc                 C  s   t jddgddgddgdg}t |dt dtjd	gt dtjd
t dtjdg}| |t ddd}|jj	d j
dksBJ |jj	d j
dksMJ |jd jdksWJ d S )NrA  r#   rB  rC  r-   r?   )r@  r&   r'   rD  r   r+   r   rE  r   ru   r*   r@   rE   r   r   r   test_split_12_13  s   	z%TestVersionConverter.test_split_12_13c              
   C  s   t jdg dgt dtjdgdgdt dddgd	gg}t |d
t dtjdgt d	tjdg}| |t 	ddd}|j
jd jdksIJ |jd jdksSJ d S )Nru   axesr+   r*   r   rv   	ReduceSumr#   r%   r&   rZ   r*   r(   rE  r   ry   rE   r   r   r   test_axes_input_to_attr_13_12  r}   z2TestVersionConverter.test_axes_input_to_attr_13_12c              
   C  s   t jddgdgdgdg}t |dt dtjdgt dtjdg}| |t d	d
d}|jj	d j
dks9J |jd jdksCJ d S )NrL  r#   r%   r   )rK  r&   rZ   rM  r+   r   rE  ru   r@   rE   r   r   r   test_axes_attr_to_input_12_13  s   z2TestVersionConverter.test_axes_attr_to_input_12_13c              
   C  s  t jddgdgddgddgddgdg}t |d	t dtjd
gt dtjdg}| |t ddd}|jj	d j
dks@J |jj	d j
dksKJ |jj	d j
dksVJ |jj	d j
dksaJ |jd jdkskJ t|jj	d jdksxJ t|jj	d jdksJ d S )NSlicer#   r%   r   r*   r?   
   )rK  startsendsr&   )   rQ  r(   )r?   rQ  r(   r+   r   ru   r-   rx   )r   r/   r0   r1   r   r2   r   r3   r
   rA   rB   rC   rD   r   inputr   rE   r   r   r   test_slice_9_10  s$   z$TestVersionConverter.test_slice_9_10c                 C  s0  d}d}t j}d}d}d}d}d}tjjdg dd	d
g|dg}	t|	dtjd||||gtjd||||gtjd||||gtjd||d| ggtjd
||||gg}
| |
td	||}|j	j
d jdksqJ |jd j|ks{J t|j	j
d jdksJ |j	j
d jd jdksJ d S )NrE     r*   r-   r?   r(   RNNr#   r   Rr+   Y_hr   r   hidden_sizetest_rnnr#   r   rZ  rX   r   layoutr   r2   r   r   r/   r0   r1   r   r3   r
   rA   rB   rC   rD   r   r   r   r   r   r   r   
seq_length
batch_size
input_sizenum_directionsr]  r5   r
   r   r   r   r   test_rnn_13_14  sV   	 z#TestVersionConverter.test_rnn_13_14c                 C  s8  d}d}t j}d}d}d}d}d}tjjdg dd	d
g|dg}	t|	dtjd||||gtjd||d| |gtjd||d| |gtjd||d| ggtjd
||||gg}
| |
td	||}|j	j
d jdksuJ |jd j|ksJ t|j	j
d jdksJ |j	j
d jd jdksJ d S )NrE  rW  r*   r-   r?   r(   GRUrY  r+   r[  r\  test_grur#   r   rZ  rX   rI   r   r_  r`  ra  r   r   r   test_gru_13_14:  V   	 z#TestVersionConverter.test_gru_13_14c                 C  s8  d}d}t j}d}d}d}d}d}tjjdg dd	d
g|dg}	t|	dtjd||||gtjd||d| |gtjd||d| |gtjd||d| ggtjd
||||gg}
| |
td	||}|j	j
d jdksuJ |jd j|ksJ t|j	j
d jdksJ |j	j
d jd jdksJ d S )NrE  rW  r*   r-   r?   r(   LSTMrY  r+   r[  r\  	test_lstmr#   r   rx   rZ  rX   r,   r   r_  r`  ra  r   r   r   test_lstm_13_14p  rj  z$TestVersionConverter.test_lstm_13_14c                 C  s  d}d}t j}d}d}d}d}d}tjjdg dd	d
g|ddg}	t|	dtjd||||gtjd||||gtjd||||gtjd||d| ggtjd
||||gg}
| |
td	||}|j	j
d jdksrJ |jd j|ks|J t|j	j
d jdksJ d S )NrW  rE  r*   r-   r?   r(   rX  rY  r+   r[  r   r   r   r]  r_  r^  r#   r   rZ  rX   r   r2   r   r   r/   r0   r1   r   r3   r
   rA   rB   rC   rD   r   r   ra  r   r   r   test_rnn_14_13  sV   
z#TestVersionConverter.test_rnn_14_13c                 C  s  d}d}t j}d}d}d}d}d}tjjdg dd	d
g|ddg}	t|	dtjd||||gtjd||d| |gtjd||d| |gtjd||d| ggtjd
||||gg}
| |
td	||}|j	j
d jdksvJ |jd j|ksJ t|j	j
d jdksJ d S )NrW  rE  r*   r-   r?   r(   rg  rY  r+   r[  r   rn  rh  r#   r   rZ  rX   rI   ro  ra  r   r   r   test_gru_14_13  V   
z#TestVersionConverter.test_gru_14_13c                 C  s  d}d}t j}d}d}d}d}d}tjjdg dd	d
g|ddg}	t|	dtjd||||gtjd||d| |gtjd||d| |gtjd||d| ggtjd
||||gg}
| |
td	||}|j	j
d jdksvJ |jd j|ksJ t|j	j
d jdksJ d S )NrW  rE  r*   r-   r?   r(   rk  rY  r+   r[  r   rn  rl  r#   r   rx   rZ  rX   r,   ro  ra  r   r   r   test_lstm_14_13  rr  z$TestVersionConverter.test_lstm_14_13c              
   C  s   d}t jddgdg|dg}t |dt dtjdgt dtjdg}| |t d	d
d}|jj	d j
dks:J |jd jdksDJ d S )Nr   r*   r-   r   r-   r*   Padr#   r%   )padsr&   r*   r-   r-   r*   r(   r(   r+   rQ     r*   r   r@   r   rv  r5   r
   r   r   r   r   test_pad_10_11H  s   z#TestVersionConverter.test_pad_10_11c              
   C  s   d}t jddgdg|ddg}t |dt dtjdgt dtjd	g}| |t d
dd}|jj	d j
dks;J |jd jdksEJ d S )Nrt  ru  r#   r%   r  )rv  rw   r&   rw  rx  r+   rQ  ry  r*   r   r@   rz  r   r   r   test_pad_with_value_10_11W  s   z.TestVersionConverter.test_pad_with_value_10_11c                 C  s  d}d}t j}dg}tjjddgdgddd	g}tjd||g}tjd||g}t|d
||}tjjddgdgddd	g}	tjd||g}
tjd||g}t|	d
|
|}tjjddgdg||dg}tjdt jg g}tjd||g}td||ddgg}t|d|||}| 	|t
d||}|jjd jdksJ |jd j|ksJ |jjd jd jjd jdksJ t|jjd jd jjd jdksJ |jjd jd jjd jdksJ t|jjd jd jjd jdksJ d S )NrQ  ry  r-   Clipsub_insub_outr   r   )r   r   minmaxthen_gIfcondout)r   r   then_branchelse_branchg      @g      @test_subgraphsr+   r   r*   )r   r2   r   r   r/   r1   r0   r   rz   r   r3   r
   rA   rB   rC   rD   r   r7  r   )r   r   r   r   r   
subg1_nodesubg1_inputsubg1_outputsubg1
subg2_nodesubg2_inputsubg2_outputsubg2rA   rU  r   initr
   	convertedr   r   r   test_if_subgraph_10_11g  sV   	$($,z+TestVersionConverter.test_if_subgraph_10_11c              
   C  s  t dg ddgg}ddg}tj dtjjdg|}dd	g}tj d
tjjdg|}ddg}tj dtjjdg|}ddg}tj dtjjdg|}	t |dt dtjdgt dtjdg||||	g}
| |
t 	ddd}|j
jd jdks|J |jd jdksJ d S )Nre   rf   r%   g?g
ףp=
?rg   r-   g333333?gHzG?rX   gzG?g?rh   g)\(?g{Gz?ri   r&   r#   )r*   r-   r-   r?   r+   ry  r   r   )r   r/   r   rz   r   r2   r0   r1   r   r3   r
   rA   rB   rC   rD   )r   r5   r  r  b_valueb_tensor
mean_valuemean_tensor	var_value
var_tensorr
   r   r   r   r   'test_initializer_not_in_input_above_ir4  s8   
z<TestVersionConverter.test_initializer_not_in_input_above_ir4c              
   C  s>  d}t jddgdg|dg}t |dt dtjdgt dtjdg}| |t dd	d
}|jj	d j
dks:J |jj	d j
dksEJ |jj	d jd jdksSJ |jj	d jd j|ksaJ |jj	d j
dkslJ |jj	d jd jdkszJ |jj	d jd jdksJ |jj	d j
dksJ |jd jd
ksJ d S )Nr   Softmaxr#   r%   rs   r&   r*   r-   r?   r+   ry  rE  Shaper*   r   rN   r-   r?   r"   r   r/   r0   r1   r   r2   r   r3   r
   rA   rB   r   r   irC   rD   r   rN   r5   r
   r   r   r   r   test_softmax_12_13  s$   z'TestVersionConverter.test_softmax_12_13c              
   C  s   d}t jddgdg|dg}t |dt dtjdgt dtjdg}| |t dd	d
}|jj	d j
dks:J |jj	d jd jdksHJ |jj	d jd jdksVJ |jd jd
ks`J d S )Nr  r  r#   r%   rs   r&   r  r+   rE  r   r   rN   r-   r  r  r   r   r   test_softmax_13_12  s   z'TestVersionConverter.test_softmax_13_12
per_tensor   r?   r)   NTper_axis_none_block_shaper  r*   per_axis_zero_block_shaper   per_tensor_positive_block_shaper-   per_axis_positive_block_shape
blocked_2drx   r?   rx   
blocked_3drx   r?       rx   r?   r,   per_axis_output_dtypeper_axis_unsupported_type_strx_shapetuple[int, ...]scale_shaperN   
block_sizeoutput_dtype
int | Nonezero_point_dtype
compatiblec	                   s`   d fdd}	|rt  n t}
|
 |	|||||| W d    d S 1 s)w   Y  d S )Nr   r   c              
     s   t jdddgdg|||dg}t dtj| t dtj|g}|r3|t d|| |d jd |p6|}t |d|t d|| g}	 |	t 	d	d
d}
d S )NQuantizeLinearr#   Sr%   )rN   r  r  ZPr   r&   r+      rT  )
r   r/   r1   r   r2   appendrU  r0   r   r3   )r   r  rN   r  r  r  r5   r   output_type_r
   r  r6   r   r   r&   8  s2   z6TestVersionConverter.test_quantize_21_20.<locals>.testr7   
contextlibnullcontextr9   r:   )r   r  r  r  rN   r  r  r  r  r&   context_managerr   r6   r   test_quantize_21_20  s   N "z(TestVersionConverter.test_quantize_21_20))r  r  r)   NNT)r  r  r  r*   NT)r  r  r  r*   r   T)r  r  r)   r*   r-   F)r  r  r  r*   r-   F)r  r  r  r   rx   F)r  r  r  r-   rx   Fy_shapec           	        s\   d fdd}|rt  n t}| ||||| W d    d S 1 s'w   Y  d S )Nr   r   c                   s~   t jdg ddg||dg}t |dt dtj| t dtj|t dtj|gt dtj| g} |t d	d
d}d S )NDequantizeLinear)r#   r  r  r%   )rN   r  r&   r#   r  r  r+   r  rT  )	r   r/   r0   r1   r   INT8r2   r   r3   )r   r  rN   r  r5   r
   r  r6   r   r   r&   q  s$   	
z8TestVersionConverter.test_dequantize_21_20.<locals>.testr7   r  )	r   r  r  r  rN   r  r  r&   r  r   r6   r   test_dequantize_21_20]  s   "z*TestVersionConverter.test_dequantize_21_20c                 C  s  t  }d}tjj| tj}tjj	dtj
jt||dd}tjj	dtj
jg dgd}tjjdddgd	gd
}tjjd|gg tjd	tj
jt|g||gd}tj|d}d}	tjddg}
tjj||
d}d|_tj||dd|	ddd tjtj|ddd}| t|jjd dd |jjD }| d| |d }| |jt
j  | t|j!d dd |j!D }| |d |	 | |d d | |d  d! W d    d S 1 sw   Y  d S )"N)r-   r?   initializer_tensorT)r   r   dimsvalsrawinitializer_scalarr  )r   r   r  r  r   
sum_outputr   SimpleAddition)r   r5   r   r   r  ztest_simple_add.onnxztest_simple_add.onnx.datar+   rT  )r   rQ  r   F)save_as_external_dataall_tensors_to_one_filelocationsize_thresholdconvert_attribute)load_external_datar  r-   c                 S  s   i | ]}|j |qS r   r   )r   r  r   r   r   
<dictcomp>  s    zNTestVersionConverter.test_external_data_version_conversion.<locals>.<dictcomp>r?   c                 S  s   i | ]}|j |jqS r   )keyrw   )r   edr   r   r   r    s    r  offset0length24)"tempfileTemporaryDirectoryr   randomrandastypefloat32r   r   rz   r   r2   listr/   r0   r1   ospathjoinmake_opsetidr   
ir_version
save_modelr   r   loadassertEqualr   r
   r  assertIndata_locationEXTERNALexternal_data)r   temp_dirr!   random_datar  r  add_node	graph_defmodel_filenamedata_filenamer   	model_defr   tensorslarge_tensorexternal_data_dictr   r   r   %test_external_data_version_conversion  sv   
"z:TestVersionConverter.test_external_data_version_conversion)r
   r   r   r   r   r   r   r   r7   )F)r  r  r   r   )r  r  r  r  r  r  rN   r   r  r   r  r  r  r  r  r  r   r   )r  r  r  r  r  r  rN   r   r  r   r  r  r   r   )W__name__
__module____qualname__r   r<   rF   rJ   rL   rM   rQ   rS   rT   r[   r]   ra   rc   rj   rl   rr   rt   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r#  r%  r'  r(  r4  r?  rF  rI  rJ  rN  rO  rV  rf  ri  rm  rp  rq  rs  r{  r|  r  r  r  r  parameterizedexpandr   r  FLOAT8E4M3FNUINT16r  r  r  r   r   r   r   r	      s   










0
0













 
 




&

!
!
!
!











"*
.




6







6
6
6
6
6
6

;
#

C0%r	   __main__)
__future__r   r  r  r  r  unittestnumpyr   r  onnx.version_converterr   r   r   r   r   r   r   TestCaser	   r  mainr   r   r   r   <module>   s>    
                 N