a
    þd?  ã                   @   s:   d dl Z d dlZd dlmZ d dlmZ G dd„ dƒZdS )é    N)Ú
Quaternion)Úassert_closec                   @   s(  e Zd Zd$dd„Zdd„ Zej dd¡dd	„ ƒZd
d„ Z	ej dd¡dd„ ƒZ
ej dd¡dd„ ƒZej dd¡dd„ ƒZej dd¡dd„ ƒZdd„ Zdd„ Zej dd¡dd„ ƒZej dd¡dd„ ƒZej dd¡dd„ ƒZej dd¡dd„ ƒZej dd¡d d!„ ƒZej dd¡d"d#„ ƒZdS )%ÚTestQuaternionNc                 C   sd   t |tƒr|jj}nt |tjjƒr(|j}t |tƒr<|jj}nt |tjjƒrP|j}t||||d d S )N©ÚrtolÚatol)Ú
isinstancer   ÚdataÚtorchÚnnÚ	Parameterr   )ÚselfÚactualÚexpectedr   r   © r   úf/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/test/geometry/test_quaternion.pyr   	   s    



zTestQuaternion.assert_closec                 C   s¼   t  dddd¡}| ||¡}tjg d¢g||d}t|t ƒs@J ‚|jdksNJ ‚|  |j|¡ |  |j	|¡ |  |j
|dd d…f ¡ |  |j|dd d…f ¡ |  |j|ddd …f ¡ d S )Nç      ð?ç        )r   r   r   r   ©ÚdeviceÚdtype)é   é   .r   )r   Úfrom_coeffsÚtor
   Ztensorr   Úshaper   r	   ÚqÚrealZscalarZvec)r   r   r   r   Zq_datar   r   r   Ú
test_smoke   s    zTestQuaternion.test_smokeÚ
batch_size)r   é   é   c                 C   s>   t  |¡}| ||¡}t |jƒ}t|t ƒs.J ‚|  ||¡ d S ©N)r   Úidentityr   r	   r   r   ©r   r   r   r   Úq1Úq2r   r   r   Ú	test_init!   s
    

zTestQuaternion.test_initc                 C   s¤   t  t¡ tdƒ}W d   ƒ n1 s(0    Y  t  t¡ tg d¢ƒ}W d   ƒ n1 s^0    Y  t  t¡ tdg d¢ƒ}W d   ƒ n1 s–0    Y  d S )Nr   )r   r   r   r   r   )r   r   r   )ÚpytestZraisesÚ	Exceptionr   )r   r   r   Ú_r   r   r   Útest_init_fail)   s    &*zTestQuaternion.test_init_failc                 C   s:   t  |¡}| ||¡}| ¡  ¡ }|  || |j¡¡ d S r"   ©r   Úrandomr   Ú	normalizeÚnormr   Znew_onesr   )r   r   r   r   r   Zq_nr   r   r   Útest_random3   s    
zTestQuaternion.test_randomc                 C   s:   t j|d||d}t|ƒ}| ||¡}|  | | ¡ d S ©Nr   r   )r
   Úrandr   r   r   )r   r   r   r   r	   r   r   r   r   Ú
test_minus:   s    zTestQuaternion.test_minusc           	      C   s‚   t j|d||d}t j|d||d}t|ƒ ||¡}t|ƒ ||¡}|| }t|tƒsZJ ‚|  ||| ¡ ||7 }|  ||¡ d S r1   ©r
   r2   r   r   r   r   ©	r   r   r   r   Úd1Zd2r%   r&   Zq3r   r   r   Útest_addA   s    zTestQuaternion.test_addc           	      C   s‚   t j|d||d}t j|d||d}t|ƒ ||¡}t|ƒ ||¡}|| }t|tƒsZJ ‚|  ||| ¡ ||8 }|  ||¡ d S r1   r4   r5   r   r   r   Útest_subtractM   s    zTestQuaternion.test_subtractc                 C   sl  t  dddd¡ ||¡}t  dddd¡ ||¡}t  dddd¡ ||¡}t  dddd¡ ||¡}|  || || ¡ |  || || ¡ |  || || | ¡ |  || | | ¡ |  || |¡ |  || | ¡ |  || | ¡ |  || | ¡ |  || | ¡ |  || |¡ |  || |¡ |  || | ¡ |  || | ¡ |  || | | ¡ d S ©Nr   r   ©r   r   r   r   ©r   r   r   ZoneÚiÚjÚkr   r   r   Útest_multiplication_of_basesY   s$    z+TestQuaternion.test_multiplication_of_basesc                 C   sX  t  dddd¡ ||¡}t  dddd¡ ||¡}t  dddd¡ ||¡}t  dddd¡ ||¡}|  || || ¡ |  || || ¡ |  || |¡ |  ||  | ¡ |  || | ¡ |  || |¡ |  || |¡ |  || |¡ |  || |¡ |  || | ¡ |  || | ¡ |  || |¡ |  || |¡ |  ||  |¡ d S r9   r:   r;   r   r   r   Útest_division_of_baseso   s$    z%TestQuaternion.test_division_of_basesc                 C   sJ   t  |¡}| ||¡}t  |¡}| ||¡}| j|| ¡  |ddd d S )Ng-Cëâ6?r   )r   r-   r   r#   r   Úinvr$   r   r   r   Útest_inverse…   s
    

zTestQuaternion.test_inversec                 C   sP   t  |¡}| ||¡}t  |¡}| ||¡}|  ||  ¡ | ¡ | ¡  ¡ d S r"   ©r   r-   r   r   Zconjr$   r   r   r   Útest_conjugate   s
    

zTestQuaternion.test_conjugatec                 C   s.   t  |¡}| ||¡}|  || ¡  ¡ ¡ d S r"   rC   )r   r   r   r   r%   r   r   r   Útest_double_conjugate•   s    
z$TestQuaternion.test_double_conjugatec                 C   sP   t  |¡}| ||¡}t  |¡}| ||¡}|  ||  ¡ | ¡ | ¡  ¡ d S r"   )r   r-   r   r   r/   r$   r   r   r   Ú	test_norm›   s
    

zTestQuaternion.test_normc                 C   s:   t  |¡}| ||¡}| ¡  ¡ }|  || |j¡¡ d S r"   r,   )r   r   r   r   r%   Zq1_nr   r   r   Útest_normalize£   s    
zTestQuaternion.test_normalizec           	   	   C   sv   t  |¡}| ||¡}| ¡ }t  |¡}t|j|jƒD ]:\}}z|  ||¡ W q6 tyn   |  || ¡ Y q60 q6d S r"   )	r   r-   r   ZmatrixZfrom_matrixÚzipr	   r   r)   )	r   r   r   r   r%   Úm1r&   Zqq1Zqq2r   r   r   Útest_matrixª   s    

zTestQuaternion.test_matrix)NN)Ú__name__Ú
__module__Ú__qualname__r   r   r(   ÚmarkZparametrizer'   r+   r0   r3   r7   r8   r?   r@   rB   rD   rE   rF   rG   rJ   r   r   r   r   r      s6   











r   )r(   r
   Zkornia.geometry.quaternionr   Zkornia.testingr   r   r   r   r   r   Ú<module>   s   