U
    rh=+                     @  sH   d dl mZ d dlZd dlZd dlmZ d dlmZ G dd deZ	dS )    )annotationsN)Base)expectc                   @  sj   e Zd 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	dS )Col2ImzCol2Im operator with N-dimension support

    The tests below can be reproduced in Python using https://github.com/f-dangel/unfoldNd/
    None)returnc                  C  s  t dddddgdddd	d
gdddddgdddddgdddddgggt j} t ddgt j}t ddgt j}tjddddgd g}t dddddgdddddgdddddgdd	dddgdd
dddggggt j}t|| ||g|gd!d" d S )#N      ?      @      &@      0@      5@       @      @      (@      1@      6@      @       @      *@      2@      7@      @      "@      ,@      3@      8@      @              .@      4@      9@      r   inputimage_shapeblock_shapeoutputZtest_col2iminputsoutputsname	nparrayZastypeZfloat32Zint64onnxhelperZ	make_noder   )r#   r$   r%   noder&    r1   F/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/col2im.pyexport   sH    
  zCol2Im.exportc                  C  s(  t ddddgddddgddddgddddgddddgddddgddddgddddgddddgg	gt j} t ddgt j}t ddgt j}t dddddgdddddgdddddgdddddgdddddggggt j}tjjdddd	gd
gddgd}t|| ||g|gdd d S )Nr   r   r!      r   r   r#   r$   r%   r&      )stridesZtest_col2im_stridesr'   r+   r#   r$   r%   r&   r0   r1   r1   r2   export_col2im_strides<   sR    








zCol2Im.export_col2im_stridesc                  C  sr  t ddddddddd	d
dddddgdddddddddddddddgdd d!d"d#d$d%d&d'd(d)d*d+d,d-gd.d/d0d1d2d3d4d5d6d7d8d9d:d;d<gd=d>d?d@dAdBdCdDdEdFdGdHdIdJdKgggt j} t dLdLgt j}t dMdLgt j}t d dd2dNd2gdOdPdQdRdSgdTdUdVdWdXgdYdZd[d\dVgd]d^d_d`daggggt j}tjjdbdcdddegdfgdgdMdgdMgdh}t|| ||g|gdidj d S )kNr   r	   r
   r   r         $   )   .   3   8   =   B   G   r   r   r   r   r          %   *   /   4   9   >   C   H   r   r   r   r   r      !   &   +   0   5   :   ?   D   I   r   r   r   r   r      "   '   ,   1   6   ;   @   E   J   r         $@r   r   r       #   (   -   2   7   <   A   F   K   r!   r"   g      ;@g      C@g     P@g     @Q@g      R@g      K@g      Q@g     [@g     \@g     @]@g      U@g     X@g     c@g     c@g     @d@g      `@g      i@g     i@g     i@g      b@r   r#   r$   r%   r&   r   )ZpadsZtest_col2im_padsr'   r+   r7   r1   r1   r2   export_col2im_padsk   s    Z[
zCol2Im.export_col2im_padsc                  C  s  t dddddgdddd	d
gdddddgdddddgggt j} t ddgt j}t ddgt j}t ddddddgddddddgddddddgddddddgddddddgddddddggggt j}tjjdd d!d"gd#gd$d%gd&}t|| ||g|gd'd( d S ))Nr   r   r   r      r   r	   ra   r      r   r   r
   r      r   r   r   r         r5   r   r   r   g      :@g      @@g      A@r   r   r   r#   r$   r%   r&   r"   r!   )Z	dilationsZtest_col2im_dilationsr'   r+   r7   r1   r1   r2   export_col2im_dilations   sJ    	
zCol2Im.export_col2im_dilationsc                  C  s  t ddddddddd	d
ddgddddddddddddgdddddddd d!d"d#d$gd%d&d'd(d)d*d+d,d-d.d/d0gd1d2d3d4d5d6d7d8d9d:d;d<gd=d>d?d@dAdBdCdDdEdFdGdHgdIdJdKdLdMdNdOdPdQdRdSdTgdUdVdWdXdYdZd[d\d]d^d_d`gdadbdcdddedfdgdhdidjdkdlgdmdndodpdqdrdsdtdudvdwdxgg
gt j} t dd%d1gt j}t ddd1gt j}t dddd%d1gdddd&d2gdddd'd3gdddd(d4ggdddd)d5gdddd*d6gdddd+d7gddd d,d8ggd	dd!d-d9gd
dd"d.d:gddd#d/d;gddd$d0d<gggd=dIdUdadmgd>dJdVdbdngd?dKdWdcdogd@dLdXdddpggdAdMdYdedqgdBdNdZdfdrgdCdOd[dgdsgdDdPd\dhdtggdEdQd]didugdFdRd^djdvgdGdSd_dkdwgdHdTd`dldxgggggt j}tjdydzd{d|gd}g}t|| ||g|gd~d d S )Nr"   rq            r9   r:   r;   r<   r=   r>   r?   r5         rm      rC   rD   rE   rF   rG   rH   rI   r4         rn      rM   rN   rO   rP   rQ   rR   rS      	      ro      rW   rX   rY   rZ   r[   r\   r]   r!   
      rp      rb   rc   rd   re   rf   rg   rh   r@   rA   rB   L   Q   V   [   `   e   j   o   t   rJ   rK   rL   M   R   W   \   a   f   k   p   u   rT   rU   rV   N   S   X   ]   b   g   l   q   v   r^   r_   r`   O   T   Y   ^   c   h   m   r   w   ri   rj   rk   P   U   Z   _   d   i   n   s   x   r   r#   r$   r%   r&   Ztest_col2im_5dr'   r+   r7   r1   r1   r2   export_col2im_5d  s    -/  zCol2Im.export_col2im_5dN)
__name__
__module____qualname____doc__staticmethodr3   r8   rl   rr   r   r1   r1   r1   r2   r      s   (.z*r   )

__future__r   Znumpyr,   r.   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   r   r1   r1   r1   r2   <module>   s
   