
    >qj             
       R"   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	m
c mc mZ d dlm
c mc mZ d dlmZ d dlmZmZ d dlmZ d dlZd dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&c m'Z( d dl)Z)d dl*Z* e#edfed	f      Z+d
 Z,defdZ-d Z.d Z/d Z0d Z1ejd                  jg                  d e4 e5dd                  de6fd       Z7 e"edf      d        Z8d Z9d Z:d Z; e"edf      d        Z<d Z=d Z> e"edfedf      d         Z?ejd                  jg                  d e4 e5dd                  de6fd!       Z@d" ZA e"edf      ejd                  jg                  d e4 e5dd                  de6fd#              ZB e"edf      d$        ZC e"edf      d%        ZD e"ed&f      ejd                  jg                  d e4 e5dd                  de6fd'              ZE e"ed&f      d(        ZF e"ed&fedf      d)        ZG e"ed&fedf      d*        ZH e"ed&fedf      d+        ZI e"ed&fedf      d,        ZJ e"ed&fedf      d-        ZKd. ZL e"ed&f      d/        ZM e"ed0f      ejd                  jg                  d e4 e5dd                  de6fd1              ZN e"ed0f      d2        ZO e"ed0f      d3        ZP e"ed0fed4f      d5        ZQ e"ed0f      d6        ZR e"ed0f      d7        ZS e"ed0f      d8        ZT e"ed0f      ejd                  jg                  d e4 e5dd                  de6fd9              ZU e"ed4f      d:        ZV e"ed4f      ejd                  jg                  d e4 e5dd;                  de6fd<              ZW e"ed&fed4f      d=        ZX e"ed0fed4f      d>        ZY e"ed?f      ejd                  jg                  d e5dd;            de6fd@              ZZdA Z[ e"ed?f      dB        Z\ e"ed?f      dC        Z] e"ed?f      ejd                  jg                  d e5dd;            de6fdD              Z^ e"edEf      dF        Z_ e"edfedEf      dG        Z` e"edEf      ejd                  jg                  d e4 e5dd;                  de6fdH              Za e"ed?fedEf      dI        Zb e"edf      dJ        Zc e"edf      dK        Zd e"edf      ejd                  jg                  d e4 e5dd;                  de6fdL              Ze e"edfedf      dM        Zf e"edf      dN        Zg e"edfedf      dO        Zh e"edfedf      dP        Zi e"edfedf      dQ        Zj e"edfedf      dR        Zk e"edfedf      dS        ZldT ZmdU Zn e"edfedVf      ejd                  jg                  dW e4 edX                  ejd                  jg                  dYdZ      d[                      Zo e"edfedVf      ejd                  jg                  dW e4 edX                  ejd                  jg                  dYdZ      d\                      Zped]        Zq e"edfedfedVf      ejd                  jg                  dW e4 edX                  ejd                  jg                  dYdZ      ejd                  jg                  d^dZ      d_                             Zr e"edfedfedVf      ejd                  jg                  dW e4 edX                  ejd                  jg                  dYdZ      ejd                  jg                  d^dZ      d`                             Zs e"edfedVf      ejd                  jg                  d e4 e5dd;                  de6fda              Zt e"edfedf      db        Zu e"edfedf      dc        Zv e"eddfedf      de        Zw e"eddfedf      df        Zx e"edfeddf      dg        Zy e"edfeddf      dh        Zzdi Z{ e"eddf      ejd                  jg                  d e4 e5dd;                  de6fdj              Z| e"eddf      dk        Z} e"edfeddfedlf      dm        Z~ e"ed0fedlf      dn        Z e"edfeddfedlf      do        Z e"edlf      dp        Z e"ed0fedqfeddf      ejd                  jg                  d e4 e5dd;                  de6fdr              Z e"ed0fedqfeddf      ejd                  jg                  d e4 e5dds                  de6fdt              Z e"edqfeddf      du        Z e"ed0fedqfedfeddf      ejd                  jg                  d e4 e5dd;                  de6fdv              Z e"edqf      dw        Z e"edxf      dy        Z e"edxf      dz        Z e"edxfedfeddf      d{        Z e"ed&fed|f      d}        Z e"ed&fed|f      ejd                  jg                  d e4 e5dd;                  de6fd~              Z e"ed&fed|f      ejd                  jg                  d e4 e5dds                  de6fd              Z e"ed&fed|f      ejd                  jg                  d e4 e5dds                  de6fd              Z e"ed|f      d        Zd Zd Z e"ed|f      d        Z e"ed&fedfedf      ejd                  jg                  d e4 e5dd;                  de6fd              Z e"edf      d        Z e"ed&fedfedf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"ed&f      d        Zd Z e"edfedf      d        Z e"ed|fedf      d        Z e"edfed|f      d        Z e"edf      d        Z e"edfedf      d        Z e"ed|fed0fedf      d        Z e"edf      d        Z e"edfedfed|f      d        Z e"edfedf      d        Z e"edfedf      d        Z e"edfeddfed|fed0fed4fedf      d        Z e"edfed|f      d        Zd Z e"ed|fedf      d        Z e"edf      d        Zd Z e"edfedf      d        Z e"edf      d        ZdZ e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edfedf      d        Z e"edfedf      d        Z e"edfedfedfedfeddf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edf      d        Z e"edfedfedfeddfed0fed4f      ejd                  jg                  d e4 e5dd;                  de6fd              Z e"edf      d        Zd Z e"edf      ejd                  j                  dd      d               Z e"edf      ejd                  j                  dd      d               Zd Z e"edf      d        Z e"edf      dÄ        Z e"edf      dĄ        Z e"       dń        Z e"edf      dǄ        Z e"ed0fedf      dȄ        Z e"edf      ejd                  jg                  d e4 e5dd;                  de6fdɄ              Z e"edf      dʄ        Z e"edf      d˄        Zd̄ Z e"edfedf      d΄        Z e"edfedf      dτ        Z e"edfedfedf      ejd                  jg                  d^dZ      dЄ               Z e"edfedf      dф        Z e"edfedVfedf      d҄        Z e"ed&fedfed0fedfed?f      dӄ        Z e"edfedVfed4fedEfedf      dԄ        Z e"ed|f      dՄ        Z e"edf      dք        Z e"edf      dׄ        Z e"edf      d؄        Z e"edf      dل        Z e"eddf      dڄ        Z e"edqf      dۄ        Z e"edlf      d܄        Zejd                  j                  ddެ      d߄        Z e"edf      d        Z e"edf      d        Zejd                  jg                  d e4 e5dds                  de6fd       Zd Zd Zd Zy)    N)assert_equal)RotationSlerp)special_ortho_group)permutationsproduct)contextmanager)xp_assert_equalarray_namespaceis_numpyis_lazy_arrayxp_vector_normxp_assert_closeeager_warnsxp_default_dtypemake_xp_test_casemake_xp_pytest_marksxp_device_typeas_quat	from_quatc                 :    | dk(  rg dS | dk(  rg dS | dk(  rg dS y )Nx   r   r   yr   r   r   zr   r   r    axiss    j/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/spatial/transform/tests/test_rotation.py	basis_vecr#   %   s.    s{		 
    rc                     t        j                  |      }t        j                  |j	                  | j                         |            S )Ndtype)xpxdefault_dtyper   r   asarrayr   )r%   xpr(   s      r"   rotation_to_xpr-   .   s6    b!EbjjEjBCCr$   c                  R    t        d       t        g d       t        g dgg       y Nr   r   r   r   )r   r   r$   r"   test_init_non_arrayr1   3   s    \\|nr$   c                  ~   t        j                  t        j                  g d            } | j                  t
        u sJ t        j                  t        j                  g dg            } | j                  t
        u sJ t        j                  t        j                  g dgg            } | j                  t        u sJ y r/   )r   r   nparray_backendcython_backend
xp_backendr%   s    r"   test_cython_backend_selectionr9   9   s    288L12A::'''288\N34A::'''288l^$456A::###r$   c                  x    t        j                  t        j                  g dt        j                               y )Nr   r   r   r   r'   )r   r   r3   r4   float32r   r$   r"   test_numpy_float32_inputsr=   B   s    rxxBJJ?@r$   c                     | j                  g dg dg      }t        j                  |      }|| j                  dgdgg      z  }t        |j	                         |       y )N      @   r   r   )      r   r         @g      *@r+   r   r   r   r   r,   r   r%   expected_quats       r"   test_generic_quat_matrixrH   F   sP    


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

SED6?33MAIIK/r$   ndimr      c                     | j                  g d      }| j                  |d|dz
  z  dz         }t        j                  |      }|dz  }t	        |j                         |       y )Nr?   r   r   rA   rB   )r+   reshaper   r   r   r   )r,   rI   r   r%   rG   s        r"   test_from_single_nd_quaternionrO   M   sW    


>"A


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

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

399S!$%A	"1d7	++A1771: Aq#vYr5		Q/%@A
 	140ABGGAIIKG3QUCr$   c                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ | j                  d      }|t        |d	      d
   z  }t        j                  |      }t        j                  |      }t        j                  |j                  |d            sJ y )N{   rg   -q=rY   rT   )rT   rA   rB   rA   sizer    ).N)r3   r^   default_rngr   r   r   tolistapprox_equalallnormalr   )rg   
r_expectedr%   rh   s       r"   test_from_quat_array_likerz   n   s   
))


$CS)J:--/6689A""15"111 ,J:--/6689A66*))!%)8999 	


%A	#I	..A##A&J1A66*))!%)8999r$   c                     t        j                  | j                  g d            }|j                         j                  t        |       k(  sJ y )Nr;   )r   r   r+   r   r(   r   r,   r%   s     r"   test_from_quat_int_dtyper}      s;    2::l34A99; 0 4444r$   c                 \   | j                  g d      }t        t        j                  |      j	                  d      |        | j                  g d      }t        t        j                  |      j	                  d      |        | j                  g d      }t        t        j                  |      j	                  d      |        | j                  g d      }t        t        j                  |      j	                  d      |        | j                  g d      }|t        |      z  }t        t        j                  |      j	                  d      |       | j                  g d      }|t        |      z  }t        t        j                  |      j	                  d      |       y )	N        r   r   rs   T	canonical      r   r   r   )r   rs   r   r   )r   r   rs   r   )r   皙r   ?)r   r   r   r   )r+   r   r   r   r   r   )r,   rh   s     r"   test_quat_canonicalr      sP   


?#AH&&q)11D1AA2F


?#AH&&q)11D1AA2F


?#AH&&q)11D1AA2F


?#AH&&q)11D1AA2F


&'A	N1AH&&q)11D1A1E


()A	N1AH&&q)11D1A1Er$   
from_eulerc           	      ~   t         j                  j                  d      }t        j                  d| j                  d            }t        |j                  d      | j                  g d      dd	       t        j                  d| j                  d
            }t        |j                  d      | j                  | j                  g d      d      dd	       | j                  |j                  dd            }|t        |d      d d d f   z  }t        |j                  d         D ]  }||df   }t        j                  |      }t        |j                  d      | j                  |d      d       t        |j                  dd      | j                  |j                  d      d      d        t        j                  |      }t        |j                  d      | j                  |dd      d       t        |j                  dd      | j                  |j                  d      dd      d       y )Nr   xyzrT   TrR   )      ?r   r   r   rU   rV   rW   )r[   rT   rZ   r\   rA   r   r    .r]   )r   rS   r   )r3   r^   r_   r   r   zerosr   r   r+   ra   rb   r   rc   rd   r   re   rf   s         r"   test_as_quat_scalar_firstr      s   
))


"CE288A;/AAII4I0"**^2LU, 	E288G#45AAII4I0GGBJJ~6@U, 	

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


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

SEB4!qcA3#DEEMAIIK/r$   c                     | j                  g dg dg dg dg dg      }t        j                  |      }| j                  |      t	        |d      d d d f   z  }t        |j                  d	      |       y )
Nr   )r   rs   r   r   )r   r   rs   r   r   r   r   r    Tr   )r+   r   r   absr   r   r   rF   s       r"   *test_quat_double_to_canonical_single_coverr      sm    



 	A 	1AFF1Iqq 9!T' BBMAIII-}=r$   inv__mul__c                 h   | j                  g d      }t        j                  |      }t        ||j	                  d             | j                  g d      t        j                  d      z  }t        j                  |      }||z  |z  }t        |j	                  d      t        j                  d      z  | j                  g d             t        |j                         j	                  d      t        j                  d      z  | j                  g d             t        |j	                  d      t        j                  d      z  | j                  g d             t        |j                         j	                  d      t        j                  d      z  | j                  g d             t        ||j                         z  j	                  d      | j                  g d	      d
       t        ||j                         z  j	                  d      | j                  g d	      d
       t        ||z  j	                  d      | j                  g d      d
       t        |j                         |j                         z  j	                  d      | j                  g d      d
       y )Nr   Fr   )r   r   r   r   r   )r   r   r   r   )r   r   r   rs   )r   r   r   rs   r   r   r   r   gؗҬ<rp   )	r+   r   r   r
   r   mathsqrtr   r   )r,   rh   r%   r3s       r"   test_quat_double_coverr      s   
 	

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


>"499Q</A1A	
1QBAIII.tyy|;JJ~.0AEEGOOeO4TYYq\AJJ/1BJJJ/		!<JJ/1BFFH$$u$5diilBJJ/02 QquuwY''%'8JJ~.U<R[))E):JJ~.U<QrTNNUN3JJ/e=QUUWrvvx'0050AJJ/e=r$   c                     | j                  g d|z  d      }t        j                  t        d      5  t	        j
                  |       d d d        y # 1 sw Y   y xY w)NrL   rB   zExpected `quat` to have shapematch)r   pytestraises
ValueErrorr   r   )r,   rI   quats      r"   test_from_quat_wrong_shaper      sQ    88'td{'Q'(D	z)H	I !4 ! ! !s   AAc                 b   | j                  g dg dg dg      }t        |      rG| j                  | j                  t	        j
                  |      j                         d               sJ y t        j                  t              5  t	        j
                  |       d d d        y # 1 sw Y   y xY w)N)rT   rA   r   r   )r   r   r   r   r   r   .)
r+   r   rw   isnanr   r   r   r   r   r   )r,   r   s     r"   test_zero_norms_from_quatr     s    


 	A
 Qvvbhhx11!4<<>vFGHHH]]:& 	"q!	" 	" 	"s   B%%B.c                 ,   | j                  g d      }| j                  |d|dz
  z  dz         }t        j                  |      j	                         }| j                  g dg dg dg      }| j                  |d|dz
  z  dz         }t        ||d	
       y )Nr   r   r   r   rL   r   rM   r   rs   r   r   r   rT   rT   rV   rp   )r+   rN   r   r   rP   r   )r,   rI   r   matexpected_mats        r"   #test_as_matrix_single_nd_quaternionr     s     ::l#D::dDD1H-45D


T
"
,
,
.C::
 L
 ::lDD1H,=,FGLCE2r$   c                    | j                  g dg dg dg dg      }t        j                  |      j                         }t	        |j
                  d       | j                  g dg dg dg      }t        |d	   |d
       | j                  g dg dg dg      }t        |d   |d
       t        |d   | j                  d             t        |d   | j                  d             y )Nr   r   r   r   r   r0   r   )rA   rT   rT   r   r   r   r   .rV   rp   r   r   r   r   rs   r   r   r   r   .rT   rT   .)r+   r   r   rP   r   rd   r   r`   )r,   quatsr   	expected0	expected1s        r"    test_as_matrix_from_square_inputr     s    JJ	 E 

U
#
-
-
/CI&

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


 I
 CK7CK+CK+r$   c                    | j                  g dg dg dg      }t        j                  |      j                         }t	        |j
                  d       | j                  g dg dg dg      }t        |d   |d	
       | j                  g dg dg dg      }t        |d   |d	
       | j                  g dg dg dg      dz  }t        |d   |       y )Nr   r   r   r   rT   rA   )rT   rT   rT   r   r   r   r   rV   rp   r   r   r   r   )皙?g@)gffffff@r   r   )rs   r   r   rT   r   )r+   r   r   rP   r   rd   r   )r,   r   r   r   r   	expected2s         r"   !test_as_matrix_from_generic_inputr   :  s    JJ E
 

U
#
-
-
/CI&

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

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


  	I
 CK+r$   from_matrixc                 $   | j                  g dg dg dg      }| j                  |d|dz
  z  dz         }| j                  g d      }| j                  |d|dz
  z  dz         }t        t        j                  |      j                         |       y )	Nr   r   r   rL   r   r   )      ?r   r   r   rM   )r+   rN   r   r   r   r   )r,   rI   r   rG   s       r"   test_from_single_nd_matrixr   Z  s     ** C
 **S$$(+f4
5CJJ34MJJ}ddQh.?$.FGMH((-557Gr$   c                    d}| j                  g d      t        j                  d      z  }| j                  g dg dg dg      }t        t	        j
                  |      j                         ||       t        t	        j
                  | j                  |d            j                         | j                  |d	      |       y )
N:0yE>)r   r   rJ   r   '   )3~˷g6iпnzo?)r   r   6i?)r   r   g3~˷?rp   r   rT   rT   r   rA   )r+   r   r   r   r   r   r   rN   )r,   rY   rG   r   s       r"   test_from_matrix_calculationr   h  s    DJJ~.2>M
**/.- C
 H((-557TRH((C)CDLLNJJ}f5r$   c                     | j                  t        j                  ddd            }t        t	        j
                  |      j                         |       y )NrT   r[   r   )rr   random_state)r+   r   rvsr   r   r   rP   r,   r   s     r"    test_matrix_calculation_pipeliner   w  s>    
**(,,QRaH
ICH((-7793?r$   c                    t        j                  |       }|| j                  k(  rdnd}t        j                  j                  d      }| j                  |j                  d      |      }| j                  j                  |      }t        |j                  d         D ]:  }||   dk  st        j                  |      |df   j                  ||df          }< t        j                  |      j!                         }| j#                  || j%                  |            }| j'                  d      | j)                  d      z   }	t+        ||	|       y )	Nro   ư>r   )r\   rT   rT   r'   .rT   rp   )r)   r*   float64r3   r^   r_   r+   random_samplelinalgdetrc   rd   atsetr   r   rP   matmulmatrix_transposer   r`   r   )
r,   r(   rY   rndr   detsri   	ortho_matmult_resulteye3ds
             r"   test_from_matrix_ortho_outputr   }  s   b!ERZZ'5TD
))


"C
**S&&{35*
AC99==D4::a=! 87Q;&&+af%))3q#v;,7C8 $$S)335I))Ir':':9'EFKHH[!BFF1I-EKT2r$   c                 v   | j                  g dg dg dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         |d       | j                  g d	g d
g dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         |d       | j                  || j                  d      g      }| j                  || j                  d      g      }t        t        j                  |      j	                         |d       y )Nr   r   r   r   r   )5_%?gx'?r   )gx'ܿr   r   )r   r   r   r   rp   )r         r   )r   r   r   )r   r   r   r   r   rT   )r+   r   r   r   rP   stackr`   )r,   r   expecteds      r"   test_from_matrix_normalizer     s   
** C zz5557 8H H((-7798$O
** C zz<'') *H H((-7798$O ((C#
$Cxx266!9-.HH((-7798$Or$   c                    t         j                  j                  d      }t        j                  |       }|| j
                  k(  rdnd}t        t        j                  |j                  d            |       }t        j                  |j                         d      }| j                  |j                  ||            sJ y )	Nr   ro   r   )r[   rA   rq   T)assume_validrp   )r3   r^   rt   r)   r*   r   r-   r   r   rx   r   rP   rw   rv   )r,   rg   r(   rY   rotrot_no_norms         r"   test_from_matrix_assume_validr     s    
))


"Cb!ERZZ'5TD
++CJJGJ,DEr
JC&&s}}TJK66#"";T":;;;r$   c                    | j                  d      }t        j                  |      d   j                  d      }t	        |      rC| j                  | j                  t        j                  |      j                                     s;J t        j                  t        d      5  t        j                  |       d d d        t        j                  |      d   j                  d      }t	        |      rD| j                  | j                  t        j                  |      j                                     sJ y t        j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrT   r   r   r   zNon-positive determinantr   rs   )r`   r)   r   r   r   rw   r   r   r   rP   r   r   r   r   s     r"   )test_from_matrix_non_positive_determinantr     s"   
&&)C
&&+d



"CSvvbhhx33C8BBDEFFF]]:-GH 	&  %	& &&+d



#CSvvbhhx33C8BBDEFFF]]:-GH 	&  %	& 	&	& 	&	& 	&s   "E0E<0E9<Fc                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ y Nrm   rn   ro   rp   rT   )	r3   r^   rt   r   r   rP   ru   rv   rw   rg   ry   r%   s      r"   test_from_matrix_array_liker     s    
))


$CS)JZ113::<=A""15"111 ,JZ113::<=A66*))!%)8999r$   c                     | j                  g dg dg dg      }t        j                  |      }|j                         j                  t        |       k(  sJ y )Nr   r   r   )r+   r   r   r   r(   r   r,   r   r%   s      r"   test_from_matrix_int_dtyper     sG    
**iI6
7CS!A99; 0 4444r$   from_rotvecc                 "   d}| j                  g d      }| j                  |d|dz
  z  dz         }| j                  g d      }| j                  |d|dz
  z  dz         }t        j                  |      }t	        |j                         ||       y )	NHz>r   rL   r   rT   )gJ?r   r   g<(?rM   rp   )r+   rN   r   r   r   r   )r,   rI   rY   rotvecrG   results         r"   test_from_nd_single_rotvecr    s     DZZ	"FZZq 1D 89FJJ;<MJJ}ddQh.?$.FGM!!&)FFNN$m$?r$   c                     d}| j                  g dg dg dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         ||       y )	Nr   r   r   r   r   rs   r   r   r   r   )g.pG?cU(G?r  gQH?)gNZ]O?gNZ]OݿgNZ]O?g0i?r0   rp   )r+   r   r   r   r   )r,   rY   r   rG   s       r"   test_from_generic_rotvecr    sd    DZZ F JJ45 
 M
 H((088:MPTUr$   c                 B   | j                  dt        j                  d      z  dt        j                  d      z  dt        j                  d      z  gg dg dg      }t        j                  |      j                         }t        |d   | j                  d      d          t        |d	d df   |d
   dz         t        |d   | j                  d      d          t        |dd df   | j                  g d             t        |d   | j                  g d             y )NgMb@?rT   gMb@)皙?g333333?r   r  r   rT   r   r   r   r   r   r   rT   g@w?r   )g>}J?g.e?g>}J?r   r   )r+   r   r   r   r   r   r   r
   )r,   r   r   s      r"   test_from_rotvec_small_angler    s    ZZ			!	ediil2D499Q<4GH
 F '//1DDJ

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

9 5b 9:DBQBKJJ % &' DL"**^"<=r$   	as_rotvecc                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ y r   )	r3   r^   rt   r   r   r  ru   rv   rw   r   s      r"   test_from_rotvec_array_liker    s    
))


$CS)JZ113::<=A""15"111 ,JZ113::<=A66*))!%)8999r$   c                     | j                  g d      }t        j                  |      }|j                         j                  t        |       k(  sJ y )Nr   )r+   r   r   r   r(   r   )r,   r   r%   s      r"   test_from_rotvec_int_dtyper    s@    ZZ	"FV$A99; 0 4444r$   c                     | j                  dgdz        }t        j                  |d      }|j                         }| j                  |dz  | j                  z        }t        j                  |      }|j                         }t        ||       y )Ngvô0?rT   Tdegrees   )r+   r   r   r   pir   )r,   rotvec1rot1quat1rotvec2rot2quat2s          r"   test_degrees_from_rotvecr  %  sw    jj.)A-.G6DLLNE jj3./G(DLLNEE5!r$   c                     t        j                  t        d      5  t        j                  | j                  ddg             d d d        y # 1 sw Y   y xY w)N Expected `rot_vec` to have shaper   r   r   )r   r   r   r   r   r+   r,   s    r"   test_malformed_1d_from_rotvecr"  3  sA    	z)K	L 1RZZA/01 1 1s   'AAc                     d|dz
  z  dz   }t        j                  t        d      5  t        j                  | j                  |             d d d        y # 1 sw Y   y xY w)NrL   r   r   r   r   )r   r   r   r   r   onesr,   rI   rd   s      r"   test_malformed_nd_from_rotvecr'  9  sQ     D1H$E	z)K	L -RWWU^,- - -   %AAc           	         t        j                  |       }|| j                  k(  rdnd}| j                  g dg dg dg      }|t	        |dd      z  }t        j                  |      j                         }t	        |d	      }t        |d d d
f   | j                  |dz               t        | j                  j                  ||d d d d
f         | j                  d      |       y )NrU   r   r   r   rs   r   r   rs   r   ga2U0*3?r0   rs   T)r!   keepdimsr    rT   r   r   rp   )r)   r*   r   r+   r   r   r   r  r   cosr   crossr   )r,   r(   rY   r   r   angles         r"   test_as_generic_rotvecr0  A  s    b!ERZZ'5TD:: D
 	N4b488D%//1F6+EDAJuqy 12BIIOOFDBQBK8"((6:JQUVr$   rA   c                 Z   | j                  g d      }| j                  |d|dz
  z  dz         }| j                  g d      }| j                  |d|dz
  z  dz         }t        j                  |      j	                         }t        |j                  |j                         t        ||       y )Nr   r   r   rL   r   rM   )gj*0	x?g$x?g:2(r   )r+   rN   r   r   r  r   rd   r   )r,   rI   r   expected_rotvecactual_rotvecs        r"   test_as_rotvec_single_nd_inputr6  S  s     ::m$D::dDD1H-45Djj!CDOjj$$(2Cd2JKO&&t,668M$$o&;&;<M?3r$   c                 $   | j                  g dg dg dg      }t        j                  |      }|j                  d      }t	        |d      }t        || j                  d      d	          t        |d
   |d          t        |d   |d          y )Nr   r   r   Tr  rs   r    g      ^@r   r   r   r   )r+   r   r   r  r   r   )r,   r   r   r   r/  s        r"   test_as_rotvec_degreesr8  `  s     **iI6
7C


s
#C]]4](F6+EE2::e,R01F1Ivay)F1Ivay)r$   c                     | j                  g dg dg dg      }t        t        j                  |      j	                         |       t        t        j                  |d      j	                  d      |       y )Nr  r   rs   r   )ga2U0*3gǺ6?ga2U0*?Tr  )r+   r   r   r   r  )r,   r   s     r"   test_rotvec_calc_pipeliner;  l  si     ZZ
 F
 H((0::<fEH((>HHQUHVr$   from_mrpc                    | j                  g d      }| j                  |d|dz
  z  dz         }| j                  g d      }| j                  |d|dz
  z  dz         }t        j                  |      }t	        |j                         |d       t        |j                  t        t        |      j                  d	                  sJ y )
N)r   r   r   rL   r   r   )r   r   r   r   rM   ro   rp   r   )r+   rN   r   r<  r   r   
isinstance_quattyper   empty)r,   rI   mrprG   r  s        r"   test_from_mrp_single_nd_inputrC  y  s     **[
!C
**S$$(+d2
3CJJ~.MJJ}ddQh.?$.FGMs#FFNN$m%@fllD)=)C)CA)F$GHHHr$   c                     t         j                  j                  d      } t        j                  |       }t        j                  |j                         j                               }|j                  |d      sJ t        j                  d|       }t        j                  |j                         j                               }t        j                  |j                  |d            sJ y r   )	r3   r^   rt   r   r<  as_mrpru   rv   rw   r   s      r"   test_from_mrp_array_likerF    s    
))


$CS)J*++-4467A""15"111 ,J*++-4467A66*))!%)8999r$   c                     | j                  g d      }t        j                  |      }|j                         j                  t        |       k(  sJ y )Nr   )r+   r   r<  r   r(   r   )r,   rB  r%   s      r"   test_from_mrp_int_dtyperH    s@    
**Y
C#A99; 0 4444r$   c                     | j                  g dg dg dg      }| j                  g dg dg dg      }t        t        j                  |      j	                         |       y )Nr  r  r  )r
  r   r   g)g}+;?g}+;g}+;?gߨӉؿr0   )r+   r   r   r<  r   )r,   rB  rG   s      r"   test_from_generic_mrprJ    s\    
** C JJ:  M H%%c*224mDr$   c                     d|dz
  z  dz   }t        j                  t        d      5  t        j                  | j                  |             d d d        y # 1 sw Y   y xY w)NrL   r   r$  zExpected `mrp` to have shaper   )r   r   r   r   r<  r%  r&  s      r"   test_malformed_nd_from_mrprL    sQ     D1H$E	z)G	H *"''%.)* * *r(  rE  c                     | j                  g dg dg dg      }|t        |d      d d d f   z  }| j                  g dg dg dg      }t        t        j                  |      j                         |       y )	Nr*  r+  r0   r   r    )gQUU?gvWUU?QUUտ)uFx?guFxrO  r  )r+   r   r   r   r   rE  )r,   r   expected_mrps      r"   test_as_generic_mrprQ    sv    :: D 	N4a(D11D::-- L H&&t,335|Dr$   c           	          | j                  t        j                  | j                  dz  dz         ddg      }t	        t        j                  d| j                  g d      d      j                         |       y )	Nr   rA   r   r   r   )i  r   r   Tr  )r+   r   tanr  r   r   r   rE  )r,   rP  s     r"   test_past_180_degree_rotationrT    s`     ::Q 77a@ALE2::k#:DIPPRr$   c                 Z   | j                  g d      }| j                  |d|dz
  z  dz         }| j                  g d      }| j                  |d|dz
  z  dz         }t        j                  |      j	                         }t        |j                  |j                         t        ||       y )Nr2  rL   r   rM   )g?g?gO޿r   )r+   rN   r   r   rE  r   rd   r   )r,   rI   r   rP  
actual_mrps        r"   test_as_mrp_single_nd_inputrW    s     ::m$D::dDD1H-45D::CDL::lDD1H,=,DEL##D)002J!!<#5#56J-r$   c                     | j                  g dg dg dg dg      }| j                  g dg dg dg dg      }t        t        j                  |      j	                         |       y )Nr  r:  )gzpy?r   r   )皙?r
  rY  )gK}\UUſgK}\UU?rN  )r+   r   r   r<  rE  )r,   rV  rP  s      r"   test_mrp_calc_pipelinerZ    sb    	 J
 ::.	 L
 H%%j188:LIr$   c                     t        j                  d| j                  d      d      j                         }| j                  g d      t	        j
                  d      z  }t        ||       y )Nr   Z   Tr  r   r   r   r   r   )r   r   r+   r   r   r   r   )r,   r   rG   s      r"   test_from_euler_single_rotationr^    sL    sBJJrNDAIIKDJJ~.1=MD-(r$   c                 ^   t        j                  t        d      5  t        j                  d| j                  ddg             d d d        t        j                  t        d      5  t        j                  d| j                  dg             d d d        y # 1 sw Y   TxY w# 1 sw Y   y xY w)Nz&Expected last dimension of `angles` tor   Xr   r\  XYZ)r   r   r   r   r   r+   r!  s    r"    test_from_euler_input_validationrb    s     
z)Q	R 6CQG!456 
z)Q	R 5E2::rd#345 56 65 5s   (B''B#B #B,c                 H   | j                  | j                  g d      d|dz
  z  dz         }t        j                  d|d      j	                         }| j                  g d      t        j                  d	      z  }| j                  |d|dz
  z  d
z         }t        ||       y )N)r   r   r\  rL   r   r   r   Tr  r]  r   rM   )rN   r+   r   r   r   r   r   r   )r,   rI   anglesr   rG   s        r"   test_from_euler_nd_rotationre    s     ZZ

:.q0AD0HIFufd;CCEDJJ~.1=MJJ}ddQh.?$.FGMD-(r$   c                     t        j                  d| j                  d      d      j                         }t        j                  d| j                  d      d      j                         }t	        ||       y )Nr   r\  Tr  Zr   r   r+   rP   r   )r,   	extrinsic	intrinsics      r"   (test_single_intrinsic_extrinsic_rotationrk     sV    ##CBFPPRI##CBFPPRIIy)r$   c                 ^   t         j                  j                  d      }| j                  |j	                  ddd            }| j                  |d      }t        j                  d|d	      j                         }t        j                  d
|d	      j                         }t        ||       y )Nr   r  rJ   rT   lowhighrr   rs   r    r   Tr  ZYX)
r3   r^   r_   r+   randintflipr   r   r   r   )r,   r   abr   r   s         r"   test_from_euler_rotation_orderrv    s     ))


"C


3;;13V;<=A
AE1d3;;=AE1d3;;=AAqr$   c                     d}t        j                  d| j                  ddg      d      j                         }| j                  g dg dg dg      }t	        |||	       y )
Nro   zxr\  Tr  r   r   r   rs   r   rp   rh  )r,   rY   r   r   s       r"   -test_from_euler_elementary_extrinsic_rotationrz    s[    D


dBJJBx$8$
G
Q
Q
SC:: L
 CD1r$   c           	      ~   d}| j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g d	g d
g dg      |       t	        |d   | j                  g dg dg dg      |       t	        |d   | j                  g dg dg dg      |       y )Nr      <   -   r}  r~  r}  r  r}  r~  ZXYTr  r   )g# ?      пgΙ6d?)g$+H?+Pz?Ppƿ)gPpֿ+Pz?gPp?rp   r   )g+a?r  (s=?)r  r  g&(ٿ)r  r  r  r   )ga}@?gF6g^@?)g0	8?gF6?g4?)      r   r  r+   r   r   rP   r   )r,   rY   rd  r   s       r"   &test_from_euler_intrinsic_rotation_312r    s    DZZ
 F
 

eVT
:
D
D
FCCK***- " 	 CK***- " 	 CK*)*- " 	r$   c           	      n   | j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g dg d	g d
g             t	        |d   | j                  g dg dg dg             t	        |d   | j                  g dg dg dg             y )Nr|  r  r  ZXZTr  r   )>d?g @r  )l>?^|@r  )X?r  r   r   g      ?g ,r  g ,?g      ?r  r        ?r   r   )r  g4&d'e?)cH?Xӿg'eֿ)r        ?r  r  r,   rd  r   s      r"   &test_from_euler_intrinsic_rotation_313r  <  s    ZZ
 F
 

eVT
:
D
D
FCCK,,*- "  CK+*'- "  CK-.*- " r$   c           	      n   | j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g dg d	g d
g             t	        |d   | j                  g dg d	g dg             t	        |d   | j                  g dg dg dg             y )Nr|  r  r  zxyTr  r   )4&d?gPp?r  )r  r  g+Pz)r  r  r  r   )g
?\2׳r  )r  g ,?r  r   )r  r  r  )r  r  r   )g>dۿ @?r  r  r  s      r"   &test_from_euler_extrinsic_rotation_312r  X  s    ZZ
 F
 

eVT
:
D
D
FCCK++-- "  CK+++- "  CK,,,- " r$   c           	      n   | j                  g dg dg dg      }t        j                  d|d      j                         }t	        |d   | j                  g dg d	g d
g             t	        |d   | j                  g dg dg d
g             t	        |d   | j                  g dg dg dg             y )Nr|  r  r  zxzTr  r   )r  gl>r  )r  r  gXr  r   r  r  r   )r  gcHr  )r  r  r  )r  r  r  r  r  s      r"   &test_from_euler_extrinsic_rotation_313r  t  s    ZZ
 F
 

eVT
:
D
D
FCCK-.)- "  CK,+)- "  CK,,+- " r$   c                     t         j                  j                  d      } d}t        j                  |       }t        j                  ||j                  |      j                               }|j                  |d      sJ t        j                  d|       }t        j                  ||j                  |      j                               }t        j                  |j                  |d            sJ y )Nrm   r   rn   ro   rp   rT   )	r3   r^   rt   r   r   as_eulerru   rv   rw   )rg   orderry   r%   s       r"   test_from_euler_array_liker    s    
))


$CES)JE:#6#6u#=#D#D#FGA""15"111 ,JE:#6#6u#=#D#D#FGA66*))!%)8999r$   c                     t         j                  j                  d      } | j                  dd      }t	        j
                  d|d      }t	        j
                  dt        |      d      }|j                  |d	      sJ y )
Nrm   Lr  )ro  rp  r   Tr  ro   rp   )r3   r^   rt   uniformr   r   floatrv   )rg   degry   r%   s       r"   test_from_euler_scalarr    sm    
))


$C
++$S+
)C$$S#t<JCsT:A""15"111r$   r  	seq_tupler   rj  )FTc                      fd}t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  t         j
                   dz  t         j
                  dz  |f      |d d df<   |j	                  t         j
                   t         j
                  |f      |d d df<    j                  |      }dj                  |      }|r|j                         }t        j                  ||      }|j                  |      }	t        ||	dd	
        ||	|z
  dd       y )Nc                     j                  | d      }j                  | d      }j                  ||      }j                  j	                  |      |k        sJ j                  ||k        sJ y Nr   r    meanstdhypotrw   r   errormean_maxrms_maxr  r  rmsr,   s         r"   
test_statsz1test_as_euler_asymmetric_axes.<locals>.test_stats  l    wwu1w%ffUf#hhtS!vvbffTlX-...vvcGm$$$r$   r     rT   rn  r   r    ro   rY   rX   rU   +=r3   r^   r_   rA  r  r  r+   joinupperr   r   r  r   
r,   r  rj  r  r   nrd  seqrotationangles_quats
   `         r"   test_as_euler_asymmetric_axesr    s"   
% ))


"CAXXq!fF;;BEE6QD;AF1a4L;;BEE6A:BEEAIQD;IF1a4L;;BEE6QD;AF1a4LZZF
'')
C iik""3/H##C(KFKae<{V#UE2r$   c                      fd}t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  |f      |d d df<   |j	                  t         j
                   t         j
                  |f      |d d df<    j                  |      }dj                  |d   |d   |d   g      }|r|j                         }t        j                  ||      }|j                  |      }	t        ||	dd	
        ||	|z
  dd       y )Nc                     j                  | d      }j                  | d      }j                  ||      }j                  j	                  |      |k        sJ j                  ||k        sJ y r  r  r  s         r"   r  z0test_as_euler_symmetric_axes.<locals>.test_stats  r  r$   r   r  rT   rn  r   r   r  gU>=r  rV   r  r  r  s
   `         r"   test_as_euler_symmetric_axesr    s'   
% ))


"CAXXq!fF;;BEE6QD;AF1a4L;;1255t;<F1a4L;;BEE6QD;AF1a4LZZF ''9Q<1y|<
=Ciik""3/H##C(KFKag>{V#UE2r$   c              #      K   | r t        t        d|      5  d  d d d        y t        j                         5  t        j                  d       d  d d d        y # 1 sw Y   y xY w# 1 sw Y   y xY ww)NzGimbal lock)r   r,   r  )r   UserWarningwarningscatch_warningssimplefilter)should_warnr,   s     r"   maybe_warn_gimbal_lockr    sl      MbA 		 	 $$& 	!!'*	 			 		 	s2   A4AA4A(	A4A%!A4(A1-A4suppress_warningsc                    t        j                  |       }|| j                  k(  rdnd}| j                  g dg dg dg dg      }dj	                  |      }|r|j                         }t        j                  ||d	      }|j                         }	t        | |       5  |j                  |d|
      }
d d d        t        j                  |
d	      j                         }t        |	||       y # 1 sw Y   >xY w)Nro   r   )r  r\  #   )r     )r  r\     )r  r     r  Tr  r  r  rp   r)   r*   r   r+   r  r  r   r   rP   r  r  r   r,   r  rj  r  r(   rY   rd  r  r  mat_expectedangle_estimatesmat_estimateds               r"   (test_as_euler_degenerate_asymmetric_axesr    s     b!ERZZ'5TD ZZ	 F '')
C iik""3=H%%'L	$5 5r	: 
"++1B , 

 ''_dKUUWML-d;
 
s   C00C9c                    t        j                  |       }|| j                  k(  rdnd}| j                  g dg dg dg dg      }dj	                  |d   |d	   |d   g      }|r|j                         }t        j                  ||d
      }|j                         }	t        | |       5  |j                  |d
|      }
d d d        t        j                  |
d
      j                         }t        |	||       y # 1 sw Y   >xY w)Nro   r   )r  r   r~  )r  r   K   )r~  r  r  )r  r  r  r  r   r   Tr  r  rp   r  r  s               r"   'test_as_euler_degenerate_symmetric_axesr    s    b!ERZZ'5TD ZZ	 F ''9Q<1y|<
=C iik""3=H%%'L	$5 5r	: 
"++1B , 

 ''_dKUUWML-d;
 
s   *C<<Dc                 2   | j                  g dg dg dg      }| j                  |d|dz
  z  dz         }t        j                  |      j	                  dd	      }| j                  g d
      }| j                  |d|dz
  z  dz         }t        ||d       y )Nr   r   r   rL   r   r   r   Tr  )r   r   g     V@r   ro   rp   )r+   rN   r   r   r  r   )r,   rI   r   rd  expected_angless        r"   test_as_euler_nd_rotationr  :  s     ** C
 **S$$(+f4
5C!!#&//t/DFjj.Ojj$$(2Cd2JKOFO%8r$   c                    t        j                  |       }|| j                  k(  rdnd}t        j                  j                  d      }d}t        j                  ||      }t        ||       }|j                         }|j                         j                         }||z  }||z  }	| j                  |ddf      }
t        j                  |
      dd dd df   j                  | j                  d            }
t        ||
|       t        |	|
|       d	}|| j                  k(  rdnd
}| j                  |j!                  |dz         |      }t        j"                  |      }|j                         }|j                         j                         }||z  }||z  }	| j                  |dz         }t        j                  |      dd dd df   j                  | j                  d            }t        |||       t        |	||       y )Nro   r   r   r[   )numr   rT   .rp   )r[   rT      r   rM   rq   r'   r   )r)   r*   r   r3   r^   r_   r   r-   rP   r   rA  r   r   r`   r   r+   rx   r   )r,   r(   rY   r   r  pp_matq_matresult1result2r   batch_shaper   r%   eye_nds                  r"   test_invr  I  s   b!ERZZ'5TD
))


"C
AAC0Aq"AKKMEEEGEemGemGHHaAYEFF5M#rr2A2+&**266!95EGU.GU. KRZZ'5TD::cjjkD&8j9:GD4 AKKMEEEGEemGemGXXkF*+FVVF^C!RaRK(,,RVVAY7FGV$/GV$/r$   c                    t        j                  |       }|| j                  k(  rdnd}t        j                  j                  d      }t        t        j                  |      |       }|j                         }|j                         }|j                         }| j                  ||      }| j                  ||      }	| j                  d      }
t        ||
|       t        |	|
|       t        t        j                  d|      |       }|j                         }|j                         }|j                         }| j                  j                  ||      }| j                  j                  ||      }| j                  d	      }t        j                  |      d
d dd df   j!                  | j                  d            }t        |||       t        |||       y )Nro   r   	   #;h29s+,g0Hn rn   rT   rp   r   )r  rg   r   .)r)   r*   r   r3   r^   rt   r-   r   r   rP   r   r`   r   r   rA  r   r   )r,   r(   rY   rg   r  rh   r  r  res1res2r`   r   r   x_matrixy_matrixr  r  r   s                     r"   test_inv_single_rotationr  m  sq   b!ERZZ'5TD
))

 G
HCx3/4A	AKKMEKKME99UE"D99UE"D
&&)CD#D)D#D)x1#6;A	A{{}H{{}Hiix2Giix2GHHYEFF5M#rr2A2+&**266!95EGU.GU.r$   	magnitudec                     d}t        t        j                  |      |       }| j                  |      }t	        |j                         |       t	        |j                         j                         |       y )Nr[   )r-   r   identityr   r   r  r   )r,   r  r%   r   s       r"   test_identity_magnituder    sT    
Ax((+R0Axx{HAKKM8,AEEG%%'2r$   c                     t        t        j                         |       }|j                         dk(  sJ |j	                         j                         dk(  sJ y )Nr   )r-   r   r  r  r   r|   s     r"   test_single_identity_magnituder    sH    x((*B/A;;=A557!###r$   c                    t        j                  |       }|| j                  k(  rdnd}d}t        t	        j
                  |d      |       }t        t	        j                  |      |       }||z  }t        |j                         |j                                ||j                         z  }t        |j                         | j                  |      |       y Nro   r   r[   r   rn   rp   r)   r*   r   r-   r   r^   r  r   r   r   r  r   r,   r(   rY   r  r  rh   r  s          r"   test_identity_invariancer    s    b!ERZZ'5TD
Axqa0"5Ax((+R0AUFAIIK!12aeegFF$$&$?r$   c                    t        j                  |       }|| j                  k(  rdnd}d}t        t	        j
                  |d      |       }t        t	        j                         |       }||z  }t        |j                         |j                                ||j                         z  }t        |j                         | j                  |      |       y r  r  r  s          r"   test_single_identity_invariancer    s    b!ERZZ'5TD
Axqa0"5Ax((*B/AUFAIIK!12aeegFF$$&$?r$   c                     t        j                  d      } | j                         j                  dk(  sJ t        j                  d      } | j                         j                  dk(  sJ t        j                  d      } | j                         j                  dk(  sJ t        j                  d      } t	        | j                         j                  d	d
      t        j                  t        j                  d
      d	   d             t        j                  t        d      5  t        j                  d       d d d        t        j                  t        d      5  t        j                  dd       d d d        t        j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   y xY w)Nr   )rd   rM   rB   rB   rA   r   rT   r   rT   rA   r   r   rT   rs   rA   )rC   r   )`shape` must be an int or a tuple of intsr         @#Only one of `num` or `shape` can berT   r   r   )r  rd   z&takes from 0 to 1 positional arguments)r   r  r   rd   r
   rN   r3   ra   r`   r   r   r   	TypeErrorr8   s    r"   test_identity_shaper    sc   #A99;$$$"A99;&&&'A99;	)))	*AAIIK''A.q	"~0VW	z)T	U %$%	z)N	O /av./	y(P	Q  !Q   	% %/ /   s$   %F:GG:GGGc                    d|dz
  z  dz   }| j                  | j                  d      |dz         }t        j                  |      }|j	                         }| j                  | j                  | j                  | j                  dg      }| j                  ||      }t        ||       t        j                  |       }|j	                         }t        ||       y )NrL   r   rM   rA   r   )rN   r`   r   r   r  r+   r  r   )r,   rI   
quat_shaper   r%   r  expected_results          r"   test_magnituder    s     "T)J::bffQid!23D4 A[[]Fjj"%%q!9:Ojj*=OFO,D5!A[[]FFO,r$   c                 $   t        j                  | j                  d            }|d   j                         }t	        || j                  | j                        d          |d   j                         }t	        || j                  d      d          y )NrA   r   r   rT   r   )r   r   r`   r  r   r+   r  )r,   r%   r  r  s       r"   test_magnitude_single_rotationr    sm    266!9%AdnnGGRZZ.r23dnnGGRZZ_R01r$   rv   c                    t         j                  j                  d      }t        j                  d|      }t        j                  d|      }||j	                         z  j                         }t        ||       }t        ||       }| j                  t        j                  |            }t        |j                  ||      | j                  |      |k         y )Nr  r[   rn   )r3   r^   rt   r   r   r  r-   r+   medianr
   rv   )r,   rg   r  rh   r_magrY   s         r"   test_approx_equalr    s     ))

 G
HC$A$A[##%Eq"Aq"A::bii&'DANN1d+bjj.?$.FHr$   c                 V   t        j                  | j                  g d            }t        j                  | j	                  d            }|j                  |d         sJ |j                  |d         rJ t        |j                  |d         t        j                        st        |       rJ |j                  |d   d      rJ |j                  |d   dd	      rJ t        j                  t        d
      5  |j                  |d   d      sJ 	 d d d        y # 1 sw Y   y xY w)N)r   r   g&.>rA   rT   r   绽|=rp   r   T)rY   r  zatol must be setr   r  )r   r   r+   r   r`   rv   r>  r3   bool_r   r   warnsr  r,   r  rh   s      r"   !test_approx_equal_single_rotationr!    s     	RZZ56A266!9%A>>!A$~~ad###annQqT*BHH5Xb\II ~~ad~///~~adt~<<<	k);	< 2~~adD~1112 2 2s   <DD(c                    d}t         j                  j                  d      }t        j                  |j                  |dz               }t        j                  |j                  |dz               }||j                         z  j                         }t        ||       }t        ||       }|j                  |k(  sJ | j                  t        j                  |            }t        |j                  ||      | j                  |      |k         t        j                  |j                  |dz               }t        j                  |j                  d            }||j                         z  j                         }t        ||       }t        ||       }|j                  |k(  sJ | j                  t        j                  |            }t        |j                  ||      | j                  |      |k         t        j                  |j                  |dz               }t        j                  |j                  d            }||j                         z  j                         }t        ||       }t        ||       }|j                  |k(  sJ | j                  t        j                  |            }t        |j                  ||      | j                  |      |k         y )N)r   r[   rT   r   rM   rq   )r   r[   r   rA   r   rT   rA   )r3   r^   rt   r   r   rx   r   r  r-   rd   r+   r  r
   rv   )r,   r  rg   r  rh   r  rY   s          r"   test_approx_equal_batchedr$    sK   
 K
))


"C3::;+=:>?A3::;+=:>?A[##%Eq"Aq"A;;+%%%::bii&'DANN1d+bjj.?$.FH 	3::;+=:>?A3::=:9:A[##%Eq"Aq"A;;+%%%::bii&'DANN1d+bjj.?$.FH 	3::;+=:>?A3::9:56A[##%Eq"Aq"A;;+%%%::bii&'DANN1d+bjj.?$.FHr$   c                 (   t        j                  | j                  d            }t        j                  | j                  d            }t        j                  t
        d      5  |j                  |       d d d        t        j                  | j                  d            }t        j                  | j                  d            }t        j                  t
        d      5  |j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr
  rT   r   rA   zbroadcastable shapesr   r   rA   rT   rA   )r   r   r%  r   r   r   rv   r   s      r"   *test_approx_equal_batched_input_validationr)  -  s    2779-.A2779-.A	z)?	@ 	q 	2776?+A2776?+A	z)?	@ 	q  
 s   $C<!D<DDr  c                    | j                  | j                  d       | j                  d      f      }| j                  |d|dz
  z  dz         }| j                  d| j                  dz  d      }| j                  d      d	   }t        |       | j                  u rd
nd}|D ]U  }t        j                  ||z        j                         }|j                  d	k(  sJ t        |j                         ||       W y )NrT   rL   r   rm  r   r   r\   r   r   r   r  rp   )concatr`   rN   linspacer  r+   r   r<   r   r   r  rd   r   r  )r,   rI   axesthetasdesiredrY   tr_means           r"   	test_meanr2  :  s    
 99rvvayj"&&),-D::dDD1H-67D[[BEEAIs+Fjjob!G#B'2::545D @%%a$h/446||r!!!((*G$?@r$   rB   c                    | j                  | j                  | j                  d       | j                  d      f      d|dz
  z  dz         }| j                  dz  }t	        j
                  ||z        }| j                  |j                  d d d      }|dk(  r|d   }t        |       | j                  u rd	nd
}t        |j                  d      j                         ||       | j                  |j                  dd d      }|dk  r|d   }t        |j                  d      j                         ||       |j                  d      }t        |j                  d      |j                  d      |       y )NrT   r   r   r   r   rA   r   r   r   r   r  rs   r    rp   )r   rs   Tr   )ra   r+  r`   r  r   r   fullrd   r   r<   r   r  r  r   )r,   rI   r-  thetar%   r/  rY   r1  s           r"   test_mean_axisr7  J  sH   
 77299rvvayj"&&)45ttax7H67QRDEEAIEUT\*A ggdjj"os+Gqy"+#B'2::545DAFFFO--/tD ggdjj2&,Gax"+AFFF(224gDI VVV_FFNNTN2AIII4Mr$   c           	         t        j                  |       | j                  k(  rdnd}t        j                  j                  d      }| j                  |j                  d      t        j                  |             }t        j                  |      }|j                  d      }t        |j                  d         D ]  }t        |j                  d	         D ]s  }t        j                  |d d ||d
f         j                         }t        ||   |   |j                         z  j                         | j                  d      d   |       u  |j                  d      }	t        |j                  d         D ]l  }t        j                  ||d
f         j                         }t        |	|   |j                         z  j                         | j                  d      d   |       n y )Nr  r   r   )rA   rB   rJ   rA   rq   r'   r    r   r   .r   r   rp   r   r   )r)   r*   r   r3   r^   rt   r+   rx   r   r   r  rc   rd   r   r   r  )
r,   rY   rg   rh   r%   mean_0ri   j
mean_slicemean_1_2s
             r"   test_mean_compare_axisr>  f  s    %%b)RZZ75TD
))


"C


3::<:08I8I"8M
NA1AVVV^F1771: <qwwqz" 	<A!++AaAslO<AACJVAYq\JNN,<<GGIJJsOB/d<	<<
 vv6v"H1771: 8''!S&	2779
!z~~'77BBD

3+$	88r$   c           	      n   | j                  d| j                  dz  d      }|f|dz
  z  }| j                  g dg dg dg      }| j                  ddg      }| j                  ||dz         }| j                  ||dz         }| j                  d	      d
   }|D ]  }t	        j
                  ||dd dd d f   z        }|j                  |      }	t	        j
                  ||z        }
|
j                         }|j                  d
k(  sJ t        ||	j                         z  j                         |d        y )Nr   r   r\   r   )r   r   r   r   r4  rL   r   r   .weightsr   rp   )r,  r  r+   ra   r   r   r  rd   r   r   r  )r,   rI   r.  r  r-  rA  r   r0  rwmwr%   ms               r"   test_weighted_meanrE  |  s&   
 [[BEEAIs+F 'TAX&K::{Iy9:Djj!Q G774v-.Dggg{T12Gzz#r"H I!!!d3A:&6"67WWWW%  T*FFHww"}}RVVX002H4HIr$   c                    t        j                  | j                  d            }t        |j	                               rN|j                  | j                  d             }| j                  | j                  |j                              sHJ t        j                  t        d      5  |j                  | j                  d              d d d        t        j                  | j                  d            }t        j                  t        d      5  |j                  | j                  d             d d d        t        j                  | j                  d            }t        j                  t        d      5  |j                  | j                  d	             d d d        t        j                  t        d
      5  |j                  d       d d d        t        j                  t        d
      5  |j                  d       d d d        t        j                  t        d      5  |j                  d       d d d        t        j                  t        d
      5  |j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   y xY w)NrA   r@  znon-negativer   r(  zExpected `weights` tor$  r
  r  zaxis .* is out of boundsrT   r    )rs   r   z+`axis` must be None, int, or tuple of ints.0i)r   r   r`   r   r   r  r%  rw   r   r?  r   r   r   )r,   r%   rD  s      r"   test_mean_input_validationrH    s   266!9%AQYY[!FFBGGAJ;F'vvbhhqww'(((]]:^< 	(FFBGGAJ;F'	( 	2776?+A	z)@	A &	rwwt}%&2779-.A	z)@	A (	rwwv'( 
z)D	E 	A	z)D	E 	G	z)V	W 	C	z)D	E 	C %	( 	(
& &( (    sT   '#I="J
:"J?J#5J/+J;!K=J
JJ #J,/J8;KKreducec                     t        j                  | j                  g d            }|j                  d      }t	        |t               sJ y )Nr   r   r   r   Freturn_indices)r   r   r+   rI  r>  )r,   r%   r  s      r"   test_reduction_no_indicesrN    s<    2::&:;<AXXUX+Ffh'''r$   c                     t        j                  | j                  g d            }|j                  d      }t	        |      t
        u sJ t        |      dk(  sJ |\  }}}|J |J y )NrK  TrL  rT   )r   r   r+   rI  r@  tuplelen)r,   r%   r  reduced	left_best
right_bests         r"   test_reduction_none_indicesrU    st    2::&:;<AXXTX*F<5   v;!%+"GY
r$   c                 &   t        j                  |       }|| j                  k(  rdnd}t        j                  j                  d      }t        j                  d|      }t        j                  d|      }t        j                  d|      }t        ||       }t        ||       }t        ||       }	|	j                  ||d	      \  }
}}t        j                  t        |      t        |      t        |      f      }t        |      D ]]  \  }}t        |      D ]J  \  }}t        |      D ]7  \  }}t        j                  ||z  |z  j                         d
         ||||f<   9 L _ t        j                  t        j                  |dd      |j                   d   df      }t        j"                  t        j                  |t        |	      df      d      }| j%                  |t        |      z        }| j%                  |t        |      z        }| j'                  ||k(        sJ | j'                  ||k(        sJ ||   |	z  ||   z  }|
j)                         |z  j+                         }t-        || j                  t        |	            |       y )Nro   r   r  rB   rn   r[   r  TrL  rT   r   r   rs   r    rp   )r)   r*   r   r3   r^   rt   r   r-   rI  r   rQ  	enumerater   r   rN   moveaxisrd   argmaxr+   rw   r   r  r   )r,   r(   rY   rg   l_npr_npp_nplr%   r  rR  rS  rT  scalarsri   lir;  pjkrkmax_indleft_best_checkright_best_checkreduced_checkmags                            r"   !test_reduction_scalar_calculationrh    s?   b!ERZZ'5TD
))

 G
HC??1#&D??23'D??1#&DtR AtR AtR A%&XXa4X%H"GY
 hhD	3t9c$i89G4 G2t_ 	GEAr"4 G2#%6627R<*@*@*B1*E#F1a G	GG jjWa3gmmA6F5KLGii

7SVRL9BGjjCF!23Ozz'CF"2366).///66* 00111o&*Q/?-@@M;;==(
3
3
5CC#a&)5r$   applyc                    t        j                  |       }| j                  g dg dg dg      }t        j                  |      }t        j                  | j                  |d            }| j                  g d|      }| j                  |d      }| j                  g d|      }| j                  |d      }t        |j                  |      |       t        |j                  |      |       t        |j                  |      |       t        |j                  |      |       | j                  g d	|      }	| j                  |	d      }
t        |j                  |d
      |	       t        |j                  |d
      |
       t        |j                  |d
      |
       t        |j                  |d
      |
       y )Nr   rs   r   r   r   r   r    )r   r   rT   r'   g       r   rT   g       @rs   rT   Tinverse)r)   r*   r+   r   r   expand_dimsr   ri  )r,   r(   r   r_1dr_2dv_1dv_2dv1d_rotatedv2d_rotatedv1d_inversev2d_inverses              r"   'test_apply_single_rotation_single_pointry    sq   b!E
** C
 $Ds ;<D::k:/D>>$Q>'D**\*7K..1.5KDJJt$k2DJJt$k2DJJt$k2DJJt$k2**\*7K..1.5KDJJtTJ2K@DJJtTJ2K@DJJtTJ2K@DJJtTJ2K@r$   c                    t        j                  |       }| j                  g dg dg dg      }t        j                  |      }t        j                  | j                  |d            }t        j                  j                  d      }|f|dz
  z  }| j                  |j                  |dz         |	      }| j                  |d
    |d   |d   gd      }	t        |j                  |      |	       t        |j                  |      |	       | j                  |d
   |d    |d   gd      }
t        |j                  |d      |
       t        |j                  |d      |
       y )Nrk  r   r   r   r    r   r	  rq   r'   .r   .r   ).r   rs   Trn  )r)   r*   r+   r   r   rp  r3   r^   rt   rx   r   r   ri  )r,   rI   r(   r   r1r2rg   r  v	v_rotated	v_inverses              r"   *test_apply_single_rotation_multiple_pointsr    sE    b!E
** C
 
		c	"B			bnnSqn9	:B
))


"C'TAX&K


3::;#7:8
FA1V9*ai6;"EIBHHQK+BHHQK+!F)aiZ6;"EIBHHQH-y9BHHQH-y9r$   c                 D   t        j                  |       }t        j                  d      }t        j                  g dg dg dg      |d<   t        j                  g dg dg dg      |d<   | j                  ||	      }|f|dz
  z  }| j                  ||d
z         }t        j                  |      }| j                  g d      }| j                  |d      }| j                  g dg dg      }| j                  ||dz         }t        |j                  |      |       t        |j                  |      |       | j                  g dg dg      }	| j                  |	|dz         }	t        |j                  |d      |	       t        |j                  |d      |	       y )Nr   rT   rT   rk  r   r   r   ry  r   r   r'   r   r   r   r   r   rT   r    rl  )r   r3  r   r4  rm  )r   rT   r   Trn  )r)   r*   r3   rA  r4   r+   ra   r   r   rp  r   ri  )
r,   rI   r(   r   r  r%   v1v2r  r  s
             r"   *test_apply_multiple_rotations_single_pointr    so    b!E
((9
CXX CF
 XX CF
 **S*
&C'TAX&K
''#{Y.
/CS!A	I	B		#B

L*56I	;#78IAGGBK+AGGBK+

L*56I	;#78IAGGBG-y9AGGBG-y9r$   c                    t        j                  |       }t        j                  d      }t        j                  g dg dg dg      |d<   t        j                  g dg dg dg      |d<   | j                  ||	      }|f|dz
  z  }| j                  ||d
z         }t        j                  |      }| j                  g dg dg|	      }| j                  g dg dg|	      }| j                  ||dz         }t        |j                  |      |       | j                  g dg dg|	      }| j                  ||dz         }t        |j                  |d      |       y )Nr  rk  r   r   r   ry  r   r   r'   r  r  rA   rB   rJ   rl  )rA   irB   r4  rm  )rA   rJ   Trn  )r)   r*   r3   rA  r4   r+   ra   r   r   r   ri  )	r,   rI   r(   r   r  r%   r  r  r  s	            r"   -test_apply_multiple_rotations_multiple_pointsr  A  sE    b!E
((9
CXX CF
 XX CF
 **S*
&C'TAX&K
''#{Y.
/CS!A


Iy)
7A

L*5U
CI	;#78IAGGAJ	*

L*5U
CI	;#78IAGGAtG,i8r$   c                    t         j                  j                  d      }g d}g d}t        ||      D ]  \  }}| j	                  |j                  |dz               }| j	                  |j                  |dz               }t        j                  |      }t        j                  ||      dz   }	|j                  |      }
|
j                  |	k(  sJ |j                  |d      }
|
j                  |	k(  rJ  y )	Nr   )r   rL   r$  r9  )rB   r   r   )r   rL   r$  r9  )rA   r   )r   rA   r   )rB   rA   r   )rJ   rB   rA   r   r   rq   rM   Trn  )r3   r^   rt   r   r+   rx   r   r   broadcast_shapesri  rd   )r,   rg   vector_shapes
rot_shapesq_shapev_shaper  rh   r%   rd   r   s              r"   test_apply_shapesr  _  s    
))


"C7MUJ#J>  JJszzw~z67JJszzw~z67q!##GW5<GGAJww%GGAtG$ww% r$   c                     t         j                  j                  d      } t        j                  |       }| j	                  ddd      }|j                  |j                               }|j                  |      }t        ||d       | j	                  ddd	      }|j                  |j                               }|j                  |      }t        ||d       y )
Nrm   rn   ir\   r   rq   ro   rp   r	  )r3   r^   rt   r   r  ri  ru   r   )rg   r%   r0  r  
v_expecteds        r"   test_apply_array_liker  q  s    
))


$CC AD#D)A	
AJAz.D#F+A	
AJAz.r$   c                     t        j                  g d      } t        j                  g d      }t	        | j                  |      || j                         j                  z         t        j                  g dg dgt              }t	        | j                  |      || j                         j                  z         t        j                  g dg dg dgt              }t	        | j                  |      || j                         j                  z         | j                         |z  }t        j                  | j                  |      |      rJ y)zaTest documented equivalence for single rotation:
    `apply(vectors) == vectors @ as_matrix().T.`r   )r   r   r   r   r  r'   r   N)
r   r   r3   r4   r   ri  rP   Tr  allclose)r%   r  arrarr33wrong_results        r"   test_apply_matrix_equivalencer    s     	Y'A
!AAGGAJAKKMOO 34
((Iy)
7CAGGCL#"78HHiI6eDEAGGENEAKKMOO$;<;;=5(L{{1775><8888r$   c                 ^   t        j                  | j                  d            }t        j                  t
        d      5  |j                  | j                  d             d d d        t        j                  t
        d      5  |j                  | j                  d             d d d        t        j                  | j                  d            }t        j                  t
        d      5  |j                  | j                  d             d d d        t        j                  | j                  d	            }t        j                  t
        d      5  |j                  | j                  d
             d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrA   zExpected input of shaper   r   r  r'  Cannot broadcastr   )r   r  r   rA   r  )r   r   r%  r   r   r   ri  r|   s     r"   test_apply_input_validationr    s1   2771:&A	z)B	C 	
	z)B	C !	 !2776?+A	z);	< !	 !277<01A	z);	< $		"#$ $ ! !! !$ $s0    !E>!F,!F!F#>FFF #F,__getitem__c                    t         j                  j                  d      }|j                  d|f|dz
  z  z   dz         }| j	                  t        j                  |      j                               }t        j                  |      }t        |d   j                         |d   d       t        |d   j                         |d	   d       t        |d d
 j                         | j                  |d   d      d       y )Nr   r$  r   rM   rq   r   rU   rp   r   rs   r    )r3   r^   rt   rx   r+   r   r   rP   r   r   rp  )r,   rI   rg   r   r   r%   s         r"   test_getitemr    s    
 ))


"C::5D7dQh#77$>:?D
**X''-779
:CS!AAaDNN$c&k>AaDNN$c&k>AcrF$$&s6{(KRWXr$   c                     t        j                  t        d      5  t        j                  | j                  g d            d    d d d        y # 1 sw Y   y xY w)Nnot subscriptabler   r0   r   )r   r   r  r   r   r+   r!  s    r"   test_getitem_singler    sB    	y(;	< 82::l34Q78 8 8s   *AAc                     t        j                  g dg dg dgg dg dg dgg      } t        j                  |       }t	        |dg   j                         | dg   d       t	        |dd	g   j                         | dd	g   d       y )
Nr   r   r   ry  r   r   rU   rp   r   )r3   r4   r   r   r   rP   )r   r%   s     r"   test_getitem_array_liker    s     ((\   ! "C 	S!AAqcF$$&QCu=Aq!fI'')31v;UCr$   __setitem__c                    t        j                  | j                  g d            }t        j                  t
        d      5  t        j                  | j                  g d            |d<   d d d        y # 1 sw Y   y xY w)Nr0   r  r   r   )r   r   r+   r   r   r  r|   s     r"   test_setitem_singler    s\    2::l34A	y(;	< <!!"**\":;!< < <s   *A55A>c                 V   t         j                  j                  d      }t        t	        j                  d|      |       }t        t	        j                  d|      |       }||dd t        |dd j                         |j                                t	        j                  | j                  |j                  d                  }t	        j                  | j                  |j                  d	                  }||dd
 t        |dd
 j                         |j                                y )Nr  r[   rn   rB   r   rJ   rT   rB   rA   rq   )r   rB   rA   rT   
r3   r^   rt   r-   r   r
   r   r   r+   rx   r,   rg   r}  r~  s       r"   test_setitem_slicer    s    
))

 G
HC	4b	9B	s3R	8BBqGBqGOO%rzz|4 
		BJJszzyz'AB	CB			BJJszzyz'AB	CBBqGBqGOO%rzz|4r$   c                 T   t         j                  j                  d      }t        t	        j                  d|      |       }t        t	        j                  |      |       }||d<   t        |d   j                         |j                                t	        j                  | j                  |j                  d                  }t	        j                  | j                  |j                  d                  }||d<   t        |d   j                         |j                                y )Nr  r[   rn   r   r  rq   r  r  r  s       r"   test_setitem_integerr    s    
))

 G
HC	4b	9B	C0"	5BBqEBqEMMORZZ\2 
		BJJszzyz'AB	CB			BJJszzvz'>?	@BBqEBqEMMORZZ\2r$   c                     t        t        j                  dd      |       }t        j                  t
        d      5  d|d<   d d d        y # 1 sw Y   y xY w)Nr[   r   rn   zRotation objectr   r   )r-   r   r^   r   r   r  r|   s     r"   test_setitem_wrong_typer    sF    xrq126A	y(9	: !  s   AAc                 X   t        j                  d      }t        j                  g dg dg dg      |d<   t        j                  g dg dg dg      |d<   | j                  |      }t	        j
                  |      }t        t        |      d	       t        t        |d d
       d       y )Nr  rk  r   r   r   ry  r   r   r   rs   )r3   rA  r4   r+   r   r   r   rQ  r   s      r"   test_n_rotationsr    s    
((9
CXX CF
 XX CF
 **S/CS!AQQsVa r$   c                  V   t         j                  j                  d      } t        t	        j                  |       j                         j                  d       t        t	        j                  d |       j                         j                  d       t        t	        j                  d|       j                         j                  d       t        t	        j                  d|       j                         j                  d       t        t	        j                  | d	      j                         j                  d       t        t	        j                  | d
	      j                         j                  d       t        t	        j                  | d	      j                         j                  d       t         j                  j                  d      t         j                  j                  d      }}t	        j                  d|      }t	        j                  |d	      }t        |j                         |j                         j                  dd      d       t        j                  t        d      5  t	        j                  d| d       d d d        t        j                  t        d      5  t	        j                  | d	       d d d        t        j                  t        d      5  t	        j                  d| d        d d d        y # 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   y xY w)Nr   rn   rM   r   r   rB   r  r   )rg   rd   r   r(  r	  r
  *   rJ   rA   ro   rp   r  r   rT   r  )r  rg   rd   r  r  z&takes from 0 to 2 positional arguments)r3   r^   rt   r   r   r   rd   r   rN   r   r   r   r  )rg   rng1rng2r_numr_shapes        r"   test_random_rotationr    s   
))


"CS)113994@3/779??F,446<<fE,446<<fES3;;=CCTJS5==?EEvNS7??AGGS&&r*BII,A,A",E$DOOA4(Eoo$f5GEMMOW__%6%>%>q!%D5Q	z)N	O 5A#V45	z)T	U ,Cs+,	y(P	Q &3%& &	5 5, ,& &s$   /L+L&LLLL(align_vectorsc                 v   t        j                  |       }|| j                  k(  rdnd}| j                  g dg dg|      }| j                  |d      }t	        j
                  ||      \  }}t        |j                         | j                  d      |	       t        || j                  d
      d   dd       y )Nro   h㈵>r  r  r'   T)copyrT   rp   r   r   Fr   check_shaperY   )	r)   r*   r   r+   r   r  r   rP   r`   )r,   r(   rY   r   r   r%   rssds          r"   test_align_vectors_no_rotationr    s    b!ERZZ'5TD


Iy)
7A


14
 A$$Q*GAtAKKM266!948D"**S/"-5tLr$   c                    t        j                  |       }|| j                  k(  rdnd}t        j                  j                  d      }t        t        j                  |      |       }| j                  |j                  d      |      }|j                  |      }t        j                  ||      \  }}t        |j                         |j                                t        || j                  d      d	   d
|       y )Nr   gMb`?l	   #t}":xL rn   rB   rT   rq   r'   r   r   Fr  )r)   r*   r   r3   r^   rt   r-   r   r+   rx   ri  r  r   r   )	r,   r(   rY   rg   cru  rt  estr  s	            r"   test_align_vectors_no_noiser  )  s    b!EBJJ&4DD
))

 F
GCx3/4A


3::6:*%
8A	
A&&q!,ICAIIK/D"**S/"-5tLr$   c                 ^   t        j                  |       }|| j                  k(  rdnd}| j                  g dg dg      }| j                  g dg dg      }t	        j
                  ||      \  }}t        ||j                  |      d       t        || j                  d	      d
   d|       y )Nr   gMbP?)gq?gH*fܿgHlB?)gMs^E?g+Obp޿gn^w)g=2)p?g[[VKg?gw7?)gѿgGvgpr   rp   r   r   Fr  )r)   r*   r   r+   r   r  r   ri  )r,   r(   rY   r   r   r  r  s          r"   $test_align_vectors_improper_rotationr  7  s    b!EBJJ&4DD


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


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


Iy)45A


I{K89A,,QdKOCtD-d3D-d3r$   c                 J   d}| j                  t        j                  |d      j                  g d            }| j                  t        j                  |d      j                  g d            }d}t        j                  ||| j                  |      d      \  }}}t        j                  |||| j                  |      z  d      \  }}	}
t        |j                         |j                                t        t        j                  |      |z  |	d	       t        ||
       y )
Nr[   r   rn   r   r   r   Tr   rp   )
r+   r   r^   ri  r  r%  r   rP   r   r   )r,   r  rt  ru  scaleest1rssd1cov1est2rssd2cov2s              r"   !test_align_vectors_scaled_weightsr  T  s    
A


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


8??1!,229=>AE ..q!RWWQZFD% ..q!URWWQZ5GND%DNN$dnn&67DIIe$u,e$?D$r$   c                    t        j                  |       }t        j                  j	                  d      }d}t        t        j                  |      |       }| j                  |j                  |df      |      }|j                  |      }t        j                  d      }d|z  }t        j                  | j                  |j                  |df|	      |            }	|	j                  |      }
t        j                  |
|d
      \  }}}||j                         z  j                         }t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       || j                  |      z  }t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       t        |d   | j                  d      d   |       | j!                  |
|j                  |      z
  dz        dz  }t        ||d       y )Nr  r\   rn   rT   rq   r'   r   r  )rr   r  Tr  r   r   r   rp   r   r   r4  r  r   F)r  )r)   r*   r3   r^   rt   r-   r   r+   rx   ri  deg2radr   r  r   r  r   sum)r,   r(   rg   	n_vectorsr   vectorsr  sigma	tolerancenoisenoisy_resultr  r  coverror_vector
rssd_checks                   r"   test_align_vectors_noiser  c  s    b!E
))

 G
HCI
S12
6Cjj)Q8jFGYYwF JJqMEeI  


3::Iq>:?u
ME ;;v&L++L'?CENCs #'')O..0LLORZZ_R%8yILORZZ_R%8yILORZZ_R%8yI 2::eCCIrzz#r2CCIrzz#r2CCIrzz#r2C		'(::q@ASHJD*%8r$   c                    t        j                  t        d      5  | j                  g d      | j                  g d      }}t	        j
                  ||       d d d        t        j                  t        d      5  | j                  g d      | j                  g d      }}t	        j
                  ||       d d d        t        j                  t        d      5  | j                  g dg dg      | j                  g dg      }}t	        j
                  ||       d d d        t        j                  t        d      5  | j                  g dg      | j                  g dg      }}| j                  d	gg      }t	        j
                  |||       d d d        t        j                  t        d
      5  | j                  g dg dg      | j                  g dg dg      }}| j                  g d      }t	        j
                  |||       d d d        | j                  g dg      | j                  g dg      }}| j                  dg      }t        |      rgt	        j
                  |||      \  }}| j                  | j                  |j                                     sJ d       | j                  |      sBJ d       t        j                  t        d      5  t	        j
                  |||       d d d        | j                  g dg dg      | j                  g dg dg      }}| j                  | j                  | j                  g      }t        |      rgt	        j
                  |||      \  }}| j                  | j                  |j                                     sJ d       | j                  |      sBJ d       t        j                  t        d      5  t	        j
                  |||       d d d        | j                  g dg      | j                  g dg      }}t        |      rft	        j
                  ||      \  }}| j                  | j                  |j                                     sJ d       | j                  |      sAJ d       t        j                  t        d      5  t	        j
                  ||       d d d        | j                  g dg dg      | j                  g dg dg      }}| j                  | j                  d	g      }t        |      rDt	        j
                  |||d      \  }}}| j                  | j                  |            sDJ d       t        j                  t        d      5  t	        j
                  |||d       d d d        | j                  g dg      | j                  g dg      }}t        |      rCt	        j
                  ||d      \  }}}| j                  | j                  |            sCJ d       t        j                  t        d      5  t	        j
                  ||d       d d d        | j                  g dgg      | j                  g dgg      }}t        j                  t        d      5  t	        j
                  ||       d d d        y # 1 sw Y   kxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz Expected input `a` to have shaper   r   r  z Expected input `b` to have shapez/Expected inputs `a` and `b` to have same shapesr  z&Expected `weights` to be 1 dimensionalr   z+Expected `weights` to have number of valuesrs   zQuaternion should be nanzRSSD should be nanz)`weights` may not contain negative valuesz#Only one infinite weight is allowedr  z(Cannot align zero length primary vectorsTr  z Sensitivity matrix should be nanz Cannot return sensitivity matrixz)Expected inputs `a` and `b` to have shape)r   r   r   r+   r   r  r   rw   r   r   inf)r,   rt  ru  rA  r%   r  r  s          r"    test_align_vectors_invalid_inputr    s   	z)K	L %zz,'I)>1q!$% 
z)K	L %zz)$bjj&>1q!$% 
z *? 
@ %zz9i012::yk3J1q!$%
 
zE
G .zz9+&

I;(?1**qcU#q!W-	. 
zJ
L .zz9i012::y)>T3U1**Y'q!W-	. ::yk"BJJ	{$;qAjj"GW((Aw74vvbhhqyy{+,H.HH,xx~333~]]:!LN 	2""1a1	2 ::y),-rzz9i:P/QqAjj"&&"&&)*GW((Aw74vvbhhqyy{+,H.HH,xx~333~]]:!FH 	2""1a1	2 ::yk"BJJ	{$;qAQ((A.4vvbhhqyy{+,H.HH,xx~333~]]:!KM 	)""1a(	) ::y),-rzz9i:P/QqAjj"&&!%GQ ..q!WQUV4vvbhhtn%I'II%]]:!CE 	K""1aTJ	K ::yk"BJJ	{$;qAQ ..q!M4vvbhhtn%I'II%]]:@B 	N ..q!M	N
 ::	{m$bjj9+&?qA	zH
J %q!$% %]% %% %% %
. .. .	2 	2	2 	2	) 	)	K 	K	N 	N% %s   =[<=[A[A[)7A[6\!\5\	\*<\7"][[[&)[36\ \\\'*\47] ]c                    t        j                  |       }|| j                  k(  rdnd}| j                  g dg dg      }| j                  g dg dg      }| j                  g dg dg dg      }t	        j
                  ||| j                  | j                  d	g      
      \  }}t        |j                         ||       t        |j                  |      ||       t        || j                  d      d   |       | j                  g dg dg      }d}t	        j
                  ||| j                  | j                  d	g      
      \  }}t        |j                         ||       t        |j                  |      d   |d   |       t        j                  ||||       sJ | j                  g dg dg      }	t        |j                  |      |	|       | j                  g dg dg      }| j                  g dg dg      }d}t	        j
                  ||| j                  | j                  d	g      
      \  }}t        |j                  |      d   |d   |       t        j                  ||||       sJ y )Nro   r   r   r   r   r   r   r  r   r   r   r@  rp   r   r   )r   r   r   r   r   )rY   r,   r   r   r   r  )r   rT   rs   )r   rT   r   r:  g4i?)r)   r*   r   r+   r   r  r  r   rP   ri  isclose)
r,   r(   rY   ru  rt  
m_expectedRr  r  
a_expecteds
             r"   "test_align_vectors_align_constrainr    s    b!ERZZ'5TD


Iy)*A


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

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

I{+,A


L*-.A&M$$Q2::rvvqk3JKGAtAGGAJv&&	=;;t]"===r$   c           
      >   t        j                  |       }|| j                  k(  rt        j                  d       d}g }t        d      D ]9  }|j                  t        j                  |d|z         j                                ; t        |      D ]  }| j                  t        j                  d|d   |   d   z  d|d   |   d   z  g      |	      }| j                  t        j                  d
|d   |   d   z  d|d
   |   d   z  g      |	      }t        j                  ||ddg      \  }}t        j                  ||| j                  dg      \  }	}t        |j                         |	j                         d        t        |      D ]  }| j                  t        j                  d|d   |   d   z  d|d   |   d   z  d
|d   |   d   z  g      |	      }| j                  t        j                  d|d
   |   d   z  d|d   |   d   z  d|d   |   d   z  g      |	      }t        j                  ||g d      \  }}t        j                  ||| j                  ddg      \  }	}t        |j                         |	j                         d        y )Nz9Align vectors near inf is numerically unstable in float32r\   rJ   r[   rn   r   r   r   r'   rT   rA       _Br@  -C6?rp   rB   )r  r   r   )r)   r*   r<   r   skiprc   appendr   r^   rP   r+   r3   r4   r  r  r   )
r,   r(   r  matsri   rt  ru  r  _R2s
             r"   test_align_vectors_near_infr     s|   
 b!E

OPAD1X @HOOA262<<>?@ 1X BJJrxxT!WQZ]!2AQ
14E FGuJUJJrxxT!WQZ]!2AQ
14E FGuJU%%aT1I>1&&q!bffa[AAr||~DAB 1X 	BJJrxx471:a=!DGAJqM/1T!WQZPQ]? ST"  $JJrxx471:a=!DGAJqM/1T!WQZPQ]? ST"  $ %%aLA1&&q!bffa^DAr||~DA	Br$   c                 ~   d}| j                  g dg dg      }| j                  g dg dg      }| j                  g dg dg dg      }t        j                  ||| j                  dg      \  }}t	        |j                         ||	       t        j                  |d
   |d
         \  }}t	        |j                         ||	       t	        |j                  |d
         |d
   |	       | j                  g dg dg      }| j                  g dg dg dg      }t        j                  ||| j                  dg      \  }}t	        |j                         ||	       t        j                  |d
   |d
         \  }}t	        |j                         ||	       t	        |j                  |d
         |d
   |	       y )Nro   r   r   r   r   r  r   r   r   r@  rp   r   r   )r+   r   r  r  r   rP   ri  )r,   rY   rt  ru  r  r  r  s          r"   test_align_vectors_parallelr  *  sx   D


K+,A


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


Iy)*A[&&( )J !!!Q<DAqAKKM:D9!!!F)QvY7DAqAKKM:D9AGGAfI&&	=r$   c           	         t        j                  |       }|| j                  k(  rdnd}t        j                  g dg dgg dg dgg dg dgg      }t        j                  |D cg c]  }|d    |d   g c}      }t        ||      D ]  \  }}| j                  ||	      | j                  ||	      }}t        j                  ||| j                  dg
      \  }}t        |j                         | j                  | j                        d   |       t        |j                  |d         |d   |        t        j                  dd      }	t        j                  |	j!                         dz        }
g dg dg}g dg dg}g }|
D ]=  }|j#                  t        j                  |j                  |d         |d   g             ? t%        | j                  d            dk(  rd}|D ]  }| j                  |      | j                  |      }}t        j                  ||| j                  dg
      \  }}t        j                  ||ddg
      \  }}t        |j'                         |j'                         |        y c c}w )Nro   r   r  r   r   r   r   r   r'   r@  r   rp   r   r\   rn   r  r   cudar  )r)   r*   r   r3   r4   zipr+   r   r  r  r   r  r  ri  r^   r   r  r  r   rP   )r,   r(   rY   
as_to_testrt  
bs_to_testru  r  r  RsdRsdRr  s                r"   test_align_vectors_antiparallelr  C  s9   
 b!ERZZ'5TDK3%y1%y13 4J *=QQqTE1Q4==>JJ
+ B1zz!5z)2::au:+E1%%aRVVQK@1rzz"%%'8'<4H&	*AfIDA	B 
!	$B


r||~d2
3C	YA	YAJ <"((BHHQqTNAaD#9:;< bjjm$. Bzz!}bjjm1%%aRVVQK@1&&q!dAY?Ar||~DA	B5 >s   &Jc                    t        j                  |       }|| j                  k(  rdnd}t        j                  dd      j                         }t        j                  dd      j                         }t        ||      D ]  \  }}| j                  |d   |      }| j                  |d   |      }t        j                  ||      \  }	}
t        |	j                  |      ||       t        |
| j                  d	      d
   |        y )Nro   r  r\   r   rn   r   r'   rp   r   r   )r)   r*   r   r   r^   rP   r  r+   r  r   ri  )r,   r(   rY   mats_amats_bmat_amat_brt  ru  r  r  s              r"   test_align_vectors_primary_onlyr  q  s    b!ERZZ'5TD__Sa(224F__Sa(224FFF+ >uJJuQxuJ-JJuQxuJ- ((A.4
AD1bjjob1=>r$   c                     t         j                  j                  d      } t        j                  |       }| j	                  d      }|j                  |      }t        j                  ||      \  }}t        j                  |j                         |j                               \  }}t        |j                         |j                                t        ||       y )Nrm   rn   r  rq   )
r3   r^   rt   r   rx   ri  r  ru   r   r   )rg   r  ru  rt  est_expectedr  r  r  s           r"   test_align_vectors_array_liker    s    
))


$CC A


A	
A"*"8"8A">L-&&qxxz188:>ICL((*CKKM:D-(r$   c                    t        j                  |       }t        j                  j	                  d      }t        t        j                  |      |       }| j                  |j                  d      |      }| j                  |j                  |      | j                        }t        j                  ||      \  }}t        |j                         |j                                y )Nrm   rn   r  rq   r'   )r)   r*   r3   r^   rt   r-   r   r+   rx   ri  r<   r  r   r   )r,   r(   rg   r  ru  rt  r  r  s           r"   test_align_vectors_mixed_dtypesr    s    b!E
))


$Cx3/4A


3::6:*%
8A


1771:RZZ
0A##Aq)FCCKKM199;/r$   __repr__c                     | j                  g d      }t        t        j                  |            }t	        |       r
d}||k(  sJ y |j                  d      sJ y )Nr0   zRotation.from_matrix(array([[1., 0., 0.],
                            [0., 1., 0.],
                            [0., 0., 1.]]))Rotation.from_matrix()r+   reprr   r   r   
startswith)r,   rh   actualr   s       r"   test_repr_single_rotationr    sX    


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

                            [[ 0., -1.,  0.],
                             [ 1.,  0.,  0.],
                             [ 0.,  0.,  1.]]]))sreturnc                 p    dj                  t        t        j                  | j	                                     S )N
)r  mapstrlstrip
splitlines)r   s    r"   strippedz-test_repr_rotation_sequence.<locals>.stripped  s"    99SQ\\^<==r$   r  )r+   r   r   r   r   r   r%  r  )r,   rh   r  r   r(  s        r"   test_repr_rotation_sequencer)    s    


NL12TYYq\AA""1%(F|4	> 	> 	> 8H#5555  !8999r$   __init____call__c                 l   t         j                  j                  d      }t        j                  | j                  |j                  d                  }|j                         }g d}t        ||      }t        |j                  t        | j                  d                  sJ g d} ||      }|j                         }|d d df   dk  d d d f   }	| j                  |	| |      }|d d df   dk  d d d f   }	| j                  |	| |      }t        |d   |d          t        |d   |d	          t        |d
   |d          t        |d   |d          t        |d   |d          | j                  |d   |d   z        }
| j                  |d   |d	   z        }t        |
|       | j                  |d   |d   z        }| j                  |d   |d
   z        }t        ||       | j                  |d	   |d   z        }t        |d|
dz  z  dz
         t        t!        |      t!        |             y )Nr   r  rq   )r   r   r   rT   rA   )r   r   r  r   r  r   g      @rT   g      
@g@rA   rs   r   r   r   )rB   .r   )r  .)r[   .)rA   .r   r   )r3   r^   r_   r   r   r+   r  r   r   r>  timesr@  wherer   r  r   rQ  )r,   r   key_rots	key_quats	key_timesinterpolatorr-  interp_rotsinterp_quatsmask
cos_theta1
cos_theta2
cos_theta4
cos_theta5
cos_theta3s                  r"   
test_slerpr;    s7   
))


"C!!"**S[[f[-E"FGH  "IIH-Ll(($rzz!}*=>>>=Eu%K&&(L B!#QW-D88D<->Laeq !T'*D	z95I L()F*;<L()F*;<L()F*;<L()F*;<L)9V+<= V,|F/CCDJV,|F/CCDJJ
+V,|F/CCDJV,|F/CCDJJ
+ V,|F/CCDJJZ] 3a 78 [!3u:.r$   c                     t        j                  t        d      5  | j                  g dg dg      }| j                  ddg      }t	        ||       d d d        y # 1 sw Y   y xY w)Nzmust be a `Rotation` instancer   r   r0   r   r   )r   r   r  r+   r   )r,   r%   r0  s      r"   test_slerp_rot_is_rotationr=    sY    	y(G	H JJ	!# $JJ1va	  s   7AA%z*must be a sequence of at least 2 rotationsc                     t        j                  | j                  g dg            }t        j                  t
        t              5  t        dg|       d d d        y # 1 sw Y   y xY w)N)r   r   rT   rA   r   r   )r   r   r+   r   r   r   SLERP_EXCEPTION_MESSAGEr   r|   s     r"   test_slerp_single_rotr@    sM    2::~&678A	z)@	A qc1  s   AA'c                    t        j                         }t        j                  | j                  |j	                                     }t        j                  t        t              5  t        g |       d d d        y # 1 sw Y   y xY w)Nr   
r   r^   r   r+   r   r   r   r   r?  r   r|   s     r"   test_slerp_rot_len0rC  	  sZ    A2::aiik23A	z)@	A b!  s   &A<<Bc                    t        j                  d      }t        j                  | j                  |j	                                     }t        j                  t        t              5  t        dg|       d d d        y # 1 sw Y   y xY w)Nr   r   rB  r|   s     r"   test_slerp_rot_len1rE  		  s^    A2::aiik23A	z)@	A qc1  s   'A>>Bc                     t        j                  | j                  d            }t        j                  t
        d      5  t        ddg|       d d d        y # 1 sw Y   y xY w)Nr   r   rA   z"Rotations with more than 1 leadingr   r   r   )r   r   r%  r   r   r   r   r|   s     r"   test_slerp_tensor_rotrH  	  sM    2779-.A	z)M	N q!fa  s    AA!c                 L   t        j                  t        d      5  t        j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  dgdgg      }t        ||       d d d        y # 1 sw Y   y xY w)Nz.times to be specified in a 1 dimensional arrayr   r   r'  rq   r   r   )r   r   r   r3   r^   r_   r   r   r+   r  r   r,   r   r%   r0  s       r"   test_slerp_time_dim_mismatchrK  	  s    	zM
O ii##A&rzz#++6+*BCDJJ a  s   A5BB#c                 D   t        j                  t        d      5  t        j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  d      }t        ||       d d d        y # 1 sw Y   y xY w)Nz7number of rotations to be equal to number of timestampsr   r   r  rq   r  )r   r   r   r3   r^   r_   r   r   r+   r  aranger   rJ  s       r"   !test_slerp_num_rotations_mismatchrN  #	  sz    	z *@ 
A ii##A&rzz#++6+*BCDIIaLa  s   A1BBc                    t         j                  j                  d      }| j                  |j	                  d            }t        j                  |      }g d}t        |      r9t        ||      }| j                  | j                  |j                              sJ y t        j                  t        d      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r  rq   )r   r   r   r   rA   strictly increasing orderr   r3   r^   r_   r+   r  r   r   r   r   rw   r   r-  r   r   r   r,   r   rh   r%   r0  r   s         r"   test_slerp_equal_timesrS  -	      
))


"C


3;;F;+,A1AAQ!QKvvbhhqww'(((]]:-HI 	!QK	 	 	   9CCc                    t         j                  j                  d      }| j                  |j	                  d            }t        j                  |      }g d}t        |      r9t        ||      }| j                  | j                  |j                              sJ y t        j                  t        d      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r  rq   )r   r   rT   r   rA   rP  r   rQ  rR  s         r"   test_slerp_decreasing_timesrW  ;	  rT  rU  c                 ~   t         j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  d      }t        ||      }t        j                  t        d      5  | j                  dgdgg      } ||       d d d        y # 1 sw Y   y xY w)	Nr   r  rq   rB   z&`times` must be at most 1-dimensional.r   g      @g@)r3   r^   r_   r   r   r+   r  rM  r   r   r   r   )r,   r   r%   r0  r   interp_timess         r"   !test_slerp_call_time_dim_mismatchrZ  I	  s    
))


"C2::ckkvk&>?@A
		!AaA	zE
G zzC5$'5#* +	,	  s   B33B<c                    t         j                  j                  d      }t        j                  | j                  |j                  d                  }| j                  d      dz   }t        ||      }| j                  g d      }| j                  g d      }t        |      r9 ||      j                         }| j                  || j                  |      k\  || j                  |      k        }| j                  | j                  || df               sJ | j                  | j                  ||df                sJ  ||      j                         }| j                  || j                  |      k\  || j                  |      k        }| j                  | j                  || df               sJ | j                  | j                  ||df                sJ y t!        j"                  t$        d	
      5   ||       d d d        t!        j"                  t$        d	
      5   ||       d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY w)Nr   r  rq   rB   r   r  )r   r   rJ   .ztimes must be within the ranger   )r3   r^   r_   r   r   r+   r  rM  r   r   r   logical_andminmaxrw   r   r   r   r   )	r,   r   r%   r0  r   	times_low
times_highrh   in_ranges	            r"   !test_slerp_call_time_out_of_rangerb  W	  s   
))


"C2::ckkvk&>?@A
		!qAaA

9%II&JYiL  ">>)rvvay"8)rvvay:PQvvbhhq(C01222vvrxx(C- 011222jM!!#>>*q	"9:PQ;RSvvbhhq(C01222vvrxx(C- 011222]]:-MN 	iL	]]:-MN 	jM	 		 		 	s   :	H8&	I8IIc                    t        j                  |       }|| j                  k(  rdnd}t        j                  d| j                  dgdgg      d      }t        ddg|      } |d	      }t        j                  d| j                  d
      d      }||j                         z  }t        |j                         | j                  d      d   |       y )NrV   r   r`  r   P   Tr  r   r  r  r   r   rp   )
r)   r*   r   r   r   r+   r   r   r   r  )r,   r(   rY   r%   r   r_interpolatedr_interpolated_expecteddeltas           r"   test_slerp_call_scalar_timerh  p	  s    
 b!ERZZ'5TDCaS2$K!8$GAq!faAtWN&11#rzz"~tT488::EEOO%rzz#r':Fr$   c                    t        j                  | j                  g d            }t        j                  | j                  g d            }||z  }t        |j	                         | j                  g d             t        j                  t        d      5  |dz   d d d        |j                  d      t        u sJ y # 1 sw Y   #xY w)Nr0   r   zunsupported operand typer   r   r   )
r   r   r+   r   r   r   r   r  r   NotImplemented)r,   r}  r~  r   s       r"   test_multiplicationrk  	  s    			BJJ|4	5B			BJJ|4	5B	bBBJJL"**^"<= 
y(B	C 
Q ::a=N***	 s   C  C	c                    t         j                  j                  d      }t        j                  | j                  |j                  d                  }t        j                  | j                  |j                  d                  }||z  }|j                         j                  dk(  sJ t        j                  | j                  |j                  d                  }t        j                  | j                  |j                  d                  }||z  }|j                         j                  dk(  sJ t        j                  | j                  |j                  d                  }t        j                  | j                  |j                  d                  }||z  }|j                         j                  dk(  sJ t        j                  | j                  |j                  d	                  }t        j                  | j                  |j                  d
                  }||z  }|j                         j                  d
k(  sJ y )Nr   r
  rq   r#  )r   r   rA   )rT   r   rA   rA   )r   rA   rA   )rT   r   rA   rA   r'  rG  )	r3   r^   rt   r   r   r+   rx   r   rd   )r,   rg   r}  r~  r   s        r"   test_multiplication_ndrm  	  s    ))


"C			BJJszzyz'AB	CB			BJJszzyz'AB	CB	bB::<*** 
		BJJszzyz'AB	CB			BJJszzyz'AB	CB	bB::<*** 
		BJJszz|z'DE	FB			BJJszzyz'AB	CB	bB::<--- 
		BJJszzvz'>?	@B			BJJszzyz'AB	CB	bB::<***r$   c                 |   t         j                  j                  d      }t        j                  | j                  |j                  d                  }t        j                  | j                  |j                  d                  }t        j                  t        d      5  ||z   d d d        y # 1 sw Y   y xY w)Nr   r'  rq   )r   rA   rA   r  r   )
r3   r^   rt   r   r   r+   rx   r   r   r   r  s       r"   test_multiplication_errorsro  	  s    
))


"C			BJJszzvz'>?	@B			BJJszzyz'AB	CB	z);	< 
R  s   #B22B;c                 $   t        t        j                  dd      |       }t        t        j                  dd      |       }| j                  t	        |            }|D ]/  }||z  |z  }t        t        |j                         d      |       1 y )N2   r   rn   r  r   r    )r-   r   r^   r%  rQ  r   r   r   )r,   qsrsr   r%   s        r"   test_multiplication_stabilityrt  	  sw    	2B	7B	!4b	9Bwws2wH H!Vb[rzz|!<hGHr$   __pow__c                    t        j                  |       }|| j                  k(  rdnd}t        j                  j                  d      }|f|dz
  z  }|j                  |dz         }t        j                  | j                  |            }|j                         }dD ]  }	||	z  }
| j                  g d      }t        |
j                  t        |            sJ t        j                  | j                  ||d	z               }t        t!        |	            D ]  }|	dkD  r||z  }||z  } |
|j                         z  j#                         }| j%                  ||k        sJ t        j                  | j                  ||d	z               }||	z  j'                         j(                  |dz   k(  rJ  d
D ]W  }	||	z  }
t        j*                  |	|j-                         z        }t/        |
j'                         |j'                         |       Y g d}	|	D ]  }||z  }|| j                  |g      z  }t/        |j'                         |j'                                || j                  |      z  }t/        |j'                         |j'                                 | j1                  |dz         }t        j2                  |      d   j5                  d      }t        j*                  |      }d}	||	z  }
t        j*                  |	|j-                         z        }t/        |
j'                         |j'                         |       || j                  |	g      z  }
t        j*                  |	|j-                         z        }t/        |
j'                         |j'                         |       || j                  |	      z  }
t        j*                  |	|j-                         z        }t/        |
j'                         |j'                         |       y )Nr  r   r   r   rM   rq   )r  r   rs   r   r   r   rB   r   rL   )      r          r   r   r  rp   )r  r   rw  rs   r   rx  r   r   r   r   r  r   r   r|  ro   rT   )r)   r*   r   r3   r^   rt   rx   r   r   r+   r   r>  r?  r@  ra   rc   r   r  rw   r   rd   r   r  r   r   r   r   )r,   rI   r(   rY   rg   r  r   r  p_invr  rh   
q_identityr%   r  angexponentr_arrayr   s                     r"   test_powr~  	  s\    b!ERZZ'5TD
))


"C'TAX&K::;-:.D2::d+,AEEGE% <FZZ.
!''4
#3444rwwz;3EFGs1v 	A1uEI		
 1557{%%'vvcDj!!! rwwz;3EFG1~~%%t);;;;#<( / =F  Q[[]!23		QYY[t<= 	AA 8Mrzz8*--		W__%67rzz(++		W__%678 XXkD()FVVF^F#''.FV$A	A	QAQ./AAIIK48 	
RZZ_AQ./AAIIK48	RZZ]AQ./AAIIK48r$   c                    t        t        j                  d      |       }t        j                  t
        d      5  t        |dd       d d d        t        j                  t        d      5  || j                  ddg      z   d d d        t        j                  t        d      5  || j                  dgdgg      z   d d d        y # 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   y xY w)Nr   rn   zmodulus not supportedr   r   zArray exponent must be a scalarr   )	r-   r   r^   r   r   NotImplementedErrorpowr   r+   )r,   r  s     r"   test_pow_errorsr  
  s    x1-r2A	*2I	J Aq!	z)J	K  	RZZA 	z)J	K $	RZZ!qc
##$ $	    $ $s#   C	-C'C!	CC!C*c                  F   t        j                  d      } t        j                  dd      }t        j                  |       }t	        |j
                  d       t        j                  |      }t	        |j
                  d       t        |d   j                         |d   j                                t        |d   j                         |d   j                                t        j                  | g      }t	        |j
                  d       t	        |d   |        t        j                  |g      }t	        |j
                  d       t        |d	   j                         |d   j                                t        |d
   j                         |d   j                                t        j                  | |gt              }t	        |j
                  d       t	        |d   |        t	        |d   |       t        j                  |||g      }t	        |j
                  d       y )Nr   rn   r   r   r   r$  rL   r9  r   )r   r   r'   )rT   r   )	r   r^   r3   r4   r   rd   r   rP   object)singlemultipler4   s      r"    test_rotation_within_numpy_arrayr  
  s   __#Fqa(HHHVEb!HHXEd#E!H&&((1+*?*?*ABE!H&&((1+*?*?*ABHHfXEd#q6"HHhZ Ef%E$K))+Xa[-B-B-DEE$K))+Xa[-B-B-DEHHfh'v6Ed#q6"q8$HHh(34Ef%r$   array_api_strictz"array API doesn't support pickling)reasonc                    t        j                  | j                  ddt        j                  t
        j                  dz        t        j                  t
        j                  dz        g            }t        j                  |      }t        j                  |      }t        |j                         |j                         d       y Nr   rA   rU   rp   )r   r   r+   r   sinr3   r  r-  pickledumpsloadsr   rP   )r,   r%   pkl	unpickleds       r"   test_picklingr  -
  s~     	2::q!TXXbeeAg->q@Q&RSTA
,,q/CS!IAKKM9#6#6#8uEr$   z"array API doesn't support deepcopyc                 b   t        j                  | j                  ddt        j                  t
        j                  dz        t        j                  t
        j                  dz        g            }t        j                  |      }t        |j                         |j                         d       y r  )r   r   r+   r   r  r3   r  r-  r  deepcopyr   rP   )r,   r%   r}  s      r"   test_deepcopyr  7
  sn     	2::q!TXXbeeAg->q@Q&RSTA	q	BAKKM2<<>>r$   c                  :   t        j                  g d      } | j                  d      }| j                  d      }|j                  d   du sJ |j                  d   du sJ t	        d |j
                  D              sJ t	        d |j
                  D              sJ y )Nr0   r   ra  C_CONTIGUOUSTc              3   &   K   | ]	  }|d k\    ywr   Nr   .0ri   s     r"   	<genexpr>z+test_as_euler_contiguous.<locals>.<genexpr>G
       *!qAv*   c              3   &   K   | ]	  }|d k\    ywr  r   r  s     r"   r  z+test_as_euler_contiguous.<locals>.<genexpr>H
  r  r  )r   r   r  flagsrw   strides)r%   e1e2s      r"   test_as_euler_contiguousr  @
  s    <(A	
E	B	
E	B88N#t+++88N#t+++*rzz*****rzz****r$   concatenatec                 ~   t        t        j                  dd      |       }g d}dgt        t	        j
                  |            z   }t        ||      D cg c]  \  }}||||z     }}}t        j                  |      }t        |j                         |j                                t        j                  |      }t        |j                         |j                                ||usJ t        j                  j                  d      }| j                  |j                  d            }	t        j                  |	      }t        j                  |	d ddf         }
t        j                  |	dd df         }t        j                  |
|g      }t        |j                         |j                                y c c}}w )	Nr[   r   rn   )r   r   rT   r   rT   rB   r   rA   rq   rT   .)r-   r   r^   listr3   cumsumr  r  r
   r   rt   r+   rx   r   )r,   r  sizesstartsri   r  splitr  rg   r   r}  r~  s               r"   test_concatenater  K
  so   hooba8"=HES4		%())F+.vu+=>41aXaA>E>!!%(FH$$&(89 !!(+FH$$&(89 6!!! ))


"C::cjjij01D!!$'H			D!SM	*B			DSM	*B!!2r(+FH$$&(89% ?s   F9c                    t        j                  t        d      5  t        | j	                  t        j
                         j                                     }t        j                  |dd g       d d d        y # 1 sw Y   y xY w)NzRotation objects onlyr   r   )r   r   r  r   r+   r  r   r  )r,   r   s     r"   test_concatenate_wrong_typer  e
  s_    	y(?	@ -rzz("3"3"5"="="?@Ac1d^,- - -s   AA88Bc                 4   t        j                  | j                  d            }t        j                  | j                  d            }t        j                  t
        t        t        f      5  t        j                  ||g       d d d        y # 1 sw Y   y xY w)Nr  r   )	r   r   r%  r   r   r   RuntimeErrorr  r  )r,   r}  r~  s      r"   test_concatenate_wrong_shaper  l
  sm    			BGGI.	/B			BGGFO	,B	
L)<	= 'b"X&' ' 's   -BBc                    t        | j                  g dg            }t        | j                  g dg dg            }t        | j                  g d            }t        |      dk(  sJ t        |      dk(  sJ t        j                  t
        d      5  t        |       d d d        t        j                  | j                  d            }t        |      dk(  sJ |sJ |sJ |sJ y # 1 sw Y   JxY w)Nr0   r   r   zSingle rotation has no len().r   r&  rT   )r   r+   rQ  r   r   r  r   r%  )r,   rotation_multi_onerotation_multirotation_singlerotation_batcheds        r"   test_len_and_boolr  v
  s    !"**l^"<=bjj,)EFGNrzz,78O!"a'''~!###	y(G	H O  ))"'')*<= A%%% >? s   C**C3from_davenportc                     | j                  g d      }t        j                  |ddd      j                         }| j                  g d      t	        j
                  d      z  }t        ||       y )Nr   ri  r\  Tr  r]  r   )r+   r   r  r   r   r   r   )r,   r!   r   rG   s       r"   #test_from_davenport_single_rotationr  
  sX    ::i D""4b+/118 	JJ~.1=MD-(r$   c                    | j                  g d      }| j                  g d      }t        j                  || j                  z  dz        }t        j                  |d| j                  dz        }t        |j                  d      |j                  d             | j                  |d      }t        j                  || j                  z  dz        }t        j                  |d| j                  dz  g      }t        |j                  d      |j                  d             | j                  ||gd	      }t        j                  || j                  | j                  dz  g| j                  d
z  gg      z        }|d   |d   z  }| j                  ||gd	      }t        j                  |d| j                  d
z  | j                  dz  g      }t        |j                  d      |j                  d             | j                  ||gd	      }t        j                  || j                  | j                  d
z  g| j                  dz  gg      z        }| j                  |d      }t        j                  |d| j                  d
z  g| j                  dz  gg      }t        |j                  d      |j                  d             y )Nr   r  rA   eTr   r  r   r    rJ   r   )	r+   r   r   r  r  r   r   rN   r   )r,   ezeyr   rot_davr-  axes_davs          r"   #test_from_davenport_one_or_two_axesr  
  sO   	K	 B	K	 B 

rBEEz!|
,C%%b#ruuQw7GCKK$K/41PQ ::b&!D


rBEEz!|
,C%%dC"%%';GCKK$K/41PQ 88RH18%D


tbjj2557)beeAgY1G&HH
IC
a&3q6/CxxRqx)H%%hbeeAgruuQw5GHGCKK$K/41PQ 88RH18%D


tbjj2557)beeAgY1G&HH
ICzz"f%H%%hruuQwi"%%'5KLGCKK$K/41PQr$   c                 l   t         j                  j                  d      }|f|dz
  z  }t        j                  | j                  |j                  d                  }|j                         }| j                  |j                  |dz               }t        j                  |d   d|      }|j                         j                  |dz   k(  sJ | j                  |j                  |dz               }t        j                  |d   d|      }|j                         j                  |dz   k(  sJ | j                  |j                  |d	z               }t        j                  |d d
df   d|      }|j                         j                  |dz   k(  sJ t        j                  | j                  |j                  |dz                     }|j                         }| j                  |j                  |dz               }t        j                  |d|      }|j                         j                  |dz   k(  sJ y )Nr   r   rM   rq   rL   r   r  )r   N.r$  r   .r   r3   r^   rt   r   r   r+   rx   rP   r  r   rd   )r,   rI   rg   r  r%   r-  rd  r   s           r"   test_from_davenport_shapesr  
  s    ))


"C'TAX&K2::cjjdj&;<=A;;=DZZ

d(:
;<F

!
!$v,V
<C;;=+"4444ZZ

d(:
;<F

!
!$|"4c6
BC;;=+"4444ZZ

d(:
;<F

!
!$rr3w-f
=C;;=+"4444 	2::cjjkD6Hj&IJKA;;=DZZ

d(:
;<F

!
!$V
4C;;=+"4444r$   c                 x   t         j                  j                  d      }t        j                  | j                  |j                  d                  }|j                         }| j                  |j                  d            }t        j                  |d|      }|j                         j                  dk(  sJ y )Nr   rA   	   r   rA   rq   )r   rA   rT   r  )rA   r  rA   rA   r  )r,   rg   r%   r-  rd  r   s         r"   test_from_davenport_broadcastr  
  s    
))


"C2::cjjlj&CDEA;;=DZZ

	
23F

!
!$V
4C;;=,...r$   c                    g d}g d}g d}| j                  ||g      }t        |      rIt        j                  |dddg      j	                         }| j                  | j                  |            s?J t        j                  t        d      5  t        j                  |dddg       d d d        | j                  |||g      }t        |      rIt        j                  |dg d      j	                         }| j                  | j                  |            s?J t        j                  t        d      5  t        j                  |dg d       d d d        t        j                  t        d	      5  t        j                  | j                  |g      d
dg       d d d        t        j                  t        d      5  t        j                  | j                  |||g      dg d       d d d        t        j                  t        d      5  t        j                  | j                  |      dddg       d d d        t        j                  t        d      5  t        j                  | j                  |||g      dddg       d d d        y # 1 sw Y   xY w# 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r  r  r   zmust be orthogonalr   r  zorder should ber   zExpected `angles`)r   r   r   rT   r   )
r+   r   r   r  r   rw   r   r   r   r   )r,   r  r  ezyr-  rh   s         r"   !test_from_davenport_invalid_inputr  
  sJ   	B	B
C::r3i DT##D#1v6>>@vvbhhqk"""]]:-AB 	7##D#1v6	7::r2sm$DT##D#y9AACvvbhhqk"""]]:-AB 	:##D#y9	:	z):	; >

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

BB< 8#|LM	z)<	= =

2aV<=	z)<	= G

BB< 8#1vFG G	7 	7	: 	:> >M M= =G GsH   J4J1)J'=,J4)K ,KJJ$'J14J= K	Kc                     t         j                  j                  d      } t        j                  g d      }t        j                  g d      }t        j                  g d      }t	        j                  |       }|j                  |||gd      }t	        j                  |||gd|j                               }|j                  |d      sJ t	        j                  d	|       }|j                  |||gd      }t	        j                  |||gd|j                               }t        j                  |j                  |d            sJ y )
Nrm   r   r   r   rn   r  ro   rp   r   )
r3   r^   rt   r4   r   as_davenportr  ru   rv   rw   )rg   r  r  e3ry   rd  r%   s          r"   test_from_davenport_array_liker  
  s   
))


$C	)	B	)	B	)	BS)J$$b"b\37FRc6==?CA""15"111 ,J$$b"b\37FRc6==?CA66*))!%)8999r$   r  c           
         t        j                  |       }t        j                  j	                  d      }d}t        j
                  |df      }|j                  t        j                   t        j                  |f      |d d df<   |j                  dt        j                  |f      }|j                  t        j                   t        j                  |f      |d d df<   |j                  dt        j                  d      }| j                  g d      }| j                  g d      }|D ]  }	| j                  t        j                  |	|z        j                  |            }
| j                  |||
gd	      }||	z
  |d d d
f<   dD ]s  }|dk(  r|n| j                  |d	      }t        j                  ||| j                  ||            }|j                  ||      }t!        || j                  ||             u  y )Nr   r\   rT   rn  r   )r  r  r  r    r   ri  rj  rj  r'   )r)   r*   r3   r^   r_   rA  r  r  r+   r   r   ri  r   rs  r  r  r   )r,   r(   r   r  rd  angles_middlelambdasr  r  lambr  ax_lambr  axr   
angles_davs                   r"   test_as_davenportr    s   b!E
))


"CAXXq!fF;;BEE6QD;AF1a4LKKABEEK=M;;BEE6QD;AF1a4Lkkabee%k8G	K	 B	K	 B IZZ,,T"W5;;B?@((BB<a(0$t+q!t/ 	IE![0bgggAg6NB))"eRZZeZ5TUC))"e4JJ

6
(GH		I	Ir$   c                 L   t         j                  j                  d      }t        j                  | j                  |j                  d                  }|j                         }| j                  |j                  t         j                   t         j                  d            }t        j                  |      d   j                  |d   dz        }dD ]O  }|d	k(  r| j                  |d
      }t        j                  |||      }|j                  ||      }t!        ||       Q y )Nr   r  rq   )rA   r  r   rT   rn  r{  r   r  rj  r   r    )r3   r^   rt   r   r   r+   rx   rP   r  r  r)   r   r   rs  r  r  r   )r,   rg   r%   r-  rd  r  r   r  s           r"   test_as_davenport_ndr  )  s    
))


"C2::cjjlj&CDEA;;=DZZRUUNOFVVF^F#''v(:;F+ ,K774b7)D%%dE6:%%dE2

F+,r$   c           
         t        j                  |       }|| j                  k(  rdnd}t        j                  j                  d      }d}t        j                  |df      }|j                  t        j                   t        j                  |f      |d d df<   t        |      D cg c]#  }|j                  dt        j                  g      % }}|j                  t        j                   t        j                  |f      |d d df<   |j                  dt        j                  d      }	| j                  g d	      }
| j                  g d
      }|	D ]  }| j                  t        j                  ||z        j                  |
            }| j                  |
||gd      }||z
  |d d df<   dD ]  }|dk(  r|n| j!                  |d      }t        j"                  ||| j                  ||            }t%        | |       5  |j'                  |||      }d d d        |j)                         }t        j"                  ||      }|j)                         }t+        |||         y c c}w # 1 sw Y   YxY w)Nro   r   r   rB   rT   rn  r   )rB   r  r  r    r   r  rj  r'   )r  rp   )r)   r*   r   r3   r^   r_   rA  r  r  rc   choicer+   r   r   ri  r   rs  r  r  r  rP   r   )r,   r  r(   rY   r   r  rd  ri   r  r  r  r  r  r  r  r  r  r   r  r  rot_estimatedr  s                         r"   test_as_davenport_degenerater  9  s2   
 b!ERZZ'5TD ))


"C	AXXq!fF ;;BEE6QD;AF1a4L5:1X>SZZBEE
+>M>;;BEE6QD;AF1a4Lkkabee$k7G	K	 B	K	 B DZZ,,T"W5;;B?@((BB<a(0$t+q!t/ 	DE![0bgggAg6NB))"eRZZeZ5TUC',=(=rB  --&7 . 
 ==?L$33BzJM)335ML-dC	D	D ? s   '(I,I11I:c           
         t        j                  |       }t        j                  j	                  d      }d}t        j
                  |df      }|| j                  k(  rdnd}|j                  t        j                   t        j                  |f      |d d df<   |j                  dt        j                  |f      |d d df<   |j                  t        j                   t        j                  |f      |d d df<   | j                  ||	      }d
D ]  }t        d      D ]  }dj                  |d   |d   |d   g      }| j                  |D 	cg c]  }	t        |	       c}	|	      }
|dk(  r|j                         }t        j                  ||      }t        j                   |
||      }t#        |j%                  d      |j%                  d      |         t        j&                  |      d d df   j)                  t        j                  dz        }d
D ]  }t        d      D ]  }dj                  |      }| j                  |D 	cg c]  }	t        |	       c}	|	      }
|dk(  r|j                         }t        j                  ||      }t        j                   |
||      }t#        |j%                         |j%                         |         y c c}	w c c}	w )Nr   r\   rT   ro   r  rn  r   r   r'   r  r   r  rj  Tr   r]   )r)   r*   r3   r^   r_   rA  r   r  r  r+   r   r  r#   r  r   r   r  r   r   r   subtract)r,   r(   r   r  rd  rX   r  r  r  ri   r  euldavs                r"   &test_compare_from_davenport_from_eulerr  b  st   b!E
))


"CAXXq!fF RZZ'5TD;;BEE6QD;AF1a4L;;1255t;<F1a4L;;BEE6QD;AF1a4LZZeZ,F+ 	'%e, 	'I''9Q<1y|DEC37aYq\7uEB#iik%%c62C))"eV<CCKK$K7t9T!%'	'	' VVF^AqD!**255195F+ E%e, 	EI'')$C37aYq\7uEB#iik%%c62C))"eV<CCKKM3;;=tD	EE 8 8s   KKc                    t         j                  j                  d      }d}t        j                  |df      }|j	                  t         j
                   t         j
                  |f      |d d df<   |j	                  dt         j
                  |f      |d d df<   |j	                  t         j
                   t         j
                  |f      |d d df<   dD ]  }t        d      D ]  }d	j                  |d   |d   |d   g      }|D cg c]  }t        |       }}|d
k(  r|j                         }t        j                  || j                  |            }	|	j                  |      }
|	j                  | j                  |      |      }t        |
|d         |d d dfxx   t         j
                  dz  z  cc<   dD ]  }t        d      D ]  }d	j                  |      }|D cg c]  }t        |       }}|d
k(  r|j                         }t        j                  || j                  |            }	|	j                  |      }
|	j                  | j                  |      |      }t        |
|d         y c c}w c c}w )Nr   r\   rT   rn  r   r   r  r   r  rj  ro   r]   )r3   r^   r_   rA  r  r  r   r  r#   r  r   r   r+   r  r  r   )r,   r   r  rd  r  r  r  ri   r  r   r  r  s               r"   "test_compare_as_davenport_as_eulerr    s0    ))


"CAXXq!fF ;;BEE6QD;AF1a4L;;1255t;<F1a4L;;BEE6QD;AF1a4L+ 	2%e, 	2I''9Q<1y|DEC(+,1)A,,B,#iik%%c2::f+=>C,,s#C""2::b>59CC51	2	2 1a4LBEEAIL+ 	2%e, 	2I'')$C(+,1)A,,B,#iik%%c2::f+=>C,,s#C""2::b>59CC51	2	2 - -s   	I8%I=c                    t        j                  d      }t        |      dk(  sJ t        j                  d      }t        |      dk(  sJ t        j                  d      g    }t        |      dk(  sJ t        j                  | j                  d            }t        |      dk(  sJ t        j                  | j                  d            }t        |      dk(  sJ t        j                  d| j                  d            }t        |      dk(  sJ t        j                  | j                  d            }t        |      dk(  sJ t        j                  | j                  d      d| j                  d            }t        |      dk(  sJ t        j                  | j                  d            }	t        |	      dk(  sJ y )	Nr   )r  rT   r   rA   r   rT   rT   r   r  ri  )r   r^   rQ  r  r   r   r   r   r   r  r`   r<  )
r,   r%   r_ider_getr_quatr_matrixr_eulerr_vecr_davr_mrps
             r"   test_zero_rotation_constructionr    so   
 	AAq6Q;;!$Eu:??OO"2&Eu:?? 01Fv;!##BHHY$78Hx=A!!%&)9:Gw<1  &!12Eu:??##BFF1I{BHHV<LMEu:??bhhv./Eu:??r$   c                    t        j                  | j                  d            }|j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                  d      j                  dk(  sJ |j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                  | j                  d      d      j                  dk(  sJ y )Nr  r  r   r  rT   ri  )r   r   r   r   rd   rP   r  r  rE  r  r`   r|   s     r"   !test_zero_rotation_representationr    s    
 	288F+,A99;&&&;;=)+++::e""f,,,;;=&(((88:v%%%>>"&&)[1776AAAr$   c                    t        j                  | j                  d            }| j                  g d      }|j	                  |      }|j
                  dk(  sJ | j                  d      }|j	                  |      }|j
                  dk(  sJ | j                  d      }t        j                  t        d      5  |j	                  |       d d d        y # 1 sw Y   y xY w)Nr  r  r  r	  r  r   )
r   r   r   r+   ri  rd   r%  r   r   r   )r,   r%   r  r  v0v0_rotr  s          r"   !test_zero_rotation_array_rotationr    s    288F+,A


9A
I??f$$$	&	BWWR[F<<6!!!	B	,
. 	  s   9CCc                 p   t        j                  | j                  d            }t        j                  | j                  g d            }||z  }t	        |      dk(  sJ ||z  }t	        |      dk(  sJ t        j                  | j                  d            }||z  }t	        |      dk(  sJ t        t        j                  d      |       }t        j                  t        d      5  ||z   d d d        t        j                  t        d      5  ||z   d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nr  r   r   r   r  r   )
r   r   r   r+   rQ  r-   r^   r   r   r   )r,   r%   r_singler_mult_leftr_mult_rightr0r_multr~  s           r"   !test_zero_rotation_multiplicationr    s   288F+,A!!"**^"<=Hh,K{q   a<L|!!!			BHHV,	-BVFv;!	*B	/B	z);	< 
R 
z);	< 
R   s   (D D, D),D5c                 Z   t        j                  | j                  d            }t        j                  ||g      }t	        |      dk(  sJ t        j                  | j                  g d            }|j                  ||g      }t	        |      dk(  sJ t        t        j                  d      |       }|j                  ||g      }t	        |      dk(  sJ t        t        j                  d      |       }|j                  ||g      }|j                  ||g      }t	        |      dk(  sJ y )Nr  r   r   r   rT   rA   )r   r   r   r  rQ  r+   r-   r^   r,   r%   r  r}  r   r4s         r"   !test_zero_rotation_concatentationr    s    288F+,A			q!f	%Br7a<<			BJJ~6	7B	
Aw	Br7a<<	*B	/B	
Aw	Br7a<<	*B	/B	
2w	B	
2w	Br7a<<r$   c                     t        j                  | j                  d            }dD ]  }||z  }t        |      dk(  rJ  y )Nr  )rw  rs   r   r   r  r   )r   r   r   rQ  )r,   r%   pppow0s       r"   test_zero_rotation_powerr    sC    288F+,A# "u4yA~~r$   c                     t        j                  | j                  d            }|j                         }t	        |      dk(  sJ y )Nr  r   )r   r   r   r   rQ  )r,   r%   r_invs      r"   test_zero_rotation_inverser
  !  s6    288F+,AEEGEu:??r$   c                     t        j                  | j                  d            }|j                         }|j                  dk(  sJ y )Nr  r   )r   r   r   r  rd   )r,   r%   r  s      r"   test_zero_rotation_magnituder  (  s8    288F+,AI??d"""r$   c                     t        j                  | j                  d            }t        j                  t
        d      5  |j                          d d d        y # 1 sw Y   y xY w)Nr  z+Mean of an empty rotation set is undefined.r   )r   r   r   r   r   r   r  r|   s     r"   test_zero_rotation_meanr  /  sH    288F+,A	z)V	W 	  s    AA#c                 "   t        j                  | j                  d            }t        j                  | j                  d            }|j                  |      j                  dk(  sJ t        j                  | j                  g d            }|j                  |      j                  dk(  sJ t        t        j                         |       }|j                  |      j                  dk(  sJ d}t        t        j                  d      |       }t        j                  t        |      5  |j                  |       d d d        t        j                  t        |      5  |j                  |       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)Nr  r  r   z/Expected broadcastable shapes in both rotationsr   r   )r   r   r   rv   rd   r+   r-   r^   r   r   r   )r,   r%   r  r}  r~  
approx_msgr   s          r"   test_zero_rotation_approx_equalr  6  s6   288F+,A			BHHV,	-B>>"##t+++			BJJ~6	7B>>"##t+++	)2	.B??1##t+++BJ	*B	/B	z	4 	r 
z	4 
   s   )E9F9FFz	jax.numpyz.JAX out-of-bounds indexing deviates from numpyc                    t        j                  | j                  d            }|| j                  g | j                           }t        |      dk(  sJ |d d }t        |      dk(  sJ t        j                  t              5  || j                  dg          d d d        t        j                  t              5  || j                  dg          d d d        t        j                  t              5  t        j                  | j                  g d            |d<   d d d        y # 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)Nr  r'   r   Tr0   )	r   r   r   r+   boolrQ  r   r   
IndexError)r,   r%   r  r_slices       r"   test_zero_rotation_get_setr  I  s    	288F+,Abjj277j+,Eu:??eGw<1	z	" 	"**aS/ 
z	" 	"**dV
 
z	" <!!"**\":;!< <  < <s$   D$:D01*D<$D-0D9<Ec                    t        t        j                  d      |       }|| j                  g d         }t	        |      dk(  sJ || j                  g d         }t	        |      dk(  sJ || j                  g d         }t	        |      dk(  sJ t        j
                  | j                  d            }|| j                  g d         }t	        |      dk(  sJ |j                         j                  d	k(  sJ t        j                  t              5  || j                  d
d
g          d d d        y # 1 sw Y   y xY w)NrT   )FFFr   )FTFr   )TTTr&  )TFF)r   r   rA   T)r-   r   r^   r+   rQ  r   r%  r   rd   r   r   r  r  s         r"   test_boolean_indexesr  ^  s   xq)2.A	
2::+,	-Br7a<<	
2::*+	,Br7a<<	
2::()	*Br7a<< 	2779-.A	
2::*+	,Br7a<<::<***	z	" $	"**dD\
"#$ $ $s   D44D=__iter__c                    t        t        j                  d      |       }t        |      D ][  \  }}t	        |t              sJ t        |j                         ||   j                                |t        |      kD  sRt        d       y )NrT   z&Iteration exceeded length of rotations)	r-   r   r^   rW  r>  r
   r   rQ  r  )r,   r%   ri   r_is       r"   test_rotation_iterr  u  sq    xq)2.AA, I3#x(((qt||~6s1v:GHH	Ir$   c                     t        t        dd|z         d |dz
         }| j                  |dz         }t        j                  |      }|j
                  |k(  sJ d|j
                   d|        y )Nr   r   rM   zGot z, expected )rP  rc   r%  r   r   rd   )r,   rI   rd   r   r%   s        r"   test_rotation_shaper    sl    %1t8$YdQh/0E7754< D4 A77e?tAGG9Kw??r$   c                  ~    t        j                  g d      } d| j                  _        t	        j
                  |        y )N)r   r   r   r   F)r3   r4   r  	writeabler   r   )rh   s    r"   test_non_writeabler"    s*    
 AAGGqr$   c                      t        j                  g dg      } d| j                  _        t	        j
                  dd      }|j                  |        y )N)r   r   r   Fr   r   )r3   r4   r  r!  r   r   ri  )pointsr   s     r"   test_gh_24751r%    s=    XX'(F"FLL


c3
'CIIfr$   c                      t        j                  g d      t         j                  z  dz  } d| j                  _        t        j                  |        y )Nr   r   F)r3   r4   r  r  r!  r   r   )r   s    r"   test_rotvec_non_writeabler'    s8    XXi 255(1,F"FLL r$   )r   r   numpyr3   numpy.testingr   scipy.spatial.transformr   r   $scipy.spatial.transform._rotation_cyspatial	transform_rotation_cyr6   $scipy.spatial.transform._rotation_xp_rotation_xpr7   scipy.statsr   	itertoolsr   r   
contextlibr	   r  scipy._lib._array_apir
   r   r   r   r   r   r   r   r   r   r   scipy._external.array_api_extra	_externalarray_api_extrar)   r  r  
pytestmarkr#   r-   r1   r9   r=   rH   markparametrizer  rc   intrO   rk   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'  r0  r6  r8  r;  rC  rF  rH  rJ  rL  rQ  rT  rW  rZ  r^  rb  re  rk  rv  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)  r2  r7  r>  rE  rH  rN  rU  rh  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;  r=  r?  r@  rC  rE  rH  rK  rN  rS  rW  rZ  rb  rh  rk  rm  ro  rt  r~  r  r  skip_xp_backendsr  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"   <module>r=     s-      & 3 = = 9 9 + + %     . -   "8Y"7(K9PQ
Dh D
$A0 eAqk!230S 0 40 Hk*+D ,D.:(5
F. Hl+,O -O@0
> He$x&;<= ==> eAqk!23! ! 4!
" Hk*+eAqk!23
3# 
3 4 ,
3 Hk*+, ,,6 Hk*+, ,,> Hm,-eAqk!23	H 	H 4 .	H Hm,- . Hm,x.EF@ G@
 Hm,x.EF3 G3$ Hm,x.EFP GP2 Hm,x.EF< G< Hm,x.EF& G&"
: Hm,-5 .5 Hm,-eAqk!23@ @ 4 .@ Hm,-V .V Hm,-> .>. Hm,x.EF
: G
: Hm,-5 .5 Hm,-
" .
" Hm,-1 .1
 Hm,-eAqk!23-C - 4 .- Hk*+W ,W" Hk*+eAqk!234S 4 4 ,4 Hm,x.EF* G* Hm,x.EF	 G	 Hj)*q!-IC I . +I
: Hj)*5 +5 Hj)*	E +	E Hj)*q!-* * . +* Hh'(E )E Hl+h-AB C Hh'(eAqk!23.# . 4 ). Hj)Hh+?@J AJ Hl+,) -) Hl+,5 -5 Hl+,eAqk!23)# ) 4 -) Hl+h-DE* F* Hl+, - Hl+h-DE	2 F	2 Hl+h-DE F8 Hl+h-DE F6 Hl+h-DE F6 Hl+h-DE F6:2 Hl+h
-CDd<+>&?@m43 5 A E38 Hl+h
-CDd<+>&?@m43 5 A E36 
 
 |x5*7M d<+>&?@m4,m<< = 5 A<< |x5*7M d<+>&?@m4,m<< = 5 A<> Hl+h
-CDeAqk!23
9 
9 4 E
9 Hk*Xu,=> 0 ? 0F He$x&=>/ ?/@ Hk*Xu,=>3 ?3 Hk*Xu,=>$ ?$ He$x&=>
@ ?
@ He$x&=>
@ ?
@ & Hk*+eAqk!23-S - 4 ,- Hk*+2 ,2 u+.>0J	I	I Hm,x.HI2 J2  u+.>0J I IF Hn-.	 /	 }&1Hk3J eAqk!23	@ 	@ 4	@ }&1Hk3J eAqk!23S  40 Hf%+'>?8 @8* Hm,x.@8UBSk*,eAqk!23I I 4,I, Hf%& '8 Hh'(( )( Hh'( ) Hh'(E):X{<ST6 U6> Hm,x.ABA CA: Hm,x.ABeAqk!23: : 4 C:0 Hm,x.ABeAqk!23: : 4 C:D Hm,x.ABeAqk!239C 9 4 C98 Hg&'  ( "/9" Hg&'$ ($ }+6=8Q eAqk!23Y3 Y 4Y Hm,-8 .8
 }-88[:Q	D	D Hm,-< .< Hm,-5 .5 Hm,-3 .3 Hm,- . Hm,-! .!&&2 Ho.;0GHM IM Hg&?(CD
M E
M Ho.70CDM EM Ho./
4 0
4 Ho.;0GH  I  w(M2X4O#9#9L Ho./Q% 0Q%h (K!88W:M!>!>H Ho.;0GHB IBB Ho.;0GH> I>0 (K!88W:M}+6;8O'B	'BT Ho.70CD> E>"	) Hg&?(CD0 E0 Hj)*
: +
::* E:&
(;<,/ =,/^ E:&' ( G  E:&' ( E:&' ( E:&' ( E:&' ( E:&' ( E:&' ( E:&'
 (
 E:&'
 (
 E:&
(;<
 =
 E:&
(;< =0 
J%,x.Fu+.G	G Hi()+ *+ Hi()+ *+8 Hi() * Hi()H *H u),x.?{h6;8O eAqk!23:9s :9 4	
:9z Hi()$ *$&> Hk*+0%I  KFK ,F Hk*+0%I  K?K ,?+ Hm,-: .:2 Hm,-- .- Hm,-' .'  & H./0) 1) Hm,x9I.JKR LR@ H./0eAqk!235 5 4 15< H./0/ 1/ H./0G 1G::$ H./(N1KLI MI0 H./(N1KL, M,  8^"<x>U ,m<"D ="DJ Hl+h8H-IJ!E K!EH |x4x6P22D },7(M9R 8Z"8	: {h
3h5Lx8^4B	B Hg&' (" Hi() *, Hm,- .( Hi() * He$% & Hk*+# ,# Hf%& ' Hn-. /$ k%U  W<W<& Hm,-$ .$, Hj)*I +I eAqk!23@# @ 4@!r$   