U
    rh                     @  sx   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 dd Zdd	 Zd
d Zdd ZG dd deZdS )    )annotationsN)Base)expect)apply_affine_transformconstruct_original_gridc                 C  s  t jt | t | t | t | t | t |  t | t | t | g	ddddd}t jt |t |t |t |t |t |t | t |t |g	ddddd}t jt ||||t ||||t |g	ddddd}t j|t |t |t ||	t |t |t ||
g	ddddd}t t |||gddd}|| | | }t |d}t 	||f}t |d}|
t jS )NZaxis      r      r
   )npstack	ones_like
zeros_likecossinreshape	transposearrayhstackastypefloat32)angle1angle2offset_xoffset_yoffset_zshear_xshear_yshear_zscale_xscale_yscale_zZrot_xZrot_yshearscaletranslationrotation_matrixaffine_matrix r)   J/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/affinegrid.pycreate_affine_matrix_3d   s    
  
        r+   c                 C  s   t jt | t |  t | t | gddddd}t jt |||t |gddddd}t j|t |t ||gddddd}	t t ||gddd}
|| |	 }t |d}t 	||
f}t |d}|
t jS )Nr   r   r   r
   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r!   r"   Zrotr$   r%   r&   r'   r(   r)   r)   r*   create_affine_matrix_2d`   s<    $         r,   c                  C  s   t t jd t jd g} t ddg}t ddg}t ddg}t d	d
g}t ddg}t ddg}t| ||||||}|S )N   r	         @      @ffffff
皙?            ?333333?333333ӿ皙@@?)r   r   pir,   )Zangler   r   r   r   r!   r"   theta_2dr)   r)   r*   create_theta_2dt   s"          r;   c                  C  s   t t jd t jd g} t t jd t jd g}t ddg}t ddg}t d	d
g}t ddg}t ddg}t ddg}t d
dg}t ddg}	t ddg}
t| |||||||||	|
}|S )Nr-   r	      r   r.   r/   r0   r1   gr6   r2   r3   r4   r5   gffffff?gɿr7   r8   g      ?)r   r   r9   r+   )r   r   r   r   r   r   r   r    r!   r"   r#   theta_3dr)   r)   r*   create_theta_3d   s2    r>   c                   @  s0   e Zd ZeddddZeddddZdS )
AffineGridNone)returnc               	   C  s   t  } t| dddf\}}}}||f}dD ]p}tjjdddgdg|d	}t||}t| |}	d
}
|dkrp|
d7 }
t|| tj	||||gtj
dg|	g|
d q*d S )Nr	      r<   r   r
   r?   thetasizegridinputsoutputsalign_cornersZtest_affine_grid_2dr
   _align_cornersZdtyperH   rI   name)r;   lenonnxhelper	make_noder   r   r   r   r   int64)r:   NCHW	data_sizerJ   nodeoriginal_gridrF   	test_namer)   r)   r*    export_2d_no_reference_evaluator   s*    

z+AffineGrid.export_2d_no_reference_evaluatorc               
   C  s   t  } t| ddddf\}}}}}|||f}dD ]r}tjjdddgd	g|d
}t||}	t| |	}
d}|dkrv|d7 }t|| tj	|||||gtj
dg|
g|d q0d S )Nr	   r-   rB   r<   rC   r?   rD   rE   rF   rG   Ztest_affine_grid_3dr
   rK   rL   rM   )r>   rO   rP   rQ   rR   r   r   r   r   r   rS   )r=   rT   rU   DrV   rW   rX   rJ   rY   rZ   rF   r[   r)   r)   r*    export_3d_no_reference_evaluator   s*    


z+AffineGrid.export_3d_no_reference_evaluatorN)__name__
__module____qualname__staticmethodr\   r^   r)   r)   r)   r*   r?      s   r?   )
__future__r   Znumpyr   rP   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   Z!onnx.reference.ops.op_affine_gridr   r   r+   r,   r;   r>   r?   r)   r)   r)   r*   <module>   s   O