o
    wi_V                     @  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ed*d%d&Zed*d'd(Zd)S )+MaxPoolreturnNonec                  C     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&   r'   r'   r'   r+   r,   r-   r-   r-   r1   r2   r3   r3   r3   test_maxpool_2d_uint8r   r   nameN)onnxhelper	make_nodenparrayastypeuint8r   noder   r    rC   `/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/backend/test/case/node/maxpool.pyexport_maxpool_2d_uint8   @   zMaxPool.export_maxpool_2d_uint8c                  C  r   )r   r	   r   r   r   r   r   r   r   r"   r(   r.   r4   r5   r6    test_maxpool_2d_precomputed_padsr8   Nr:   r;   r<   r=   r>   r?   float32r   rA   rC   rC   rD   "export_maxpool_2d_precomputed_pads>   rF   z*MaxPool.export_maxpool_2d_precomputed_padsc                  C  s   t jjddgd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 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   zr   r   r   r   r   r"   r(   r.   r4   r5   r6   )r$   r%   r&   r&   r&   )r*   r+   r,   r,   r,   )r0   r1   r2   r2   r2   ,test_maxpool_with_argmax_2d_precomputed_padsr8   N	r:   r;   r<   r=   r>   r?   rI   int64r   rB   r   r   rK   rC   rC   rD   .export_maxpool_with_argmax_2d_precomputed_padsh   sb   
z6MaxPool.export_maxpool_with_argmax_2d_precomputed_padsc                  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 )Einput_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_maxpool_2d_precomputed_stridesr8   NrH   rA   rC   rC   rD   %export_maxpool_2d_precomputed_strides   s&   "
z-MaxPool.export_maxpool_2d_precomputed_stridesc                  C  s   t jjddgd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ddg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 )rQ   r	   r   r   rK   r   r   )r   r   r   rS   storage_orderr   r   r"   r(   r.   r   r    r*   r,   r   r)   r   r+   /test_maxpool_with_argmax_2d_precomputed_stridesr8   NrM   rO   rC   rC   rD   1export_maxpool_with_argmax_2d_precomputed_strides   s8   ""
z9MaxPool.export_maxpool_with_argmax_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   rS   auto_padr   r   r"   r(   r.   )r   r    r!   )r*   r,   r-   )r0   r2   r3   &test_maxpool_2d_precomputed_same_upperr8   NrH   rA   rC   rC   rD   (export_maxpool_2d_precomputed_same_upper   s0   (
z0MaxPool.export_maxpool_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MAXtest_maxpool_1d_defaultr8   r:   r;   r<   r=   randomrandnr?   rI   shaper   r   r   
rB   r   x_shaper   r   rS   	out_shape_paddedr   rC   rC   rD   export_maxpool_1d_default  s"   
z!MaxPool.export_maxpool_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   r]   r   r   r^   Nr   r   r   r   r_   test_maxpool_2d_defaultr8   ra   re   rC   rC   rD   export_maxpool_2d_default  s"   
z!MaxPool.export_maxpool_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   r]   r   r   r^   Nr   r   r   r   r_   test_maxpool_3d_defaultr8   ra   re   rC   rC   rD   export_maxpool_3d_default4  s"   
z!MaxPool.export_maxpool_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}||	||
g}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   rY   r   r   r   rZ   r   r   r^   rk   rl   Nr   r   r   constantmodeconstant_valuesr_   test_maxpool_2d_same_upperr8   r:   r;   r<   r=   rb   rc   r?   rI   rd   r   r   padnanr   r   )rB   r   rf   r   rS   rg   	pad_shapepad_top
pad_bottompad_left	pad_rightri   r   r   rC   rC   rD   export_maxpool_2d_same_upperL  <   
z$MaxPool.export_maxpool_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}||
||	g}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   
SAME_LOWERrs   r   r   r^   rk   rl   Nr   rt   ru   rv   r_   test_maxpool_2d_same_lowerr8   rz   )rB   r   rf   r   rS   rg   r}   r   r~   r   r   ri   r   r   rC   rC   rD   export_maxpool_2d_same_lowerr  r   z$MaxPool.export_maxpool_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 } } }}||||g}	t	|	|dd ||\}
}tj
|dd||f||ffdtjd}t|||||
d||	d}t| |g|gdd dS )z{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   rl   r   Nrt   ru   rv   r_   )pads_requiredr   test_maxpool_2d_padsr8   )r:   r;   r<   r=   rb   rc   r?   rI   rd   r   r{   r|   r   r   )rB   r   rf   r   rS   r   r~   r   r   r   rg   
extra_padsri   r   rC   rC   rD   export_maxpool_2d_pads  sB   
zMaxPool.export_maxpool_2d_padsc            	      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
}d}t	||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   rR   r   r^   N)r   r   r   r   r_   test_maxpool_2d_stridesr8   ra   )	rB   r   rf   r   r   rS   rg   ri   r   rC   rC   rD   export_maxpool_2d_strides  s   
z!MaxPool.export_maxpool_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   rS   	ceil_moder   r   r   r   r   r   r   r   r    r!   r#   r$   r%   r&   r'   r)   r#   r$   r'   r)   test_maxpool_2d_ceilr8   NrH   rA   rC   rC   rD   export_maxpool_2d_ceil  s*   "zMaxPool.export_maxpool_2d_ceilc                  C  sx   t jjddgdgddgddgdd} tddgdd	ggggtj}tdggggtj}t| |g|gd
d dS )zEinput_shape: [1, 1, 2, 2]
        output_shape: [1, 1, 1, 1]
        r	   r   r   r   r   Tr   r   r   .test_maxpool_2d_ceil_output_size_reduce_by_oner8   NrH   rA   rC   rC   rD   0export_maxpool_2d_ceil_output_size_reduce_by_one  s    "
z8MaxPool.export_maxpool_2d_ceil_output_size_reduce_by_onec                  C  s   t jjddgdgddgddgddg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   r   r   r   rS   	dilationsr   r   r   r   r#   r$   r'   r)   test_maxpool_2d_dilationsr8   NrH   rA   rC   rC   rD   export_maxpool_2d_dilations  s*   "z#MaxPool.export_maxpool_2d_dilationsc               
   C  s   t jjddgdgg dg dg 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 )Kinput_shape: [1, 1, 4, 4, 4]
        output_shape: [1, 1, 2, 2, 2]
        r	   r   r   ro   rp   r   r   r   r   r   r#   r$   r'   r)   test_maxpool_3d_dilationsr8   NrH   rA   rC   rC   rD   export_maxpool_3d_dilations(  sN   * z#MaxPool.export_maxpool_3d_dilationsc                  C  s$  g d} g d}g d}d}t jjddgdgg dg 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}|jdd }td|||| |d\}}|}	t	|	ddg|R |||d|d| d	}
t
||g|
gdd dS )r   ro   rp   Fr	   r   r   r   r   r   r   r   r   Nr   r   r_   r   r   r   &test_maxpool_3d_dilations_use_ref_implr8   )r:   r;   r<   r=   r>   r?   rI   rd   r   r   r   )r   r   rS   r   rB   r   rf   rg   r   ri   r   rC   rC   rD   (export_maxpool_3d_dilations_use_ref_impl[  st   !

z0MaxPool.export_maxpool_3d_dilations_use_ref_implc                  C  s   d} d}d}d}d}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d}	t
|	d
d
g| R |||d|d |d	}
t||g|
gdd d S )N)r^   r^   r^   ro   )r   r   r   )r   r   r   Tr	   r   r   )r   r   r   rS   r   r   r   r   rt   r   r   r   r   r   ru   rv   r_   r   ,test_maxpool_3d_dilations_use_ref_impl_larger8   )r:   r;   r<   r=   rb   rc   r?   rI   r   r{   r   r   )rf   r   r   rS   r   rB   r   rg   r   ri   r   rC   rC   rD   .export_maxpool_3d_dilations_use_ref_impl_large  s\   


z6MaxPool.export_maxpool_3d_dilations_use_ref_impl_largeN)r
   r   )__name__
__module____qualname__staticmethodrE   rJ   rP   rU   rX   r\   rj   rn   rr   r   r   r   r   r   r   r   r   r   r   rC   rC   rC   rD   r	      sN    ));# %%)2F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	   rC   rC   rC   rD   <module>   s   