o
    \i[                    @   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Є ZudZvddӄ 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 Zdd Zd d Ze jDjH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 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/www-root/data/www/176.119.141.140/sports-predictor/venv/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    d S 1 siw   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   )pytestraises
ValueErrorr   r   r   r   r   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   "r`   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   rc   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   )ra   rb   expected_matr   r   r   #test_as_matrix_single_2d_quaternion   s   
rj   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 )Nrd   r   r   r   r   rH   rJ   )r   r   r   rf   r
   r   r   r   rI   r   r   r   rL   r   )	r   r   r5   r   rh   r   r   r   r6   )quatsrb   	expected0	expected1r   r   r    test_as_matrix_from_square_input   s*   rp   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 )Nrd   rk   r[   )r   r   r   rf   r
   r   r   r   rl   r   )皙?g@)gffffff@r   rq   )rI   rL   rL   r   rL   rg   )rm   rb   rn   ro   	expected2r   r   r   !test_as_matrix_from_generic_input   s4   rt   c                  C   s6   g dg dg dg} g d}t t|  | d S )Nr   r
   r         ?rv   rv   rv   )r   r   from_matrixr   rb   r"   r   r   r   test_from_single_2d_matrix  s   ry   c                  C   sN   t g dg dg dgd} t g dd}tt|  | d S )Nr   r
   r   re   ru   r   r   )r   r   reshaper   r   rw   r   rx   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~˷?re   rz   )r   r   rQ   r   r   rw   r   r{   )r"   rb   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   rw   r5   rb   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   rw   r5   einsum	transposerE   r   )rndrb   detsi	ortho_matmult_resulteye3dr   r   r   test_from_matrix_ortho_output0  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   )rv   r   r   )r   r   rv   rf   r
   )r   r   r   r   rw   r5   )rb   expectedr   r   r   test_from_matrix_normalizeD  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   rw   r   r   r   r   )test_from_matrix_non_positive_determinantX  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_rotvecc     
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_rotvecj     

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   rv   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_rotvecq  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?rq   r   r   r   r   r   rv   r   r   g@w?)g>}J?g.e?g>}J?rL   rH   )r   r   rQ   r   r   r   r   r   )r   ra   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   rv   r   rI   r   ga2U0*3?rH   r   r   r   rL   )r   r   )r   r   r9   r:   r   r   	as_rotvecr   coscrossrE   )ra   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   rh   r   ra   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   rw   r   r   r9   r:   r   )rb   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   rq   rq   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)ra   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   rh   r   ra   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_input5  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_pipeline?  s   r   c                  C   s:   t jdddd } tg dtd }t| | d S )Nr   Z   Tr   rd   rL   )r   rD   r   r   r   rQ   r   )ra   r"   r   r   r   test_from_euler_single_rotationM  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_rotationS  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_orderY  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   rf   r   r   rI   r
   )r   rD   r5   r   r   r   )rb   ri   r   r   r   -test_from_euler_elementary_extrinsic_rotationc  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?)      rv   r  r   rD   r5   r   r   r   anglesrb   r   r   r   &test_from_euler_intrinsic_rotation_312n  (   r!  c                  C   r  )Nr  r  r  ZXZTr   r   )>d?g @r  )l>?^|@r  )X?r'  rv   r   g      ?g ,r  g ,?g      ?r  r        ?rv   rL   )r  g4&d'e?)cH?Xӿg'eֿ)r        ?r  r  r  r   r   r   &test_from_euler_intrinsic_rotation_313  r"  r0  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/  )r3  g ,?r  rL   )r%  r&  r+  )r'  r'  r   )g>dۿ @?r  r  r  r   r   r   &test_from_euler_extrinsic_rotation_312  r"  r5  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'  )r4  r&  gXr*  r   r(  r)  rL   )r  gcHr  )r2  r.  r  )r,  r,  r  r  r  r   r   r   &test_from_euler_extrinsic_rotation_313  r"  r7  	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   
r8  r  rE  r   nr   seqrotationangles_quat
angles_matr   r   r   test_as_euler_asymmetric_axes  s"   $,$


rY  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   r9  r:  r;  r@  r   r   r   rE    rF  z0test_as_euler_symmetric_axes.<locals>.test_statsr   rG  r   r  r   rL   rH  gvIh%<=rJ  &.>r+   rK  r*   rL  rS  r   r   r   test_as_euler_symmetric_axes  s"   $ $

r[  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      rb  r_     rH  Tr   Gimbal lockrU   r   r   rO  rP  r   rD   r5   r\   warnsUserWarningrQ  r   r8  r  r   rU  rV  mat_expectedangle_estimatesmat_estimatedr   r   r   (test_as_euler_degenerate_asymmetric_axes  s    
rm  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rd  r   r  r]  r   K   r  r  r]  rd  iLrb  rH  r   r   Tr   re  rU   rf  ri  r   r   r   'test_as_euler_degenerate_symmetric_axes5  s    rs  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^  ra  rc  rH  Tr   re  rU   r   rL   rI  rJ  r   Hz>rn  ro  rq  rr  r   rP   )r   r   rO  rP  r   rD   r\   rg  rh  rR  rQ  r   )r8  r  r   rU  r   estimates_matrixestimates_quatidxr   r   r   +test_as_euler_degenerate_compare_algorithmsQ  s\   
(((
rx  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   rM  r6   r   )	r   rT  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   )ry  r=   r   re   )r   r3   default_rngr   rR   r5   dotr6   r   r   rM  )r=   rz  r>   r{  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   )rT  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   rT  rz  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=   rz  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   rZ  r   r   r   绽|=rP   g:0yE>T)r.   r   zatol must be setrU   r   )	r   r   r   r   r6   r  r\   rg  rh  )rz  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_indices.  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_indices3  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{   moveaxisrh   argmaxr?  rR   r  r   )r=   lr!   rz  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_calculation=  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 )Nrf   r
   r   r   r   rW   rr   r   r   rL   rI   r   Tinverser   r   r   rw   expand_dimsr   apply)	rb   r_1dr_2dv_1dv_2dv1d_rotatedv2d_rotatedv1d_inversev2d_inverser   r   r   'test_apply_single_rotation_single_pointW  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 )Nrf   r
   r   r   r   rW   r   r   rX   r  )r   rX   r  )r   rX   Tr  r  )rb   r1r2v	v_rotated	v_inverser   r   r   *test_apply_single_rotation_multiple_pointss  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   rf   r
   r   r   r  r   r   rW   r   r  )r   r   rL   r  )r   r   rr   Tr  )r   rM  r   r   rw   r  r   r  )rb   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  rf   r
   r   r   r  r   r   rW   r  r  )r   ir   r  )r   rX   r  Tr  )r   rM  r   r   rw   r   r  )rb   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  rf   r
   r   r   r  r   r   r*   rP   rI   r   )r   rM  r   r   rw   r   r5   r  rb   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  rf   r
   r   r   r  r   r   rL   rI   )r   rM  r   r   rw   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   rz   r   r   r   )r   r3   r  r   r   r   rh   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   rt  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   rt  )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   )
rT  r
  r  scaleest1rssd1cov1est2rssd2cov2r   r   r   !test_align_vectors_scaled_weights6  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   rv   )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_noiseD  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_inputk  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 )NrI  r
   r   r   r  r   r   r  rP   r   )r   rL   r   r   r   r   rL   rW   )rr   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   )rT  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 )
NrI  r
   r   rl   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 )NrI  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  rl   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 )NrI  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   r4  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   rv   r/  r   r  rL   g      @r   g      
@g@r   rI   r   r   r   rL   rY   r0   r   )r   r3   r4   r   r   rN  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   
  

rA  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_rotationC  s   
"rB  z*must be a sequence of at least 2 rotationsc                  C   sN   t g d} tjttd tdg|  W d    d S 1 s w   Y  d S )Nr[   rU   r   )r   r   r\   r]   r^   SLERP_EXCEPTION_MESSAGEr   r  r   r   r   test_slerp_single_rotL  s   "rD  c                  C   sF   t  } tjttd tg |  W d    d S 1 sw   Y  d S )NrU   r   r3   r\   r]   r^   rC  r   r  r   r   r   test_slerp_rot_len0R  s   "rF  c                  C   sJ   t d} tjttd tdg|  W d    d S 1 sw   Y  d S )Nr   rU   rE  r  r   r   r   test_slerp_rot_len1X  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   rN  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   rN  aranger   rH  r   r   r   !test_slerp_num_rotations_mismatchh  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   rN  r   rH  r   r   r   test_slerp_equal_timesq     "rO  c                  C   rL  )NrM  rU   r   r  r  )r   r   r   rL   r   rN  rH  r   r   r   test_slerp_decreasing_timesy  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   rN  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   rN  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  rG  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 )NrK  r0   r   r  )r  rr   rI   r   r   rL   r   rH   r  rz   )      r   g       r   rv   r  rP   )rI  r   r   r   )r   r3   rR   r  r   rN   r  r   r?  r   r   rh   r   r   r   )r.   rz  p_invrT  r>   r!   r"  angr   r   r   test_pow  s2   


rc  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)rz  r   r   r   test_pow_errors  s   "rf  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   rh   r   r5   object)singlemultipler   r   r   r    test_rotation_within_numpy_array  s*   

rk  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   *

rs  c               	   C   sN   t ddttjd ttjd g} t| }t| 	 |	 dd d S rl  )
r   r   r   rm  r   r   r  deepcopyr   r5   )r!   r  r   r   r   test_deepcopy  s   *
ru  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   rx  ry  r   rz  r   r   r   r{    r|  )r   r   rQ  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   rT  rV  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   rd   rL   )r   from_davenportr   r   r   rQ   r   )r   ra   r"   r   r   r   #test_from_davenport_single_rotation8  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   rM  rN  r   r   r   r   r  r  as_davenportr   )r   rT  r   angles_middlelambdasr  r  lambax_lamborderaxr   
angles_davr   r   r   test_as_davenportn  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   rz  r   r   r   r(    s    z0test_as_davenport_degenerate.<locals>.<listcomp>rL   )r   r
   r   r   r   r  rI   re  rU   )r   r3   r4   rM  rN  r   r   r   r   r   r  r  r\   rg  rh  r  r5   r   )rT  r   r  r  r  r  r  r  r  r  r   r  rj  rl  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   rH  c                 S      g | ]}t |qS r   r   rz  r   r   r   r(        z:test_compare_from_davenport_from_euler.<locals>.<listcomp>r  TrC   rI  r2   c                 S   r  r   r  rz  r   r   r   r(    r  )r   r3   r4   rM  rN  r   r   rO  rP  r   rD   r  r   r   )	r   rT  r   r  r8  rU  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   rH  c                 S   r  r   r  rz  r   r   r   r(    r  z6test_compare_as_davenport_as_euler.<locals>.<listcomp>r  rI  r2   c                 S   r  r   r  rz  r   r   r   r(    r  )r   r3   r4   rM  rN  r   r   rO  rP  r   rD   rQ  r  r   )
r   rT  r   r  r8  rU  r  r   r  r  r   r   r   "test_compare_as_davenport_as_euler  s<   $ $


r  c            	      C   s(  t jdd} t| dksJ t jdd}t|dksJ t jddg  }t|dks,J t td}t|dks<J t td}t|dksLJ t dtd}t|dks]J t 	td}t|dksmJ t 
tddtd}t|dksJ t td}t|dksJ d S )	Nr   ry  r   r   r   r   r   r   rA   r   r  )r   r3   r   r  r   r   rE   rw   rD   r   r  r6   r   )	r!   r_ider_getr_quatr_matrixr_eulerr_vecr_davr_mrpr   r   r   test_zero_rotation_construction  s$   r  c                  C   s   t jdd} |  jdksJ |  jdksJ | djdks"J |  jdks+J |  jdks4J | t	
ddjdksBJ d S )	Nr   r  r  r  rA   r   r   r  )r   r3   r   rh   r5   rQ  r   r   r  r   r6   r  r   r   r   !test_zero_rotation_representation  s    r  c                  C   s   t jdd} tg d}| |}|jdksJ td}| |}|jdks*J td}tj	t
dd | | W d    d S 1 sGw   Y  d S )Nr   r  rW   r   )rL   r   z/Expected equal numbers of rotations and vectorsrU   )r   r3   r   r   r  rh   rE   r  r\   r]   r^   )r!   r  r  v0v0_rotr  r   r   r   !test_zero_rotation_array_rotation  s   



"r  c                  C   s   t jdd} t  }| | }t|dksJ ||  }t|dks"J t d}| | }t|dks3J d}t d}tjt|d ||  W d    n1 sPw   Y  tjt|d ||  W d    d S 1 slw   Y  d S )Nr   r  "Expected equal number of rotationsrL   rU   )r   r3   r   r\   r]   r^   )r!   r_singler_mult_leftr_mult_rightr0r_multmsg_rotation_errorr  r   r   r   !test_zero_rotation_multiplication  s"   



"r  c                  C   s   t jdd} t | | g}t|dksJ | t  | g}t|dks&J | t d| g}t|dks8J | | t dg}t|dksJJ d S )Nr   r  r   r   r   )r   r3   r  r   )r!   r  r  rS   r4r   r   r   !test_zero_rotation_concatentation4  s   r  c                  C   s2   t jdd} dD ]}| | }t|dksJ qd S )Nr   r  )r`  rI   r   r   r  )r   r3   r   )r!   pppow0r   r   r   test_zero_rotation_powerD  s
   r  c                  C   s(   t jdd} |  }t|dksJ d S )Nr   r  )r   r3   rR   r   )r!   r_invr   r   r   test_zero_rotation_inverseK  s   r  c                  C   s&   t jdd} |  }|jdksJ d S )Nr   r  r  )r   r3   r  rh   )r!   r  r   r   r   test_zero_rotation_magnitudeQ  s   r  c                  C   sH   t jdd} tjtdd |   W d    d S 1 sw   Y  d S )Nr   r  z+Mean of an empty rotation set is undefined.rU   )r   r3   r\   r]   r^   r<  r  r   r   r   test_zero_rotation_meanW  s   
"r  c                  C   s   t d} | t djdksJ | t  jdksJ t  | jdks*J d}t d}tjt|d | | W d    n1 sHw   Y  tjt|d ||  W d    d S 1 sew   Y  d S )Nr   r  r  rL   rU   )r   r3   r  rh   r\   r]   r^   )r!   
approx_msgrS   r   r   r   test_zero_rotation_approx_equal]  s   

"r  c                  C   s   t d} | g  }t|dksJ | d d }t|dksJ tt | dg  W d    n1 s4w   Y  tt | dg  W d    n1 sNw   Y  tt t  | d< W d    d S 1 sjw   Y  d S )Nr   Tr   r3   r   r\   r]   
IndexError)r!   r  r_slicer   r   r   test_zero_rotation_get_setl  s   
"r  c                  C   s   t d} | g d }t|dksJ | g d }t|dks!J | g d }t|dks/J tt | ddg  W d    d S 1 sFw   Y  d S )Nr   )FFFr   )FTFr   )TTTTr  )r!   r  r  rS   r   r   r   test_boolean_indexes  s   
"r  )r\   numpyr   numpy.testingr   r   r   scipy.spatial.transformr   r   scipy.statsr   	itertoolsr   rn  r  r   r#   r%   r&   r@   rF   rM   rO   rT   r_   r`   rc   rj   rp   rt   ry   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  r7  markparametrizerY  r[  thread_unsaferm  rs  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r%  r/  r4  rA  rB  rC  rD  rF  rG  rI  rK  rO  rQ  rT  rU  r[  r_  rc  rf  rk  rs  ru  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   <module>   sF    






A
	

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