a
    {þd1>  ã                   @   s¤  d dl mZ d dl mZ d dlmZmZmZmZ d dlm	Z	 d dl
mZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZ d d
lmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z, edƒ\Z-Z.Z/Z0edƒZ1dd„ Z2dd„ Z3dd„ Z4dd„ Z5dd„ Z6dd„ Z7dd „ Z8d!d"„ Z9d#d$„ Z:d%d&„ Z;d'd(„ Z<d)d*„ Z=d+d,„ Z>d-d.„ Z?d/d0„ Z@d1d2„ ZAd3d4„ ZBd5d6„ ZCd7S )8é    )Údiff)Úexpand)ÚEÚIÚRationalÚpi)ÚS)ÚSymbolÚsymbols)ÚAbsÚ	conjugateÚimÚreÚsign)Úlog)Úsqrt)ÚacosÚasinÚcosÚsinÚatan2Úatan)Ú	integrate)ÚMatrix)Úsimplify)Útrigsimp)Ú
Quaternion)Úraises)ÚpermutationsÚproductzw:zÚphic               
      s:  t ttttƒ} | |  t dt dt dt dt ƒks8J ‚t  tdƒd tdƒd tdƒd fttddƒ ¡}|t t	j
t	j
t	j
t	j
ƒksŠJ ‚tttƒttƒ dgttƒttƒdgg d¢gƒ}tt  |¡ƒ}|t tdƒtttƒd ƒ d ddtddttƒ  ƒtttƒƒ d ƒksJ ‚tddd‰ tt‡ fd	d
„ƒ d S )Né   é   r   ©r   r   é   r$   ÚncF©Zcommutativec                      s   t ttˆ tƒS ©N)r   ÚwÚxÚz© ©r%   r+   úm/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/sympy/algebras/tests/test_quaternion.pyÚ<lambda>$   ó    z.test_quaternion_construction.<locals>.<lambda>)r   r(   r)   Úyr*   Úfrom_axis_angler   r   r   r   ÚHalfr   r   r    r   r   Zfrom_rotation_matrixr   r	   r   Ú
ValueError)ÚqÚq2ÚMÚq3r+   r,   r-   Útest_quaternion_construction   s    *$ÿÿ
0@ÿr8   c                  C   s|   t tdƒŽ } t ttttƒ}t| |  ¡ d |  ¡ d | ¡ d   ƒdksNJ ‚t ttttdd}| |  ¡ |  ¡ ksxJ ‚d S )Núa:dr!   r   r$   )Únorm)r   r
   r(   r)   r0   r*   r   r:   )Úq1r5   r7   r+   r+   r-   Ú!test_quaternion_construction_norm'   s
    4r<   c                  C   sT   t ttttƒ} t  |  ¡ ¡}t  |  d¡¡}| |  ¡ s<J ‚|  ¡ |  ¡ sPJ ‚d S )NT)	r   r(   r)   r0   r*   Zfrom_MatrixÚ	to_MatrixÚis_zero_quaternionÚvector_part)r4   Zq_fullZq_vectr+   r+   r-   Útest_to_and_from_Matrix1   s
    r@   c                  C   sœ   t ttttƒ} t tdƒŽ }| |  ¡ | j| ¡  ks8J ‚| |  ¡ |j|  ¡  ksVJ ‚| j| jj	 dd …dd …f }t
|  ¡ |  ¡ d  ƒ}||ks˜J ‚d S )Nr9   r$   r!   )r   r(   r)   r0   r*   r
   r=   Zproduct_matrix_leftZproduct_matrix_rightÚTr   Úto_rotation_matrixr:   )r;   r5   ÚR1ÚR2r+   r+   r-   Útest_product_matrices9   s    rE   c                  C   s  ddt d tdƒd tdƒd ddffdt d tdƒd dtdƒd dffdt d tdƒd ddtdƒd ffdt dfdt dfdt d	fd
t ddtdƒ dtdƒ dtdƒ fftdƒd tdƒd tdƒd ft d d tjtjtjtjffg	} | D ]"\}}}t ||¡t|Ž ksôJ ‚qôd S )N)©r$   r   r   r   )r$   r   r   r   rF   r!   r   )r   r$   r   r#   )r   r$   r   r   ©r   r   r$   r   ©r   r   r   r$   ©r$   r$   r$   r$   r"   )r   r   r   r2   r   r1   )Z	test_dataÚaxisÚangleÚexpectedr+   r+   r-   Útest_quaternion_axis_angleD   s    $$$(>÷rM   c                  C   s¤   t  dtdƒ¡} | jttdƒd ƒks*J ‚| jtdƒttdƒd ƒ d ksPJ ‚| jtdƒttdƒd ƒ d ksvJ ‚| j	dtdƒ ttdƒd ƒ d ks J ‚d S )N)r$   r!   r"   é   r!   é   é   r"   )
r   r1   r   Úar   Úbr   r   ÚcÚd)Úresultr+   r+   r-   Ú)test_quaternion_axis_angle_simplificationV   s
    &&rV   c               	      s†  t ddd} t ddd}t ddd‰ tttttƒ‰| ˆ ttt| ƒ tt| ƒ ttƒks\J ‚d	ˆ td	t tttƒkszJ ‚tˆ ttd	t ttƒks˜J ‚|ˆ tt| tttƒks¶J ‚t	t
‡ ‡fd
d„ƒ t	t
‡ ‡fdd„ƒ t	t
‡ ‡fdd„ƒ ˆ tt t t t ƒksJ ‚tddt  ddt  dddt  dd}td	dddƒ}|ddt   tddt  ddt  dddt  ƒksˆJ ‚|ddt   tddddƒks¬J ‚|ddt   tddt  ddt   ddt  ddt   dddt  ddt   ƒksJ ‚|ddt   tddddƒks0J ‚td	dddƒ}tddddƒ}|| |ks^J ‚|| |kspJ ‚|| |ks‚J ‚d S )NrQ   T©ÚcomplexrR   ©ÚrealrS   Fr&   r$   c                      s   ˆ ˆ S r'   r+   r+   ©rS   r4   r+   r-   r.   h   r/   z7test_quaternion_complex_real_addition.<locals>.<lambda>c                      s   ˆˆ  S r'   r+   r+   r[   r+   r-   r.   i   r/   c                      s   ˆ ˆ S r'   r+   r+   r[   r+   r-   r.   j   r/   r"   rN   r!   é   r   rP   é   ©Z
real_fieldiöÿÿÿé   é&   éûÿÿÿ)r
   r   r(   r)   r0   r*   r   r   r   r   r3   )rQ   rR   r;   r5   Úq0r+   r[   r-   Ú%test_quaternion_complex_real_addition]   s2    *"*<$Hÿ
$rc   c                   C   sŒ   t tdƒddtdƒƒ ¡ t tdƒ ¡ ddtdƒ ¡ ƒks<J ‚t dtdƒ dddtdƒ ƒ ¡ t dtdƒ  ¡ dddtdƒ  ¡ ƒksˆJ ‚d S )Nr!   r   r"   r$   )r   r   Úevalfr+   r+   r+   r-   Útest_quaternion_evalf~   s    ÿ $ÿre   c                     sØ
  t ttttƒ} t ddddƒ‰t ddddƒ‰t| ƒt tt t t ƒksJJ ‚|  ¡ ttd td  td  td  ƒkszJ ‚|  ¡ t ttttƒttd td  td  td  ƒ ks¸J ‚|  	¡ t tt t t ƒtd td  td  td   ksøJ ‚|  	¡ |  
d¡ksJ ‚tt‡fdd„ƒ |  
d¡t td td  td  td  dt t dt t dt t ƒkstJ ‚| d t td td  td  td  dt t dt t dt t ƒksÄJ ‚ˆ 
d	¡t td
dƒtddƒtddƒtd	dƒƒksúJ ‚ˆd	 t td
dƒtddƒtddƒtd	dƒƒks.J ‚ˆ 
d¡tksBJ ‚tt‡fdd„ƒ ˆ ¡ t tttdƒƒ dtdƒ t ttdƒƒ d dtdƒ t ttdƒƒ d dtdƒ t ttdƒƒ d ƒksÐJ ‚ˆ ¡ t ttdƒƒdtdƒ ttdƒd ƒ d dtdƒ ttdƒd ƒ d dtdƒ ttdƒd ƒ d ƒksHJ ‚ˆ d¡t dtdttdƒd ƒ ƒ dtdƒ tdttdƒd ƒ ƒ d dtdƒ tdttdƒd ƒ ƒ d dtdƒ tdttdƒd ƒ ƒ d ƒksêJ ‚tt ttttƒtƒt ddddƒksJ ‚tt ttttƒtƒt td d td d td d td d ƒksZJ ‚t  dˆ¡tjd dtdƒd fks„J ‚tdƒ‰ tt‡ ‡fdd„ƒ tddd‰ tt‡ ‡fdd„ƒ t ddddƒ ¡ dksÜJ ‚t ttttƒ ¡ tksøJ ‚t ddddƒ ¡ t ddddƒksJ ‚t ttttƒ ¡ t dtttƒksDJ ‚ˆ  ¡ t ddtdƒ d dtdƒ d dtdƒ d ƒks„J ‚ˆ  ¡  
d¡t ddddƒks¦J ‚ˆ  ¡  ¡ dks¼J ‚|   ¡ t dtttd td  td  ƒ tttd td  td  ƒ tttd td  td  ƒ ƒks,J ‚ˆ !¡ du s>J ‚ˆ !¡ d u sPJ ‚t ddddƒ !¡ du slJ ‚t ddd!dƒ !¡ du sˆJ ‚t tdd!dƒ !¡ d u s¤J ‚ˆ "¡ t#tdƒƒks¾J ‚|  "¡ t$ttd td  td  ƒtƒksîJ ‚t  %ˆt ddd"dƒ¡du sJ ‚t  %ˆt dd	d#d$ƒ¡du s.J ‚t  %ˆt ddd%d&ƒ¡du sNJ ‚t  %ˆt ddddƒ¡du snJ ‚t  %ˆt tdd"dƒ¡du sŽJ ‚t  %ˆt ddddƒ¡d u s®J ‚t  %ˆt ttttƒ¡d u sÎJ ‚tt‡‡fd'd„ƒ t  &t ddd%d&ƒt ddd"dƒt ddddƒ¡du sJ ‚t  &t ddddƒt ddd"dƒt ddddƒ¡du sNJ ‚t  &t dddd"ƒt ddd"d"ƒt ddddƒ¡d u s„J ‚t  &t ddddƒt ddtd"ƒt dd"ddƒ¡d u sºJ ‚tt‡‡fd(d„ƒ t ddddƒ 't dddd"ƒ¡du söJ ‚t ddddƒ 't dddd"ƒ¡d u 	sJ ‚t ddddƒ 't tttd"ƒ¡d u 	sFJ ‚tt‡‡fd)d„ƒ t ddddƒ (t dd	ddƒ¡du 	s‚J ‚t ddddƒ (t dddd"ƒ¡d u 	sªJ ‚t ddddƒ (t tttd"ƒ¡d u 	sÒJ ‚tt‡‡fd*d„ƒ ˆ )¡ t ddtd+ƒ d dtd+ƒ d dtd+ƒ d ƒk
s&J ‚t ddd,dƒ )¡ t ddd,dƒk
sLJ ‚t ddd,dƒ *¡ ttd-ƒƒk
spJ ‚t ddddƒ *¡ ttdƒƒk
s”J ‚ˆ +¡ du 
s¦J ‚ˆ +¡ d u 
s¸J ‚t tdddƒ +¡ d u 
sÔJ ‚d S ).Nr$   r!   r"   rN   r   éÿÿÿÿc                      s   ˆ   ¡ S r'   ©Úinverser+   ©rb   r+   r-   r.      r/   z+test_quaternion_functions.<locals>.<lambda>éþÿÿÿiùÿÿÿéá   é–   ç      à¿c                      s   ˆ d S )Nrm   r+   r+   )r;   r+   r-   r.   —   r/   é   é   é<   éZ   éx   rI   r\   rP   Únc                      s   ˆˆ  S r'   r+   r+   ©rs   r;   r+   r-   r.   ±   r/   T)Úintegerc                      s   ˆˆ  S r'   r+   r+   rt   r+   r-   r.   ³   r/   é   é   é7   r]   Fé
   é   éýÿÿÿéüÿÿÿé   é   c                      s   t  ˆˆ ¡S r'   )r   Úarc_coplanarr+   ©rb   r;   r+   r-   r.   Ó   r/   c                      s   t  ˆ t ddddƒˆ¡S )Nr   rN   rz   r]   )r   Úvector_coplanarr+   r€   r+   r-   r.   á   s    c                      s
   ˆ   ˆ¡S r'   )Úparallelr+   r€   r+   r-   r.   ç   r/   c                      s
   ˆ   ˆ¡S r'   )Ú
orthogonalr+   r€   r+   r-   r.   ì   r/   if  é	   éz   ),r   r(   r)   r0   r*   r   r:   r   Ú	normalizerh   Úpowr   r3   r   ÚNotImplementedÚ	TypeErrorÚexpr   r   r   Z_lnr   r   Zpow_cos_sinr   r   Úrotate_pointr   ÚOner	   Zscalar_partr?   rJ   Úis_purerK   r   r   r   r   r‚   rƒ   Zindex_vectorZmensorr>   ©r4   r+   )rs   rb   r;   r-   Útest_quaternion_functions…   sð     0>@RP
 ÿ ÿýÿ
ýÿ
&&&ýÿ
(,ÿ
*&&@"
ý0       ýý
$ÿÿ
$ÿÿ
ýý
((((((ý&$$r   c               
   C   sn  t ddddƒ} |  ¡ dtdƒ d dtdƒ d dtdƒ d fdttdƒd ƒ fks\J ‚|  ¡ ttddƒtddƒtd	dƒgtddƒtd
dƒtddƒgtddƒtddƒtddƒggƒks¾J ‚|  d¡ttddƒtddƒtd	dƒtddƒgtddƒtd
dƒtddƒtjgtddƒtddƒtddƒtddƒgtjtjtjtj	ggƒksJJ ‚t
ddd}t t|d ƒddt|d ƒƒ}t| ¡ ƒtt|ƒt|ƒ dgt|ƒt|ƒdgg d¢gƒks¶J ‚| ¡ ddt|d ƒtt|d ƒƒ fdtt|d ƒƒ fksúJ ‚t| d¡ƒtt|ƒt|ƒ dt|ƒt|ƒ d gt|ƒt|ƒdt|ƒ t|ƒ d gg d¢g d¢gƒksjJ ‚d S )Nr$   r!   r"   rN   rn   ro   rj   é   r_   rf   rO   rI   r\   ÚthetaTrY   r   r#   rG   rH   )r   Úto_axis_angler   r   rB   r   r   r   ZZerorŒ   r
   r   r   r   r   )r;   r‘   r5   r+   r+   r-   Útest_quaternion_conversionsû   sJ    þý
þÿ""üÿ
ý&ÿ$$ür“   c                  C   sR   t ttttƒ} | jdd|  ¡ d  }t| jdd|  ¡ d  ƒ}||ksNJ ‚d S )NT)Zhomogeneousr!   F)r   r(   r)   r0   r*   rB   r:   r   )r4   rC   rD   r+   r+   r-   Ú test_rotation_matrix_homogeneous!  s    r”   c                  C   sb   t ttd ƒttd ƒddƒ} t|  ¡ ƒtg d¢dttƒttƒ gdttƒttƒggƒks^J ‚dS )a3  
    There was a sign mistake in the definition,
    of the rotation matrix. This tests that particular sign mistake.
    See issue 1593 for reference.
    See wikipedia
    https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Quaternion-derived_rotation_matrix
    for the correct definition
    r!   r   rF   N)r   r   r    r   r   rB   r   rŽ   r+   r+   r-   Ú test_quaternion_rotation_iss1593(  s    	ýr•   c                  C   sh  t ddt  ddt  dddt  dd	} t d
dddƒ}t d
d
d
tƒ}t  tdƒtj¡dks`J ‚t  tdƒ| ¡t ddt  ddt  dddt  ƒksšJ ‚| d¡t ddddƒks¶J ‚| |¡t dt d dt d ddt  td ƒksîJ ‚| |¡|| ksJ ‚tddd}t t|ƒt	|ƒddƒ}t tdddŽ }|| || ksNJ ‚|| || ksdJ ‚d S )Nr"   rN   r!   r\   r   rP   r]   Fr^   r$   r}   r~   é   é   é    rz   ry   ra   r„   r*   TrW   zq:4rY   )
r   r   r0   Z_generic_mulr   rŒ   Úmulr
   r   r   )r;   r5   r7   r*   Zz_quatr4   r+   r+   r-   Útest_quaternion_multiplication8  s    *$ÿ8rš   c                     sÀ   t ddddƒ‰ tt‡ fdd„ƒ t ddddƒ} |  ¡ \}}t  d||f¡tjd	 dtd
ƒd	 fksfJ ‚t ddddƒ} tdƒ d tdƒ d tdƒ d f}dt d }||f|  ¡ ks¼J ‚d S )Nr   c                      s   dˆ  S )Nr$   r+   r+   ri   r+   r-   r.   O  r/   z"test_issue_16318.<locals>.<lambda>r$   r!   r"   rN   rI   r\   rP   rf   )	r   r   r3   r’   r‹   r   rŒ   r   r   )r4   rJ   rK   r+   ri   r-   Útest_issue_16318L  s    ,(r›   c                  C   sd   t ttttƒ} |  ¡ }g d¢}|dd„ |D ƒ7 }|D ]*}|  |¡}tt  ||¡ƒ}||ks4J ‚q4d S )N)ZzxyÚzyxÚzyzZzxzc                 S   s   g | ]}|  ¡ ‘qS r+   )Úupper)Ú.0Úseqr+   r+   r-   Ú
<listcomp>`  r/   z!test_to_euler.<locals>.<listcomp>)	r   r(   r)   r0   r*   r†   Úto_eulerr   Ú
from_euler)r4   Zq_normalizedZseqsr    Zeuler_from_qZq_backr+   r+   r-   Útest_to_euler[  s    
r¤   c                  C   s6   t  tddfd¡} t|  d¡ddtddfks2J ‚dS )z_
    There was a mistake in the degenerate case testing
    See issue 24504 for reference.
    r   r   Trg   N)r   r£   r    r   r¢   rŽ   r+   r+   r-   Útest_to_euler_iss24504h  s    r¥   c                  C   sÀ   dd„ } | t d ddfdƒ | t d ddfdƒ | t d t dfdƒ | t d t dfdƒ | t d t d dfdƒ | t d t  d dfdƒ | t d t d dfdƒ | t d t  d dfdƒ d S )	Nc                 S   s"   t  | |¡}| |¡| ksJ ‚d S r'   )r   r£   r¢   )Zanglesr    r4   r+   r+   r-   Útest_one_cases  s    z<test_to_euler_numerical_singilarities.<locals>.test_one_caser!   r   r   ZZYZrœ   ZZYX)r   )r¦   r+   r+   r-   Ú%test_to_euler_numerical_singilaritiesq  s    r§   c               	      sŒ   ‡ fdd„} dD ]v}t |ƒD ]h}dD ]^}|rJd |d |d |d g¡‰ n
d |¡‰ tg d¢d	d
D ]}t|Ž }| ¡ sd| |ƒ qdq$qqd S )Nc                    sb   t |  ˆ dd¡ƒ}t |  ˆ dd¡ƒ}t|| ƒ ¡ }|D ]$}|t dt  t }|dk s8J ‚q8d S )NTFr!   gíµ ÷Æ°>)r   r¢   r   rd   r   )r4   Zangles1Zangles2Zangle_errorsZangle_error©r    r+   r-   r¦   …  s    z,test_to_euler_options.<locals>.test_one_case)ÚxyzZXYZ)TFÚ r   r$   )rf   r   r$   rN   )Úrepeat)r   Újoinr   r   r>   )r¦   r©   Z	seq_tupleZ	symmetricÚelementsr4   r+   r¨   r-   Útest_to_euler_options„  s    	
r®   N)DZsympy.core.functionr   r   Zsympy.core.numbersr   r   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr	   r
   Z$sympy.functions.elementary.complexesr   r   r   r   r   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   r   r   r   r   r   Zsympy.integrals.integralsr   Zsympy.matrices.denser   Zsympy.simplifyr   Zsympy.simplify.trigsimpr   Zsympy.algebras.quaternionr   Zsympy.testing.pytestr   Ú	itertoolsr   r   r(   r)   r0   r*   r    r8   r<   r@   rE   rM   rV   rc   re   r   r“   r”   r•   rš   r›   r¤   r¥   r§   r®   r+   r+   r+   r-   Ú<module>   sF    
!v&	