Ë
    1Ò^jc­  ã                   ó~  — d Z ddlZddl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 ddlmZ ddlmZ ddlmZ ddlmc mZ 	 	 dZdd	œd
e	dededede	f
d„Zd[de	dede	fd„Zde	de	fd„Zd[de	dede	fd„Zde	de	fd„Zd[de de	dede	fd„Z!	 d[de	de de	dede	f
d„Z"	 d[dd	œd
e	dedede	fd „Z#d
e	de	fd!„Z$d[d
e	dede	fd"„Z%d
e	de	fd#„Z&	 d[dd$œd
e	de ded%ede	f
d&„Z'	 d[dd$œd
e	de	de ded%ede	fd'„Z(d
e	de	fd(„Z)d
e	de	fd)„Z*	 d\d
e	d*e	d+e+dz  dede	f
d,„Z,	 	 d]d
e	d-e
dz  d.de-z  e.e-d/f   z  de	fd0„Z/	 	 d]d
e	d1e	dz  d2e	dz  de.e	e	dz  e	dz  f   fd3„Z0d[d
e	d4e	d5ede	fd6„Z1d
e	d7e	d8e-e2z  ez  dz  de	fd9„Z3	 d\d:e	d;e	d-e	dz  d<ede.e	e	e	f   f
d=„Z4d:e	d;e	d-e	de.e	e	e	f   fd>„Z5d:e	d;e	d-e	de.e	e	e	f   fd?„Z6d
e	d@e+e	z  de	fdA„Z7d
e	de	fdB„Z8d
e	de	fdC„Z9d.e de-fdD„Z:d
e	dEe	dFe	dGe	dHed%ede	fdI„Z;de<e-   de	dJede	fdK„Z=d.e-dLe	de	fdM„Z>dHedNedOe-dPe+d:e	d;e	dQe	dRe	d%ede	fdS„Z?dTe	dUe	de	fdV„Z@dUe	de.e	e	f   fdW„ZAde	de	fdX„ZBde	de	fdY„ZCy)^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                ó�   — t        | «      }|r|j                  | dd¬«      } |r|s|j                  | d¬«      } |rt        | «      } | S )Néÿÿÿÿ©ÚaxisT©r   )r   ÚrollÚasarrayÚ_normalize_quaternion)r   r   r   r   Úxps        úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/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           	      óª  — t        | «      }t        | «      }|�s°|j                  j                  | «      dk  }t	        |«      }|s^|j                  |«      rMt        |j                  t        j                  |d|¬«      «      d   d   «      }t        d|› d| |df   › d�«      ‚|r |j                  |d   |j                  | «      } | |j                  | «      z  }|j                  d	| j                  |¬
«      }|j!                  t        j"                  ||d|¬«      d¬«      }	|rE|j                  j%                  | d¬«      \  }
}}|j                  |	d   | |
|z  «      } t+        | «      S |j!                  |	«      sQ|	 }|j                  j%                  | |   d¬«      \  }
}}t        j&                  | «      |   j)                  |
|z  «      } t+        | «      S )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   3   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à˜B×/Ñ/°Ó7Ñ7ˆØ�f‰f�Q˜fŸl™l°6ˆfÓ:ˆØŸ™Ü�K‰K˜ #¨E°bÔ9Àð ó 
ˆñ ð —y‘y—}‘} V¸5�}ÓA‰HˆAˆq�"Ø—X‘X˜m¨OÑ<¸fÀaÈ"ÁfÓMˆFô # 6Ó*Ð*ð —‘˜Ô&à!. ÐØ—y‘y—}‘} VÐ,=Ñ%>Èe�}ÓT‰HˆAˆq�"Ü—V‘V˜F“^Ð$5Ñ6×:Ñ:¸1¸r¹6ÓBˆFä" 6Ó*Ð*r    c                 óÔ  — t        | «      }t        | «      }| d   | d   z   | d   z   }|j                  | d   | d   | d   |gd¬«      }|j                  |dd¬«      }|j	                  g | j
                  dd	 ¢d
‘­| j                  |¬«      }|j                  d|d   z
  d| d   z  z   | d   | d   z   | d   | d   z   | d   | d   z
  gd¬«      }|j                  |dk(  ||«      }|j                  | d   | d   z   d|d   z
  d| d   z  z   | d   | d   z   | d   | d   z
  gd¬«      }|j                  |dk(  ||«      }|j                  | d   | d   z   | d   | d   z   d|d   z
  d| d   z  z   | d   | d   z
  gd¬«      }	|j                  |dk(  |	|«      }|j                  | d   | d   z
  | d   | d   z
  | d   | d   z
  d|d   z   gd¬«      }
|j                  |dk(  |
|«      }t        |«      S )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   Y   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                 óÊ  — t        | «      }| j                  d   dk7  rt        d| j                  › �«      ‚|rt        | «      n| } t	        | dd|¬«      }|dk  }|dz  }d|d	z  z
  |dz  d
z  z   }||j                  ||j                  ¬«      z   }|j                  |dz  «      |z  }|j                  |||«      }	|j                  | |	z  |j                  |dz  «      gd¬«      }
|
S )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ð
 ˜Ÿ
™
 ;°e·k±k˜
ÓBÑB€IØ—&‘&˜ ™Ó# iÑ/€KØ�H‰H�[ +¨{Ó;€EØ�9‰9�f˜u‘n b§f¡f¨U°Q©YÓ&7Ð8¸rˆ9ÓB€DØ€Kr    Úmrpc                 ó  — t        | «      }| j                  d   dk7  rt        d| j                  › �«      ‚|j                  j	                  | | d¬«      d   dz   }|j                  d| dd d…f   z  d|z
  gd¬«      }||z  }|S )	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                 óZ  ‡ — t        |«      }t        ‰ «      }|dk  s|dkD  rt        d‰ › �«      ‚t        j                  d‰ «      d u}t        j                  d‰ «      d u}|s|st        d‰ › �«      ‚t        ˆ fd„t        |dz
  «      D «       «      rt        d‰ › �«      ‚|rt        |«      }t        j                  |d|¬	«      }|j                  d
   |k7  rt        d|j                  d
   › d�«      ‚‰ j                  «       D �cg c]  }t        |«      ‘Œ }}t        |||«      }	|	S c c}w )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   ó:   •K  — | ]  }‰|   ‰|d z      k(  –— Œ y­w©r$   N© ©Ú.0Úiru   s     €r   ú	<genexpr>z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‘   À   sI  ø€ Ü	˜Ó	 €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Ð<Ü   v¨yÓ9€AØ€Hùò =s   ÄD(r�   Úorderc                 ó€  — t        | «      }t        | «      }|dv rd}n|dv rd}nt        d|› �«      ‚| j                  d   dk7  rt        d«      ‚t	        j
                  | d	|¬
«      } t	        j
                  |d|¬
«      }| j                  d   }|dk  s|dkD  rt        d|› �«      ‚| t        | dd|¬«      z  } |j                  | j                  d d |j                  |¬«      }|dkD  r7||j                  |j                  | ddd d …f   | ddd d …f   «      «      dkD  z  }|d	kD  r7||j                  |j                  | ddd d …f   | dd	d d …f   «      «      dkD  z  }t        |«      s|j                  |«      rt        d«      ‚|j                  |d   |j                  | «      } |rt        |«      }t!        | j                  d d |j                  «      r| j                  d   |j                  d   k7  r&t        d|j                  › d| j                  › d�«      ‚|j                  d d dz   }	|j                  |	|j"                  t        |«      ¬«      }
t	        j$                  |
«      d   j'                  d«      }
t)        |«      D ]8  }t+        |d|d f   | d|d d …f   z  «      }|rt-        ||
«      nt-        |
|«      }
Œ: |
S )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ÜÐ?Ó@Ð@à�x‰xÐ+¨OÑ<¸b¿f¹fÀdÓKˆáÜ˜&Ó!ˆô ˜$Ÿ*™* S b˜/¨6¯<©<Ô8Ø�:‰:�b‰>˜VŸ\™\¨"Ñ-Ò-äØ=¸f¿l¹l¸^ð LØ—:‘:�,˜fð&ó
ð 	
ð
 �l‰l˜3˜BÐ $Ñ&€GØ
�‰� §¡´Y¸vÓ5FˆÓG€AÜ�‰ˆq‹	�&Ñ×Ñ˜aÓ €Aä�8‹_ò FˆÜ˜  Q¨ Ñ-°°S¸!ºQ°Y±Ñ?Ó@ˆÙ#,ŒL˜˜QÔ´,¸qÀ"Ó2E‰ðFð €Hr    Ú	canonicalc                ób   — t        | «      }|rt        | «      } |r|j                  | dd¬«      } | S )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           
      ó®  — t        | «      }| d   }| d   }| d   }| d   }||z  }||z  }||z  }||z  }	||z  }
||z  }||z  }||z  }||z  }||z  }||z
  |z
  |	z   d|
|z
  z  d||z   z  d|
|z   z  | |z   |z
  |	z   d||z
  z  d||z
  z  d||z   z  | |z
  |z   |	z   g	}|j                  |j                  |d¬«      g | j                  d d ¢d‘d‘­«      }|S )	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»   .  sH  € Ü	˜Ó	€BØˆV‰€AØˆV‰€AØˆV‰€AØˆV‰€Aà	
ˆQ‰€BØ	
ˆQ‰€BØ	
ˆQ‰€BØ	
ˆQ‰€Bà	
ˆQ‰€BØ	
ˆQ‰€BØ	
ˆQ‰€BØ	
ˆQ‰€BØ	
ˆQ‰€BØ	
ˆQ‰€Bð 	ˆR‰�"‰�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                 ó–  — t        | «      }t        | «      } t        | dd d…f   dd|¬«      }d|j                  || d   d   «      z  }|d	k  }|dz  }d|d
z  z   d|dz  z  dz  z   }|j	                  |dz  «      |j                  ||j                  ¬«      z   }||z  }	|j                  |||	«      }
|rt        |
«      }
|
| dd d…f   z  }|S )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Ä   P  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ÙÜ˜“ˆØ�T˜#˜r ˜r˜'‘]Ñ"€FØ€Mr    c                 óÌ   — t        | «      }|j                  dt        | «      | j                  ¬«      }|j	                  | d   dk  d|«      }d|| d   z  z   }|| dd d…f   z  |z  S )Nç      ð?©r   r+   ).r)   Nr   r   .r)   )r   r   r/   r+   r8   )r   r   ÚoneÚsignÚdenominators        r   Úas_mrprË   e  st   € Ü	˜Ó	€BØ
�*‰*�S¤¨4£¸¿
¹
ˆ*Ó
C€CØ�8‰8�D˜Ñ&¨Ñ*¨B°Ó4€DØ˜˜t LÑ1Ñ1Ñ1€KØ�$�s˜B˜Q˜B�w‘-Ñ +Ñ-Ð-r    )Úsuppress_warningsrÌ   c                óò  ‡— t        | «      }t        ‰«      dk7  rt        d‰› d�«      ‚t        j                  d‰«      d u}t        j                  d‰«      d u}|s|st        d‰› �«      ‚t        ˆfd„t        d«      D «       «      rt        d	‰› �«      ‚t        | «      }‰j                  «       D �cg c]  }t        |«      ‘Œ }	}|r|	n|	d d d
…   }	|	\  }
}}|
|k(  }|rd|
z
  |z
  n|}|j                  ||¬«      }|j                  |
|z
  ||z
  z  ||
z
  z  dz  | j                  |¬«      }|j                  || d   | d   | d|f   z
  «      }|j                  || d|
f   | d|
f   | d|f   |z  z   «      }|j                  || d|f   | d|f   | d   z   «      }|j                  || d|f   |z  | d|f   |z  | d|
f   z
  «      }t        ||||j                  dz  |||||«	      }|rt        |«      S |S c c}w )Nr)   úExpected 3 axes, got r'   rx   ry   rz   c              3   ó:   •K  — | ]  }‰|   ‰|d z      k(  –— Œ y­wr|   r}   r~   s     €r   r�   zas_euler.<locals>.<genexpr>|  s"   øè ø€ Ò
2 Aˆ3ˆq‰6�S˜˜Q™‘ZÕÑ
2ù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Ù   m  sE  ø€ ô 
˜Ó	€Bô ˆ3ƒx�1‚}ÜÐ0°°°QÐ7Ó8Ð8Ü—‘˜¨#Ó.°dÐ:€IÜ—‘˜¨#Ó.°dÐ:€IÙ™ÜðØ�%ðó
ð 	
ô Ó
2¬¨q«Ô
2Ô2ÜÐJÈ3È%ÐPÓQÐQä�t‹_€FØ03·	±	³Ö<¨1Ô# AÕ&Ð<€DÐ<Ù‰4 $¡t¨ t¡*€DØ�G€A€qˆ!Ø�Q‘€IÙˆˆA‰�Š	 A€Aà�:‰:�i¨ˆ:Ó/€DØ�:‰:�q˜1‘u  Q¡Ñ'¨1¨q©5Ñ1°QÑ6¸d¿j¹jÐQWˆ:ÓX€Dà
�‰��t˜F‘| T¨&¡\°D¸¸a¸±LÑ%@ÓA€AØ
�‰��t˜C ˜F‘| T¨#¨q¨&¡\°D¸¸a¸±LÀ4Ñ4GÑ%GÓH€AØ
�‰��t˜C ˜F‘| T¨#¨q¨&¡\°D¸±LÑ%@ÓA€AØ
�‰��t˜C ˜F‘| dÑ*¨D°°a°©L¸4Ñ,?À$ÀsÈAÀvÁ,Ñ,NÓO€AäØ�9˜d B§E¡E¨A¡I¨q°!°Q¸Ð;Ló€Fñ  'Œ8�FÓÐ2¨FÐ2ùò# =s   Â4G4c          
      ó8  — t        | «      }|dv rd}n|dv rd}nt        d|› �«      ‚|j                  d   dk7  rt        d|j                  › d	�«      ‚|j                  d
   dk7  rt        d«      ‚t        |j                  d d | j                  d d
 «      s&t        d|j                  › d| j                  › d�«      ‚|t	        |d
d|¬«      z  }|j                  |ddd d …f   |ddd d …f   «      }|j                  |ddd d …f   |ddd d …f   «      }|dk\  |dk\  z  }	t        |	«      r!|j                  |	d   |j                  |«      }n|j                  |	«      rt        d«      ‚t        | |ddd d …f   |ddd d …f   |ddd d …f   ||«      }
|rt        |
«      }
|
S )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                 ó\   — t        j                  | «      dd d…f   j                  dd¬«      S )N.r)   r   Tr   )r5   r?   Úmultiply)r   s    r   Úinvrã   É  s-   € Ü�6‰6�$‹<˜˜R˜a˜R˜Ñ ×)Ñ)¨"°4Ð)Ó8Ð8r    c                 ó˜   — t        | «      }t        | dd d…f   d|¬«      }|j                  | d   «      }d|j                  ||«      z  }|S )N.r)   r   ©r   r   r›   rM   )r   r   rž   rÀ   )r   r   Úsin_qÚcos_qrv   s        r   Ú	magnituderè   Í  sR   € Ü	˜Ó	€BÜ˜4  R a R ™=¨r°bÔ9€EØ�F‰F�4˜‘<Ó €EØ�—‘˜% Ó'Ñ'€FØ€Mr    Úotherr,   c                 ó:  — |€|rt        j                  dd¬«       d}n|rt        |«      }t        | j                  |j                  «      s,t        d| j                  d d › d|j                  d d › d�«      ‚t        |t        | «      «      }t        |«      }||k  S )	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ÜØCÀDÇJÁJÈsÐPRÀOÐCTð U&Ø&+§k¡k°#°2Ð&6Ð%7Ð7SðUó
ð 	
ô
 ˜u¤c¨$£iÓ0€KÜ�{Ó#€FØ�D‰=Ðr    Úweightsr   .c                 ó   ‡ ‡— t        ‰ «      }t        ‰ «      }t        ‰ d|¬«      }‰ j                  d   dk(  rt	        d«      ‚t        t        ‰ j                  dz
  «      «      }‰€|Šnt        ‰t        «      r‰fŠt        ‰t
        «      st	        d«      ‚‰dk7  rVt        ‰«      ‰ j                  dz
   k  st        ‰«      ‰ j                  dz
  kD  rt	        d	‰› d
‰ j                  d d › d�«      ‚t        t        t        ˆ fd„‰D «       «      «      «      Št        ‰ «      }‰ dd d d …f   }|€|j                  |«      |z  }	n¾|j!                  |||¬«      }|dk  }
|s|j#                  |
«      rt	        d«      ‚|r|j%                  |
|j&                  |«      }t)        ‰ j                  d d |j                  «      s)t	        d|j                  › d‰ j                  d d › d�«      ‚|d   |z  }|j                  |«      |z  }	t        ˆfd„|D «       «      }|‰z   }|j+                  |	||«      }|j                  d t-        |«       dz   }|j/                  |j1                  ||«      d¬«      }	|j2                  j5                  |	«      \  }}|d   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   óB   •K  — | ]  }|‰j                   d z
  z  –— Œ y­wr|   )r&   )r   rŽ   r   s     €r   r�   zmean.<locals>.<genexpr>  s   øè ø€ Ò>°A˜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   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­w)Nr}   )r   r€   r   s     €r   r�   zmean.<locals>.<genexpr>"  s   øè ø€ Ò;˜A¨Q°dª]”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¨E¸&�*ÓAˆØ ‘kˆÙ˜Ÿ™˜{Ô+ÜÐ>Ó?Ð?Ùð —h‘h˜{¨B¯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           
      ó  — |€|€| d d fS t        | «      }t        j                  | d|¬«      } |€|j                  | «      }|€|j                  | «      }| }t	        ||«      \  }}t	        ||«      \  }}t	        ||«      \  }	}
|dd d …d d f   |dd d d …d f   z  |	dd d d d …f   z  }|j                  |dd d …d d d …f   |
dd d d …d d …f   z  d¬«      }|dd d …d d f   |dd d d …d d …f   z  }|j                  |dd d …d d d …f   |
dd d d …d d …f   z  d¬«      }|dd d d …d f   |dd d …d d d …f   z  }|j                  |dd d …d d d …f   |dd d d …d d …f   z  d¬«      }|	dd d d d …f   |dd d …d d …d f   z  }|dd d …d d d …f   }|dd d d …d d …f   }|j                  j                  ||«      }|j                  |dd d …d d …d d d …f   |
dd d d d …d d …f   z  d¬«      }|j                  ||z
  |z
  |z
  |z
  «      }|j                  |j                  |dd«      |j                  d   df«      }|j                  |j                  ||j                  d   df«      d¬«      }||
j                  d   z  }||
j                  d   z  }|j                  |j                  |j                  d   «      d«      }|j                  |d	«      }|||f   }|j                  |d	«      }|||f   }t        |t        ||«      «      }|€d }|€d }|||fS )
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   Úreducer-  ,  sw  € ð
 €|˜˜Ø�T˜4ÐÐô 
˜Ó	€BÜ�>‰>˜$ Q¨2Ô.€DØ€|Ø�|‰|˜DÓ!ˆØ€}Ø—‘˜TÓ"ˆð 	€AÜ˜Q Ó#�F€BˆÜ˜T 2Ó&�F€BˆÜ˜U BÓ'�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                 ó  — t        | «      }t        | «      }|d   }t        |j                  |j                  «      s,t	        d| j                  d d › d|j                  d d › d�«      ‚|r|j                  |«      |z  d   S ||z  d   S )Nrp   zCannot broadcast r   z rotations to ú	 vectors.r©   )r   r»   r   rS   r7   r:   )r   r.  r/  r   Úmats        r   Úapplyr3  w  sž   € Ü	˜Ó	€BÜ
�D‹/€Cð �IÑ€FÜ˜Ÿ™ F§L¡LÔ1ÜØ §
¡
¨3¨B Ð0°¸v¿|¹|ÈCÈRÐ?PÐ>Qð Rð ó
ð 	
ñ à×#Ñ# CÓ(¨6Ñ1°6Ñ:Ð:Ø�&‰L˜&Ñ!Ð!r    ÚvalueÚindexerc                 óT   — t        j                  | «      |df   j                  |«      S ©N.)r5   r?   r@   )r   r4  r5  s      r   Úsetitemr8  ˆ  s&   € ô �6‰6�$‹<˜ ˜Ñ%×)Ñ)¨%Ó0Ð0r    rÕ   rÖ   Úreturn_sensitivityc                 ó@  — t        | «      }t        | |d|¬«      }|j                  | |¬«      }|j                  ||¬«      }t        j                  |d|¬«      } t        j                  |d|¬«      }| j
                  d   dk7  rt        d|j
                  › �«      ‚|j
                  d   dk7  rt        d	|j
                  › �«      ‚| j
                  |j
                  k7  r&t        d
|j
                  › d|j
                  › d�«      ‚| j                  dkD  s|j                  dkD  r&t        d|j
                  › d|j
                  › d�«      ‚| j
                  d   }|€(|j                  |t        | «      | j                  ¬«      }nÎ|j                  |t        | «      | j                  ¬«      }|j                  dk7  rt        d|j
                  › d�«      ‚|dkD  r1|j
                  d   |k7  rt        d|j
                  d   › d|› d�«      ‚|dk  }	t        |	«      s|j                  |	«      rt        d«      ‚|j                  |	|j                  |«      }|dk(  r|j                  dg«      n||j                  k(  }
|j!                  |j#                  |
| j                  «      «      }t        |«      s"|dkD  rt        d«      ‚|dk(  r|rt        d«      ‚|j                  |dkD  |j                  |«      }|j                  |
d¬«      }t        |«      r\t%        | ||«      \  }}}t'        | ||«      \  }}}|j                  |||«      }|j                  |||«      }|j                  |||«      }n4|j                  |«      rt'        | ||«      \  }}}nt%        | ||«      \  }}}|||fS )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 r1  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ñ   r9  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_vectorsrM  Ž  s©  € ô 
˜Ó	€Bä˜1˜a°¸Ô<€EØ—‘˜A U�Ó+€JØ—‘˜A U�Ó+€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ÜÐHÓIÐIØ—(‘(Ð+¨R¯V©V°WÓ=ˆð +,¨qª&�B—J‘J ˜vÔ&°gÀÇÁÑ6G€MØ�F‰F�2—9‘9˜]¨A¯G©GÓ4Ó5€Eô ˜ÔØ�1Š9ÜÐBÓCÐCØ�AŠ:Ñ,Üð5óð ð
 �h‰h�u˜q‘y "§&¡&¨'Ó2€Gà—‘˜¨B�Ó/€Jô �ZÔ Ü#1°!°Q¸Ó#@Ñ ˆˆt�[Ü/CÀAÀqÈ'Ó/RÑ,ˆ	�8˜_Ø—‘˜ Y°Ó6ˆØ�x‰x˜
 H¨dÓ3ˆØ—h‘h˜z¨?¸KÓH‰à�6‰6�*ÔÜ';¸A¸qÀ'Ó'JÑ$ˆE�4™ä'5°a¸¸GÓ'DÑ$ˆE�4˜Ø�$˜Ð#Ð#r    c           
      ó8  — t        | «      }t        | «      }|d d …d f   | z  j                  |z  }|j                  j	                  |«      \  }}}|j                  j                  ||z  «      dk  }	t        j                  |«      d   j                  |j                  |	|d    |d   «      «      }t        j                  |«      dd d …df   j                  |j                  |	|dd d …df    |dd d …df   «      «      }||z  }
|j                  ||j                  |dz  | dz  z   d¬«      z  d¬«      d|j                  |d¬«      z  z
  }|j                  |j                  ||j                  d|¬«      «      «      d	   }|d	   |d
   z   |d
   |d   z   z  |d   |d	   z   z  }|d	   |d
   z  |d
   |d   z  z   |d   |d	   z  z   }|j                  d| j                  |¬«      }|j!                  |«      |z  ||z  ||j                  z  z   z  }t#        |
«      }|||fS )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ÚssdrH  ÚzetaÚkappar;   rI  rG  s                     r   r>  r>  ï  s5  € Ü	˜Ó	€BÜ�q‹\€FØ	’�D�Ñ	˜AÑ	×!Ñ! AÑ%€AØ�y‰y�}‰}˜QÓ�H€A€qˆ"ð �i‰i�m‰m˜A ™FÓ# aÑ'€GÜ�‰ˆq‹	�'Ñ×Ñ˜rŸx™x¨°!°G±*°¸aÀ¹jÓIÓJ€AÜ�‰ˆq‹	�#’q˜"�*Ñ×!Ñ! "§(¡(¨7°Q°sºA¸r°z±]°NÀAÀcÊ1ÈbÀjÁMÓ"RÓS€Aà	ˆB‰€Að
 �&‰&�˜2Ÿ6™6 ! Q¡$¨¨A©¡+°B˜6Ó7Ñ7¸bˆ&Ó
AÀAÈÏÉØ	�ð IOó Iñ Eñ €Cð �7‰7�2—:‘:˜c 2§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°S©[¸1¸q¿t¹t¹8Ñ-CÑD€KÜ# AÓ&€EØ�$˜Ð#Ð#r    c                 ó  — t        | «      }t        | «      }| j                  d   }|dk(  r|j                  dg|¬«      n||j                  k(  }|j                  |j                  ||j                  «      «      }t        |«      st        |«      }|j                  | | d¬«      }|j                  || d¬«      }	|j                  || d¬«      }
|d   d   }|	d   d   }t        |dd|¬	«      }t        |dd|¬	«      }t        |«      s3|j                  |dk(  «      s|j                  |dk(  «      rt        d
«      ‚t        j                   |«      |dk(     j#                  |j$                  «      }t        j                   |«      |dk(     j#                  |j$                  «      }||z  }||z  }|j&                  j)                  |ddd d …f   |ddd d …f   «      }t        |d|¬«      }|j+                  ||j-                  |ddd d …f   |ddd d …f   z  d¬«      «      }d}|j                  g d¢|j.                  |¬«      }|j0                  |z
  |k  }|j3                  |j5                  |ddd d …f   «      «      }|j7                  |j9                  |dk(  |d   |j9                  |dk(  |d    d«      «      |j9                  |dk(  |d   |j9                  |dk(  |d    d«      «      |j9                  |dk(  |d   |j9                  |dk(  |d    d«      «      g«      }|j9                  |dk(  ||«      }|j9                  |t;        |t        ||¬«      z  |j0                  z  «      |«      }|j9                  ||j0                  |z
  |«      }|j9                  || |«      }||z  }|j5                  |«      |k  }|d|dz  z   ||z  dz  dz  z   z  }||j                  ||j.                  ¬«      z   }||z  |j=                  |«      z  }|j9                  |||«      }t?        t;        |«      |«      }|dd …df   }|	dd …df   }|
dd  }tA        ||«      } |j&                  jC                  |j&                  j)                  | |«      |«      }!|j&                  jC                  | |«      |j&                  jC                  | |«      |j&                  jC                  ||«      z  z
  }"|j+                  |j-                  ||!z  «      |j-                  ||"z  «      «      }#t;        |#|d   z  «      }$|dk(  r|nt?        |$|«      }%|dkD  |d   |j                  k(  z  |z  }&t        j                   ||&«      j#                  dd|¬«      }'tA        |%|«      }(|jE                  |j-                  |'| |(z
  dz  z  «      «      })|j                  |jG                  |«      d¬«      }&|j9                  |&|j$                  |%«      }%|%|)|j                  |j$                  |¬«      fS )Nr   r$   Tr   )Úshiftr   )r   .r7  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Ÿ   r3  rq   rP  Úisnan)*rÕ   rÖ   rñ   r   r   rB  rD  Ú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_secrG  rB   Úweights_inf_zeroÚa_estrH  s*                                             r   r?  r?    sÌ  € ô 
˜Ó	€BÜ�q‹\€FØ	�‰�‰
€AØ9:¸aº�B—J‘J ˜v¨f�JÔ5ÀWÐPR×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¨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à�JÑ€EØ�JÑ€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                 óf  — t        | «      }t        | «      }t        |«      rA|j                  dk(  r|d   }n|j                  dk7  rt        d«      ‚t        | |d|¬«      \  } }t        |«      r»t        |t        | «      z  «      }|j                  g | j                  d d ¢d‘­| j                  |¬«      }t        j                  |«      d	   j                  d
«      }|j                  |dk(  ||«      }|j                  |dk(  t!        | «      |«      }|j                  |d
k(  | |«      }|S |dk(  rW|j                  g | j                  d d ¢d‘­| j                  |¬«      }t        j                  |«      d	   j                  d
«      S |dk(  rt!        | «      S |d
k(  r| S t        |t        | «      z  «      S )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 1°T¸bÔA‰ˆˆaô �QÔÜ˜Q¤¨4£Ñ0Ó1ˆà—8‘8Ð1˜dŸj™j¨¨"˜oÐ1¨qÑ1¸¿¹ÈF�8ÓSˆÜ—6‘6˜(Ó# FÑ+×/Ñ/°Ó2ˆØ—‘˜!˜q™& (¨FÓ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                 óÜ   — t        | «      }t        | dd|¬«      }|dk(  }t        |«      r"|j                  ||j                  | «      } | |z  S |j                  |«      rt        d«      ‚| |z  S )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˜	 2§6¡6¨4Ó0ˆð �)ÑÐð 
�‰�	Ô	ÜÐAÓBÐBØ�)ÑÐr    c                 óæ   — t        | «      }| d   dk  }| d   dk(  }||| d   dk  z  z  }|| d   dk(  z  }||| d   dk  z  z  }|| d   dk(  z  }||| d   dk  z  z  }|j                  |d   |  | «      S )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Ø�6˜T &™\¨AÑ-Ñ.Ñ/€DØ˜˜V™¨Ñ)Ñ*€GØ�7˜d 6™l¨QÑ.Ñ/Ñ0€DØ˜$˜v™,¨!Ñ+Ñ,€HØ�8˜t F™|¨aÑ/Ñ0Ñ1€DØ�8‰8�D˜‘O d U¨DÓ1Ð1r    c                 óB   — | dk(  ry| dk(  ry| dk(  ryt        d| › �«      ‚)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                 ó€  — t        | «      }|r||fn||f\  }}|j                  j                  ||«      }|j                  |j	                  ||«      |j	                  ||«      «      }|dk  }	|j                  |	d   | |«      }|j                  |	| |«      }|j                  |	d   | |«      }|	}
|j                  |j                  |dz  «      d   |z  |j                  |dz  «      d   fd¬«      }t        || «      }|d   }|j                  j	                  |dd d…f   |«      }|j                  j	                  |dd d…f   |«      }|j                  j	                  |dd d…f   |«      }t        |d	d
||||||«	      }t        j                  |«      d   j                  |j                  |
|d    |d   «      «      }|S )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¨¨R¨�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˜4˜% Ó&€DØ�h‰h�t˜I‘¨¨°'Ó:€GØ€Kà—	‘	Ø	�‰��q‘Ó	˜)Ñ	$ rÑ	)¨2¯6©6°$¸±(Ó+;¸IÑ+FÐGÈbð ó €Iô ˜9 dÓ+€GØ�‰€AØ
�	‰	×Ñ˜  b q b Ñ)¨2Ó.€AØ
�	‰	×Ñ˜  b q b Ñ)¨2Ó.€AØ
�	‰	×Ñ˜  b q b Ñ)¨7Ó3€Aä˜ E¨1¨d°A°q¸!¸QÐ@QÓR€FÜ�V‰V�F‹^˜FÑ#×'Ñ'Ø
�‰�˜v f™~˜o¨v°f©~Ó>ó€Fð €Mr    rŒ   c                 óò   — t        |«      }t        |«      }t        | d   |d   ||¬«      }t        dt	        | «      «      D ]3  }t        | |   |d|f   ||¬«      }|rt        ||«      nt        ||«      }Œ5 |S )Nr   r©   )r   r   r$   .)r   r/   Ú_make_elementary_quatr‡   r„   rŸ   )r�   rv   rŒ   r   r   r   r€   Úax_quats           r   rŠ   rŠ     s†   € Ü	˜Ó	 €BÜ�vÓ€FÜ   a¡¨&°©.ÀÈBÔO€DÜ�1”c˜$“iÓ ò YˆÜ'¨¨Q©°¸¸Q¸±ÈÐSUÔVˆÙ.7Œ|˜D 'Ô*¼\È'ÐSWÓ=X‰ðYð €Kr    rf   c                 óH  — |j                  g |j                  ¢d‘­|j                  |¬«      }t        j                  |«      d   j                  |j                  |dz  «      «      }t        j                  |«      d| f   j                  |j                  |dz  «      «      }|S )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	           
      óð  — t        |«      }	t        |«      }
d}|	j                  ||«      }|	j                  ||«      }|	j                  g |j                  ¢d‘­|j
                  |
¬«      }t        j                  |«      d   j                  d|	j                  |	j                  ||«      |	j                  ||«      «      z  «      }| rdnd}| rdnd}|	j                  |d   «      |k  }|	j                  |d   |	j                  z
  «      |k  }||z   }|s4t        |«      s)|	j                  | «      rt        j                  dd¬«       |	j!                  |d|z  d|z  | rd	nd
z  «      }t        j                  |«      d   j                  |«      }|	j!                  |||z
  |d|f   «      }t        j                  |«      d|f   j                  |«      }|	j!                  |||z   |d|f   «      }|s2||z  }t        j                  |«      d   j                  |d   |z
  «      }t        j                  |«      d|f   j                  |«      }||	j                  z   d|	j                  z  z  |	j                  z
  }|S )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Ð     sK  € ô 
˜Ó	€BÜ�q‹\€FØ
€CØ�x‰x˜˜1‹~€HØ—‘˜˜A“€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ÐQRÃ^Ó,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¸b¿f¹fÀeÀV¼nÜ�‰ðð õ		
ð 
�‰�%˜˜X™ q¨9¡}¹i¹ÈQÑ'OÓ	P€BÜ�V‰V�F‹^˜FÑ#×'Ñ'¨Ó+€Fð 
�‰�%˜ IÑ-¨v°c¸;Ð6FÑ/GÓ	H€BÜ�V‰V�F‹^˜C Ð,Ñ-×1Ñ1°"Ó5€Fð 
�‰�%˜ IÑ-¨v°c¸;Ð6FÑ/GÓ	H€BÙØ�$‰YˆÜ—‘˜“ Ñ'×+Ñ+¨F°6©N¸TÑ,AÓBˆÜ�V‰V�F‹^˜C Ð,Ñ-×1Ñ1°"Ó5€Fà�r—u‘u‰n  R§U¡U¡Ñ+¨b¯e©eÑ3€FØ€Mr    r  r�   c                 óª  — t        | «      }|j                  j                  | dd d…f   |dd d…f   «      }| d   |d   z  |d   | d   z  z   |d   z   }| d   |d   z  |d   | d   z  z   |d   z   }| d   |d   z  |d   | d   z  z   |d   z   }| d   |d   z  | d   |d   z  z
  | d   |d   z  z
  | d   |d   z  z
  }|j                  ||||gd¬«      }|S )	N.r)   r›   r©   rª   r«   r   r   )r   r0   r  rP   )	r  r�   r   r  ÚqxÚqyÚqzÚqwr   s	            r   rŸ   rŸ   Z  s7  € Ü	˜Ó	€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                 óN   — t        j                  | d|¬«      } | d   | dd d…f   fS )NrM   r%   rø   .r   )r5   r6   )r�   r   s     r   r  r  j  s/   € Ü�‰�q˜q RÔ(€AØˆW‰:�q˜˜c˜r˜c˜‘{Ð"Ð"r    c                 ó.   — | t         j                  dz  z  S ©Ng     €f@©ÚnprÑ   ©rv   s    r   rb   rb   o  s   € Ø”R—U‘U˜U‘]Ñ#Ð#r    c                 ó.   — | dt         j                  z  z  S r­  r®  r°  s    r   rÁ   rÁ   s  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._external.array_api_compatr   r/   r   Úscipy._external.array_api_extraÚ	_externalÚarray_api_extrar5   r�   r   rK   rA   rm   rt   Ústrr‘   r£   r§   r»   rÄ   rË   rÙ   rà   rã   rè   Úfloatrð   r3   rù   rÿ   r-  r3  Úslicer8  rM  r>  r?  rƒ  r   r¦   r‰   rÜ   ÚlistrŠ   r–  rÐ   rŸ   r  rb   rÁ   r}   r    r   ú<module>r¿     sÏ  ðñó 
Û Ý ã ÷	÷ 	ó 	õ +Ý @Ý =ß -Ð -ð Øðð
 òØ
ðàðð ðð
 ðð óñ$#+˜ð #+¨Tð #+¸eó #+ðLC' Eð C'¨eó C'ñL˜ð ¨ð ¸ó ð.�%ð ˜Eó ñ �Cð   ð  °ð  À%ó  ðH =Bñ=Ø
ð=Øð=Ø%*ð=Ø59ð=à
ó=ð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    