o
    à8Va#  ã                   @   sä   d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ edƒ\ZZZZedƒZdd„ Z dd	„ Z!d
d„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&dd„ Z'dd„ Z(dd„ Z)dS )é    )ÚsymbolsÚreÚimÚsignÚIÚAbsÚSymbolÚcosÚsinÚsqrtÚ	conjugateÚlogÚacosÚasinÚEÚpiÚMatrixÚdiffÚ	integrateÚtrigsimpÚSÚRational)Ú
Quaternion)Úraiseszw:zÚphic               
      s8  t ttttƒ} | |  t dt dt dt dt ƒksJ ‚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sEJ ‚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%   úF/usr/lib/python3/dist-packages/sympy/algebras/tests/test_quaternion.pyÚ<lambda>   s    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Nr1   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 ‚qzd S )N)©r   r   r   r   )r   r   r   r   r2   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   r+   r   r*   )Z	test_dataÚaxisÚangleZexpectedr%   r%   r'   Útest_quaternion_axis_angle   s   $$$(>÷ÿr8   c                  C   s¤   t  dtdƒ¡} | jttdƒd ƒksJ ‚| jtdƒttdƒd ƒ d ks(J ‚| jtdƒttdƒd ƒ d ks;J ‚| j	dtdƒ ttdƒd ƒ d ksPJ ‚d S )N)r   r   r   é   r   é   é   r   )
r   r*   r   Úar	   Úbr   r
   ÚcÚd)Úresultr%   r%   r'   Ú)test_quaternion_axis_angle_simplification-   s
   &&.rA   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s=J ‚tˆ ttd	t ttƒksLJ ‚|ˆ 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sJ ‚td	dddƒ}tddddƒ}|| |ks,J ‚|| |ks5J ‚|| |ks>J ‚d S )Nr<   T©Úcomplexr=   ©Úrealr>   Fr    r   c                      s   ˆ ˆ S r!   r%   r%   ©r>   r-   r%   r'   r(   ?   ó    z7test_quaternion_complex_real_addition.<locals>.<lambda>c                      s   ˆˆ  S r!   r%   r%   rF   r%   r'   r(   @   rG   c                      s   ˆ ˆ S r!   r%   r%   rF   r%   r'   r(   A   rG   r   r9   r   é   r   r;   é   ©Z
real_fieldiöÿÿÿé   é&   éûÿÿÿ)r   r   r"   r#   r)   r$   r   r   r   r   r,   )r<   r=   Úq1r.   Úq0r%   rF   r'   Ú%test_quaternion_complex_real_addition4   s2   * *:"H
ÿ$rP   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sDJ ‚d S )Nr   r   r   r   )r   r   Zevalfr%   r%   r%   r'   Útest_quaternion_evalfU   s   <PrQ   c                     s¼  t ttttƒ} t ddddƒ‰t ddddƒ‰t| ƒt tt t t ƒks%J ‚|  ¡ ttd td  td  td  ƒks=J ‚|  ¡ 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s¸J ‚| 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sJ ‚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sdJ ‚ˆ ¡ 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s J ‚ˆ 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s)J ‚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„ƒ d S )Nr   r   r   r9   r   éÿÿÿÿc                      s   ˆ   ¡ S r!   )Úinverser%   ©rO   r%   r'   r(   d   rG   z+test_quaternion_functions.<locals>.<lambda>éþÿÿÿiùÿÿÿéá   é–   ç      à¿c                      s   ˆ d S )NrX   r%   r%   )rN   r%   r'   r(   j   rG   é   é   é<   éZ   éx   r5   rH   r;   Únc                      ó   ˆˆ  S r!   r%   r%   ©r^   rN   r%   r'   r(   „   rG   T)Zintegerc                      r_   r!   r%   r%   r`   r%   r'   r(   †   rG   )r   r"   r#   r)   r$   r   Znormr   Ú	normalizerS   Úpowr   r,   r   ÚNotImplementedÚ	TypeErrorZexpr   r	   r
   Z_lnr   r   Zpow_cos_sinr   r   Úrotate_pointr   ÚOner   ©r-   r%   )r^   rO   rN   r'   Útest_quaternion_functionsZ   sZ    0>@PN44ý
ÿý
ÿ&&&ý
ÿ(,
ÿ*rh   c               
   C   sh  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s¤J ‚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s2J ‚d S )Nr   r   r   r9   rY   rZ   rU   é   rK   rR   r:   r5   rH   ÚthetaTrD   r   r   r3   r4   )r   Úto_axis_angler   r   Úto_rotation_matrixr   r   r   ZZerorf   r   r	   r
   r   r   )rN   rj   r.   r%   r%   r'   Útest_quaternion_conversions‰   s@   þ
ý"þ,"ýý&
ÿ$$ürm   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   r2   N)r   r	   r   r
   r   rl   r   rg   r%   r%   r'   Ú test_quaternion_rotation_iss1593¬   s   	ýrn   c                  C   sX  t ddt  ddt  dddt  dd	} t d
dddƒ}t d
d
d
tƒ}t  dd
¡dks-J ‚t  d| ¡t ddt  ddt  dddt  ƒksHJ ‚| d¡t ddddƒksVJ ‚| |¡t dt d dt d ddt  td ƒksrJ ‚| |¡|| ks}J ‚tddd}t t|ƒt|ƒddƒ}t tdddŽ }|| || ks J ‚|| || ksªJ ‚d S )Nr   r9   r   rH   r   r;   rI   FrJ   r   é   é   é   é   é    é   é
   rM   é	   r$   TrB   zq:4rD   )r   r   r)   Z_generic_mulÚmulr   r   r   )rN   r.   r0   r$   Zz_quatr-   r%   r%   r'   Útest_quaternion_multiplication¼   s   *68rx   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s3J ‚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%   rT   r%   r'   r(   Ò   rG   z"test_issue_16318.<locals>.<lambda>r   r   r   r9   r5   rH   r;   rR   )	r   r   r,   rk   re   r   rf   r   r   )r-   r6   r7   r%   rT   r'   Útest_issue_16318Ï   s   ,(ry   N)*Zsympyr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsympy.algebras.quaternionr   Zsympy.testing.pytestr   r"   r#   r)   r$   r   r1   r8   rA   rP   rQ   rh   rm   rn   rx   ry   r%   r%   r%   r'   Ú<module>   s   ` !/#