U
    rhdK                     @  s`   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZ G dd deZdS )    )annotationsN)Base)expect)get_output_shape_auto_pad!get_output_shape_explicit_paddingget_pad_shapepoolc                   @  s,  e Zd ZeddddZeddddZeddddZeddd	d
ZeddddZeddddZ	eddddZ
eddddZeddddZeddddZeddddZeddddZeddddZeddddZedddd Zeddd!d"Zd#S )$AveragePoolNone)returnc                  C  s   t jjddgdgddgddddgd} tdddd	dgd
ddddgdddddgdddddgdddddggggtj}tdddddgd dd!dd"gdd#dd$dgd%dd&dd'gdd(dd)dggggtj}t| |g|gd*d+ d,S )-winput_shape: [1, 1, 5, 5]
        output_shape: [1, 1, 5, 5]
        pad_shape: [4, 4] -> [2, 2, 2, 2] by axis
        r	   xy      inputsoutputskernel_shapepads                  	   
                                                      @g      !@g      #@g      %@      '@g      )@      +@      -@g      /@g     0@g     1@g     2@Z$test_averagepool_2d_precomputed_padsr   r   nameNonnxhelper	make_nodenparrayastypefloat32r   noder   r    r=   K/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/averagepool.py&export_averagepool_2d_precomputed_pads   sJ    
   z2AveragePool.export_averagepool_2d_precomputed_padsc                  C  s   t jjddgdgddgddddgdd} tdddd	dgd
ddddgdddddgdddddgdddddggggtj}tddd d!d"gd#d$d%d&d'gd(d)d*d+d%gd,d-d.d/d0gd1d%d+d2d3ggggtj}t| |g|gd4d5 d6S )7r   r	   r   r   r   r   r   r   r   r   r   count_include_padr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   g)\(@g@g333333@gRQ@gQ	@g=
ףp=@g@g @g)\(@gGz@g@g      $@g      *@g%@gףp=
@g333333#@g(@g{Gz$@gGz@g{Gz@g(\!@g\(\@Z6test_averagepool_2d_precomputed_pads_count_include_padr1   Nr3   r;   r=   r=   r>   8export_averagepool_2d_precomputed_pads_count_include_pad@   sL    
zDAveragePool.export_averagepool_2d_precomputed_pads_count_include_padc                  C  s   t jjddgdgddgddgd} tddddd	gd
ddddgdddddgdddddgdddddggggtj}tdd
gddggggtj}t| |g|gdd d S )!zEinput_shape: [1, 1, 5, 5]
        output_shape: [1, 1, 2, 2]
        r	   r   r   r   r   r   r   stridesr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Z'test_averagepool_2d_precomputed_stridesr1   Nr3   r;   r=   r=   r>   )export_averagepool_2d_precomputed_stridesp   s4    "z5AveragePool.export_averagepool_2d_precomputed_stridesc                  C  s   t jjddgdgddgddgdd} tdddd	d
gdddddgdddddgdddddgdddddggggtj}td	ddgd dd!gdd"dggggtj}t| |g|gd#d$ d%S )&zwinput_shape: [1, 1, 5, 5]
        output_shape: [1, 1, 3, 3]
        pad_shape: [2, 2] -> [1, 1, 1, 1] by axis
        r	   r   r   r   r   
SAME_UPPER)r   r   r   rD   auto_padr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   g      @r.   r0   g     4@Z*test_averagepool_2d_precomputed_same_upperr1   Nr3   r;   r=   r=   r>   ,export_averagepool_2d_precomputed_same_upper   s:    &z8AveragePool.export_averagepool_2d_precomputed_same_upperc            
      C  s   t jjddgdgdgd} tjdddtj}t|}d	}dg}dg}t	||dd	 ||\}}|}t
|||||d
}	t| |g|	gdd d	S )zAinput_shape: [1, 3, 32]
        output_shape: [1, 3, 31]
        r	   r   r   r   r   r   r   r   r       NAVGZtest_averagepool_1d_defaultr1   r4   r5   r6   r7   randomrandnr9   r:   shaper   r   r   
r<   r   x_shaper   r   rD   	out_shape_paddedr   r=   r=   r>   export_averagepool_1d_default   s(    
 
  z)AveragePool.export_averagepool_1d_defaultc            
      C  s   t jjddgdgddgd} tjddddtj}t|}d	}d
}d}t	||dd	 ||\}}|}t
|||||d}	t| |g|	gdd d	S )zIinput_shape: [1, 3, 32, 32]
        output_shape: [1, 3, 31, 31]
        r	   r   r   r   rI   r   r   rJ   Nr   r   r   r   rK   Ztest_averagepool_2d_defaultr1   rL   rP   r=   r=   r>   export_averagepool_2d_default   s(    
 
  z)AveragePool.export_averagepool_2d_defaultc            
      C  s   t jjddgdgdddgd} tjdddddtj}t|}d	}dddg}dddg}t	||dd	 ||\}}|}t
|||||d
}	t| |g|	gdd d	S )zQinput_shape: [1, 3, 32, 32, 32]
        output_shape: [1, 3, 31, 31, 31]
        r	   r   r   r   rI   r   r   rJ   NrK   Ztest_averagepool_3d_defaultr1   rL   rP   r=   r=   r>   export_averagepool_3d_default   s(    


 
  z)AveragePool.export_averagepool_3d_defaultc                  C  s  t jjddgdgddgdd} tjddd	d	tj}t|}d
}d}t	d|dd ||}t
d|dd |||}|d d }|d | }|d d }	|d |	 }
tj|dd||f|	|
ffdtjd}||	||
f}t|||||d|}t| |g|gdd dS )z{input_shape: [1, 3, 32, 32]
        output_shape: [1, 3, 32, 32]
        pad_shape: [1, 1] -> [0, 1, 0, 1] by axis
        r	   r   r   r   rF   r   r   r   rG   r   r   rJ   rV   rW   Nr   r   r   constantmodeZconstant_valuesrK   Ztest_averagepool_2d_same_upperr1   r4   r5   r6   r7   rM   rN   r9   r:   rO   r   r   padnanr   r   )r<   r   rQ   r   rD   rR   	pad_shapepad_top
pad_bottompad_left	pad_rightrT   r   r   r=   r=   r>    export_averagepool_2d_same_upper   sJ    
 
   
   z,AveragePool.export_averagepool_2d_same_upperc                  C  s  t jjddgdgddgdd} tjddd	d	tj}t|}d
}d}t	d|dd ||}t
d|dd |||}|d d }|d | }|d d }	|d |	 }
tj|dd||f|
|	ffdtjd}||
||	f}t|||||d|}t| |g|gdd dS )z{input_shape: [1, 3, 32, 32]
        output_shape: [1, 3, 32, 32]
        pad_shape: [1, 1] -> [1, 0, 1, 0] by axis
        r	   r   r   r   Z
SAME_LOWERrZ   r   r   rJ   rV   rW   Nr   r[   r\   r]   rK   Ztest_averagepool_2d_same_lowerr1   r_   )r<   r   rQ   r   rD   rR   rb   rd   rc   rf   re   rT   r   r   r=   r=   r>    export_averagepool_2d_same_lower&  sJ    
 
   
   z,AveragePool.export_averagepool_2d_same_lowerc               	   C  s   t jjddgdgddgddddgd} tjddddtj}t|}d	}d
}d}d}d}d}||||g}	t	|	|dd ||dd\}
}	tj
|dd|	d |	d f|	d |	d ffdtjd}t|||||
d|	}t| |g|gdd dS ){input_shape: [1, 3, 28, 28]
        output_shape: [1, 3, 30, 30]
        pad_shape: [4, 4] -> [2, 2, 2, 2] by axis
        r	   r   r   r   r   r   r      r   r   rW   NF	ceil_moder[   r   r\   r]   rK   Ztest_averagepool_2d_padsr1   )r4   r5   r6   r7   rM   rN   r9   r:   rO   r   r`   ra   r   r   )r<   r   rQ   r   rD   rd   rc   rf   re   r   rR   rT   r   r=   r=   r>   export_averagepool_2d_padsL  s>    

 
   
"z&AveragePool.export_averagepool_2d_padsc               
   C  s   t jjddgdgddgddddgdd} tjddddtj}t|}d	}d
}d	}d}d}d}d}	||	||g}
t	|
|dd |||dd\}}
tj
|dd|
d |
d f|
d |
d ffddd}t|||||d|
dd}t| |g|gdd dS )ri   r	   r   r   r   r   r   r@   rj   rW   rk   NFrl   r[   r   r\   r]   rK   )rA   Z*test_averagepool_2d_pads_count_include_padr1   )r4   r5   r6   r7   rM   rN   r9   r:   rO   r   r`   r   r   )r<   r   rQ   	dilationsr   rD   rd   rc   rf   re   r   rR   rT   r   r=   r=   r>   ,export_averagepool_2d_pads_count_include_pado  s`    

 
    
"z8AveragePool.export_averagepool_2d_pads_count_include_padc            	      C  s   t jjddgdgddgddgd} tjddddtj}t|}d	}d
}t	d|dd ||dd\}}|}t
|||||d|}t| |g|gdd dS )zIinput_shape: [1, 3, 32, 32]
        output_shape: [1, 3, 10, 10]
        r	   r   r   r   r   rC   r   rJ   )r   r   rk   Nr   Frl   rK   Ztest_averagepool_2d_stridesr1   rL   )	r<   r   rQ   r   rD   rR   r   rT   r   r=   r=   r>   export_averagepool_2d_strides  s*    
 
   
z)AveragePool.export_averagepool_2d_stridesc               	   C  s   t jjddgdgddgddgdd} tdddd	gd
dddgddddgddddggggtj}tddgddggggtj}t| |g|gdd dS )Einput_shape: [1, 1, 4, 4]
        output_shape: [1, 1, 2, 2]
        r	   r   r   r   r   T)r   r   r   rD   rm   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r-   r/   Ztest_averagepool_2d_ceilr1   Nr3   r;   r=   r=   r>   export_averagepool_2d_ceil  s*    



"z&AveragePool.export_averagepool_2d_ceilc               	   C  s   t jjddgdgddgddgddgdd} tdddd	gd
dddgddddgddddggggtj}tddgddggggtj}t| |g|gdd dS )rr   r	   r   r   r   r   Tr   r   r   rD   ro   rm   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Ztest_averagepool_2d_dilationsr1   Nr3   r;   r=   r=   r>   export_averagepool_2d_dilations  s,    



"z+AveragePool.export_averagepool_2d_dilationsc                  C  s8  t jjddgdgdddgdddgdddgdd} tdddd	gd
dddgddddgddddggdddd	gd
dddgddddgddddggdddd	gd
dddgddddgddddggdddd	gd
dddgddddgddddgggggtj}tddgddggddgddgggggtj}t| |g|gdd dS )rr   r	   r   r   r   r   Trt   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Z#test_averagepool_3d_dilations_smallr1   Nr3   r;   r=   r=   r>   export_averagepool_3d_dilations  sV    















!2   z+AveragePool.export_averagepool_3d_dilationsc                  C  s  d} d}d}d}d}dD ]}dD ]}t jjdd	gd
g|||||d}tjjd|  tj}td | ||||d\}}	tj	|dd|	d |	d f|	d |	d f|	d |	d ffd|dkrdntj
d}
t|
d| |||d|	||d	}d| d| }t||g|g|d q qd S )N)rJ   rJ   rJ   )r   r   r   )r   r   r   )r   r   r   r   )r   r   )TFr	   r   r   )r   r   r   rD   ro   rA   rm   r   )ro   rm   r[   r   r   r   r   r\   r]   rK   )r   ro   rA   Z9test_averagepool_3d_dilations_large_count_include_pad_is_Z_ceil_mode_is_r1   )r   r   )r   r   )r4   r5   r6   r7   rM   rN   r9   r:   r   r`   ra   r   r   )rQ   ro   r   rD   rA   rm   r<   r   rR   r   rT   r   Z	test_namer=   r=   r>   %export_averagepool_3d_dilations_large/  sd    
z1AveragePool.export_averagepool_3d_dilations_largeN)__name__
__module____qualname__staticmethodr?   rB   rE   rH   rU   rX   rY   rg   rh   rn   rp   rq   rs   ru   rv   rw   r=   r=   r=   r>   r	      s@   +/!%%%"2 6r	   )
__future__r   Znumpyr7   r4   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   Z!onnx.reference.ops.op_pool_commonr   r   r   r   r	   r=   r=   r=   r>   <module>   s   