o
    wi/#                     @  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dS )LpPoolreturnNonec               	   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   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-   _/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/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   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g d| d}tjdddddtj}t|}d	}g d}g d
}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   r   r   r1   r   r   N)r   r   r   r   r   r   test_lppool_3d_defaultr   r   r5   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   
SAME_UPPERr   r   r   auto_padr   r   r   r   r2   r3   Nr   r   r   constantmodeconstant_valuesr   r   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   D   
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
        r0   r	   r   r   r   
SAME_LOWERr:   r   r   r   r2   r3   Nr   r<   r=   r>   r   r   test_lppool_2d_same_lowerr   rB   )r   r'   r   r(   r   r   r*   rD   rF   rE   rH   rG   r,   r)   r   r-   r-   r.   export_lppool_2d_same_lower   rJ   z"LpPool.export_lppool_2d_same_lowerc                  C  s   d} 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|d |d f|d |d 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   r      r   r   r3   r   Nr<   r   r=   r>   r   )pads_requiredr)   r   test_lppool_2d_padsr   )r   r   r    r!   r"   r#   r$   r%   r&   r   rC   r   r   )r   r'   r   r(   r   r   rF   rE   rH   rG   r)   r*   
extra_padsr,   r   r-   r-   r.   export_lppool_2d_pads   sP   
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)rT   rT   rO   r   r   test_lppool_2d_stridesr   r   r5   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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, 4, 4]
        output_shape: [1, 1, 2, 2]
        r   r	   r   r   r   )r   r   r   r   	dilationsr   )r   r   r   r0   )rT            )	   
         )            gv -@g6?0@gwIs 5@gC.c]~7@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)r
   r   )__name__
__module____qualname__staticmethodr/   r6   r8   rI   rM   rS   rV   re   r-   r-   r-   r.   r	      s"    ))0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	   r-   r-   r-   r.   <module>   s   