
    ЏkhVT                    ,   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZmZmZmZmZmZmZ d dlmc mZ d dlZd dlZej8                  j;                  d      Zd	 Zd
efdZ d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d  Z5d! Z6d" Z7d# Z8d$ Z9d% Z:d& Z;d' Z<d( Z=d) Z>d* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGd3 ZHd4 ZId5 ZJd6 ZKd7 ZLd8 ZMd9 ZNd: ZOd; ZPd< ZQd= ZRd> ZSd? ZTd@ ZUdA ZVdB ZWdC ZXdD ZYdE ZZdF Z[dG Z\dH Z]dI Z^ej8                  j                  dJ edK            ej8                  j                  dLdM      dN               Z`ej8                  j                  dJ edK            ej8                  j                  dLdM      dO               Zaej8                  j                  ej8                  j                  dJ edK            ej8                  j                  dLdM      dP                      Zcej8                  j                  ej8                  j                  dJ edK            ej8                  j                  dLdM      dQ                      Zdej8                  j                  ej8                  j                  dJ edK            ej8                  j                  dLdM      dR                      ZedS ZfdT ZgdU ZhdV ZidW ZjdX ZkdY ZldZ Zmd[ Znej8                  j                  d\        Zod] Zpd^ Zqd_ Zrd` Zsda Ztdb Zudc Zvdd Zwde Zxdf Zydg Zzdh Z{di Z|dj Z}dk Z~dl Zdm Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd ZdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej8                  j                  d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)    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                 :    | dk(  rg dS | dk(  rg dS | dk(  rg dS y )Nx   r   r   yr   r   r   zr   r   r    axiss    g/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/spatial/transform/tests/test_rotation.py	basis_vecr      s.    s{		 
    rc                 f    t        j                  |j                  | j                                     S )N)r   	from_quatasarrayas_quat)r   xps     r   rotation_to_xpr%   %   s"    bjj566r   c                  4    t        d       t        g d       y )Nr   r   r   r   )r   r   r   r   test_init_non_arrayr(   )   s    \\r   c                     | j                  g dg dg      }t        j                  |      }|| j                  dgdgg      z  }t        |j	                         |       y )N      @   r   r   )      r   r         @g      *@r"   r   r!   r   r#   r$   r   r   expected_quats       r   test_generic_quat_matrixr3   .   sP    


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

SED6?33MAIIK/r   c                     | j                  g d      }t        j                  |      }|dz  }t        |j	                         |       y Nr*   r-   r0   r1   s       r   test_from_single_1d_quaternionr6   5   s9    


>"A1AEMAIIK/r   c                     | j                  g dg      }t        j                  |      }|dz  }t        |j	                         |       y r5   r0   r1   s       r   test_from_single_2d_quaternionr8   <   s<    


N#$A1AEMAIIK/r   c                    t         j                  j                  d      }t        j                  | j                  g d      d      }t        |j                         | j                  d      dd       | j                  | j                  g d      d	      }t        j                  |d      }t        |j                         | j                  | j                  d      d
      dd       | j                  |j                  dd            }|t        |d      d d d f   z  }t        |j                  d         D ]L  }||df   }t        j                  |d      }t        | j                  |j                         d      |d       N t        j                  |d      }t        | j                  |j                         dd      |d       y )Nr   r   r   r   r   Tscalar_first   V瞯<缉ؗҜ<rtolatol
   r   )rD   r   r   d   r,   r   r   .rA   )nprandomRandomStater   r!   r"   r   	as_matrixeyetilerandnr   rangeshaperollr#   r$   rngr   qiqis         r   test_from_quat_scalar_firstrV   C   sf   
))


"C2::l3$GAAKKM266!95uE


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

399S!$%A	"1d7	++A1771: Aq#vYr5		Q/%@A
 	140ABGGAIIKG3QUCr   c                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ y N{   rR   -q=rB   r=   )	rG   rH   default_rngr   r!   r#   tolistapprox_equalallrR   
r_expectedr   s      r   test_from_quat_array_likerc   Z   s    
))


$CS)J:--/6689A""15"111 ,J:--/6689A66*))!%)8999r   c                     t        j                  | j                  g d            }|j                         j                  t        |       k(  sJ y )Nr:   )r   r!   r"   r#   dtyper   r$   r   s     r   test_from_quat_int_dtyperg   g   s;    2::l34A99; 0 4444r   c           	      ~   t         j                  j                  d      }t        j                  d| j                  d            }t        |j                  d      | j                  g d      dd	       t        j                  d| j                  d
            }t        |j                  d      | j                  | j                  g d      d      dd	       | j                  |j                  dd            }|t        |d      d d d f   z  }t        |j                  d         D ]  }||df   }t        j                  |      }t        |j                  d      | j                  |d      d       t        |j                  dd      | j                  |j                  d      d      d        t        j                  |      }t        |j                  d      | j                  |dd      d       t        |j                  dd      | j                  |j                  d      dd      d       y )Nr   xyzr=   Tr;   )      ?r   r   r   r>   r?   r@   )rD   r=   rC   rE   r,   r   r   .rF   )	canonicalr<   rk   )rG   rH   rI   r   
from_eulerzerosr   r#   r"   rL   rM   r   rN   rO   r!   rP   rQ   s         r   test_as_quat_scalar_firstro   l   s   
))


"CE288A;/AAII4I0"**^2LU, 	E288G#45AAII4I0GGBJJ~6@U, 	

399S!$%A	"1d7	++A1771: $q#vYr"		t	4bggb!n"	$ 			Dt	D		D	 91="	$$ 	1AAII4I0"''!QQ'2G  AII4I@GGAIII5qqGAOr   c           	          | j                  g dg dg dg dg dg dg      }t        j                  |      }|| j                  dgdgd	gd
gd	gd
gg      z  }t        |j	                         |       y )N)r+   r   r   r,   r-   r   r.   r   r'   )rr   rr   r   r   r   r   rr   rr   rr   rr   rr   r/      r      r0   r1   s       r   test_from_square_quat_matrixrw      su    


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

SEB4!qcA3#DEEMAIIK/r   c                     | j                  g dg dg dg dg dg      }t        j                  |      }| j                  |      t	        |d      d d d f   z  }t        |j                  d	      |       y )
N)      r   r   r   )r   rr   r   r   )r   r   rr   r   rs   rt   r   r   Trl   )r"   r   r!   absr   r   r#   r1   s       r   *test_quat_double_to_canonical_single_coverr{      sm    



 	A 	1AFF1Iqq 9!T' BBMAIII-}=r   c                 h   | j                  g d      }t        j                  |      }t        ||j	                  d             | j                  g d      t        j                  d      z  }t        j                  |      }||z  |z  }t        |j	                  d      t        j                  d      z  | j                  g d             t        |j                         j	                  d      t        j                  d      z  | j                  g d             t        |j	                  d      t        j                  d      z  | j                  g d             t        |j                         j	                  d      t        j                  d      z  | j                  g d             t        ||j                         z  j	                  d      | j                  g d	      d
       t        ||j                         z  j	                  d      | j                  g d	      d
       t        ||z  j	                  d      | j                  g d      d
       t        |j                         |j                         z  j	                  d      | j                  g d      d
       y )N)        r   r   rr   Frl   )rj   r   r   r   rv   )ry   r   r   r   )rj   r   r   rr   )ry   r   r   rr   r}   r   r   r   gؗҬ<r\   )	r"   r   r!   r	   r#   mathsqrtr   inv)r$   rS   r   r3s       r   test_quat_double_coverr      s    	

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


>"499Q</A1A	
1QBAIII.tyy|;JJ~.0AEEGOOeO4TYYq\AJJ/1BJJJ/		!<JJ/1BFFH$$u$5diilBJJ/02 QquuwY''%'8JJ~.U<R[))E):JJ~.U<QrTNNUN3JJ/e=QUUWrvvx'0050AJJ/e=r   c                    t        j                  t        d      5  t        j                  | j                  g d             d d d        t        j                  t        d      5  t        j                  | j                  g dg dg             d d d        t        j                  t        d      5  t        j                  | j                  g dgg dgg             d d d        y # 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   y xY w)NzExpected `quat` to have shapematchr   rv   r=   )r   rv   r=   r,   r-   )r,   r-            r   rv   r=   r,   )r,   r-   r   r   )pytestraises
ValueErrorr   r!   r"   r$   s    r   test_from_quat_wrong_shaper      s    	z)H	I 22::i012 
z)H	I 2::'  	 
z)H	I 2::NN'  	 2 2  s#   'C*&+C64-D*C36C?Dc                 b   | j                  g dg dg dg      }t        |      rG| j                  | j                  t	        j
                  |      j                         d               sJ y t        j                  t              5  t	        j
                  |       d d d        y # 1 sw Y   y xY w)N)r=   r,   r   r   )r   r   r   r   rq   r   .)
r"   r   r`   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]]:& 	"q!	" 	" 	"s   B%%B.c                     | j                  g d      }t        j                  |      j                         }t	        || j                  d             y )Nr'   r=   )r"   r   r!   rJ   r   rK   )r$   quatmats      r   #test_as_matrix_single_1d_quaternionr      s;    ::l#D


T
"
,
,
.CC#r   c                     | j                  g dg      }t        j                  |      j                         }t	        |j
                  d       | j                  g dg dg dg      }t        |d   |       y )Nr   r   r   r   r   r=   r=   r}   rr   r   r   r   r   .r"   r   r!   rJ   r   rO   r   )r$   r   r   expected_mats       r   #test_as_matrix_single_2d_quaternionr      se    ::|n%D


T
"
,
,
.CI&::
 L
 CK.r   c                    | j                  g dg dg dg dg      }t        j                  |      j                         }t	        |j
                  d       | j                  g dg dg dg      }t        |d	   |       | j                  g d
g dg dg      }t        |d   |       t        |d   | j                  d             t        |d   | j                  d             y )Nr   r   r   r   r   r'   rs   )r,   r=   r=   r   r   r   r   r}   r   r   r   rr   r   r   r   rv   .r=   r=   .)r"   r   r!   rJ   r   rO   r   rK   )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                    | j                  g dg dg dg      }t        j                  |      j                         }t	        |j
                  d       | j                  g dg dg dg      }t        |d   |       | j                  g d	g d
g dg      }t        |d   |       | j                  g dg dg dg      dz  }t        |d   |       y )Nr   r   r   )r=   r=   r=   r   r   r   r   r   r   r   r   )皙?g@)gffffff@r   r   )rr   rv   rv   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                     | j                  g dg dg dg      }| j                  g d      }t        t        j                  |      j	                         |       y Nr   r   r   )      ?r   r   r   r"   r   r   from_matrixr#   r$   r   r2   s      r   test_from_single_2d_matrixr   6  sM    
** C
 JJ34MH((-557Gr   c                     | j                  g dg dg dgg      }| j                  g dg      }t        t        j                  |      j	                         |       y r   r   r   s      r   test_from_single_3d_matrixr   @  sU    
**
  C
 JJ 456MH((-557Gr   c                    d}| j                  g d      t        j                  d      z  }| j                  g dg dg dg      }t        t	        j
                  |      j                         ||       t        t	        j
                  | j                  |d            j                         | j                  |d	      |       y )
N:0yE>)rj   r   r   r   '   )3~˷g6iпnzo?)r   r   6i?)r   r   g3~˷?r\   r   r   r,   )r"   r   r   r   r   r   r#   reshape)r$   rB   r2   r   s       r   test_from_matrix_calculationr   J  s    DJJ~.2>M
**/.- C
 H((-557TRH((C)CDLLNJJ}f5r   c                     | j                  t        j                  ddd            }t        t	        j
                  |      j                         |       y )Nr=   rD   r   )sizerandom_state)r"   r   rvsr   r   r   rJ   r$   r   s     r    test_matrix_calculation_pipeliner   X  s>    
**(,,QRaH
ICH((-7793?r   c                 P   d}t         j                  j                  d      }| j                  |j	                  d            }| j
                  j                  |      }t        |j                  d         D ]:  }||   dk  st        j                  |      |df   j                  ||df          }< t        j                  |      j                         }| j                  || j!                  |            }| j#                  d      | j%                  d      z   }t'        |||       y )Nr[   r   )rE   r=   r=   .r=   r\   )rG   rH   rI   r"   random_samplelinalgdetrN   rO   xpxatsetr   r   rJ   matmulmatrix_transposern   rK   r   )	r$   rB   rndr   detsrT   	ortho_matmult_resulteye3ds	            r   test_from_matrix_ortho_outputr   ]  s    D
))


"C
**S&&{3
4C99==D4::a=! 87Q;&&+af%))3q#v;,7C8 $$S)335I))Ir':':9'EFKHH[!BFF1I-EKT2r   c                    | j                  g dg dg dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         |d       | j                  g d	g d
g dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         |d       y )Nr   r   r   r   r   )5_%?gx'?r}   )gx'ܿr   r}   )r}   r}   rj   ư>r\   )r         r   )r   r   r   )r   r   r   r   r   )r"   r   r   r   rJ   )r$   r   expecteds      r   test_from_matrix_normalizer   n  s    
** C zz5557 8H H((-7798$O
** C zz<'') *H H((-7798$Or   c                    | j                  d      }t        j                  |      d   j                  d      }t	        |      rC| j                  | j                  t        j                  |      j                                     s;J t        j                  t        d      5  t        j                  |       d d d        t        j                  |      d   j                  d      }t	        |      rD| j                  | j                  t        j                  |      j                                     sJ y t        j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr=   r   r   r   zNon-positive determinantr   rr   )rK   r   r   r   r   r`   r   r   r   rJ   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]]:-GH 	&  %	& &&+d



#CSvvbhhx33C8BBDEFFF]]:-GH 	&  %	& 	&	& 	&	& 	&s   "E0E<0E9<Fc                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ y rX   )	rG   rH   r]   r   r   rJ   r^   r_   r`   ra   s      r   test_from_matrix_array_liker         
))


$CS)JZ113::<=A""15"111 ,JZ113::<=A66*))!%)8999r   c                     | j                  g dg dg dg      }t        j                  |      }|j                         j                  t        |       k(  sJ y )Nr   r   r   )r"   r   r   r#   re   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                     d}| j                  g d      }| j                  g d      }t        j                  |      }t        |j	                         ||       y NHz>r   )gJ?r   r   g<(?r\   r"   r   from_rotvecr   r#   r$   rB   rotvecr2   results        r   test_from_1d_single_rotvecr     sG    DZZ	"FJJ;<M!!&)FFNN$m$?r   c                     d}| j                  g dg      }| j                  g dg      }t        j                  |      }t        |j	                         ||       y r   r   r   s        r   test_from_2d_single_rotvecr     sL    DZZ$FJJ <=>M!!&)FFNN$m$?r   c                     d}| j                  g dg dg dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         ||       y )	Nr   r   rv   rv   r   rr   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#   )r$   rB   r   r2   s       r   test_from_generic_rotvecr     sd    DZZ F JJ45 
 M
 H((088:MPTUr   c                 B   | j                  dt        j                  d      z  dt        j                  d      z  dt        j                  d      z  gg dg dg      }t        j                  |      j                         }t        |d   | j                  d      d          t        |d	d df   |d
   dz         t        |d   | j                  d      d          t        |dd df   | j                  g d             t        |d   | j                  g d             y )NgMb@?r=   gMb@)皙?g333333?r   r   r   r=   rj   r   r   r   r   r   r=   g@w?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BQBK#!56DJ

9 5b 9:DBQBKJJ % &' DL"**^"<=r   c                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ y rX   )	rG   rH   r]   r   r   	as_rotvecr^   r_   r`   ra   s      r   test_from_rotvec_array_liker     r   r   c                     | j                  g d      }t        j                  |      }|j                         j                  t        |       k(  sJ y )Nr   )r"   r   r   r#   re   r   )r$   r   r   s      r   test_from_rotvec_int_dtyper    s@    ZZ	"FV$A99; 0 4444r   c                     | j                  dgdz        }t        j                  |d      }|j                         }| j                  |dz  | j                  z        }t        j                  |      }|j                         }t        ||       y )Ngvô0?r=   Tdegrees   )r"   r   r   r#   pir   )r$   rotvec1rot1quat1rotvec2rot2quat2s          r   test_degrees_from_rotvecr    sw    jj.)A-.G6DLLNE jj3./G(DLLNEE5!r   c                     t        j                  t        d      5  t        j                  | j                  ddg             d d d        y # 1 sw Y   y xY w)N Expected `rot_vec` to have shaper   r   rv   r   r   r   r   r   r"   r   s    r   test_malformed_1d_from_rotvecr    sA    	z)K	L 1RZZA/01 1 1   'AAc                     t        j                  t        d      5  t        j                  | j                  g dg dg             d d d        y # 1 sw Y   y xY w)Nr  r   r   r-   r   r   r   r  r   s    r   test_malformed_2d_from_rotvecr     sJ    	z)K	L RZZ)  	     +AAc           	         | j                  g dg dg dg      }|t        |dd      z  }t        j                  |      j	                         }t        |d      }t        |d d df   | j                  |d	z               t        | j                  j                  ||d d d df         | j                  d
      d       y )Nr   rv   rr   r   r   rr   r   ga2U0*3?r'   rr   T)r   keepdimsr   r=   rv   )r=   r=   r>   r\   )
r"   r   r   r!   r   r   cosr   crossrn   )r$   r   r   angles       r   test_as_generic_rotvecr    s    :: D
 	N4b488D%//1F6+EDAJuqy 12BIIOOFDBQBK8"((6:JQVWr   c                     | j                  g d      }| j                  g d      }t        j                  |      j                         }t	        |j
                  d       t        ||       y )Nr   rv   rv   gj*0	x?g$x?g:2(r=   r"   r   r!   r   r   rO   r   r$   r   expected_rotvecactual_rotvecs       r   test_as_rotvec_single_1d_inputr(    sR    ::m$Djj!CDO&&t,668M$$d+M?3r   c                     | j                  g dg      }| j                  g dg      }t        j                  |      j                         }t	        |j
                  d       t        ||       y )Nr   r"  r   r$  r%  s       r   test_as_rotvec_single_2d_inputr*  !  sW    ::}o&Djj"D!EFO&&t,668M$$f-M?3r   c                 $   | j                  g dg dg dg      }t        j                  |      }|j                  d      }t	        |d      }t        || j                  d      d	          t        |d
   |d          t        |d   |d          y )Nr   r   r   Tr  rr   r   g      ^@r   r   r   rv   )r"   r   r   r   r   r   )r$   r   rotr   r  s        r   test_as_rotvec_degreesr-  +  s    
**iI6
7C


s
#C]]4](F6+EE2::e,R01F1Ivay)F1Ivay)r   c                     | j                  g dg dg dg      }t        t        j                  |      j	                         |       t        t        j                  |d      j	                  d      |       y )Nr   r   rr   rv   )ga2U0*3gǺ6?ga2U0*?Tr  )r"   r   r   r   r   )r$   r   s     r   test_rotvec_calc_pipeliner0  6  sg    ZZ
 F
 H((0::<fEH((>HHQUHVr   c                     | j                  g d      }| j                  g d      }t        j                  |      }t        |j	                         |d       y )Nr   r   rj   r}   r   r   r   r[   r\   r"   r   from_mrpr   r#   r$   mrpr2   r   s       r   test_from_1d_single_mrpr8  B  sA    
**[
!CJJ~.Ms#FFNN$m%@r   c                     | j                  g dg      }| j                  g dg      }t        j                  |      }t        |j	                         |       y )Nr2  r3  r4  r6  s       r   test_from_2d_single_mrpr:  I  sD    
**k]
#CJJ/0Ms#FFNN$m4r   c                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ y rX   )	rG   rH   r]   r   r5  as_mrpr^   r_   r`   ra   s      r   test_from_mrp_array_liker=  P  s    
))


$CS)J*++-4467A""15"111 ,J*++-4467A66*))!%)8999r   c                     | j                  g d      }t        j                  |      }|j                         j                  t        |       k(  sJ y )Nr   )r"   r   r5  r#   re   r   )r$   r7  r   s      r   test_from_mrp_int_dtyper?  ]  s@    
**Y
C#A99; 0 4444r   c                     | j                  g dg dg dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         |       y )Nr   r   r   )r   r   r   g)g}+;?g}+;g}+;?gߨӉؿr'   )r"   r   r   r5  r#   )r$   r7  r2   s      r   test_from_generic_mrprA  c  s\    
** C JJ:  M H%%c*224mDr   c                     t        j                  t        d      5  t        j                  | j                  ddg             d d d        y # 1 sw Y   y xY w)NExpected `mrp` to have shaper   r   rv   r   r   r   r   r5  r"   r   s    r   test_malformed_1d_from_mrprE  o  sA    	z)G	H ."**aV,-. . .r  c                     t        j                  t        d      5  t        j                  | j                  g dg dg             d d d        y # 1 sw Y   y xY w)NrC  r   r   r  rD  r   s    r   test_malformed_2d_from_mrprG  t  sJ    	z)G	H "**&  	  r  c                     | j                  g dg dg dg      }|t        |d      d d d f   z  }| j                  g dg dg dg      }t        t        j                  |      j                         |       y )	Nr  r  r'   r   r   )gQUU?gvWUU?QUUտ)uFx?guFxrJ  r   )r"   r   r   r   r!   r<  )r$   r   expected_mrps      r   test_as_generic_mrprL  |  sv    :: D 	N4a(D11D::-- L H&&t,335|Dr   c           	          | j                  t        j                  | j                  dz  dz         ddg      }t	        t        j                  d| j                  g d      d      j                         |       y )	Nrv   r,   r}   r   ri   )i  r   r   Tr  )r"   r   tanr  r   r   rm   r<  )r$   rK  s     r   test_past_180_degree_rotationrO    s`     ::Q 77a@ALE2::k#:DIPPRr   c                     | j                  g d      }| j                  g d      }t        j                  |      j                         }t	        |j
                  d       t        ||       y )Nr   g?g?gO޿r#  r"   r   r!   r<  r   rO   r   r$   r   rK  
actual_mrps       r   test_as_mrp_single_1d_inputrU    sR    ::m$D::CDL##D)002J!!4(J-r   c                     | j                  g dg      }| j                  g dg      }t        j                  |      j                         }t	        |j
                  d       t        ||       y )Nr   rQ  r   rR  rS  s       r   test_as_mrp_single_2d_inputrW    sW    ::}o&D::DEFL##D)002J!!6*J-r   c                     | j                  g dg dg dg dg      }| j                  g dg dg dg dg      }t        t        j                  |      j	                         |       y )Nr   r/  )gzpy?r   r   )皙?r   rY  )gK}\UUſgK}\UU?rI  )r"   r   r   r5  r<  )r$   rT  rK  s      r   test_mrp_calc_pipelinerZ    sb    	 J
 ::.	 L
 H%%j188:LIr   c                     t        j                  d| j                  d      d      j                         }| j                  g d      t	        j
                  d      z  }t        ||       y )Nr   Z   Tr  r}   r   r   r   rv   )r   rm   r"   r#   r   r   r   )r$   r   r2   s      r   test_from_euler_single_rotationr^    sL    sBJJrNDAIIKDJJ~.1=MD-(r   c                     t        j                  d| j                  d      d      j                         }t        j                  d| j                  d      d      j                         }t	        ||       y )Nr   r\  Tr  Zr   rm   r"   rJ   r   )r$   	extrinsic	intrinsics      r   (test_single_intrinsic_extrinsic_rotationrd    sV    ##CBFPPRI##CBFPPRIIy)r   c                 ^   t         j                  j                  d      }| j                  |j	                  ddd            }| j                  |d      }t        j                  d|d	      j                         }t        j                  d
|d	      j                         }t        ||       y )Nr   r  )r   r=   lowhighr   rr   r   ri   Tr  ZYX)
rG   rH   rI   r"   randintflipr   rm   r#   r   )r$   r   abr   r   s         r   test_from_euler_rotation_orderrn    s    
))


"C


3;;13V;<=A
AE1d3;;=AE1d3;;=AAqr   c                     d}t        j                  d| j                  ddg      d      j                         }| j                  g dg dg dg      }t	        |||	       y )
Nr[   zxr\  Tr  r   r   r   rr   r   r\   ra  )r$   rB   r   r   s       r   -test_from_euler_elementary_extrinsic_rotationrr    s[    D


dBJJBx$8$
G
Q
Q
SC:: L
 CD1r   c           	      ~   d}| j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g d	g d
g dg      |       t	        |d   | j                  g dg dg dg      |       t	        |d   | j                  g dg dg dg      |       y )Nr      <   -   ru  rv  ru  rw  ru  rv  ZXYTr  r   )g# ?      пgΙ6d?)g$+H?+Pz?Ppƿ)gPpֿ+Pz?gPp?r\   r   )g+a?r{  (s=?)r  r|  g&(ٿ)r{  r~  r|  r   )ga}@?gF6g^@?)g0	8?gF6?g4?)      r   r|  r"   r   rm   rJ   r   )r$   rB   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           	      n   | j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g dg d	g d
g             t	        |d   | j                  g dg dg dg             t	        |d   | j                  g dg dg dg             y )Nrt  rx  ry  ZXZTr  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           	      n   | j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g dg d	g d
g             t	        |d   | j                  g dg d	g dg             t	        |d   | j                  g dg dg dg             y )Nrt  rx  ry  zxyTr  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           	      n   | j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g dg d	g d
g             t	        |d   | j                  g dg dg d
g             t	        |d   | j                  g dg dg dg             y )Nrt  rx  ry  zxzTr  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                     t         j                  j                  d      } d}t        j                  |       }t        j                  ||j                  |      j                               }|j                  |d      sJ t        j                  d|       }t        j                  ||j                  |      j                               }t        j                  |j                  |d            sJ y )NrY   ri   rZ   r[   r\   r=   )	rG   rH   r]   r   rm   as_eulerr^   r_   r`   )rR   orderrb   r   s       r   test_from_euler_array_liker  E  s    
))


$CES)JE:#6#6u#=#D#D#FGA""15"111 ,JE:#6#6u#=#D#D#FGA66*))!%)8999r   c                     t         j                  j                  d      } | j                  dd      }t	        j
                  d|d      }t	        j
                  dt        |      d      }|j                  |d	      sJ y )
NrY   Lr  )rg  rh  r   Tr  r[   r\   )rG   rH   r]   uniformr   rm   floatr_   )rR   degrb   r   s       r   test_from_euler_scalarr  S  sm    
))


$C
++$S+
)C$$S#t<JCsT:A""15"111r   	seq_tupleri   rc  )FTc                 *     fd}t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  t         j
                   dz  t         j
                  dz  |f      |d d df<   |j	                  t         j
                   t         j
                  |f      |d d df<    j                  |      }dj                  |      }|r|j                         }t        j                  ||      }|j                  |      }	|j                  |      }
t        ||	dd	
       t        ||
dd	
        ||	|z
  dd        ||
|z
  dd       y )Nc                     j                  | d      }j                  | d      }j                  ||      }j                  j	                  |      |k        sJ j                  ||k        sJ y Nr   r   meanstdhypotr`   rz   errormean_maxrms_maxr  r  rmsr$   s         r   
test_statsz1test_as_euler_asymmetric_axes.<locals>.test_stats_  l    wwu1w%ffUf#hhtS!vvbffTlX-...vvcGm$$$r   r     r=   rf  rv   r    r[   rB   rA   r>   +=rG   rH   rI   emptyr  r  r"   joinupperr   rm   r  _as_euler_from_matrixr   r$   r  rc  r  r   nr  seqrotationangles_quat
angles_mats   `          r   test_as_euler_asymmetric_axesr  [  sS   % ))


"CAXXq!fF;;BEE6QD;AF1a4L;;BEE6A:BEEAIQD;IF1a4L;;BEE6QD;AF1a4LZZF
'')
C iik""3/H##C(K //4JFKae<FJQU;{V#UE2zF"E51r   c                      fd}t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  |f      |d d df<   |j	                  t         j
                   t         j
                  |f      |d d df<    j                  |      }dj                  |d   |d   |d   g      }|r|j                         }t        j                  ||      }|j                  |      }	|j                  |      }
t        ||	dd	
       t        ||
dd
        ||	|z
  dd        ||
|z
  dd	       y )Nc                     j                  | d      }j                  | d      }j                  ||      }j                  j	                  |      |k        sJ j                  ||k        sJ y r  r  r  s         r   r  z0test_as_euler_symmetric_axes.<locals>.test_stats  r  r   r   r  r=   rf  r   rv   r  gvIh%<=r  &.>r?   r  r>   r  r  s   `          r   test_as_euler_symmetric_axesr    sV   % ))


"CAXXq!fF;;BEE6QD;AF1a4L;;1255t;<F1a4L;;BEE6QD;AF1a4LZZF ''9Q<1y|<
=Ciik""3/H##C(K//4JFKae<FJQT:{V#UE2zF"E51r   c                    d}| j                  g dg dg dg dg      }dj                  |      }|r|j                         }t        j                  ||d      }|j                         }t        |t        d	
      5  |j                  |d      }d d d        t        j                  |d      j                         }	t        ||	|       y # 1 sw Y   >xY w)Nr[   rw  r\  #   r     r  r\     r  r     r  Tr  Gimbal lockr   r\   
r"   r  r  r   rm   rJ   r   UserWarningr  r   
r$   r  rc  rB   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 ?"++C+>?''_dKUUWML-d;	? ?s   =CCc                    d}| j                  g dg dg dg dg      }dj                  |d   |d   |d   g      }|r|j                         }t        j                  ||d	
      }|j                         }t        |t        d      5  |j                  |d	
      }d d d        t        j                  |d	
      j                         }	t        ||	|       y # 1 sw Y   >xY w)Nr[   r  r   rv  r  r   K   rv  r  r  r  r  r  r  r   r   Tr  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 ?"++C+>?''_dKUUWML-d;	? ?s   	CC#c                 <   | j                  g dg dg dg dg      }dj                  |      }|r|j                         }t        j                  ||d      }t        |t        d	      5  |j                  |d      }|j                  |d      }d d d        t        d d d
dgf   d d d
dgf   d
d       t        |d d df   |d d df   d
d       | j                  g dg dg dg dg      }|d d df   d
k(  }dj                  |d
   |d   |d
   g      }|r|j                         }t        j                  ||d      }t        |t        d	      5  |j                  |d      }d d d        t        |t        d	      5  |j                  |d      }d d d        t        |d d d
dgf   |d d d
dgf   d
d       t        || df   || df   d
d       t        ||df   ||df   d       y # 1 sw Y   ixY w# 1 sw Y   xY w# 1 sw Y   wxY w)Nr  r  r  r  r  Tr  r  r   r   rv   r[   r  r   r   r  r  r  r  r   r\   )
r"   r  r  r   rm   r   r  r  r  r   )	r$   r  rc  r  r  r,  estimates_matrixestimates_quatidxs	            r   +test_as_euler_degenerate_compare_algorithmsr    sR    ZZ	 F '')
C iik


c64
8C	S+]	; 944S$4Gc489 QF#^A1vI%>QU $QT*N1a4,@qtT ZZ	 F A,!
C ''9Q<1y|<
=C iik


c64
8C	S+]	; H44S$4GH	S+]	; 9c489QF#^A1vI%>QU #q!>3$'#: a .a"8tS9 9:H H9 9s$   +'G9HH9HHHc                    d}t         j                  j                  d      }d}t        j                  ||      }t        j                  | j                  |j                                     }|j                         }|j                         }|j                         }| j                  t        j                  d||            }| j                  t        j                  d||            }	| j                  |ddf      }
t        j                  |
      dd dd df   j                  | j                  d            }
t        ||
|       t        |	|
|       y )	Nr[   r   rD   )numr   z...ij,...jk->...ikr=   .r\   )rG   rH   rI   r   r!   r"   r#   r   rJ   einsumr  r   r   r   rK   r   )r$   rB   r   r  prS   p_matq_matresult1result2r   s              r   test_invr    s   D
))


"C
AAC0A2::aiik23A	AKKMEKKMEjj#7FGGjj#7FGGHHaAYEFF5M#rr2A2+&**266!95EGU.GU.r   c                    d}t         j                  j                  d      }t        j                  |      }t        j                  | j                  |j                                     }|j                         }|j                         }|j                         }t        j                  ||      }t        j                  ||      }| j                  d      }	t        ||	|       t        ||	|       t        j                  d|      }
t        j                  | j                  |
j                                     }
|
j                         }|
j                         }|j                         }| j                  j                  ||      }| j                  j                  ||      }| j                  d      }t        j                   |      d	d dd df   j#                  | j                  d            }t        |||       t        |||       y )
Nr[   	   #;h29s+,g0Hn rZ   r=   r\   r   )r  rR   r   .)rG   rH   r]   r   r!   r"   r#   r   rJ   dotrK   r   r   r   r  r   r   r   )r$   rB   rR   r  rS   r  r  res1res2rK   r   r   x_matrixy_matrixr  r  r   s                    r   test_inv_single_rotationr  4  s   D
))

 G
HCC A2::aiik23A	AKKMEKKME66%D66%D
&&)CD#D)D#D)A3'A2::aiik23A	A{{}H{{}Hiix2Giix2GHHYEFF5M#rr2A2+&**266!95EGU.GU.r   c                 <   d}t        j                  |      }t        j                  | j                  |j	                                     }| j                  |      }t        |j                         |       t        |j                         j                         |       y )NrD   )	r   identityr!   r"   r#   rn   r   	magnituder   )r$   r  r   r   s       r   test_identity_magnituder  U  sl    
A!A2::aiik23Axx{HAKKM8,AEEG%%'2r   c                     t        j                  | j                  t        j                         j	                                     }|j                         dk(  sJ |j                         j                         dk(  sJ y )Nr   )r   r!   r"   r  r#   r  r   rf   s     r   test_single_identity_magnituder  ^  s^    2::h&7&7&9&A&A&CDEA;;=A557!###r   c                    d}d}t        j                  |d      }t        j                  | j                  |j	                                     }t        j                  | j                  t        j
                  |      j	                                     }||z  }t        |j	                         |j	                                ||j                         z  }t        |j                         | j                  |      |       y Nr[   rD   r   rZ   r\   
r   rH   r!   r"   r#   r  r   r   r  rn   r$   rB   r  r  rS   r   s         r   test_identity_invariancer  d  s    D
Aq!A2::aiik23A2::h&7&7&:&B&B&DEFAUFAIIK!12aeegFF$$&$?r   c                    d}d}t        j                  |d      }t        j                  | j                  |j	                                     }t        j                  | j                  t        j
                         j	                                     }||z  }t        |j	                         |j	                                ||j                         z  }t        |j                         | j                  |      |       y r   r  r  s         r   test_single_identity_invariancer  q  s    D
Aq!A2::aiik23A2::h&7&7&9&A&A&CDEAUFAIIK!12aeegFF$$&$?r   c           	         t        j                  | j                  d            }|j                         }t	        || j                  | j                  | j                  | j                  dg             t        j                  | j                  d             }|j                         }t	        || j                  | j                  | j                  | j                  dg             y )Nr,   r   )r   r!   rK   r  r   r"   r  r$   r   r   s      r   test_magnituder    s    266!9%A[[]FFBJJruubeeQ'?@ABFF1I:&A[[]FFBJJruubeeQ'?@Ar   c                     t        j                  | j                  d            }|d   j                         }t	        || j
                         |d   j                         }t	        |d       y )Nr,   r   r=   r}   )r   r!   rK   r  r   r  )r$   r   r  r  s       r   test_magnitude_single_rotationr
    sR    266!9%AdnnGGRUU#dnnGGS!r   c                 2   t         j                  j                  d      }t        j                  d|      }t        j                  d|      }t        j                  | j                  |j                                     }t        j                  | j                  |j                                     }||j                         z  }|j                         }| j                  t        j                  |            }t        |j                  ||      ||k         y )Nr  rD   rZ   )rG   rH   r]   r   r!   r"   r#   r   r  medianr	   r_   )r$   rR   r  rS   r   r_magrB   s          r   test_approx_equalr    s    
))

 G
HC$A$A2::aiik23A2::aiik23A	AEEGAKKME::bii&'DANN1d+edl<r   c                    t        j                  | j                  g d            }t        j                  | j	                  d            }|j                  |d         sJ |j                  |d         rJ |j                  |d   d      rJ |j                  |d   dd	      rJ t        j                  t        d
      5  |j                  |d   d      sJ 	 d d d        y # 1 sw Y   y xY w)N)r   r   r  r,   r=   r   绽|=r\   r   T)rB   r  zatol must be setr   r  )	r   r   r"   r!   rK   r_   r   warnsr  )r$   r  rS   s      r   !test_approx_equal_single_rotationr    s     	RZZ56A266!9%A>>!A$~~ad### ~~ad~///~~adt~<<<	k);	< 2~~adD~1112 2 2s   C&&C/c                    | j                  | j                  d       | j                  d      f      }t        j                  t        j                  d       t        j                  d      f      }| j	                  d| j
                  dz  d      }|D ]D  }t        j                  ||z        }t        |j                         j                         dd       F y )Nr=   r   rv   rE   r}   r  r\   )concatrK   rG   concatenatelinspacer  r   r   r   r  r  )r$   axesthetastr   s        r   	test_meanr    s    99rvvayj"&&),-D>>BFF1I:rvvay12D[[BEEAIs+F ?  T***,c>?r   c                    | j                  g dg dg dg      }| j                  d| j                  dz  d      }|D ]  }t        j                  ||d ddf   z        }|j                  ddg      }t        j                  ||z        }|j                         }t        ||j                         z  j                         d	d
        y )N)r}   r   r   r   r   rv   rE   .r   weightsr}   r  r\   )	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 E!!!d2A2s7m"34WWaVW$  T*FFHRVVX002CeDEr   c                    t        j                  | j                  d            }t        |j	                               rI|j                  | j                  d             }t        | j                  |j                              sJ y t        j                  t        d      5  |j                  | j                  d              d d d        y # 1 sw Y   y xY w)Nr,   r  znon-negativer   )r   r!   rK   r   r#   r  onesr`   r   _quatr   r   r   )r$   r   r   s      r   test_mean_invalid_weightsr%    s    266!9%AQYY[!FFBGGAJ;F'288AGG$%%%]]:^< 	(FFBGGAJ;F'	( 	( 	(s   "#CCc                     t        j                  | j                  g d            }|j                  d      }t	        |t               sJ y )Nr}   r}   r}   rj   Freturn_indices)r   r!   r"   reduce
isinstancer  s      r   test_reduction_no_indicesr,    s<    2::&:;<AXXUX+Ffh'''r   c                     t        j                  | j                  g d            }|j                  d      }t	        |      t
        u sJ t        |      dk(  sJ |\  }}}|J |J y )Nr'  Tr(  r=   )r   r!   r"   r*  typetuplelen)r$   r   r   reduced	left_best
right_bests         r   test_reduction_none_indicesr4    st    2::&:;<AXXTX*F<5   v;!%+"GY
r   c                    d}t         j                  j                  d      }t        j                  | j                  t        j                  d|      j                                     }t        j                  | j                  t        j                  d|      j                                     }t        j                  | j                  t        j                  d|      j                                     }|j                  ||d      \  }}}t        j                  t        |      t        |      t        |      f      }	t        |      D ]]  \  }
}t        |      D ]J  \  }}t        |      D ]7  \  }}t        j                  ||z  |z  j                         d	         |	|
||f<   9 L _ t        j                  t        j                  |	d
d      |	j                  d
   df      }	t        j                  t        j                  |	t        |      df      d
      }| j                  |t        |      z        }| j                  |t        |      z        }| j!                  ||k(        sJ | j!                  ||k(        sJ ||   |z  ||   z  }|j#                         |z  j%                         }t'        || j                  t        |            |       y )Nr[   r  r-   rZ   rD   r   Tr(  r=   r   r   rr   r   r\   )rG   rH   r]   r   r!   r"   r#   r*  rn   r0  	enumeraterz   r   moveaxisrO   argmaxr`   r   r  r   )r$   rB   rR   lr   r  r1  r2  r3  scalarsrT   lijpjkrkmax_indleft_best_checkright_best_checkreduced_checkmags                        r   !test_reduction_scalar_calculationrE    sU   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%&XXa4X%H"GY
 hhAAA/0G1 G2q\ 	GEAr"1 G2#%6627R<*@*@*B1*E#F1a G	GG 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o&*Q/?-@@M;;==(
3
3
5CC#a&)5r   c                 R   | j                  g dg dg dg      }t        j                  |      }t        j                  | j                  |d            }| j                  g d      }| j                  |d      }| j                  g d      }| j                  |d      }t	        |j                  |      |       t	        |j                  |      |       t	        |j                  |      |       t	        |j                  |      |       | j                  g d      }| j                  |d      }	t	        |j                  |d	
      |       t	        |j                  |d	
      |	       t	        |j                  |d	
      |	       t	        |j                  |d	
      |	       y )Nr   rr   r   r   r   r   r   )rj   rv   r=   g       r   r=          @rr   r=   Tinverse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_pointrX    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                    | j                  g dg dg dg      }t        j                  |      }t        j                  | j                  |d            }| j                  g dg dg      }| j                  g dg d	g      }t	        |j                  |      |       t	        |j                  |      |       | j                  g d
g dg      }t	        |j                  |d      |       t	        |j                  |d      |       y )NrG  r   r   r   r   r   r,   r-   r   rH  )r,   r   rI  )r-   r   TrK  rM  )r$   r   r1r2v	v_rotated	v_inverses          r   *test_apply_single_rotation_multiple_pointsrb    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                    t        j                  d      }t        j                  g dg dg dg      |d<   t        j                  g dg dg dg      |d<   | j                  |      }t	        j
                  |      }| j                  g d	      }| j                  |d
      }| j                  g dg dg      }t        |j                  |      |       t        |j                  |      |       | j                  g dg dg      }t        |j                  |d      |       t        |j                  |d      |       y )Nrv   r=   r=   rG  r   r   r   rq  r   r   r   r   rH  )r   r!  rv   rI  )r   r=   r   TrK  )	rG   r  arrayr"   r   r   rN  r   rO  )r$   r   r   v1v2r`  ra  s          r   *test_apply_multiple_rotations_single_pointrh  *  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                    t        j                  d      }t        j                  g dg dg dg      |d<   t        j                  g dg dg dg      |d<   | j                  |      }t	        j
                  |      }| j                  g d	g d
g      }| j                  g dg dg      }t        |j                  |      |       | j                  g dg dg      }t        |j                  |d      |       y )Nrd  rG  r   r   r   rq  r   r   r   rZ  rH  )r,   ir-   rI  )r,   r   r[  TrK  )rG   r  re  r"   r   r   r   rO  )r$   r   r   r_  r`  ra  s         r   -test_apply_multiple_rotations_multiple_pointsrj  G  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                 P   | j                  g d      }| j                  |g      }| j                  ||g      }| j                  d      }| j                  |g      }| j                  ||g      }t        |||g|||g      D ]  \  }}t        j                  |      }	|j
                  }
|	j                  s+|j
                  dk(  s|j
                  dk(  rt        |	      df}
|	j                  |      }|j
                  |
k(  sJ |	j                  |d      }|j
                  |
k(  rJ  y )N)rj   rJ  r+   r=   r#  r   TrK  )	r"   rK   r   r   r   rO   singler0  rO  )r$   vector0vector1vector2matrix0matrix1matrix2r   r_  r   rO   r   s               r   test_apply_shapesrs  ^  s   jj)Gjj'#Gjj'7+,GffQiGjj'#Gjj'7+,G'73gw5PQ  1  #xxQWW_60AVQKEGGAJww%GGAtG$ww% r   c                     t         j                  j                  d      } t        j                  |       }| j	                  ddd      }|j                  |j                               }|j                  |      }t        ||d       | j	                  ddd	      }|j                  |j                               }|j                  |      }t        ||d       y )
NrY   rZ   irE   r#  r   r[   r\   rv   r=   )rG   rH   r]   r   r  rO  r^   r   )rR   r   r  r_  
v_expecteds        r   test_apply_array_likerx  q  s    
))


$CC AD#D)A	
AJAz.D#F+A	
AJAz.r   c                    t        j                  d      }t        j                  g dg dg dg      |d<   t        j                  g dg dg dg      |d<   | j                  |      }t	        j
                  |      }t        |d   j                         |d   d	
       t        |d   j                         |d   d	
       t        |d d j                         | j                  |d   d      d	
       y )Nrd  rG  r   r   r   rq  r   r   r>   r\   r   rr   r   r   )	rG   r  re  r"   r   r   r   rJ   rN  r   s      r   test_getitemrz    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                     t        j                  t        d      5  t        j                  | j                  g d            d    d d d        y # 1 sw Y   y xY w)Nnot subscriptabler   r'   r   )r   r   	TypeErrorr   r!   r"   r   s    r   test_getitem_singler~    sB    	y(;	< 82::l34Q78 8 8s   *AAc                     t        j                  g dg dg dgg dg dg dgg      } t        j                  |       }t	        |dg   j                         | dg   d       t	        |dd	g   j                         | dd	g   d       y )
Nr   r   r   rq  r   r   r>   r\   r   )rG   re  r   r   r   rJ   )r   r   s     r   test_getitem_array_liker    s    
((\   ! "C 	S!AAqcF$$&QCu=Aq!fI'')31v;UCr   c                    t        j                  | j                  g d            }t        j                  t
        d      5  t        j                  | j                  g d            |d<   d d d        y # 1 sw Y   y xY w)Nr'   r|  r   r   )r   r!   r"   r   r   r}  rf   s     r   test_setitem_singler    s\    2::l34A	y(;	< <!!"**\":;!< < <s   *A55A>c                    t         j                  j                  d      }t        j                  | j                  t        j                  d|      j                                     }t        j                  | j                  t        j                  d|      j                                     }||dd t        |dd j                         |j                                y )Nr  rD   rZ   r-   r   r   rG   rH   r]   r   r!   r"   r#   r	   r$   rR   r]  r^  s       r   test_setitem_slicer    s    
))

 G
HC			BJJxrs'C'K'K'MN	OB			BJJxqc'B'J'J'LM	NBBqGBqGOO%rzz|4r   c                    t         j                  j                  d      }t        j                  | j                  t        j                  d|      j                                     }t        j                  | j                  t        j                  |      j                                     }||d<   t        |d   j                         |j                                y )Nr  rD   rZ   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BqEBqEMMORZZ\2r   c                     t        j                  | j                  t        j                  dd      j	                                     }t        j                  t        d      5  d|d<   d d d        y # 1 sw Y   y xY w)NrD   r   rZ   zRotation objectr   r   )r   r!   r"   rH   r#   r   r   r}  rf   s     r   test_setitem_wrong_typer    s\    2::hooba&@&H&H&JKLA	y(9	: !  s   #A22A;c                 X   t        j                  d      }t        j                  g dg dg dg      |d<   t        j                  g dg dg dg      |d<   | j                  |      }t	        j
                  |      }t        t        |      d	       t        t        |d d
       d       y )Nrd  rG  r   r   r   rq  r   r   rv   rr   )rG   r  re  r"   r   r   r   r0  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                     t         j                  j                  d      } t        t	        j                  |       j                         j                  d       t        t	        j                  d |       j                         j                  d       t        t	        j                  d|       j                         j                  d       t        t	        j                  d|       j                         j                  d       y )Nr  rZ   r,   r   r   r-   r-   r,   )rG   rH   r]   r   r   r#   rO   rZ   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                 "   | j                  g dg dg      }| j                  |d      }t        j                  ||      \  }}t        |j	                         | j                  d      d       t        || j                  d      d	   d
d       y )Nr   rZ  T)copyr=   r[   r\   r}   r   Fr   check_shaperB   )r"   r   align_vectorsr   rJ   rK   )r$   r   r   r   rssds        r   test_align_vectors_no_rotationr    sr    


Iy)*A


14
 A$$Q*GAtAKKM266!959D"**S/"-5tLr   c                    t         j                  j                  d      }t        j                  | j                  t        j                  |      j                                     }| j                  |j                  d            }|j                  |      }t        j                  ||      \  }}t        |j                         |j                                t        || j                  d      d   dd	       y )
Nl	   #t}":xL rZ   r-   r=   ru  r}   r   Fr   r  )rG   rH   r]   r   r!   r"   r#   normalrO  r  r   )r$   rR   crm  rl  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                    | j                  g dg dg      }| j                  g dg dg      }t        j                  ||      \  }}t        ||j	                  |      d       t        || j                  d      d   d	d
       y )N)gq?gH*fܿgHlB?)gMs^E?g+Obp޿gn^w)g=2)p?g[[VKg?gw7?)gѿgGvgpr   r\   r}   r   Fr   r  )r"   r   r  r   rO  )r$   r   r   r  r  s        r   $test_align_vectors_improper_rotationr    s{    


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


8:< 	=A &&q!,ICAsyy|$/D"**S/"-5tLr   c                 <   | j                  d      d   }| j                  g dg dg dg      }d}| j                  g dg dg dg      }| j                  g d	g d
g dg      }t        j                  ||d      \  }}}t        |||       t        |||       y )NgbQ?r   )r   r}   r}   )r}         ?rj   )r}   rj   rj   r   r   r   r   r   r   )r   g?r   )r   g?r   Treturn_sensitivityr\   )r"   r   r  r   )	r$   rssd_expectedsens_expectedrB   rl  rm  r,  r  senss	            r   #test_align_vectors_rssd_sensitivityr    s    JJ01"5MJJ . . 0 1M D


Iy)45A


I{K89A,,QdKOCtD-d3D-d3r   c                 J   d}| j                  t        j                  |d      j                  g d            }| j                  t        j                  |d      j                  g d            }d}t        j                  ||| j                  |      d      \  }}}t        j                  |||| j                  |      z  d      \  }}	}
t        |j                         |j                                t        t        j                  |      |z  |	d	       t        ||
       y )
NrD   r   rZ   r   r   rv   Tr   r\   )
r"   r   rH   rO  r  r#  r   rJ   r   r   )r$   r  rl  rm  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 ..q!RWWQZFD% ..q!URWWQZ5GND%DNN$dnn&67DIIe$u,e$?D$r   c                 H   t         j                  j                  d      }d}t        t	        j                  |      |       }| j                  |j                  |df            }|j                  |      }t        j                  d      }d|z  }t	        j                  | j                  |j                  |df|                  }|j                  |      }	t	        j                  |	|d	
      \  }
}}||
j                         z  j                         }t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       ||z  }t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       | j                  |	|
j                  |      z
  dz        dz  }t        ||d       y )Nr  rE   rZ   r=   ru  r   r  )r   r  Tr  r   r}   r   r\   rv   r   )r   r   )rv   rv   r   F)r  )rG   rH   r]   r%   r   r"   r  rO  deg2radr   r  r   r   r   sum)r$   rR   	n_vectorsr,  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NCs #'')O..0LLORZZ_R%8yILORZZ_R%8yILORZZ_R%8yI 5LCCIrzz#r2CCIrzz#r2CCIrzz#r2C		'(::q@ASHJD*%8r   c                    t        j                  t        d      5  | j                  g d      | j                  g d      }}t	        j
                  ||       d d d        t        j                  t        d      5  | j                  g d      | j                  g d      }}t	        j
                  ||       d d d        t        j                  t        d      5  | j                  g dg dg      | j                  g dg      }}t	        j
                  ||       d d d        t        j                  t        d      5  | j                  g dg      | j                  g dg      }}| j                  d	gg      }t	        j
                  |||       d d d        t        j                  t        d
      5  | j                  g dg dg      | j                  g dg dg      }}| j                  g d      }t	        j
                  |||       d d d        | j                  g dg      | j                  g dg      }}| j                  dg      }t        |      rgt	        j
                  |||      \  }}| j                  | j                  |j                                     sJ d       | j                  |      sBJ d       t        j                  t        d      5  t	        j
                  |||       d d d        | j                  g dg dg      | j                  g dg dg      }}| j                  | j                  | j                  g      }t        |      rgt	        j
                  |||      \  }}| j                  | j                  |j                                     sJ d       | j                  |      sBJ d       t        j                  t        d      5  t	        j
                  |||       d d d        | j                  g dg      | j                  g dg      }}t        |      rft	        j
                  ||      \  }}| j                  | j                  |j                                     sJ d       | j                  |      sAJ d       t        j                  t        d      5  t	        j
                  ||       d d d        | j                  g dg dg      | j                  g dg dg      }}| j                  | j                  d	g      }t        |      rDt	        j
                  |||d      \  }}}| j                  | j                  |            sDJ d       t        j                  t        d      5  t	        j
                  |||d       d d d        | j                  g dg      | j                  g dg      }}t        |      rDt	        j
                  ||d      \  }}}| j                  | j                  |            sJ d       y t        j                  t        d      5  t	        j
                  ||d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   &xY w# 1 sw Y   y xY w)Nz Expected input `a` to have shaper   r   r   z Expected input `b` to have shapez/Expected inputs `a` and `b` to have same shapesrZ  z&Expected `weights` to be 1 dimensionalr   z+Expected `weights` to have number of valuesrr   zQuaternion should be nanzRSSD should be nanz)`weights` may not contain negative valuesz#Only one infinite weight is allowedr   z(Cannot align zero length primary vectorsTr  z Sensitivity matrix should be nanz Cannot return sensitivity matrix)r   r   r   r"   r   r  r   r`   r   r#   inf)r$   rl  rm  r  r   r  r  s          r    test_align_vectors_invalid_inputr  A  s   	z)K	L %zz,'I)>1q!$% 
z)K	L %zz)$bjj&>1q!$% 
z *? 
@ %zz9i012::yk3J1q!$%
 
zE
G .zz9+&

I;(?1**qcU#q!W-	. 
zJ
L .zz9i012::y)>T3U1**Y'q!W-	. ::yk"BJJ	{$;qAjj"GW((Aw74vvbhhqyy{+,H.HH,xx~333~]]:!LN 	2""1a1	2 ::y),-rzz9i:P/QqAjj"&&"&&)*GW((Aw74vvbhhqyy{+,H.HH,xx~333~]]:!FH 	2""1a1	2 ::yk"BJJ	{$;qAQ((A.4vvbhhqyy{+,H.HH,xx~333~]]:!KM 	)""1a(	) ::y),-rzz9i:P/QqAjj"&&!%GQ ..q!WQUV4vvbhhtn%I'II%]]:!CE 	K""1aTJ	K ::yk"BJJ	{$;qAQ ..q!M4vvbhhtn%I'II%]]:@B 	N ..q!M	N 	NQ% %% %% %
. .. .	2 	2	2 	2	) 	)	K 	K	N 	Nsz   =Y<=Y,AY9AZ7AZZ !Z-5Z:	[=[Y),Y69ZZZ Z*-Z7:[[[c                    d}| j                  g dg dg      }| j                  g dg dg      }| j                  g dg dg dg      }t        j                  ||| j                  | j                  dg      	      \  }}t	        |j                         ||
       t	        |j                  |      ||
       t        j                  |d||       sJ | j                  g dg dg      }d}t        j                  ||| j                  | j                  dg      	      \  }}t	        |j                         ||
       t	        |j                  |      d   |d   |
       t        j                  ||||       sJ | j                  g dg dg      }t	        |j                  |      ||
       | j                  g dg dg      }| j                  g dg dg      }d}t        j                  ||| j                  | j                  dg      	      \  }}t	        |j                  |      d   |d   |
       t        j                  ||||       sJ y )Nr[   r   r   r}   r   r   r  r   r   r   r  r\   r}   )rB   r$   )r   rv   r   rj   r   r   r   rv   r   )r   r=   rr   )ry   r=   rv   r/  g4i?)	r"   r   r  r  r   rJ   rO  r   isclose)	r$   rB   rm  rl  
m_expectedRr  r  
a_expecteds	            r   "test_align_vectors_align_constrainr    s   
 D


Iy)*A


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

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

I{+,A


L*-.A&M$$Q2::rvvqk3JKGAtAGGAJv&&	=;;t]"===r   c                     d}g }t        d      D ]9  }|j                  t        j                  |d|z         j	                                ; t        |      D ]  }| j                  d|d   |   d   z  d|d   |   d   z  g      }| j                  d|d   |   d   z  d	|d   |   d   z  g      }t        j                  ||d
dg      \  }}t        j                  ||| j                  dg      \  }}t        |j	                         |j	                         d        t        |      D ]  }| j                  d|d   |   d   z  d|d   |   d   z  d|d   |   d   z  g      }| j                  d	|d   |   d   z  d|d	   |   d   z  d|d   |   d   z  g      }t        j                  ||g d      \  }}t        j                  ||| j                  ddg      \  }}t        |j	                         |j	                         d        y )NrE   r   rD   rZ   r   r   rv   r=   r,       _Br  -C6?r\   r-   )r  rv   r   )	rN   appendr   rH   rJ   r"   r  r  r   )	r$   r  matsrT   rl  rm  r  _R2s	            r   test_align_vectors_near_infr    s    	AD1X @HOOA262<<>?@ 1X BJJDGAJqM)1tAwqz!}+<=>JJDGAJqM)1tAwqz!}+<=>%%aT1I>1&&q!bffa[AAr||~DAB 1X BJJ$q'!*Q-471:a=!DGAJqM/JKJJ$q'!*Q-471:a=!DGAJqM/JK%%aLA1&&q!bffa^DAr||~DABr   c                 ~   d}| j                  g dg dg      }| j                  g dg dg      }| j                  g dg dg dg      }t        j                  ||| j                  dg      \  }}t	        |j                         ||	       t        j                  |d
   |d
         \  }}t	        |j                         ||	       t	        |j                  |d
         |d
   |	       | j                  g dg dg      }| j                  g dg dg dg      }t        j                  ||| j                  dg      \  }}t	        |j                         ||	       t        j                  |d
   |d
         \  }}t	        |j                         ||	       t	        |j                  |d
         |d
   |	       y )Nr[   rj   r   r   r   r  r   r   r   r  r\   r   r   )r"   r   r  r  r   rJ   rO  )r$   rB   rl  rm  r  r  r  s          r   test_align_vectors_parallelr    sx   D


K+,A


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


Iy)*A[&&( )J !!!Q<DAqAKKM:D9!!!F)QvY7DAqAKKM:D9AGGAfI&&	=r   c           	      2   d}t        j                  g dg dgg dg dgg dg dgg      }|D cg c]  }|d    |d   g }}t        ||      D ]  \  }}| j                  |      | j                  |      }}t	        j
                  ||| j                  dg      \  }}t        |j                         | j                  |	       t        |j                  |d
         |d
   |	        t	        j                  dd      }t	        j                  |j                         dz        }	g dg dg}g dg dg}g }|	D ]=  }
|j                  t        j                  |
j                  |d         |d   g             ? |D ]  }| j                  |      | j                  |      }}t	        j
                  ||| j                  dg      \  }}t	        j
                  ||ddg      \  }}t        |j                         |j                         |	        y c c}w )Nr[   r  r   r   r   r   r   r  r\   r   rE   rZ   r  r   r  )rG   re  zipr"   r   r  r  r   r  r  rO  rH   r   r   r  rJ   )r$   rB   
as_to_testrl  
bs_to_testrm  r  r  RsdRsdRr  s               r   test_align_vectors_antiparallelr    s   DK3%y1%y13 4J *44AAaD5!A$-4J4J
+ B1zz!}bjjm1%%aRVVQK@1ruu48&	*AfIDA	B 
!	$B


r||~d2
3C	YA	YAJ <"((BHHQqTNAaD#9:;< Bzz!}bjjm1%%aRVVQK@1&&q!dAY?Ar||~DA	B 5s   Hc                    d}t        j                  dd      j                         }t        j                  dd      j                         }t        ||      D ]}  \  }}| j	                  |d         }| j	                  |d         }t        j
                  ||      \  }}	t        |j                  |      ||       t        j                  |	d|      r}J  y )Nr[   rE   r   rZ   r   r\   )
r   rH   rJ   r  r"   r  r   rO  rG   r  )
r$   rB   mats_amats_bmat_amat_brl  rm  r  r  s
             r   test_align_vectors_primary_onlyr    s    D__Sa(224F__Sa(224FFF+ .uJJuQx JJuQx  ((A.4
AD1zz$---.r   c                     t         j                  j                  d      } t        j                  |       }| j	                  d      }|j                  |      }t        j                  ||      \  }}t        j                  |j                         |j                               \  }}t        |j                         |j                                t        ||       y )NrY   rZ   r  ru  )
rG   rH   r]   r   r  rO  r  r^   r   r#   )rR   r  rm  rl  est_expectedr  r  r  s           r   test_align_vectors_array_liker    s    
))


$CC A


A	
A"*"8"8A">L-&&qxxz188:>ICL((*CKKM:D-(r   c                     | j                  g d      }t        t        j                  |            }t	        |       r
d}||k(  sJ y |j                  d      sJ y )Nr'   zRotation.from_matrix(array([[1., 0., 0.],
                            [0., 1., 0.],
                            [0., 0., 1.]]))Rotation.from_matrix()r"   reprr   r!   r
   
startswithr$   rS   actualr   s       r   test_repr_single_rotationr    sX    


< A($$Q'(F|/ !!!  !8999r   c                     | j                  g dg dg      t        j                  d      z  }t        j                  |      }t        |       r
d}||k(  sJ y |j                  d      sJ y )N)r}   r   r   r   r   rv   a-  Rotation.from_matrix(array([[[ 0.,  0.,  1.],
                             [ 0.,  1.,  0.],
                             [-1.,  0.,  0.]],
                     
                            [[ 0., -1.,  0.],
                             [ 1.,  0.,  0.],
                             [ 0.,  0.,  1.]]]))r  )r"   r   r   r   r!   r
   r  r  s       r   test_repr_rotation_sequencer  ,  sh    


NL12TYYq\AA""1%(F|4 !!!  !8999r   c                 l   t         j                  j                  d      }t        j                  | j                  |j                  d                  }|j                         }g d}t        ||      }t        |j                  t        | j                  d                  sJ g d} ||      }|j                         }|d d df   dk  d d d f   }	| j                  |	| |      }|d d df   dk  d d d f   }	| j                  |	| |      }t        |d   |d          t        |d   |d	          t        |d
   |d          t        |d   |d          t        |d   |d          | j                  |d   |d   z        }
| j                  |d   |d	   z        }t        |
|       | j                  |d   |d   z        }| j                  |d   |d
   z        }t        ||       | j                  |d	   |d   z        }t        |d|
dz  z  dz
         t        t!        |      t!        |             y )Nr   r  ru  )r   r   rv   r=   r,   )r   r   r  r   r  rv   g      @r=   g      
@g@r,   rr   r   r   r   )r-   .r   )r   .)rD   .)r,   .rv   r   )rG   rH   rI   r   r!   r"   r  r#   r   r+  timesr.  wherer   r  r   r0  )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  =  s7   
))


"C!!"**S[[f[-E"FGH  "IIH-Ll(($rzz!}*=>>>=Eu%K&&(L B!#QW-D88D<->Laeq !T'*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                     t        j                  t        d      5  | j                  g dg dg      }| j                  ddg      }t	        ||       d d d        y # 1 sw Y   y xY w)Nzmust be a `Rotation` instancer   r   r'   r   r   )r   r   r}  r"   r   )r$   r   r  s      r   test_slerp_rot_is_rotationr   l  sY    	y(G	H JJ	!# $JJ1va	  s   7AA%z*must be a sequence of at least 2 rotationsc                     t        j                  | j                  g dg            }t        j                  t
        t              5  t        dg|       d d d        y # 1 sw Y   y xY w)N)rj   rv   r=   r,   r   r   )r   r!   r"   r   r   r   SLERP_EXCEPTION_MESSAGEr   rf   s     r   test_slerp_single_rotr  w  sM    2::~&678A	z)@	A qc1  s   AA'c                    t        j                         }t        j                  | j                  |j	                                     }t        j                  t        t              5  t        g |       d d d        y # 1 sw Y   y xY w)Nr   
r   rH   r!   r"   r#   r   r   r   r  r   rf   s     r   test_slerp_rot_len0r  }  sZ    A2::aiik23A	z)@	A b!  s   &A<<Bc                    t        j                  d      }t        j                  | j                  |j	                                     }t        j                  t        t              5  t        dg|       d d d        y # 1 sw Y   y xY w)Nr   r   r  rf   s     r   test_slerp_rot_len1r    s^    A2::aiik23A	z)@	A qc1  s   'A>>Bc                 L   t        j                  t        d      5  t        j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  dgdgg      }t        ||       d d d        y # 1 sw Y   y xY w)Nz.times to be specified in a 1 dimensional arrayr   r   )rv   r,   ru  r   rv   )r   r   r   rG   rH   rI   r   r!   r"   r  r   r$   r   r   r  s       r   test_slerp_time_dim_mismatchr    s    	zM
O ii##A&rzz#++6+*BCDJJ a  s   A5BB#c                 D   t        j                  t        d      5  t        j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  d      }t        ||       d d d        y # 1 sw Y   y xY w)Nz7number of rotations to be equal to number of timestampsr   r   r  ru  r   )r   r   r   rG   rH   rI   r   r!   r"   r  aranger   r
  s       r   !test_slerp_num_rotations_mismatchr    sz    	z *@ 
A ii##A&rzz#++6+*BCDIIaLa  s   A1BBc                    t         j                  j                  d      }| j                  |j	                  d            }t        j                  |      }g d}t        |      r9t        ||      }| j                  | j                  |j                              sJ y t        j                  t        d      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r  ru  )r   r   rv   rv   r,   strictly increasing orderr   rG   rH   rI   r"   r  r   r!   r   r   r`   r   r  r   r   r   r$   r   rS   r   r  ss         r   test_slerp_equal_timesr        
))


"C


3;;F;+,A1AAQ!QKvvbhhqww'(((]]:-HI 	!QK	 	 	   9CCc                    t         j                  j                  d      }| j                  |j	                  d            }t        j                  |      }g d}t        |      r9t        ||      }| j                  | j                  |j                              sJ y t        j                  t        d      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r  ru  )r   r   r=   rv   r,   r  r   r  r  s         r   test_slerp_decreasing_timesr    r  r  c                 ~   t         j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  d      }t        ||      }t        j                  t        d      5  | j                  dgdgg      } ||       d d d        y # 1 sw Y   y xY w)	Nr   r  ru  r-   z&`times` must be at most 1-dimensional.r   g      @g@)rG   rH   rI   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 zzC5$'5#* +	,	  s   B33B<c                    t         j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  d      dz   }t        ||      }| j                  g d      }| j                  g d      }t        |      r9 ||      j                         }| j                  || j                  |      k\  || j                  |      k        }| j                  | j                  || df               sJ | j                  | j                  ||df                sJ  ||      j                         }| j                  || j                  |      k\  || j                  |      k        }| j                  | j                  || df               sJ | j                  | j                  ||df                sJ y t!        j"                  t$        d	
      5   ||       d d d        t!        j"                  t$        d	
      5   ||       d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY w)Nr   r  ru  r-   r   r  )r   rv   r   .ztimes must be within the ranger   )rG   rH   rI   r   r!   r"   r  r  r   r   r#   logical_andminmaxr`   r   r   r   r   )	r$   r   r   r  r  	times_low
times_highrS   in_ranges	            r   !test_slerp_call_time_out_of_ranger#    s   
))


"C2::ckkvk&>?@A
		!qAaA

9%II&JYiL  ">>)rvvay"8)rvvay:PQvvbhhq(C01222vvrxx(C- 011222jM!!#>>*q	"9:PQ;RSvvbhhq(C01222vvrxx(C- 011222]]:-MN 	iL	]]:-MN 	jM	 		 		 	s   :	H8&	I8IIc                 >   t        j                  d| j                  ddg      d      }t        ddg|      } |d      }t        j                  d| j                  d      d      }||j	                         z  }| j                  |j                         dd	
      sJ y )NXr   P   Tr  r   r  r  r?   r\   )r   rm   r"   r   r   allcloser  )r$   r   r  r_interpolatedr_interpolated_expecteddeltas         r   test_slerp_call_scalar_timer+    s    CQG!4dCAq!faAtWN&11#rzz"~tT488::E;;u(!%;888r   c                    t        j                  dd      }t        j                  | j                  |j	                                     }t        j                  dd      }t        j                  | j                  |j	                                     }| j                  t        |            }|D ]/  }|||z  z  }t        t        |j	                         d      |       1 y )N2   r   rZ   r  r   r   )	r   rH   r!   r"   r#   r#  r0  r   r   )r$   qsrsr   rS   s        r   test_multiplication_stabilityr0    s    		#B			BJJrzz|4	5B	1	%B			BJJrzz|4	5Bwws2wH H
a"frzz|!<hGHr   c                    d}t        j                  dd      }t        j                  | j                  |j	                                     }|j                         }dD ]@  }||z  }t        j                  d      }t        j                  | j                  |j	                                     }t        t        |            D ]  }|dkD  r||z  }||z  } ||j                         z  j                         }| j                  ||k        sJ t        j                  | j                  g d            }||z  j	                         j                  dk(  sJ t        j                  | j                  g dg            }||z  j	                         j                  dk(  rAJ  d	D ]W  }||z  }t        j                  ||j                         z        }t        |j	                         |j	                         |
       Y t        j                  | j                  g d            }d}||z  }t        j                  ||j                         z        }t        |j	                         |j	                         |
       y )Nr  rD   r   rZ   )r[  r   rr   r   r   rv   r-   r'   r  r   )      r   g       r}   r   r  r\   )r[   r   r   r=   )r   rH   r!   r"   r#   r   r  rN   rz   r  r`   rO   r   r   r   )	r$   rB   r  p_invr  rS   r   r  angs	            r   test_powr5    s   D"A2::aiik23AEEGE% 0Fb!rzz!))+67s1v 	A1uEI		
 1557{%%'vvcDj!!! rzz,781~~%%---rzz<.9:1~~%%///#0( / =F  Q[[]!23		QYY[t<= 	RZZ67A	A	QAQ./AAIIK48r   c                    t        j                  d      }t        j                  | j                  |j	                                     }t        j                  t        d      5  t        |dd       d d d        y # 1 sw Y   y xY w)Nr   rZ   zmodulus not supportedr   r   )	r   rH   r!   r"   r#   r   r   NotImplementedErrorpow)r$   r  s     r   test_pow_errorsr9    s_    AA2::aiik23A	*2I	J Aq!  s   $A;;Bc                  F   t        j                  d      } t        j                  dd      }t        j                  |       }t	        |j
                  d       t        j                  |      }t	        |j
                  d       t        |d   j                         |d   j                                t        |d   j                         |d   j                                t        j                  | g      }t	        |j
                  d       t	        |d   |        t        j                  |g      }t	        |j
                  d       t        |d	   j                         |d   j                                t        |d
   j                         |d   j                                t        j                  | |gt              }t	        |j
                  d       t	        |d   |        t	        |d   |       t        j                  |||g      }t	        |j
                  d       y )Nr   rZ   rv   r   r   )rv   )r   )r   rv   r   )r   r   re   )r=   rv   )	r   rH   rG   re  r   rO   r   rJ   object)rl  multiplere  s      r    test_rotation_within_numpy_arrayr>  "  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HHfh'v6Ed#q6"q8$HHh(34Ef%r   c                    t        j                  | j                  ddt        j                  t
        j                  dz        t        j                  t
        j                  dz        g            }t        j                  |      }t        j                  |      }t        |j                         |j                         d       y Nr   r,   r>   r\   )r   r!   r"   r   sinrG   r  r  pickledumpsloadsr   rJ   )r$   r   pkl	unpickleds       r   test_picklingrG  A  s~     	2::q!TXXbeeAg->q@Q&RSTA
,,q/CS!IAKKM9#6#6#8uEr   c                 b   t        j                  | j                  ddt        j                  t
        j                  dz        t        j                  t
        j                  dz        g            }t        j                  |      }t        |j                         |j                         d       y r@  )r   r!   r"   r   rA  rG   r  r  r  deepcopyr   rJ   )r$   r   r]  s      r   test_deepcopyrJ  J  sn     	2::q!TXXbeeAg->q@Q&RSTA	q	BAKKM2<<>>r   c                  :   t        j                  g d      } | j                  d      }| j                  d      }|j                  d   du sJ |j                  d   du sJ t	        d |j
                  D              sJ t	        d |j
                  D              sJ y )Nr'   ri   XYZC_CONTIGUOUSTc              3   &   K   | ]	  }|d k\    ywr   Nr   .0rT   s     r   	<genexpr>z+test_as_euler_contiguous.<locals>.<genexpr>Y       *!qAv*   c              3   &   K   | ]	  }|d k\    ywrO  r   rP  s     r   rR  z+test_as_euler_contiguous.<locals>.<genexpr>Z  rS  rT  )r   r!   r  flagsr`   strides)r   e1e2s      r   test_as_euler_contiguousrZ  R  s    <(A	
E	B	
E	B88N#t+++88N#t+++*rzz*****rzz****r   c                 8   t        j                  dd      }t        j                  | j                  |j	                                     }g d}dgt        t        j                  |            z   }t        ||      D cg c]  \  }}||||z     }}}t        j                  |      }t        |j	                         |j	                                t        j                  |      }t        |j	                         |j	                                ||usJ t        j                  | j                  t        j                         j	                                     }t        j                  |      }t        |j	                         |j	                                y c c}}w )NrD   r   rZ   )r   rv   r=   r   r=   )r   rH   r!   r"   r#   listrG   cumsumr  r  r	   r  )	r$   r  sizesstartsrT   r  splitr   r,  s	            r   test_concatenatera  ]  s;   rq)H!!"**X-=-=-?"@AHES4		%())F+.vu+=>41aXaA>E>!!%(FH$$&(89 !!(+FH$$&(89 6!!! 

RZZ(9(9(;(C(C(EF
GC!!#&FCKKM6>>#34 ?s   ?Fc                    t        j                  t        d      5  t        | j	                  t        j
                         j                                     }t        j                  |dd g       d d d        y # 1 sw Y   y xY w)NzRotation objects onlyr   r   )r   r   r}  r   r"   r  r#   r  )r$   r,  s     r   test_concatenate_wrong_typerc  s  s_    	y(?	@ -rzz("3"3"5"="="?@Ac1d^,- - -s   AA88Bc                    t        | j                  g dg            }t        | j                  g dg dg            }t        | j                  g d            }t        |      dk(  sJ t        |      dk(  sJ t        j                  t
        d      5  t        |       d d d        |sJ |sJ |sJ y # 1 sw Y   xY w)Nr'   r   rv   zSingle rotation has no len().r   )r   r"   r0  r   r   r}  )r$   rotation_multi_onerotation_multirotation_singles       r   test_len_and_boolrh  z  s    !"**l^"<=bjj,)EFGNrzz,78O!"a'''~!###	y(G	H O >? s   B66B?c                     | j                  g d      }t        j                  |ddd      j                         }| j                  g d      t	        j
                  d      z  }t        ||       y )Nr   rb  r\  Tr  r]  rv   )r"   r   from_davenportr#   r   r   r   )r$   r   r   r2   s       r   #test_from_davenport_single_rotationrk    sX    ::i D""4b+/118 	JJ~.1=MD-(r   c                    | j                  g d      }| j                  g d      }t        j                  || j                  z  dz        }t        j                  |d| j                  dz        }t        |j                  d      |j                  d             | j                  |d      }t        j                  || j                  z  dz        }t        j                  |d| j                  dz  g      }t        |j                  d      |j                  d             | j                  ||gd	      }t        j                  || j                  | j                  dz  g| j                  d
z  gg      z        }|d   |d   z  }| j                  ||gd	      }t        j                  |d| j                  d
z  | j                  dz  g      }t        |j                  d      |j                  d             | j                  ||gd	      }t        j                  || j                  | j                  d
z  g| j                  dz  gg      z        }| j                  |d      }t        j                  |d| j                  d
z  | j                  dz  g      }t        |j                  d      |j                  d             y )Nr   r  r,   eTrl   r   r   r   r   r   )	r"   r   r   r  rj  r   r#   r   stack)r$   ezeyr,  rot_davr  axes_davs          r   #test_from_davenport_one_or_two_axesrs    sW   	K	 B	K	 B 

rBEEz!|
,C%%b#ruuQw7GCKK$K/OOdO35 ::b&!D


tbee|A~
.C%%dC"%%';GCKK$K/OOdO35 88RH18%D


tbjj2557)beeAgY1G&HH
IC
a&3q6/CxxRqx)H%%hbeeAgruuQw5GHGCKK$K/OOdO35 88RH18%D


tbjj2557)beeAgY1G&HH
ICzz"f%H%%hbeeAgruuQw5GHGCKK$K/OOdO35r   c                 F   g d}g d}g d}| j                  ||g      }t        |      rIt        j                  |dddg      j	                         }| j                  | j                  |            s?J t        j                  t        d      5  t        j                  |dddg       d d d        | j                  |||g      }t        |      rIt        j                  |dg d      j	                         }| j                  | j                  |            s?J t        j                  t        d      5  t        j                  |dg d       d d d        t        j                  t        d	      5  t        j                  | j                  |g      d
dg       d d d        t        j                  t        d      5  t        j                  | j                  |||g      dg d       d d d        y # 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   y xY w)Nr   r   r  rm  r   zmust be orthogonalr   r   zorder should beri   zExpected `angles`)r   r   rv   r=   )
r"   r   r   rj  r#   r`   r   r   r   r   )r$   ro  rp  ezyr  rS   s         r   !test_from_davenport_invalid_inputrv    s   	B	B
C::r3i DT##D#1v6>>@vvbhhqk"""]]:-AB 	7##D#1v6	7::r2sm$DT##D#y9AACvvbhhqk"""]]:-AB 	:##D#y9	:	z):	; >

B4 0%!=>	z)<	= M

BB< 8#|LM M	7 	7	: 	:> >M Ms0   G24G?1)H=,H2G<?HHH c                     t         j                  j                  d      } t        j                  g d      }t        j                  g d      }t        j                  g d      }t	        j                  |       }|j                  |||gd      }t	        j                  |||gd|j                               }|j                  |d      sJ t	        j                  d	|       }|j                  |||gd      }t	        j                  |||gd|j                               }t        j                  |j                  |d            sJ y )
NrY   r   r   r   rZ   rm  r[   r\   rv   )
rG   rH   r]   re  r   as_davenportrj  r^   r_   r`   )rR   rX  rY  e3rb   r  r   s          r   test_from_davenport_array_likerz    s   
))


$C	)	B	)	B	)	BS)J$$b"b\37FRc6==?CA""15"111 ,J$$b"b\37FRc6==?CA66*))!%)8999r   c                    t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  |f      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  d      }| j                  g d      }| j                  g d      }|D ]  }| j                  t        j                  ||z        j                  |            }	| j                  |||	gd	      }
||z
  |d d d
f<   dD ]~  }|dk(  r|
n| j                  |
d	      }t        j                  | j                  |      ||      }|j                  | j                  |      |      }t        || j                  |               y )Nr   rE   r=   rf  rv   )r  r  r  r   r   rb  rc  rc  )rG   rH   rI   r  r  r  r"   r   r   rO  rn  rk  rj  rx  r   )r$   r   r  r  angles_middlelambdasrX  rY  lambry  ax_lambr  axr,  
angles_davs                  r   test_as_davenportr    s   
))


"CAXXq!fF;;BEE6QD;AF1a4LKKABEEK=M;;BEE6QD;AF1a4Lkkabee%k8G	K	 B	K	 B <ZZ,,T"W5;;B?@((BB<a(0$t+q!t/ 	<E![0bgggAg6NB))"**R.%HC))"**R.%@JJ

6(:;		<	<r   c                    t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   t        |      D cg c]#  }|j                  dt         j
                  g      % }}|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  d      }| j                  g d      }| j                  g d      }|D ]'  }	| j                  t        j                  |	|z        j                  |            }
| j                  |||
gd	      }||	z
  |d d d
f<   dD ]  }|dk(  r|n|d d d   }t        j                  | j                  |      ||      }t        |t        d      5  |j!                  | j                  |      |      }d d d        |j#                         }t        j                  | j                  |      |      }|j#                         }t%        ||d        * y c c}w # 1 sw Y   hxY w)Nr   r-   r=   rf  rv   )r-   r  r  r   r   r|  rc  rr   r  r   r[   r\   )rG   rH   rI   r  r  r  rN   choicer"   r   r   rO  rn  rj  r   r  rx  rJ   r   )r$   r   r  r  rT   r}  r~  rX  rY  r  ry  r  r  r  r,  r  r  rot_estimatedr  s                      r   test_as_davenport_degenerater    s    ))


"C	AXXq!fF ;;BEE6QD;AF1a4L5:1X>SZZBEE
+>M>;;BEE6QD;AF1a4Lkkabee$k7G	K	 B	K	 B EZZ,,T"W5;;B?@((BB<a(0$t+q!t/ 	EE![0gddmB))"**R.%HCS+]C E --bjjneD
E==?L$33BJJrNE:VM)335ML-eD	E	E ?E Es   ?(I"II&c           	         t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  |f      |d d df<   |j	                  t         j
                   t         j
                  |f      |d d df<   dD ]  }t        d      D ]  }d	j                  |d   |d   |d   g      }|D cg c]  }t        |       }}|d
k(  r|j                         }t        j                  || j                  |            }	t        j                  | j                  |      || j                  |            }
t        |	j                  d      |
j                  d      d         |d d dfxx   t         j
                  dz  z  cc<   dD ]  }t        d      D ]  }d	j                  |      }|D cg c]  }t        |       }}|d
k(  r|j                         }t        j                  || j                  |            }	t        j                  | j                  |      || j                  |            }
t        |	j                         |
j                         d         y c c}w c c}w )Nr   rE   r=   rf  r   rv   r|  ri   r  rc  Trl   r[   rF   )rG   rH   rI   r  r  r  r   r  r   r  r   rm   r"   rj  r   r#   )r$   r   r  r  r  r  r  rT   r  euldavs              r   &test_compare_from_davenport_from_eulerr  	  sQ   
))


"CAXXq!fF ;;BEE6QD;AF1a4L;;1255t;<F1a4L;;BEE6QD;AF1a4L+ 	(%e, 	(I''9Q<1y|DEC(+,1)A,,B,#iik%%c2::f+=>C))"**R.%FASTCCKK$K7t9T!&(	(	( 1a4LBEEAIL+ F%e, 	FI'')$C(+,1)A,,B,#iik%%c2::f+=>C))"**R.%FASTCCKKM3;;=uE	FF - -s   	J:J?c                    t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  |f      |d d df<   |j	                  t         j
                   t         j
                  |f      |d d df<   dD ]  }t        d      D ]  }d	j                  |d   |d   |d   g      }|D cg c]  }t        |       }}|d
k(  r|j                         }t        j                  || j                  |            }	|	j                  |      }
|	j                  | j                  |      |      }t        |
|d         |d d dfxx   t         j
                  dz  z  cc<   dD ]  }t        d      D ]  }d	j                  |      }|D cg c]  }t        |       }}|d
k(  r|j                         }t        j                  || j                  |            }	|	j                  |      }
|	j                  | j                  |      |      }t        |
|d         y c c}w c c}w )Nr   rE   r=   rf  r   rv   r|  ri   r  rc  r[   rF   )rG   rH   rI   r  r  r  r   r  r   r  r   rm   r"   r  rx  r   )r$   r   r  r  r  r  r  rT   r  r,  r  r  s               r   "test_compare_as_davenport_as_eulerr  8	  s.   
))


"CAXXq!fF ;;BEE6QD;AF1a4L;;1255t;<F1a4L;;BEE6QD;AF1a4L+ 	2%e, 	2I''9Q<1y|DEC(+,1)A,,B,#iik%%c2::f+=>C,,s#C""2::b>59CC51	2	2 1a4LBEEAIL+ 	2%e, 	2I'')$C(+,1)A,,B,#iik%%c2::f+=>C,,s#C""2::b>59CC51	2	2 - -s   	I8%I=c                    t        j                  d      }t        |      dk(  sJ t        j                  d      }t        |      dk(  sJ t        j                  d      g    }t        |      dk(  sJ t        j                  | j                  d            }t        |      dk(  sJ t        j                  | j                  d            }t        |      dk(  sJ t        j                  d| j                  d            }t        |      dk(  sJ t        j                  | j                  d            }t        |      dk(  sJ t        j                  | j                  d      d| j                  d            }t        |      dk(  sJ t        j                  | j                  d            }	t        |	      dk(  sJ y )	Nr   )r  r=   r   r,   r   r=   r=   ri   r   rb  )r   rH   r0  r  r!   rn   r   rm   r   rj  rK   r5  )
r$   r   r_ider_getr_quatr_matrixr_eulerr_vecr_davr_mrps
             r   test_zero_rotation_constructionr  Z	  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                    t        j                  | j                  d            }|j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                  d      j                  dk(  sJ |j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                  | j                  d      d      j                  dk(  sJ y )Nr  r  ri   r   r=   rb  )r   r!   rn   r#   rO   rJ   r  r   r<  rx  rK   rf   s     r   !test_zero_rotation_representationr  w	  s    288F+,A99;&&&;;=)+++::e""f,,,;;=&(((88:v%%%>>"&&)[1776AAAr   c                    t        j                  | j                  d            }| j                  g d      }|j	                  |      }|j
                  dk(  sJ | j                  d      }|j	                  |      }|j
                  dk(  sJ | j                  d      }t        j                  t        d      5  |j	                  |       d d d        y # 1 sw Y   y xY w)Nr  r   r   rv  z/Expected equal numbers of rotations and vectorsr   )
r   r!   rn   r"   rO  rO   r#  r   r   r   )r$   r   r_  r`  v0v0_rotrg  s          r   !test_zero_rotation_array_rotationr  	  s    288F+,A


9A
I??f$$$	&	BWWR[F<<6!!!	B	K
M 	  s   9CCc                    t        j                  | j                  d            }t        j                  | j                  g d            }||z  }t	        |      dk(  sJ ||z  }t	        |      dk(  sJ t        j                  | j                  d            }||z  }t	        |      dk(  sJ d}t        j
                  d      }t        j                  | j                  |j                                     }t        j                  t        |      5  ||z   d d d        t        j                  t        |      5  ||z   d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nr  r~   r   "Expected equal number of rotationsrv   r   )
r   r!   rn   r"   r0  rH   r#   r   r   r   )	r$   r   r_singler_mult_leftr_mult_rightr0r_multmsg_rotation_errorr^  s	            r   !test_zero_rotation_multiplicationr  	  s0   288F+,A!!"**^"<=Hh,K{q   a<L|!!!			BHHV,	-BVFv;!=		B			BJJrzz|4	5B	z);	< 
R 
z);	< 
R   s   E
;E
EEc                    t        j                  | j                  d            }t        j                  ||g      }t	        |      dk(  sJ t        j                  | j                  g d            }|j                  ||g      }t	        |      dk(  sJ t        j                  | j                  t        j                  d      j                                     }|j                  ||g      }t	        |      dk(  sJ t        j                  | j                  t        j                  d      j                                     }|j                  ||g      }|j                  ||g      }t	        |      dk(  sJ y )Nr  r   r~   r   r=   r,   )r   r!   rn   r  r0  r"   rH   r#   )r$   r   r  r]  r   r4s         r   !test_zero_rotation_concatentationr  	  s&   288F+,A			q!f	%Br7a<<			BJJ~6	7B	
Aw	Br7a<<			BJJxq'9'A'A'CD	EB	
Aw	Br7a<<			BJJxq'9'A'A'CD	EB	
2w	B	
2w	Br7a<<r   c                     t        j                  | j                  d            }dD ]  }||z  }t        |      dk(  rJ  y )Nr  )r2  rr   r   r   r  r   )r   r!   rn   r0  )r$   r   pppow0s       r   test_zero_rotation_powerr  	  sC    288F+,A# "u4yA~~r   c                     t        j                  | j                  d            }|j                         }t	        |      dk(  sJ y )Nr  r   )r   r!   rn   r   r0  )r$   r   r_invs      r   test_zero_rotation_inverser  	  s6    288F+,AEEGEu:??r   c                     t        j                  | j                  d            }|j                         }|j                  dk(  sJ y )Nr  r   )r   r!   rn   r  rO   )r$   r   r  s      r   test_zero_rotation_magnituder  	  s8    288F+,AI??d"""r   c                     t        j                  | j                  d            }t        j                  t
        d      5  |j                          d d d        y # 1 sw Y   y xY w)Nr  z+Mean of an empty rotation set is undefined.r   )r   r!   rn   r   r   r   r  rf   s     r   test_zero_rotation_meanr  	  sH    288F+,A	z)V	W 	  s    AA#c                    t        j                  | j                  d            }t        j                  | j                  d            }|j                  |      j                  dk(  sJ t        j                  | j                  g d            }|j                  |      j                  dk(  sJ t        j                  | j                  t        j                         j                                     }|j                  |      j                  dk(  sJ d}t        j                  | j                  t        j                  d      j                                     }t        j                  t        |      5  |j                  |       d d d        t        j                  t        |      5  |j                  |       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)Nr  r  r~   r  rv   r   )r   r!   rn   r_   rO   r"   rH   r#   r   r   r   )r$   r   r  r]  r^  
approx_msgr   s          r   test_zero_rotation_approx_equalr  	  sb   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 	r 
z	4 
   s   5G*GGGc                    t        j                  | j                  d            }|| j                  g | j                           }t        |      dk(  sJ |d d }t        |      dk(  sJ t        j                  t              5  || j                  dg          d d d        t        j                  t              5  || j                  dg          d d d        t        j                  t              5  t        j                  | j                  g d            |d<   d d d        y # 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)Nr  r;  r   Tr'   )	r   r!   rn   r"   boolr0  r   r   
IndexError)r$   r   r  r_slices       r   test_zero_rotation_get_setr  	  s   288F+,Abjj277j+,Eu:??eGw<1	z	" 	"**aS/ 
z	" 	"**dV
 
z	" <!!"**\":;!< <  < <s$   D$:D01*D<$D-0D9<Ec                    t        j                  | j                  t        j                  d      j	                                     }|| j                  g d         }t        |      dk(  sJ || j                  g d         }t        |      dk(  sJ || j                  g d         }t        |      dk(  sJ t        j                  t              5  || j                  ddg          d d d        y # 1 sw Y   y xY w)Nr=   )FFFr   )FTFr   )TTTT)	r   r!   r"   rH   r#   r0  r   r   r  )r$   r   r  r]  r   s        r   test_boolean_indexesr  	  s    2::hooa&8&@&@&BCDA	
2::+,	-Br7a<<	
2::*+	,Br7a<<	
2::()	*Br7a<<	z	" $	"**dD\
"#$ $ $s   C11C:)r   r   numpyrG   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   rB  r  markskip_xp_backends
pytestmarkr   r%   r(   r3   r6   r8   rV   rc   rg   ro   rw   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-  r0  r8  r:  r=  r?  rA  rE  rG  rL  rO  rU  rW  rZ  r^  rd  rn  rr  r  r  r  r  r  r  parametrizer  r  thread_unsafer  r  r  r  r  r  r  r  r  r  r
  r  r  r  r!  r%  r,  r4  rE  rX  rb  rh  rj  rs  rx  rz  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+  r0  r5  r9  r>  rG  rJ  rZ  ra  rc  rh  rk  rs  rv  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s?      & 3 + +   ) (   [[))$)7
7h 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   