U
    rh!                     @  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dS )LpPoolNone)returnc               	   C  s   d} dg}dg}t jjddgdg||| d}tjdddtj}t|}d	}t	||dd	 ||\}}|}	t
|	||||d
| d}
t||g|
gdd d	S )zAinput_shape: [1, 3, 32]
        output_shape: [1, 3, 31]
                 r	   xyinputsoutputskernel_shapestridesp    NLPPOOLr   Ztest_lppool_1d_defaultr   r   nameonnxhelper	make_nodenprandomrandnastypefloat32shaper   r   r   )r   r   r   noder   x_shapepads	out_shape_paddedr    r,   F/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/lppool.pyexport_lppool_1d_default   s.    
 
  zLpPool.export_lppool_1d_defaultc               	   C  s   d} 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| 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   r   r   r   Nr   r   r   r   r   r   Ztest_lppool_2d_defaultr   r   r   r&   r   r'   r(   r   r   r)   r*   r+   r   r,   r,   r-   export_lppool_2d_default/   s,    
 
  zLpPool.export_lppool_2d_defaultc               	   C  s   d} 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
| 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   r0   r   r   Nr   r   Ztest_lppool_3d_defaultr   r   r3   r,   r,   r-   export_lppool_3d_defaultI   s,    


 
  zLpPool.export_lppool_3d_defaultc               
   C  s  d} 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dd}||
|	|g}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   Z
SAME_UPPERr   r   r   Zauto_padr   r   r   r   r1   r2   Nr   r   r   constantmodeZconstant_valuesr   r   Ztest_lppool_2d_same_upperr   r   r   r   r    r!   r"   r#   r$   r%   r   r   padr   r   )r   r&   r   r'   r   r   r)   	pad_shapepad_top
pad_bottompad_left	pad_rightr+   r(   r   r,   r,   r-   export_lppool_2d_same_upperc   sN    
 
   
   z"LpPool.export_lppool_2d_same_upperc               
   C  s  d} 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dd}|	|||
g}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   r   Z
SAME_LOWERr6   r   r   r   r1   r2   Nr   r7   r8   r9   r   r   Ztest_lppool_2d_same_lowerr   r;   )r   r&   r   r'   r   r   r)   r=   r?   r>   rA   r@   r+   r(   r   r,   r,   r-   export_lppool_2d_same_lower   sN    
 
   
   z"LpPool.export_lppool_2d_same_lowerc               
   C  s   d} 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 } } }}	||	||g}
t	|
|dd ||\}}
tj
|dd||f|	|ffdd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(   r   r      r   r   r2   Nr7   r8   r   r9   r   r   Ztest_lppool_2d_padsr   )r   r   r   r    r!   r"   r#   r$   r%   r   r<   r   r   )r   r&   r   r'   r   r   r?   r>   rA   r@   r(   r)   r+   r   r,   r,   r-   export_lppool_2d_pads   s:    

 
  zLpPool.export_lppool_2d_padsc               	   C  s   d} 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| 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   r   r   r   N)rG   rG   rE   r   r   Ztest_lppool_2d_stridesr   r   r3   r,   r,   r-   export_lppool_2d_strides   s.    
 
  zLpPool.export_lppool_2d_stridesc               	   C  s   d} t jjddgdgddgddgddg| 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 )zEinput_shape: [1, 1, 4, 4]
        output_shape: [1, 1, 2, 2]
        r   r	   r   r   r   )r   r   r   r   Z	dilationsr   r   r/   rG            	   
                     gv -@g6?0@gwIs 5@gC.c]~7@Ztest_lppool_2d_dilationsr   N)r   r   r   r    arrayr#   r$   r   )r   r&   r   r   r,   r,   r-   export_lppool_2d_dilations   s>    	



	z!LpPool.export_lppool_2d_dilationsN)__name__
__module____qualname__staticmethodr.   r4   r5   rB   rC   rF   rH   rU   r,   r,   r,   r-   r	      s    ''!r	   )
__future__r   Znumpyr    r   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   