U
    rh                     @  sR   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dZ	G dd	 d	eZ
dS )    )annotationsN)Base)expect        c                   s   | j  |d krtt }n fdd|D }t|}|d |jkrLtdg }t D ]}|ddgg7 }qXt|D ]4}|| }	|	dk r |	 }	|| |||  g||	< qt|dkrtj| |||d}
|
S tj| ||d}
|
S )	Nc                   s    g | ]}|d kr|n|  qS )r    ).0axisZ
input_rankr   C/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/pad.py
<listcomp>   s     zpad_impl.<locals>.<listcomp>   z9The number of elements in raw_pads should be 2 * num_axesr   constant)	pad_widthmodeconstant_values)r   r   )ndimlistrangelensize
ValueErrornppad)dataZraw_padsr   r   axesZnum_axesr   _ir   yr   r	   r
   pad_impl   s:    r   c                   @  sT   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dS )PadNone)returnc               
   C  s   t jjddddgdgdd} tjdd	d
dtj}tdddd	dddd
gtj	}td}t
||dd}t| |||g|gdd d S )Nr   xpadsvaluer   r   inputsoutputsr               r   r   333333?Ztest_constant_padr&   r'   nameonnxhelper	make_noder   randomrandnastypeZfloat32arrayint64r   r   )noder"   r#   r$   r   r   r   r
   export_constant_pad6   s       
zPad.export_constant_padc                  C  s   dD ]} t jjdddgdg| d}tjddd	d
tj}tddddddddgtj	}t
||| }t|||g|gd|  dd qd S )N)ZedgeZreflectwrapr   r"   r#   r   r%   r(   r)   r*   r+   r   Ztest_Z_padr-   )r0   r1   r2   r   r3   r4   r5   Zint32r6   r7   r   r   )r   r8   r"   r#   r   r   r   r
   #export_reflection_edge_and_wrap_padD   s       z'Pad.export_reflection_edge_and_wrap_padc                  C  s   t jjdddddgdgdd} tjd	d
ddtj}tdd
ddgtj	}td}tjd	d
gtj	d}t
||ddd	d
g}t| ||||g|gdd d S )Nr   r"   r#   r$   r   r   r   r%   r(   r)   r*   r+   r   r,   ZdtypeZtest_constant_pad_axesr-   r/   r8   r"   r#   r$   r   r   r   r   r
   export_constant_pad_axesR   s2     
  

zPad.export_constant_pad_axesc                  C  s   t jjdddddgdgdd} tjd	d
ddtj}tdd
ddgtj	}td}tjddgtj	d}t
||ddddg}t| ||||g|gdd d S )Nr   r"   r#   r$   r   r   r   r%   r(   r)   r*   r+   r   r,   r<   Ztest_constant_pad_negative_axesr-   r/   r=   r   r   r
   !export_constant_pad_negative_axesl   s2     
  

z%Pad.export_constant_pad_negative_axesN)__name__
__module____qualname__staticmethodr9   r;   r>   rA   r   r   r   r
   r   5   s   r   )r   N)
__future__r   Znumpyr   r0   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   r   r   r   r   r   r
   <module>   s   
(