
    \hA                        S SK Jr  S SKJr  S SKJr  S SKJrJrJrJ	r	  S SK
Jr  S SKJrJr  S SKJrJrJrJrJr  S SKJr  S S	KJr  S S
KJrJrJrJrJrJr  S SK J!r!  S SK"J#r#  S SK$J%r%  S SK&J'r'  S SK(J)r)  S SK J*r*  S SK+r+S SK,J-r-J.r.  \" S5      u  r/r0r1r2\" S5      r3S r4S r5S r6S r7S r8S r9S r:S r;S r<S r=S r>S  r?S! r@S" rAS# rBS$ rC\S% 5       rDS& rES' rF\S( 5       rGg))    )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                    ^ [        [        [        [        [        5      n X -   [        S[        -  S[        -  S[        -  S[        -  5      :X  d   e[         R
                  " [        S5      S-  [        S5      S-  [        S5      S-  4[        [        SS5      -  5      nU[        [        R                  [        R                  [        R                  [        R                  5      :X  d   e[        [        [        5      [        [        5      * S/[        [        5      [        [        5      S// SQ/5      n[        [         R                   " U5      5      nU[        [        S5      [        [        [        5      S-   5      -  S-  SS[        SS[        [        5      -  -
  5      [#        [        [        5      5      -  S-  5      :X  d   e[%        SSS9m['        [(        U4S	 j5        g )
N      r   r   r      r'   ncFcommutativec                  8   > [        [        [        T [        5      $ N)r   wxz)r(   s   \/var/www/auris/envauris/lib/python3.13/site-packages/sympy/algebras/tests/test_quaternion.py<lambda>.test_quaternion_construction.<locals>.<lambda>&   s    z!QA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=      su   1aAA5JqsAaC1ac2222		#	#T!WQYQ	4719$E$&x1~$5
7BAFFAFFFFAFF, , , , 	SCH9a(3s8SXq*A9MNA	*11!4	5BQSX\""1$aDQs3xZ,@c#h,OPQ,QS S S S 
%	(B
:67r3   c                     [        [        S5      6 n [        [        [        [        [
        5      n[        X-  R                  5       S-  U R                  5       S-  UR                  5       S-  -  -
  5      S:X  d   e[        [        [        [        [
        SS9nX-  R                  5       U R                  5       :X  d   eg )Na:dr$   r   r'   )norm)r   r   r-   r.   r4   r/   r   r@   )q1r:   r<   s      r0   !test_quaternion_construction_normrB   )   s    	WU^	$B	Aq!Q	B25,,.!#rwwy!|bggil'BCDIII	Aq!QQ	'BG>>rwwy(((r3   c                      [        SSSS5      n [         R                  " SS[        R                  -  S-  5      nUR	                  5       nX-  U-  nX0-
  R                  5       S:  d   eg )Nr'   r   r'   r'   r'   r%      g|=)r   r5   mathr	   inverser@   )pr9   qitests       r0   test_issue_25254rK   3   s_     	1aAA""9a$''k!m<A	
B52:DXOO%&%r3   c                  T   [        [        [        [        [        5      n [         R
                  " U R                  5       5      n[         R
                  " U R                  S5      5      nX-
  R                  5       (       d   eU R                  5       U-
  R                  5       (       d   eg )NT)	r   r-   r.   r4   r/   from_Matrix	to_Matrixis_zero_quaternionvector_part)r9   q_fullq_vects      r0   test_to_and_from_MatrixrS   =   sx    1aAA##AKKM2F##AKK$56FJ**,,,,MMOf$88::::r3   c                     [        [        [        [        [        5      n [        [        S5      6 nX-  R                  5       U R                  UR                  5       -  :X  d   eX-  R                  5       UR                  U R                  5       -  :X  d   eU R                  U R                  R                  -  SS 2SS 24   n[        U R                  5       U R                  5       S-  -  5      nX#:X  d   eg )Nr?   r'   r$   )r   r-   r.   r4   r/   r   rN   product_matrix_leftproduct_matrix_rightTr   to_rotation_matrixr@   )rA   r:   R1R2s       r0   test_product_matricesr[   E   s    	Aq!Q	B	gen	&BG B$:$:R\\^$KKKKG B$;$;blln$LLLL

 
 2#:#:#<#<
<ab!"f	EB	"'')"'')Q,6	7B8O8r3   c                     SS[         S-  [        S5      S-  [        S5      S-  SS44S[         S-  [        S5      S-  S[        S5      S-  S44S[         S-  [        S5      S-  SS[        S5      S-  44S[         S4S[         S4S[         S	4S
[         SS[        S5      -  S[        S5      -  S[        S5      -  44[        S5      S-  [        S5      S-  [        S5      S-  4[         S-  S-  [        R                  [        R                  [        R                  [        R                  44/	n U  H(  u  pn[        R
                  " X5      [	        U6 :X  a  M(   e   g )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'   rD   r'   r%   )r	   r   r
   r6   r   r5   )	test_dataaxisangleexpecteds       r0   test_quaternion_axis_anglerd   P   sE    	%	BqD4719d1gaiA67	BqD4719aaA67	BqD4719aDGAI67	B%	B%	B%	BAd1gIaQi$q'	:;
q'!)T!WQYQ		*BqDFQVVQVVQVVQVV4TU
I "+X))$6*h:OOOO "+r3   c                     [         R                  " S[        S5      5      n U R                  [	        [        S5      S-  5      :X  d   eU R
                  [        S5      [        [        S5      S-  5      -  S-  :X  d   eU R                  [        S5      [        [        S5      S-  5      -  S-  :X  d   eU R                  S[        S5      -  [        [        S5      S-  5      -  S-  :X  d   eg )N)r'   r$   r%   rE   r$         r%   )
r   r5   r   ar   br   r   cd)results    r0   )test_quaternion_axis_angle_simplificationrm   b   s    ''	47;F88s4719~%%%88tBxDGAI.r111188tBxDGAI.q000088qbz#d1gai.03333r3   c            
        ^^ [        SSS9n [        SSS9n[        SSS9m[        [        [        [        [
        5      mU T-   [        [        [        U 5      -   [        [        U 5      -   [        [
        5      :X  d   eS	T-   [        S	[        -   [        [        [
        5      :X  d   e[        T-   [        [        S	[        -   [        [
        5      :X  d   eUT-   [        [        U-   [        [        [
        5      :X  d   e[        [        UU4S
 j5        [        [        UU4S j5        [        [        UU4S j5        T* [        [        * [        * [        * [
        * 5      :X  d   e[        SS[        -  -   SS[        -  -   SSS[        -  -   SS9n[        S	SSS5      nUSS[        -  -   -   [        SS[        -  -   SS[        -  -   SSS[        -  -   5      :X  d   eUSS[        -  -   -   [        SSSS5      :X  d   eUSS[        -  -   -  [        SS[        -  -   SS[        -  -   -  SS[        -  -   SS[        -  -   -  SSS[        -  -   SS[        -  -   -  5      :X  d   eUSS[        -  -   -  [        SSSS5      :X  d   e[        S	SSS5      n[        SSSS5      nX$-   U:X  d   eX$-
  U:X  d   eX"-
  U:X  d   eg )Nrh   Tcomplexri   realrj   Fr)   r'   c                     > T T-   $ r,    rj   r9   s   r0   r1   7test_quaternion_complex_real_addition.<locals>.<lambda>t   	    q1ur3   c                     > TT -  $ r,   rt   ru   s   r0   r1   rv   u   rw   r3   c                     > T T-  $ r,   rt   ru   s   r0   r1   rv   v   rw   r3   r%   rE   r$      r   rg      
real_fieldi   &   )r   r   r-   r.   r4   r/   r   r   r   r   r8   )rh   ri   rA   r:   q0rj   r9   s        @@r0   %test_quaternion_complex_real_additionr   i   s   T"A$A'A1aAAq5Jq2a5y!be)Q::::q5Jq1uaA....q5Jq!a%A....q5Jq1uaA....
:}%
:}%
:}%2QBQB++++	A!GQ1WaQqSu	EB	Aq!Q	BQqS>ZAaCQqS!Q1WEEEEQqS>Z1a3333QqS>AaC!ac'"Q1Wq1Q3w$7Q1Wq1Q3w<OPQ Q QQqS>ZRR8888	Aq!Q	B	Aq!Q	B7b==7b==7b==r3   c                      [         R                  " S[        5      n U R                  [        S5      [        SSSS5      :X  d   eg )Nr&   r   r'   )r   r5   r"   subsr9   s    r0   test_quaternion_subsr      s7    ""9c2A66#q>Z1a3333r3   c            
         [        [        S5      SS[        S5      5      R                  5       [        [        S5      R                  5       SS[        S5      R                  5       5      :X  d   e[        S[        S5      -  SSS[        S5      -  5      R                  5       [        S[        S5      -  R                  5       SSS[        S5      -  R                  5       5      :X  d   eg )Nr$   r   r%   r'   )r   r   evalfrt   r3   r0   test_quaternion_evalfr      s    tAw1d1g.446tAw}}1d1gmmo>? @ ?qay!Q$q'	288:$q'	((*Aq1T!W92C2C2EFG H Gr3   c                     ^^^ [        [        [        [        [        5      n [        SSSS5      m[        SSSS5      m[        U 5      [        [        [        * [        * [        * 5      :X  d   eU R                  5       [        [        S-  [        S-  -   [        S-  -   [        S-  -   5      :X  d   eU R                  5       [        [        [        [        [        5      [        [        S-  [        S-  -   [        S-  -   [        S-  -   5      -  :X  d   eU R                  5       [        [        [        * [        * [        * 5      [        S-  [        S-  -   [        S-  -   [        S-  -   -  :X  d   eU R                  5       U R                  S5      :X  d   e[        [        U4S j5        U R                  S5      [        [        S-  [        S-  -
  [        S-  -
  [        S-  -
  S[        -  [        -  S[        -  [        -  S[        -  [        -  5      :X  d   eU S-  [        [        S-  [        S-  -
  [        S-  -
  [        S-  -
  S[        -  [        -  S[        -  [        -  S[        -  [        -  5      :X  d   eTR                  S5      [        [        S	S
5      [        SS
5      [        SS5      [        SS
5      5      :X  d   eTS-  [        [        S	S
5      [        SS
5      [        SS5      [        SS
5      5      :X  d   eTR                  S5      [        :X  d   e[        [        U4S j5        TR!                  5       [        ["        [%        [        S5      5      -  S[        S5      -  ["        -  ['        [        S5      5      -  S-  S[        S5      -  ["        -  ['        [        S5      5      -  S-  S[        S5      -  ["        -  ['        [        S5      5      -  S-  5      :X  d   eTR)                  5       [        [)        [        S5      5      S[        S5      -  [+        [        S5      S-  5      -  S-  S[        S5      -  [+        [        S5      S-  5      -  S-  S[        S5      -  [+        [        S5      S-  5      -  S-  5      :X  d   eTR-                  S5      [        S[%        S[+        [        S5      S-  5      -  5      -  S[        S5      -  ['        S[+        [        S5      S-  5      -  5      -  S-  S[        S5      -  ['        S[+        [        S5      S-  5      -  5      -  S-  S[        S5      -  ['        S[+        [        S5      S-  5      -  5      -  S-  5      :X  d   e[/        [        [        [        [        [        5      [        5      [        SSSS5      :X  d   e[1        [        [        [        [        [        5      [        5      [        [        S-  S-  [        S-  S-  [        S-  S-  [        S-  S-  5      :X  d   e[        S[        [        S-  [        S-  5      R1                  [        5      [        [        [        S-  S-  [        S-  S-  [        S-  S-  5      :X  d   e[        ['        [        5      [%        [        5      ['        S[        -  5      [%        S[        -  5      5      R1                  [        5      [        [%        [        5      * ['        [        5      [%        S[        -  5      * S-  ['        S[        -  5      S-  5      :X  d   e[        [        S-  [        S-  [        S-  [        [        -  [        -  5      R1                  [        [        5      [        [        S-  [        -  S-  [        [        S-  -  S-  [        [        -  [        S-  -  [        S-  [        S-  -  [        -  S-  5      :X  d   e[         R2                  " ST5      [4        R6                  S-  S[5        S5      S-  4:X  d   e[9        S5      m[        [        UU4S j5        [9        SSS9m[        [        UU4S j5        [        SSSS5      R;                  5       S:X  d   e[        [        [        [        [        5      R;                  5       [        :X  d   e[        SSSS5      R=                  5       [        SSSS5      :X  d   e[        [        [        [        [        5      R=                  5       [        S[        [        [        5      :X  d   eTR?                  5       [        SS[        S5      -  S-  S[        S5      -  S-  S[        S5      -  S-  5      :X  d   eTR?                  5       R                  S5      [        SSSS5      :X  d   eTR?                  5       R;                  5       S:X  d   eU R?                  5       [        S[        [        [        S-  [        S-  -   [        S-  -   5      -  [        [        [        S-  [        S-  -   [        S-  -   5      -  [        [        [        S-  [        S-  -   [        S-  -   5      -  5      :X  d   eTRA                  5       SL d   eTRA                  5       SL d   e[        SSSS5      RA                  5       SL d   e[        SSS S5      RA                  5       SL d   e[        [        SS S5      RA                  5       b   eTRC                  5       S[E        [        S5      5      -  :X  d   eU RC                  5       S[G        [        [        S-  [        S-  -   [        S-  -   5      [        5      -  :X  d   e[         RH                  " T[        SSS!S5      5      SL d   e[         RH                  " T[        SSS"S#5      5      SL d   e[         RH                  " T[        SSS$S%5      5      SL d   e[         RH                  " T[        SSSS5      5      SL d   e[         RH                  " T[        [        SS!S5      5      SL d   e[         RH                  " T[        SSSS5      5      SL d   e[         RH                  " T[        [        [        [        [        5      5      b   e[        [        UU4S& j5        [         RJ                  " [        SSS$S%5      [        SSS!S5      [        SSSS5      5      SL d   e[         RJ                  " [        SSSS5      [        SSS!S5      [        SSSS5      5      SL d   e[         RJ                  " [        SSSS!5      [        SSS!S!5      [        SSSS5      5      SL d   e[         RJ                  " [        SSSS5      [        SS[        S!5      [        SS!SS5      5       b   e[        [        UU4S' j5        [        SSSS5      RM                  [        SSSS!5      5      SL d   e[        SSSS5      RM                  [        SSSS!5      5      SL d   e[        SSSS5      RM                  [        [        [        [        S!5      5      b   e[        [        UU4S( j5        [        SSSS5      RO                  [        SSSS5      5      SL d   e[        SSSS5      RO                  [        SSSS!5      5      SL d   e[        SSSS5      RO                  [        [        [        [        S!5      5      b   e[        [        UU4S) j5        TRQ                  5       [        SS[        S*5      -  S-  S[        S*5      -  S-  S[        S*5      -  S-  5      :X  d   e[        SSS+S5      RQ                  5       [        SSS+S5      :X  d   e[        SSS+S5      RS                  5       [)        [        S,5      5      :X  d   e[        SSSS5      RS                  5       [)        [        S5      5      :X  d   eTRU                  5       SL d   eTRU                  5       SL d   e[        [        SSS5      RU                  5       b   eg )-Nr'   r$   r%   rE   r   c                  $   > T R                  5       $ r,   rG   r   s   r0   r1   +test_quaternion_functions.<locals>.<lambda>   s    rzz|r3   i            c                     > T S-  $ )Nr   rt   )rA   s   r0   r1   r      s	    b4jr3         <   Z   x   rD   rz   rg   nc                     > TT -  $ r,   rt   r   rA   s   r0   r1   r      	    b!er3   T)integerc                     > TT -  $ r,   rt   r   s   r0   r1   r      r   r3         7   r{   F
            c                  2   > [         R                  " TT 5      $ r,   )r   arc_coplanarr   rA   s   r0   r1   r      s    z66r2>r3   c            	      L   > [         R                  " T [        SSSS5      T5      $ )Nr   rE   r   r{   )r   vector_coplanarr   s   r0   r1   r      s     ""2z!Q1'=rBr3   c                  &   > T R                  T5      $ r,   )parallelr   s   r0   r1   r     s    r{{2r3   c                  &   > T R                  T5      $ r,   )
orthogonalr   s   r0   r1   r     s    r}}R0r3   if  	   z   )+r   r-   r.   r4   r/   r   r@   r   	normalizerG   powr   r8   r   NotImplemented	TypeErrorexpr   r   r   r   r   pow_cos_sinr   r   rotate_pointr
   Oner   scalar_partrP   ra   is_purerb   r   r   r   r   r   r   index_vectormensorrO   )r9   r   r   rA   s    @@@r0   test_quaternion_functionsr      s   1aAA	Aq!Q	B	Aq!Q	BQ<:a!aR!4444668tAqD1a4K!Q$.A56666;;=Jq!Q2T!Q$A+1:LqRSt:S5TTTTT99;*QQB3q!tad{QT7IAqD7PQQQQ99;!%%)###
:+,558z!Q$A+1"4q!t";QqSUAaCE1Q3q5QQQQq6Z1q!tad 2QT 91Q3q5!A#a%1QOOOO66":S8B,hr3.?"cART T T T8zS8B,hr3.?"cART T T T66$<>)))
9()668q3tBx= 48|a#d2h-/"448|a#d2h-/"448|a#d2h-/"466 6 6
 668s48}48|d48B;//"448|d48B;//"448|d48B;//"466 6 6 >>!rCDb"--..DH}s1tDHRK'8#899B>DH}s1tDHRK'8#899B>T"X~AT"Xb[(9$9 ::R?AA A A 
1aA&*jAq!.DDDDZ1a+Q/q!taxA1a4!8QTAX67 7 7 aAqD!Q$'11!4q!Q$q&!Q$q&!Q$q&)* * * c!fc!fc!A#hAaC9CCAFAwAQqS	!S1XaZ89 9 9 adAqD!Q$!A.88A>q!tAvax1a41Q3q!t8QT!Q$Yq[];< < < ""9b1aeeaiAaD1H5MMMMsA
9m$sD!A
9m$b"b!$002b888aAq!--/1444b"b!$002jBA6NNNNaAq!--/:aAq3IIII779
1aRjmQtBxZ]Ad2hJrMRRRR779==z"aA6666779  "a'''FFH
1#$T!Q$A+1*<%=#=#$T!Q$A+1*<%=#=#$T!Q$A+1*<%=#=? ? @ ?
 ::<4::<5   aAq!))+t333aB"**,444aB"**,44488:4R>))))779%QTAqD[1a4%7 8!<<<<<""2z!Q1'=>$FFF""2z!RR'@ATIII""2z!QB'?@DHHH""2z!Q1'=>$FFF""2z!Q1'=>$FFF""2z!Q1'=>%GGG""2z!Q1'=>FFF
:>?%%1aR 1aA1aA  $(( ( ( %%1aA
1aA 6
1aA8NPSWX X X%%1aA
1aA 6
1aA8NPSXY Y Y%%1aA1aA1aA  $(( ( ( : C D aAq!**:aAq+ABdJJJaAq!**:aAq+ABeKKKaAq!**:aAq+ABJJJ
:./aAq!,,Z2q!-DEMMMaAq!,,Z1a-CDMMMaAq!,,Z1a-CDLLL
:01??
	1T#Y;r>	$s)B	$s)B!    aAq!..0Jq!Q4JJJJaAq!((*c$s)n<<<aAq!((*c$r(m;;;  "d***  "e+++aAq!446>>>r3   c                     [        SSSS5      n U R                  5       S[        S5      -  S-  S[        S5      -  S-  S[        S5      -  S-  4S[        [        S5      S-  5      -  4:X  d   eU R	                  5       [        [        SS5      [        SS5      [        S	S5      /[        SS5      [        S
S5      [        SS5      /[        SS5      [        SS5      [        SS5      //5      :X  d   eU R	                  S5      [        [        SS5      [        SS5      [        S	S5      [        SS5      /[        SS5      [        S
S5      [        SS5      [        R                  /[        SS5      [        SS5      [        SS5      [        SS5      /[        R                  [        R                  [        R                  [        R                  //5      :X  d   e[        SSS9n[        [        US-  5      SS[        US-  5      5      n[        UR	                  5       5      [        [        U5      [        U5      * S/[        U5      [        U5      S// SQ/5      :X  d   eUR                  5       SS[        US-  5      [        [        US-  5      5      -  4S[        [        US-  5      5      -  4:X  d   e[        UR	                  S5      5      [        [        U5      [        U5      * S[        U5      [        U5      -
  S-   /[        U5      [        U5      S[        U5      * [        U5      -
  S-   // SQ/ SQ/5      :X  d   eg )Nr'   r$   r%   rE   r   r   r      r~   r   rf   rD   rz   thetaTrq   r   r&   r^   r_   )r   to_axis_angler   r   rX   r   r   r
   Zeror   r   r   r   r   r   )rA   r   r:   s      r0   test_quaternion_conversionsr     s   	Aq!Q	B1tBx<?#$tBx<?#$tBx<?#4 $%tDHRK'8#8": : : :
 !!#Xb!_hq"oxB7GHa^Xb!_hq!nEa^Xb"%5x2GI JJ K J
 !!),"a(1b/8B3CXaQR^T!Q"a(1a.!&&I!Q"b!18Ar?HRQROT/	1 22 3 2 G$'E	CaL!QE!G	5BB))+,03E
SZK/K03E
SZ/K/K8M 1N N N N
 1aU1Wc#eAg,6G)G"H#$T#eAg,%7#7"9 9 9 9 B)))45E
SZKCJU,Ca,GHE
SZSZK#e*,Dq,HI//	A1 :2 2 2 2r3   c                      [        [        [        [        [        5      n U R                  SS9U R                  5       S-  -  n[        U R                  SS9U R                  5       S-  -  5      nX:X  d   eg )NT)homogeneousr$   F)r   r-   r.   r4   r/   rX   r@   r   )r9   rY   rZ   s      r0    test_rotation_matrix_homogeneousr   ;  sd    1aAA	
		$		/!&&(A+	=B	!&&5&9AFFHaKG	HB8O8r3   c            
      0   [        [        [        S-  5      [        [        S-  5      SS5      n [	        U R                  5       5      [        / SQS[        [        5      [        [        5      * /S[        [        5      [        [        5      //5      :X  d   eg)a  
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   rX   r   r   s    r0    test_quaternion_rotation_iss1593r   B  sy     	3s1u:s3q5z1a0AA((*+v(CHs3xi(CHs3x(7* 0+ + , +r3   c            	      N   [        SS[        -  -   SS[        -  -   SSS[        -  -   SS	9n [        S
SSS5      n[        S
S
S
[        5      n[         R                  " [	        S5      [        R
                  5      S:X  d   e[         R                  " [	        S5      U 5      [        SS[        -  -   SS[        -  -   SSS[        -  -   5      :X  d   eUR                  S5      [        SSSS5      :X  d   eUR                  U5      [        S[        -  S-
  S[        -  S-
  SS[        -  -
  [        S-   5      :X  d   eUR                  U5      X-  :X  d   e[        SSS9n[        [        U5      [        U5      SS5      n[        [        SSS96 nX5-  XE-  :X  d   eXS-  XT-  :X  d   eg )Nr%   rE   r$   rz   r   rg   r{   Fr|   r'   r   r             r   r   r   r   r/   Tro   zq:4rq   )
r   r   r4   _generic_mulr
   r   mulr   r   r   )rA   r:   r<   r/   z_quatr9   s         r0   test_quaternion_multiplicationr   R  s   	A!GQ1WaQqSu	EB	Aq!Q	B	Aq!Q	B""1Q4/1444##AaD"-rBqDy!bd(ArBqDy9: ; :66!9
1aB////66":BqD1HacAgq1Q3wAFFFF66":T"A1r!ua+FGE-.A5FJ5AJr3   c                    ^ [        SSSS5      m[        [        U4S j5        [        SSSS5      n U R                  5       u  p[         R                  " SX45      [
        R                  S-  S[        S	5      S-  4:X  d   e[        S
SSS5      n [        S5      * S-  [        S5      * S-  [        S5      * S-  4nS[        -  S-  nX4U R                  5       :X  d   eg )Nr   c                     > ST -  $ )Nr'   rt   r   s   r0   r1   "test_issue_16318.<locals>.<lambda>i  s	    qtr3   r'   r$   r%   rE   rD   rz   rg   r   )	r   r   r8   r   r   r
   r   r   r	   )r9   ra   rb   r   s      @r0   test_issue_16318r   f  s    	Aq!Q	B
:|$1aAAOO%MT""9tm<AqQRtVWx@XXXX2q!QA!WHQJa
T!WHQJ/DbDFE=AOO----r3   c                  6   [        [        [        [        [        5      n U R                  5       n/ SQnX" Vs/ s H  o3R                  5       PM     sn-  nU H:  nU R                  U5      n[        [         R                  " XC5      5      nXQ:X  a  M:   e   g s  snf )N)zxyzyxzyzzxz)
r   r-   r.   r4   r/   r   upperto_eulerr   
from_euler)r9   q_normalizedseqsseqeuler_from_qq_backs         r0   test_to_eulerr   u  s|    1aAA;;=L'DD)DSYY[D))Dzz#*//BC%%%  *s   Bc                      [         R                  " [        SS4S5      n [        U R	                  S5      SS9[        SS4:X  d   eg)zS
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     s@    
 	sAqk51AAJJu%t4aCCCr3   c                     S n U " [         S-  SS4S5        U " [         S-  SS4S5        U " [         S-  [         S4S5        U " [         S-  [         S4S5        U " [         S-  [         S-  S4S5        U " [         S-  [         * S-  S4S5        U " [         S-  [         S-  S4S5        U " [         S-  [         * S-  S4S5        g )Nc                 ^    [         R                  " X5      nUR                  U5      U :X  d   eg r,   )r   r   r   )anglesr   r9   s      r0   test_one_case<test_to_euler_numerical_singilarities.<locals>.test_one_case  s(    !!&.zz#&(((r3   r$   r   r   ZYZr   ZYX)r	   )r   s    r0   %test_to_euler_numerical_singilaritiesr     s    )
 2a4!Q-'2a4!Q-'2a4"a.%(2a4"a.%( 2a4"Q$"E*2a42#a%#U+2a4"Q$"E*2a42#a%#U+r3   c            	      :  ^ U4S jn S H  n[        U5       H|  nS Hs  nU(       a  SR                  US   US   US   /5      mOSR                  U5      m[        / SQSS	9 H*  n[        U6 nUR	                  5       (       a  M"  U " U5        M,     Mu     M~     M     g )
Nc                   > [        U R                  TSS5      5      n[        U R                  TSS5      5      n[        X-
  5      R                  5       nU H%  nU[        -   S[        -  -  [        -
  nUS:  a  M%   e   g )NTFr$   gư>)r   r   r   r   r	   )r9   angles1angles2angle_errorsangle_errorr   s        r0   r   ,test_to_euler_options.<locals>.test_one_case  sv    Ct45C670668'K&+B7"<K&&& (r3   )xyzXYZ)TF r   r'   )r   r   r'   rE   )repeat)r    joinr!   r   rO   )r   r   	seq_tuple	symmetricelementsr9   r   s         @r0   test_to_euler_optionsr     s    ' %c*I*	''9Q<1y|"LMC''),C '
1 =H"H-A//11%a( !> + + r3   )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   rF   	itertoolsr    r!   r-   r.   r4   r/   r"   r=   rB   rK   rS   r[   rd   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r3   r0   <module>r     s    % $ & 3 3 " / O O 6 9 X X / ' # , 0 '  +U^
1aen8$)';P$4B4
H}?~#2L, (. 
& 
&D,& ) )r3   