ó
    Eñi�¬  ã                   óî  • S r SSKrSSKrSSKJr  SSKrSSKJrJ	r	J
r
JrJrJrJrJr  SSKJr  SSKJr  SSKJr  SSKJs  Jr    SZSS	.S
\	S\S\S\S\	4
S jjjrS[S\	S\S\	4S jjrS\	S\	4S jrS[S\	S\S\	4S jjrS\	S\	4S jrS[S\ S\	S\S\	4S jjr! S[S\	S\ S\	\"-  S\S\	4
S jjr# S[SS	.S
\	S\S\S\	4S  jjjr$S
\	S\	4S! jr%S[S
\	S\S\	4S" jjr&S
\	S\	4S# jr' S[SS$.S
\	S\ S\S%\S\	4
S& jjjr( S[SS$.S
\	S\
S\ S\S%\S\	4S' jjjr)S
\	S\	4S( jr*S
\	S\	4S) jr+ S\S
\	S*\	S+\"S-  S\S\	4
S, jjr,  S]S
\	S-\
S-  S.S\--  \.\-S/4   -  S\	4S0 jjr/  S]S
\	S1\	S-  S2\	S-  S\.\	\	S-  \	S-  4   4S3 jjr0S[S
\	S4\	S5\S\	4S6 jjr1S
\	S7\	S8\-\2-  \-  S-  S\	4S9 jr3 S\S:\	S;\	S-\	S-  S<\S\.\	\	\	4   4
S= jjr4S:\	S;\	S-\	S\.\	\	\	4   4S> jr5S:\	S;\	S-\	S\.\	\	\	4   4S? jr6S
\	S@\"\	-  S\	4SA jr7S
\	S\	4SB jr8S
\	S\	4SC jr9S.\ S\-4SD jr:S
\	SE\	SF\	SG\	SH\S%\S\	4SI jr;S\<\-   S\	SJ\S\	4SK jr=S.\-SL\	S\	4SM jr>SH\SN\SO\-SP\"S:\	S;\	SQ\	SR\	S%\S\	4SS jr?ST\	SU\	S\	4SV jr@SU\	S\.\	\	4   4SW jrAS\	S\	4SX jrBS\	S\	4SY jrCg)^z·Array API backend for the `Rotation` class.

This module provides generic, functional implementations of the `Rotation` class methods
that work with any Array API-compatible backend.
é    N)ÚEllipsisType)Úarray_namespaceÚArrayÚ	ArrayLikeÚis_lazy_arrayÚxp_vector_normÚxp_result_typeÚ
xp_promoteÚis_jax)Úbroadcastable©Údevice)Úis_array_api_objF)Úscalar_firstÚquatÚ	normalizeÚcopyr   Úreturnc                ó¬   • [        U 5      nU(       a  UR                  U SSS9n U(       a  U(       d  UR                  U SS9n U(       a  [        U 5      n U $ )Néÿÿÿÿ©ÚaxisT©r   )r   ÚrollÚasarrayÚ_normalize_quaternion)r   r   r   r   Úxps        Úa/home/mande/repo/quber/.venv/lib/python3.13/site-packages/scipy/spatial/transform/_rotation_xp.pyÚ	from_quatr      sN   € ô 
˜Ó	€BÞØ�w‰w�t˜R bˆwÐ)ˆæ–IØ�z‰z˜$ TˆzÐ*ˆÞÜ$ TÓ*ˆØ€Kó    ÚmatrixÚassume_validc           
      ó¤  • [        U 5      n[        U 5      nU(       Gd¨  UR                  R                  U 5      S:*  n[	        U5      nU(       d`  UR                  U5      (       aJ  [        UR                  [        R                  " USUS95      S   S   5      n[        SU SXS4    S35      eU(       a   UR                  US   UR                  U 5      n XR                  U 5      -  nUR                  S	U R                  US
9nUR!                  [        R"                  " XxSUS9SS9n	U(       a6  UR                  R%                  U SS9u  p«nUR                  U	S   X
U-  5      n ObUR!                  U	5      (       dL  U	) nUR                  R%                  X   SS9u  p«n[        R&                  " U 5      U   R)                  X¬-  5      n [+        U 5      $ )Nr   é   ©Úndimr   zSNon-positive determinant (left-handed or null coordinate frame) in rotation matrix z: .Ú.©.NNé   ©Údtyper   gê-�™—q=)Úatolr   )éþÿÿÿr   r   F)Úfull_matrices)r   Ú	xp_deviceÚlinalgÚdetr   ÚanyÚintÚnonzeroÚxpxÚ
atleast_ndÚ
ValueErrorÚwhereÚnanÚmatrix_transposeÚeyer+   ÚallÚiscloseÚsvdÚatÚsetÚ_from_matrix_orthogonal)r!   r"   r   r   ÚmaskÚlazyÚindÚgramiansr;   Úis_orthogonalÚUÚ_ÚVtÚis_not_orthogonals                 r   Úfrom_matrixrK   0   s¨  € Ü	˜Ó	 €BÜ�vÓ€FçØ�y‰y�}‰}˜VÓ$¨Ñ)ˆÜ˜TÓ"ˆæ˜Ÿ™˜tŸ™Ü�b—j‘j¤§¢°¸1ÀÑ!DÓEÀaÑHÈÑKÓLˆCÜð#Ø#& % r¨&°c°Ñ*:Ð);¸1ð>óð ö Ø—X‘X˜d ?Ñ3°R·V±V¸VÓDˆFà×/Ñ/°Ó7Ñ7ˆØ�f‰f�Q˜fŸl™l°6ˆfÐ:ˆØŸ™Ü�KŠK˜¨E°bÑ9Àð ð 
ˆö ð —y‘y—}‘} V¸5�}ÐA‰HˆA�"Ø—X‘X˜m¨OÑ<¸fÈ"ÁfÓM‰FØ—‘˜×&Ñ&à!. ÐØ—y‘y—}‘} VÑ%>Èe�}ÐT‰HˆA�"Ü—V’V˜F“^Ð$5Ñ6×:Ñ:¸1¹6ÓBˆFä" 6Ó*Ð*r    c                 ó¢  • [        U 5      n[        U 5      nU S   U S   -   U S   -   nUR                  U S   U S   U S   U/SS9nUR                  USSS9nUR	                  / U R
                  SS	 QS
P7U R                  US9nUR                  SUS   -
  SU S   -  -   U S   U S   -   U S   U S   -   U S   U S   -
  /SS9nUR                  US:H  Xv5      nUR                  U S   U S   -   SUS   -
  SU S   -  -   U S   U S   -   U S   U S   -
  /SS9nUR                  US:H  X†5      nUR                  U S   U S   -   U S   U S   -   SUS   -
  SU S   -  -   U S   U S   -
  /SS9n	UR                  US:H  X–5      nUR                  U S   U S   -
  U S   U S   -
  U S   U S   -
  SUS   -   /SS9n
UR                  US:H  X¦5      n[        U5      $ )z6Convert known orthogonal rotation matrix to quaternion).r   r   ).r$   r$   ).é   rM   r   r   T)r   ÚkeepdimsNr-   é   r*   r$   .rM   ).r$   r   ).r   r$   ).rM   r   ).r   rM   ).rM   r$   ).r$   rM   r   r)   )	r   r/   ÚstackÚargmaxÚemptyÚshaper+   r8   r   )r!   r   r   Úmatrix_traceÚdecisionÚchoicer   Úquat_0Úquat_1Úquat_2Úquat_3s              r   rA   rA   V   sÁ  € ä	˜Ó	 €BÜ�vÓ€Fà˜)Ñ$ v¨iÑ'8Ñ8¸6À)Ñ;LÑL€LØ�x‰xØ	�	Ñ	˜F 9Ñ-¨v°iÑ/@À,ÐOØð ð €Hð �Y‰Y�x b°4ˆYÐ8€FØ�8‰8Ð+�f—l‘l 3 BÐ'Ð+¨Ñ+°6·<±<Èˆ8ÐO€Dð �X‰Xà�˜SÑ!Ñ! A¨¨yÑ(9Ñ$9Ñ9Ø�9Ñ  yÑ 1Ñ1Ø�9Ñ  yÑ 1Ñ1Ø�9Ñ  yÑ 1Ñ1ð		
ð ð ð €Fð �8‰8�F˜a‘K Ó.€Dð �X‰Xà�9Ñ  yÑ 1Ñ1Ø�˜SÑ!Ñ! A¨¨yÑ(9Ñ$9Ñ9Ø�9Ñ  yÑ 1Ñ1Ø�9Ñ  yÑ 1Ñ1ð		
ð ð ð €Fð �8‰8�F˜a‘K Ó.€Dð �X‰Xà�9Ñ  yÑ 1Ñ1Ø�9Ñ  yÑ 1Ñ1Ø�˜SÑ!Ñ! A¨¨yÑ(9Ñ$9Ñ9Ø�9Ñ  yÑ 1Ñ1ð		
ð ð ð €Fð �8‰8�F˜a‘K Ó.€Dð �X‰Xà�9Ñ  yÑ 1Ñ1Ø�9Ñ  yÑ 1Ñ1Ø�9Ñ  yÑ 1Ñ1Ø�˜SÑ!Ñ!ð		
ð ð ð €Fð �8‰8�F˜a‘K Ó.€Dä  Ó&Ð&r    ÚrotvecÚdegreesc                 ó¼  • [        U 5      nU R                  S   S:w  a  [        SU R                   35      eU(       a  [        U 5      OU n [	        U SSUS9nUS:*  nUS-  nSUS	-  -
  US-  S
-  -   nX2R                  XCR                  S9-   nUR                  US-  5      U-  nUR                  XFU5      n	UR                  X	-  UR                  US-  5      /SS9n
U
$ )Nr   r)   z/Expected `rot_vec` to have shape (..., 3), got T©r   rN   r   çü©ñÒMbP?rM   g      à?é0   i   ©r+   r   )r   rS   r7   Ú_deg2radr   r   r+   Úsinr8   ÚconcatÚcos)r[   r\   r   ÚangleÚsmall_angleÚangle2Úsmall_scaleÚ	div_angleÚlarge_scaleÚscaler   s              r   Úfrom_rotvecrm   œ   sñ   € Ü	˜Ó	 €BØ‡|�|�BÑ˜1ÓÜØ=¸f¿l¹l¸^ÐLó
ð 	
ö ")ŒX�fÔ¨f€Fä˜6¨°T¸bÑA€EØ˜4‘-€KØ�A‰X€FØ˜ ™Ñ# f¨a¡i°$Ñ&6Ñ6€Kð
 Ÿ
™
 ;·k±k˜
ÐBÑB€IØ—&‘&˜ ™Ó# iÑ/€KØ�H‰H�[¨{Ó;€EØ�9‰9�f‘n b§f¡f¨U°Q©YÓ&7Ð8¸rˆ9ÐB€DØ€Kr    Úmrpc                 óø   • [        U 5      nU R                  S   S:w  a  [        SU R                   35      eUR                  R	                  X SS9S   S-   nUR                  SU SS S24   -  SU-
  /SS9nX2-  nU$ )	Nr   r)   z+Expected `mrp` to have shape (..., 3), got r   ©.Nr$   rM   .)r   rS   r7   r0   Úvecdotrd   )rn   r   Úmrp2_plus_1Ú	q_no_normr   s        r   Úfrom_mrprt   ³   s�   € Ü	˜Ó	€BØ
‡y�y��}˜ÓÜÐFÀsÇyÁyÀkÐRÓSÐSØ—)‘)×"Ñ" 3°"Ð"Ð5°iÑ@À1ÑD€KØ—	‘	˜1˜s 3¨¨¨ 7™|Ñ+¨a°+©oÐ?Àb�	ÐI€IØÑ"€DØ€Kr    ÚseqÚanglesc                 óŽ  ^ • [        U5      n[        T 5      nUS:  d  US:”  a  [        ST  35      e[        R                  " ST 5      S Ln[        R                  " ST 5      S LnU(       d  U(       d  [        ST  35      e[        U 4S j[        US-
  5       5       5      (       a  [        ST  35      eU(       a  [        U5      n[        R                  " USUS	9nUR                  S
   U:w  a  [        SUR                  S
    S35      eT R                  5        Vs/ s H  n[        U5      PM     nn[        X�U5      n	U	$ s  snf )Nr$   r)   zPExpected axis specification to be a non-empty string of up to 3 characters, got ú^[XYZ]{1,3}$ú^[xyz]{1,3}$úLExpected axes from `seq` to be from ['x', 'y', 'z'] or ['X', 'Y', 'Z'], got c              3   ó@   >#   • U  H  nTU   TUS -      :H  v •  M     g7f©r$   N© ©Ú.0Úiru   s     €r   Ú	<genexpr>Úfrom_euler.<locals>.<genexpr>Î   s$   øé € Ð
=Ò)< Aˆ3ˆq‰6�S˜˜Q™‘ZÖÒ)<ùó   ƒú/Expected consecutive axes to be different, got r%   r   zTExpected last dimension of `angles` to match number of sequence axes specified, got r'   )r   Úlenr7   ÚreÚmatchr2   Úrangerb   r5   r6   rS   ÚlowerÚ_elementary_basis_indexÚ_elementary_quat_compose)
ru   rv   r\   r   Únum_axesÚ	intrinsicÚ	extrinsicÚxÚaxesÚqs
   `         r   Ú
from_eulerr’   ½   sK  ø€ Ü	˜Ó	 €BÜ�3‹x€HØ�!ƒ|�x !“|Üð1Ø14°ð7ó
ð 	
ô
 —’˜¨#Ó.°dÐ:€IÜ—’˜¨#Ó.°dÐ:€IÞžÜð,Ø,/¨5ð2ó
ð 	
ô
 Ô
=¬¨x¸!©|Ô)<Ó
=×=Ñ=ÜÐJÈ3È%ÐPÓQÐQæÜ˜&Ó!ˆä�^Š^˜F¨¨rÑ2€Fà‡|�|�BÑ˜8Ó#ÜðØ$Ÿl™l¨2Ñ.Ð/¨qð2ó
ð 	
ð 14·	±	´Ó<²¨1Ô# AÖ&±€DÐ<Ü  ¨yÓ9€AØ€Hùò =s   ÄEr�   Úorderc                 ó¬  • [        U 5      n[        U 5      nUS;   a  SnOUS;   a  SnO[        SU 35      eU R                  S   S:w  a  [        S5      e[        R
                  " U S	US
9n [        R
                  " USUS
9nU R                  S   nUS:  d  US:”  a  [        SU 35      eU [        U SSUS9-  n UR                  U R                  S S UR                  US9nUS:”  a7  UUR                  UR                  U SSS S 24   U SSS S 24   5      5      S:„  -  nUS	:”  a7  UUR                  UR                  U SSS S 24   U SS	S S 24   5      5      S:„  -  n[        U5      (       d!  UR                  U5      (       a  [        S5      eUR                  US   UR                  U 5      n U(       a  [        U5      n[!        U R                  S S UR                  5      (       a   U R                  S   UR                  S   :w  a&  [        SUR                   SU R                   S35      eUR                  S S S-   n	UR                  X’R"                  [        U5      S9n
[        R$                  " U
5      S   R'                  S5      n
[)        U5       H<  n[+        USUS 4   U SUS S 24   -  5      nU(       a  [-        XÊ5      O
[-        X¬5      n
M>     U
$ )N©ÚerŽ   T©r€   r�   Fúhorder should be 'e'/'extrinsic' for extrinsic sequences or 'i'/'intrinsic' for intrinsic sequences, got r   r)   ú!Axes must be vectors of length 3.rM   r%   r$   r-   zExpected up to 3 axes, got r^   r*   .r   çH¯¼šò×z>ú$Consecutive axes must be orthogonal.r(   z/Expected `angles` to match number of axes, got z angles and z axes.)rO   ©.r)   )r   r/   r7   rS   r5   r6   r   ÚzerosÚboolÚabsrq   r   r2   r8   r9   rb   r   r+   r?   r@   rˆ   rm   Úcompose_quat)r�   r“   rv   r\   r   r   rŽ   rŒ   Úaxes_not_orthogonalÚq_shaper‘   r€   Úqis                r   Úfrom_davenportr¤   à   sÐ  € ô 
˜Ó	€BÜ�t‹_€FØÐ"Ó"Ø‰	Ø	Ð$Ó	$Ø‰	äð8Ø8=°wð@ó
ð 	
ð
 ‡z�z�"�~˜ÓÜÐ<Ó=Ð=ä�>Š>˜$ Q¨2Ñ.€DÜ�^Š^˜F¨¨rÑ2€FØ�z‰z˜"‰~€HØ�!ƒ|�x !“|ÜÐ6°x°jÐAÓBÐBà”. ¨B¸À"ÑEÑE€Dð Ÿ(™( 4§:¡:¨c¨r ?¸"¿'¹'È&˜(ÐQÐØ�!ƒ|à1Ø�F‰F�2—9‘9˜T # qª! )™_¨d°3¸º1°9©oÓ>Ó?À$ÑFñ
Ðð �!ƒ|Ø1Ø�F‰F�2—9‘9˜T # qª! )™_¨d°3¸º1°9©oÓ>Ó?À$ÑFñ
Ðô Ð,×-Ñ-°"·&±&Ð9L×2MÑ2MÜÐ?Ó@Ð@à�x‰xÐ+¨OÑ<¸b¿f¹fÀdÓKˆæÜ˜&Ó!ˆô ˜$Ÿ*™* S b˜/¨6¯<©<×8Ñ8Ø�:‰:�b‰>˜VŸ\™\¨"Ñ-Ó-äØ=¸f¿l¹l¸^ð LØ—:‘:�,˜fð&ó
ð 	
ð
 �l‰l˜3˜BÐ $Ñ&€GØ
�‰�§¡´Y¸vÓ5FˆÐG€AÜ�Šˆq‹	�&Ñ×Ñ˜aÓ €Aä�8Ž_ˆÜ˜  Q¨ Ñ-°°S¸!ºQ°Y±Ñ?Ó@ˆÞ#,ŒL˜Ô´,¸qÓ2EŠñ ð €Hr    Ú	canonicalc                óp   • [        U 5      nU(       a  [        U 5      n U(       a  UR                  U SSS9n U $ )Nr$   r   r   )r   Ú_quat_canonicalr   )r   r¥   r   r   s       r   Úas_quatr¨      s7   € ô 
˜Ó	€BÞÜ˜tÓ$ˆÞØ�w‰w�t˜Q RˆwÐ(ˆØ€Kr    c           
      ó†  • [        U 5      nU S   nU S   nU S   nU S   nX"-  nX3-  nXD-  nXU-  n	X#-  n
XE-  nX$-  nX5-  nX4-  nX%-  nXg-
  U-
  U	-   SX«-
  -  SXÍ-   -  SX«-   -  U* U-   U-
  U	-   SXï-
  -  SXÍ-
  -  SXï-   -  U* U-
  U-   U	-   /	nUR                  UR                  USS9/ U R                  S S QSPSP75      nU$ )	N©.r   ©.r$   ©.rM   rœ   rM   r   r   r)   )r   ÚreshaperP   rS   )r   r   r�   ÚyÚzÚwÚx2Úy2Úz2Úw2ÚxyÚzwÚxzÚywÚyzÚxwÚmatrix_elementsr!   s                     r   Ú	as_matrixr¼   +  s&  € Ü	˜Ó	€BØˆV‰€AØˆV‰€AØˆV‰€AØˆV‰€Aà	
‰€BØ	
‰€BØ	
‰€BØ	
‰€Bà	
‰€BØ	
‰€BØ	
‰€BØ	
‰€BØ	
‰€BØ	
‰€Bð 	‰�"‰�rÑØ	ˆR‰W‰Ø	ˆR‰W‰Ø	ˆR‰W‰Ø	ˆˆb‰�2‰˜ÑØ	ˆR‰W‰Ø	ˆR‰W‰Ø	ˆR‰W‰Ø	ˆˆb‰�2‰˜Ñð
€Oð �Z‰Z˜Ÿ™ °r˜Ð:Ð<T¸d¿j¹jÈÈ"¸oÐ<TÈqÐ<TÐRSÑ<TÓU€FØ€Mr    c                 óŠ  • [        U 5      n[        U 5      n [        U SS S24   SSUS9nSUR                  X0S   S   5      -  nUS	:*  nUS-  nSUS
-  -   SUS-  -  S-  -   nUR	                  US-  5      UR                  XTR                  S9-   nXH-  n	UR                  XWU	5      n
U(       a  [        U
5      n
X SS S24   -  nU$ )N.r)   r   Tr^   rM   rœ   rp   r_   é   é   i@  ç       @ra   )	r   r§   r   Úatan2rc   r   r+   r8   Ú_rad2deg)r   r\   r   Úax_normrf   rg   rh   ri   Údiv_sinrk   rl   r[   s               r   Ú	as_rotvecrÅ   M  sã   € Ü	˜Ó	€BÜ˜4Ó €DÜ˜T # r¨ r '™]°¸dÀrÑJ€GØ�—‘˜ v¡,¨yÑ"9Ó:Ñ:€EØ˜4‘-€KØ�A‰X€FØ�f˜r‘k‘/ A¨°©	¡M°DÑ$8Ñ8€Kð
 �f‰f�U˜S‘[Ó! B§J¡J¨{Ç+Á+ JÐ$NÑN€GØ‘/€KØ�H‰H�[¨{Ó;€EÞÜ˜“ˆØ˜#˜r ˜r˜'‘]Ñ"€FØ€Mr    c                 óÂ   • [        U 5      nUR                  S[        U 5      U R                  S9nUR	                  U S   S:  SU5      nSX0S   -  -   nX0SS S24   -  U-  $ )Nç      ð?©r   r+   ).r)   Nr   r   .r)   )r   r   r/   r+   r8   )r   r   ÚoneÚsignÚdenominators        r   Úas_mrprÌ   b  sp   € Ü	˜Ó	€BØ
�*‰*�S¤¨4£¸¿
¹
ˆ*Ð
C€CØ�8‰8�D˜Ñ&¨Ñ*¨B°Ó4€DØ˜ LÑ1Ñ1Ñ1€KØ�s˜B˜Q˜B�w‘-Ñ +Ñ-Ð-r    )Úsuppress_warningsrÍ   c                ó  ^• [        U 5      n[        T5      S:w  a  [        ST S35      e[        R                  " ST5      S Ln[        R                  " ST5      S LnU(       d  U(       d  [        ST 35      e[        U4S j[        S5       5       5      (       a  [        S	T 35      e[        U 5      nTR                  5        Vs/ s H  n[        U5      PM     n	nU(       a  U	OU	S S S
2   n	U	u  p«nX¬:H  nU(       a  SU
-
  U-
  OUnUR                  X×S9nUR                  X«-
  X¼-
  -  XÊ-
  -  S-  U R                  US9nUR                  XàS   U S   U SU4   -
  5      nUR                  XàSU
4   U SU
4   U SU4   U-  -   5      nUR                  XàSU4   U SU4   U S   -   5      nUR                  XàSU4   U-  U SU4   U-  U SU
4   -
  5      n[        XmXôR                  S-  UUUUU5	      nU(       a  [        U5      $ U$ s  snf )Nr)   úExpected 3 axes, got r'   rx   ry   rz   c              3   ó@   >#   • U  H  nTU   TUS -      :H  v •  M     g7fr|   r}   r~   s     €r   r�   Úas_euler.<locals>.<genexpr>y  s"   øé € Ð
2ª Aˆ3ˆq‰6�S˜˜Q™‘ZÖªùrƒ   rM   r„   r   r   r*   rœ   .)r   r…   r7   r†   r‡   r2   rˆ   r/   r‰   rŠ   r   r+   r8   Ú_get_anglesÚpirÂ   )r   ru   r\   rÍ   r   r�   rŽ   r   r�   r�   r€   ÚjÚkÚ	symmetricrB   rÊ   ÚaÚbÚcÚdrv   s    `                   r   Úas_eulerrÛ   j  s1  ø€ ô 
˜Ó	€Bô ˆ3ƒx�1ƒ}ÜÐ0°°°QÐ7Ó8Ð8Ü—’˜¨#Ó.°dÐ:€IÜ—’˜¨#Ó.°dÐ:€IÞžÜðØ�%ðó
ð 	
ô Ô
2¬¨q¬Ó
2×2Ñ2ÜÐJÈ3È%ÐPÓQÐQä�t‹_€FØ03·	±	´Ó<²¨1Ô# AÖ&±€DÐ<Þ‰4 $¡t¨ t¡*€DØ�G€Aˆ!Ø‘€IÞˆˆA‰�Š	 A€Aà�:‰:�iˆ:Ð/€DØ�:‰:�q‘u ¡Ñ'¨1©5Ñ1°QÑ6¸d¿j¹jÐQWˆ:ÐX€Dà
�‰�˜F‘| T¨&¡\°D¸¸a¸±LÑ%@ÓA€AØ
�‰�˜C ˜F‘| T¨#¨q¨&¡\°D¸¸a¸±LÀ4Ñ4GÑ%GÓH€AØ
�‰�˜C ˜F‘| T¨#¨q¨&¡\°D¸±LÑ%@ÓA€AØ
�‰�˜C ˜F‘| dÑ*¨D°°a°©L¸4Ñ,?À$ÀsÈAÀvÁ,Ñ,NÓO€AäØ˜d§E¡E¨A¡I¨q°!°Q¸Ð;Ló€Fö  'Œ8�FÓÐ2¨FÐ2ùò# =s   ÃHc          
      óf  • [        U 5      nUS;   a  SnOUS;   a  SnO[        SU 35      eUR                  S   S:w  a  [        SUR                   S	35      eUR                  S
   S:w  a  [        S5      e[        UR                  S S U R                  S S
 5      (       d&  [        SUR                   SU R                   S35      eU[	        US
SUS9-  nUR                  USSS S 24   USSS S 24   5      nUR                  USSS S 24   USSS S 24   5      nUS:¬  US:¬  -  n	[        U	5      (       a!  UR                  U	S   UR                  U5      nO!UR                  U	5      (       a  [        S5      e[        U USSS S 24   USSS S 24   USSS S 24   UU5      n
U(       a  [        U
5      n
U
$ )Nr•   Tr—   Fr˜   r-   r)   rÏ   r'   r   r™   z2Expected `axes` to match number of rotations, got z
 axes and ú rotations.r^   .r   r$   rM   rš   r(   r›   )r   r7   rS   r   r   rq   r   r8   r9   r2   Ú_compute_davenport_from_quatrÂ   )r   r�   r“   r\   rÍ   r   rŽ   Úvdot_ax0_ax1Úvdot_ax1_ax2Ú
is_invalidrv   s              r   Úas_davenportrâ   ‘  sà  € ô 
˜Ó	€Bð Ð"Ó"Ø‰	Ø	Ð$Ó	$Ø‰	äð-Ø-2¨Gð5ó
ð 	
ð ‡z�z�"�~˜ÓÜÐ0°·±°¸AÐ>Ó?Ð?Ø‡z�z�"�~˜ÓÜÐ<Ó=Ð=Ü˜Ÿ™ C R˜¨$¯*©*°S°b¨/×:Ñ:ÜØ@ÀÇÁÀð MØ—:‘:�,˜kð+ó
ð 	
ð ”. ¨B¸À"ÑEÑE€DØ—9‘9˜T # qª! )™_¨d°3¸º1°9©oÓ>€LØ—9‘9˜T # qª! )™_¨d°3¸º1°9©oÓ>€LØ $Ñ&¨<¸4Ñ+?Ñ@€JÜ�Z× Ñ Ø�x‰x˜
 ?Ñ3°R·V±V¸TÓB‰Ø	�‰�
×	Ñ	ÜÐ?Ó@Ð@ä)ØØˆS�!’QˆY‰ØˆS�!’QˆY‰ØˆS�!’QˆY‰ØØó€Fö Ü˜&Ó!ˆØ€Mr    c                 óX   • [         R                  " U 5      SS S24   R                  SSS9$ )N.r)   r   Tr   )r5   r?   Úmultiply)r   s    r   Úinvrå   Æ  s-   € Ü�6Š6�$‹<˜˜R˜a˜R˜Ñ ×)Ñ)¨"°4Ð)Ð8Ð8r    c                 ó�   • [        U 5      n[        U SS S24   SUS9nUR                  U S   5      nSUR                  X#5      -  nU$ )N.r)   r   ©r   r   rœ   rM   )r   r   rŸ   rÁ   )r   r   Úsin_qÚcos_qrv   s        r   Ú	magnituderê   Ê  sP   € Ü	˜Ó	€BÜ˜4  R a R ™=¨r°bÑ9€EØ�F‰F�4˜‘<Ó €EØ�—‘˜%Ó'Ñ'€FØ€Mr    Úotherr,   c                 óT  • Uc  U(       a  [         R                  " SSS9  SnOU(       a  [        U5      n[        U R                  UR                  5      (       d,  [        SU R                  S S  SUR                  S S  S35      e[        U[        U 5      5      n[        U5      nXR:  $ )	NzEatol must be set to use the degrees flag, defaulting to 1e-8 radians.rM   ©Ú
stacklevelg:Œ0âŽyE>z5Expected broadcastable shapes in both rotations, got r   z rotations in first and z rotations in second object.)	ÚwarningsÚwarnrb   r   rS   r7   r    rå   rê   )r   rë   r,   r\   Úquat_resultrv   s         r   Úapprox_equalrò   Ò  sª   € ð �|ÞÜ�MŠMØWØòð ‰Þ	Ü˜‹~ˆä˜Ÿ™ U§[¡[×1Ñ1ÜØCÀDÇJÁJÈsÐPRÀOÐCTð U&Ø&+§k¡k°#°2Ð&6Ð%7Ð7SðUó
ð 	
ô
 ˜u¤c¨$£iÓ0€KÜ�{Ó#€FØ‰=Ðr    Úweightsr   .c                 óR  ^ ^• [        T 5      n[        T 5      n[        T SUS9nT R                  S   S:X  a  [	        S5      e[        [        T R                  S-
  5      5      nTc  UmO[        T[        5      (       a  T4m[        T[
        5      (       d  [	        S5      eTS:w  aX  [        T5      T R                  S-
  * :  d  [        T5      T R                  S-
  :”  a  [	        S	T S
T R                  S S  S35      e[        [        [        U 4S jT 5       5      5      5      m[        T 5      nT SS S S 24   nUc  UR                  U5      U-  n	OÍUR!                  XUS9nUS:  n
U(       d!  UR#                  U
5      (       a  [	        S5      eU(       a  UR%                  X£R&                  U5      n[)        T R                  S S UR                  5      (       d)  [	        SUR                   ST R                  S S  S35      eUS   U-  nUR                  U5      U-  n	[        U4S jU 5       5      nUT-   nUR+                  X�U5      nUR                  S [-        U5       S-   nUR/                  UR1                  Xï5      SS9n	UR2                  R5                  U	5      u  nnUS   $ )NT©Úforce_floatingr   r   z+Mean of an empty rotation set is undefined.r$   z+`axis` must be None, int, or tuple of ints.r}   rM   zaxis z* is out of bounds for rotation with shape r   r'   c              3   óF   >#   • U  H  oTR                   S -
  -  v •  M     g7fr|   )r&   )r   r�   r   s     €r   r�   Úmean.<locals>.<genexpr>  s   øé € Ð>º°A §¡¨Q¡Ö/ºùs   ƒ!.r*   z`weights` must be non-negative.zDExpected `weights` to be broadcastable to rotation shape, got shape z for rÝ   r(   c              3   ó6   >#   • U  H  oT;  d  M
  Uv •  M     g 7f)Nr}   )r   r€   r   s     €r   r�   rø     s   øé € Ð;¢˜A°d©]—a‘a¢ùs   ƒ	�	)r   rO   rO   éýÿÿÿr   ©.r   )r   r/   r	   rS   r7   Útuplerˆ   r&   Ú
isinstancer3   ÚminÚmaxÚsortedr@   r   r:   r   r2   r8   r9   r   Úmoveaxisr…   Úmeanr­   r0   Úeigh)r   ró   r   r   r   r+   Úall_axesrC   Úquat_expandÚKÚneg_weightsÚweighted_quatÚ	keep_axesÚ
axes_orderÚK_reorderedÚ	new_shaperH   Úvs   ` `               r   r  r  ê  s‡  ù€ ô
 
˜Ó	€BÜ�t‹_€FÜ˜4°¸Ñ<€EØ‡z�z�!�}˜ÓÜÐFÓGÐGô ”U˜4Ÿ9™9 q™=Ó)Ó*€HØ�|Ø‰Ü	�Dœ#×	Ñ	ØˆwˆÜ�dœE×"Ñ"ÜÐFÓGÐGàˆrƒz”s˜4“y T§Y¡Y°¡]Ð#3Ó3´s¸4³yÀDÇIÁIÐPQÁMÓ7RÜØ�D�6ÐCÀDÇJÁJÈsÐPRÀOÐCTÐTUÐVó
ð 	
ô ”œÔ>¹Ó>Ó>Ó?Ó@€Dä˜Ó€Dà�s˜D¢!�|Ñ$€KØ�Ø×Ñ Ó,¨{Ñ:‰à—*‘*˜W¸&�*ÐAˆØ ‘kˆÞ˜Ÿ™˜{×+Ñ+ÜÐ>Ó?Ð?Þð —h‘h˜{¯F©F°GÓ<ˆGä˜TŸZ™Z¨¨˜_¨g¯m©m×<Ñ<ÜØVØ—=‘=�/  t§z¡z°#°2 Ð&7°{ðDóð ð   Ñ0°;Ñ>ˆØ×Ñ Ó.°Ñ<ˆô Ô;¡Ó;Ó;€IØ˜TÑ!€JØ—+‘+˜a¨XÓ6€Kà×!Ñ!Ð"2¤C¨	£NÐ3°jÑ@€IØ
�‰�—
‘
˜;Ó2¸ˆÐ<€AØ�9‰9�>‰>˜!Ó�D€A€qØˆW‰:Ðr    ÚleftÚrightc           
      óÞ  • Uc  Uc  U S S 4$ [        U 5      n[        R                  " U SUS9n Uc  UR                  U 5      nUc  UR                  U 5      nU n[	        XC5      u  pV[	        X5      u  px[	        X#5      u  pšUSS S 2S S 4   USS S S 2S 4   -  U	SS S S S 24   -  nUR                  USS S 2S S S 24   U
SS S S 2S S 24   -  SS9nUSS S 2S S 4   USS S S 2S S 24   -  nUR                  USS S 2S S S 24   U
SS S S 2S S 24   -  SS9nUSS S S 2S 4   USS S 2S S S 24   -  nUR                  USS S 2S S S 24   USS S S 2S S 24   -  SS9nU	SS S S S 24   USS S 2S S 2S 4   -  nUSS S 2S S S 24   nUSS S S 2S S 24   nUR                  R                  UU5      nUR                  USS S 2S S 2S S S 24   U
SS S S S 2S S 24   -  SS9nUR                  X½-
  U-
  U-
  U-
  5      nUR                  UR                  USS5      UR                  S   S45      nUR                  UR                  UUR                  S   S45      SS9nUU
R                  S   -  nUU
R                  S   -  nUR                  UR                  UR                  S   5      S5      nUR                  US	5      nUUU4   nUR                  US	5      nUUU4   n[        U[        XB5      5      nUc  S nUc  S nUUU4$ )
NrM   r%   .r   r   r$   r   )r$   r   )r   r$   )r   r5   r6   Ú	ones_likeÚ_split_rotationÚsumr0   ÚcrossrŸ   r­   r  rS   rQ   Úaranger    )r   r  r  r   ÚpÚpsÚpvÚlsÚlvÚrsÚrvÚterm1ÚprvÚterm2ÚlrvÚterm3ÚlpvÚterm4Úlv_expandedÚpv_expandedÚcross_lpÚterm5ÚqsÚmax_indÚ	left_bestÚ
right_bestÚall_idxÚleft_idxÚ	right_idxÚreduceds                                 r   Úreducer0  )  sg  € ð
 �|˜™Ø�T˜4ÐÐô 
˜Ó	€BÜ�>Š>˜$ Q¨2Ñ.€DØ�|Ø�|‰|˜DÓ!ˆØ�}Ø—‘˜TÓ"ˆð 	€AÜ˜QÓ#�F€BÜ˜TÓ&�F€BÜ˜UÓ'�F€Bð ˆs’A�t˜TÐ!Ñ" R¨¨T²1°dÐ(:Ñ%;Ñ;¸bÀÀdÈDÒRSÐASÑ>TÑT€Eà
�&‰&��Cš˜D¢!�OÑ$ r¨#¨t²Qº¨/Ñ':Ñ:Àˆ&Ð
D€CØˆs’A�t˜TÐ!Ñ" S¨¨d²A²q¨Ñ%9Ñ9€Eà
�&‰&��Cš˜D¢!�OÑ$ r¨#¨t²Qº¨/Ñ':Ñ:Àˆ&Ð
D€CØˆs�Dš!˜TÐ!Ñ" S¨ªa°²q¨Ñ%9Ñ9€Eà
�&‰&��Cš˜D¢!�OÑ$ r¨#¨t²Qº¨/Ñ':Ñ:Àˆ&Ð
D€CØˆs�D˜$¢Ð!Ñ" S¨ªa²°D¨Ñ%9Ñ9€Eð
 �Sš!˜T¢1�_Ñ%€KØ�S˜$¢¢1�_Ñ%€KØ�y‰y�‰˜{¨KÓ8€Hà�F‰F�8˜C¢¢A tªQÐ.Ñ/°"°S¸$ÀÂaÊÐ5JÑ2KÑKÐRTˆFÐU€Eà	�‰�‘ Ñ%¨Ñ-°Ñ5Ó	6€BØ	�‰�B—K‘K  A qÓ)¨B¯H©H°Q©K¸Ð+<Ó	=€Bð �i‰i˜Ÿ
™
 2¨¯©°©°RÐ'8Ó9ÀˆiÐB€GØ˜2Ÿ8™8 A™;Ñ&€IØ˜2Ÿ8™8 A™;Ñ&€Jð �j‰j˜Ÿ™ 4§:¡:¨b¡>Ó2°GÓ<€GØ�z‰z˜) WÓ-€HØ�˜'Ð!Ñ"€DØ—
‘
˜: wÓ/€IØ�)˜WÐ$Ñ%€Eô ˜4¤¨aÓ!7Ó8€Gà�|Øˆ	Ø�}Øˆ
Ø�I˜zÐ)Ð)r    ÚpointsÚinversec                 ó$  • [        U 5      n[        U 5      nUS   n[        UR                  UR                  5      (       d,  [	        SU R                  S S  SUR                  S S  S35      eU(       a  UR                  U5      U-  S   $ XA-  S   $ )Nrp   zCannot broadcast r   z rotations to ú	 vectors.rª   )r   r¼   r   rS   r7   r:   )r   r1  r2  r   Úmats        r   Úapplyr6  t  sŸ   € Ü	˜Ó	€BÜ
�D‹/€Cð �IÑ€FÜ˜Ÿ™ F§L¡L×1Ñ1ÜØ §
¡
¨3¨B Ð0°¸v¿|¹|ÈCÈRÐ?PÐ>Qð Rð ó
ð 	
ö à×#Ñ# CÓ(¨6Ñ1°6Ñ:Ð:Ø‰L˜&Ñ!Ð!r    ÚvalueÚindexerc                 óV   • [         R                  " U 5      US4   R                  U5      $ ©N.)r5   r?   r@   )r   r7  r8  s      r   Úsetitemr;  …  s&   € ô �6Š6�$‹<˜ ˜Ñ%×)Ñ)¨%Ó0Ð0r    r×   rØ   Úreturn_sensitivityc                 óL  • [        U 5      n[        XSUS9nUR                  XS9nUR                  XS9n[        R                  " USUS9n [        R                  " USUS9nU R
                  S   S:w  a  [        SUR
                   35      eUR
                  S   S:w  a  [        S	UR
                   35      eU R
                  UR
                  :w  a&  [        S
UR
                   SUR
                   S35      eU R                  S:”  d  UR                  S:”  a&  [        SUR
                   SUR
                   S35      eU R
                  S   nUc%  UR                  U[        U 5      U R                  S9nO×UR                  U[        U 5      U R                  S9nUR                  S:w  a  [        SUR
                   S35      eUS:”  a2  UR
                  S   U:w  a  [        SUR
                  S    SU S35      eUS:  n	[        U	5      (       d!  UR                  U	5      (       a  [        S5      eUR                  X”R                  U5      nUS:X  a  UR                  S/5      OX$R                  :H  n
UR!                  UR#                  X R                  5      5      n[        U5      (       d)  US:”  a  [        S5      eUS:X  a  U(       a  [        S5      eUR                  US:„  UR                  U5      nUR                  U
SS9n[        U5      (       aY  [%        XU5      u  pÞn['        XU5      u  nnnUR                  UUU5      nUR                  UUU5      nUR                  UUU5      nO5UR                  U5      (       a  ['        XU5      u  pÞnO[%        XU5      u  pÞnXÞU4$ )NTrõ   ra   rM   r%   r   r)   z5Expected input `a` to have shape (3,) or (N, 3), got z5Expected input `b` to have shape (3,) or (N, 3), got z5Expected inputs `a` and `b` to have same shapes, got z and z respectively.z>Expected inputs `a` and `b` to have shape (3,) or (N, 3), got r   rÈ   r$   z2Expected `weights` to be 1 dimensional, got shape r'   zRExpected `weights` to have number of values equal to number of input vectors, got z values and r4  z)`weights` may not contain negative valuesz#Only one infinite weight is allowedzKCannot return sensitivity matrix with an infinite weight or one vector pairr   )r   r	   r   r5   r6   rS   r7   r&   Úonesr/   r+   r   r2   r8   r9   Úinfr  ÚastypeÚ_align_vectorsÚ_align_vectors_fixed)r×   rØ   ró   r<  r   r+   Ú
a_originalÚ
b_originalÚNÚnegative_weightsÚweight_is_infÚn_infÚ
inf_branchÚq_optÚrssdÚsensitivityÚ	q_opt_infÚrssd_infÚsensitivity_infs                      r   Úalign_vectorsrP  ‹  sœ  € ô 
˜Ó	€Bä˜1°¸Ñ<€EØ—‘˜A�Ð+€JØ—‘˜A�Ð+€JÜ�Š�z¨¨bÑ1€AÜ�Š�z¨¨bÑ1€AØ‡w�wˆr�{�aÓÜØCÀJ×DTÑDTÐCUÐVó
ð 	
ð 	‡w�wˆr�{�aÓÜØCÀJ×DTÑDTÐCUÐVó
ð 	
ð 	‡w�w�!—'‘'ÓÜðØ×%Ñ%Ð& e¨J×,<Ñ,<Ð+=¸^ðMó
ð 	
ð 	‡v�v�ƒz�Q—V‘V˜a“ZÜØLØ×ÑÐ   j×&6Ñ&6Ð%7°~ðGó
ð 	
ð 	
�‰�‰
€Að �Ø—'‘'˜!¤I¨a£L¸¿¹�'Ð@‰à—*‘*˜W¬Y°q«\ÀÇÁ�*ÐIˆØ�<‰<˜1ÓÜØDÀWÇ]Á]ÀOÐSTÐUóð ð ˆq‹5�g—m‘m AÑ&¨!Ó+Üð Ø '§¡¨aÑ 0Ð1°¸a¸SÀ	ðKóð ð # Q™;ÐÜÐ-×.Ñ.°2·6±6Ð:J×3KÑ3KÜÐHÓIÐIØ—(‘(Ð+¯V©V°WÓ=ˆð +,¨q«&�B—J‘J ˜vÔ&°gÇÁÑ6G€MØ�F‰F�2—9‘9˜]¯G©GÓ4Ó5€Eô ˜×ÑØ�1‹9ÜÐBÓCÐCØ�A‹:Ö,Üð5óð ð
 �h‰h�u˜q‘y "§&¡&¨'Ó2€Gà—‘˜¨B�Ð/€Jô �Z× Ñ Ü#1°!¸Ó#@Ñ ˆ�[Ü/CÀAÈ'Ó/RÑ,ˆ	�8˜_Ø—‘˜ Y°Ó6ˆØ�x‰x˜
 H¨dÓ3ˆØ—h‘h˜z¨?¸KÓH‰à�6‰6�*×ÑÜ';¸AÀ'Ó'JÑ$ˆE™ä'5°a¸GÓ'DÑ$ˆE˜Ø˜Ð#Ð#r    c           
      ó  • [        U 5      n[        U 5      nUS S 2S 4   U -  R                  U-  nUR                  R	                  U5      u  pgnUR                  R                  Xh-  5      S:  n	[        R                  " U5      S   R                  UR                  X—S   * US   5      5      n[        R                  " U5      SS S 2S4   R                  UR                  X–SS S 2S4   * USS S 2S4   5      5      nXh-  n
UR                  X#R                  US-  U S-  -   SS9-  SS9SUR                  USS9-  -
  nUR                  UR                  X³R                  SUS95      5      S	   nUS	   US
   -   US
   US   -   -  US   US	   -   -  nUS	   US
   -  US
   US   -  -   US   US	   -  -   nUR                  SU R                  US9nUR!                  U5      U-  Xï-  XUR                  -  -   -  n[#        U
5      nUUU4$ )Nr   rû   .r   rM   r   r$   r   rª   r«   r¬   r)   r*   )r   r/   ÚmTr0   r>   r1   r5   r?   r@   r8   r  ÚsqrtÚmaximumr�   r;   r+   r  rA   )r×   rØ   ró   r   r   ÚBÚuÚsÚvhÚneg_detÚCÚssdrK  ÚzetaÚkappar;   rL  rJ  s                     r   rA  rA  ì  s#  € Ü	˜Ó	€BÜ�q‹\€FØ	’�D�Ñ	˜AÑ	×!Ñ! AÑ%€AØ�y‰y�}‰}˜QÓ�H€Aˆ"ð �i‰i�m‰m˜A™FÓ# aÑ'€GÜ�Šˆq‹	�'Ñ×Ñ˜rŸx™x¨°G±*°¸aÀ¹jÓIÓJ€AÜ�Šˆq‹	�#’q˜"�*Ñ×!Ñ! "§(¡(¨7°sºA¸r°z±]°NÀAÀcÊ1ÈbÀjÁMÓ"RÓS€Aà	‰€Að
 �&‰&�Ÿ6™6 ! Q¡$¨¨A©¡+°B˜6Ð7Ñ7¸bˆ&Ð
AÀAÈÏÉØ	�ð IOð Iñ Eñ €Cð �7‰7�2—:‘:˜c§8¡8¨A°f 8Ð#=Ó>Ó?ÀÑG€Dð ˆf‰I˜˜&™	Ñ! a¨¡i°!°F±)Ñ&;Ñ<ÀÀ&Á	ÈAÈfÉIÑ@UÑV€DØˆf‰I˜˜&™	Ñ! A f¡I°°&±	Ñ$9Ñ9¸A¸f¹IÈÈ&É	Ñ<QÑQ€EØ
�&‰&�˜!Ÿ'™'¨&ˆ&Ð
1€CØ—'‘'˜'Ó" TÑ)¨U©[¸1¿t¹t¹8Ñ-CÑD€KÜ# AÓ&€EØ�$˜Ð#Ð#r    c                 óâ  • [        U 5      n[        U 5      nU R                  S   nUS:X  a  UR                  S/US9OX#R                  :H  nUR                  UR                  XcR                  5      5      n[        U5      (       d  [        U5      nUR                  X* SS9nUR                  X* SS9n	UR                  X'* SS9n
US   S   nU	S   S   n[        USSUS	9n[        USSUS	9n[        U5      (       d=  UR                  US:H  5      (       d  UR                  US:H  5      (       a  [        S
5      e[        R                   " U5      US:H     R#                  UR$                  5      n[        R                   " U5      US:H     R#                  UR$                  5      nX½-  nXÎ-  nUR&                  R)                  USSS S 24   USSS S 24   5      n[        USUS9nUR+                  UUR-                  USSS S 24   USSS S 24   -  SS95      nSnUR                  / SQUR.                  US9nUR0                  U-
  U:  nUR3                  UR5                  USSS S 24   5      5      nUR7                  UR9                  US:H  US   UR9                  US:H  US   * S5      5      UR9                  US:H  US   UR9                  US:H  US   * S5      5      UR9                  US:H  US   UR9                  US:H  US   * S5      5      /5      nUR9                  US:H  UU5      nUR9                  U[;        U[        UUS9-  UR0                  -  5      U5      nUR9                  UUR0                  U-
  U5      nUR9                  UU* U5      nUU-  nUR5                  U5      U:  nUSUS-  -   UU-  S-  S-  -   -  nUUR                  UUR.                  S9-   nUU-  UR=                  U5      -  nUR9                  UUU5      n[?        [;        U5      U5      nUSS 2S4   nU	SS 2S4   nU
SS  n[A        UU5      n UR&                  RC                  UR&                  R)                  U U5      U5      n!UR&                  RC                  U U5      UR&                  RC                  U U5      UR&                  RC                  UU5      -  -
  n"UR+                  UR-                  UU!-  5      UR-                  UU"-  5      5      n#[;        U#US   -  5      n$US:X  a  UO[?        U$U5      n%US:„  US   UR                  :H  -  U-  n&[        R                   " UU&5      R#                  SSUS9n'[A        U%U5      n(URE                  UR-                  U'U U(-
  S-  -  5      5      n)UR                  URG                  U5      SS9n&UR9                  U&UR$                  U%5      n%U%U)UR                  UR$                  US94$ )Nr   r$   Tr   )Úshiftr   )r   .r:  r   r^   z(Cannot align zero length primary vectors.rç   r   r_   )ç        r`  r`  rÇ   r*   )r   rM   rM   )r   r$   )r   r   )r   é   r¿   ih  ra   )r   r   )$r   r/   rS   r   r?  rQ   r@  Úuint8r   r3   r   r   r   r2   r7   r5   r?   r@   r9   r0   r  rÁ   r  r+   rÓ   ÚargminrŸ   rP   r8   rm   rc   r    r6  rq   rS  Úisnan)*r×   rØ   ró   r   r   rE  rG  Úinf_idxÚa_sortedÚb_sortedÚweights_sortedÚa_priÚb_priÚ
a_pri_normÚ
b_pri_normr  Ú
cross_normÚthetaÚ	toleranceÚq_flipÚflipr€   Úr_componentsÚrÚtheta2ri   Úr_small_scaleÚr_large_scaleÚq_priÚa_secÚb_secÚweights_secÚc_secÚsin_termÚcos_termÚphiÚq_secrJ  rB   Úweights_inf_zeroÚa_estrK  s*                                             r   rB  rB    sÈ  € ô 
˜Ó	€BÜ�q‹\€FØ	�‰�‰
€AØ9:¸a»�B—J‘J ˜v¨f�JÑ5ÀW×PVÑPVÑEV€Mð �i‰i˜Ÿ	™	 -·±Ó:Ó;€Gô �"�:‰:Ü�g“,ˆØ�w‰w�q ¨qˆwÐ1€HØ�w‰w�q ¨qˆwÐ1€HØ—W‘W˜W¨H¸1�WÐ=€Nà�VÑ˜YÑ'€EØ�VÑ˜YÑ'€EÜ ¨B¸À"ÑE€JÜ ¨B¸À"ÑE€JÜ˜×$Ñ$Ø�6‰6�* ‘/×"Ñ" b§f¡f¨Z¸1©_×&=Ñ&=ÜÐGÓHÐHô —’˜
Ó# J°!¡OÑ4×8Ñ8¸¿¹Ó@€JÜ—’˜
Ó# J°!¡OÑ4×8Ñ8¸¿¹Ó@€JàÑ€EØÑ€Eð �I‰I�O‰O˜E # qª! )Ñ,¨e°C¸ºA°IÑ.>Ó?€EÜ ¨B°2Ñ6€JØ�H‰H�Z §¡¨¨c°1²a¨iÑ(8¸5ÀÀaÊÀÑ;KÑ(KÐRT Ð!UÓV€EØ€IØ�Z‰ZÒ,°E·K±KÈˆZÐO€Fð �5‰5�5‰=˜9Ñ$€Dð 	�	‰	�"—&‘&˜˜s A¢q˜yÑ)Ó*Ó+€Að —8‘8à�H‰H�Q˜!‘V˜U 4™[¨"¯(©(°1¸±6¸EÀ$¹K¸<ÈÓ*KÓLØ�H‰H�Q˜!‘V˜U 4™[¨"¯(©(°1¸±6¸EÀ$¹K¸<ÈÓ*KÓLØ�H‰H�Q˜!‘V˜U 4™[¨"¯(©(°1¸±6¸EÀ$¹K¸<ÈÓ*KÓLð	
ó€Lð 	�‰�˜q‘ ,°Ó6€Aà�X‰X�dœK¨¬N¸1ÀÑ,DÑ(DÀrÇuÁuÑ(LÓMÈvÓV€FØ�H‰H�T˜2Ÿ5™5 5™=¨%Ó0€EØ�H‰H�T˜E˜6 5Ó)€Eð �U‰]€FØ—&‘&˜“- )Ñ+€KØ˜Q ¨!¡™^¨f°v©oÀÑ.AÀCÑ.GÑGÑH€Mð
 �B—J‘J˜{°%·+±+�JÐ>Ñ>€EØ˜E‘M B§F¡F¨5£MÑ1€MØ
�‰�˜m¨]Ó;€AÜœ Q›¨Ó0€Eð
 �Q‘R˜�WÑ€EØ�Q‘R˜�WÑ€EØ   Ð$€Kô �%˜Ó€Eð �y‰y×Ñ §	¡	§¡°°uÓ =¸uÓE€HØ�y‰y×Ñ  uÓ-Ø
�	‰	×Ñ˜ Ó&¨¯©×)9Ñ)9¸%ÀÓ)GÑGñ€Hð �(‰(�2—6‘6˜+¨Ñ0Ó1°2·6±6¸+ÈÑ:PÓ3QÓ
R€CÜ˜˜e F™mÑ+Ó,€Eð ˜!“V‰E¤¨e°UÓ!;€Eð
 �‰U�w˜q‘z R§V¡VÑ+Ñ,°Ñ=€Dô —v’v˜g tÓ,×0Ñ0°¸À"Ð0ÐEÐÜ�%˜‹O€EØ�7‰7�2—6‘6Ð*¨a°%©i¸AÑ-=Ñ=Ó>Ó?€Dà�6‰6�"—(‘(˜7Ó#¨"ˆ6Ð-€DØ�H‰H�T˜2Ÿ6™6 5Ó)€EØ�$˜Ÿ
™
 2§6¡6°&˜
Ð9Ð9Ð9r    Únc                 ón  • [        U 5      n[        U 5      n[        U5      (       a>  UR                  S:X  a  US   nOUR                  S:w  a  [        S5      e[        XSUS9u  p[        U5      (       a·  [        U[        U 5      -  5      nUR                  / U R                  S S QSP7U R                  US9n[        R                  " U5      S	   R                  S
5      nUR                  US:H  XT5      nUR                  US:H  [!        U 5      U5      nUR                  US
:H  X5      nU$ US:X  aU  UR                  / U R                  S S QSP7U R                  US9n[        R                  " U5      S	   R                  S
5      $ US:X  a  [!        U 5      $ US
:X  a  U $ [        U[        U 5      -  5      $ )N)r$   r   zArray exponent must be a scalarTrõ   r   rO   r*   rœ   r$   )r   r/   r   rS   r&   r7   r
   r   rm   rÅ   r�   r+   r5   r?   r@   r8   rå   )r   r‚  r   r   ÚresultÚidentitys         r   Úpowr†  ›  s“  € Ü	˜Ó	€BÜ�t‹_€Fô ˜×ÑØ�7‰7�d‹?Ø�!‘‰AØ�V‰V�q‹[ÜÐ>Ó?Ð?Ü˜T°T¸bÑA‰ˆô �Q×ÑÜ˜Q¤¨4£Ñ0Ó1ˆà—8‘8Ð1˜dŸj™j¨¨"˜oÐ1¨qÑ1¸¿¹ÈF�8ÐSˆÜ—6’6˜(Ó# FÑ+×/Ñ/°Ó2ˆØ—‘˜!˜q™& (Ó3ˆØ—‘˜!˜r™'¤3 t£9¨fÓ5ˆØ—‘˜!˜q™& $Ó/ˆØˆØˆAƒvØ—8‘8Ð1˜dŸj™j¨¨"˜oÐ1¨qÑ1¸¿¹ÈF�8ÐSˆÜ�vŠv�hÓ Ñ'×+Ñ+¨AÓ.Ð.ØˆBƒwÜ�4‹yÐØˆAƒvØˆÜ�qœ9 T›?Ñ*Ó+Ð+r    c                 óä   • [        U 5      n[        U SSUS9nUS:H  n[        U5      (       a   UR                  X1R                  U 5      n X-  $ UR                  U5      (       a  [        S5      eX-  $ )Nr   Tr^   r   z&Found zero norm quaternions in `quat`.)r   r   r   r8   r9   r2   r7   )r   r   Ú	quat_normÚ	zero_norms       r   r   r   »  su   € Ü	˜Ó	€BÜ˜t¨"°tÀÑC€IØ˜Q‘€IÜ�Y×ÑØ�x‰x˜	§6¡6¨4Ó0ˆð ÑÐð 
�‰�	×	Ñ	ÜÐAÓBÐBØÑÐr    c                 óÜ   • [        U 5      nU S   S:  nU S   S:H  nX#U S   S:  -  -  nX0S   S:H  -  nX$U S   S:  -  -  nX@S   S:H  -  nX%U S   S:  -  -  nUR                  US   U * U 5      $ )Nrœ   r   rª   r«   r¬   rp   )r   r8   )r   r   rB   Úzero_wÚzero_wxÚzero_wxys         r   r§   r§   Æ  s¥   € Ü	˜Ó	€BØ�‰<˜!Ñ€DØ�&‰\˜QÑ€FØ˜T &™\¨AÑ-Ñ.Ñ/€DØ˜V™¨Ñ)Ñ*€GØ˜d 6™l¨QÑ.Ñ/Ñ0€DØ˜v™,¨!Ñ+Ñ,€HØ˜t F™|¨aÑ/Ñ0Ñ1€DØ�8‰8�D˜‘O d U¨DÓ1Ð1r    c                 óH   • U S:X  a  gU S:X  a  gU S:X  a  g[        SU  35      e)Nr�   r   r®   r$   r¯   rM   z.Expected axis to be from ['x', 'y', 'z'], got )r7   r   s    r   rŠ   rŠ   Ò  s3   € Øˆsƒ{ØØ	�‹ØØ	�‹ØÜ
ÐEÀdÀVÐLÓ
MÐMr    Ún1Ún2Ún3rŽ   c                 ór  • [        U 5      nU(       a  X4OX14u  pUR                  R                  X5      nUR                  UR	                  X75      UR	                  X15      5      nUS:  n	UR                  U	S   U* U5      nUR                  X˜* U5      nUR                  U	S   U* U5      nU	n
UR                  UR                  US-  5      S   U-  UR                  US-  5      S   4SS9n[        X°5      nUS   nUR                  R	                  USS S24   U5      nUR                  R	                  USS S24   U5      nUR                  R	                  USS S24   U5      n[        US	S
X�XïUU5	      n[        R                  " U5      S   R                  UR                  U
US   * US   5      5      nU$ )Nr   rp   rM   r   r   rœ   .r)   Fr$   r«   )r   r0   r  rÁ   rq   r8   rd   rc   re   r    rÒ   r5   r?   r@   )r   r�  r�  r‘  rŽ   rÍ   r   Ún_crossÚlambrB   Úcorrect_setÚ	quat_lambÚq_transr×   rØ   rÙ   rÚ   rv   s                     r   rÞ   rÞ   Ü  s¼  € ô 
˜Ó	€BÞ"ˆb‰X¨¨�F€Bà�i‰i�o‰o˜bÓ%€GØ�8‰8�B—I‘I˜bÓ*¨B¯I©I°bÓ,=Ó>€Dð �!‰8€DØ	�‰�$�y‘/ B 3¨Ó	+€BØ�8‰8�D˜% Ó&€DØ�h‰h�t˜I‘¨¨°'Ó:€GØ€Kà—	‘	Ø	�‰��q‘Ó	˜)Ñ	$ rÑ	)¨2¯6©6°$¸±(Ó+;¸IÑ+FÐGÈbð ð €Iô ˜9Ó+€GØ�‰€AØ
�	‰	×Ñ˜  b q b Ñ)¨2Ó.€AØ
�	‰	×Ñ˜  b q b Ñ)¨2Ó.€AØ
�	‰	×Ñ˜  b q b Ñ)¨7Ó3€Aä˜ E¨1¨d°q¸QÐ@QÓR€FÜ�VŠV�F‹^˜FÑ#×'Ñ'Ø
�‰�˜v f™~˜o¨v°f©~Ó>ó€Fð €Mr    r�   c                 óê   • [        U5      n[        U5      n[        U S   US   XCS9n[        S[	        U 5      5       H2  n[        X   USU4   XCS9nU(       a  [        XW5      O
[        Xu5      nM4     U$ )Nr   rª   )r   r   r$   .)r   r/   Ú_make_elementary_quatrˆ   r…   r    )r�   rv   r�   r   r   r   r€   Úax_quats           r   r‹   r‹     ss   € Ü	˜Ó	 €BÜ�vÓ€FÜ   a¡¨&°©.ÀÑO€DÜ�1”c˜$“iÖ ˆÜ'¨©°¸¸Q¸±ÈÑVˆÞ.7Œ|˜DÔ*¼\È'Ó=XŠñ !ð €Kr    rf   c                 óF  • UR                  / UR                  QSP7UR                  US9n[        R                  " U5      S   R                  UR                  US-  5      5      n[        R                  " U5      SU 4   R                  UR                  US-  5      5      nU$ )NrO   r*   rœ   rÀ   .)r�   rS   r+   r5   r?   r@   re   rc   )r   rf   r   r   r   s        r   r™  r™    s†   € Ø�8‰8Ð%�e—k‘kÐ% 1Ñ%¨U¯[©[Àˆ8ÐH€DÜ�6Š6�$‹<˜Ñ×#Ñ# B§F¡F¨5°3©;Ó$7Ó8€DÜ�6Š6�$‹<˜˜T˜	Ñ"×&Ñ& r§v¡v¨e°c©kÓ':Ó;€DØ€Kr    rÖ   rÊ   r”  rÙ   rÚ   c	           
      ó(  • [        U5      n	[        U5      n
SnU	R                  XT5      nU	R                  Xv5      nU	R                  / UR                  QSP7UR
                  U
S9n[        R                  " U5      S   R                  SU	R                  U	R                  Xg5      U	R                  XE5      5      -  5      nU (       a  SOSnU (       a  SOSnU	R                  US   5      U:*  nU	R                  US   U	R                  -
  5      U:*  nUU-  ) nU(       d<  [        U5      (       d,  U	R                  U) 5      (       a  [        R                  " SSS9  U	R!                  USU-  SU-  U (       a  S	OS
-  5      n[        R                  " U5      S   R                  U5      nU	R!                  UXÍ-
  USU4   5      n[        R                  " U5      SU4   R                  U5      nU	R!                  UXÍ-   USU4   5      nU(       d3  UU-  n[        R                  " U5      S   R                  US   U-
  5      n[        R                  " U5      SU4   R                  U5      nXéR                  -   SU	R                  -  -  U	R                  -
  nU$ )Nrš   r)   r*   r«   rM   r   zlGimbal lock detected. Setting third angle to zero since it is not possible to uniquely determine all angles.rí   r   r$   rª   .)r   r/   rÁ   r�   rS   r+   r5   r?   r@   ÚhypotrŸ   rÓ   r   r2   rï   rð   r8   )rŽ   rÖ   rÊ   r”  r×   rØ   rÙ   rÚ   rÍ   r   r   ÚepsÚhalf_sumÚ	half_diffrv   Úangle_firstÚangle_thirdÚcase1Úcase2Úcase0Úa0Úa1Úa3s                          r   rÒ   rÒ     sA  € ô 
˜Ó	€BÜ�q‹\€FØ
€CØ�x‰x˜‹~€HØ—‘˜“€Ið �X‰X�m˜Ÿ™�m ‘m¨1¯7©7¸6ˆXÐB€Fä�VŠV�F‹^˜FÑ#×'Ñ'¨¨B¯H©H°R·X±X¸a³^ÀRÇXÁXÈaÃ^Ó,TÑ(TÓU€Fæ ‘! a€KÞ ‘! a€Kð �F‰F�6˜&‘>Ó" cÑ)€EØ�F‰F�6˜&‘> B§E¡EÑ)Ó*¨cÑ1€EØ�e‰mÐ€EÞ¤]°5×%9Ñ%9¸b¿f¹fÀeÀV¿n¹nÜ�Šðð ò		
ð 
�‰�%˜˜X™ q¨9¡}¾i¹ÈQÑ'OÓ	P€BÜ�VŠV�F‹^˜FÑ#×'Ñ'¨Ó+€Fð 
�‰�%˜Ñ-¨v°c¸;Ð6FÑ/GÓ	H€BÜ�VŠV�F‹^˜C Ð,Ñ-×1Ñ1°"Ó5€Fð 
�‰�%˜Ñ-¨v°c¸;Ð6FÑ/GÓ	H€BÞØ�$‰YˆÜ—’˜“ Ñ'×+Ñ+¨F°6©N¸TÑ,AÓBˆÜ�VŠV�F‹^˜C Ð,Ñ-×1Ñ1°"Ó5€Fà—u‘u‰n  R§U¡U¡Ñ+¨b¯e©eÑ3€FØ€Mr    r  r‘   c                 ó   • [        U 5      nUR                  R                  U SS S24   USS S24   5      nU S   US   -  US   U S   -  -   US   -   nU S   US   -  US   U S   -  -   US   -   nU S   US   -  US   U S   -  -   US   -   nU S   US   -  U S   US   -  -
  U S   US   -  -
  U S   US   -  -
  nUR                  XEXg/SS9nU$ )	N.r)   rœ   rª   r«   r¬   r   r   )r   r0   r  rP   )	r  r‘   r   r  ÚqxÚqyÚqzÚqwr   s	            r   r    r    W  s3  € Ü	˜Ó	€BØ�I‰I�O‰O˜A˜c 2 A 2˜g™J¨¨#¨r°¨r¨'©
Ó3€EØ	
ˆ6‰�Q�v‘YÑ	  6¡¨Q¨v©YÑ!6Ñ	6¸¸v¹Ñ	F€BØ	
ˆ6‰�Q�v‘YÑ	  6¡¨Q¨v©YÑ!6Ñ	6¸¸v¹Ñ	F€BØ	
ˆ6‰�Q�v‘YÑ	  6¡¨Q¨v©YÑ!6Ñ	6¸¸v¹Ñ	F€Bà	ˆ&‰	�A�f‘IÑØ
ˆF‰)�a˜‘iÑ
ñ	 à
ˆF‰)�a˜‘iÑ
ñ	 ð ˆF‰)�a˜‘iÑ
ñ	 ð ð �8‰8�R˜RÐ$¨2ˆ8Ð.€DØ€Kr    c                 óJ   • [         R                  " U SUS9n U S   U SS S24   4$ )NrM   r%   rû   .r   )r5   r6   )r‘   r   s     r   r  r  g  s/   € Ü�Š�q˜q RÑ(€AØˆW‰:�q˜˜c˜r˜c˜‘{Ð"Ð"r    c                 ó.   • U [         R                  S-  -  $ ©Ng     €f@©ÚnprÓ   ©rv   s    r   rb   rb   l  s   € Ø”R—U‘U˜U‘]Ñ#Ð#r    c                 ó.   • U S[         R                  -  -  $ r°  r±  r³  s    r   rÂ   rÂ   p  s   € Ø�UœRŸU™U‘]Ñ#Ð#r    )TT)F)NF)NN)DÚ__doc__r†   rï   Útypesr   Únumpyr²  Úscipy._lib._array_apir   r   r   r   r   r	   r
   r   Úscipy._lib._utilr   Úscipy._lib.array_api_compatr   r/   r   Úscipy._lib.array_api_extraÚ_libÚarray_api_extrar5   rž   r   rK   rA   rm   rt   Ústrr’   Úfloatr¤   r¨   r¼   rÅ   rÌ   rÛ   râ   rå   rê   rò   r3   rü   r  r0  r6  Úslicer;  rP  rA  rB  r†  r   r§   rŠ   rÞ   Úlistr‹   r™  rÒ   r    r  rb   rÂ   r}   r    r   Ú<module>rÂ     sÔ  ðñó 
Û Ý ã ÷	÷ 	ó 	õ +Ý ;Ý 8ß (Ð (ð
 Øðð
 òØ
ðàðð ðð
 ðð öñ$#+˜ð #+¨Tð #+¸eõ #+ðLC' Eð C'¨eô C'ñL˜ð ¨ð ¸õ ð.�%ð ˜Eô ñ �Cð   ð  °ð  À%õ  ðH EJñ=Ø
ð=Øð=Ø%*¨U¡]ð=Ø=Að=à
õ=ðB $)ðØBGòØ
ðØ ðØ;?ðà
öð�Eð ˜eô ñD�Eð  Dð °Uõ ð*.�ð .˜5ô .ð ,1ð$3ØOTò$3Ø
ð$3Øð$3Ø$(ð$3ØHLð$3à
ö$3ðV ð	2ð $ò2Ø
ð2à
ð2ð ð2ð ð	2ð ð2ð ö2ðj9ˆeð 9˜ô 9ð�Eð ˜eô ð KPñØ
ðØðØ%*¨T¡\ðØCGðà
õð4 !%Ø)-ñ<Ø
ð<à˜Ñð<ð �‰*�u˜S #˜X‘Ñ
&ð<ð õ	<ðB ØñH*Ø
ðH*à
�$‰,ðH*ð �4‰<ðH*ð ˆ5�%˜$‘, ¨¡Ð,Ñ-õ	H*ñV"�ð "˜uð "¨tð "Àõ "ð"1Ø
ð1Øð1Ø(+¨e©°lÑ(BÀTÑ(Ið1à
ô1ð RWñ^$Øð^$Øð^$Ø!&¨¡ð^$ØJNð^$à
ˆ5�%˜ÐÑõ^$ðB$�eð $ ð $°ð $¸%ÀÀuÈeÐ@SÑ:Tô $ðDJ:ØðJ:ØðJ:Ø!&ðJ:à
ˆ5�%˜ÐÑôJ:ðZ,ˆeð ,˜ ™ð ,¨%ô ,ð@ ð ¨%ô ð	2˜%ð 	2 Eô 	2ðN #ð N¨#ô Nð)Ø
ð)àð)ð 	ð)ð 	ð	)ð
 ð)ð ð)ð ô)ðX 4¨¡9ð °eð Èð ÐQVô ð ð ¨Eð À%ô ð;Øð;àð;ð ð;ð ð	;ð
 ð;ð ð;ð ð;ð ð;ð ð;ð ô;ð|�Eð ˜eð ¨ô ð #�uð # U¨5°%¨<Ñ%8ô #ð
$�Uð $˜uô $ð$�Uð $˜uõ $r    