U
    —9%e1>  ã                   @   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s8t‚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Št‚tttƒttƒ dgttƒttƒdgdddggƒ}tt  |¡ƒ}|t tdƒtttƒd ƒ d ddtddttƒ  ƒtttƒƒ d ƒkst‚tddd‰ tt‡ fdd	„ƒ d S )
Né   é   r   é   ÚncF©Zcommutativec                      s   t ttˆ tƒS ©N)r   ÚwÚxÚz© ©r$   r*   úc/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/algebras/tests/test_quaternion.pyÚ<lambda>$   ó    z.test_quaternion_construction.<locals>.<lambda>)r   r'   r(   Úyr)   ÚAssertionErrorÚ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&    *$ÿ ÿ
2   "ÿr8   c                  C   s|   t tdƒŽ } t ttttƒ}t| |  ¡ d |  ¡ d | ¡ d   ƒdksNt‚t ttttdd}| |  ¡ |  ¡ ksxt‚d S )Núa:dr!   r   r#   )Únorm)	r   r
   r'   r(   r/   r)   r   r:   r0   )Úq1r5   r7   r*   r*   r,   Ú!test_quaternion_construction_norm'   s
    4r<   c                  C   sT   t ttttƒ} t  |  ¡ ¡}t  |  d¡¡}| |  ¡ s<t‚|  	¡ |  ¡ sPt‚d S )NT)
r   r'   r(   r/   r)   Zfrom_MatrixÚ	to_MatrixÚis_zero_quaternionr0   Ú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s8t‚| |  ¡ |j	|  ¡  ksVt‚| j| j	j
 dd …dd …f }t|  ¡ |  ¡ d  ƒ}||ks˜t‚d S )Nr9   r#   r!   )r   r'   r(   r/   r)   r
   r=   Zproduct_matrix_leftr0   Z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ôt‚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   r   r   r2   r   r1   r0   )Z	test_dataÚaxisÚangleÚexpectedr*   r*   r,   Útest_quaternion_axis_angleD   s    $$$(>÷rK   c                  C   s¤   t  dtdƒ¡} | jttdƒd ƒks*t‚| jtdƒttdƒd ƒ d ksPt‚| j	tdƒttdƒd ƒ d ksvt‚| j
dtdƒ ttdƒd ƒ d ks t‚d S )N)r#   r!   r"   é   r!   é   é   r"   )r   r1   r   Úar   r0   Úbr   r   ÚcÚd)Úresultr*   r*   r,   Ú)test_quaternion_axis_angle_simplificationV   s
    &&rT   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\t‚d	ˆ td	t tttƒkszt‚t	ˆ ttd	t ttƒks˜t‚|ˆ tt| tttƒks¶t‚t
t‡ ‡fd
d„ƒ t
t‡ ‡fdd„ƒ t
t‡ ‡fdd„ƒ ˆ tt t t t ƒkst‚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ˆt‚|ddt	   tddddƒks¬t‚|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t‚|ddt	   tddddƒks0t‚td	dddƒ}tddddƒ}|| |ks^t‚|| |kspt‚|| |ks‚t‚d S )NrO   T©ÚcomplexrP   ©ÚrealrQ   Fr%   r#   c                      s   ˆ ˆ S r&   r*   r*   ©rQ   r4   r*   r,   r-   h   r.   z7test_quaternion_complex_real_addition.<locals>.<lambda>c                      s   ˆˆ  S r&   r*   r*   rY   r*   r,   r-   i   r.   c                      s   ˆ ˆ S r&   r*   r*   rY   r*   r,   r-   j   r.   r"   rL   r!   é   r   rN   é   ©Z
real_fieldiöÿÿÿé   é&   éûÿÿÿ)r
   r   r'   r(   r/   r)   r   r   r0   r   r   r3   )rO   rP   r;   r5   Úq0r*   rY   r,   Ú%test_quaternion_complex_real_addition]   s2    *"*<$Hÿ
$ra   c                   C   sŒ   t tdƒddtdƒƒ ¡ t tdƒ ¡ ddtdƒ ¡ ƒks<t‚t dtdƒ dddtdƒ ƒ ¡ t dtdƒ  ¡ dddtdƒ  ¡ ƒksˆt‚d S )Nr!   r   r"   r#   )r   r   Úevalfr0   r*   r*   r*   r,   Útest_quaternion_evalf~   s    ÿ $ÿrc   c                     sØ
  t ttttƒ} t ddddƒ‰t ddddƒ‰t| ƒt tt t t ƒksJt‚|  ¡ ttd td  td  td  ƒkszt‚|  	¡ t ttttƒttd td  td  td  ƒ ks¸t‚|  
¡ t tt t t ƒtd td  td  td   ksøt‚|  
¡ |  d¡kst‚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stt‚| d t td td  td  td  dt t dt t dt t ƒksÄt‚ˆ d	¡t td
dƒtddƒtddƒtd	dƒƒksút‚ˆd	 t td
dƒtddƒtddƒtd	dƒƒks.t‚ˆ d¡tksBt‚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Ðt‚ˆ ¡ 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sHt‚ˆ 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êt‚tt ttttƒtƒt ddddƒkst‚tt ttttƒtƒt td d td d td d td d ƒksZt‚t  dˆ¡tjd dtdƒd fks„t‚tdƒ‰ tt‡ ‡fdd„ƒ tddd‰ tt‡ ‡fdd„ƒ t ddddƒ ¡ dksÜt‚t ttttƒ ¡ tksøt‚t ddddƒ  ¡ t ddddƒkst‚t ttttƒ  ¡ t dtttƒksDt‚ˆ !¡ t ddtdƒ d dtdƒ d dtdƒ d ƒks„t‚ˆ !¡  d¡t ddddƒks¦t‚ˆ !¡  ¡ dks¼t‚|  !¡ 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,t‚ˆ "¡ dks>t‚ˆ "¡ d ksPt‚t ddddƒ "¡ dkslt‚t ddd!dƒ "¡ dksˆt‚t tdd!dƒ "¡ d ks¤t‚ˆ #¡ t$tdƒƒks¾t‚|  #¡ t%ttd td  td  ƒtƒksît‚t  &ˆt ddd"dƒ¡dkst‚t  &ˆt dd	d#d$ƒ¡dks.t‚t  &ˆt ddd%d&ƒ¡dksNt‚t  &ˆt ddddƒ¡dksnt‚t  &ˆt tdd"dƒ¡dksŽt‚t  &ˆt ddddƒ¡d ks®t‚t  &ˆt ttttƒ¡d ksÎt‚tt‡‡fd'd„ƒ t  't ddd%d&ƒt ddd"dƒt ddddƒ¡dkst‚t  't ddddƒt ddd"dƒt ddddƒ¡dksNt‚t  't dddd"ƒt ddd"d"ƒt ddddƒ¡d ks„t‚t  't ddddƒt ddtd"ƒt dd"ddƒ¡d ksºt‚tt‡‡fd(d„ƒ t ddddƒ (t dddd"ƒ¡dksöt‚t ddddƒ (t dddd"ƒ¡d k	st‚t ddddƒ (t tttd"ƒ¡d k	sFt‚tt‡‡fd)d„ƒ t ddddƒ )t dd	ddƒ¡dk	s‚t‚t ddddƒ )t dddd"ƒ¡d k	sªt‚t ddddƒ )t tttd"ƒ¡d k	sÒt‚tt‡‡fd*d„ƒ ˆ *¡ t ddtd+ƒ d dtd+ƒ d dtd+ƒ d ƒk
s&t‚t ddd,dƒ *¡ t ddd,dƒk
sLt‚t ddd,dƒ +¡ ttd-ƒƒk
spt‚t ddddƒ +¡ ttdƒƒk
s”t‚ˆ ,¡ dk
s¦t‚ˆ ,¡ d k
s¸t‚t tdddƒ ,¡ d k
sÔt‚d S ).Nr#   r!   r"   rL   r   éÿÿÿÿc                      s   ˆ   ¡ S r&   ©Úinverser*   ©r`   r*   r,   r-      r.   z+test_quaternion_functions.<locals>.<lambda>éþÿÿÿiùÿÿÿéá   é–   ç      à¿c                      s   ˆ d S )Nrk   r*   r*   )r;   r*   r,   r-   —   r.   é   é   é<   éZ   éx   rG   rZ   rN   Únc                      s   ˆˆ  S r&   r*   r*   ©rq   r;   r*   r,   r-   ±   r.   T)Úintegerc                      s   ˆˆ  S r&   r*   r*   rr   r*   r,   r-   ³   r.   é   é   é7   r[   Fé
   é   éýÿÿÿéüÿÿÿé   é   c                      s   t  ˆˆ ¡S r&   )r   Úarc_coplanarr*   ©r`   r;   r*   r,   r-   Ó   r.   c                      s   t  ˆ t ddddƒˆ¡S )Nr   rL   rx   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(   r/   r)   r   r0   r:   r   Ú	normalizerf   Úpowr   r3   r   ÚNotImplementedÚ	TypeErrorÚexpr   r   r   Z_lnr   r   Zpow_cos_sinr   r   Úrotate_pointr   ÚOner	   Zscalar_partr?   rH   Úis_purerI   r   r   r}   r   r€   r   Zindex_vectorZmensorr>   ©r4   r*   )rq   r`   r;   r,   Útest_quaternion_functions…   s    0>@RP
   ÿ   ÿýÿ
ýÿ
&&&ýÿ
(,ÿ
*&&@"
ý0       ýý
  ÿÿ
  ÿÿ
ýý
(((((( ý&$$r   c               
   C   sx  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\t‚|  ¡ 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¾t‚|  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sJt‚tddd}t t|d ƒddt|d ƒƒ}t| ¡ ƒtt|ƒt|ƒ dgt|ƒt|ƒdgdddggƒks¸t‚| ¡ ddt|d ƒtt|d ƒƒ fdtt|d ƒƒ fksüt‚t| d¡ƒtt|ƒt|ƒ dt|ƒt|ƒ d gt|ƒt|ƒdt|ƒ t|ƒ d gddddgddddggƒkstt‚d S )Nr#   r!   r"   rL   rl   rm   rh   é   r]   rd   rM   rG   rZ   ÚthetaTrW   r   )r   Úto_axis_angler   r   r0   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sNt‚d S )NT)Zhomogeneousr!   F)	r   r'   r(   r/   r)   rB   r:   r   r0   )r4   rC   rD   r*   r*   r,   Ú test_rotation_matrix_homogeneous!  s    r’   c                  C   sd   t ttd ƒttd ƒddƒ} t|  ¡ ƒtdddgdttƒttƒ gdttƒttƒggƒks`t‚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   r#   N)r   r   r    r   r   rB   r   r0   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`t‚t  tdƒ| ¡t ddt  ddt  dddt  ƒksšt‚| d¡t ddddƒks¶t‚| |¡t dt d dt d ddt  td ƒksît‚| |¡|| kst‚tddd}t t	|ƒt
|ƒddƒ}t tdddŽ }|| || ksNt‚|| || ksdt‚d S )Nr"   rL   r!   rZ   r   rN   r[   Fr\   r#   r{   r|   é   é   é    rx   rw   r_   r‚   r)   TrU   zq:4rW   )r   r   r/   Z_generic_mulr   rŠ   r0   Ú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sft‚t ddddƒ} tdƒ d tdƒ d tdƒ d f}dt	 d }||f|  ¡ ks¼t‚d S )Nr   c                      s   dˆ  S )Nr#   r*   r*   rg   r*   r,   r-   O  r.   z"test_issue_16318.<locals>.<lambda>r#   r!   r"   rL   rG   rZ   rN   rd   )
r   r   r3   r   r‰   r   rŠ   r0   r   r   )r4   rH   rI   r*   rg   r,   Útest_issue_16318L  s    ,(r™   c                  C   sh   t ttttƒ} |  ¡ }ddddg}|dd„ |D ƒ7 }|D ]*}|  |¡}tt  ||¡ƒ}||ks8t	‚q8d S )NZzxyÚzyxÚzyzZzxzc                 S   s   g | ]}|  ¡ ‘qS r*   )Úupper)Ú.0Úseqr*   r*   r,   Ú
<listcomp>`  s     z!test_to_euler.<locals>.<listcomp>)
r   r'   r(   r/   r)   r„   Úto_eulerr   Ú
from_eulerr0   )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s2t‚dS )z_
    There was a mistake in the degenerate case testing
    See issue 24504 for reference.
    r   r›   Tre   N)r   r¡   r    r   r    r0   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t‚d S r&   )r   r¡   r    r0   )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 ]x}t |ƒD ]j}dD ]`}|rJd |d |d |d g¡‰ n
d |¡‰ tdddgd	d
D ]}t|Ž }| ¡ sf| |ƒ qfq$qqd S )Nc                    sb   t |  ˆ dd¡ƒ}t |  ˆ dd¡ƒ}t|| ƒ ¡ }|D ]$}|t dt  t }|dk s8t‚q8d S )NTFr!   gíµ ÷Æ°>)r   r    r   rb   r   r0   )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#   rd   rL   )Ú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(   r/   r)   r    r8   r<   r@   rE   rK   rT   ra   rc   r   r‘   r’   r“   r˜   r™   r¢   r£   r¥   r¬   r*   r*   r*   r,   Ú<module>   sF    
!v&	