+
    ,ifT                    6   ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	 ^ RI
Ht ^ RIHtHt ^ RIHtHtHtHtHtHtHt ^ RIHu Ht ^ RIt^ RIt]P:                  P=                  RR7      tR	 t R
 R lt!R t"R t#R t$R t%R t&R t'R t(R t)R t*R t+R t,R t-R t.R t/R t0R t1R t2R t3R t4R t5R  t6R! t7R" t8R# t9R$ t:R% t;R& t<R' t=R( t>R) t?R* t@R+ tAR, tBR- tCR. tDR/ tER0 tFR1 tGR2 tHR3 tIR4 tJR5 tKR6 tLR7 tMR8 tNR9 tOR: tPR; tQR< tRR= tSR> tTR? tUR@ tVRA tWRB tXRC tYRD tZRE t[RF t\RG t]RH t^RI t_]P:                  P                  RJ]! RK4      4      ]P:                  P                  RLR4      RM 4       4       ta]P:                  P                  RJ]! RK4      4      ]P:                  P                  RLR4      RN 4       4       tb]P:                  P                  ]P:                  P                  RJ]! RK4      4      ]P:                  P                  RLR4      RO 4       4       4       td]P:                  P                  ]P:                  P                  RJ]! RK4      4      ]P:                  P                  RLR4      RP 4       4       4       te]P:                  P                  ]P:                  P                  RJ]! RK4      4      ]P:                  P                  RLR4      RQ 4       4       4       tfRR tgRS thRT tiRU tjRV tkRW tlRX tmRY tnRZ to]P:                  P                  R[ 4       tpR\ tqR] trR^ tsR_ ttR` tuRa tvRb twRc txRd tyRe tzRf t{Rg t|Rh t}Ri t~Rj tRk tRl tRm tRn tRo tRp tRq tRr tRs tRt tRu tRv tRw tRx tRy tRz tR{ tR| tR} tR~ tR tR tR tRtR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t]P:                  P                  R 4       tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR# )    N)assert_equal)RotationSlerp)special_ortho_group)permutationsproduct)xp_assert_equalis_numpyis_lazy_arrayxp_vector_normxp_assert_closeeager_warnsxp_default_dtypeT)np_onlyc                 H    V R 8X  d   . RO# V R8X  d   . RO# V R8X  d   . RO# R# )xyzN   r   r   r   r   r   r   r   r    axiss   &M/usr/lib/python3/dist-packages/scipy/spatial/transform/tests/test_rotation.py	basis_vecr      s.    s{		 
    c                $    V ^8  d   QhR\         /# )   rr   )formats   "r   __annotate__r$   &   s     7 7h 7r   c                 h    \         P                  ! VP                  V P                  4       4      4      # )N)r   	from_quatasarrayas_quat)r!   xps   &&r   rotation_to_xpr*   &   s"    bjj566r   c                  6    \        R4       \        . RO4       R# r   Nr   r   r   r   r"   r   r   r   test_init_non_arrayr.   *   s    \\r   c                     V P                  . RO. RO.4      p\        P                  ! V4      pWP                  R.R..4      ,          p\        VP	                  4       V4       R# )      @      @g      *@Nr0      r   r   )      r   r   r'   r   r&   r   r(   r)   r   r!   expected_quats   &   r   test_generic_quat_matrixr9   /   sN    


NM23A1A

SED6?33MAIIK/r   c                     V P                  . RO4      p\        P                  ! V4      pV^,          p\        VP	                  4       V4       R# r0   Nr2   r6   r7   s   &   r   test_from_single_1d_quaternionr<   6   s9    


>"A1AEMAIIK/r   c                     V P                  . RO.4      p\        P                  ! V4      pV^,          p\        VP	                  4       V4       R# r;   r6   r7   s   &   r   test_from_single_2d_quaternionr>   =   s<    


N#$A1AEMAIIK/r   c                    \         P                  P                  ^ 4      p\        P                  ! V P                  . R
O4      RR7      p\        VP                  4       V P                  ^4      RRR7       V P                  V P                  . R
O4      R4      p\        P                  ! VRR7      p\        VP                  4       V P                  V P                  ^4      R4      RRR7       V P                  VP                  ^d^4      4      pV\        V^R7      R,          ,          p\        VP                  ^ ,          4       FQ  pW4R3,          p\        P                  ! VRR7      p\        V P                  VP                  4       ^4      VRR	7       KS  	  \        P                  ! VRR7      p\        V P                  VP                  4       ^^R7      VRR	7       R# )r   Tscalar_firstV瞯<缉ؗҜ<rtolatolr   N.rE   r   r   r   r   
   r   )rJ   r   r   NNNN)nprandomRandomStater   r&   r'   r   	as_matrixeyetilerandnr   rangeshaperollr(   r)   rngr!   qiqis   &     r   test_from_quat_scalar_firstr\   D   sY   
))


"C2::l3$GAAKKM266!95uE


<('2A140A	rwwrvvay*5E 	

399S!$%A	"7	++A1771:#vYr5		Q/%@ 
 	140ABGGAIIKG3QUCr   c                     \         P                  P                  ^{4      p \        P                  ! V R7      p\        P                  ! VP                  4       P                  4       4      pVP                  VRR7      '       g   Q h\        P                  ! ^V R7      p\        P                  ! VP                  4       P                  4       4      p\         P                  ! VP                  VRR7      4      '       g   Q hR# {   rX   -q=rF   N)	rM   rN   default_rngr   r&   r(   tolistapprox_equalallrX   
r_expectedr!   s      r   test_from_quat_array_likeri   [   s    
))


$CS)J:--/6689A""15"1111 ,J:--/6689A66*))!%)89999r   c                     \         P                  ! V P                  . RO4      4      pVP                  4       P                  \        V 4      8X  g   Q hR# )r   NrH   )r   r&   r'   r(   dtyper   r)   r!   s   & r   test_from_quat_int_dtyperm   h   s;    2::l34A99; 0 4444r   c           
         \         P                  P                  ^ 4      p\        P                  ! RV P                  ^4      4      p\        VP                  RR7      V P                  . RO4      RRR7       \        P                  ! RV P                  R4      4      p\        VP                  RR7      V P                  V P                  . RO4      R4      RRR7       V P                  VP                  ^d^4      4      pV\        V^R7      R,          ,          p\        VP                  ^ ,          4       F  pW4R	3,          p\        P                  ! V4      p\        VP                  RR7      V P                  V^4      RR
7       \        VP                  RRR7      V P                  VP                  RR7      ^4      RR
7       K  	  \        P                  ! V4      p\        VP                  RR7      V P                  V^^R7      RR
7       \        VP                  RRR7      V P                  VP                  RR7      ^^R7      RR
7       R# )r   xyzTr@   rB   rC   rD   r   N.rG   )	canonicalrA   rp   )      ?r   r   r   )rJ      rI   rK   )rM   rN   rO   r   
from_eulerzerosr   r(   r'   rR   rS   r   rT   rU   r&   rV   rW   s   &     r   test_as_quat_scalar_firstrv   m   s   
))


"CE288A;/AAII4I0"**^2LU, 	E288G#45AAII4I0GGBJJ~6@U, 	

399S!$%A	"7	++A1771:#vYr"		t	4bggb!n"	$ 			Dt	D		D	 91="	$  	1AAII4I0"''!QQ'2G  AII4I@GGAIII5qqGAOr   c           	          V P                  . RO. RO. RO. RO. RO. RO.4      p\        P                  ! V4      pWP                  R.^.^.^.^.^..4      ,          p\        VP	                  4       V4       R# )	r0   r1   N)r0   r   r   r3   r4   r   r5   r   r-   )ry   ry   r   r   r   r   ry   ry   ry   ry   ry   r6   r7   s   &   r   test_from_square_quat_matrixr|      ss    



 	A 	1A

SEB4!qcA3#DEEMAIIK/r   c                     V P                  . RO. RO. RO. RO. R	O.4      p\        P                  ! V4      pV P                  V4      \	        V^R7      R
,          ,          p\        VP                  RR7      V4       R# )rr   r   NTrq   )      r   r   r   )r   ry   r   r   )r   r   ry   r   rz   r{   rK   )r'   r   r&   absr   r   r(   r7   s   &   r   *test_quat_double_to_canonical_single_coverr      si    



 	A 	1AFF1Iqq 9' BBMAIII-}=r   c                    V P                  . RO4      p\        P                  ! V4      p\        WP	                  RR7      4       V P                  . RO4      \
        P                  ! ^4      ,          p\        P                  ! V4      pW",          V,          p\        VP	                  RR7      \
        P                  ! ^4      ,          V P                  . RO4      4       \        VP                  4       P	                  RR7      \
        P                  ! ^4      ,          V P                  . RO4      4       \        VP	                  RR7      \
        P                  ! ^4      ,          V P                  . R	O4      4       \        VP                  4       P	                  RR7      \
        P                  ! ^4      ,          V P                  . R
O4      4       \        W"P                  4       ,          P	                  RR7      V P                  . RO4      RR7       \        W3P                  4       ,          P	                  RR7      V P                  . RO4      RR7       \        W#,          P	                  RR7      V P                  . RO4      RR7       \        VP                  4       VP                  4       ,          P	                  RR7      V P                  . RO4      RR7       R# )        Frq   gؗҬ<rb   N)r   r   r   ry   )rr   r   r   r   )r~   r   r   r   )rr   r   r   ry   )r~   r   r   ry   r   r   r   r   )	r'   r   r&   r	   r(   mathsqrtr   inv)r)   rY   r!   r3s   &   r   test_quat_double_coverr      s    	

?#A1AAyy5y12


>"499Q</A1A	
QBAIII.tyy|;JJ~.0AEEGOOeO4TYYq\AJJ/1BJJJ/		!<JJ/1BFFH$$u$5diilBJJ/02 QuuwY''%'8JJ~.U<R[))E):JJ~.U<QTNNUN3JJ/e=QUUWrvvx'0050AJJ/e=r   c           	         \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  . RO4      4       RRR4       \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  . RO. RO.4      4       RRR4       \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  . RO.. RO..4      4       RRR4       R#   + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)zExpected `quat` to have shapematchNr   r    rs   )r   r    rs   r3   r4   )r3   r4            r   r    rs   r3   )r3   r4   r   r   )pytestraises
ValueErrorr   r&   r'   r)   s   &r   test_from_quat_wrong_shaper      s    	z)H	I	I2::i01 
J 
z)H	I	I2::'  	 
J 
z)H	I	I2::NN'  	 
J	I 
J	I 
J	I 
J	I	Is#   (D	9,D.D/	D	D,	/E 	c                    V P                  . RO. RO. RO.4      p\        V4      '       dT   V P                  V P                  \        P
                  ! V4      P                  4       R,          4      4      '       g   Q hR# \        P                  ! \        4      ;_uu_ 4        \        P
                  ! V4       RRR4       R#   + '       g   i     R# ; i)rs   N)rs   r3   r   r   )r   r   r   r   rx   r   .)
r'   r   rf   isnanr   r&   r(   r   r   r   )r)   r   s   & r   test_zero_norms_from_quatr      s    


 	A
 Qvvbhhx11!4<<>vFGHHHH]]:&&q! '&&&s   !CC	c                     V P                  . RO4      p\        P                  ! V4      P                  4       p\	        W P                  ^4      4       R# r,   )r'   r   r&   rP   r   rQ   )r)   quatmats   &  r   #test_as_matrix_single_1d_quaternionr      s9    ::l#D


T
"
,
,
.CC#r   c                     V P                  . RO.4      p\        P                  ! V4      P                  4       p\	        VP
                  R4       V P                  . RO. RO. RO.4      p\        VR,          V4       R# )r   Nr   r   r   r   r   rs   rs   r   ry   r   r   r   r   .r'   r   r&   rP   r   rU   r   )r)   r   r   expected_mats   &   r   #test_as_matrix_single_2d_quaternionr      se    ::|n%D


T
"
,
,
.CI&::
 L
 CK.r   c                    V P                  . RO. RO. RO. RO.4      p\        P                  ! V4      P                  4       p\	        VP
                  R4       V P                  . RO. RO. R	O.4      p\        VR
,          V4       V P                  . RO. RO. RO.4      p\        VR,          V4       \        VR,          V P                  ^4      4       \        VR,          V P                  ^4      4       R# )r   Nr   r   r   r   r   r-   rz   )r3   rs   rs   r   r   r   r   r   r   r   r   ry   r   r   r   r    .rs   .)r'   r   r&   rP   r   rU   r   rQ   )r)   quatsr   	expected0	expected1s   &    r    test_as_matrix_from_square_inputr      s    JJ	 E 

U
#
-
-
/CI&


 I
 CK+


 I
 CK+CK+CK+r   c                    V P                  . RO. RO. RO.4      p\        P                  ! V4      P                  4       p\	        VP
                  R4       V P                  . RO. RO. RO.4      p\        VR	,          V4       V P                  . R
O. RO. RO.4      p\        VR,          V4       V P                  . RO. RO. RO.4      ^,          p\        VR,          V4       R# )r   Nr   r   r   )rs   rs   rs   r   r   r   r   r   r   r   r   )皙?g@)gffffff@r   r   )ry   r    r    r   r   )r)   r   r   r   r   	expected2s   &     r   !test_as_matrix_from_generic_inputr     s    JJ E
 

U
#
-
-
/CI&


 I
 CK+


 I
 CK+


  	I
 CK+r   c                     V P                  . RO. RO. RO.4      pV P                  . RO4      p\        \        P                  ! V4      P	                  4       V4       R# r   Nr   r   r   )      ?r   r   r   r'   r   r   from_matrixr(   r)   r   r8   s   &  r   test_from_single_2d_matrixr   7  sM    
** C
 JJ34MH((-557Gr   c                     V P                  . RO. RO. RO..4      pV P                  . RO.4      p\        \        P                  ! V4      P	                  4       V4       R# r   r   r   s   &  r   test_from_single_3d_matrixr   A  sU    
**
  C
 JJ 456MH((-557Gr   c                    R pV P                  . RO4      \        P                  ! ^'4      ,          pV P                  . RO. RO. RO.4      p\        \        P
                  ! V4      P                  4       W!R7       \        \        P
                  ! V P                  VR4      4      P                  4       V P                  VR4      VR7       R# )	:0yE>rb   N)rr   r   r   r   )3~˷g6iпnzo?)r   r   6i?)r   r   g3~˷?r   r   r3   )r'   r   r   r   r   r   r(   reshape)r)   rF   r8   r   s   &   r   test_from_matrix_calculationr   K  s    DJJ~.2>M
**/.- C
 H((-557RH((C)CDLLNJJ}f5r   c                     V P                  \        P                  ! ^^
^ R7      4      p\        \        P
                  ! V4      P                  4       V4       R# )rs   )sizerandom_stateN)r'   r   rvsr   r   r   rP   r)   r   s   & r    test_matrix_calculation_pipeliner   Y  s>    
**(,,QRaH
ICH((-7793?r   c                    R p\         P                  P                  ^ 4      pV P                  VP	                  R4      4      pV P
                  P                  V4      p\        VP                  ^ ,          4       FI  pWE,          ^ 8  g   K  \        P                  ! V4      VR3,          P                  W5R3,          ) 4      pKK  	  \        P                  ! V4      P                  4       pV P                  W`P!                  V4      4      pV P#                  R4      V P%                  ^4      ,           p\'        WxVR7       R# )ra   .rb   N)d   rs   rs   )rM   rN   rO   r'   random_samplelinalgdetrT   rU   xpxatsetr   r   rP   matmulmatrix_transposeru   rQ   r   )	r)   rF   rndr   detsrZ   	ortho_matmult_resulteye3ds	   &        r   test_from_matrix_ortho_outputr   ^  s    D
))


"C
**S&&{3
4C99==D4::a=!7Q;&&+af%))3#v;,7C " $$S)335I))I':':9'EFKHH[!BFF1I-EKT2r   c                    V P                  . RO. RO. RO.4      pV P                  . RO. RO. R	O.4      p\        \        P                  ! V4      P	                  4       VRR7       V P                  . R
O. RO. RO.4      pV P                  . RO. RO. RO.4      p\        \        P                  ! V4      P	                  4       VRR7       R# )r   ư>rb   Nr   r   r   r   r   )5_%?gx'?r   )gx'ܿr   r   )r   r   rr   )r         r   )r   r   r   )r   r   r   r   r   )r'   r   r   r   rP   )r)   r   expecteds   &  r   test_from_matrix_normalizer   o  s    
** C zz5557 8H H((-7798$O
** C zz<'') *H H((-7798$Or   c                    V P                  ^4      p\        P                  ! V4      R,          P                  ^ 4      p\	        V4      '       dL   V P                  V P                  \        P                  ! V4      P                  4       4      4      '       g   Q hMC\        P                  ! \        RR7      ;_uu_ 4        \        P                  ! V4       RRR4       \        P                  ! V4      R,          P                  R4      p\	        V4      '       dM   V P                  V P                  \        P                  ! V4      P                  4       4      4      '       g   Q hR# \        P                  ! \        RR7      ;_uu_ 4        \        P                  ! V4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)rs   zNon-positive determinantr   Nr   r   ry   )rQ   r   r   r   r   rf   r   r   r   rP   r   r   r   r   s   & r   )test_from_matrix_non_positive_determinantr     s+   
&&)C
&&+d



"CSvvbhhx33C8BBDEFFFF]]:-GHH  % I &&+d



#CSvvbhhx33C8BBDEFFFF]]:-GHH  % IH IH IHHs   >F+
F>+F;	>G	c                     \         P                  P                  ^{4      p \        P                  ! V R7      p\        P                  ! VP                  4       P                  4       4      pVP                  VRR7      '       g   Q h\        P                  ! ^V R7      p\        P                  ! VP                  4       P                  4       4      p\         P                  ! VP                  VRR7      4      '       g   Q hR# r^   )	rM   rN   rc   r   r   rP   rd   re   rf   rg   s      r   test_from_matrix_array_liker         
))


$CS)JZ113::<=A""15"1111 ,JZ113::<=A66*))!%)89999r   c                     V P                  . RO. RO. RO.4      p\        P                  ! V4      pVP                  4       P                  \        V 4      8X  g   Q hR# )r   Nr   r   r   )r'   r   r   r(   rk   r   r)   r   r!   s   &  r   test_from_matrix_int_dtyper     sG    
**iI6
7CS!A99; 0 4444r   c                     R pV P                  . RO4      pV P                  . RO4      p\        P                  ! V4      p\        VP	                  4       W1R7       R# Hz>rb   Nr   )gJ?r   r   g<(?r'   r   from_rotvecr   r(   r)   rF   rotvecr8   results   &    r   test_from_1d_single_rotvecr     sE    DZZ	"FJJ;<M!!&)FFNN$m?r   c                     R pV P                  . RO.4      pV P                  . RO.4      p\        P                  ! V4      p\        VP	                  4       W1R7       R# r   r   r   s   &    r   test_from_2d_single_rotvecr     sJ    DZZ$FJJ <=>M!!&)FFNN$m?r   c                     R pV P                  . RO. RO. RO.4      pV P                  . RO. RO. RO.4      p\        \        P                  ! V4      P	                  4       W1R7       R# )	r   rb   Nr   r    r    r   ry   r   r   r   r   )g.pG?cU(G?r   gQH?)gNZ]O?gNZ]OݿgNZ]O?g0i?r-   )r'   r   r   r   r(   )r)   rF   r   r8   s   &   r   test_from_generic_rotvecr     sa    DZZ F JJ45 
 M
 H((088:MUr   c                    V P                  R \        P                  ! ^4      ,          R\        P                  ! ^4      ,          R \        P                  ! ^4      ,          .. RO. RO.4      p\        P                  ! V4      P                  4       p\        VR,          V P                  R4      R	,          4       \        VR
,          VR,          R,          4       \        VR,          V P                  R4      R	,          4       \        VR,          V P                  . RO4      4       \        VR,          V P                  . RO4      4       R# )gMb@?rr   r   g@w?NgMb@)皙?g333333?r   r   r   rs   r   )r   Nrs   Nr   r   rs   )r   r   )g>}J?g.e?g>}J?r   r   )r'   r   r   r   r   r(   r   r	   )r)   r   r   s   &  r   test_from_rotvec_small_angler    s    ZZ			!	ediil2D499Q<4GH
 F '//1DDJ

3 34DK#!56DJ

9 5b 9:DKJJ % &' DL"**^"<=r   c                     \         P                  P                  ^{4      p \        P                  ! V R7      p\        P                  ! VP                  4       P                  4       4      pVP                  VRR7      '       g   Q h\        P                  ! ^V R7      p\        P                  ! VP                  4       P                  4       4      p\         P                  ! VP                  VRR7      4      '       g   Q hR# r^   )	rM   rN   rc   r   r   	as_rotvecrd   re   rf   rg   s      r   test_from_rotvec_array_liker    r   r   c                     V P                  . RO4      p\        P                  ! V4      pVP                  4       P                  \        V 4      8X  g   Q hR# )r   Nr   )r'   r   r   r(   rk   r   )r)   r   r!   s   &  r   test_from_rotvec_int_dtyper    s@    ZZ	"FV$A99; 0 4444r   c                 <   V P                  R.^,          4      p\        P                  ! VRR7      pVP                  4       pV P                  V^,          V P                  ,          4      p\        P                  ! V4      pVP                  4       p\        W64       R# )r   TdegreesNgvô0?)r'   r   r   r(   pir   )r)   rotvec1rot1quat1rotvec2rot2quat2s   &      r   test_degrees_from_rotvecr    su    jj.)A-.G6DLLNE jj3./G(DLLNEE!r   c                     \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  ^^.4      4       RRR4       R#   + '       g   i     R# ; i) Expected `rot_vec` to have shaper   Nr   r   r   r   r   r'   r   s   &r   test_malformed_1d_from_rotvecr    s?    	z)K	L	LRZZA/0 
M	L	L	L   (AA(	c           	          \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  . RO. RO.4      4       RRR4       R#   + '       g   i     R# ; i)r  r   Nr   r4   r   r   r   r  r   s   &r   test_malformed_2d_from_rotvecr    sH    	z)K	L	LRZZ)  	 
M	L	L	L   ,AA,	c                    V P                  . RO. R	O. R
O.4      pV\        VRRR7      ,          p\        P                  ! V4      P	                  4       p\        VRR7      p\        VR,          V P                  V^,          4      4       \        V P                  P                  W!R,          4      V P                  R4      RR7       R# )r   T)r   keepdimsr   rB   rb   Nry   r   r    ry   r   r   ry   r   ga2U0*3?r-   )rL   rs   )rL   r   )rs   rs   )
r'   r   r   r&   r  r   cosr   crossru   )r)   r   r   angles   &   r   test_as_generic_rotvecr#  	  s    :: D
 	N4b488D%//1F6+EDJuqy 12BIIOOFK8"((6:JQVWr   c                     V P                  . RO4      pV P                  . RO4      p\        P                  ! V4      P                  4       p\	        VP
                  R4       \        W24       R# )r   Nr   r    r    gj*0	x?g$x?g:2(rs   r'   r   r&   r  r   rU   r   r)   r   expected_rotvecactual_rotvecs   &   r   test_as_rotvec_single_1d_inputr-    sP    ::m$Djj!CDO&&t,668M$$d+M3r   c                     V P                  . RO.4      pV P                  . RO.4      p\        P                  ! V4      P                  4       p\	        VP
                  R4       \        W24       R# )r   Nr%  r'  r  r)  r*  s   &   r   test_as_rotvec_single_2d_inputr/  "  sU    ::}o&Djj"D!EFO&&t,668M$$f-M3r   c                 N   V P                  . RO. RO. RO.4      p\        P                  ! V4      pVP                  RR7      p\	        VR	R7      p\        W@P                  R4      R
,          4       \        V^ ,          V^,          4       \        V^,          V^,          4       R# )r   Tr	  r   g      ^@Nr   r   r   ry   r   )r'   r   r   r  r   r   )r)   r   rotr   r"  s   &    r   test_as_rotvec_degreesr2  ,  s}    
**iI6
7C


s
#C]]4](F6+EE::e,R01F1Ivay)F1Ivay)r   c                     V P                  . RO. RO. RO.4      p\        \        P                  ! V4      P	                  4       V4       \        \        P                  ! VRR7      P	                  RR7      V4       R# )r   Tr	  Nr   r   ry   r    )ga2U0*3gǺ6?ga2U0*?)r'   r   r   r   r  )r)   r   s   & r   test_rotvec_calc_pipeliner5  7  sg    ZZ
 F
 H((0::<fEH((>HHQUHVr   c                     V P                  . RO4      pV P                  . RO4      p\        P                  ! V4      p\        VP	                  4       VRR7       R# )r   ra   rb   Nr   r   rr   r   r   r   r   r'   r   from_mrpr   r(   r)   mrpr8   r   s   &   r   test_from_1d_single_mrpr=  C  sA    
**[
!CJJ~.Ms#FFNN$m%@r   c                     V P                  . RO.4      pV P                  . RO.4      p\        P                  ! V4      p\        VP	                  4       V4       R# )r   Nr7  r8  r9  r;  s   &   r   test_from_2d_single_mrpr?  J  sD    
**k]
#CJJ/0Ms#FFNN$m4r   c                     \         P                  P                  ^{4      p \        P                  ! V R7      p\        P                  ! VP                  4       P                  4       4      pVP                  VRR7      '       g   Q h\        P                  ! ^V R7      p\        P                  ! VP                  4       P                  4       4      p\         P                  ! VP                  VRR7      4      '       g   Q hR# r^   )	rM   rN   rc   r   r:  as_mrprd   re   rf   rg   s      r   test_from_mrp_array_likerB  Q  s    
))


$CS)J*++-4467A""15"1111 ,J*++-4467A66*))!%)89999r   c                     V P                  . RO4      p\        P                  ! V4      pVP                  4       P                  \        V 4      8X  g   Q hR# )r   Nr   )r'   r   r:  r(   rk   r   )r)   r<  r!   s   &  r   test_from_mrp_int_dtyperD  ^  s@    
**Y
C#A99; 0 4444r   c                     V P                  . RO. RO. RO.4      pV P                  . RO. RO. RO.4      p\        \        P                  ! V4      P	                  4       V4       R# )r   Nr   r   r   )r   r   r   g)g}+;?g}+;g}+;?gߨӉؿr-   )r'   r   r   r:  r(   )r)   r<  r8   s   &  r   test_from_generic_mrprF  d  s\    
** C JJ:  M H%%c*224mDr   c                     \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  ^^.4      4       RRR4       R#   + '       g   i     R# ; i)Expected `mrp` to have shaper   Nr   r   r   r   r:  r'   r   s   &r   test_malformed_1d_from_mrprJ  p  s?    	z)G	H	H"**aV,- 
I	H	H	Hr  c           	          \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  . RO. RO.4      4       RRR4       R#   + '       g   i     R# ; i)rH  r   Nr   r  rI  r   s   &r   test_malformed_2d_from_mrprL  u  sH    	z)G	H	H"**&  	 
I	H	H	Hr  c                     V P                  . RO. RO. RO.4      pV\        V^R7      R,          ,          pV P                  . RO. RO. R	O.4      p\        \        P                  ! V4      P                  4       V4       R# )
r   r   Nr  r  r-   rK   )gQUU?gvWUU?QUUտ)uFx?guFxrO  r   )r'   r   r   r   r&   rA  )r)   r   expected_mrps   &  r   test_as_generic_mrprQ  }  sr    :: D 	N4a(11D::-- L H&&t,335|Dr   c           	         V P                  \        P                  ! V P                  ^,          ^,          4      ) R^ .4      p\	        \
        P                  ! RV P                  . RO4      RR7      P                  4       V4       R# )r    r   ro   Tr	  N)i  r   r   )r'   r   tanr  r   r   rt   rA  )r)   rP  s   & r   test_past_180_degree_rotationrT    s`     ::Q 77a@ALE2::k#:DIPPRr   c                     V P                  . RO4      pV P                  . RO4      p\        P                  ! V4      P                  4       p\	        VP
                  R4       \        W24       R# )r   Nr%  g?g?gO޿r(  r'   r   r&   rA  r   rU   r   r)   r   rP  
actual_mrps   &   r   test_as_mrp_single_1d_inputrZ    sP    ::m$D::CDL##D)002J!!4(J-r   c                     V P                  . RO.4      pV P                  . RO.4      p\        P                  ! V4      P                  4       p\	        VP
                  R4       \        W24       R# )r   Nr%  rV  r  rW  rX  s   &   r   test_as_mrp_single_2d_inputr\    sU    ::}o&D::DEFL##D)002J!!6*J-r   c                     V P                  . RO. RO. RO. RO.4      pV P                  . RO. RO. RO. RO.4      p\        \        P                  ! V4      P	                  4       V4       R# )r   Nr   r4  )gzpy?r   r   )皙?r   r^  )gK}\UUſgK}\UU?rN  )r'   r   r   r:  rA  )r)   rY  rP  s   &  r   test_mrp_calc_pipeliner_    sb    	 J
 ::.	 L
 H%%j188:LIr   c                     \         P                  ! R V P                  ^Z4      RR7      P                  4       pV P                  . RO4      \        P
                  ! ^4      ,          p\        W4       R# )r   Tr	  Nr   r   r   r   )r   rt   r'   r(   r   r   r   )r)   r   r8   s   &  r   test_from_euler_single_rotationrb    sJ    sBJJrNDAIIKDJJ~.1=MD(r   c                     \         P                  ! R V P                  ^Z4      RR7      P                  4       p\         P                  ! RV P                  ^Z4      RR7      P                  4       p\	        W4       R# )r   Tr	  ZNr   rt   r'   rP   r   )r)   	extrinsic	intrinsics   &  r   (test_single_intrinsic_extrinsic_rotationrh    sT    ##CBFPPRI##CBFPPRII)r   c                 b   \         P                  P                  ^ 4      pV P                  VP	                  ^ ^RR7      4      pV P                  VR	R7      p\        P                  ! RVRR7      P                  4       p\        P                  ! RVRR7      P                  4       p\        WE4       R# )
r   lowhighr   r   ro   Tr	  ZYXN)r   rs   ry   )
rM   rN   rO   r'   randintflipr   rt   r(   r   )r)   r   abr   r   s   &     r   test_from_euler_rotation_orderrr    s    
))


"C


3;;13V;<=A
AE1d3;;=AE1d3;;=AAr   c                     R p\         P                  ! RV P                  ^Z^Z.4      RR7      P                  4       pV P                  . RO. RO. RO.4      p\	        W#VR7       R# )	ra   zxTr	  rb   Nr   r   r   ry   r   re  )r)   rF   r   r   s   &   r   -test_from_euler_elementary_extrinsic_rotationrv    sY    D


dBJJBx$8$
G
Q
Q
SC:: L
 CD1r   c           	         R pV P                  . RO. RO. RO.4      p\        P                  ! RVRR7      P                  4       p\	        VR	,          V P                  . R
O. RO. RO.4      VR7       \	        VR,          V P                  . RO. RO. RO.4      VR7       \	        VR,          V P                  . RO. RO. RO.4      VR7       R# )r   ZXYTr	  rb   N   <   -   rz  r{  rz  r|  rz  r{  r   )g# ?      пgΙ6d?)g$+H?+Pz?Ppƿ)gPpֿ+Pz?gPp?r   )g+a?r  (s=?)r  r  g&(ٿ)r  r  r  r   )ga}@?gF6g^@?)g0	8?gF6?g4?)      r   r  r'   r   rt   rP   r   )r)   rF   anglesr   s   &   r   &test_from_euler_intrinsic_rotation_312r    s    DZZ
 F
 

eVT
:
D
D
FCCK***- " 	 CK***- " 	 CK*)*- " 	r   c           	         V P                  . RO. RO. RO.4      p\        P                  ! RVRR7      P                  4       p\	        VR,          V P                  . R	O. R
O. RO.4      4       \	        VR,          V P                  . RO. RO. RO.4      4       \	        VR,          V P                  . RO. RO. RO.4      4       R# )rz  ZXZTr	  Nry  r}  r~  r   )>d?g @r  )l>?^|@r  )X?r  r   r   g      ?g ,r  g ,?g      ?r  r        ?r   r   )r  g4&d'e?)cH?Xӿg'eֿ)r        ?r  r  r)   r  r   s   &  r   &test_from_euler_intrinsic_rotation_313r    s    ZZ
 F
 

eVT
:
D
D
FCCK,,*- "  CK+*'- "  CK-.*- " r   c           	         V P                  . RO. RO. RO.4      p\        P                  ! RVRR7      P                  4       p\	        VR,          V P                  . R	O. R
O. RO.4      4       \	        VR,          V P                  . RO. R
O. RO.4      4       \	        VR,          V P                  . RO. RO. RO.4      4       R# )rz  zxyTr	  Nry  r}  r~  r   )4&d?gPp?r  )r  r  g+Pz)r  r  r  r   )g
?\2׳r  )r  g ,?r  r   )r  r  r  )r  r  r   )g>dۿ @?r  r  r  s   &  r   &test_from_euler_extrinsic_rotation_312r    s    ZZ
 F
 

eVT
:
D
D
FCCK++-- "  CK+++- "  CK,,,- " r   c           	         V P                  . RO. RO. RO.4      p\        P                  ! RVRR7      P                  4       p\	        VR,          V P                  . R	O. R
O. RO.4      4       \	        VR,          V P                  . RO. RO. RO.4      4       \	        VR,          V P                  . RO. RO. RO.4      4       R# )rz  zxzTr	  Nry  r}  r~  r   )r  gl>r  )r  r  gXr  r   r  r  r   )r  gcHr  )r  r  r  )r  r  r  r  r  s   &  r   &test_from_euler_extrinsic_rotation_313r  +  s    ZZ
 F
 

eVT
:
D
D
FCCK-.)- "  CK,+)- "  CK,,+- " r   c                     \         P                  P                  ^{4      p Rp\        P                  ! V R7      p\        P                  ! WP                  V4      P                  4       4      pVP                  VRR7      '       g   Q h\        P                  ! ^V R7      p\        P                  ! WP                  V4      P                  4       4      p\         P                  ! VP                  VRR7      4      '       g   Q hR# )r_   ro   r`   ra   rb   N)	rM   rN   rc   r   rt   as_eulerrd   re   rf   )rX   orderrh   r!   s       r   test_from_euler_array_liker  F  s    
))


$CES)JE#6#6u#=#D#D#FGA""15"1111 ,JE#6#6u#=#D#D#FGA66*))!%)89999r   c                     \         P                  P                  ^{4      p V P                  R^R7      p\        P
                  ! RVRR7      p\        P
                  ! R\        V4      RR7      pVP                  VRR7      '       g   Q hR# )	r_   )rk  rl  r   Tr	  ra   rb   NL)rM   rN   rc   uniformr   rt   floatre   )rX   degrh   r!   s       r   test_from_euler_scalarr  T  sp    
))


$C
++$S+
)C$$S#t<JCsT:A""15"1111r   	seq_tuplero   rg  c                 <  a  V 3R  lp\         P                  P                  ^ 4      pRp\         P                  ! V^34      pVP	                  \         P
                  ) \         P
                  V3R7      VR	&   VP	                  \         P
                  ) ^,          \         P
                  ^,          V3R7      VR
&   VP	                  \         P
                  ) \         P
                  V3R7      VR&   S P                  V4      pRP                  V4      pV'       d   VP                  4       p\        P                  ! Wv4      pVP                  V4      p	VP                  V4      p
\        Wi^ RR7       \        Wj^ RR7       V! W,
          RR4       V! W,
          RR4       R# )c                   < SP                  V ^ R7      pSP                  V ^ R7      pSP                  W44      pSP                  SP	                  V4      V8  4      '       g   Q hSP                  WR8  4      '       g   Q hR# r   r   Nmeanstdhypotrf   r   errormean_maxrms_maxr  r  rmsr)   s   &&&   r   
test_stats1test_as_euler_asymmetric_axes.<locals>.test_stats`  n    wwu1w%ffUf#hht!vvbffTlX-....vvcm$$$$r     rj   ra   rF   rE   rB   +=NrL   r   rL   r   rL   r    rM   rN   rO   emptyr  r  r'   joinupperr   rt   r  _as_euler_from_matrixr   r)   r  rg  r  r   nr  seqrotationangles_quat
angles_mats   f&&        r   test_as_euler_asymmetric_axesr  \  s=   % ))


"CAXXq!fF;;BEE6QD;AF4L;;BEE6A:BEEAIQD;IF4L;;BEE6QD;AF4LZZF
'')
C iik""3/H##C(K //4JFae<FQU;{#UE2z"E51r   c                 2  a  V 3R  lp\         P                  P                  ^ 4      pRp\         P                  ! V^34      pVP	                  \         P
                  ) \         P
                  V3R7      VR&   VP	                  ^ \         P
                  V3R7      VR&   VP	                  \         P
                  ) \         P
                  V3R7      VR&   S P                  V4      pRP                  V^ ,          V^,          V^ ,          .4      pV'       d   VP                  4       p\        P                  ! Wv4      pVP                  V4      p	VP                  V4      p
\        Wi^ RR7       \        Wj^ RR7       V! W,
          RR4       V! W,
          R	R4       R
# )c                   < SP                  V ^ R7      pSP                  V ^ R7      pSP                  W44      pSP                  SP	                  V4      V8  4      '       g   Q hSP                  WR8  4      '       g   Q hR# r  r  r  s   &&&   r   r  0test_as_euler_symmetric_axes.<locals>.test_stats  r  r   r  rj  r  gvIh%<=r  &.>rC   r  rB   Nr  r  r  r  r  s   f&&        r   test_as_euler_symmetric_axesr    s@   % ))


"CAXXq!fF;;BEE6QD;AF4L;;1255t;<F4L;;BEE6QD;AF4LZZF ''9Q<1y|<
=Ciik""3/H##C(K//4JFae<FQT:{#UE2z"E51r   c                    R pV P                  . RO. R	O. R
O. RO.4      pRP                  V4      pV'       d   VP                  4       p\        P                  ! WTRR7      pVP                  4       p\        V\        RR7      ;_uu_ 4        VP                  VRR7      pRRR4       \        P                  ! VXRR7      P                  4       p	\        WyVR7       R#   + '       g   i     LF; i)ra   r  Tr	  Gimbal lockr   Nrb   r|  Z   #   r     r  r     r  r     
r'   r  r  r   rt   rP   r   UserWarningr  r   
r)   r  rg  rF   r  r  r  mat_expectedangle_estimatesmat_estimateds
   &&&       r   (test_as_euler_degenerate_asymmetric_axesr    s     D ZZ	 F '')
C iik""3=H%%'L 
\;m	D	D"++C+> 
E''_dKUUWMLd;	 
E	Ds   CC-	c                    R pV P                  . RO. R	O. R
O. RO.4      pRP                  V^ ,          V^,          V^ ,          .4      pV'       d   VP                  4       p\        P                  ! WTRR7      pVP                  4       p\        V\        RR7      ;_uu_ 4        VP                  VRR7      pRRR4       \        P                  ! VXRR7      P                  4       p	\        WyVR7       R#   + '       g   i     LF; i)ra   r  Tr	  r  r   Nrb   r  r   r{  r  r   K   r{     r  r  r  r  r  r  s
   &&&       r   'test_as_euler_degenerate_symmetric_axesr    s     D ZZ	 F ''9Q<1y|<
=C iik""3=H%%'L 
\;m	D	D"++C+> 
E''_dKUUWMLd;	 
E	Ds   #C55D	c                    V P                  . RO. RO. RO. RO.4      pRP                  V4      pV'       d   VP                  4       p\        P                  ! WCRR7      p\        V\        RR7      ;_uu_ 4        VP                  VRR7      pVP                  VRR7      pRRR4       \        XR^ ^.3,          XR^ ^.3,          ^ RR	7       \        VR,          VR,          ^ R
R	7       V P                  . RO. RO. RO. RO.4      pVR,          ^ 8H  pRP                  V^ ,          V^,          V^ ,          .4      pV'       d   VP                  4       p\        P                  ! WCRR7      p\        V\        RR7      ;_uu_ 4        VP                  VRR7      pRRR4       \        V\        RR7      ;_uu_ 4        VP                  VRR7      pRRR4       \        VR^ ^.3,          VR^ ^.3,          ^ RR	7       \        Wh( ^3,          Wx( ^3,          ^ R
R	7       \        Wh^3,          Wx^3,          RR7       R#   + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i)r|  r  Tr	  r  r   NrL   ra   r  r   r   rb   r  r  r  r  r  r  r  r  r  )
r'   r  r  r   rt   r   r  r  r  r   )	r)   r  rg  r  r  r1  estimates_matrixestimates_quatidxs	   &&&      r   +test_as_euler_degenerate_compare_algorithmsr    s+    ZZ	 F '')
C iik


c4
8C	S+]	;	;44S$4Gc48 
< QF#^A1vI%>QU $T*N4,@qtT ZZ	 F ,!
C ''9Q<1y|<
=C iik


c4
8C	S+]	;	;44S$4G 
<	S+]	;	;c48 
<QF#^A1vI%>QU q!>$'#: a .a"8tS 
<	;	;: 
<	;	;	;s$   9'H>I<I%>I	I"	%I5	c                    R p\         P                  P                  ^ 4      p^
p\        P                  ! W2R7      p\        P                  ! V P                  VP                  4       4      4      pVP                  4       pVP                  4       pVP                  4       pV P                  \         P                  ! RWg4      4      pV P                  \         P                  ! RWv4      4      p	V P                  V^^34      p
\        P                  ! V
4      R,          P                  V P                  ^4      4      p
\        WVR7       \        WVR7       R# )ra   )numr   z...ij,...jk->...ikrb   N.r   r   )rM   rN   rO   r   r&   r'   r(   r   rP   einsumr  r   r   r   rQ   r   )r)   rF   r   r  prY   p_matq_matresult1result2r   s   &          r   test_invr     s    D
))


"C
AA0A2::aiik23A	AKKMEKKMEjj#7FGGjj#7FGGHHaAYEFF5M+&**266!95EG.G.r   c                    R p\         P                  P                  R4      p\        P                  ! VR7      p\        P                  ! V P                  VP                  4       4      4      pVP                  4       pVP                  4       pVP                  4       p\         P                  ! WV4      p\         P                  ! We4      pV P                  ^4      p	\        WyVR7       \        WVR7       \        P                  ! ^VR7      p
\        P                  ! V P                  V
P                  4       4      4      p
V
P                  4       pV
P                  4       pVP                  4       pV P                  P                  W4      pV P                  P                  W4      pV P                  R4      p\        P                   ! V4      R,          P#                  V P                  ^4      4      p\        VVVR7       \        VVVR7       R# )ra   	   #;h29s+,g0Hn r`   rb   )r  rX   Nr   r  )rM   rN   rc   r   r&   r'   r(   r   rP   dotrQ   r   r   r   r  r   r   r   )r)   rF   rX   r  rY   r  r  res1res2rQ   r   r   x_matrixy_matrixr  r  r   s   &                r   test_inv_single_rotationr  5  sj   D
))

 G
HCC A2::aiik23A	AKKMEKKME66%D66%D
&&)CDD)DD)A3'A2::aiik23A	A{{}H{{}Hiix2Giix2GHHYEFF5M+&**266!95EGU.GU.r   c                 B   ^
p\         P                  ! V4      p\         P                  ! V P                  VP	                  4       4      4      pV P                  V4      p\        VP                  4       V4       \        VP                  4       P                  4       V4       R# )rJ   N)	r   identityr&   r'   r(   ru   r   	magnituder   )r)   r  r!   r   s   &   r   test_identity_magnituder  V  sl    
A!A2::aiik23Axx{HAKKM8,AEEG%%'2r   c                 
   \         P                  ! V P                  \         P                  ! 4       P	                  4       4      4      pVP                  4       ^ 8X  g   Q hVP                  4       P                  4       ^ 8X  g   Q hR# r   N)r   r&   r'   r  r(   r  r   rl   s   & r   test_single_identity_magnituder  _  s^    2::h&7&7&9&A&A&CDEA;;=A557!###r   c                    R p^
p\         P                  ! V^ R7      p\         P                  ! V P                  VP	                  4       4      4      p\         P                  ! V P                  \         P
                  ! V4      P	                  4       4      4      pW4,          p\        VP	                  4       VP	                  4       4       WSP                  4       ,          p\        VP                  4       V P                  V4      VR7       R# ra   r`   rb   N
r   rN   r&   r'   r(   r  r   r   r  ru   r)   rF   r  r  rY   r   s   &     r   test_identity_invariancer  e  s    D
Aq!A2::aiik23A2::h&7&7&:&B&B&DEFAUFAIIK!12eegFF$$&$?r   c                    R p^
p\         P                  ! V^ R7      p\         P                  ! V P                  VP	                  4       4      4      p\         P                  ! V P                  \         P
                  ! 4       P	                  4       4      4      pW4,          p\        VP	                  4       VP	                  4       4       WSP                  4       ,          p\        VP                  4       V P                  V4      VR7       R# r  r  r  s   &     r   test_single_identity_invariancer  r  s    D
Aq!A2::aiik23A2::h&7&7&9&A&A&CDEAUFAIIK!12eegFF$$&$?r   c           	         \         P                  ! V P                  ^4      4      pVP                  4       p\	        W P                  V P                  V P                  V P                  ^ .4      4       \         P                  ! V P                  ^4      ) 4      pVP                  4       p\	        W P                  V P                  V P                  V P                  ^ .4      4       R# )r3   N)r   r&   rQ   r  r   r'   r  r)   r!   r   s   &  r   test_magnituder    s    266!9%A[[]FFJJruubeeQ'?@ABFF1I:&A[[]FFJJruubeeQ'?@Ar   c                     \         P                  ! V P                  ^4      4      pV^ ,          P                  4       p\	        W P
                  4       V^,          P                  4       p\	        VR4       R# )r3   r   N)r   r&   rQ   r  r   r  )r)   r!   r  r  s   &   r   test_magnitude_single_rotationr    sP    266!9%AdnnGGUU#dnnGGS!r   c                 @   \         P                  P                  R 4      p\        P                  ! ^
VR7      p\        P                  ! ^
VR7      p\        P                  ! V P                  VP                  4       4      4      p\        P                  ! V P                  VP                  4       4      4      pW#P                  4       ,          pVP                  4       pV P                  \         P                  ! V4      4      p\        VP                  W64      WV8  4       R# r  r`   N)rM   rN   rc   r   r&   r'   r(   r   r  medianr	   re   )r)   rX   r  rY   r!   r_magrF   s   &      r   test_approx_equalr    s    
))

 G
HC$A$A2::aiik23A2::aiik23A	EEGAKKME::bii&'DANN1+el<r   c                 p   \         P                  ! V P                  . R
O4      4      p\         P                  ! V P	                  ^4      4      pVP                  V^,          4      '       g   Q hVP                  V^ ,          4      '       d   Q hVP                  V^,          RR7      '       d   Q hVP                  V^,          RRR7      '       d   Q h\        P                  ! \        RR7      ;_uu_ 4        VP                  V^,          RR7      '       g   Q h R	R	R	4       R	#   + '       g   i     R	# ; i)r   绽|=rb   r   T)rF   r
  zatol must be setr   r	  N)r   r   r  )	r   r   r'   r&   rQ   re   r   warnsr  )r)   r  rY   s   &  r   !test_approx_equal_single_rotationr     s     	RZZ56A266!9%A>>!A$~~ad#### ~~ad~////~~adt~<<<<	k);	<	<~~adD~1111 
=	<	<	<s   6#D$$D5	c                    V P                  V P                  ^4      ) V P                  ^4      34      p\        P                  ! \        P                  ! ^4      ) \        P                  ! ^4      34      pV P	                  ^ V P
                  ^,          ^d4      pV FI  p\        P                  ! W1,          4      p\        VP                  4       P                  4       RRR7       KK  	  R# )rs   r   r  rb   N)concatrQ   rM   concatenatelinspacer  r   r   r   r  r  )r)   axesthetastr!   s   &    r   	test_meanr(    s    99rvvayj"&&),-D>>BFF1I:rvvay12D[[BEEAIs+F  ***,c> r   c                    V P                  . RO. RO. RO.4      pV P                  ^ V P                  ^,          ^d4      pV F  p\        P                  ! W1R,          ,          4      pVP                  ^^.R7      p\        P                  ! W1,          4      pVP                  4       p\        WuP                  4       ,          P                  4       R RR7       K  	  R# )r   weightsr  rb   N)r   r   r   r   ):Nr    N.)	r'   r$  r  r   r   r  r   r   r  )r)   r%  r&  r'  rwmwr!   ms   &       r   test_weighted_meanr/    s    ::{Iy9:D[[BEEAIs+F!!!7m"34WWaVW$  *FFHVVX002CeD r   c                    \         P                  ! V P                  ^4      4      p\        VP	                  4       4      '       dQ   VP                  V P                  ^4      ) R7      p\        V P                  VP                  4      4      '       g   Q hR# \        P                  ! \        RR7      ;_uu_ 4        VP                  V P                  ^4      ) R7       RRR4       R#   + '       g   i     R# ; i)r3   r*  znon-negativer   N)r   r&   rQ   r   r(   r  onesrf   r   _quatr   r   r   )r)   r!   r.  s   &  r   test_mean_invalid_weightsr3    s    266!9%AQYY[!!FFBGGAJ;F'288AGG$%%%%]]:^<<FFBGGAJ;F' =<<<s   9#C&&C7	c                     \         P                  ! V P                  . RO4      4      pVP                  RR7      p\	        V\         4      '       g   Q hR# )r   Freturn_indicesNr   r   r   rr   )r   r&   r'   reduce
isinstancer  s   &  r   test_reduction_no_indicesr:    s?    2::&:;<AXXUX+Ffh''''r   c                     \         P                  ! V P                  . RO4      4      pVP                  RR7      p\	        V4      \
        J g   Q h\        V4      ^8X  g   Q hVw  r4pVe   Q hVe   Q hR# )r   Tr5  Nr7  )r   r&   r'   r8  typetuplelen)r)   r!   r   reduced	left_best
right_bests   &     r   test_reduction_none_indicesrB    sr    2::&:;<AXXTX*F<5   v;!%+"G
r   c           	      8   R p\         P                  P                  R4      p\        P                  ! V P                  \        P                  ! ^VR7      P                  4       4      4      p\        P                  ! V P                  \        P                  ! ^
VR7      P                  4       4      4      p\        P                  ! V P                  \        P                  ! ^VR7      P                  4       4      4      pVP                  W4RR7      w  rgp\         P                  ! \        V4      \        V4      \        V4      34      p	\        V4       Fi  w  r\        V4       FU  w  r\        V4       FA  w  r\         P                  ! W,          V,          P                  4       ^,          4      WW3&   KC  	  KW  	  Kk  	  \         P                  ! \         P                  ! V	^^ 4      V	P                  ^,          R34      p	\         P                  ! \         P                  ! V	\        V4      R34      ^R7      pV P                  V\        V4      ,          4      pV P                  V\        V4      ,          4      pV P!                  VV8H  4      '       g   Q hV P!                  VV8H  4      '       g   Q hVV,          V,          VV,          ,          pVP#                  4       V,          P%                  4       p\'        VV P                  \        V4      4      VR7       R# )	ra   r  r`   Tr5  r   rb   Nry   )rM   rN   rc   r   r&   r'   r(   r8  ru   r>  	enumerater   r   moveaxisrU   argmaxrf   r   r  r   )r)   rF   rX   lr!   r  r?  r@  rA  scalarsrZ   lijpjkrkmax_indleft_best_checkright_best_checkreduced_checkmags   &                    r   !test_reduction_scalar_calculationrS    s6   D
))

 G
HC2::hooaS&A&I&I&KLMA2::hoobc&B&J&J&LMNA2::hooaS&A&I&I&KLMA%&XXa4X%H"G
 hhAAA/0G1q\EA"1#%6627R<*@*@*B1*E#F1  & "  jjWa3gmmA6F5KLGii

7SVRL9BGjjCF!23Ozz'CF"2366).////66* 001111o&*Q/?-@@M;;==(
3
3
5CC#a&)5r   c                 X   V P                  . RO. RO. RO.4      p\        P                  ! V4      p\        P                  ! V P                  V^ R7      4      pV P                  . RO4      pV P                  V^ R7      pV P                  . R	O4      pV P                  V^ R7      p\	        VP                  V4      V4       \	        VP                  V4      V4       \	        VP                  V4      V4       \	        VP                  V4      V4       V P                  . R
O4      pV P                  V^ R7      p	\	        VP                  VRR7      V4       \	        VP                  VRR7      V	4       \	        VP                  VRR7      V	4       \	        VP                  VRR7      V	4       R# )r   r   TinverseNr   ry   r   r   r   )rr   r    rs   g       r   rs          @ry   rs   r'   r   r   expand_dimsr   apply)
r)   r   r_1dr_2dv_1dv_2dv1d_rotatedv2d_rotatedv1d_inversev2d_inverses
   &         r   'test_apply_single_rotation_single_pointrf    sU   
** C
 $Ds ;<D::k"D>>$Q>'D**\*K..1.5KDJJt$k2DJJt$k2DJJt$k2DJJt$k2**\*K..1.5KDJJtTJ2K@DJJtTJ2K@DJJtTJ2K@DJJtTJ2K@r   c                    V P                  . RO. RO. RO.4      p\        P                  ! V4      p\        P                  ! V P                  V^ R7      4      pV P                  . RO. R	O.4      pV P                  . R
O. RO.4      p\	        VP                  V4      V4       \	        VP                  V4      V4       V P                  . RO. RO.4      p\	        VP                  VRR7      V4       \	        VP                  VRR7      V4       R# )r   r   TrU  NrW  r   r   r   r3   r4   r   rX  )r3   r   rY  )r4   r   r[  )r)   r   r1r2v	v_rotated	v_inverses   &      r   *test_apply_single_rotation_multiple_pointsrp    s    
** C
 
		c	"B			bnnSqn9	:B


Iy)*A

L*56IBHHQK+BHHQK+

L*56IBHHQH-y9BHHQH-y9r   c                    \         P                  ! R4      p\         P                  ! . RO. RO. RO.4      V^ &   \         P                  ! . RO. R	O. R
O.4      V^&   V P                  V4      p\        P
                  ! V4      pV P                  . RO4      pV P                  V^ R7      pV P                  . RO. RO.4      p\        VP                  V4      V4       \        VP                  V4      V4       V P                  . RO. RO.4      p\        VP                  VRR7      V4       \        VP                  VRR7      V4       R# )r    r   TrU  Nr    rs   rs   rW  r   r   ru  r   r   rX  )r   r&  r    rY  )r   rs   r   )	rM   r  arrayr'   r   r   r\  r   r]  )r)   r   r!   v1v2rn  ro  s   &      r   *test_apply_multiple_rotations_single_pointrv  +  s	   
((9
CXX CF
 XX CF
 **S/CS!A	I	B		#B

L*56IAGGBK+AGGBK+

L*56IAGGBG-y9AGGBG-y9r   c                    \         P                  ! R4      p\         P                  ! . RO. RO. RO.4      V^ &   \         P                  ! . RO. RO. R	O.4      V^&   V P                  V4      p\        P
                  ! V4      pV P                  . R
O. RO.4      pV P                  . RO. RO.4      p\        VP                  V4      V4       V P                  . RO. RO.4      p\        VP                  VRR7      V4       R# )r    TrU  Nrr  rW  r   r   ru  r   r   rh  rX  )r3   ir4   rY  )r3   r   ri  )rM   r  rs  r'   r   r   r   r]  )r)   r   r!   rm  rn  ro  s   &     r   -test_apply_multiple_rotations_multiple_pointsrx  H  s    
((9
CXX CF
 XX CF
 **S/CS!A


Iy)*A

L*56IAGGAJ	*

L*56IAGGAtG,i8r   c                 j   V P                  . RO4      pV P                  V.4      pV P                  W.4      pV P                  ^4      pV P                  V.4      pV P                  WD.4      p\        WEV.WV.4       F  w  rx\        P                  ! V4      p	VP
                  p
V	P                  '       g0   VP
                  R8X  g   VP
                  R8X  d   \        V	4      ^3p
V	P                  V4      pVP
                  V
8X  g   Q hV	P                  VRR7      pVP
                  V
8X  d   K  Q h	  R# )rr   TrU  N)rr   rZ  r0   r(  r  )	r'   rQ   r   r   r   rU   singler>  r]  )r)   vector0vector1vector2matrix0matrix1matrix2r.  rm  r!   rU   r   s   &           r   test_apply_shapesr  _  s   jj)Gjj'#Gjj'+,GffQiGjj'#Gjj'+,G73g5PQ  #xxxQWW_60AVQKEGGAJww%GGAtG$ww% Rr   c                     \         P                  P                  ^{4      p \        P                  ! V R7      pV P	                  R^dRR7      pVP                  VP                  4       4      pVP                  V4      p\        W4RR7       V P	                  R^dRR7      pVP                  VP                  4       4      pVP                  V4      p\        W4RR7       R# )	r_   r`   r   ra   rb   Nir(  r    rs   )rM   rN   rc   r   r  r]  rd   r   )rX   r!   r'  rm  
v_expecteds        r   test_apply_array_liker  r  s    
))


$CC AD#D)A	
AJA.D#F+A	
AJA.r   c                    \         P                  ! R4      p\         P                  ! . RO. RO. R	O.4      V^ &   \         P                  ! . RO. R
O. RO.4      V^&   V P                  V4      p\        P
                  ! V4      p\        V^ ,          P                  4       V^ ,          RR7       \        V^,          P                  4       VR,          RR7       \        VRR P                  4       V P                  VR,          ^ R7      RR7       R# )r    rB   rb   Nr   rr  ry   rW  r   r   ru  r   r   r   )	rM   r  rs  r'   r   r   r   rP   r\  r   s   &  r   test_getitemr    s    
((9
CXX CF
 XX CF
 **S/CS!AAaDNN$c!f59AaDNN$c&k>AcrF$$&s6{(KRWXr   c                     \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! V P                  . RO4      4      ^ ,           RRR4       R#   + '       g   i     R# ; i)not subscriptabler   Nr-   )r   r   	TypeErrorr   r&   r'   r   s   &r   test_getitem_singler    s?    	y(;	<	<2::l34Q7 
=	<	<	<s   /AA/	c                  :   \         P                  ! . RO. RO. RO.. RO. RO. RO..4      p \        P                  ! V 4      p\	        V^ .,          P                  4       V ^ .,          RR7       \	        V^ ^.,          P                  4       V ^ ^.,          RR7       R# )	r   rB   rb   Nr   r   r   ru  r   )rM   rs  r   r   r   rP   )r   r!   s     r   test_getitem_array_liker    s    
((\   ! "C 	S!AAqcF$$&QCu=Aq!fI'')31v;UCr   c                 *   \         P                  ! V P                  . RO4      4      p\        P                  ! \
        RR7      ;_uu_ 4        \         P                  ! V P                  . RO4      4      V^ &   RRR4       R#   + '       g   i     R# ; i)r   r  r   Nr-   )r   r&   r'   r   r   r  rl   s   & r   test_setitem_singler    sY    2::l34A	y(;	<	<!!"**\":;! 
=	<	<	<s   +BB	c           	         \         P                  P                  R 4      p\        P                  ! V P                  \        P                  ! ^
VR7      P                  4       4      4      p\        P                  ! V P                  \        P                  ! ^VR7      P                  4       4      4      pW2R&   \        VR,          P                  4       VP                  4       4       R# )r  r`   :r   r   NNrM   rN   rc   r   r&   r'   r(   r	   r)   rX   rk  rl  s   &   r   test_setitem_slicer    s    
))

 G
HC			BJJxrs'C'K'K'MN	OB			BJJxqc'B'J'J'LM	NBsGBsGOO%rzz|4r   c           	         \         P                  P                  R 4      p\        P                  ! V P                  \        P                  ! ^
VR7      P                  4       4      4      p\        P                  ! V P                  \        P                  ! VR7      P                  4       4      4      pW2^&   \        V^,          P                  4       VP                  4       4       R# r  r  r  s   &   r   test_setitem_integerr    s    
))

 G
HC			BJJxrs'C'K'K'MN	OB			BJJx3'?'G'G'IJ	KBqEBqEMMORZZ\2r   c           	      $   \         P                  ! V P                  \         P                  ! ^
^ R7      P	                  4       4      4      p\
        P                  ! \        RR7      ;_uu_ 4        ^V^ &   RRR4       R#   + '       g   i     R# ; i)rJ   r`   zRotation objectr   N)r   r&   r'   rN   r(   r   r   r  rl   s   & r   test_setitem_wrong_typer    sY    2::hooba&@&H&H&JKLA	y(9	:	:! 
;	:	:	:s   .A>>B	c                 b   \         P                  ! R4      p\         P                  ! . RO. RO. RO.4      V^ &   \         P                  ! . RO. RO. RO.4      V^&   V P                  V4      p\        P
                  ! V4      p\        \        V4      ^4       \        \        VRR 4      ^4       R# )	r    Nrr  ry   rW  r   r   ru  r   )rM   r  rs  r'   r   r   r   r>  r   s   &  r   test_n_rotationsr    s    
((9
CXX CF
 XX CF
 **S/CS!AQQsVa r   c                     \         P                  P                  R 4      p \        \        P                  ! V R7      P                  4       P                  R4       \        \        P                  ! RV R7      P                  4       P                  R4       \        \        P                  ! ^V R7      P                  4       P                  R4       \        \        P                  ! ^V R7      P                  4       P                  R4       R# )r  r`   Nr3   r   r4   r3   )rM   rN   rc   r   r   r(   rU   r`   s    r   test_random_rotation_shaper    s    
))

 G
HCS)113994@3/779??F,446<<fE,446<<fEr   c                 (   V P                  . R
O. RO.4      pV P                  VRR7      p\        P                  ! W4      w  r4\        VP	                  4       V P                  ^4      RR7       \        W@P                  R4      R,          RRR7       R	# )r   T)copyra   rb   r   Fr   check_shaperF   Nr   rh  r   )r'   r   align_vectorsr   rP   rQ   )r)   r   r   r!   rssds   &    r   test_align_vectors_no_rotationr    sl    


Iy)*A


14
 A$$Q*GAAKKM266!959D**S/"-5tLr   c                     \         P                  P                  R 4      p\        P                  ! V P                  \        P                  ! VR7      P                  4       4      4      pV P                  VP                  RR7      4      pVP                  V4      p\        P                  ! WC4      w  rV\        VP                  4       VP                  4       4       \        W`P                  R4      R	,          RRR7       R# )
l	   #t}":xL r`   r  r   Fr   r  Nr4   rs   r   )rM   rN   rc   r   r&   r'   r(   normalr]  r  r   )r)   rX   crq  rp  estr  s   &      r   test_align_vectors_no_noiser    s    
))

 F
GC2::hoo#&>&F&F&HIJA


3::6:*+A	
A&&q,ICAIIK/D**S/"-5tLr   c                    V P                  . RO. R	O.4      pV P                  . R
O. RO.4      p\        P                  ! W4      w  r4\        WP	                  V4      RR7       \        W@P                  R4      R,          RRR7       R# )q?r   rb   r   Fr   r  N)r  gH*fܿgHlB?)gMs^E?g+Obp޿gn^w)g=2)p?g[[VKg?gw7?)gѿgGvgpr   )r'   r   r  r   r]  )r)   r   r   r  r  s   &    r   $test_align_vectors_improper_rotationr    ss    


89; 	<A


8:< 	=A &&q,ICAyy|$/D**S/"-5tLr   c                 @   V P                  R 4      R,          pV P                  . RO. RO. R	O.4      pRpV P                  . R
O. RO. RO.4      pV P                  . RO. RO. RO.4      p\        P                  ! WERR7      w  rgp\        WqVR7       \        WVR7       R# )gbQ?r   Treturn_sensitivityrb   Nr   )r   r   r   )r         ?rr   )r   rr   rr   r   r   r   r   r   )r   g?r   )r   g?r   )r'   r   r  r   )	r)   rssd_expectedsens_expectedrF   rp  rq  r1  r  senss	   &        r   #test_align_vectors_rssd_sensitivityr    s    JJ01"5MJJ . . 0 1M D


Iy)45A


I{K89A,,QdKOCtDd3Dd3r   c                 Z   ^
pV P                  \        P                  ! V^ R7      P                  . RO4      4      pV P                  \        P                  ! V^R7      P                  . RO4      4      p^p\        P                  ! W#V P                  V4      R4      w  rVp\        P                  ! W#W@P                  V4      ,          R4      w  rp
\        VP                  4       VP                  4       4       \        \        P                  ! V4      V,          V	RR7       \        Wz4       R# )rJ   r`   Tr   rb   Nr   )
r'   r   rN   r]  r  r1  r   rP   r   r   )r)   r  rp  rq  scaleest1rssd1cov1est2rssd2cov2s   &          r   !test_align_vectors_scaled_weightsr    s    
A


8??1!,229=>A


8??1!,229=>AE ..qRWWQZFD ..qUWWQZ5GNDDNN$dnn&67DIIe$u,e$?Dr   c           	         \         P                  P                  R 4      p^dp\        \        P                  ! VR7      V 4      pV P                  VP                  V^3R7      4      pVP                  V4      p\         P                  ! ^4      pRV,          p\        P                  ! V P                  VP                  V^3VR7      4      4      pVP                  V4      p	\        P                  ! WRR7      w  rpW:P                  4       ,          P                  4       p\        V^ ,          V P                  R4      R,          VR7       \        V^,          V P                  R4      R,          VR7       \        V^,          V P                  R4      R,          VR7       W,          p\        VR,          V P                  R4      R,          VR7       \        VR,          V P                  R4      R,          VR7       \        VR,          V P                  R4      R,          VR7       V P                  WP                  V4      ,
          ^,          4      R	,          p\        WR
R7       R# )r  r`   r  r  )r   r  Tr  r   rb   r   F)r  Nr   r   )r   r   )r    r    )rM   rN   rc   r*   r   r'   r  r]  deg2radr   r  r   r  r   sum)r)   rX   	n_vectorsr1  vectorsr   sigma	tolerancenoisenoisy_resultr  r  coverror_vector
rssd_checks   &              r   test_align_vectors_noiser    s   
))

 G
HCI
S12
6Cjj)Q89GYYwF JJqMEeI  


3::Q  
 	E ;;v&L++L?CENCs '')O..0LLORZZ_R%8yILORZZ_R%8yILORZZ_R%8yI LCCIrzz#r2CCIrzz#r2CCIrzz#r2C		'(::q@ASHJD%8r   c           	         \         P                  ! \        R R7      ;_uu_ 4        V P                  . RO4      V P                  . RO4      r!\        P
                  ! W4       RRR4       \         P                  ! \        RR7      ;_uu_ 4        V P                  . RO4      V P                  . RO4      r!\        P
                  ! W4       RRR4       \         P                  ! \        RR7      ;_uu_ 4        V P                  . RO. RO.4      V P                  . RO.4      r!\        P
                  ! W4       RRR4       \         P                  ! \        RR7      ;_uu_ 4        V P                  . RO.4      V P                  . RO.4      r!V P                  ^..4      p\        P
                  ! WV4       RRR4       \         P                  ! \        RR7      ;_uu_ 4        V P                  . RO. RO.4      V P                  . RO. RO.4      r!V P                  . RO4      p\        P
                  ! WV4       RRR4       V P                  . RO.4      V P                  . RO.4      r!V P                  R.4      p\        V4      '       dt   \        P
                  ! WV4      w  rEV P                  V P                  VP                  4       4      4      '       g   Q R4       hV P                  V4      '       g   Q R4       hMD\         P                  ! \        R	R7      ;_uu_ 4        \        P
                  ! WV4       RRR4       V P                  . RO. RO.4      V P                  . RO. RO.4      r!V P                  V P                  V P                  .4      p\        V4      '       dt   \        P
                  ! WV4      w  rEV P                  V P                  VP                  4       4      4      '       g   Q R4       hV P                  V4      '       g   Q R4       hMD\         P                  ! \        R
R7      ;_uu_ 4        \        P
                  ! WV4       RRR4       V P                  . RO.4      V P                  . RO.4      r!\        V4      '       ds   \        P
                  ! W4      w  rEV P                  V P                  VP                  4       4      4      '       g   Q R4       hV P                  V4      '       g   Q R4       hMC\         P                  ! \        RR7      ;_uu_ 4        \        P
                  ! W4       RRR4       V P                  . RO. RO.4      V P                  . RO. RO.4      r!V P                  V P                  ^.4      p\        V4      '       dK   \        P
                  ! WVRR7      w  rEpV P                  V P                  V4      4      '       g   Q R4       hMF\         P                  ! \        RR7      ;_uu_ 4        \        P
                  ! WVRR7       RRR4       V P                  . RO.4      V P                  . RO.4      r!\        V4      '       dK   \        P
                  ! WRR7      w  rEpV P                  V P                  V4      4      '       g   Q R4       hR# \         P                  ! \        RR7      ;_uu_ 4        \        P
                  ! WRR7       RRR4       R#   + '       g   i     EL; i  + '       g   i     ELR; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL2; i  + '       g   i     EL*; i  + '       g   i     ELQ; i  + '       g   i     ELz; i  + '       g   i     R# ; i)z Expected input `a` to have shaper   Nz Expected input `b` to have shapez/Expected inputs `a` and `b` to have same shapesz&Expected `weights` to be 1 dimensionalz+Expected `weights` to have number of valueszQuaternion should be nanzRSSD should be nanz)`weights` may not contain negative valuesz#Only one infinite weight is allowedz(Cannot align zero length primary vectorsTr  z Sensitivity matrix should be nanz Cannot return sensitivity matrixr   r   rh  ry   r   )r   r   r   r'   r   r  r   rf   r   r(   inf)r)   rp  rq  r+  r!   r  r  s   &      r    test_align_vectors_invalid_inputr  B  s   	z)K	L	Lzz,'I)>1q$ 
M 
z)K	L	Lzz)$bjj&>1q$ 
M 
z *? 
@ 
@zz9i012::yk3J1q$
@
 
zE
G 
Gzz9+&

I;(?1**qcU#qW-	
G 
zJ
L 
Lzz9i012::y)>T3U1**Y'qW-	
L ::yk"BJJ	{$;qjj"GW((w7vvbhhqyy{+,,H.HH,xx~~333~]]:!LN N""11N ::y),-rzz9i:P/Qqjj"&&"&&)*GW((w7vvbhhqyy{+,,H.HH,xx~~333~]]:!FH H""11H ::yk"BJJ	{$;qQ((.vvbhhqyy{+,,H.HH,xx~~333~]]:!KM M""1(M ::y),-rzz9i:P/Qqjj"&&!%GQ ..qWQUVvvbhhtn%%I'II%]]:!CE E""1TJE ::yk"BJJ	{$;qQ ..qMvvbhhtn%%I'II%]]:@B B ..qMB BQ 
M	L	L 
M	L	L
@ 
@ 
@

G 
G 
G
L 
L 
LN N NH H HM M ME E EB B Bsz   <[><\5A\&"A\: A]!]"=]6+^
^^2>\	\#	&\7	:]	]	"]3	6^	
^	^/	2_	c                    R pV P                  . RO. R	O.4      pV P                  . R
O. RO.4      pV P                  . RO. RO. RO.4      p\        P                  ! W2V P                  V P                  ^.4      R7      w  rV\	        VP                  4       WAR7       \	        VP                  V4      W1R7       \        P                  ! VRWR7      '       g   Q hV P                  . RO. RO.4      pRp\        P                  ! W2V P                  V P                  ^.4      R7      w  rV\	        VP                  4       WAR7       \	        VP                  V4      R,          VR,          VR7       \        P                  ! WgWR7      '       g   Q hV P                  . R
O. RO.4      p\	        VP                  V4      WR7       V P                  . RO. RO.4      pV P                  . RO. RO.4      pRp\        P                  ! W2V P                  V P                  ^.4      R7      w  rV\	        VP                  V4      R,          VR,          VR7       \        P                  ! WgWR7      '       g   Q hR# )ra   r   r*  rb   )rF   r)   rr   g4i?Nr   r   r   r   r   r  r   r   )r   r    r   r   r   r   r    r   )r   rs   ry   )r~   rs   r    r4  )	r'   r   r  r  r   rP   r]  r   isclose)	r)   rF   rq  rp  
m_expectedRr  r  
a_expecteds	   &        r   "test_align_vectors_align_constrainr    s   
 D


Iy)*A


K+,A[&&( )J $$Q2::rvvqk3JKGAAKKM:9AGGAJ-;;tSt3333 	

Iy)*AM$$Q2::rvvqk3JKGAAKKM:9AGGAJv&&	=;;t====[)45JAGGAJ
6 	

I{+,A


L*-.A&M$$Q2::rvvqk3JKGAAGGAJv&&	=;;t====r   c                 x   ^dp. p\        ^4       F?  pVP                  \        P                  ! V^
V,           R7      P	                  4       4       KA  	  \        V4       EF  pV P                  ^V^ ,          V,          ^ ,          ,          ^V^,          V,          ^ ,          ,          .4      pV P                  ^V^,          V,          ^ ,          ,          ^V^,          V,          ^ ,          ,          .4      p\        P                  ! WER^.R7      w  rg\        P                  ! WEV P                  ^.R7      w  r\        VP	                  4       VP	                  4       RR7       EK	  	  \        V4       EFA  pV P                  ^V^ ,          V,          ^ ,          ,          ^V^,          V,          ^ ,          ,          ^V^,          V,          ^ ,          ,          .4      pV P                  ^V^,          V,          ^ ,          ,          ^V^,          V,          ^ ,          ,          ^V^,          V,          ^ ,          ,          .4      p\        P                  ! WE. ROR7      w  rg\        P                  ! WEV P                  ^^.R7      w  r\        VP	                  4       VP	                  4       RR7       EKD  	  R# )r   r`       _Br*  -C6?rb   N)r  r    r   )	rT   appendr   rN   rP   r'   r  r  r   )	r)   r  matsrZ   rp  rq  r  _R2s	   &        r   test_align_vectors_near_infr    s    	AD1XHOOA262<<>?  1XJJDGAJqM)1tAwqz!}+<=>JJDGAJqM)1tAwqz!}+<=>%%aT1I>&&qbffa[Ar||~DAA  1XJJ$q'!*Q-471:a=!DGAJqM/JKJJ$q'!*Q-471:a=!DGAJqM/JK%%aLA&&qbffa^Dr||~DAA r   c                    R pV P                  . RO. RO.4      pV P                  . RO. RO.4      pV P                  . RO. RO. RO.4      p\        P                  ! W#V P                  ^.R7      w  rV\	        VP                  4       WAR7       \        P                  ! VR	,          VR	,          4      w  rV\	        VP                  4       WAR7       \	        VP                  VR	,          4      VR	,          VR7       V P                  . R
O. R
O.4      pV P                  . RO. RO. RO.4      p\        P                  ! W#V P                  ^.R7      w  rV\	        VP                  4       WAR7       \        P                  ! VR	,          VR	,          4      w  rV\	        VP                  4       WAR7       \	        VP                  VR	,          4      VR	,          VR7       R# )ra   r*  rb   Nrr   r   r   r   r  r   r   r   r   )r'   r   r  r  r   rP   r]  )r)   rF   rp  rq  r  r  r  s   &      r   test_align_vectors_parallelr    sd   D


K+,A


K+,A['&( )J !!!<DAAKKM:9!!!F)QvY7DAAKKM:9AGGAfI&&	=


Iy)*A[&&( )J !!!<DAAKKM:9!!!F)QvY7DAAKKM:9AGGAfI&&	=r   c           	      t   R p\         P                  ! . RO. RO.. RO. R	O.. R
O. RO..4      pV Uu. uF  q3^ ,          ) V^,          .NK  	  pp\        W$4       F  w  r5V P                  V4      V P                  V4      rS\        P
                  ! W5V P                  ^.R7      w  rg\        VP                  4       V P                  VR7       \        VP                  VR,          4      VR,          VR7       K  	  \        P                  ! ^d^ R7      p\        P                  ! VP                  4       R,          4      p	. R	O. RO.p. RO. RO.p. pV	 FG  p
VP                  \         P                  ! V
P                  V^ ,          4      V^,          .4      4       KI  	  V F  pV P                  V4      V P                  V4      rS\        P
                  ! W5V P                  ^.R7      w  rg\        P
                  ! W5R^.R7      w  r\        VP                  4       VP                  4       VR7       K  	  R# u upi )ra   r*  rb   r`   r  r  Nr  r   r   r   r   r   )rM   rs  zipr'   r   r  r  r   r  r  r]  rN   r   r  r  rP   )r)   rF   
as_to_testrp  
bs_to_testrq  r  r  RsdRsdRr  s   &           r   test_align_vectors_antiparallelr    s   DK3%y1%y13 4J *44AaD5!A$-J4J+zz!}bjjm1%%aRVVQK@ruu48&	*AfIDA	 , 
!	$B


r||~d2
3C	YA	YAJ"((BHHQqTNAaD#9:; zz!}bjjm1%%aRVVQK@&&qdAY?r||~DA	  5s   H5c                    R p\         P                  ! ^d^ R7      P                  4       p\         P                  ! ^d^R7      P                  4       p\        W#4       F  w  rEV P	                  V^ ,          4      pV P	                  V^ ,          4      p\         P
                  ! Wg4      w  r\        VP                  V4      WaR7       \        P                  ! V	^ VR7      '       d   K  Q h	  R# r  )
r   rN   rP   r  r'   r  r   r]  rM   r  )
r)   rF   mats_amats_bmat_amat_brp  rq  r  r  s
   &         r   test_align_vectors_primary_onlyr    s    D__Sa(224F__Sa(224FF+JJuQx JJuQx  ((.
A1zz$---- ,r   c                     \         P                  P                  ^{4      p \        P                  ! V R7      pV P	                  RR7      pVP                  V4      p\        P                  ! W24      w  rE\        P                  ! VP                  4       VP                  4       4      w  rg\        VP                  4       VP                  4       4       \        Wu4       R# )r_   r`   r  Nr  )
rM   rN   rc   r   r  r]  r  rd   r   r(   )rX   r  rq  rp  est_expectedr  r  r  s           r   test_align_vectors_array_liker    s    
))


$CC A


A	
A"*"8"8">L&&qxxz188:>ICL((*CKKM:D(r   c                     V P                  . RO4      p\        \        P                  ! V4      4      p\	        V 4      '       d   RpW#8X  g   Q hR# VP                  R4      '       g   Q hR# )r   zRotation.from_matrix(array([[1., 0., 0.],
                            [0., 1., 0.],
                            [0., 0., 1.]]))Rotation.from_matrix(Nr-   )r'   reprr   r&   r
   
startswithr)   rY   actualr   s   &   r   test_repr_single_rotationr     s[    


< A($$Q'(F||/ !!!  !89999r   c                    V P                  . RO. RO.4      \        P                  ! ^4      ,          p\        P                  ! V4      : p\        V 4      '       d   RpW#8X  g   Q hR# VP                  R4      '       g   Q hR# )r   a-  Rotation.from_matrix(array([[[ 0.,  0.,  1.],
                             [ 0.,  1.,  0.],
                             [-1.,  0.,  0.]],
                     
                            [[ 0., -1.,  0.],
                             [ 1.,  0.,  0.],
                             [ 0.,  0.,  1.]]]))r  N)r   r   r   r   r   )r'   r   r   r   r&   r
   r  r  s   &   r   test_repr_rotation_sequencer  -  sk    


NL12TYYq\AA""1%(F||4 !!!  !89999r   c                 R   \         P                  P                  ^ 4      p\        P                  ! V P                  VP                  RR7      4      4      pVP                  4       p. ROp\        WB4      p\        VP                  \        V P                  ^ 4      4      4      '       g   Q h. ROpV! V4      pVP                  4       pVR,          ^ 8  R,          p	V P                  W) V4      pVR,          ^ 8  R,          p	V P                  W) V4      p\        VR,          VR,          4       \        VR	,          VR
,          4       \        VR,          VR,          4       \        VR,          VR	,          4       \        VR,          VR,          4       V P                  VR,          VR,          ,          4      p
V P                  VR,          VR
,          ,          4      p\        W4       V P                  VR	,          VR,          ,          4      pV P                  VR,          VR,          ,          4      p\        W4       V P                  VR
,          VR	,          ,          4      p\        V^V
^,          ,          ^,
          4       \        \!        V4      \!        V4      4       R# )r   r  Nr  )r   r   r    rs   r3   )r   r   r  r   r  r    g      @rs   g      
@g@r3   )rL   ry   rK   r   r   r   )r4   .r   )r   .)rJ   .)r3   .)rM   rN   rO   r   r&   r'   r  r(   r   r9  timesr<  wherer   r  r   r>  )r)   r   key_rots	key_quats	key_timesinterpolatorr  interp_rotsinterp_quatsmask
cos_theta1
cos_theta2
cos_theta4
cos_theta5
cos_theta3s   &              r   
test_slerpr  >  s    
))


"C!!"**S[[f[-E"FGH  "II-Ll(($rzz!}*=>>>>=Eu%K&&(L !#W-D88D->Leq '*Dz95I L()F*;<L()F*;<L()F*;<L()F*;<L)9V+<= V,|F/CCDJV,|F/CCDJJ+V,|F/CCDJV,|F/CCDJJ+ V,|F/CCDJJZ] 3a 78 [!3u:.r   c                     \         P                  ! \        R R7      ;_uu_ 4        V P                  . RO. RO.4      pV P                  ^ ^.4      p\	        W!4       RRR4       R#   + '       g   i     R# ; i)zmust be a `Rotation` instancer   Nr   r-   )r   r   r  r'   r   )r)   r!   r'  s   &  r   test_slerp_rot_is_rotationr  m  sU    	y(G	H	HJJ	!# $JJ1va	 
I	H	H	Hs   6A%%A6	z*must be a sequence of at least 2 rotationsc                     \         P                  ! V P                  . RO.4      4      p\        P                  ! \
        \        R7      ;_uu_ 4        \        ^.V4       RRR4       R#   + '       g   i     R# ; i)rr   r   N)rr   r    rs   r3   )r   r&   r'   r   r   r   SLERP_EXCEPTION_MESSAGEr   rl   s   & r   test_slerp_single_rotr  x  sK    2::~&678A	z)@	A	Aqc1 
B	A	A	As   A))A:	c                 8   \         P                  ! 4       p\         P                  ! V P                  VP	                  4       4      4      p\
        P                  ! \        \        R 7      ;_uu_ 4        \        . V4       RRR4       R#   + '       g   i     R# ; i)r   N
r   rN   r&   r'   r(   r   r   r   r  r   rl   s   & r   test_slerp_rot_len0r  ~  sX    A2::aiik23A	z)@	A	Ab! 
B	A	A	As   1BB	c                 <   \         P                  ! ^4      p\         P                  ! V P                  VP	                  4       4      4      p\
        P                  ! \        \        R7      ;_uu_ 4        \        ^.V4       RRR4       R#   + '       g   i     R# ; i)r   r   Nr  rl   s   & r   test_slerp_rot_len1r    s\    A2::aiik23A	z)@	A	Aqc1 
B	A	A	As   2B

B	c           
      p   \         P                  ! \        R R7      ;_uu_ 4        \        P                  P                  ^ 4      p\        P                  ! V P                  VP                  RR7      4      4      pV P                  ^.^..4      p\        W24       RRR4       R#   + '       g   i     R# ; i)z.times to be specified in a 1 dimensional arrayr   r  N)r    r3   )r   r   r   rM   rN   rO   r   r&   r'   r  r   r)   r   r!   r'  s   &   r   test_slerp_time_dim_mismatchr    s    	zM
O 
Oii##A&rzz#++6+*BCDJJ a
O 
O 
O 
Os   A5B$$B5	c           
      h   \         P                  ! \        R R7      ;_uu_ 4        \        P                  P                  ^ 4      p\        P                  ! V P                  VP                  RR7      4      4      pV P                  ^4      p\        W24       RRR4       R#   + '       g   i     R# ; i)z7number of rotations to be equal to number of timestampsr   r  Nr  )r   r   r   rM   rN   rO   r   r&   r'   r  aranger   r  s   &   r   !test_slerp_num_rotations_mismatchr    s    	z *@ 
A 
Aii##A&rzz#++6+*BCDIIaLa
A 
A 
A 
As   A1B  B1	c                    \         P                  P                  ^ 4      pV P                  VP	                  RR7      4      p\
        P                  ! V4      p. ROp\        V4      '       d@   \        WC4      pV P                  V P                  VP                  4      4      '       g   Q hR# \        P                  ! \        RR7      ;_uu_ 4        \        WC4       RRR4       R#   + '       g   i     R# ; i)r   r  strictly increasing orderr   Nr  )r   r   r    r    r3   rM   rN   rO   r'   r  r   r&   r   r   rf   r   r  r   r   r   r)   r   rY   r!   r'  ss   &     r   test_slerp_equal_timesr#        
))


"C


3;;F;+,A1AAQ!Kvvbhhqww'((((]]:-HII!K JIII   C%%C6	c                    \         P                  P                  ^ 4      pV P                  VP	                  RR7      4      p\
        P                  ! V4      p. ROp\        V4      '       d@   \        WC4      pV P                  V P                  VP                  4      4      '       g   Q hR# \        P                  ! \        RR7      ;_uu_ 4        \        WC4       RRR4       R#   + '       g   i     R# ; i)r   r  r  r   Nr  )r   r   rs   r    r3   r   r!  s   &     r   test_slerp_decreasing_timesr'    r$  r%  c                    \         P                  P                  ^ 4      p\        P                  ! V P                  VP                  RR7      4      4      pV P                  ^4      p\        W24      p\        P                  ! \        RR7      ;_uu_ 4        V P                  R.R..4      pV! V4       RRR4       R#   + '       g   i     R# ; i)r   r  z&`times` must be at most 1-dimensional.r   g      @g@Nr  )rM   rN   rO   r   r&   r'   r  r  r   r   r   r   )r)   r   r!   r'  r"  interp_timess   &     r   !test_slerp_call_time_dim_mismatchr*    s    
))


"C2::ckkvk&>?@A
		!AaA	zE
G 
GzzC5$'5#* +	,	
G 
G 
G 
Gs   B==C	c                 :   \         P                  P                  ^ 4      p\        P                  ! V P                  VP                  RR7      4      4      pV P                  ^4      ^,           p\        W24      pV P                  . RO4      pV P                  . RO4      p\        V4      '       Ed[   V! V4      P                  4       pV P                  WPP                  V4      8  WPP                  V4      8*  4      pV P                  V P                  Wx( R3,          4      4      '       g   Q hV P                  V P                  WxR3,          4      ( 4      '       g   Q hV! V4      P                  4       pV P                  W`P                  V4      8  W`P                  V4      8*  4      pV P                  V P                  Wx( R3,          4      4      '       g   Q hV P                  V P                  WxR3,          4      ( 4      '       g   Q hR# \         P"                  ! \$        RR7      ;_uu_ 4        V! V4       RRR4       \         P"                  ! \$        RR7      ;_uu_ 4        V! V4       RRR4       R#   + '       g   i     LG; i  + '       g   i     R# ; i)	r   r  .ztimes must be within the ranger   Nr  r  )r   r    r   )rM   rN   rO   r   r&   r'   r  r  r   r   r(   logical_andminmaxrf   r   r   r   r   )	r)   r   r!   r'  r"  	times_low
times_highrY   in_ranges	   &        r   !test_slerp_call_time_out_of_ranger2    s   
))


"C2::ckkvk&>?@A
		!qAaA

9%II&JYiL  ">>)vvay"8)vvay:PQvvbhhqC012222vvrxxC- 0112222jM!!#>>*q	"9:PQ;RSvvbhhqC012222vvrxxC- 0112222]]:-MNNiL O]]:-MNNjM ON ONNNNs   .	I6#	J	6J		J	c                 V   \         P                  ! R V P                  ^ ^P.4      RR7      p\        ^ ^.V4      pV! R4      p\         P                  ! R V P                  ^4      RR7      pW4P	                  4       ,          pV P                  VP                  4       ^ RR7      '       g   Q hR# )XTr	  r  rC   rb   N)r   rt   r'   r   r   allcloser  )r)   r!   r"  r_interpolatedr_interpolated_expecteddeltas   &     r   test_slerp_call_scalar_timer9    s    CQG!4dCAq!faAtWN&11#rzz"~tT88::E;;u(!%;8888r   c                    \         P                  ! ^2^ R7      p\         P                  ! V P                  VP	                  4       4      4      p\         P                  ! R^R7      p\         P                  ! V P                  VP	                  4       4      4      pV P                  \        V4      4      pV F7  pW$V,          ,          p\        \        VP	                  4       ^R7      V4       K9  	  R# )2   r`   r  r   N)	r   rN   r&   r'   r(   r1  r>  r   r   )r)   qsrsr   rY   s   &    r   test_multiplication_stabilityr>    s    		#B			BJJrzz|4	5B	1	%B			BJJrzz|4	5Bwws2wH
"frzz|!<hG r   c                 l   R p\         P                  ! ^
^ R7      p\         P                  ! V P                  VP	                  4       4      4      pVP                  4       pR EFe  pW$,          p\         P                  ! ^
4      p\         P                  ! V P                  VP	                  4       4      4      p\        \        V4      4       F  pV^ 8  d   Wb,          pK  Wc,          pK  	  WVP                  4       ,          P                  4       pV P                  W8  4      '       g   Q h\         P                  ! V P                  . RO4      4      pWd,          P	                  4       P                  R8X  g   Q h\         P                  ! V P                  . RO.4      4      pWd,          P	                  4       P                  R8X  d   EKf  Q h	  R F_  pW$,          p\         P                  ! WBP                  4       ,          4      p\        VP	                  4       VP	                  4       VR7       Ka  	  \         P                  ! V P                  . R	O4      4      p^pW$,          p\         P                  ! WBP                  4       ,          4      p\        VP	                  4       VP	                  4       VR7       R# )
r  r`   rb   N)ri  r   ry   r   r   r    r4   r-   r  r   )      r   g       r   r   r  )ra   r   r   )r   rN   r&   r'   r(   r   r  rT   r   r  rf   rU   r   r  r   )	r)   rF   r  p_invr  rY   r!   r  angs	   &        r   test_powrC    s   D"A2::aiik23AEEGE%Fb!rzz!))+67s1vA1uEI	 
 557{%%'vvcj!!!! rzz,78~~%%---rzz<.9:~~%%///# &( /F  [[]!23		QYY[t< / 	RZZ67A	A	AQ./AAIIK48r   c                 6   \         P                  ! ^ R7      p\         P                  ! V P                  VP	                  4       4      4      p\
        P                  ! \        RR7      ;_uu_ 4        \        V^^4       RRR4       R#   + '       g   i     R# ; i)r   r`   zmodulus not supportedr   N)	r   rN   r&   r'   r(   r   r   NotImplementedErrorpow)r)   r  s   & r   test_pow_errorsrG    s]    AA2::aiik23A	*2I	J	JAq! 
K	J	J	Js   /BB	c                     \         P                  ! ^ R7      p \         P                  ! ^^R7      p\        P                  ! V 4      p\	        VP
                  R4       \        P                  ! V4      p\	        VP
                  R4       \        V^ ,          P                  4       V^ ,          P                  4       4       \        V^,          P                  4       V^,          P                  4       4       \        P                  ! V .4      p\	        VP
                  R4       \	        V^ ,          V 4       \        P                  ! V.4      p\	        VP
                  R4       \        VR,          P                  4       V^ ,          P                  4       4       \        VR	,          P                  4       V^,          P                  4       4       \        P                  ! W.\        R7      p\	        VP
                  R4       \	        V^ ,          V 4       \	        V^,          V4       \        P                  ! WV.4      p\	        VP
                  R
4       R# )r   r`   rk   Nr   )r    )r   )r   r    r   )r   r   )rs   r    )	r   rN   rM   rs  r   rU   r   rP   object)rz  multiplers  s      r    test_rotation_within_numpy_arrayrL  #  s   __#Fqa(HHHVEb!HHXEd#E!H&&((1+*?*?*ABE!H&&((1+*?*?*ABHHfXEd#q6"HHhZ Ef%E$K))+Xa[-B-B-DEE$K))+Xa[-B-B-DEHHf'v6Ed#q6"q8$HHh(34Ef%r   c                    \         P                  ! V P                  ^ ^ \        P                  ! \
        P                  ^,          4      \        P                  ! \
        P                  ^,          4      .4      4      p\        P                  ! V4      p\        P                  ! V4      p\        VP                  4       VP                  4       RR7       R# r   rB   rb   N)r   r&   r'   r   sinrM   r  r   pickledumpsloadsr   rP   )r)   r!   pkl	unpickleds   &   r   test_picklingrU  B  s~     	2::q!TXXbeeAg->q@Q&RSTA
,,q/CS!IAKKM9#6#6#8uEr   c                 |   \         P                  ! V P                  ^ ^ \        P                  ! \
        P                  ^,          4      \        P                  ! \
        P                  ^,          4      .4      4      p\        P                  ! V4      p\        VP                  4       VP                  4       RR7       R# rN  )r   r&   r'   r   rO  rM   r  r   r  deepcopyr   rP   )r)   r!   rk  s   &  r   test_deepcopyrX  K  sn     	2::q!TXXbeeAg->q@Q&RSTA	q	BAKKM2<<>>r   c                     \         P                  ! . R	O4      p V P                  R4      pV P                  R4      pVP                  R,          RJ g   Q hVP                  R,          RJ g   Q h\        ;QJ d&    R VP
                   4       F  '       d   K   RM	  RM! R VP
                   4       4      '       g   Q h\        ;QJ d&    R VP
                   4       F  '       d   K   RM	  RM! R VP
                   4       4      '       g   Q hR# )
r   ro   XYZC_CONTIGUOUSTc              3   *   "   T F	  q^ 8  x  K  	  R# 5ir
  r   .0rZ   s   & r   	<genexpr>+test_as_euler_contiguous.<locals>.<genexpr>Z       *z!Avz   Fc              3   *   "   T F	  q^ 8  x  K  	  R# 5ir
  r   r]  s   & r   r_  r`  [  ra  rb  Nr-   )r   r&   r  flagsrf   strides)r!   e1e2s      r   test_as_euler_contiguousrh  S  s    <(A	
E	B	
E	B88N#t+++88N#t+++3*rzz*333*rzz*****3*rzz*333*rzz*****r   c                 X   \         P                  ! ^
^ R7      p\         P                  ! V P                  VP	                  4       4      4      p. ROp^ .\        \        P                  ! V4      4      ,           p\        W24       UUu. uF  w  rEWWE,            NK  	  ppp\         P                  ! V4      p\        VP	                  4       VP	                  4       4       \         P                  ! V4      p\        VP	                  4       VP	                  4       4       WJg   Q h\         P                  ! V P                  \         P                  ! 4       P	                  4       4      4      p\         P                  ! V4      p\        VP	                  4       VP	                  4       4       R# u uppi )rJ   r`   N)r   r    rs   r   rs   )r   rN   r&   r'   r(   listrM   cumsumr  r#  r	   r  )	r)   r  sizesstartsrZ   r  splitr   r1  s	   &        r   test_concatenatero  ^  s4   rq)H!!"**X-=-=-?"@AHES4		%())F+.v+=>+=41X+=E>!!%(FH$$&(89 !!(+FH$$&(89 !!! 

RZZ(9(9(;(C(C(EF
GC!!#&FCKKM6>>#34 ?s   F&c                 0   \         P                  ! \        R R7      ;_uu_ 4        \        V P	                  \        P
                  ! 4       P                  4       4      4      p\        P                  ! V^R.4       RRR4       R#   + '       g   i     R# ; i)zRotation objects onlyr   N)r   r   r  r   r'   r  r(   r#  )r)   r1  s   & r   test_concatenate_wrong_typerq  t  s]    	y(?	@	@rzz("3"3"5"="="?@Ac1d^, 
A	@	@	@s   ABB	c                    \        V P                  . RO.4      4      p\        V P                  . RO. RO.4      4      p\        V P                  . RO4      4      p\        V4      ^8X  g   Q h\        V4      ^8X  g   Q h\        P                  ! \
        RR7      ;_uu_ 4        \        V4       RRR4       V'       g   Q hV'       g   Q hV'       g   Q hR#   + '       g   i     L0; i)r   zSingle rotation has no len().r   Nr-   )r   r'   r>  r   r   r  )r)   rotation_multi_onerotation_multirotation_singles   &   r   test_len_and_boolrv  {  s    !"**l^"<=bjj,)EFGNrzz,78O!"a'''~!###	y(G	H	HO 
I >? 
I	Hs   "CC&	c                     V P                  . RO4      p\        P                  ! VR^ZRR7      P                  4       pV P                  . RO4      \        P
                  ! ^4      ,          p\        W#4       R# )r   rf  Tr	  Nr   ra  )r'   r   from_davenportr(   r   r   r   )r)   r   r   r8   s   &   r   #test_from_davenport_single_rotationry    sV    ::i D""4b+/118 	JJ~.1=MD(r   c                 .   V P                  . RO4      pV P                  . RO4      p\        P                  ! WP                  ,          ^,          4      p\        P                  ! VRV P                  ^,          4      p\        VP                  RR7      VP                  RR7      4       V P                  VR4      p\        P                  ! WPP                  ,          ^,          4      p\        P                  ! VRV P                  ^,          .4      p\        VP                  RR7      VP                  RR7      4       V P                  W.^ R7      p\        P                  ! WPP                  V P                  ^,          .V P                  ^,          ..4      ,          4      pV^ ,          V^,          ,          pV P                  W!.^ R7      p\        P                  ! VRV P                  ^,          V P                  ^,          .4      p\        VP                  RR7      VP                  RR7      4       V P                  W.^ R7      p\        P                  ! WPP                  V P                  ^,          .V P                  ^,          ..4      ,          4      pV P                  VR4      p\        P                  ! VRV P                  ^,          V P                  ^,          .4      p\        VP                  RR7      VP                  RR7      4       R# )	r   eTrq   r   Nr   r  r  )	r'   r   r   r  rx  r   r(   r   stack)r)   ezeyr1  rot_davr%  axes_davs   &      r   #test_from_davenport_one_or_two_axesr    sI   	K	 B	K	 B 

rEEz!|
,C%%b#ruuQw7GCKK$K/OOdO35 ::b&!D


tee|A~
.C%%dC"%%';GCKK$K/OOdO35 88RH18%D


tjj2557)beeAgY1G&HH
IC
a&3q6/Cxxqx)H%%hbeeAgruuQw5GHGCKK$K/OOdO35 88RH18%D


tjj2557)beeAgY1G&HH
ICzz"f%H%%hbeeAgruuQw5GHGCKK$K/OOdO35r   c           	         . ROp. R	Op. R
OpV P                  W.4      p\        V4      '       dR   \        P                  ! VR^ ^ .4      P	                  4       pV P                  V P                  V4      4      '       g   Q hMG\        P                  ! \        RR7      ;_uu_ 4        \        P                  ! VR^ ^ .4       RRR4       V P                  WV.4      p\        V4      '       dR   \        P                  ! VR. RO4      P	                  4       pV P                  V P                  V4      4      '       g   Q hMG\        P                  ! \        RR7      ;_uu_ 4        \        P                  ! VR. RO4       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \        P                  ! V P                  V.4      R^ .4       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \        P                  ! V P                  WV.4      R. RO4       RRR4       R#   + '       g   i     EL}; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)r   r{  zmust be orthogonalr   Nzorder should bero   zExpected `angles`r   r   r  r   )r   r   r    rs   )
r'   r   r   rx  r(   rf   r   r   r   r   )r)   r}  r~  ezyr%  rY   s   &     r   !test_from_davenport_invalid_inputr    s   	B	B
C::ri DT##D#1v6>>@vvbhhqk""""]]:-ABB##D#1v6 C::rsm$DT##D#y9AACvvbhhqk""""]]:-ABB##D#y9 C	z):	;	;

B4 0%!= 
<	z)<	=	=

BB< 8#|L 
>	= CBB CB	;	;	=	=	=s0   %H4!I(*I>,I.4I	I	I+	.I?	c                     \         P                  P                  ^{4      p \         P                  ! . RO4      p\         P                  ! . RO4      p\         P                  ! . RO4      p\        P                  ! V R7      pVP                  WV.R4      p\        P                  ! WV.RVP                  4       4      pVP                  VRR7      '       g   Q h\        P                  ! ^V R7      pVP                  WV.R4      p\        P                  ! WV.RVP                  4       4      p\         P                  ! VP                  VRR7      4      '       g   Q hR# )	r_   r`   r{  ra   rb   Nr   r   r   )
rM   rN   rc   rs  r   as_davenportrx  rd   re   rf   )rX   rf  rg  e3rh   r  r!   s          r   test_from_davenport_array_liker    s	   
))


$C	)	B	)	B	)	BS)J$$bb\37Fc6==?CA""15"1111 ,J$$bb\37Fc6==?CA66*))!%)89999r   c                    \         P                  P                  ^ 4      p^dp\         P                  ! V^34      pVP	                  \         P
                  ) \         P
                  V3R7      VR&   VP	                  ^ \         P
                  V3R7      pVP	                  \         P
                  ) \         P
                  V3R7      VR&   VP	                  ^ \         P
                  RR7      pV P                  . RO4      pV P                  . R	O4      pV F  pV P                  \        P                  ! W,          4      P                  V4      4      p	V P                  WgV	.^ R7      p
WH,
          VR
&   R F  pVR8X  d   T
MV P                  V
^ R7      p\        P                  ! V P                  V4      W4      pVP                  V P                  V4      V4      p\        WP                  V4      4       K  	  K  	  R# )r   rj  r   rg  Nr  r  )r  r  r  r  rf  rg  )rM   rN   rO   r  r  r  r'   r   r   r]  r|  ro  rx  r  r   )r)   r   r  r  angles_middlelambdasrf  rg  lambr  ax_lambr  axr1  
angles_davs   &              r   test_as_davenportr    s   
))


"CAXXq!fF;;BEE6QD;AF4LKKABEEK=M;;BEE6QD;AF4Lkkabee%k8G	K	 B	K	 BZZ,,TW5;;B?@((BB<a(0$+t/E![0bgggAg6NB))"**R.%HC))"**R.%@JJ

6(:;	 0	 r   c           	          \         P                  P                  ^ 4      p^p\         P                  ! V^34      pVP	                  \         P
                  ) \         P
                  V3R7      VR	&   \        V4       Uu. uF#  qAP                  ^ \         P
                  .4      NK%  	  ppVP	                  \         P
                  ) \         P
                  V3R7      VR
&   VP	                  ^ \         P
                  RR7      pV P                  . RO4      pV P                  . RO4      pV EF;  p	V P                  \        P                  ! W,          4      P                  V4      4      p
V P                  WxV
.^ R7      pWY,
          VR&   R F  pVR8X  d   TMVRRR1,          p\        P                  ! V P                  V4      W4      p\        V\        RR7      ;_uu_ 4        VP!                  V P                  V4      V4      pRRR4       VP#                  4       p\        P                  ! V P                  V4      VX4      pVP#                  4       p\%        VVRR7       K  	  EK>  	  R# u upi   + '       g   i     Lu; i)r   rj  r   rg  Nr  r   ra   rb   r  r  )r4   r  r  r  r  ry   )rM   rN   rO   r  r  r  rT   choicer'   r   r   r]  r|  rx  r   r  r  rP   r   )r)   r   r  r  rZ   r  r  rf  rg  r  r  r  r  r  r1  r  r  rot_estimatedr  s   &                  r   test_as_davenport_degenerater    s    ))


"C	AXXq!fF ;;BEE6QD;AF4L5:1X>XZZBEE
+XM>;;BEE6QD;AF4Lkkabee$k7G	K	 B	K	 BZZ,,TW5;;B?@((BB<a(0$+t/E![0gddmB))"**R.%HCS+]CC --bjjneD
 D==?L$33BJJrNE:VM)335ML-eD 0	  ? DCs   <)I("I-	-I=c           	         \         P                  P                  ^ 4      p^dp\         P                  ! V^34      pVP	                  \         P
                  ) \         P
                  V3R7      VR
&   VP	                  ^ \         P
                  V3R7      VR&   VP	                  \         P
                  ) \         P
                  V3R7      VR&   R F  p\        R4       F  pRP                  V^ ,          V^,          V^ ,          .4      pV Uu. uF  p\        V4      NK  	  ppVR8X  d   VP                  4       p\        P                  ! W`P                  V4      4      p	\        P                  ! V P                  V4      W@P                  V4      4      p
\        V	P                  RR7      V
P                  RR7      RR7       K  	  K  	  VR;;,          \         P
                  ^,          ,          uu&   R F  p\        R4       F  pRP                  V4      pV Uu. uF  p\        V4      NK  	  ppVR8X  d   VP                  4       p\        P                  ! W`P                  V4      4      p	\        P                  ! V P                  V4      W@P                  V4      4      p
\        V	P                  4       V
P                  4       RR7       K  	  K  	  R	# u upi u upi )r   rj  rg  ro   r  Trq   ra   rG   Nr  r  r  r  )rM   rN   rO   r  r  r  r   r  r   r  r   rt   r'   rx  r   r(   )r)   r   r  r  r  r  r  rZ   r  euldavs   &          r   &test_compare_from_davenport_from_eulerr  	  s#   
))


"CAXXq!fF ;;BEE6QD;AF4L;;1255t;<F4L;;BEE6QD;AF4L+%e,I''9Q<1y|DEC(+,1)A,B,#iik%%c::f+=>C))"**R.%FASTCCKK$K7t9T!&( - , 4LBEEAIL+%e,I'')$C(+,1)A,B,#iik%%c::f+=>C))"**R.%FASTCCKKM3;;=uE - , - -s   
KKc                 4   \         P                  P                  ^ 4      p^dp\         P                  ! V^34      pVP	                  \         P
                  ) \         P
                  V3R7      VR&   VP	                  ^ \         P
                  V3R7      VR	&   VP	                  \         P
                  ) \         P
                  V3R7      VR
&   R F  p\        R4       F  pRP                  V^ ,          V^,          V^ ,          .4      pV Uu. uF  p\        V4      NK  	  ppVR8X  d   VP                  4       p\        P                  ! W`P                  V4      4      p	V	P                  V4      p
V	P                  V P                  V4      V4      p\        WRR7       K  	  K  	  VR	;;,          \         P
                  ^,          ,          uu&   R F  p\        R4       F  pRP                  V4      pV Uu. uF  p\        V4      NK  	  ppVR8X  d   VP                  4       p\        P                  ! W`P                  V4      4      p	V	P                  V4      p
V	P                  V P                  V4      V4      p\        WRR7       K  	  K  	  R# u upi u upi )r   rj  rg  ro   r  ra   rG   Nr  r  r  r  )rM   rN   rO   r  r  r  r   r  r   r  r   rt   r'   r  r  r   )r)   r   r  r  r  r  r  rZ   r  r1  r  r  s   &           r   "test_compare_as_davenport_as_eulerr  9	  s   
))


"CAXXq!fF ;;BEE6QD;AF4L;;1255t;<F4L;;BEE6QD;AF4L+%e,I''9Q<1y|DEC(+,1)A,B,#iik%%c::f+=>C,,s#C""2::b>59CC51 - , 4LBEEAIL+%e,I'')$C(+,1)A,B,#iik%%c::f+=>C,,s#C""2::b>59CC51 - , - -s   
J5Jc                    \         P                  ! ^ R7      p\        V4      ^ 8X  g   Q h\         P                  ! ^ R7      p\        V4      ^ 8X  g   Q h\         P                  ! ^R7      . ,          p\        V4      ^ 8X  g   Q h\         P                  ! V P                  R4      4      p\        V4      ^ 8X  g   Q h\         P                  ! V P                  R4      4      p\        V4      ^ 8X  g   Q h\         P                  ! RV P                  R4      4      p\        V4      ^ 8X  g   Q h\         P                  ! V P                  R4      4      p\        V4      ^ 8X  g   Q h\         P                  ! V P                  ^4      RV P                  R4      4      p\        V4      ^ 8X  g   Q h\         P                  ! V P                  R4      4      p	\        V	4      ^ 8X  g   Q hR# )r   )r  ro   rf  Nr   r3   r   rs   rs   r   )r   rN   r>  r  r&   ru   r   rt   r   rx  rQ   r:  )
r)   r!   r_ider_getr_quatr_matrixr_eulerr_vecr_davr_mrps
   &         r   test_zero_rotation_constructionr  [	  sm   AAq6Q;;!$Eu:??OO"2&Eu:?? 01Fv;!##BHHY$78Hx=A!!%&)9:Gw<1  &!12Eu:??##BFF1I{BHHV<LMEu:??bhhv./Eu:??r   c                     \         P                  ! V P                  R4      4      pVP                  4       P                  R8X  g   Q hVP                  4       P                  R8X  g   Q hVP                  R4      P                  R8X  g   Q hVP                  4       P                  R8X  g   Q hVP                  4       P                  R8X  g   Q hVP                  V P                  ^4      R4      P                  R8X  g   Q hR# )r   ro   rf  Nr  r  r   )r   r&   ru   r(   rU   rP   r  r  rA  r  rQ   rl   s   & r   !test_zero_rotation_representationr  x	  s    288F+,A99;&&&;;=)+++::e""f,,,;;=&(((88:v%%%>>"&&)[1776AAAr   c                    \         P                  ! V P                  R4      4      pV P                  . RO4      pVP	                  V4      pVP
                  R8X  g   Q hV P                  R4      pVP	                  V4      pVP
                  R8X  g   Q hV P                  R4      p\        P                  ! \        RR7      ;_uu_ 4        VP	                  V4       RRR4       R#   + '       g   i     R# ; i)r   z/Expected equal numbers of rotations and vectorsr   Nr  r   r   r  )
r   r&   ru   r'   r]  rU   r1  r   r   r   )r)   r!   rm  rn  v0v0_rotru  s   &      r   !test_zero_rotation_array_rotationr  	  s    288F+,A


9A
I??f$$$	&	BWWR[F<<6!!!	B	K
M 
M	
M 
M 
M 
Ms   C##C4	c                 <   \         P                  ! V P                  R4      4      p\         P                  ! V P                  . RO4      4      pW,          p\	        V4      ^ 8X  g   Q hW!,          p\	        V4      ^ 8X  g   Q h\         P                  ! V P                  R4      4      pW,          p\	        V4      ^ 8X  g   Q hRp\         P
                  ! ^4      p\         P                  ! V P                  VP                  4       4      4      p\        P                  ! \        VR7      ;_uu_ 4        WX,           RRR4       \        P                  ! \        VR7      ;_uu_ 4        W,           RRR4       R#   + '       g   i     LG; i  + '       g   i     R# ; i)r   "Expected equal number of rotationsr   Nr  r   )
r   r&   ru   r'   r>  rN   r(   r   r   r   )	r)   r!   r_singler_mult_leftr_mult_rightr0r_multmsg_rotation_errorrl  s	   &        r   !test_zero_rotation_multiplicationr  	  s   288F+,A!!"**^"<=H,K{q   <L|!!!			BHHV,	-BVFv;!=		B			BJJrzz|4	5B	z);	<	<
 
= 
z);	<	<
 
=	< 
=	< 
=	<	<s   /	E7$	F
7F	
F	c                    \         P                  ! V P                  R4      4      p\         P                  ! W.4      p\	        V4      ^ 8X  g   Q h\         P                  ! V P                  . RO4      4      pVP                  W1.4      p\	        V4      ^8X  g   Q h\         P                  ! V P                  \         P                  ! ^4      P                  4       4      4      pVP                  WA.4      p\	        V4      ^8X  g   Q h\         P                  ! V P                  \         P                  ! ^4      P                  4       4      4      pVP                  W.4      pVP                  W.4      p\	        V4      ^8X  g   Q hR# )r   Nr  r   )r   r&   ru   r#  r>  r'   rN   r(   )r)   r!   r  rk  r   r4s   &     r   !test_zero_rotation_concatentationr  	  s   288F+,A			qf	%Br7a<<			BJJ~6	7B	
w	Br7a<<			BJJxq'9'A'A'CD	EB	
w	Br7a<<			BJJxq'9'A'A'CD	EB	
w	B	
w	Br7a<<r   c                     \         P                  ! V P                  R4      4      pR F  pW,          p\        V4      ^ 8X  d   K  Q h	  R# )r   Nr  )r@  ry   r   r   r  )r   r&   ru   r>  )r)   r!   pppow0s   &   r   test_zero_rotation_powerr  	  s<    288F+,A#u4yA~~ $r   c                     \         P                  ! V P                  R4      4      pVP                  4       p\	        V4      ^ 8X  g   Q hR# )r   Nr  )r   r&   ru   r   r>  )r)   r!   r_invs   &  r   test_zero_rotation_inverser  	  s6    288F+,AEEGEu:??r   c                     \         P                  ! V P                  R4      4      pVP                  4       pVP                  R8X  g   Q hR# )r   Nr  r   )r   r&   ru   r  rU   )r)   r!   r  s   &  r   test_zero_rotation_magnituder  	  s8    288F+,AI??d"""r   c                     \         P                  ! V P                  R4      4      p\        P                  ! \
        RR7      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; i)r   z+Mean of an empty rotation set is undefined.r   Nr  )r   r&   ru   r   r   r   r  rl   s   & r   test_zero_rotation_meanr  	  sF    288F+,A	z)V	W	W	 
X	W	W	Ws   
A%%A6	c                    \         P                  ! V P                  R4      4      p\         P                  ! V P                  R4      4      pVP                  V4      P                  R8X  g   Q h\         P                  ! V P                  . RO4      4      pVP                  V4      P                  R8X  g   Q h\         P                  ! V P                  \         P                  ! 4       P                  4       4      4      pVP                  V4      P                  R8X  g   Q hRp\         P                  ! V P                  \         P                  ! ^4      P                  4       4      4      p\        P                  ! \        VR7      ;_uu_ 4        VP                  V4       RRR4       \        P                  ! \        VR7      ;_uu_ 4        VP                  V4       RRR4       R#   + '       g   i     LP; i  + '       g   i     R# ; i)r   r  r   Nr  r  r   )r   r&   ru   re   rU   r'   rN   r(   r   r   r   )r)   r!   r  rk  rl  
approx_msgr   s   &      r   test_zero_rotation_approx_equalr  	  s[   288F+,A			BHHV,	-B>>"##t+++			BJJ~6	7B>>"##t+++			BJJx'8'@'@'BC	DB??1##t+++5J			BJJxq'9'A'A'CD	EB	z	4	4	r 
5 
z	4	4
 
5	4 
5	4 
5	4	4s   G%	G8%G5	8H		c                    \         P                  ! V P                  R4      4      pWP                  . V P                  R7      ,          p\        V4      ^ 8X  g   Q hVR,          p\        V4      ^ 8X  g   Q h\        P                  ! \        4      ;_uu_ 4        WP                  ^ .4      ,           RRR4       \        P                  ! \        4      ;_uu_ 4        WP                  R.4      ,           RRR4       \        P                  ! \        4      ;_uu_ 4        \         P                  ! V P                  . RO4      4      V^ &   RRR4       R#   + '       g   i     L; i  + '       g   i     Lz; i  + '       g   i     R# ; i)r   rI  :Nr   NNTr  r-   )	r   r&   ru   r'   boolr>  r   r   
IndexError)r)   r!   r  r_slices   &   r   test_zero_rotation_get_setr  	  s    288F+,Ajj277j+,Eu:??eGw<1	z	"	"	**aS/ 
# 
z	"	"	**dV
 
# 
z	"	"!!"**\":;! 
#	" 
#	" 
#	" 
#	"	"s$   EE&+E9E#	&E6	9F
	c                 F   \         P                  ! V P                  \         P                  ! ^4      P	                  4       4      4      pWP                  . RO4      ,          p\        V4      ^ 8X  g   Q hWP                  . RO4      ,          p\        V4      ^8X  g   Q hWP                  . RO4      ,          p\        V4      ^8X  g   Q h\        P                  ! \        4      ;_uu_ 4        WP                  RR.4      ,           RRR4       R#   + '       g   i     R# ; i)rs   TN)FFF)FTF)TTT)	r   r&   r'   rN   r(   r>  r   r   r  )r)   r!   r  rk  r   s   &    r   test_boolean_indexesr  	  s    2::hooa&8&@&@&BCDA	
::+,	-Br7a<<	
::*+	,Br7a<<	
::()	*Br7a<<	z	"	"	**dD\
"# 
#	"	"	"s   +DD 	)FT)r   r   platformnumpyrM   numpy.testingr   scipy.spatial.transformr   r   scipy.statsr   	itertoolsr   r   scipy._lib._array_apir	   r
   r   r   r   r   r   scipy._lib.array_api_extra_libarray_api_extrar   rP  r  markskip_xp_backends
pytestmarkr   r*   r.   r9   r<   r>   r\   ri   rm   rv   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-  r/  r2  r5  r=  r?  rB  rD  rF  rJ  rL  rQ  rT  rZ  r\  r_  rb  rh  rr  rv  r  r  r  r  r  r  parametrizer  r  thread_unsafer  r  r  r  r  r  r  r  r  r  r  r  r   r(  r/  r3  r:  rB  rS  rf  rp  rv  rx  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  r  r  r  r  r  r#  r'  r*  r2  r9  r>  rC  rG  rL  rU  rX  rh  ro  rq  rv  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s;       & 3 + +   ) (   [[))$)7
7
000D.
:5
O@0
>=>(
"$	/,8,>HH@
3"P(&"
:5@@V>.
:5
"1
X44*	A5
:5	E.
E..J)*	28666:2 l5&9:m42 5 ;2D l5&9:m42 5 ;2> l5&9:m4< 5 ; <6 l5&9:m4< 5 ; <6 l5&9:m4= 5 ; =@/*/B3$
@@B"	= 2 2?
E((66A8:*::9. &/Y(8
	D<53!&FMM	M
4 %9PKN\ >FB8>0B:. 	)
::",/^ G 


0	9H$9N&>F?+5,- ) 5FM2:$<. E E>FB2D:B"0(#$<&$r   