o
    soi                     @  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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_zrot_xrot_yshearscaletranslationrotation_matrixaffine_matrix r,   Z/home/ubuntu/.local/lib/python3.10/site-packages/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#   rotr'   r(   r)   r*   r+   r,   r,   r-   create_affine_matrix_2d`   s*   &


r0   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   pir0   )angler   r   r   r    r"   r#   r,   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 )Nr1   r
      r   r2   r3   r4   r5   gr:   r6   r7   r8   r9   gffffff?gɿr;   r<   g      ?)r   r   r=   r.   )r   r   r   r   r   r   r    r!   r"   r#   r$   r,   r,   r-   create_theta_3d   s0   rA   c                   @  s(   e Zd ZedddZedddZdS )	
AffineGridreturnNonec               	   C  s   t  } t| dddf\}}}}||f}dD ]8}tjjdddgdg|d	}t||}t| |}	d
}
|dkr8|
d7 }
t|| tj	||||gtj
dg|	g|
d qd S )Nr
      r@   r   r   rB   thetasizegridinputsoutputsalign_cornerstest_affine_grid_2dr   _align_cornersdtyperK   rL   name)r?   lenonnxhelper	make_noder   r   r   r   r   int64)theta_2dNCHW	data_sizerM   nodeoriginal_gridrI   	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 ]9}tjjdddgd	g|d
}t||}	t| |	}
d}|dkr;|d7 }t|| tj	|||||gtj
dg|
g|d qd S )Nr
   r1   rE   r@   rF   rB   rG   rH   rI   rJ   test_affine_grid_3dr   rO   rP   rR   )rA   rT   rU   rV   rW   r   r   r   r   r   rX   )theta_3drZ   r[   Dr\   r]   r^   rM   r_   r`   rI   ra   r,   r,   r-    export_3d_no_reference_evaluator   s,   


z+AffineGrid.export_3d_no_reference_evaluatorN)rC   rD   )__name__
__module____qualname__staticmethodrb   rf   r,   r,   r,   r-   rB      s
    rB   )
__future__r   numpyr   rU   onnx.backend.test.case.baser   onnx.backend.test.case.noder   !onnx.reference.ops.op_affine_gridr   r   r.   r0   r?   rA   rB   r,   r,   r,   r-   <module>   s   O