o
    h{                    @   s"  d dl Z d dl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 d dlmZ d dlZd dlZdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d8 Z(d9d: Z)d;d< Z*d=d> Z+d?d@ Z,dAdB Z-dCdD Z.dEdF Z/dGdH Z0dIdJ Z1dKdL Z2dMdN Z3dOdP Z4dQdR Z5dSdT Z6dUdV Z7dWdX Z8dYdZ Z9d[d\ Z:d]d^ Z;d_d` Z<dadb Z=dcdd Z>dedf Z?dgdh Z@didj ZAdkdl ZBdmdn ZCe jDEdoedpe jDEdqdrdsdt ZFe jDEdoedpe jDEdqdrdudv ZGe jDjHe jDEdoedpe jDEdqdrdwdx ZIe jDjHe jDEdoedpe jDEdqdrdydz ZJe jDjHe jDEdoedpe jDEdqdrd{d| ZKd}d~ ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTe jDjHdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd ZnddĄ ZoddƄ ZpddȄ Zqddʄ Zrdd̄ Zsdd΄ ZtddЄ Zudd҄ ZvddԄ Zwddք Zxdd؄ Zyddڄ Zzdd܄ Z{ddބ Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Ze jDjHdd  Zdd Zdd ZdS (      N)assert_equalassert_array_almost_equal)assert_allclose)RotationSlerp)special_ortho_group)permutationsc                 C   s4   | dkrg dS | dkrg dS | dkrg dS d S )Nx   r   r   yr   r   r   zr   r   r    axisr   r   _/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/spatial/transform/tests/test_rotation.py	basis_vec   s   r   c                  C   sH   t g dg dg} t| }| t dgdgg }t| | d S )N      r   r   )      r   r   r      nparrayr   	from_quatr   as_quatr	   rexpected_quatr   r   r   test_generic_quat_matrix   s   
r#   c                  C   s2   t g d} t| }| d }t| | d S Nr   r   r   r    r   r   r   test_from_single_1d_quaternion   s   
r%   c                  C   s4   t g dg} t| }| d }t| | d S r$   r   r    r   r   r   test_from_single_2d_quaternion#   s   
r&   c                  C   s  t jd} tjg ddd}t| t dddd tjt g dd	dd}t| t t dd
ddd | 	dd}|t j
j|ddd d d f  }|D ]}tj|dd}tt | d|dd qRtj|dd}tt j| ddd|dd d S )Nr   r   r   r   r   Tscalar_firstr   V瞯<缉ؗҜ<rtolatol
   r   )r0   r   r   d   r   r   r   r-   )r   randomRandomStater   r   r   	as_matrixeyetilerandnlinalgnormrollr   rngr!   qqir   r   r   test_from_quat_scalar_first*   s    "r@   c                  C   sR  t jd} tdt d}t|jddg dddd	 tdt d
}t|jddt g ddddd	 | 	dd}|t j
j|ddd d d f  }|D ]*}t|}t|jddt |ddd t|jdddt |jddddd qPt|}t|jddt j|ddddd t|jdddt j|jddddddd d S )Nr   xyzr   Tr(   r'   r*   r+   r,   )r0   r   r/   r1   r   r   r   r2   )	canonicalr)   rB   )r   r3   r4   r   
from_eulerzerosr   r   r7   r8   r9   r:   r   r;   r<   r   r   r   test_as_quat_scalar_first>   s6    


rF   c               	   C   sp   t g dg dg dg dg dg dg} t| }| t dgdgd	gd
gd	gd
gg }t| | d S )N)r   r   r   r   r   r   r   r   r   r   r   r   )rI   rI   r   r   r   r   rI   rI   rI   rI   rI   r   r   r      r   r    r   r   r   test_from_square_quat_matrix\   s   
&rM   c                  C   sn   t g dg dg dg dg dg} t| }t | t jj| ddd d d f  }t|jdd	| d S )
N)rI   r   r   r   )r   rI   r   r   )r   r   rI   r   rJ   rK   r   r   TrC   )	r   r   r   r   absr9   r:   r   r   r    r   r   r   *test_quat_double_to_canonical_single_coverk   s   
&rO   c                  C   sl  t g d} t| }t| |jdd t g dt d } t| }|| | }t|jddt d g d t| jddt d g d t|jddt d g d t| jddt d g d t||  jddg d	d
d t||  jddg d	d
d t|| jddg dd
d t| |  jddg dd
d d S )NrJ   FrC   )r   r   r   r   rL   )rI   r   r   r   )r   r   r   rI   )rI   r   r   rI   rH   gؗҬ<r.   )	r   r   r   r   r   r   sqrtr   inv)r>   r!   r3r   r   r   test_quat_double_coverx   s<   


rT   c                   C   s$  t jtdd ttg d W d    n1 sw   Y  t jtdd ttg dg dg W d    n1 sAw   Y  t jtdd ttg dgg dgg W d    n1 shw   Y  t jtdd ttg d W d    d S 1 sw   Y  d S )	NzExpected `quat` to have shapematchr   rL   r   )r   rL   r   r   r   )r   r            r   rL   r   r   )r   r   rX   rY   )r   r   )pytestraises
ValueErrorr   r   r   r   reshaper   r   r   r   test_from_quat_wrong_shape   s$   

"r`   c                  C   sV   t g dg dg dg} tt t|  W d    d S 1 s$w   Y  d S )Nr   )r   r   r   r   rG   )r   r   r\   r]   r^   r   r   )r	   r   r   r   test_zero_norms_from_quat   s   "ra   c                  C   s*   g d} t |  }t|td d S )NrH   r   )r   r   r5   r   r   r6   )quatmatr   r   r   #test_as_matrix_single_1d_quaternion   s   rd   c                  C   sR   g dg} t |  }t|jd tg dg dg dg}t|d | d S )Nr   r   r   r   r   r   r   r   rI   r   r
   r   r   r   r   r5   r   shaper   r   r   )rb   rc   expected_matr   r   r   #test_as_matrix_single_2d_quaternion   s   
rk   c                  C   s   g dg dg dg dg} t |  }t|jd tg dg dg dg}t|d	 | tg dg d
g dg}t|d | t|d td t|d td d S )Nre   r   r   r   r   rH   rJ   )r   r   r   rg   r
   r   r   r   rI   r   r   r   rL   r   )	r   r   r5   r   ri   r   r   r   r6   )quatsrc   	expected0	expected1r   r   r    test_as_matrix_from_square_input   s*   rq   c                  C   s   g dg dg dg} t |  }t|jd tg dg dg dg}t|d | tg dg d	g d
g}t|d | tg dg dg dgd }t|d | d S )Nre   rl   r[   )r   r   r   rg   r
   r   r   r   rm   r   )皙?g@)gffffff@r   rr   )rI   rL   rL   r   rL   rh   )rn   rc   ro   rp   	expected2r   r   r   !test_as_matrix_from_generic_input   s4   ru   c                  C   s6   g dg dg dg} g d}t t|  | d S )Nr   r
   r         ?rw   rw   rw   )r   r   from_matrixr   rc   r"   r   r   r   test_from_single_2d_matrix  s   rz   c                  C   sN   t g dg dg dgd} t g dd}tt|  | d S )Nr   r
   r   rf   rv   r   r   )r   r   r_   r   r   rx   r   ry   r   r   r   test_from_single_3d_matrix  s   r|   c                  C   sl   t g dt d } t g dg dg dg}tt| |  tt|d | d d S )N)r   r   rX   r   '   )3~˷g6iпnzo?)r   r~   6i?)r   r   g3~˷?rf   r{   )r   r   rQ   r   r   rx   r   r_   )r"   rc   r   r   r   test_from_matrix_calculation   s   r   c                  C   s(   t jdddd} tt|  |  d S )Nr   r0   r   )sizerandom_state)r   rvsr   r   rx   r5   rc   r   r   r    test_matrix_calculation_pipeline/  s   r   c                  C   s   t jd} | d}t j|}tt|D ]}|| dk r&||  ||< qt	|
 }t d||d}t d}tdD ]}d|d d ||f< qAt|| d S )Nr   )r1   r   r   ...ij,...jk->...ik)r   rL   r   r         ?)r   r3   r4   random_sampler9   detrangelenr   rx   r5   einsum	transposerE   r   )rndrc   detsi	ortho_matmult_resulteye3dr   r   r   test_from_matrix_ortho_output4  s   

r   c                  C   s   t g dg dg dg} t g dg dg dg}tt|  |dd t g d	g d
g dg} t g dg dg dg}tt|  |dd d S )Nr   r   r   r   r   )5_%?gx'?        )gx'ܿr   r   )r   r   r   ư>rP   )r         r   )rw   r   r   )r   r   rw   rg   r
   )r   r   r   r   rx   r5   )rc   expectedr   r   r   test_from_matrix_normalizeH  s(   

r   c                  C   s   t d} d| d< tjtdd t|  W d    n1 s w   Y  d| d< tjtdd t|  W d    d S 1 sAw   Y  d S )Nr   r   r   r   zNon-positive determinantrU   rI   )r   r6   r\   r]   r^   r   rx   r   r   r   r   )test_from_matrix_non_positive_determinant\  s   
"r   c                  C   2   g d} t g d}t| }t| | d S Nr
   )gJ?r   r   g<(?r   r   r   from_rotvecr   r   rotvecr"   resultr   r   r   test_from_1d_single_rotvecg     
r   c                  C   6   g dg} t g dg}t| }t| | d S r   r   r   r   r   r   test_from_2d_single_rotvecn     

r   c                  C   sJ   g dg dg dg} t g dg dg dg}tt|  | d S )Nr   rL   rL   r   rI   rw   r   r   r   )g.pG?cU(G?r   gQH?)gNZ]O?gNZ]OݿgNZ]O?g0i?rH   )r   r   r   r   r   r   )r   r"   r   r   r   test_from_generic_rotvecu  s   r   c                  C   s   t dt d dt d dt d gg dg dg} t|  }t|d d t|dd df | d d	  t|d
 d t|dd df t g d t|d t g d d S )NgMb@?r   gMb@)皙?g333333?rr   r   )r   r   r   r   rw   r   r   g@w?)g>}J?g.e?g>}J?rL   rH   )r   r   rQ   r   r   r   r   r   )r   rb   r   r   r   test_from_rotvec_small_angle  s   &r   c                  C   sh   dt d dt d dt d g} tj| dd}| }t | }t|}| }t|| d S )Nr   r   Tdegrees)r   cbrtr   r   r   deg2radr   )rotvec1rot1quat1rotvec2rot2quat2r   r   r   test_degrees_from_rotvec  s   (

r   c                   C   B   t jtdd tddg W d    d S 1 sw   Y  d S )N Expected `rot_vec` to have shaperU   r   rL   r\   r]   r^   r   r   r   r   r   r   test_malformed_1d_from_rotvec     "r   c                   C   J   t jtdd tg dg dg W d    d S 1 sw   Y  d S )Nr   rU   r[   r   rX   rY   rZ   r   r   r   r   r   test_malformed_2d_from_rotvec     "r   c                  C   s   t g dg dg dg} | t jj| ddd d d f  } t|  }t jj|dd}t| d d df t |d  tt 	|| d d d df t 
d d S )	Nr   rL   rI   rw   r   rI   r   ga2U0*3?rH   r   r   r   rL   )r   r   )r   r   r9   r:   r   r   	as_rotvecr   coscrossrE   )rb   r   angler   r   r   test_as_generic_rotvec  s     ,r   c                  C   D   t g d} t g d}t|  }t|jd t|| d S )Nr   rL   rL   gj*0	x?g$x?g:2(r   r   r   r   r   r   r   ri   r   rb   expected_rotvecactual_rotvecr   r   r   test_as_rotvec_single_1d_input  
   r   c                  C   H   t g dg} t g dg}t|  }t|jd t|| d S )Nr   r   r   r   r   r   r   r   test_as_rotvec_single_2d_input  
   r   c                  C   sj   g dg dg dg} t | }|jdd}tj|}t|d t|d |d  t|d |d	  d S )
Nr   r
   r   Tr   g      ^@r   r   rL   )r   rx   r   r   r9   r:   r   )rc   rotr   r   r   r   r   test_as_rotvec_degrees  s   

r   c                  C   sP   t g dg dg dg} tt|  |  ttj| ddjdd|  d S )Nr   r   rI   rL   )ga2U0*3gǺ6?ga2U0*?Tr   )r   r   r   r   r   r   )r   r   r   r   test_rotvec_calc_pipeline  s   r   c                  C   r   N)r   r   r   )r   r   r   r   r   r   r   from_mrpr   r   mrpr"   r   r   r   r   test_from_1d_single_mrp  r   r   c                  C   r   r   r   r   r   r   r   test_from_2d_single_mrp  r   r   c                  C   sP   t g dg dg dg} t g dg dg dg}tt|  | d S )Nr   r   r   )r   rr   rr   g)g}+;?g}+;g}+;?gߨӉؿrH   )r   r   r   r   r   r   )r   r"   r   r   r   test_from_generic_mrp  s   r   c                   C   r   )NExpected `mrp` to have shaperU   r   rL   r\   r]   r^   r   r   r   r   r   r   test_malformed_1d_from_mrp  r   r   c                   C   r   )Nr   rU   r[   r   r   r   r   r   r   test_malformed_2d_from_mrp  r   r   c                  C   sp   t g dg dg dg} | t jj| ddd d d f  } t g dg dg dg}tt|  | d S )	Nr   r   rH   r   r   )gQUU?gvWUU?QUUտ)uFx?guFxr   r   )r   r   r9   r:   r   r   r   as_mrp)rb   expected_mrpr   r   r   test_as_generic_mrp  s    r   c                  C   sD   t t t jd d  ddg} ttjdg ddd |  d S )	NrL   r   r   r   rA   )i  r   r   Tr   )r   r   tanpir   r   rD   r   )r   r   r   r   test_past_180_degree_rotation%  s
   "r   c                  C   r   )Nr   g?g?gO޿r   r   r   r   r   r   r   ri   r   rb   r   
actual_mrpr   r   r   test_as_mrp_single_1d_input/  r   r   c                  C   r   )Nr   r   r   r   r   r   r   r   test_as_mrp_single_2d_input9  r   r   c                  C   s\   t g dg dg dg dg} t g dg dg dg dg}tt|  | d S )Nr   r   )gzpy?r   r   )皙?r   r   )gK}\UUſgK}\UU?r   )r   r   r   r   r   r   )r   r   r   r   r   test_mrp_calc_pipelineC  s   r   c                  C   s:   t jdddd } tg dtd }t| | d S )Nr   Z   Tr   re   rL   )r   rD   r   r   r   rQ   r   )rb   r"   r   r   r   test_from_euler_single_rotationQ  s   r   c                  C   s6   t jdddd } t jdddd }t| | d S )Nr   r   Tr   Z)r   rD   r5   r   	extrinsic	intrinsicr   r   r   (test_single_intrinsic_extrinsic_rotationW  s   r  c                  C   sh   t jd} | jdddd}|d d d d df }tjd|dd }tjd	|dd }t|| d S )
Nr      )rX   r   lowhighr   rI   rA   Tr   ZYX)r   r3   r4   randintr   rD   r   r   )r   abr	   r   r   r   r   test_from_euler_rotation_order]  s   r  c                  C   sB   t jdddgdd } tg dg dg dg}t| | d S )Nzxr   Tr   rg   r   r   rI   r
   )r   rD   r5   r   r   r   )rc   rj   r   r   r   -test_from_euler_elementary_extrinsic_rotationg  s   r  c                  C      g dg dg dg} t jd| dd }t|d tg dg d	g d
g t|d tg dg dg dg t|d tg dg dg dg d S )N   <   -   r  r  r  r  r  r  ZXYTr   r   )g# ?      пgΙ6d?)g$+H?+Pz?Ppƿ)gPpֿ+Pz?gPp?r   )g+a?r  (s=?)r  r  g&(ٿ)r  r  r  rL   )ga}@?gF6g^@?)g0	8?gF6?g4?)      rw   r  r   rD   r5   r   r   r   anglesrc   r   r   r   &test_from_euler_intrinsic_rotation_312r  (   r   c                  C   r  )Nr  r  r  ZXZTr   r   )>d?g @r  )l>?^|@r  )X?r&  rw   r   g      ?g ,r  g ,?g      ?r  r        ?rw   rL   )r  g4&d'e?)cH?Xӿg'eֿ)r        ?r  r  r  r   r   r   &test_from_euler_intrinsic_rotation_313  r!  r/  c                  C   s   g dg dg dg} t jd| dd }t|d tg dg d	g d
g t|d tg dg d	g dg t|d tg dg dg dg d S )Nr  r  r  zxyTr   r   )4&d?gPp?r+  )r.  r  g+Pz)r-  r,  r+  r   )g
?\2׳r.  )r2  g ,?r  rL   )r$  r%  r*  )r&  r&  r   )g>dۿ @?r  r  r  r   r   r   &test_from_euler_extrinsic_rotation_312  r!  r4  c                  C   s   g dg dg dg} t jd| dd }t|d tg dg d	g d
g t|d tg dg dg d
g t|d tg dg dg dg d S )Nr  r  r  zxzTr   r   )r#  gl>r&  )r3  r%  gXr)  r   r'  r(  rL   )r  gcHr  )r1  r-  r  )r+  r+  r  r  r  r   r   r   &test_from_euler_extrinsic_rotation_313  r!  r6  	seq_tuplerA   r  )FTc           
      C   s  dd }t jd}d}t |df}|jt j t j|fd|d d df< |jt j d t jd |fd|d d df< |jt j t j|fd|d d df< d	| }|rX| }t	||}|
|}||}	t||dd
d t||	dd
d ||| dd ||	| dd d S )Nc                 S   V   t j| dd}t j| dd}t ||}t t ||k s J t ||k s)J d S Nr   r   r   meanstdhypotallrN   errormean_maxrms_maxr;  r<  rmsr   r   r   
test_stats  
   z1test_as_euler_asymmetric_axes.<locals>.test_statsr     r   r  rL   r    -q=r.   r-   r*   +=r   r3   r4   emptyuniformr   joinupperr   rD   as_euler_as_euler_from_matrixr   
r7  r  rD  r   nr  seqrotationangles_quat
angles_matr   r   r   test_as_euler_asymmetric_axes  s"   $,$


rX  c           
      C   s  dd }t jd}d}t |df}|jt j t j|fd|d d df< |jdt j|fd|d d df< |jt j t j|fd|d d df< d	| d | d | d g}|r[| }t	||}|
|}||}	t||dd
d t||	ddd ||| dd ||	| dd
 d S )Nc                 S   r8  r9  r:  r?  r   r   r   rD    rE  z0test_as_euler_symmetric_axes.<locals>.test_statsr   rF  r   r  r   rL   rG  gvIh%<=rI  &.>r+   rJ  r*   rK  rR  r   r   r   test_as_euler_symmetric_axes  s"   $ $

rZ  c                 C   s   t g dg dg dg dg}d| }|r| }tj||dd}| }tjt	dd	 |j
|dd}W d    n1 sAw   Y  tj||dd }t|| d S )
Nr  r   #   r\     r\  r      ra  r^     rG  Tr   Gimbal lockrU   r   r   rN  rO  r   rD   r5   r\   warnsUserWarningrP  r   r7  r  r  rT  rU  mat_expectedangle_estimatesmat_estimatedr   r   r   (test_as_euler_degenerate_asymmetric_axes  s    
rl  c                 C   s   t g dg dg dg dg}d| d | d | d g}|r%| }tj||dd	}| }tjt	d
d |j
|dd	}W d    n1 sJw   Y  tj||dd	 }t|| d S )Nrc  r   r  r\  r   K   r  r  r\  rc  iLra  rG  r   r   Tr   rd  rU   re  rh  r   r   r   'test_as_euler_degenerate_symmetric_axes9  s    rr  c                 C   st  t g dg dg dg dg}d| }|r| }tj||dd}tjtdd	 |j	|dd}W d    n1 s=w   Y  tjtdd	 |j
|dd}W d    n1 s[w   Y  t|d d d
dgf |d d d
dgf d
dd t|d d df |d d df d
dd t g dg dg dg dg}|d d df d
k}d| d
 | d | d
 g}|r| }tj||dd}tjtdd	 |j	|dd}W d    n1 sw   Y  tjtdd	 |j
|dd}W d    n1 sw   Y  t|d d d
dgf |d d d
dgf d
dd t|| df || df d
dd t||df ||df dd d S )Nr[  r]  r`  rb  rG  Tr   rd  rU   r   rL   rH  rI  r   Hz>rm  rn  rp  rq  r   rP   )r   r   rN  rO  r   rD   r\   rf  rg  rQ  rP  r   )r7  r  r  rT  r   estimates_matrixestimates_quatidxr   r   r   +test_as_euler_degenerate_compare_algorithmsU  s\   
(((
rw  c            	      C   s   t jd} d}tj|| d}| }| }| }t d||}t d||}t |ddf}t d|d d < t	|| t	|| d S )Nr   r0   )numr   r   r   )
r   r3   r4   r   rR   r5   r   rL  r6   r   )	r   rS  pr>   p_matq_matresult1result2r   r   r   r   test_inv  s   
r~  c                  C   s   t jd} tj| d}| }| }| }t ||}t ||}t d}t|| t|| tjd| d}| }	| }
|	 }t 	d|
|}t 	d||
}t 
d}t d|d d < t|| t|| d S )N	   #;h29s+,g0Hn r=   r   r   )rx  r=   r   rf   )r   r3   default_rngr   rR   r5   dotr6   r   r   rL  )r=   ry  r>   rz  r{  res1res2r6   r	   r   x_matrixy_matrixr|  r}  r   r   r   r   test_inv_single_rotation  s(   




r  c                  C   s4   d} t t|  d t t|   d d S )Nr0   r   )r   r   identity	magnituderR   )rS  r   r   r   test_identity_magnitude  s   r  c                   C   s0   t   dks
J t    dksJ d S )Nr   )r   r  r  rR   r   r   r   r   test_single_identity_magnitude  s   r  c                  C   sV   d} t j| dd}|t |  }t| |  ||  }t| t|  d S Nr0   r   r  	r   r3   r  r   r   rR   r  r   rE   rS  ry  r   r   r   r   test_identity_invariance  s   r  c                  C   sT   d} t j| dd}|t   }t| |  ||  }t| t|  d S r  r  r  r   r   r   test_single_identity_invariance  s   r  c                  C   sf   t td} |  }t|tjtjtjdg t td } |  }t|tjtjtjdg d S )Nr   r   )r   r   r   r6   r  r   r   )r!   r   r   r   r   test_magnitude  s   r  c                  C   sB   t td} | d  }t|tj | d  }t|d d S )Nr   r   r   )r   r   r   r6   r  r   r   )r!   r|  r}  r   r   r   test_magnitude_single_rotation  s
   r  c                  C   s`   t jd} tjd| d}tjd| d}||  }| }t |}t|||||k  d S )Nr  r0   r  )	r   r3   r  r   rR   r  medianr   approx_equal)r=   ry  r>   r!   r_magr.   r   r   r   test_approx_equal  s   
r  c                  C   s   t g d} t td}| |d sJ | |d r!J | j|d ddr,J | j|d ddd	r8J tjtd
d | j|d ddsKJ W d    d S 1 sVw   Y  d S )N)r   r   rY  r   r   r   绽|=rP   g:0yE>T)r.   r   zatol must be setrU   r   )	r   r   r   r   r6   r  r\   rf  rg  )ry  r>   r   r   r   !test_approx_equal_single_rotation  s   "r  c                  C   sb   t t d t df} t dt jd d}|D ]}t||  }t| 	 ddd qd S )Nr   r   rL   r1   r  rP   )
r   concatenater6   linspacer   r   r   r   r;  r  )axesthetastr!   r   r   r   	test_mean  s   r  c                  C   s   t g dg dg dg} t dt jd d}|D ]-}t|| d d  }|jddgd}t||  }| }t||  	 ddd	 qd S )
Nr   r
   r   rL   r1   r   weightsr  rP   )
r   r   r  r   r   r   r;  r   rR   r  )r  r  r  rwmwr!   mr   r   r   test_weighted_mean  s   r  c                  C   sX   t jtdd ttd} | jtd d W d    d S 1 s%w   Y  d S )Nznon-negativerU   r   r  )	r\   r]   r^   r   r   r   r6   r;  onesr!   r   r   r   test_mean_invalid_weights,  s   "r  c                  C   s"   t  jdd} t| t sJ d S )NFreturn_indices)r   r  reduce
isinstance)r   r   r   r   test_reduction_no_indices2  s   r  c                  C   sV   t  jdd} t| tu sJ t| dksJ | \}}}|d u s#J |d u s)J d S )NTr  r   )r   r  r  typetupler   )r   reduced	left_best
right_bestr   r   r   test_reduction_none_indices7  s   
r  c                  C   st  t jd} tjd| d}tjd| d}tjd| d}|j||dd\}}}t t|t|t|f}t|D ](\}}	t|D ]\}
}t|D ]\}}t |	| | 	 d |||
|f< qHq@q8t 
t |d	d
|jd	 df}t jt 
|t|dfd	d}|t| }|t| }||k sJ ||k sJ || | ||  }| |  }t|t t| d S )Nr  r   r  r0   rY   Tr  r   r   r   rI   r   )r   r3   r  r   r  rE   r   	enumeraterN   r   r_   moveaxisri   argmaxr>  rR   r  r   )r=   lr!   ry  r  r  r  scalarsr   lijpjkrkmax_indleft_best_checkright_best_checkreduced_checkmagr   r   r   !test_reduction_scalar_calculationA  s*   & r  c            	      C   s"  t g dg dg dg} t| }tt j| dd}t g d}t j|dd}t g d}t j|dd}t||| t||| t||| t||| t g d}t j|dd}t|j|d	d
| t|j|d	d
| t|j|d	d
| t|j|d	d
| d S )Nrg   r
   r   r   r   rW   rs   r   r   rL   rI   r   Tinverser   r   r   rx   expand_dimsr   apply)	rc   r_1dr_2dv_1dv_2dv1d_rotatedv2d_rotatedv1d_inversev2d_inverser   r   r   'test_apply_single_rotation_single_point[  s*   
r  c                  C   s   t g dg dg dg} t| }tt j| dd}t g dg dg}t g dg d	g}t||| t||| t g d
g dg}t|j|dd| t|j|dd| d S )Nrg   r
   r   r   r   rW   r   r   rX   r  )r   rX   r  )r   rX   Tr  r  )rc   r1r2v	v_rotated	v_inverser   r   r   *test_apply_single_rotation_multiple_pointsw  s   
r  c                  C   s   t d} t g dg dg dg| d< t g dg dg dg| d< t| }t g d	}t j|dd
}t g dg dg}t||| t||| t g dg dg}t|j|dd| t|j|dd| d S )NrL   r   r   rg   r
   r   r   r  r   r   rW   r   r  )r   r   rL   r  )r   r   rs   Tr  )r   rL  r   r   rx   r  r   r  )rc   r!   v1v2r  r  r   r   r   *test_apply_multiple_rotations_single_point  s(   



r  c                  C   s   t d} t g dg dg dg| d< t g dg dg dg| d< t| }t g d	g d
g}t g dg dg}t||| t g dg dg}t|j|dd| d S )Nr  rg   r
   r   r   r  r   r   rW   r  r  )r   ir   r  )r   rX   r  Tr  )r   rL  r   r   rx   r   r  )rc   r!   r  r  r  r   r   r   -test_apply_multiple_rotations_multiple_points  s"   



r  c                  C   s   t d} t g dg dg dg| d< t g dg dg dg| d< t| }t|d  | d d	d
 t|d  | d d	d
 t|d d  t j| d ddd	d
 d S )Nr  rg   r
   r   r   r  r   r   r*   rP   rI   r   )r   rL  r   r   rx   r   r5   r  rc   r!   r   r   r   test_getitem  s   



,r  c                   C   s@   t jtdd t d  W d    d S 1 sw   Y  d S Nznot subscriptablerU   r   )r\   r]   	TypeErrorr   r  r   r   r   r   test_getitem_single  s   "r  c                  C   sH   t  } tjtdd t  | d< W d    d S 1 sw   Y  d S r  )r   r  r\   r]   r  r  r   r   r   test_setitem_single  s   "r  c                  C   sR   t jd} tjd| d}tjd| d}||dd< t|dd  |  d S )Nr  r0   r  r   r   rX   r   r3   r  r   r   r   r=   r  r  r   r   r   test_setitem_slice  s
   r  c                  C   sH   t jd} tjd| d}tj| d}||d< t|d  |  d S )Nr  r0   r  r   r  r  r   r   r   test_setitem_integer  s
   r  c                  C   sJ   t jddd} tjtdd d| d< W d    d S 1 sw   Y  d S )Nr0   r   r  zRotation objectrU   r   )r   r3   r\   r]   r  r  r   r   r   test_setitem_wrong_type  s   
"r  c                  C   s|   t d} t g dg dg dg| d< t g dg dg dg| d< t| }tt|d	 tt|d d
 d d S )Nr  rg   r
   r   r   r  r   r   rL   rI   )r   rL  r   r   rx   r   r   r  r   r   r   test_n_rotations  s   



r  c                  C   sv   t jd} ttj| d jd ttjd | d jd ttjd| d jd ttjd| d jd d S )Nr  r  r   r   r{   r   r   r   )r   r3   r  r   r   r   ri   r  r   r   r   test_random_rotation_shape  s
   r  c                  C   sT   t g dg dg} |  }t| |\}}t| t d t|ddd d S )NrW   r  r   r   r   rP   )	r   r   copyr   align_vectorsr   r5   r6   r   )r	   r   r!   rssdr   r   r   test_align_vectors_no_rotation  s
   r  c                  C   sb   t jd} tj| d}| jdd}||}t||\}}t| |  t|ddd d S )Nl	   #t}":xL r  )r   r   r   r   rs  rP   )	r   r3   r  r   normalr  r  r   r   )r=   cr
  r	  estr  r   r   r   test_align_vectors_no_noise  s   
r  c                  C   sb   t g dg dg} t g dg dg}t| |\}}t| ||dd t|ddd d S )	N)gq?gH*fܿgHlB?)gMs^E?g+Obp޿gn^w)g=2)p?g[[VKg?gw7?)gѿgGvgpr   rP   r   rs  )r   r   r   r  r   r  )r	   r   r  r  r   r   r   $test_align_vectors_improper_rotation!  s   

r  c                  C   s   d} t g dg dg dg}d}g dg dg dg}g dg d	g d
g}tj||dd\}}}t j|| |ds=J t j|||dsGJ d S )NgbQ?)r   r   r   )r         ?r   )r   r   r   r   r   r   r   r   r
   )r   g?r   )r   g?r   Treturn_sensitivityrP   )r   r   r   r  iscloseallclose)rssd_expectedsens_expectedr.   r	  r
  r   r  sensr   r   r   #test_align_vectors_rssd_sensitivity-  s   
r  c            
      C   s   d} t j| ddg d}t j| ddg d}d}t ||t| d\}}}t |||t|  d\}}}	t| |  tt|| |dd	 t||	 d S )
Nr0   r   r  r
   r   rL   Tr   rP   )	r   r3   r  r  r   r  r   r5   rQ   )
rS  r	  r
  scaleest1rssd1cov1est2rssd2cov2r   r   r   !test_align_vectors_scaled_weights:  s    r  c                  C   s*  t jd} d}tj| d}| j|dfd}||}t d}d| }t| j|df|d}||}tj||d	d
\}	}
}||		  
 }t|d d|d t|d d|d t|d d|d ||9 }t|d d|d t|d d|d t|d d|d t|
t ||	| d d  d S )Nr  r1   r  r   r  r   r  )r   r  Tr  r   rP   rL   r   )r   r   )rL   rL   rw   )r   r3   r  r   r  r  r   r   r  rR   r   r   sum)r=   	n_vectorsr   vectorsr   sigma	tolerancenoisenoisy_resultr  r  coverror_vectorr   r   r   test_align_vectors_noiseH  s4   


	&r  c                   C   s  t jtdd tg dg d W d    n1 sw   Y  t jtdd tg dg d W d    n1 s=w   Y  t jtdd tg dg dgg dg W d    n1 scw   Y  t jtdd tjg dgg dgd	ggd
 W d    n1 sw   Y  t jtdd tjg dg dgg dg dgg dd
 W d    n1 sw   Y  t jtdd tjg dgg dgdgd
 W d    n1 sw   Y  t jtdd  tjg dg dgg dg dgtjtjgd
 W d    n	1 sw   Y  t jtdd tg dgg dg W d    n	1 s1w   Y  t jtdd  tjg dg dgg dg dgdtjd	gd W d    n	1 saw   Y  t jtdd tjg dgg dgdd W d    d S 1 sw   Y  d S )Nz Expected input `a` to have shaperU   r[   rW   z Expected input `b` to have shapez/Expected inputs `a` and `b` to have same shapesr  z&Expected `weights` to be 1 dimensionalr   r  z+Expected `weights` to have number of valuesz)`weights` may not contain negative valuesrI   z#Only one infinite weight is allowedz(Cannot align zero length primary vectorsr   z Cannot return sensitivity matrixT)r  r  r  )r\   r]   r^   r   r  r   infr   r   r   r    test_align_vectors_invalid_inputo  sh    "   
 
$r  c                  C   s  d} g dg dg}g dg dg}t g dg dg dg}tj||t jdgd\}}t| || d	 t|||| d	 t j|d
| d	sJJ g dg dg}d}tj||t jdgd\}}t| || d	 t||d
 |d
 | d	 t j||| d	sJ g dg dg}t|||| d	 g dg dg}g dg dg}d}tj||t jdgd\}}t||d
 |d
 | d	 t j||| d	sJ d S )NrH  r
   r   r   r  r   r   r  rP   r   )r   rL   r   r   r   r   rL   rW   )rs   r   rI   )rI   r   rL   r   g4i?)	r   r   r   r  r  r   r5   r  r  )r.   r
  r	  
m_expectedRr  r   
a_expectedr   r   r   "test_align_vectors_align_constrain  s2   
r  c                  C   s  d} g }t dD ]}|tj| d| d  qt | D ]N}d|d | d  d|d | d  g}d|d | d  d	|d | d  g}tj||d
dgd\}}tj||tjdgd\}}t| | dd qt | D ]a}d|d | d  d|d | d  d|d | d  g}d	|d | d  d|d	 | d  d|d | d  g}tj||g dd\}}tj||tjddgd\}}t| | dd qpd S )Nr1   rX   r0   r  r   r   rL   r   r       _Br  -C6?rP   r   )r  rL   r   )	r   appendr   r3   r5   r  r   r  r   )rS  matsr   r	  r
  r  _R2r   r   r   test_align_vectors_near_inf  s"   ((::r#  c                  C   sT  d} g dg dg}g dg dg}t g dg dg dg}tj||t jdgd\}}t| || d t|d	 |d	 \}}t| || d t||d	 |d	 | d g dg dg}t g dg dg dg}tj||t jdgd\}}t| || d t|d	 |d	 \}}t| || d t||d	 |d	 | d d S )
NrH  r
   r   rm   r   r   r  rP   r   )r   r   r   r  r  r   r5   r  )r.   r	  r
  r  r  r!  r   r   r   test_align_vectors_parallel  s,   

 r$  c                  C   sd  d} t g dg dgg dg dgg dg dgg}dd |D }t||D ])\}}tj||t jdgd\}}t| t j| d	 t|	|d
 |d
 | d	 q(tj
dd
d}t| d }g dg dg}g dg dg}g }|D ]}	||		|d
 |d g qv|D ]&}tj||t jdgd\}}tj||ddgd\}
}t| |
 | d	 qd S )NrH  r
   r   r   c                 S   s   g | ]}|d   |d gqS r   r   r   ).0r	  r   r   r   
<listcomp>  s    z3test_align_vectors_antiparallel.<locals>.<listcomp>r   r  rP   r   r1   r  r  rm   r  )r   r   zipr   r  r  r   r  r   r  r3   r   r   r  r5   )r.   
as_to_test
bs_to_testr	  r
  r  r!  RsdRsdRr"  r   r   r   test_align_vectors_antiparallel  s,   r.  c            	      C   s   d} t jddd }t jddd }t||D ](\}}|d }|d }t ||\}}t|||| d tj|d| dsAJ qd S )NrH  r1   r   r  r   rP   )	r   r3   r5   r(  r  r   r  r   r  )	r.   mats_amats_bmat_amat_br	  r
  r  r  r   r   r   test_align_vectors_primary_only  s   r3  c                  C   s  t jd} t| jdd}| }g d}t||}g d}||}| }||d d df dk   d9  < ||d d df dk   d9  < t|d |d  t|d |d  t|d	 |d
  t|d |d  t|d |d  t 	|d |d
  }t 	|d
 |d  }	t||	 t 	|d |d  }
t 	|d |d	  }t|
| t 	|d |d  }t|d
|d
  d  t
t|t| d S )Nr   r  r  )r   r   rL   r   r   )r   rw   r.  r   r  rL   g      @r   g      
@g@r   rI   r   r   r   rL   rY   r0   r   )r   r3   r4   r   r   rM  r   r   r   r  r   r   )r   key_rots	key_quats	key_timesinterpolatortimesinterp_rotsinterp_quats
cos_theta1
cos_theta2
cos_theta4
cos_theta5
cos_theta3r   r   r   
test_slerp  s0   
  

r@  c                  C   sb   t jtdd  tg dg dg} tddg}t||  W d    d S 1 s*w   Y  d S )Nzmust be a `Rotation` instancerU   r[   rH   r   r   )r\   r]   r  r   r   r   )r!   r  r   r   r   test_slerp_rot_is_rotationG  s   
"rA  c                  C   sR   d} t jt| d tg d}tdg| W d    d S 1 s"w   Y  d S Nz*must be a sequence of at least 2 rotationsrU   r[   r   r\   r]   r^   r   r   r   msgr!   r   r   r   test_slerp_single_rotO  s
   "rF  c                  C   sT   d} t jt| d tg dg}tdg| W d    d S 1 s#w   Y  d S rB  rC  rD  r   r   r   test_slerp_rot_len1V  s
   "rG  c                  C   sn   t jtdd& tjd} t| jdd}t	dgdgg}t
|| W d    d S 1 s0w   Y  d S )Nz.times to be specified in a 1 dimensional arrayrU   r   )rL   r   r  r   rL   )r\   r]   r^   r   r3   r4   r   r   rM  r   r   r   r!   r  r   r   r   test_slerp_time_dim_mismatch]  s   "rI  c                  C   sf   t jtdd" tjd} t| jdd}t	d}t
|| W d    d S 1 s,w   Y  d S )Nz7number of rotations to be equal to number of timestampsrU   r   r  r  rY   )r\   r]   r^   r   r3   r4   r   r   rM  aranger   rH  r   r   r   !test_slerp_num_rotations_mismatchg  s   
"rK  c                  C   d   t jtdd! tjd} t| jdd}g d}t	|| W d    d S 1 s+w   Y  d S )Nstrictly increasing orderrU   r   r  r  )r   r   rL   rL   r   
r\   r]   r^   r   r3   r4   r   r   rM  r   rH  r   r   r   test_slerp_equal_timesp     "rO  c                  C   rL  )NrM  rU   r   r  r  )r   r   r   rL   r   rN  rH  r   r   r   test_slerp_decreasing_timesx  rP  rQ  c                  C   s   t jd} t| jdd}t d}t||}tj	t
dd t dgdgg}|| W d    d S 1 s9w   Y  d S )	Nr   r  r  r   z&`times` must be at most 1-dimensional.rU   g      @g@)r   r3   r4   r   r   rM  rJ  r   r\   r]   r^   r   )r   r!   r  sinterp_timesr   r   r   !test_slerp_call_time_dim_mismatch  s   


"rT  c                  C   s   t jd} t| jdd}t dd }t||}tj	t
dd |g d W d    n1 s3w   Y  tj	t
dd |g d	 W d    d S 1 sQw   Y  d S )
Nr   r  r  r   r   ztimes must be within the rangerU   r  )r   rL   rX   )r   r3   r4   r   r   rM  rJ  r   r\   r]   r^   )r   r!   r  rR  r   r   r   !test_slerp_call_time_out_of_range  s   
"rU  c                  C   s\   t jdddgdd} tddg| }|d}t jdddd}||  }t| dd	d
 d S )NXr   P   Tr   r   r.  r_  r+   rP   )r   rD   r   rR   r   r  )r!   rR  r_interpolatedr_interpolated_expecteddeltar   r   r   test_slerp_call_scalar_time  s   r[  c                  C   sP   t jddd} t jddd}| D ]}||| 9 }ttjj| ddd qd S )N2   r   r  rF  r   r   )r   r3   r   r   r9   r:   r   )qsrsr>   r   r   r   test_multiplication_stability  s   r_  c                  C   sN  d} t jddd}| }dD ]W}|| }t d}tt|D ]}|dkr+|| }q || }q ||   }t|| k sAJ t 	g d}|| 
 jdksSJ t 	g dg}|| 
 jdksfJ qd	D ]}|| }t ||  }t|
 |
 | d
 qit g d}d}|| }t ||  }t|
 |
 | d
 d S )NrJ  r0   r   r  )r  rs   rI   r   r   rL   r   rH   r  r{   )g      r   g       r   rw   r  rP   )rH  r   r   r   )r   r3   rR   r  r   rN   r  r   r>  r   r   ri   r   r   r   )r.   ry  p_invrS  r>   r!   r!  angr   r   r   test_pow  s2   


rb  c                  C   sL   t jdd} tjtdd t| dd W d    d S 1 sw   Y  d S )Nr   r  zmodulus not supportedrU   r   )r   r3   r\   r]   NotImplementedErrorpow)ry  r   r   r   test_pow_errors  s   "re  c                  C   sF  t jdd} t jddd}t| }t|jd t|}t|jd t|d  |d   t|d  |d   t| g}t|jd t|d |  t|g}t|jd t|d	  |d   t|d
  |d   tj| |gtd}t|jd t|d |  t|d | t|||g}t|jd d S )Nr   r  rL   r   r   )rL   )r   )r   rL   r   r%  )dtype)r   rL   )	r   r3   r   r   r   ri   r   r5   object)singlemultipler   r   r   r    test_rotation_within_numpy_array  s*   

rj  c               	   C   sX   t ddttjd ttjd g} t| }t|}t	| 
 |
 dd d S Nr   r   r*   rP   )r   r   r   sinr   r   pickledumpsloadsr   r5   )r!   pkl	unpickledr   r   r   test_pickling  s   *

rr  c               	   C   sN   t ddttjd ttjd g} t| }t| 	 |	 dd d S rk  )
r   r   r   rl  r   r   r  deepcopyr   r5   )r!   r  r   r   r   test_deepcopy  s   *
rt  c                  C   sz   t g d} | d}| d}|jd du sJ |jd du s#J tdd |jD s/J tdd |jD s;J d S )	NrH   rA   XYZC_CONTIGUOUSTc                 s       | ]}|d kV  qdS r   Nr   r&  r   r   r   r   	<genexpr>	      z+test_as_euler_contiguous.<locals>.<genexpr>c                 s   rw  rx  r   ry  r   r   r   rz  
  r{  )r   r   rP  flagsr>  strides)r!   e1e2r   r   r   test_as_euler_contiguous  s   

r  c                     s   t jddd g d} dgtt|  } fddt|| D }t |}t  |  t  }t  |   |usCJ t t 	 }tt 	  |  d S )Nr0   r   r  )r   rL   r   r   r   c                    s    g | ]\}} |||  qS r   r   )r&  r   rS  rU  r   r   r'    s     z$test_concatenate.<locals>.<listcomp>)
r   r3   listr   cumsumr(  r  r   r   r  )sizesstartssplitr   r   r  r   test_concatenate  s   

r  c                   C   sH   t jtdd tt dd g W d    d S 1 sw   Y  d S )NzRotation objects onlyrU   r   )r\   r]   r  r   r  r  r   r   r   r   test_concatenate_wrong_type!  s   "r  c                  C   s   t g dg} t g dg dg}t g d}t| dksJ t|dks'J tjtdd t| W d    n1 s=w   Y  | sFJ |sJJ |sNJ d S )NrH   r   rL   zSingle rotation has no len().rU   )r   r   r\   r]   r  )rotation_multi_onerotation_multirotation_singler   r   r   test_len_and_bool'  s   
r  c                  C   sD   g d} t j| dddd }tg dtd }t|| d S )Nr   r   r   Tr   re   rL   )r   from_davenportr   r   r   rQ   r   )r   rb   r"   r   r   r   #test_from_davenport_single_rotation7  s   
r  c                  C   s  g d} g d}t t| tj d }t | dtjd }t|jdd|jdd t t| tj d g}t | gdtjd g}t|jdd|jdd t t| tj d t|tj d g}|d |d	  }t || gdtjd tjd g}t|jdd|jdd t t| tj d t| tj d g}t | gdtjd tjd g}t|jdd|jdd d S )
Nr   r   r   eTrC   rX   r   r   )r   r   r   r   r   r  r   r   )ezeyr   rot_davr   r   r   #test_from_davenport_one_or_two_axes?  s6   

"
 
r  c                  C   s.  g d} g d}g d}t jtdd t| |gdddg W d    n1 s)w   Y  t jtdd t| ||gdg d W d    n1 sLw   Y  t jtd	d t| gd
dg W d    n1 slw   Y  t jtdd t| || gdg d W d    d S 1 sw   Y  d S )Nr   r   r  zmust be orthogonalrU   r  r   r   zorder should berA   zExpected `angles`)r   r   rL   r   )r\   r]   r^   r   r  )r  r  ezyr   r   r   !test_from_davenport_invalid_input_  s   "r  c                  C   s,  t jd} d}t |df}| jt j t j|fd|d d df< | jdt j|fd}| jt j t j|fd|d d df< | jdt jdd}t g d}t g d}|D ]=}||t|| 	|g}|| |d d d	f< d
D ]!}	|	dkry|n|d d d }
t
|
|	|}||
|	}t|| qqqVd S )Nr   r1   r   r  rL   )r_  r
   r   r   r   r  rI   )r   r3   r4   rL  rM  r   r   r   r   r  r  as_davenportr   )r   rS  r  angles_middlelambdasr~  r  lambax_lamborderaxr   
angles_davr   r   r   test_as_davenportm  s&   $$r  c               
      sv  t jd d} t | df} jt j t j| fd|d d df<  fddt| D } jt j t j| fd|d d df<  jdt jdd}t g d	}t g d
}|D ]a}||t	|| 
|g}|| |d d df< dD ]E}|dkrz|n|d d d }	t|	||}
tjtdd |
|	|}W d    n1 sw   Y  |
 }t|	|| }t|| qrqWd S )Nr   r   r   r  c                    s   g | ]
}  d tjgqS )r   )choicer   r   ry  r   r   r   r'    s    z0test_as_davenport_degenerate.<locals>.<listcomp>rL   )r   r
   r   r   r   r  rI   rd  rU   )r   r3   r4   rL  rM  r   r   r   r   r   r  r  r\   rf  rg  r  r5   r   )rS  r  r  r  r~  r  r  r  r  r  r   r  ri  rk  r   r  r   test_as_davenport_degenerate  s.   $$r  c            	      C   s  t jd} d}t |df}| jt j t j|fd|d d df< | jdt j|fd|d d df< | jt j t j|fd|d d df< dD ]B}tdD ];}d	|d |d |d g}d
d |D }|dkrj| }t	
||}t	|||}t|jdd|jdddd qKqE|d d df  t jd 8  < dD ]5}tdD ].}d	|}dd |D }|dkr| }t	
||}t	|||}t| | dd qqd S )Nr   r1   r   r  r   rL   r   rA   rG  c                 S      g | ]}t |qS r   r   ry  r   r   r   r'        z:test_compare_from_davenport_from_euler.<locals>.<listcomp>r  TrC   rH  r2   c                 S   r  r   r  ry  r   r   r   r'    r  )r   r3   r4   rL  rM  r   r   rN  rO  r   rD   r  r   r   )	r   rS  r  r  r7  rT  r  euldavr   r   r   &test_compare_from_davenport_from_euler  s<   $ $
r  c            
      C   s  t jd} d}t |df}| jt j t j|fd|d d df< | jdt j|fd|d d df< | jt j t j|fd|d d df< dD ]>}tdD ]7}d	|d |d |d g}d
d |D }|dkrj| }t	
||}||}|||}	t||	dd qKqE|d d df  t jd 8  < dD ]5}tdD ].}d	|}dd |D }|dkr| }t	
||}||}|||}	t||	dd qqd S )Nr   r1   r   r  r   rL   r   rA   rG  c                 S   r  r   r  ry  r   r   r   r'    r  z6test_compare_as_davenport_as_euler.<locals>.<listcomp>r  rH  r2   c                 S   r  r   r  ry  r   r   r   r'    r  )r   r3   r4   rL  rM  r   r   rN  rO  r   rD   rP  r  r   )
r   rS  r  r  r7  rT  r  r   r  r  r   r   r   "test_compare_as_davenport_as_euler  s<   $ $


r  )r\   numpyr   numpy.testingr   r   r   scipy.spatial.transformr   r   scipy.statsr   	itertoolsr   rm  r  r   r#   r%   r&   r@   rF   rM   rO   rT   r`   ra   rd   rk   rq   ru   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/  r4  r6  markparametrizerX  rZ  thread_unsaferl  rr  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  r  r  r  r  r  r  r#  r$  r.  r3  r@  rA  rF  rG  rI  rK  rO  rQ  rT  rU  r[  r_  rb  re  rj  rr  rt  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s*    






A
	


		',#,
	%
 !