U
    qh:                    @  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	m
Z
mZmZmZmZmZ G dd dejZedkr~e  dS )    )annotationsN)
GraphProto
ModelProtoOperatorSetIdProtoTensorProtocheckerhelperc                   @  s2  e Zd ZdddddddZdd	d
dZdd	ddZdd	ddZdd	ddZdd	ddZdd	ddZ	dd	ddZ
dd	ddZdd	ddZdd	ddZdd	ddZdd	d d!Zdd	d"d#Zdd	d$d%Zdd	d&d'Zdd	d(d)Zdd	d*d+Zdd	d,d-Zdd	d.d/Zdd	d0d1Zdd	d2d3Zdd	d4d5Zdd	d6d7Zdd	d8d9Zdd	d:d;Zdd	d<d=Zdd	d>d?Zdd	d@dAZdd	dBdCZ dd	dDdEZ!dd	dFdGZ"dd	dHdIZ#dd	dJdKZ$dd	dLdMZ%dd	dNdOZ&dd	dPdQZ'dd	dRdSZ(dd	dTdUZ)dd	dVdWZ*dd	dXdYZ+dd	dZd[Z,dd	d\d]Z-dd	d^d_Z.dd	d`daZ/dd	dbdcZ0dd	dddeZ1dd	dfdgZ2dd	dhdiZ3ddkddldmdnZ4ddkddldodpZ5dd	dqdrZ6dd	dsdtZ7dd	dudvZ8dd	dwdxZ9dd	dydzZ:dd	d{d|Z;dd	d}d~Z<dd	ddZ=dd	ddZ>dd	ddZ?dd	ddZ@dd	ddZAdd	ddZBdd	ddZCdd	ddZDdd	ddZEdd	ddZFdd	ddZGdd	ddZHdd	ddZIdd	ddZJdd ZKdd	ddZLeMjMNddddddeOjPdfddddddeOjPdfddddddeOjPdfddddddeOjPdjfddddddeOjPdjfddddddeOjPdjfddddddeOjPdjfdddddeOjQddjfddddddeOjRdjfg	ddddddddkdd	ddZSeMjMNdddddddgddddddkddddÄZTdS )TestVersionConverterr   r   intr   )graphinitial_versiontarget_versionreturnc                 C  s.   t j|d|gd}tj||}t| |S )Nz	onnx-test)Zproducer_nameZopset_imports)r   Z
make_modelonnxZversion_converterZconvert_versionr   Zcheck_model)selfr   r   r   Z
orig_modelconverted_model r   D/tmp/pip-unpacked-wheel-xnis5xre/onnx/test/version_converter_test.py
_converted   s       
zTestVersionConverter._convertedNoner   c                   s"   d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assertRaisesRuntimeErrorr   r   r   r/   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|t|jd
 jd	kstd S )Nr   X1X2r   r   r    r$      r&   r   r   r(   r)   r*   r   r+   r   r,   r   nodeop_typeAssertionErroropset_importversionr   r.   r   r   r   r   r   test_backwards_compatible@   s    	z.TestVersionConverter.test_backwards_compatiblec                   s"   dd fdd}  t| d S )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 )	NZCosr   r   r   r    r$   r%      r'   r-   r/   r   r   r   R   s    z7TestVersionConverter.test_non_existent_op.<locals>.testr0   r3   r   r/   r   test_non_existent_opQ   s    
z)TestVersionConverter.test_non_existent_opc              
   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|t|jd jd
kstd S )Nr   r5   r6   r   r   r    r"   r$   r%   r!   r   r8   r>   r   r   r   test_add_8_5_   s    	z!TestVersionConverter.test_add_8_5c              
   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|t|jd jd
kstd S )Nr   r5   r6   r   r   r    r"   r$   r!   r%   r   r8   r>   r   r   r   test_add_5_8p   s    	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st|jj	d j
dkst|jd jdkstd S )Nr   r5   r6   r   r   r#   )axis	broadcastr   )r!   r&   r    r$   r!   r%   Z	Unsqueezer8   r>   r   r   r   test_add_5_8_with_unsqueeze   s    	z0TestVersionConverter.test_add_5_8_with_unsqueezec              
   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|t|jd jd
kstd S )NMulr5   r6   r   r   r    r"   r$   r%   r!   r   r8   r>   r   r   r   test_mul_8_5   s    	z!TestVersionConverter.test_mul_8_5c              
   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|t|jd jd
kstd S )NrG   r5   r6   r   r   r    r"   r$   r!   r%   r   r8   r>   r   r   r   test_mul_5_8   s    	z!TestVersionConverter.test_mul_5_8c                 C  s   t d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
}|jj	d j
dkst|jd jd
kstd S )NGemmr   BCr   r   r!   r!   r$   r#   r%   r   r8   r>   r   r   r   test_gemm_up   s<    (z!TestVersionConverter.test_gemm_upc                 C  s   t d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
}|jj	d j
dkst|jd jd
kstd S )NrJ   r   rK   rL   r   r   rM   r$   r%   r#   r   r8   r>   r   r   r   test_gemm_down   s<    (z#TestVersionConverter.test_gemm_downc              
   C  s   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slt|jd	 jdkstd S )
NRelur   r   r   r    r$   r!      r   r8   r>   r   r   r   test_relu_5_7  s    z"TestVersionConverter.test_relu_5_7c              
   C  s   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slt|jd	 jdkstd S )
NrP   r   r   r   r    r$   rQ   r!   r   r8   r>   r   r   r   test_relu_7_5#  s    z"TestVersionConverter.test_relu_7_5c                 C  s   t ddddddg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st|jd jdkstd S )NBatchNormalizationr   scalerK   meanvarr   r   r    r"   r$   r%   r!   r   r8   r>   r   r   r   test_batch_normalization_8_51  s(      z1TestVersionConverter.test_batch_normalization_8_5c                 C  s   t ddddddg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st|jd jdkstd S )NrT   r   rU   rK   rV   rW   r   r   r    r"   r$   r!   r%   r   r8   r>   r   r   r   test_batch_normalization_5_8I  s(      z1TestVersionConverter.test_batch_normalization_5_8c                 C  s   t ddddddg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st|jd jdkstd S )NConcatr5   r6   X3X4X5r   r   r"   r    r$   r7   r!   r   r8   r>   r   r   r   test_concat_3_5a  s    z$TestVersionConverter.test_concat_3_5c                 C  s   t jddddddg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st|jd jdkstd S )NrZ   r5   r6   r[   r\   r]   r   r   rD   r   r"   r    r$   r!   r7   r8   r>   r   r   r   test_concat_5_3u  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st|jd jdkstd S )NConstantr   r$   r#   r!   valuer   r   r   r   r    r@      r   r   r(   make_tensorr   ZINT64r)   r*   r+   r   r,   r   r9   r:   r;   r<   r=   r>   r   r   r   test_reshape_6_4  s"    	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srt|jj	d j
dkst|jd jd
kstd S )Nr   r   r   r!   )r   r   r    r$   rd   r@   r   ra   r#   r8   r>   r   r   r   test_reshape_4_6  s    z%TestVersionConverter.test_reshape_4_6c                 C  s   t ddddddg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st|jd jdkstd S )NSumdata_0data_1data_2data_3data_4sumr   r    r$   rQ   r%   r   r8   r>   r   r   r   test_sum_7_8  s(      z!TestVersionConverter.test_sum_7_8c                 C  s   t ddddddg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st|jd jdkstd S )Nri   rj   rk   rl   rm   rn   ro   r   r    r$   r!   rQ   r   r8   r>   r   r   r   test_sum_5_8  s(      z!TestVersionConverter.test_sum_5_8c                 C  s   t ddddddg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st|jd jdkstd S )Nri   rj   rk   rl   rm   rn   ro   r   r    r$   r%   r!   r   r8   r>   r   r   r   test_sum_8_5  s(      z!TestVersionConverter.test_sum_8_5c              
   C  s   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stt|jd
 jd	kstd S NZAveragePoolr   r   r#   Zkernel_shaper   r!   r!   r!   r!   r$   r%   r   r8   r>   r   r   r   test_averagepool_up  s    z(TestVersionConverter.test_averagepool_upc              
   C  s   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stt|jd
 jdkstd S rs   r8   r>   r   r   r   test_averagepool_down  s    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spt|jd
 jd	kstd S )NDropoutdataoutputr#   )Zis_testr   rM   r$   r%   r   r8   r>   r   r   r   test_dropout_up  s(    z$TestVersionConverter.test_dropout_upc              
   C  s   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slt|jd	 jdkstd S )
Nrx   ry   rz   r   rM   r$   r%   r#   r   r8   r>   r   r   r   test_dropout_down4  s(    z&TestVersionConverter.test_dropout_downc              
   C  s   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st|j	jd
 jjj|kst|jd
 j|kstd S )NrQ   r%   r&   r7   rd   ZMaxr   r   inputsoutputsZtest_maxr$   r   r   r+   r   r   r(   r)   r*   r   r,   r   r9   r:   r;   rz   typetensor_type	elem_typer<   r=   r   
from_opsetto_opset	data_type
data_shaper.   r   r   r   r   r   test_max_7_8T  s&     
 z!TestVersionConverter.test_max_7_8c              
   C  s   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st|j	jd
 jjj|kst|jd
 j|kstd S )NrQ   r%   r}   ZMinr   r   r~   Ztest_minr$   r   r   r   r   r   r   test_min_7_8l  s&     
 z!TestVersionConverter.test_min_7_8c              
   C  s   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st|j	jd
 jjj|kst|jd
 j|kstd S )NrQ   r%   r7   ZMeanr   r   r~   Z	test_meanr$   r   r   r   r   r   r   test_mean_7_8  s&     
 z"TestVersionConverter.test_mean_7_8c              
   C  s   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stt|jd
 jd	kstd S NZMaxPoolr   r   r#   rt   r   ru   r$   r%   r   r8   r>   r   r   r   test_maxpool_up  s    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|ddddggtjd|ddddgg}| |td||}t	|j
jdkst|j
jd jdkstdd |j
jd jD }d|kstd|kstd|kst|jd j|kstd S )Nr@   rQ   Upsampler   r   nearest      @       @)r   r   modewidth_scaleheight_scaletest_upsample_6_7r#   r&   rd   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   r+   r   r   r(   r)   r*   r   r,   lenr   r9   r;   r:   	attributer<   r=   )r   r   r   r   r.   r   r   Zattribute_namesr   r   r   r     s@     
 z&TestVersionConverter.test_upsample_6_7c              
   C  s   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stt|jd
 jdkstd S r   r8   r>   r   r   r   test_maxpool_down  s    z&TestVersionConverter.test_maxpool_downc              	   C  s   d}d}t j}tjddddddg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st|jd j|kstd S )Nr%   	   rT   xsZbiasrV   rW   yr~   )r#   r&   r#   r7   r#   Ztest_batchnormalization_8_9r$   r   )r   r+   r   r(   r*   r)   r   r,   r   r9   r:   r;   r<   r=   r   r   r   r   r.   input_shaper   rU   rK   rV   rW   r   r   r   r   r   r   test_batch_normalization_8_9  s:        
 z1TestVersionConverter.test_batch_normalization_8_9c              	   C  s  d}d}t j}tjjddddddg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st|jd j|ks
td S )Nr   r%   rT   r   rU   rK   rV   rW   r   r~   )r&   r7   rd   r!   r#   Ztest_batchnormalizationr$   r   )r   r+   r   r   r(   r*   r)   r   r,   r   r9   r:   r;   r<   r=   r   r   r   r   test_batchnormalization_9_8  s:        
 z0TestVersionConverter.test_batchnormalization_9_8c           	   
   C  s   d}d}t j}dddg}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st|jjd jjj|kst|jd j|kstd S )Nr%   r   r&   r7   rd      ra   r   r$   r   r   rc   test_constantr   )r   r+   nparanger   r(   rf   r)   r   r*   r   r,   r   r9   r:   r;   rz   r   r   r   r<   r=   	r   r   r   r   Zoutput_shapeZoutput_valuer.   r   r   r   r   r   test_constant_8_9   s4    

	 
 z&TestVersionConverter.test_constant_8_9c           	   
   C  s   d}d}t j}dddg}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st|jjd jjj|kst|jd j|kstd S )Nr   r%   r&   r7   rd   r   ra   r   r$   r   r   r   )r   UINT64r   r   r   r(   rf   r)   r   r*   r   r,   r   r9   r:   r;   rz   r   r   r   r<   r=   r   r   r   r   test_constant_9_8A  s4    

	 
 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|d	d
dggtjd|d	dgg}| |td||}|j	j
d jdkst|j	jd jjj|kst|jd j|kstd S )Nr%   r   Flattenr   r   r#   r   r   rD   test_flattenr&   r7   rd      r$   r   r   r   r   r   r   r.   r   r   r   r   r   test_flatten_8_9b  s$     
 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|d	d
dggtjd|d	dgg}| |td||}|j	j
d jdkst|j	jd jjj|kst|jd j|kstd S )Nr   r%   r   r   r   r#   r   r   r&   r7   rd   r   r$   r   r   r   r   r   r(   r)   r*   r   r,   r   r9   r:   r;   rz   r   r   r   r<   r=   r   r   r   r   test_flatten_9_8y  s$     
 z%TestVersionConverter.test_flatten_9_8c              
   C  s   d}d}t j}tjjdddgdgdg}dd	d
g}t|dtjd||tjd||gtjd||g}| |td||}|j	j
d jdkst|j	jd jjj|kst|jd j|kstd S )Nr%   r   PRelur   Sloper   r~   r&   r7   rd   
test_prelur$   r   r   r   r   r   r   r.   r   r   r   r   r   r   test_prelu_8_9  s*    

 
 z#TestVersionConverter.test_prelu_8_9c              
   C  s   d}d}t j}tjjdddgdgdg}dd	d
g}t|dtjd||tjd||gtjd||g}| |td||}|j	j
d jdkst|j	jd jjj|kst|jd j|kstd S )Nr   r%   r   r   r   r   r~   r&   r7   rd   r   r$   r   r   r   r   r   r   test_prelu_9_8  s*    

 
 z#TestVersionConverter.test_prelu_9_8c              
   C  s   d}d}t j}tjjdddgdgdg}dd	d
g}t|dtjd||tjd||gtjdt j|g}| |t	d||}|j
jd jdkst|j
jd jjjt jkst|jd j|kstd S )Nr%   r   Greaterr5   r6   r   r~   r&   r7   rd   test_greaterr$   r   r   r+   r   r   r(   r)   r*   BOOLr   r,   r   r9   r:   r;   rz   r   r   r   r<   r=   r   r   r   r   test_greater_8_9  s0    

 
 z%TestVersionConverter.test_greater_8_9c              
   C  s   d}d}t j}tjjdddgdgdg}dd	d
g}t|dtjd||tjd||gtjdt j|g}| |t	d||}|j
jd jdkst|j
jd jjjt jkst|jd j|kstd S )Nr   r%   r   r5   r6   r   r~   r&   r7   rd   r   r$   r   r   r   r   r   r(   r)   r*   r   r   r,   r   r9   r:   r;   rz   r   r   r   r<   r=   r   r   r   r   test_greater_9_8  s0    

 
 z%TestVersionConverter.test_greater_9_8c              
   C  s   d}d}t j}tjjdddgdgdg}dd	d
g}t|dtjd||tjd||gtjdt j|g}| |t	d||}|j
jd jdkst|j
jd jjjt jkst|jd j|kstd S )Nr%   r   Lessr5   r6   r   r~   r&   r7   rd   	test_lessr$   r   r   r   r   r   r   test_less_8_9  s0    

 
 z"TestVersionConverter.test_less_8_9c              
   C  s   d}d}t j}tjjdddgdgdg}dd	d
g}t|dtjd||tjd||gtjdt j|g}| |t	d||}|j
jd jdkst|j
jd jjjt jkst|jd j|kstd S )Nr   r%   r   r5   r6   r   r~   r&   r7   rd   r   r$   r   r   r   r   r   r   test_less_9_8   s0    

 
 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st|j	jd jjj|kst|jd j|kstd S )Nr%   r   MatMulr5   r6   r   r~   test_matmulr7   rd   r$   r   r   r   r   r   r   test_matmul_8_9>  s(    
 
 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st|j	jd jjj|kst|jd j|kstd S )Nr   r%   r   r5   r6   r   r~   r   r7   rd   r$   r&   r   r   r   r   r   r   test_matmul_9_8X  s(    
 
 z$TestVersionConverter.test_matmul_9_8c                 C  s   d}d}t j}tjjddddg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st|j	jd jjj|kst|jd j|kstd S )Nr%   r   rJ   r5   r6   r[   r   r~   	test_gemmr7   rd   r$   r   r   r   r   r   r   test_gemm_8_9r  s,     
 z"TestVersionConverter.test_gemm_8_9c                 C  s   d}d}t j}tjjddddg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st|j	jd jjj|kst|jd j|kstd S )Nr   r%   rJ   r5   r6   r[   r   r~   r   r7   rd   r$   r   r   r   r   r   r   test_gemm_9_8  s,     
 z"TestVersionConverter.test_gemm_9_8c                 C  s  d}d}t j}tjjddgdgddddd	gd
g}t|dtjd|ddddggtjd|ddddgg}| |td||}t	|j
jdkst|j
jd jdkst|j
jd jdkstt	|j
jd jdkst|j
jd jd jdkst|jd j|kstd S )Nr%   r   r   r   r   r         ?r   r   )r   r   r   r   test_upsample_8_9r#   r&   rd   r@   r$   r   ra   r   )r   r+   r   r   r(   r)   r*   r   r,   r   r   r9   r;   r:   r   r   r<   r=   r   r   r   r   r     s8    

 
 z&TestVersionConverter.test_upsample_8_9Fbool)	raw_scaler   c           
      C  sJ  d}d}t j}tjjdddgdgddg}d	d	d
dg}tjdtj jdg|r^ttjd| n||}t	|dtj
d|ddddgtj
d|dggtj
d|ddddgg|g}| |td||}	|	jjd jdkstt|	jjdkstt|	jjd jdkst|	jjd jd jdks0t|	jd j|ksFtd S )Nr   r%   r   r   ZScalesr   r   r   r   r   r   r   r   rd   4ftest_upsampler#   r&   r@   r$   r   r   )r   )r   r+   r   r   r(   rf   bytesstructpackr)   r*   r   r,   r   r9   r:   r;   r   Zinitializerr   r   r<   r=   )
r   r   r   r   r   r.   scale_valuescale_tensorr   r   r   r   r    helper_upsample_with_initializer  sJ        
 z5TestVersionConverter.helper_upsample_with_initializerc           
      C  s`  d}d}t j}ddddg}tjdtj jdg|rBttjd| 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|ddddggtj
d|ddddggtj
d
|dggd}| |td||}	t|	jjdkst|	jjd jdkstt|	jjd jdks(t|	jjd jd jdksFt|	jd j|ks\td S )Nr   r%   r   r   r   Zconst_valuerd   r   ra   ZConstant_Outputr   r   r   r   r   r   r   r#   r&   r@   )Z
value_infor$   r   r   )r   )r   r+   r   r   rf   r   r   r   r(   r)   r*   r   r,   r   r   r9   r;   r:   r   r   r<   r=   )
r   r   r   r   r   r   r   r.   r   r   r   r   r   helper_upsample_with_constant  sT       
 
 z2TestVersionConverter.helper_upsample_with_constantc                 C  s   | j dd d S NFr   r   r/   r   r   r   $test_upsample_with_constant_node_9_8&  s    z9TestVersionConverter.test_upsample_with_constant_node_9_8c                 C  s   | j dd d S r   )r   r/   r   r   r   "test_upsample_with_initializer_9_8*  s    z7TestVersionConverter.test_upsample_with_initializer_9_8c                 C  s   | j dd d S NTr   r   r/   r   r   r   &test_upsample_with_raw_initializer_9_8.  s    z;TestVersionConverter.test_upsample_with_raw_initializer_9_8c                 C  s   | j dd d S r   r   r/   r   r   r   (test_upsample_with_raw_constant_node_9_82  s    z=TestVersionConverter.test_upsample_with_raw_constant_node_9_8c                 C  sn  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|dddg}
tjd|ddg}tjd|dddg}tj|d|	|
g||g}| |td||}|j	j
d jdksTt|jd j|ksjtd S )Nr%   r   r   Zsum_innextZsum_outr~   ZIdentityZscan_outZ	scan_bodyr&   r$   ZScaninitialr   r   zr#   )r   r   bodyZnum_scan_inputsr7   test_scan_8_9r   )r   r+   r   r   r(   r)   r*   r   r,   r   r9   r:   r;   r<   r=   )r   r   r   r   node1node2gZno_sequence_lensr.   r   r   r   r   r   r   r   r   r   r   6  sX    
 
 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st|j
jd jjj|kst|jd j|kstd S )Nr%   r   ZCastr   r   )r   r   toZ	test_castr&   r7   r$   r   )r   r+   ZUINT32r   r   r(   r)   r*   r   r,   r   r9   r:   r;   rz   r   r   r   r<   r=   )r   r   r   Zdata_type_fromZdata_type_tor.   r   r   r   r   r   test_cast_8_9l  s4        
 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st|jd jdkstd S )Nra   splitr$   r&   r7   rb   Splitr   Y1Y2r   r    r&   r      r   r   re   r>   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st|jd jdkstt|jj	d jdkstd S )Nr   r   r   r   r#   r_   Ztest_split_optional_input)r@   r   r$   r      r   r&   )r   r(   r)   r*   r   r+   r   r,   r   r9   r:   r;   r<   r=   r   rz   r>   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st|jj	d j
dkst|jd jdkstd S )Nr   r   r   r   r&   r7   )r   r   r    r   r   r$   r   r   r   ra   r#   r8   r>   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st|jd jdkstd S )Nra   axesr$   r#   r   rb   	ReduceSumr   r   r   rM   r#   r!   r   r   re   r>   r   r   r   test_axes_input_to_attr_13_12  s"    	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srt|jd jdkstd S )Nr   r   r   r   )r   r   rM   r   r$   r   r   ra   r8   r>   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st|jj	d j
dkst|jj	d j
dkst|jj	d j
dkst|jd jdkstt|jj	d jdkstt|jj	d jdkstd S )NZSlicer   r   r   r#   r7   
   )r   ZstartsZendsr   )   r   r!   )r7   r   r!   r$   r   ra   r&   rd   )r   r(   r)   r*   r   r+   r   r,   r   r9   r:   r;   r<   r=   r   inputr   r>   r   r   r   test_slice_9_10  s.         z$TestVersionConverter.test_slice_9_10c                 C  s6  d}d}t j}d}d}d}d}d}tjjddd	d
g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st|jd j|kstt|j	j
d jdkst|j	j
d jd jdks2td S )Nr      r#   r&   r7   r!   RNNr   r   Rr$   Y_hr   r   hidden_sizetest_rnnrK   r   layoutr   r+   r   r   r(   r)   r*   r   r,   r   r9   r:   r;   r<   r=   r   r   r   r   r   r   r   Z
seq_lengthZ
batch_sizeZ
input_sizeZnum_directionsr	  r.   r   r   r   r   r   test_rnn_13_14  sn    	        
   
 z#TestVersionConverter.test_rnn_13_14c                 C  s@  d}d}t j}d}d}d}d}d}tjjddd	d
g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st|jd j|kstt|j	j
d jdkst|j	j
d jd jdks<td S )Nr   r  r#   r&   r7   r!   GRUr   r   r  r$   r  r  test_grurK   r@   r   r  r  r  r   r   r   test_gru_13_149  sn    	        
   
 z#TestVersionConverter.test_gru_13_14c                 C  s@  d}d}t j}d}d}d}d}d}tjjddd	d
g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st|jd j|kstt|j	j
d jdkst|j	j
d jd jdks<td S )Nr   r  r#   r&   r7   r!   LSTMr   r   r  r$   r  r  	test_lstmrd   rK   r%   r   r  r  r  r   r   r   test_lstm_13_14o  sn    	        
   
 z$TestVersionConverter.test_lstm_13_14c                 C  s  d}d}t j}d}d}d}d}d}tjjddd	d
g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st|jd j|kstt|j	j
d jdkstd S )Nr  r   r#   r&   r7   r!   r  r   r   r  r$   r  r   r   r   r	  r  r
  rK   r   r+   r   r   r(   r)   r*   r   r,   r   r9   r:   r;   r<   r=   r   r   r  r   r   r   test_rnn_14_13  sn    
        
   
 z#TestVersionConverter.test_rnn_14_13c                 C  s$  d}d}t j}d}d}d}d}d}tjjddd	d
g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st|jd j|kstt|j	j
d jdks td S )Nr  r   r#   r&   r7   r!   r  r   r   r  r$   r  r   r  r  rK   r@   r  r  r   r   r   test_gru_14_13  sn    
        
   
 z#TestVersionConverter.test_gru_14_13c                 C  s$  d}d}t j}d}d}d}d}d}tjjddd	d
g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st|jd j|kstt|j	j
d jdks td S )Nr  r   r#   r&   r7   r!   r  r   r   r  r$   r  r   r  r  rd   rK   r%   r  r  r   r   r   test_lstm_14_13  sn    
        
   
 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stt|jd jdkstd S )Nr   r#   r&   r   r&   r#   Padr   r   )padsr   r#   r&   r&   r#   r!   r!   r$   r      r#   r   r8   r   r  r.   r   r   r   r   r   test_pad_10_11G  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svt|jd jdkstd S )Nr  r  r   r   r   )r  rc   r   r  r  r$   r   r  r#   r   r8   r   r   r   r   test_pad_with_value_10_11V  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sLt|jd j|ksbt|jjd jd jjd jdkstt|jjd jd jjd jdkst|jjd jd jjd jdkstt|jjd jd jjd jdkstd S )Nr   r  r&   ZClipZsub_inZsub_outr   r   )r   r   minmaxZthen_gZIfZcondout)r   r   Zthen_branchZelse_branchg      @g      @Ztest_subgraphsr$   r   r#   )r   r+   r   r   r(   r*   r)   r   rf   r   r,   r   r9   r:   r;   r<   r=   r   r   r   )r   r   r   r   r   Z
subg1_nodeZsubg1_inputZsubg1_outputZsubg1Z
subg2_nodeZsubg2_inputZsubg2_outputZsubg2r9   r  rz   initr   Z	convertedr   r   r   test_if_subgraph_10_11f  sj            	 
 &*&z+TestVersionConverter.test_if_subgraph_10_11c              
   C  s  t ddddddg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st|jd jdkstd S )NrT   r   rU   rK   rV   rW   r   g?g
ףp=
?r&   g333333?gHzG?gzG?g?g)\(?g{Gz?r   )r#   r&   r&   r7   r$   r  r   r   )r   r(   r   rf   r   r+   r)   r*   r   r,   r   r9   r:   r;   r<   r=   )r   r.   r   r   Zb_valueZb_tensorZ
mean_valueZmean_tensorZ	var_valueZ
var_tensorr   r   r   r   r   'test_initializer_not_in_input_above_ir4  sN               
z<TestVersionConverter.test_initializer_not_in_input_above_ir4c              
   C  sD  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stt|jj	d j
dkst|jj	d jd jdkst|jj	d jd j|kst|jj	d j
dkst|jj	d jd jdkst|jj	d jd jdkst|jj	d j
dks*t|jd jd
ks@td S )Nr   ZSoftmaxr   r   r_   r   )r#   r&   r7   r$   r  r   ZShaper#   r   rD   r&   r7   r   )r   r(   r)   r*   r   r+   r   r,   r   r9   r:   r;   r   r   ir<   r=   )r   rD   r.   r   r   r   r   r   test_softmax_12_13  s$    z'TestVersionConverter.test_softmax_12_13
per_tensor   r7   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rd   r7   rd   
blocked_3drd   r7       rd   r7   r%   Zper_axis_output_dtypeZper_axis_unsupported_typestrztuple[int, ...]z
int | None)	_x_shapescale_shaperD   
block_sizeoutput_dtypezero_point_dtype
compatibler   c	              	     sN   dd fdd}	|rt  n t}
|
 |	|||||| W 5 Q R X 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}|rf|t d|| |d jd |pl|}t |d|t d|| g}	 |	t 	d	d
d}
d S )NZQuantizeLinearr   Sr   )rD   r>  r?  ZPr   r   r$      r  )
r   r(   r*   r   r+   appendr  r)   r   r,   )r   r=  rD   r>  r?  r@  r.   r   Zoutput_type_r   r;  r/   r   r   r   '  s2    z6TestVersionConverter.test_quantize_21_20.<locals>.test
contextlibnullcontextr1   r2   )r   r;  r<  r=  rD   r>  r?  r@  rA  r   context_managerr   r/   r   test_quantize_21_20  s
    N z(TestVersionConverter.test_quantize_21_20)r,  r-  r"   NNT)r/  r-  r0  r#   NT)r1  r-  r0  r#   r   T)r2  r-  r"   r#   r&   F)r3  r-  r0  r#   r&   F)r4  r-  r5  r   rd   F)r6  r7  r9  r&   rd   F)r;  y_shaper=  rD   r>  rA  r   c           	   	     sJ   dd fdd}|rt  n t}| ||||| W 5 Q R X d S )Nr   r   c                   s   t jddddg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 )NZDequantizeLinearr   rB  rC  r   )rD   r>  r   r$   rD  r  )	r   r(   r)   r*   r   INT8r+   r   r,   )r   r=  rD   r>  r.   r   r;  r/   r   r   r   `  s$    	
z8TestVersionConverter.test_dequantize_21_20.<locals>.testrF  )	r   r;  rK  r=  rD   r>  rA  r   rI  r   r/   r   test_dequantize_21_20L  s
    z*TestVersionConverter.test_dequantize_21_20)F)F)U__name__
__module____qualname__r   r4   r?   rA   rB   rC   rF   rH   rI   rN   rO   rR   rS   rX   rY   r^   r`   rg   rh   rp   rq   rr   rv   rw   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   r  r  r  r  r  r  r  r!  r"  r'  r(  r+  parameterizedexpandr   rL  ZFLOAT8E4M3FNZUINT16rJ  rM  r   r   r   r   r	      s$  00  &!!!!"*.6666666;#
C 0r	   __main__)
__future__r   rG  r   ZunittestZnumpyr   rQ  Zonnx.version_converterr   r   r   r   r   r   r   ZTestCaser	   rN  mainr   r   r   r   <module>   s4    
                u