
    g=@                        d dl mZ 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+Z+d dl,m-Z-m.Z.  ed          \  Z/Z0Z1Z2 ed          Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z>d  Z?d! Z@d" ZAd# ZBd$ ZCed%             ZDd& ZEd' ZFed(             ZGdS ))    )slow)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)raisesN)permutationsproductzw:zphic                     t          t          t          t          t                    } | | z   t          dt          z  dt          z  dt          z  dt          z            k    sJ t          j        t          d          dz  t          d          dz  t          d          dz  ft          t          dd          z            }|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          j        |                    }|t          t          d          t          t          t                    dz             z  dz  ddt          ddt          t                    z  z
            t#          t          t                              z  dz            k    sJ t%          dd          t'          t(          fd	           d S )
N      r   r   r      r'   ncFcommutativec                  F    t          t          t           t                    S N)r   wxz)r(   s   `/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/algebras/tests/test_quaternion.py<lambda>z.test_quaternion_construction.<locals>.<lambda>&   s    z!QA66     )r   r-   r.   yr/   from_axis_angler   r	   r   r
   Halfr   r   r"   r   r   from_rotation_matrixr   r   r   
ValueError)qq2Mq3r(   s       @r0   test_quaternion_constructionr<      s   1aAAq5JqsAaC1ac222222		#T!WWQYQ	47719$E$&x1~~$5
7 
7BAFAFFAF, , , , , , 	SCHH9a(3s88SXXq*A999MNNA	*1!44	5	5BQSXX\"""1$aDQs3xxZ,@,@c#hh,OPQ,QS S S S S S 
%	(	(	(B
:666677777r2   c                     t          t          d           } t          t          t          t          t
                    }t          | |z                                  dz  |                                 dz  |                                dz  z  z
            dk    sJ t          t          t          t          t
          d          }| |z                                  |                                 k    sJ d S )Na:dr$   r   r'   )norm)r   r   r-   r.   r3   r/   r   r?   )q1r9   r;   s      r0   !test_quaternion_construction_normrA   )   s    	WU^^	$B	Aq!Q		B2b5,,..!#rwwyy!|bggiil'BCDDIIII	Aq!QQ	'	'	'BG>>rwwyy((((((r2   c                      t          dddd          } t          j        ddt          j        z  dz            }|                                }|| z  |z  }|| z
                                  dk     sJ d S )Nr'   r   r'   r'   r'   r%      g|=)r   r4   mathr	   inverser?   )pr8   qitests       r0   test_issue_25254rJ   3   sr     	1aAA"9a$'k!m<<A	
Bq52:DAXOO%%%%%%r2   c                  t   t          t          t          t          t                    } t          j        |                                           }t          j        |                     d                    }| |z
                                  sJ |                                 |z
                                  sJ d S )NT)	r   r-   r.   r3   r/   from_Matrix	to_Matrixis_zero_quaternionvector_part)r8   q_fullq_vects      r0   test_to_and_from_MatrixrR   =   s    1aAA#AKKMM22F#AKK$5$566FJ**,,,,,MMOOf$88:::::::r2   c                     t          t          t          t          t                    } t          t          d           }| |z                                  | j        |                                z  k    sJ | |z                                  |j        |                                 z  k    sJ | j        | j        j	        z  dd dd f         }t          |                                 |                                 dz  z            }||k    sJ d S )Nr>   r'   r$   )r   r-   r.   r3   r/   r   rM   product_matrix_leftproduct_matrix_rightTr   to_rotation_matrixr?   )r@   r9   R1R2s       r0   test_product_matricesrZ   E   s    	Aq!Q		B	genn	&BG  B$:R\\^^$KKKKKG  B$;bllnn$LLLLL

 2#:#<
<abb!""f	EB	"''))"''))Q,6	7	7B888888r2   c                     ddt           dz  t          d          dz  t          d          dz  ddffdt           dz  t          d          dz  dt          d          dz  dffdt           dz  t          d          dz  ddt          d          dz  ffdt           dfdt           dfdt           d	fd
t           ddt          d          z  dt          d          z  dt          d          z  fft          d          dz  t          d          dz  t          d          dz  ft           dz  dz  t          j        t          j        t          j        t          j        ffg	} | D ](\  }}}t	          j        ||          t	          | k    sJ )d S )N)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'   rC   r'   r%   )r	   r   r
   r5   r   r4   )	test_dataaxisangleexpecteds       r0   test_quaternion_axis_anglerc   P   sr    	%	BqD47719d1ggaiA67	BqD47719aaA67	BqD47719aDGGAI67	B%	B%	B%	BAd1ggIaQi$q''	:;
q''!)T!WWQYQ		*BqDFQVQVQVQV4TU
I "+ P PeX)$66*h:OOOOOOP Pr2   c                     t          j        dt          d                    } | j        t	          t          d          dz            k    sJ | j        t          d          t          t          d          dz            z  dz  k    sJ | j        t          d          t          t          d          dz            z  dz  k    sJ | j	        dt          d          z  t          t          d          dz            z  dz  k    sJ d S )N)r'   r$   r%   rD   r$         r%   )
r   r4   r   ar   br   r   cd)results    r0   )test_quaternion_axis_angle_simplificationrl   b   s    '	477;;F8s47719~~%%%%8tBxxDGGAI.r111118tBxxDGGAI.q000008qbz#d1ggai..03333333r2   c            
         t          dd          } t          dd          }t          dd          t          t          t          t          t
                    | z   t          t          t          |           z   t          t          |           z   t          t
                    k    sJ d	z   t          d	t          z   t          t          t
                    k    sJ t          z   t          t          d	t          z   t          t
                    k    sJ |z   t          t          |z   t          t          t
                    k    sJ t          t          fd
           t          t          fd           t          t          fd            t          t           t           t           t
                     k    sJ t          ddt          z  z   ddt          z  z   dddt          z  z   d          }t          d	ddd          }|ddt          z  z   z   t          ddt          z  z   ddt          z  z   dddt          z  z             k    sJ |ddt          z  z   z   t          dddd          k    sJ |ddt          z  z   z  t          ddt          z  z   ddt          z  z   z  ddt          z  z   ddt          z  z   z  dddt          z  z   ddt          z  z   z            k    sJ |ddt          z  z   z  t          dddd          k    sJ t          d	ddd          }t          dddd          }||z   |k    sJ ||z
  |k    sJ ||z
  |k    sJ d S )Nrg   Tcomplexrh   realri   Fr)   r'   c                       z   S r,    ri   r8   s   r0   r1   z7test_quaternion_complex_real_addition.<locals>.<lambda>t       q1u r2   c                       z  S r,   rs   rt   s   r0   r1   z7test_quaternion_complex_real_addition.<locals>.<lambda>u   ru   r2   c                       z  S r,   rs   rt   s   r0   r1   z7test_quaternion_complex_real_addition.<locals>.<lambda>v   ru   r2   r%   rD   r$      r   rf      
real_fieldi   &   )r   r   r-   r.   r3   r/   r   r   r   r   r7   )rg   rh   r@   r9   q0ri   r8   s        @@r0   %test_quaternion_complex_real_additionr   i   s   T"""A$A'''A1aAAq5Jq2a55y!bee)Q::::::q5Jq1uaA......q5Jq!a%A......q5Jq1uaA......
:}}}}}%%%
:}}}}}%%%
:}}}}}%%%2QBQB++++++	A!GQ1WaQqSu	E	E	EB	Aq!Q		BQqS>ZAaCQqS!Q1WEEEEEEQqS>Z1a333333QqS>AaC!ac'"Q1Wq1Q3w$7Q1Wq1Q3w<OPPQ Q Q QQqS>ZRR888888	Aq!Q		B	Aq!Q		B7b====7b====7b======r2   c                      t          j        dt                    } |                     t          d          t          dddd          k    sJ d S )Nr&   r   r'   )r   r4   r"   subsr8   s    r0   test_quaternion_subsr      sE    "9c22A66#q>>Z1a33333333r2   c            
      f   t          t          d          ddt          d                                                    t          t          d                                          ddt          d                                                    k    sJ t          dt          d          z  dddt          d          z                                            t          dt          d          z                                  dddt          d          z                                            k    sJ d S )Nr$   r   r%   r'   )r   r   evalfrs   r2   r0   test_quaternion_evalfr      s    tAww1d1gg..4466tAww}}1d1ggmmoo>>? ? ? ?qay!Q$q''	2288::$q''	((**Aq1T!WW92C2C2E2EFFG G G G G Gr2   c                  z#   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z  t          dz  z   t          dz  z   t          dz  z             k    sJ |                                 t          t          t          t          t                    t          t          dz  t          dz  z   t          dz  z   t          dz  z             z  k    sJ | 	                                t          t          t           t           t                     t          dz  t          dz  z   t          dz  z   t          dz  z   z  k    sJ | 	                                | 
                    d          k    sJ t          t          fd           | 
                    d          t          t          dz  t          dz  z
  t          dz  z
  t          dz  z
  dt          z  t          z  dt          z  t          z  dt          z  t          z            k    sJ | dz  t          t          dz  t          dz  z
  t          dz  z
  t          dz  z
  dt          z  t          z  dt          z  t          z  dt          z  t          z            k    sJ 
                    d          t          t          d	d
          t          dd
          t          dd          t          dd
                    k    sJ dz  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                                           t          t"          t%          t          d                    z  dt          d          z  t"          z  t'          t          d                    z  dz  dt          d          z  t"          z  t'          t          d                    z  dz  dt          d          z  t"          z  t'          t          d                    z  dz            k    sJ                                 t          t)          t          d                    dt          d          z  t+          t          d          dz            z  dz  dt          d          z  t+          t          d          dz            z  dz  dt          d          z  t+          t          d          dz            z  dz            k    sJ                     d          t          dt%          dt+          t          d          dz            z            z  dt          d          z  t'          dt+          t          d          dz            z            z  dz  dt          d          z  t'          dt+          t          d          dz            z            z  dz  dt          d          z  t'          dt+          t          d          dz            z            z  dz            k    sJ t/          t          t          t          t          t                    t                    t          dddd          k    sJ t1          t          t          t          t          t                    t                    t          t          dz  dz  t          dz  dz  t          dz  dz  t          dz  dz            k    sJ t          j        d          t4          j        dz  dt5          d          dz  fk    sJ t9          d          t          t          fd           t9          dd          t          t          f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    sJ                                 t          ddt          d          z  dz  dt          d          z  dz  dt          d          z  dz            k    sJ                                 
                    d          t          dddd          k    sJ                                                                 dk    sJ |                                 t          dt          t          t          dz  t          dz  z   t          dz  z             z  t          t          t          dz  t          dz  z   t          dz  z             z  t          t          t          dz  t          dz  z   t          dz  z             z            k    sJ                                  du sJ                                  du sJ t          dddd                                           du sJ t          ddd d                                           du sJ t          t          dd d                                           J !                                dtE          t          d                    z  k    sJ | !                                dtG          t          t          dz  t          dz  z   t          dz  z             t                    z  k    sJ t          j$        t          ddd!d                    du sJ t          j$        t          ddd"d#                    du sJ t          j$        t          ddd$d%                    du sJ t          j$        t          dddd                    du sJ t          j$        t          t          dd!d                    du sJ t          j$        t          dddd                    du sJ t          j$        t          t          t          t          t                              J t          t          fd&           t          j%        t          ddd$d%          t          ddd!d          t          dddd                    du sJ t          j%        t          dddd          t          ddd!d          t          dddd                    du sJ t          j%        t          dddd!          t          ddd!d!          t          dddd                    du sJ t          j%        t          dddd          t          ddt          d!          t          dd!dd                    	 J t          t          f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!                    J t          t          f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!                    J t          t          fd)           (                                t          ddt          d*          z  dz  dt          d*          z  dz  dt          d*          z  dz            k    sJ t          ddd+d          (                                t          ddd+d          k    sJ t          ddd+d          )                                t)          t          d,                    k    sJ t          dddd          )                                t)          t          d                    k    sJ *                                du sJ *                                du sJ t          t          ddd          *                                J d S )-Nr'   r$   r%   rD   r   c                  ,                                      S r,   rF   r   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>   s    rzz|| r2   i            c                       dz  S )Nr   rs   )r@   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>   s    b4j r2         <   Z   x   rC   rx   rf   nc                       z  S r,   rs   r   r@   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>       b!e r2   T)integerc                       z  S r,   rs   r   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>   r   r2         7   ry   F
            c                  .    t          j                   S r,   )r   arc_coplanarr   r@   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>   s    z6r2>> r2   c            	      P    t          j         t          dddd                    S )Nr   rD   r   ry   )r   vector_coplanarr   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>   s(    "2z!Q1'='=rBB r2   c                  .                                    S r,   )parallelr   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>   s    r{{2 r2   c                  .                                    S r,   )
orthogonalr   s   r0   r1   z+test_quaternion_functions.<locals>.<lambda>   s    r}}R00 r2   if  	   z   )+r   r-   r.   r3   r/   r   r?   r   	normalizerF   powr   r7   r   NotImplemented	TypeErrorexpr   r   r   r   r   pow_cos_sinr   r   rotate_pointr
   Oner   scalar_partrO   r`   is_purera   r   r   r   r   r   r   index_vectormensorrN   )r8   r   r   r@   s    @@@r0   test_quaternion_functionsr      s   1aAA	Aq!Q		B	Aq!Q		BQ<<:a!aR!4444446688tAqD1a4K!Q$.A5666666;;==Jq!Q22T!Q$A+1:LqRSt:S5T5TTTTTT99;;*QQB33q!tad{QT7IAqD7PQQQQQ99;;!%%))####
:++++,,,5588z!Q$A+1"4q!t";QqSUAaCE1Q3q5QQQQQQq6Z1q!tad 2QT 91Q3q5!A#a%1QOOOOOO66"::S8B,,hr3.?.?"cARART T T T T T8zS8B,,hr3.?.?"cARART T T T T T66$<<>))))
9(((()))6688q3tBxx== 488|a#d2hh--/"4488|a#d2hh--/"4488|a#d2hh--/"46 66 6 6 6
 6688s488}}488|d488B;///"4488|d488B;///"4488|d488B;///"46 66 6 6 6 >>!rCDb"---...DHH}s1tDHHRK'8'8#8999B>DHH}s1tDHHRK'8'8#8999B>T"XX~AT"XXb[(9(9$9 : ::R?A AA A A A 
1aA&&**jAq!.D.DDDDDZ1a++Q//q!taxA1a4!8QTAX667 7 7 7 "9b11aeaiAaDD1H5MMMMMsA
9mmmmm$$$sD!!!A
9mmmmm$$$b"b!$$0022b8888aAq!!--//14444b"b!$$0022jBA6N6NNNNNaAq!!--//:aAq3I3IIIII7799
1aRjmQtBxxZ]Ad2hhJrMRRRRRR7799==z"aA6666667799  ""a''''FFHH
1#$T!Q$A+1*<%=%=#=#$T!Q$A+1*<%=%=#=#$T!Q$A+1*<%=%=#=? ? ? ? ? ?
 ::<<4::<<5    aAq!!))++t3333aB""**,,4444aB""**,,44488::4R>>)))))7799%QTAqD[1a4%7 8 8!<<<<<<<"2z!Q1'='=>>$FFFF"2z!RR'@'@AATIIII"2z!QB'?'?@@DHHHH"2z!Q1'='=>>$FFFF"2z!Q1'='=>>$FFFF"2z!Q1'='=>>%GGGG"2z!Q1'='=>>FFF
:>>>>>???%1aR  1aA1aA    $(( ( ( ( %1aA
1aA 6 6
1aA8N8NP PSWX X X X%1aA
1aA 6 6
1aA8N8NP PSXY Y Y Y%1aA1aA1aA    $(( ( ( : C C C C C D D D aAq!!**:aAq+A+ABBdJJJJaAq!!**:aAq+A+ABBeKKKKaAq!!**:aAq+A+ABBJJJ
:.....///aAq!!,,Z2q!-D-DEEMMMMaAq!!,,Z1a-C-CDDMMMMaAq!!,,Z1a-C-CDDLLL
:00000111??
	1T#YY;r>	$s))B	$s))B! !     aAq!!..00Jq!Q4J4JJJJJaAq!!((**c$s))nn<<<<aAq!!((**c$r((mm;;;;  ""d****  ""e++++aAq!!4466>>>>>r2   c                  N   t          dddd          } |                                 dt          d          z  dz  dt          d          z  dz  dt          d          z  dz  fdt          t          d          dz            z  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          }t          t          |dz            ddt          |dz                      }t          |                                          t          t          |          t          |           dgt          |          t          |          dgg dg          k    sJ |                                ddt          |dz            t          t          |dz                      z  fdt          t          |dz                      z  fk    sJ t          |                    d                    t          t          |          t          |           dt          |          t          |          z
  dz   gt          |          t          |          dt          |           t          |          z
  dz   gg dg dg          k    sJ d S )Nr'   r$   r%   rD   r   r   r      r|   r   re   rC   rx   thetaTrp   r   r&   r]   r^   )r   to_axis_angler   r   rW   r   r   r
   Zeror   r   r   r   r   r   )r@   r   r9   s      r0   test_quaternion_conversionsr     s   	Aq!Q		B1tBxx<?#$tBxx<?#$tBxx<?#4 $%tDHHRK'8'8#8": : : : :
 !!##Xb!__hq"ooxB7G7GHa^^Xb!__hq!nnEa^^Xb"%5%5x2GI J JJ J J J
 !!),,"a(1b//8B3C3CXaQR^^T!Q"a(1a..!&I!Q"b!1!18Ar??HRQROOT/	1 2 22 2 2 2 G$'''E	CaLL!QE!G	5	5BB))++,,03E

SZZK/K03E

SZZ/K/K/K/K8M 1N 1N N N N N
 1aU1Wc#eAg,,6G6G)G"H#$T#eAg,,%7%7#7"9 9 9 9 9 B)))4455E

SZZKCJJU,Ca,GHE

SZZSZZK#e**,Dq,HI//////	A1 :2 :2 2 2 2 2 2 2r2   c                  4   t          t          t          t          t                    } |                     d          |                                 dz  z  }t          |                     d          |                                 dz  z            }||k    sJ d S )NT)homogeneousr$   F)r   r-   r.   r3   r/   rW   r?   r   )r8   rX   rY   s      r0    test_rotation_matrix_homogeneousr   2  s|    1aAA	
		$		/	/!&&((A+	=B	!&&5&99AFFHHaKG	H	HB888888r2   c            
         t          t          t          dz            t          t          dz            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   r\   N)r   r   r"   r   r   rW   r   r   s    r0    test_quaternion_rotation_iss1593r   9  s     	3s1u::s3q5zz1a00AA((**++v(((CHHs3xxi(CHHs3xx(7* 0+ 0+ + + + + + +r2   c            	         t          ddt          z  z   ddt          z  z   dddt          z  z   d	          } t          d
ddd          }t          d
d
d
t                    }t          j        t	          d          t          j                  dk    sJ t          j        t	          d          |           t          ddt          z  z   ddt          z  z   dddt          z  z             k    sJ |                    d          t          dddd          k    sJ |                    |          t          dt          z  dz
  dt          z  dz
  ddt          z  z
  t          dz             k    sJ |                    |          ||z  k    sJ t          dd          }t          t          |          t          |          dd          }t          t          dd           }||z  ||z  k    sJ ||z  ||z  k    sJ d S )Nr%   rD   r$   rx   r   rf   ry   Frz   r'   r   r             r   r   r~   r   r/   Trn   zq:4rp   )
r   r   r3   _generic_mulr
   r   mulr   r   r   )r@   r9   r;   r/   z_quatr8   s         r0   test_quaternion_multiplicationr   I  s   	A!GQ1WaQqSu	E	E	EB	Aq!Q		B	Aq!Q		B"1Q44//14444#AaDD"--rBqDy!bd(ArBqDy99: : : :66!99
1aB//////66"::BqD1HacAgq1Q3wAFFFFFF66"::BT"""A1r!uua++FGE---.Aq5FQJq5AJr2   c                     t          dddd          t          t          fd           t          dddd          } |                                 \  }}t          j        d||f          t
          j        dz  dt          d	          dz  fk    sJ t          d
ddd          } t          d           dz  t          d           dz  t          d           dz  f}dt          z  dz  }||f|                                 k    sJ d S )Nr   c                      d z  S )Nr'   rs   r   s   r0   r1   z"test_issue_16318.<locals>.<lambda>`  s    qt r2   r'   r$   r%   rD   rC   rx   rf   r   )	r   r   r7   r   r   r
   r   r   r	   )r8   r`   ra   r   s      @r0   test_issue_16318r   ]  s   	Aq!Q		B
:||||$$$1aAAOO%%MT5"9tUm<<AqQRttVWx@XXXXX2q!QA!WWHQJa
T!WWHQJ/DbDFE%=AOO--------r2   c                  (   t          t          t          t          t                    } |                                 }g d}|d |D             z  }|D ]A}|                     |          }t          t          j        ||                    }||k    sJ Bd S )N)zxyzyxzyzzxzc                 6    g | ]}|                                 S rs   )upper).0seqs     r0   
<listcomp>z!test_to_euler.<locals>.<listcomp>r  s     )))SSYY[[)))r2   )	r   r-   r.   r3   r/   r   to_eulerr   
from_euler)r8   q_normalizedseqsr   euler_from_qq_backs         r0   test_to_eulerr   l  s    1aAA;;==L'''D))D))))D & &zz#*/cBBCC%%%%%& &r2   c                      t          j        t          ddfd          } t          |                     d          d          t          ddfk    sJ dS )z_
    There was a mistake in the degenerate case testing
    See issue 24504 for reference.
    r   r   Tr   N)r   r   r"   r   r   r   s    r0   test_to_euler_iss24504r   z  sR    
 	sAqk511AAJJu%%t444aCCCCCCr2   c                     d }  | t           dz  ddfd            | t           dz  ddfd            | t           dz  t           dfd            | t           dz  t           dfd            | t           dz  t           dz  dfd            | t           dz  t            dz  dfd            | t           dz  t           dz  dfd            | t           dz  t            dz  dfd           d S )Nc                 f    t          j        | |          }|                    |          | k    sJ d S r,   )r   r   r   )anglesr   r8   s      r0   test_one_casez<test_to_euler_numerical_singilarities.<locals>.test_one_case  s5    !&#..zz#&((((((r2   r$   r   r   ZYZr   ZYX)r	   )r   s    r0   %test_to_euler_numerical_singilaritiesr     s   ) ) )
 M2a4!Q-'''M2a4!Q-'''M2a4"a.%(((M2a4"a.%((( M2a4"Q$"E***M2a42#a%#U+++M2a4"Q$"E***M2a42#a%#U+++++r2   c            	      J   fd} dD ]}t          |          D ]}dD ]}|r+d                    |d         |d         |d         g          nd                    |          t          g dd	          D ]*}t          | }|                                s | |           +d S )
Nc                 4   t          |                     dd                    }t          |                     dd                    }t          ||z
                                            }|D ]'}|t          z   dt          z  z  t          z
  }|dk     sJ (d S )NTFr$   gư>)r   r   r   r   r	   )r8   angles1angles2angle_errorsangle_errorr   s        r0   r   z,test_to_euler_options.<locals>.test_one_case  s    Ct4455C6677006688' 	' 	'K&+B7"<K&&&&&	' 	'r2   )xyzXYZ)TF r   r'   )r   r   r'   rD   )repeat)r    joinr!   r   rN   )r   r   	seq_tuple	symmetricelementsr8   r   s         @r0   test_to_euler_optionsr     s    ' ' ' ' '  ) )%c** 
	) 
	)I* 	) 	)	 -''9Q<1y|"LMMCC''),,C '


1 = = = ) )H"H-A//11 )%a((()	)
	)) )r2   )Hsympy.testing.pytestr   sympy.core.functionr   r   sympy.core.numbersr   r   r   r	   sympy.core.singletonr
   sympy.core.symbolr   r   $sympy.functions.elementary.complexesr   r   r   r   r   &sympy.functions.elementary.exponentialr   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   r   r   r   r   r   sympy.integrals.integralsr   sympy.matrices.denser   sympy.simplifyr   sympy.simplify.trigsimpr   sympy.algebras.quaternionr   r   rE   	itertoolsr    r!   r-   r.   r3   r/   r"   r<   rA   rJ   rR   rZ   rc   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r2   r0   <module>r     s   % % % % % % $ $ $ $ $ $ & & & & & & 3 3 3 3 3 3 3 3 3 3 3 3 " " " " " " / / / / / / / / O O O O O O O O O O O O O O 6 6 6 6 6 6 9 9 9 9 9 9 X X X X X X X X X X X X X X X X / / / / / / ' ' ' ' ' ' # # # # # # , , , , , , 0 0 0 0 0 0 ' ' ' ' ' '  + + + + + + + +WU^^
1agenn8 8 8$) ) )' ' '; ; ;  P P P$4 4 4  B4 4 4
H H Ht? t? t?l#2 #2 #2L  , , ,   (. . . 
& 
& 
&D D D, , ,& ) ) ) ) )r2   