o
    wiR                     @  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Zed&ddZed&ddZed&d	d
Zed&ddZed&ddZ	ed&ddZ
ed&ddZed&ddZed&ddZed&ddZed&ddZed&ddZed&ddZed&dd Zed&d!d"Zed&d#d$Zd%S )'AveragePoolreturnNonec                  C  s   t jjddgdgddgg dd} tg dg dg d	g d
g dgggtj}tg dg dg dg dg d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      r   r   r   inputsoutputskernel_shapepads   r         r            	   
                                                )r         @r   g      !@r   )g      #@r    g      %@r"         '@)r#   g      )@r$         +@r%   )      -@r&   g      /@r(   g     0@)r)   g     1@r*   g     2@r+   $test_averagepool_2d_precomputed_padsr   r   nameNonnxhelper	make_nodenparrayastypefloat32r   noder   r    rD   d/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/backend/test/case/node/averagepool.py&export_averagepool_2d_precomputed_pads   sD   
z2AveragePool.export_averagepool_2d_precomputed_padsc                  C  s   t jjddgdgddgg ddd} tg dg d	g d
g dg dgggtj}tg dg dg dg dg dgggtj}t| |g|gdd dS )r   r	   r   r   r   r   r   r   r   r   r   count_include_padr   r   r!   r'   r-   )g)\(@g@g333333@gRQ@gQ	@)g=
ףp=@g@ @g)\(@gGz@)g@g      $@g      *@皙%@rI   )gףp=
@g333333#@g(@g{Gz$@gGz@)g{Gz@rI   rJ   g(\!@g\(\@6test_averagepool_2d_precomputed_pads_count_include_padr8   Nr:   rB   rD   rD   rE   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g dg dg dg d	g d
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(   'test_averagepool_2d_precomputed_stridesr8   Nr:   rB   rD   rD   rE   )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g dg d	g d
g dg dgggtj}tg dg dg d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   rN   auto_padr   r   r!   r'   r-   )r   g      @r   )r4   r$   r6   )r+   g     4@r/   *test_averagepool_2d_precomputed_same_upperr8   Nr:   rB   rD   rD   rE   ,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AVGtest_averagepool_1d_defaultr8   r;   r<   r=   r>   randomrandnr@   rA   shaper   r   r   
rC   r   x_shaper   r   rN   	out_shape_paddedr   rD   rD   rE   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   rU   r   r   rV   Nr   r   r   r   rW   test_averagepool_2d_defaultr8   rY   r]   rD   rD   rE   export_averagepool_2d_default   s"   
z)AveragePool.export_averagepool_2d_defaultc            
      C  s   t jjddgdgg dd} tjdddddtj}t|}d	}g d}g d
}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   r   r   rU   r   r   rV   Nr   r   r   r   rW   test_averagepool_3d_defaultr8   rY   r]   rD   rD   rE   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||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   rQ   r   r   r   rR   r   r   rV   rc   rd   Nr   r   r   constantmodeconstant_valuesrW   pads_requiredr   test_averagepool_2d_same_upperr8   r;   r<   r=   r>   rZ   r[   r@   rA   r\   r   r   padnanr   r   )rC   r   r^   r   rN   r_   	pad_shapepad_top
pad_bottompad_left	pad_rightra   r   r   rD   rD   rE    export_averagepool_2d_same_upper   N   
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||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   
SAME_LOWERrk   r   r   rV   rc   rd   Nr   rl   rm   rn   rW   rq   test_averagepool_2d_same_lowerr8   rt   )rC   r   r^   r   rN   r_   rw   ry   rx   r{   rz   ra   r   r   rD   rD   rE    export_averagepool_2d_same_lower/  r}   z,AveragePool.export_averagepool_2d_same_lowerc               
   C  s   t jjddgdgddgg d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||	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   rd   r   NF	ceil_moderl   r   rm   rn   rW   rq   test_averagepool_2d_padsr8   )r;   r<   r=   r>   rZ   r[   r@   rA   r\   r   ru   rv   r   r   )rC   r   r^   r   rN   ry   rx   r{   rz   r   r_   
extra_padsra   r   rD   rD   rE   export_averagepool_2d_pads^  sP   

z&AveragePool.export_averagepool_2d_padsc                  C  s   t jjddgdgddgg d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 )r   r	   r   r   r   r   r   rG   r   rd   r   r   NFr   rl   r   rm   rn   rW   )rr   r   rH   *test_averagepool_2d_pads_count_include_padr8   )r;   r<   r=   r>   rZ   r[   r@   rA   r\   r   ru   r   r   )rC   r   r^   	dilationsr   rN   ry   rx   r{   rz   r   r_   r   ra   r   rD   rD   rE   ,export_averagepool_2d_pads_count_include_pad  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|d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   rM   r   rV   )r   r   r   Nr   Fr   rW   rq   test_averagepool_2d_stridesr8   rY   )	rC   r   r^   r   rN   r_   r   ra   r   rD   rD   rE   export_averagepool_2d_strides  s4   

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g dg d	g d
g d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   rN   r   r   r   r   r   r   r   r   r   r   r    r"   r#   r$   r%   r&   r(   r   r3   r#   r5   test_averagepool_2d_ceilr8   Nr:   rB   rD   rD   rE   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g dddd} td	d
gddggddgddggddgddggggtj}tdggdggdggggtj}t| |g|gdd dS )zEinput_shape: [1, 3, 2, 2]
        output_shape: [1, 3, 1, 1]
        r	   r   r   r   )r   r   r   r   Tr   )r   r   r   rN   r   r   rH   g~jt?g1w-!?g&S:?gꕲq?gK46?g$?g	h"lx?goŏ1?g鷯?gc=yX?gv?g"~j?gz6>W?gX2ı.?gec]?2test_averagepool_2d_ceil_last_window_starts_on_padr8   Nr:   rB   rD   rD   rE   4export_averagepool_2d_ceil_last_window_starts_on_pad  s4   
&	
z@AveragePool.export_averagepool_2d_ceil_last_window_starts_on_padc               	   C  s   t jjddgdgddgddgddgdd} tg dg d	g d
g dgggtj}tddgddggggtj}t| |g|gdd dS )r   r	   r   r   r   r   Tr   r   r   rN   r   r   r   r   r   r   r   r   r    r"   test_averagepool_2d_dilationsr8   Nr:   rB   rD   rD   rE   export_averagepool_2d_dilations'  s,   "z+AveragePool.export_averagepool_2d_dilationsc               
   C  s   t jjddgdgg dg dg ddd} tg dg d	g d
g dgg dg d	g d
g dgg dg d	g d
g dgg dg d	g d
g d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 )r   r	   r   r   rg   rh   Tr   r   r   r   r   r   r   r    r"   #test_averagepool_3d_dilations_smallr8   Nr:   rB   rD   rD   rE   export_averagepool_3d_dilationsH  sP   2!
z+AveragePool.export_averagepool_3d_dilationsc                  C  s  d} d}d}d}d}dD ]~}dD ]y}t jjdd	gd
g|||||d}tjjddg| R  tj}td | ||||d\}}	tj	|dd|	d |	d f|	d |	d f|	d |	d ffd|dkr_dntj
d}
t|
ddg| R |||d|	d ||d
}d| d| }t||g|g|d qqd S )N)rV   rV   rV   rg   )r   r   r   )r   r   r   r   )r   r   )TFr	   r   r   )r   r   r   rN   r   rH   r   r   )r   r   rl   r   r   r   r   rm   rn   rW   )rr   r   r   rH   9test_averagepool_3d_dilations_large_count_include_pad_is__ceil_mode_is_r8   )r;   r<   r=   r>   rZ   r[   r@   rA   r   ru   rv   r   r   )r^   r   r   rN   rH   r   rC   r   r_   r   ra   r   	test_namerD   rD   rE   %export_averagepool_3d_dilations_large  sj   
z1AveragePool.export_averagepool_3d_dilations_largeN)r
   r   )__name__
__module____qualname__staticmethodrF   rL   rP   rT   rb   rf   rj   r|   r   r   r   r   r   r   r   r   r   rD   rD   rD   rE   r	      sF    +/!%..08   6r	   )
__future__r   numpyr>   r;   onnx.backend.test.case.baser   onnx.backend.test.case.noder   !onnx.reference.ops.op_pool_commonr   r   r   r   r	   rD   rD   rD   rE   <module>   s   