o
    wi                     @  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,   c/home/ubuntu/sommelier/.venv/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#   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 )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$   theta_3dr,   r,   r-   create_theta_3d   s2   rC   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
      rA   r   r   rD   thetasizegridinputsoutputsalign_cornerstest_affine_grid_2dr   _align_cornersdtyperM   rN   name)r@   lenonnxhelper	make_noder   r   r   r   r   int64)r?   NCHW	data_sizerO   nodeoriginal_gridrK   	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   rG   rA   rH   rD   rI   rJ   rK   rL   test_affine_grid_3dr   rQ   rR   rT   )rC   rV   rW   rX   rY   r   r   r   r   r   rZ   )rB   r[   r\   Dr]   r^   r_   rO   r`   ra   rK   rb   r,   r,   r-    export_3d_no_reference_evaluator   s,   


z+AffineGrid.export_3d_no_reference_evaluatorN)rE   rF   )__name__
__module____qualname__staticmethodrc   rf   r,   r,   r,   r-   rD      s
    rD   )
__future__r   numpyr   rW   onnx.backend.test.case.baser   onnx.backend.test.case.noder   !onnx.reference.ops.op_affine_gridr   r   r.   r0   r@   rC   rD   r,   r,   r,   r-   <module>   s   O