§
    '�’jþ°  ã                   ó°  — 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 	 	 d[d	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	e"z  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-d0f         z  de	fd1„Z/	 	 d^de	d2e	dz  d3e	dz  de.e	e	dz  e	dz  f         fd4„Z0d\de	d5e	d6ede	fd7„Z1de	d8e	d9e-e2z  ez  dz  de	fd:„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	dAe"e	z  de	fdB„Z7de	de	fdC„Z8de	de	fdD„Z9d/e de-fdE„Z:de	dFe	dGe	dHe	dIed&ede	fdJ„Z;de<e-         de	dKede	fdL„Z=d/e-dMe	de	fdN„Z>dIedOedPe-dQe"d;e	d<e	dRe	dSe	d&ede	fdT„Z?dUe	dVe	de	fdW„Z@dVe	de.e	e	f         fdX„ZAde	de	fdY„ZBde	de	fdZ„ZCdS )_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_objTF)Úscalar_firstÚquatÚ	normalizeÚcopyr   Úreturnc                ó°   — t          | ¦  «        }|r|                     | dd¬¦  «        } |r|s|                     | d¬¦  «        } |rt          | ¦  «        } | S )Néÿÿÿÿ©ÚaxisT©r   )r   ÚrollÚasarrayÚ_normalize_quaternion)r   r   r   r   Úxps        úRC:\Projects\DSCons\.venv\Lib\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                             | ¦  «        dk    }t	          |¦  «        }|sv|                     |¦  «        rat          |                     t          j	        |d|¬¦  «        ¦  «        d         d         ¦  «        }t          d|› d| |df         › d�¦  «        ‚|r"|                     |d         |j        | ¦  «        } | |                     | ¦  «        z  }|                     d	| j        |¬
¦  «        }|                     t          j        ||d|¬¦  «        d¬¦  «        }	|rA|j                             | d¬¦  «        \  }
}}|                     |	d         | |
|z  ¦  «        } nn|                     |	¦  «        sY|	 }|j                             | |         d¬¦  «        \  }
}}t          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   0   s  € Ý	˜Ñ	 Ô	 €BÝ�vÑÔ€Fàñ CØŒy�}Š}˜VÑ$Ô$¨Ò)ˆÝ˜TÑ"Ô"ˆàð 	E˜Ÿš˜t™œð 	EÝ�b—j’j¥¤°¸1ÀÐ!DÑ!DÔ!DÑEÔEÀaÔHÈÔKÑLÔLˆCÝð>Ø#&ð>ð >Ø*0°°c°Ô*:ð>ð >ð >ñô ð ð ð 	EØ—X’X˜d ?Ô3°R´V¸VÑDÔDˆFà˜B×/Ò/°Ñ7Ô7Ñ7ˆØ�fŠf�Q˜fœl°6ˆfÑ:Ô:ˆØŸšÝŒK˜ #¨E°bÐ9Ñ9Ô9Àð ñ 
ô 
ˆð ð 
	Cð ”y—}’} V¸5�}ÑAÔA‰HˆAˆq�"Ø—X’X˜m¨OÔ<¸fÀaÈ"ÁfÑMÔMˆFˆFØ—’˜Ñ&Ô&ð 	Cà!. ÐØ”y—}’} VÐ,=Ô%>Èe�}ÑTÔT‰HˆAˆq�"Ý”V˜F‘^”^Ð$5Ô6×:Ò:¸1¸r¹6ÑBÔBˆFå" 6Ñ*Ô*Ð*r    c                 ó   — t          | ¦  «        }t          | ¦  «        }| d         | d         z   | d         z   }|                     | d         | d         | d         |gd¬¦  «        }|                     |dd¬¦  «        }|                     g | j        dd	…         ¢d
‘R | j        |¬¦  «        }|                     d|d         z
  d| d         z  z   | d         | d         z   | d         | d         z   | d         | d         z
  gd¬¦  «        }|                     |dk    ||¦  «        }|                     | d         | d         z   d|d         z
  d| d         z  z   | d         | d         z   | d         | d         z
  gd¬¦  «        }|                     |dk    ||¦  «        }|                     | d         | d         z   | d         | d         z   d|d         z
  d| d         z  z   | d         | d         z
  gd¬¦  «        }	|                     |dk    |	|¦  «        }|                     | d         | d         z
  | d         | d         z
  | d         | d         z
  d|d         z   gd¬¦  «        }
|                     |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   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Ô8€FØ�8Š8Ð+�f”l 3 B 3Ô'Ð+¨Ð+Ð+°6´<Èˆ8ÑOÔ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k    rt          d| j        › �¦  «        ‚|rt          | ¦  «        n| } t	          | dd|¬¦  «        }|dk    }|dz  }d|d	z  z
  |dz  d
z  z   }||                     ||j        ¬¦  «        z   }|                     |dz  ¦  «        |z  }|                     |||¦  «        }	| 	                    | |	z  | 
                    |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ÒÐÝØL¸f¼lÐLÐLñ
ô 
ð 	
ð ")Ð4�X�fÑÔÐ¨f€Få˜6¨°T¸bÐAÑAÔA€EØ˜4’-€KØ�A‰X€FØ˜ ™Ñ# f¨a¡i°$Ñ&6Ñ6€Kð
 ˜Ÿ
š
 ;°e´k˜
ÑBÔBÑB€IØ—&’&˜ ™Ñ#Ô# iÑ/€KØ�HŠH�[ +¨{Ñ;Ô;€EØ�9Š9�f˜u‘n b§f¢f¨U°Q©YÑ&7Ô&7Ð8¸rˆ9ÑBÔB€DØ€Kr    Úmrpc                 ó  — t          | ¦  «        }| j        d         dk    rt          d| j        › �¦  «        ‚|j                             | | d¬¦  «        d         dz   }|                     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�„}˜ÒÐÝÐRÀsÄyÐRÐRÑSÔSÐSØ”)×"Ò" 3¨°"Ð"Ñ5Ô5°iÔ@À1ÑD€KØ—	’	˜1˜s 3¨¨¨ 7œ|Ñ+¨a°+©oÐ?Àb�	ÑIÔI€IØ�{Ñ"€DØ€Kr    ÚseqÚanglesc                 óŽ  ‡ — t          |¦  «        }t          ‰ ¦  «        }|dk     s|dk    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
         |k    rt          d|j
        d
         › d�¦  «        ‚d„ ‰                      ¦   «         D ¦   «         }t          |||¦  «        }|S )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   óB   •K  — | ]}‰|         ‰|d z            k    V — ŒdS ©r$   N© ©Ú.0Úiru   s     €r   ú	<genexpr>zfrom_euler.<locals>.<genexpr>Î   s4   øè è € Ð
=Ð
= Aˆ3ˆqŒ6�S˜˜Q™”ZÒÐ
=Ð
=Ð
=Ð
=Ð
=Ð
=r    ú/Expected consecutive axes to be different, got r%   r   zTExpected last dimension of `angles` to match number of sequence axes specified, got r'   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r}   ©Ú_elementary_basis_index©r   Úxs     r   ú
<listcomp>zfrom_euler.<locals>.<listcomp>Û   ó!   € Ð<Ð<Ð<¨1Õ# AÑ&Ô&Ð<Ð<Ð<r    )r   Úlenr7   ÚreÚmatchr2   Úrangerb   r5   r6   rS   ÚlowerÚ_elementary_quat_compose)	ru   rv   r\   r   Únum_axesÚ	intrinsicÚ	extrinsicÚaxesÚqs	   `        r   Ú
from_eulerr•   ½   sœ  ø€ Ý	˜Ñ	 Ô	 €BÝ�3‰xŒx€HØ�!‚|€|�x !’|�|Ýð7Ø14ð7ð 7ñ
ô 
ð 	
õ
 ”˜¨#Ñ.Ô.°dÐ:€IÝ”˜¨#Ñ.Ô.°dÐ:€IØð 
˜ð 
Ýð2Ø,/ð2ð 2ñ
ô 
ð 	
õ
 Ð
=Ð
=Ð
=Ð
=­¨x¸!©|Ñ)<Ô)<Ð
=Ñ
=Ô
=Ñ=Ô=ð RÝÐPÈ3ÐPÐPÑQÔQÐQàð "Ý˜&Ñ!Ô!ˆåŒ^˜F¨¨rÐ2Ñ2Ô2€Fà„|�BÔ˜8Ò#Ð#Ýð2Ø$œl¨2Ô.ð2ð 2ð 2ñ
ô 
ð 	
ð =Ð<°·	²	±´Ð<Ñ<Ô<€DÝ   v¨yÑ9Ô9€AØ€Hr    r“   Úorderc                 ó2  — t          | ¦  «        }t          | ¦  «        }|dv rd}n|dv rd}nt          d|› �¦  «        ‚| j        d         dk    rt          d¦  «        ‚t	          j        | d	|¬
¦  «        } t	          j        |d|¬
¦  «        }| j        d         }|dk     s|dk    rt          d|› �¦  «        ‚| t          | dd|¬¦  «        z  } |                     | j        d d…         |j        |¬¦  «        }|dk    rF|| 	                    | 
                    | ddd d …f         | ddd d …f         ¦  «        ¦  «        dk    z  }|d	k    rF|| 	                    | 
                    | ddd d …f         | dd	d d …f         ¦  «        ¦  «        dk    z  }t          |¦  «        s$|                     |¦  «        rt          d¦  «        ‚|                     |d         |j        | ¦  «        } |rt          |¦  «        }t!          | j        d d…         |j        ¦  «        r| j        d         |j        d         k    r t          d|j        › d| j        › d�¦  «        ‚|j        d d…         dz   }	|                     |	|j        t          |¦  «        ¬¦  «        }
t	          j        |
¦  «        d                              d¦  «        }
t)          |¦  «        D ]J}t+          |d|d f         | d|d d …f         z  ¦  «        }|rt-          ||
¦  «        nt-          |
|¦  «        }
ŒK|
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§   à   sp  € õ 
˜Ñ	Ô	€BÝ�t‰_Œ_€FØÐ"Ð"Ð"Øˆ	ˆ	Ø	Ð$Ð	$Ð	$Øˆ	ˆ	åð@Ø8=ð@ð @ñ
ô 
ð 	
ð
 „z�"„~˜ÒÐÝÐ<Ñ=Ô=Ð=åŒ>˜$ Q¨2Ð.Ñ.Ô.€DÝŒ^˜F¨¨rÐ2Ñ2Ô2€FØŒz˜"Œ~€HØ�!‚|€|�x !’|�|ÝÐA°xÐAÐAÑBÔBÐBà•. ¨B¸À"ÐEÑEÔEÑE€Dð Ÿ(š( 4¤:¨c¨r¨c¤?¸"¼'È&˜(ÑQÔQÐØ�!‚|€|à1Ø�FŠF�2—9’9˜T # q¨!¨!¨! )œ_¨d°3¸¸1¸1¸1°9¬oÑ>Ô>Ñ?Ô?À$ÒFñ
Ðð �!‚|€|Ø1Ø�FŠF�2—9’9˜T # q¨!¨!¨! )œ_¨d°3¸¸1¸1¸1°9¬oÑ>Ô>Ñ?Ô?À$ÒFñ
Ðõ Ð,Ñ-Ô-ð L°"·&²&Ð9LÑ2MÔ2Mð LÝÐ?Ñ@Ô@Ð@à�xŠxÐ+¨OÔ<¸b¼fÀdÑKÔKˆàð "Ý˜&Ñ!Ô!ˆõ ˜$œ* S b Sœ/¨6¬<Ñ8Ô8ð
àŒ:�bŒ>˜Vœ\¨"Ô-Ò-Ð-åð&¸f¼lð &ð &Ø”:ð&ð &ð &ñ
ô 
ð 	
ð
 Œl˜3˜B˜3Ô $Ñ&€GØ
�Š� ¤µY¸vÑ5FÔ5FˆÑGÔG€AÝŒˆq‰	Œ	�&Ô×Ò˜aÑ Ô €Aå�8‰_Œ_ð Fð FˆÝ˜  Q¨ Ô-°°S¸!¸Q¸Q¸Q°Y´Ñ?Ñ@Ô@ˆØ#,ÐE�L˜˜QÑÔÐµ,¸qÀ"Ñ2EÔ2EˆˆØ€Hr    Ú	canonicalc                óz   — t          | ¦  «        }|rt          | ¦  «        } |r|                     | dd¬¦  «        } | S )Nr$   r   r   )r   Ú_quat_canonicalr   )r   r¨   r   r   s       r   Úas_quatr«      sJ   € õ 
˜Ñ	Ô	€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	}|                     |                     |d¬¦  «        g | j        d d…         ¢d‘d‘R ¦  «        }|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¿   +  sT  € Ý	˜Ñ	Ô	€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ÈÈ"È¼oÐ<TÈqÐ<TÐRSÐ<TÐ<TÑUÔU€FØ€Mr    c                 óæ  — t          | ¦  «        }t          | ¦  «        } t          | dd d…f         dd|¬¦  «        }d|                     || d         d         ¦  «        z  }|d	k    }|dz  }d|d
z  z   d|dz  z  dz  z   }|                     |dz  ¦  «        |                     ||j        ¬¦  «        z   }||z  }	|                     |||	¦  «        }
|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È   M  s
  € Ý	˜Ñ	Ô	€BÝ˜4Ñ Ô €DÝ˜T # r¨ r 'œ]°¸dÀrÐJÑJÔ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ÑN€GØ˜'‘/€KØ�HŠH�[ +¨{Ñ;Ô;€EØð  Ý˜‘”ˆØ�T˜#˜r ˜r˜'”]Ñ"€FØ€Mr    c                 óö   — t          | ¦  «        }|                     dt          | ¦  «        | 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Ï   b  s}   € Ý	˜Ñ	Ô	€BØ
�*Š*�S¥¨4¡¤¸¼
ˆ*Ñ
CÔ
C€CØ�8Š8�D˜Ô&¨Ò*¨B°Ñ4Ô4€DØ˜˜t LÔ1Ñ1Ñ1€KØ�$�s˜B˜Q˜B�w”-Ñ +Ñ-Ð-r    )Úsuppress_warningsrÐ   c                ó˜  ‡— t          | ¦  «        }t          ‰¦  «        dk    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          | ¦  «        }d
„ ‰                     ¦   «         D ¦   «         }|r|n
|d d d…         }|\  }	}
}|	|k    }|rd|	z
  |
z
  n|}| 	                    ||¬¦  «        }| 	                    |	|
z
  |
|z
  z  ||	z
  z  dz  | j
        |¬¦  «        }|                     || d         | d         | d|
f         z
  ¦  «        }|                     || d|	f         | d|	f         | d|f         |z  z   ¦  «        }|                     || d|
f         | d|
f         | d         z   ¦  «        }|                     || d|f         |z  | d|f         |z  | d|	f         z
  ¦  «        }t          ||||j        dz  |||||¦	  «	        }|rt          |¦  «        n|S )Nr)   úExpected 3 axes, got r'   rx   ry   rz   c              3   óB   •K  — | ]}‰|         ‰|d z            k    V — ŒdS r|   r}   r~   s     €r   r�   zas_euler.<locals>.<genexpr>y  s4   øè è € Ð
2Ð
2 Aˆ3ˆqŒ6�S˜˜Q™”ZÒÐ
2Ð
2Ð
2Ð
2Ð
2Ð
2r    rM   r‚   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r}   r„   r†   s     r   rˆ   zas_euler.<locals>.<listcomp>}  r‰   r    r   r   r*   rŸ   .)r   rŠ   r7   r‹   rŒ   r2   r�   r/   rŽ   r   r+   r8   Ú_get_anglesÚpirÅ   )r   ru   r\   rÐ   r   r‘   r’   r   r“   r€   ÚjÚkÚ	symmetricrB   rÍ   ÚaÚbÚcÚdrv   s    `                  r   Úas_eulerrÞ   j  s¡  ø€ õ 
˜Ñ	Ô	€Bõ ˆ3�x„x�1‚}€}ÝÐ7°Ð7Ð7Ð7Ñ8Ô8Ð8Ý”˜¨#Ñ.Ô.°dÐ:€IÝ”˜¨#Ñ.Ô.°dÐ:€IØð 
˜ð 
ÝðØðð ñ
ô 
ð 	
õ Ð
2Ð
2Ð
2Ð
2­¨q©¬Ð
2Ñ
2Ô
2Ñ2Ô2ð RÝÐPÈ3ÐPÐPÑQÔQÐQå�t‰_Œ_€FØ<Ð<°·	²	±´Ð<Ñ<Ô<€DØÐ,ˆ4ˆ4 $ t 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ÐQWˆ:ÑXÔX€Dà
�Š��t˜F”| T¨&¤\°D¸¸a¸´LÑ%@ÑAÔA€AØ
�Š��t˜C ˜F”| T¨#¨q¨&¤\°D¸¸a¸´LÀ4Ñ4GÑ%GÑHÔH€AØ
�Š��t˜C ˜F”| T¨#¨q¨&¤\°D¸´LÑ%@ÑAÔA€AØ
�Š��t˜C ˜F”| dÑ*¨D°°a°¬L¸4Ñ,?À$ÀsÈAÀvÄ,Ñ,NÑOÔO€AåØ�9˜d B¤E¨A¡I¨q°!°Q¸Ð;Lñô €Fð  'Ð2�8�FÑÔÐ¨FÐ2r    c          
      ó¸  — t          | ¦  «        }|dv rd}n|dv rd}nt          d|› �¦  «        ‚|j        d         dk    rt          d|j        › d	�¦  «        ‚|j        d
         dk    rt          d¦  «        ‚t          |j        d d…         | j        d d
…         ¦  «        s t          d|j        › d| j        › d�¦  «        ‚|t	          |d
d|¬¦  «        z  }|                     |ddd d …f         |ddd d …f         ¦  «        }|                     |ddd d …f         |ddd d …f         ¦  «        }|dk    |dk    z  }	t          |	¦  «        r#|                     |	d         |j        |¦  «        }n$| 	                    |	¦  «        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å   ‘  sT  € õ 
˜Ñ	Ô	€Bð Ð"Ð"Ð"Øˆ	ˆ	Ø	Ð$Ð	$Ð	$Øˆ	ˆ	åð5Ø-2ð5ð 5ñ
ô 
ð 	
ð „z�"„~˜ÒÐÝÐ>°´Ð>Ð>Ð>Ñ?Ô?Ð?Ø„z�"„~˜ÒÐÝÐ<Ñ=Ô=Ð=Ý˜œ C R Cœ¨$¬*°S°b°S¬/Ñ:Ô:ð 
Ýð+ÀÄð +ð +Ø”:ð+ð +ð +ñ
ô 
ð 	
ð •. ¨B¸À"ÐEÑEÔEÑE€DØ—9’9˜T # q¨!¨!¨! )œ_¨d°3¸¸1¸1¸1°9¬oÑ>Ô>€LØ—9’9˜T # q¨!¨!¨! )œ_¨d°3¸¸1¸1¸1°9¬oÑ>Ô>€LØ $Ò&¨<¸4Ò+?Ñ@€JÝ�ZÑ Ô ð AØ�xŠx˜
 ?Ô3°R´V¸TÑBÔBˆˆØ	�Š�
Ñ	Ô	ð AÝÐ?Ñ@Ô@Ð@å)ØØˆS�!�Q�Q�QˆYŒØˆS�!�Q�Q�QˆYŒØˆS�!�Q�Q�QˆYŒØØñô €Fð ð "Ý˜&Ñ!Ô!ˆØ€Mr    c                 óh   — t          j        | ¦  «        dd d…f                              dd¬¦  «        S )N.r)   r   Tr   )r5   r?   Úmultiply)r   s    r   Úinvrè   Æ  s0   € ÝŒ6�$‰<Œ<˜˜R˜a˜R˜Ô ×)Ò)¨"°4Ð)Ñ8Ô8Ð8r    c                 óÄ   — t          | ¦  «        }t          | dd d…f         d|¬¦  «        }|                     | d         ¦  «        }d|                     ||¦  «        z  }|S )N.r)   r   ©r   r   rŸ   rM   )r   r   r¢   rÄ   )r   r   Úsin_qÚcos_qrv   s        r   Ú	magnituderí   Ê  sa   € Ý	˜Ñ	Ô	€BÝ˜4  R a R œ=¨r°bÐ9Ñ9Ô9€EØ�FŠF�4˜”<Ñ Ô €EØ�—’˜% Ñ'Ô'Ñ'€FØ€Mr    Úotherr,   c                 óV  — |€|rt          j        dd¬¦  «         d}n|rt          |¦  «        }t          | j        |j        ¦  «        s0t          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ØWØðñ ô ð ð ˆˆØ	ð Ý˜‰~Œ~ˆå˜œ U¤[Ñ1Ô1ð 
ÝðUÀDÄJÈsÐPRÈsÄOð Uð UØ&+¤k°#°2°#Ô&6ðUð Uð Uñ
ô 
ð 	
õ
 ˜u¥c¨$¡i¤iÑ0Ô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k    rZt          ‰¦  «        ‰ j        dz
   k     st          ‰¦  «        ‰ j        dz
  k    r#t	          d	‰› d
‰ j        d d…         › d�¦  «        ‚t          t          t          ˆ fd„‰D ¦   «         ¦  «        ¦  «        ¦  «        Št          ‰ ¦  «        }‰ dd d d …f         }|€|                     |¦  «        |z  }	nÏ|                     |||¬¦  «        }|dk     }
|s$|                     |
¦  «        rt	          d¦  «        ‚|r|                     |
|j        |¦  «        }t)          ‰ j        d d…         |j        ¦  «        s(t	          d|j        › d‰ j        d d…         › d�¦  «        ‚|d         |z  }|                     |¦  «        |z  }	t          ˆfd„|D ¦   «         ¦  «        }|‰z   }|                     |	||¦  «        }|j        d t-          |¦  «        …         dz   }|                     |                     ||¦  «        d¬¦  «        }	|j                             |	¦  «        \  }}|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   ó2   •K  — | ]}|‰j         d z
  z  V — ŒdS r|   )r&   )r   r‡   r   s     €r   r�   zmean.<locals>.<genexpr>  s.   øè è € Ð>Ð>°A˜A ¤¨Q¡Ñ/Ð>Ð>Ð>Ð>Ð>Ð>r    .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¯|V — Œd S )Nr}   )r   r€   r   s     €r   r�   zmean.<locals>.<genexpr>  s'   øè è € Ð;Ð;˜A¨Q°d¨]¨]�a¨]¨]¨]¨]Ð;Ð;r    )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  ê  s5  øø€ õ
 
˜Ñ	Ô	€BÝ�t‰_Œ_€FÝ˜4°¸Ð<Ñ<Ô<€EØ„z�!„}˜ÒÐÝÐFÑGÔGÐGõ •U˜4œ9 q™=Ñ)Ô)Ñ*Ô*€HØ€|ØˆˆÝ	�D�#Ñ	Ô	ð ØˆwˆÝ�d�EÑ"Ô"ð HÝÐFÑGÔGÐGàˆr‚z€z•s˜4‘y”y T¤Y°¡]Ð#3Ò3Ð3µs¸4±y´yÀDÄIÐPQÁMÒ7RÐ7RÝØV�DÐVÐVÀDÄJÈsÐPRÈsÄOÐVÐVÐVñ
ô 
ð 	
õ •�Ð>Ð>Ð>Ð>¸Ð>Ñ>Ô>Ñ>Ô>Ñ?Ô?Ñ@Ô@€Då˜ÑÔ€Dà�s˜D ! ! !�|Ô$€KØ€Ø×Ò Ñ,Ô,¨{Ñ:ˆˆà—*’*˜W¨E¸&�*ÑAÔAˆØ ’kˆØð 	=˜Ÿš˜{Ñ+Ô+ð 	=ÝÐ>Ñ?Ô?Ð?Øð 	=ð —h’h˜{¨B¬F°GÑ<Ô<ˆGå˜TœZ¨¨¨œ_¨g¬mÑ<Ô<ð 	ÝðDØ”=ðDð DØ'+¤z°#°2°#¤ðDð Dð Dñô ð ð   Ô0°;Ñ>ˆØ×Ò Ñ.Ô.°Ñ<ˆõ Ð;Ð;Ð;Ð; Ð;Ñ;Ô;Ñ;Ô;€IØ˜TÑ!€JØ—+’+˜a ¨XÑ6Ô6€KàÔ!Ð"2¥C¨	¡N¤NÐ"2Ô3°jÑ@€IØ
�Š�—
’
˜;¨	Ñ2Ô2¸ˆÑ<Ô<€AØŒ9�>Š>˜!ÑÔ�D€A€qØˆWŒ:Ðr    ÚleftÚrightc           
      ó  — |€|€| d d fS t          | ¦  «        }t          j        | d|¬¦  «        } |€|                     | ¦  «        }|€|                     | ¦  «        }| }t	          ||¦  «        \  }}t	          ||¦  «        \  }}t	          ||¦  «        \  }	}
|dd d …d d f         |dd d d …d f         z  |	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         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         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         z  }|dd d …d d d …f         }|dd d d …d d …f         }|j                             ||¦  «        }|                     |dd d …d d …d d d …f         |
dd d d d …d d …f         z  d¬¦  «        }|                     ||z
  |z
  |z
  |z
  ¦  «        }| 	                    | 
                    |dd¦  «        |j        d         df¦  «        }|                     | 	                    ||j        d         df¦  «        d¬¦  «        }||
j        d         z  }||
j        d         z  }| 	                    |                     |j        d         ¦  «        d¦  «        }| 	                    |d	¦  «        }|||f         }| 	                    |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   Úreducer2  )  s7  € ð
 €|˜˜Ø�T˜4ÐÐõ 
˜Ñ	Ô	€BÝŒ>˜$ Q¨2Ð.Ñ.Ô.€DØ€|Ø�|Š|˜DÑ!Ô!ˆØ€}Ø—’˜TÑ"Ô"ˆð 	€AÝ˜Q Ñ#Ô#�F€BˆÝ˜T 2Ñ&Ô&�F€BˆÝ˜U BÑ'Ô'�F€Bˆð ˆs�A�A�A�t˜TÐ!Ô" R¨¨T°1°1°1°dÐ(:Ô%;Ñ;¸bÀÀdÈDÐRSÐRSÐRSÐASÔ>TÑT€Eà
�&Š&��C˜˜˜˜D ! ! !�OÔ$ r¨#¨t°Q°Q°Q¸¸¸¨/Ô':Ñ:Àˆ&Ñ
DÔ
D€CØˆs�A�A�A�t˜TÐ!Ô" S¨¨d°A°A°A°q°q°q¨Ô%9Ñ9€Eà
�&Š&��C˜˜˜˜D ! ! !�OÔ$ r¨#¨t°Q°Q°Q¸¸¸¨/Ô':Ñ:Àˆ&Ñ
DÔ
D€CØˆs�D˜!˜!˜!˜TÐ!Ô" S¨¨a¨a¨a°°q°q°q¨Ô%9Ñ9€Eà
�&Š&��C˜˜˜˜D ! ! !�OÔ$ r¨#¨t°Q°Q°Q¸¸¸¨/Ô':Ñ:Àˆ&Ñ
DÔ
D€CØˆs�D˜$   Ð!Ô" S¨¨a¨a¨a°°°°D¨Ô%9Ñ9€Eð
 �S˜!˜!˜!˜T 1 1 1�_Ô%€KØ�S˜$    1 1 1�_Ô%€KØŒy�Š˜{¨KÑ8Ô8€Hà�FŠF�8˜C    A A A t¨Q¨Q¨QÐ.Ô/°"°S¸$ÀÀaÀaÀaÈÈÈÐ5JÔ2KÑKÐRTˆFÑUÔU€Eà	�Š�˜‘ Ñ%¨Ñ-°Ñ5Ñ	6Ô	6€BØ	�Š�B—K’K  A qÑ)Ô)¨B¬H°Q¬K¸Ð+<Ñ	=Ô	=€Bð �iŠi˜Ÿ
š
 2¨¬°¬°RÐ'8Ñ9Ô9ÀˆiÑBÔB€GØ˜2œ8 Aœ;Ñ&€IØ˜2œ8 Aœ;Ñ&€Jð �jŠj˜Ÿš 4¤:¨b¤>Ñ2Ô2°GÑ<Ô<€GØ�zŠz˜) WÑ-Ô-€HØ�˜'Ð!Ô"€DØ—
’
˜: wÑ/Ô/€IØ�)˜WÐ$Ô%€Eõ ˜4¥¨a°Ñ!7Ô!7Ñ8Ô8€Gà€|Øˆ	Ø€}Øˆ
Ø�I˜zÐ)Ð)r    ÚpointsÚinversec                 ó8  — t          | ¦  «        }t          | ¦  «        }|d         }t          |j        |j        ¦  «        s0t	          d| j        d d…         › d|j        d d…         › d�¦  «        ‚|r|                     |¦  «        |z  d         S ||z  d         S )Nrp   zCannot broadcast r   z rotations to ú	 vectors.r­   )r   r¿   r   rS   r7   r:   )r   r3  r4  r   Úmats        r   Úapplyr8  t  s¼   € Ý	˜Ñ	Ô	€BÝ
�D‰/Œ/€Cð �IÔ€FÝ˜œ F¤LÑ1Ô1ð 
Ýð ¤
¨3¨B¨3¤ð ð ¸v¼|ÈCÈRÈCÔ?Pð ð ð ñ
ô 
ð 	
ð ð ;à×#Ò# CÑ(Ô(¨6Ñ1°6Ô:Ð:Ø�&‰L˜&Ô!Ð!r    ÚvalueÚindexerc                 ó`   — t          j        | ¦  «        |df                              |¦  «        S ©N.)r5   r?   r@   )r   r9  r:  s      r   Úsetitemr=  …  s)   € õ Œ6�$‰<Œ<˜ ˜Ô%×)Ò)¨%Ñ0Ô0Ð0r    rÚ   rÛ   Úreturn_sensitivityc                 ó¨  — t          | ¦  «        }t          | |d|¬¦  «        }|                     | |¬¦  «        }|                     ||¬¦  «        }t          j        |d|¬¦  «        } t          j        |d|¬¦  «        }| j        d         dk    rt          d|j        › �¦  «        ‚|j        d         dk    rt          d	|j        › �¦  «        ‚| j        |j        k    r t          d
|j        › d|j        › d�¦  «        ‚| j        dk    s|j        dk    r t          d|j        › d|j        › d�¦  «        ‚| j        d         }|€+|                     |t          | ¦  «        | j
        ¬¦  «        }nÚ|                     |t          | ¦  «        | j
        ¬¦  «        }|j        dk    rt          d|j        › d�¦  «        ‚|dk    r2|j        d         |k    r!t          d|j        d         › d|› d�¦  «        ‚|dk     }	t          |	¦  «        s$|                     |	¦  «        rt          d¦  «        ‚|                     |	|j        |¦  «        }|dk    r|                     dg¦  «        n
||j        k    }
|                     |                     |
| j
        ¦  «        ¦  «        }t          |¦  «        s,|dk    rt          d¦  «        ‚|dk    r|rt          d¦  «        ‚|                     |dk    |j        |¦  «        }|                     |
d¬¦  «        }t          |¦  «        rpt%          | ||¦  «        \  }}}t'          | ||¦  «        \  }}}|                     |||¦  «        }|                     |||¦  «        }|                     |||¦  «        }n@|                     |¦  «        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 r6  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_vectorsrR  ‹  sl  € õ 
˜Ñ	Ô	€Bå˜1˜a°¸Ð<Ñ<Ô<€EØ—’˜A U�Ñ+Ô+€JØ—’˜A U�Ñ+Ô+€JÝŒ�z¨¨bÐ1Ñ1Ô1€AÝŒ�z¨¨bÐ1Ñ1Ô1€AØ„wˆr„{�aÒÐÝØVÀJÔDTÐVÐVñ
ô 
ð 	
ð 	„wˆr„{�aÒÐÝØVÀJÔDTÐVÐVñ
ô 
ð 	
ð 	„w�!”'ÒÐÝðMØÔ%ðMð MØ,6Ô,<ðMð Mð Mñ
ô 
ð 	
ð 	„v�‚z€z�Q”V˜a’Z�ZÝðGØÔðGð GØ&0Ô&6ðGð Gð Gñ
ô 
ð 	
ð 	
Œ�Œ
€Að €Ø—'’'˜!¥I¨a¡L¤L¸¼�'Ñ@Ô@ˆˆà—*’*˜W­Y°q©\¬\ÀÄ�*ÑIÔIˆØŒ<˜1ÒÐÝØUÀWÄ]ÐUÐUÐUñô ð ð ˆqŠ5ˆ5�g”m AÔ&¨!Ò+Ð+ÝðKØ '¤¨aÔ 0ðKð KØ>?ðKð Kð Kñô ð ð # Qš;ÐÝÐ-Ñ.Ô.ð 	J°2·6²6Ð:JÑ3KÔ3Kð 	JÝÐHÑIÔIÐIØ—(’(Ð+¨R¬V°WÑ=Ô=ˆð +,¨qª&¨&�B—J’J ˜vÑ&Ô&Ð&°gÀÄÒ6G€MØ�FŠF�2—9’9˜]¨A¬GÑ4Ô4Ñ5Ô5€Eõ ˜ÑÔð Ø�1Š9ˆ9ÝÐBÑCÔCÐCØ�AŠ:ˆ:Ð,ˆ:Ýð5ñô ð ð
 �hŠh�u˜q’y "¤&¨'Ñ2Ô2€Gà—’˜¨B�Ñ/Ô/€Jõ �ZÑ Ô ð 
EÝ#1°!°Q¸Ñ#@Ô#@Ñ ˆˆt�[Ý/CÀAÀqÈ'Ñ/RÔ/RÑ,ˆ	�8˜_Ø—’˜ Y°Ñ6Ô6ˆØ�xŠx˜
 H¨dÑ3Ô3ˆØ—h’h˜z¨?¸KÑHÔHˆˆà�6Š6�*ÑÔð 	EÝ';¸A¸qÀ'Ñ'JÔ'JÑ$ˆE�4˜˜å'5°a¸¸GÑ'DÔ'DÑ$ˆE�4˜Ø�$˜Ð#Ð#r    c           
      ó  — t          | ¦  «        }t          | ¦  «        }|d d …d f         | z  j        |z  }|j                             |¦  «        \  }}}|j                             ||z  ¦  «        dk     }	t          j        |¦  «        d                              | 	                    |	|d          |d         ¦  «        ¦  «        }t          j        |¦  «        dd d …df                              | 	                    |	|dd d …df          |dd d …df         ¦  «        ¦  «        }||z  }
| 
                    || 
                    |dz  | dz  z   d¬¦  «        z  d¬¦  «        d| 
                    |d¬¦  «        z  z
  }|                     |                     ||                     d|¬¦  «        ¦  «        ¦  «        d	         }|d	         |d
         z   |d
         |d         z   z  |d         |d	         z   z  }|d	         |d
         z  |d
         |d         z  z   |d         |d	         z  z   }|                     d| 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ÚssdrM  ÚzetaÚkappar;   rN  rL  s                     r   rC  rC  ì  so  € Ý	˜Ñ	Ô	€BÝ�q‰\Œ\€FØ	����D�Ô	˜AÑ	Ô! AÑ%€AØŒy�}Š}˜QÑÔ�H€A€qˆ"ð Œi�mŠm˜A ™FÑ#Ô# aÒ'€GÝŒˆq‰	Œ	�'Ô×Ò˜rŸxšx¨°!°G´*°¸aÀ¼jÑIÔIÑJÔJ€AÝŒˆq‰	Œ	�#�q�q�q˜"�*Ô×!Ò! "§(¢(¨7°Q°s¸A¸A¸A¸r°z´]°NÀAÀcÈ1È1È1ÈbÀjÄMÑ"RÔ"RÑSÔS€Aà	ˆB‰€Að
 �&Š&�˜2Ÿ6š6 ! Q¡$¨¨A©¡+°B˜6Ñ7Ô7Ñ7¸bˆ&Ñ
AÔ
AÀAÈÏÊØ	�ð IOñ Iô 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Ô
1€CØ—'’'˜'Ñ"Ô" TÑ)¨U°S©[¸1¸q¼t¹8Ñ-CÑD€KÝ# AÑ&Ô&€EØ�$˜Ð#Ð#r    c                 óø  — t          | ¦  «        }t          | ¦  «        }| j        d         }|dk    r|                     dg|¬¦  «        n
||j        k    }|                     |                     ||j        ¦  «        ¦  «        }t          |¦  «        st          |¦  «        }| 
                    | | d¬¦  «        }| 
                    || d¬¦  «        }	| 
                    || d¬¦  «        }
|d         d         }|	d         d         }t          |dd|¬	¦  «        }t          |dd|¬	¦  «        }t          |¦  «        sA|                     |dk    ¦  «        s|                     |dk    ¦  «        rt          d
¦  «        ‚t          j        |¦  «        |dk                                  |j        ¦  «        }t          j        |¦  «        |dk                                  |j        ¦  «        }||z  }||z  }|j                             |ddd d …f         |ddd d …f         ¦  «        }t          |d|¬¦  «        }|                     ||                     |ddd d …f         |ddd d …f         z  d¬¦  «        ¦  «        }d}|                     g d¢|j        |¬¦  «        }|j        |z
  |k     }|                     |                     |ddd d …f         ¦  «        ¦  «        }|                     |                     |dk    |d         |                     |dk    |d          d¦  «        ¦  «        |                     |dk    |d         |                     |dk    |d          d¦  «        ¦  «        |                     |dk    |d         |                     |dk    |d          d¦  «        ¦  «        g¦  «        }|                     |dk    ||¦  «        }|                     |t;          |t          ||¬¦  «        z  |j        z  ¦  «        |¦  «        }|                     ||j        |z
  |¦  «        }|                     || |¦  «        }||z  }|                     |¦  «        |k     }|d|dz  z   ||z  dz  dz  z   z  }||                     ||j        ¬¦  «        z   }||z  |                     |¦  «        z  }|                     |||¦  «        }t?          t;          |¦  «        |¦  «        }|dd …df         }|	dd …df         }|
dd …         }tA          ||¦  «        } |j         !                    |j                             | |¦  «        |¦  «        }!|j         !                    | |¦  «        |j         !                    | |¦  «        |j         !                    ||¦  «        z  z
  }"|                     |                     ||!z  ¦  «        |                     ||"z  ¦  «        ¦  «        }#t;          |#|d         z  ¦  «        }$|dk    r|nt?          |$|¦  «        }%|dk    |d         |j        k    z  |z  }&t          j        ||&¦  «                             dd|¬¦  «        }'tA          |%|¦  «        }(| "                    |                     |'| |(z
  dz  z  ¦  «        ¦  «        })|                     | #                    |¦  «        d¬¦  «        }&|                     |&|j        |%¦  «        }%|%|)|                     |j        |¬¦  «        fS )Nr   r$   Tr   )Úshiftr   )r   .r<  r   r^   z(Cannot align zero length primary vectors.rê   r   r_   )ç        rb  rb  rÊ   r*   )r   rM   rM   )r   r$   )r   r   )r   é   rÂ   ih  ra   )r   r   )$r   r/   rS   r   rA  rQ   rB  Úuint8r   r3   r   r   r   r2   r7   r5   r?   r@   r9   r0   r  rÄ   r  r+   rÖ   Úargminr¢   rP   r8   rm   rc   r£   r8  rq   rU  Úisnan)*rÚ   rÛ   rö   r   r   rG  rI  Ú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_secrL  rB   Úweights_inf_zeroÚa_estrM  s*                                             r   rD  rD    s¬  € õ 
˜Ñ	Ô	€BÝ�q‰\Œ\€FØ	Œ�Œ
€AØ9:¸aº¸�B—J’J ˜v¨f�JÑ5Ô5Ð5ÀWÐPRÔPVÒEV€Mð �iŠi˜Ÿ	š	 -°´Ñ:Ô:Ñ;Ô;€Gõ �"‰:Œ:ð Ý�g‘,”,ˆØ�wŠw�q  ¨qˆwÑ1Ô1€HØ�wŠw�q  ¨qˆwÑ1Ô1€HØ—W’W˜W¨W¨H¸1�WÑ=Ô=€Nà�VÔ˜YÔ'€EØ�VÔ˜YÔ'€EÝ ¨B¸À"ÐEÑEÔE€JÝ ¨B¸À"ÐEÑEÔE€JÝ˜Ñ$Ô$ð IØ�6Š6�* ’/Ñ"Ô"ð 	I b§f¢f¨Z¸1ª_Ñ&=Ô&=ð 	IÝÐGÑHÔHÐHõ ”˜
Ñ#Ô# J°!¢OÔ4×8Ò8¸¼Ñ@Ô@€JÝ”˜
Ñ#Ô# J°!¢OÔ4×8Ò8¸¼Ñ@Ô@€Jà�JÑ€EØ�JÑ€Eð ŒI�OŠO˜E # q¨!¨!¨! )Ô,¨e°C¸¸A¸A¸A°IÔ.>Ñ?Ô?€EÝ ¨B°2Ð6Ñ6Ô6€JØ�HŠH�Z §¢¨¨c°1°a°a°a¨iÔ(8¸5ÀÀaÈÈÈÀÔ;KÑ(KÐRT Ñ!UÔ!UÑVÔV€EØ€IØ�ZŠZÐ,Ð,Ð,°E´KÈˆZÑOÔO€Fð Œ5�5‰=˜9Ò$€Dð 	�	Š	�"—&’&˜˜s A q q q˜yÔ)Ñ*Ô*Ñ+Ô+€Að —8’8à�HŠH�Q˜!’V˜U 4œ[¨"¯(ª(°1¸²6¸EÀ$¼K¸<ÈÑ*KÔ*KÑLÔLØ�HŠH�Q˜!’V˜U 4œ[¨"¯(ª(°1¸²6¸EÀ$¼K¸<ÈÑ*KÔ*KÑLÔLØ�HŠH�Q˜!’V˜U 4œ[¨"¯(ª(°1¸²6¸EÀ$¼K¸<ÈÑ*KÔ*KÑLÔLð	
ñô €Lð 	�Š�˜q’ ,°Ñ6Ô6€Aà�XŠX�d�K¨­N¸1ÀÐ,DÑ,DÔ,DÑ(DÀrÄuÑ(LÑMÔMÈvÑVÔV€FØ�HŠH�T˜2œ5 5™=¨%Ñ0Ô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¤MÑ1€MØ
�Š�˜m¨]Ñ;Ô;€AÝ� Q™œ¨Ñ0Ô0€Eð
 �Q�R�R˜�WÔ€EØ�Q�R�R˜�WÔ€EØ    Ô$€Kõ �%˜ÑÔ€Eð Œy×Ò ¤	§¢°°uÑ =Ô =¸uÑEÔE€HØŒy×Ò  uÑ-Ô-Ø
Œ	×Ò˜ Ñ&Ô&¨¬×)9Ò)9¸%ÀÑ)GÔ)GÑGñ€Hð �(Š(�2—6’6˜+¨Ñ0Ñ1Ô1°2·6²6¸+ÈÑ:PÑ3QÔ3QÑ
RÔ
R€CÝ˜˜e FœmÑ+Ñ,Ô,€Eð ˜!’V�VˆEˆE¥¨e°UÑ!;Ô!;€Eð
 �ŠU�w˜q”z R¤VÒ+Ñ,°Ñ=€Dõ ”v˜g tÑ,Ô,×0Ò0°¸À"Ð0ÑEÔEÐÝ�%˜‰OŒO€EØ�7Š7�2—6’6Ð*¨a°%©i¸AÑ-=Ñ=Ñ>Ô>Ñ?Ô?€Dà�6Š6�"—(’(˜7Ñ#Ô#¨"ˆ6Ñ-Ô-€DØ�HŠH�T˜2œ6 5Ñ)Ô)€EØ�$˜Ÿ
š
 2¤6°&˜
Ñ9Ô9Ð9Ð9r    Únc                 óô  — t          | ¦  «        }t          | ¦  «        }t          |¦  «        rD|j        dk    r	|d         }n|j        dk    rt          d¦  «        ‚t          | |d|¬¦  «        \  } }t          |¦  «        rÛt          |t          | ¦  «        z  ¦  «        }| 
                    g | j        d d…         ¢d‘R | j        |¬¦  «        }t          j        |¦  «        d	                              d
¦  «        }|                     |dk    ||¦  «        }|                     |dk    t!          | ¦  «        |¦  «        }|                     |d
k    | |¦  «        }|S |dk    r\| 
                    g | j        d d…         ¢d‘R | j        |¬¦  «        }t          j        |¦  «        d	                              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õ ˜ÑÔð BØŒ7�dŠ?ˆ?Ø�!”ˆAˆAØŒV�qŠ[ˆ[ÝÐ>Ñ?Ô?Ð?Ý˜T 1°T¸bÐAÑAÔA‰ˆˆaõ �QÑÔð Ý˜Q¥¨4¡¤Ñ0Ñ1Ô1ˆà—8’8Ð1˜dœj¨¨"¨œoÐ1¨qÐ1Ð1¸¼ÈF�8ÑSÔSˆÝ”6˜(Ñ#Ô# FÔ+×/Ò/°Ñ2Ô2ˆØ—’˜!˜qš& (¨FÑ3Ô3ˆØ—’˜!˜rš'¥3 t¡9¤9¨fÑ5Ô5ˆØ—’˜!˜qš& $¨Ñ/Ô/ˆØˆØˆA‚v€vØ—8’8Ð1˜dœj¨¨"¨œoÐ1¨qÐ1Ð1¸¼ÈF�8ÑSÔSˆÝŒv�hÑÔ Ô'×+Ò+¨AÑ.Ô.Ð.ØˆB‚w€wÝ�4‰yŒyÐØˆA‚v€vØˆÝ�q�9 T™?œ?Ñ*Ñ+Ô+Ð+r    c                 óü   — t          | ¦  «        }t          | dd|¬¦  «        }|dk    }t          |¦  «        r|                     ||j        | ¦  «        } n$|                     |¦  «        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   »  s‡   € Ý	˜Ñ	Ô	€BÝ˜t¨"°tÀÐCÑCÔC€IØ˜Q’€IÝ�YÑÔð CØ�xŠx˜	 2¤6¨4Ñ0Ô0ˆˆØ	�Š�	Ñ	Ô	ð CÝÐAÑBÔBÐBØ�)ÑÐr    c                 ó4  — 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  }|                     |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Ô1Ð1r    c                 óV   — | dk    rdS | dk    rdS | dk    rdS t          d| › �¦  «        ‚)Nr‡   r   r±   r$   r²   rM   z.Expected axis to be from ['x', 'y', 'z'], got )r7   r   s    r   r…   r…   Ò  sC   € Øˆs‚{€{ØˆqØ	�ŠˆØˆqØ	�ŠˆØˆqÝ
ÐLÀdÐLÐLÑ
MÔ
MÐMr    Ún1Ún2Ún3r’   c                 ó*  — t          | ¦  «        }|r||fn||f\  }}|j                             ||¦  «        }|                     |                     ||¦  «        |                     ||¦  «        ¦  «        }|dk     }	|                     |	d         | |¦  «        }|                     |	| |¦  «        }|                     |	d         | |¦  «        }|	}
|                     |                     |dz  ¦  «        d         |z  |                     |dz  ¦  «        d         fd¬¦  «        }t          || ¦  «        }|d         }|j                             |dd d…f         |¦  «        }|j                             |dd d…f         |¦  «        }|j                             |dd d…f         |¦  «        }t          |d	d
||||||¦	  «	        }t          j        |¦  «        d                              |                     |
|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Ø"Ð0ˆb�"ˆXˆX¨¨R¨�F€BˆàŒ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Ô3€Aå˜ E¨1¨d°A°q¸!¸QÐ@QÑRÔR€FÝŒV�F‰^Œ^˜FÔ#×'Ò'Ø
�Š�˜v fœ~˜o¨v°f¬~Ñ>Ô>ñô €Fð €Mr    r‘   c                 óF  — t          |¦  «        }t          |¦  «        }t          | d         |d         ||¬¦  «        }t          dt	          | ¦  «        ¦  «        D ]E}t          | |         |d|f         ||¬¦  «        }|rt          ||¦  «        nt          ||¦  «        }ŒF|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ÑOÔO€DÝ�1•c˜$‘i”iÑ Ô ð Yð YˆÝ'¨¨Q¬°¸¸Q¸´ÈÐSUÐVÑVÔVˆØ.7ÐX�|˜D 'Ñ*Ô*Ð*½\È'ÐSWÑ=XÔ=XˆˆØ€Kr    rf   c                 ód  — |                      g |j        ¢d‘R |j        |¬¦  «        }t          j        |¦  «        d                              |                     |dz  ¦  «        ¦  «        }t          j        |¦  «        d| f                              |                     |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Ð% 1Ð%Ð%¨U¬[Àˆ8ÑHÔH€DÝŒ6�$‰<Œ<˜Ô×#Ò# B§F¢F¨5°3©;Ñ$7Ô$7Ñ8Ô8€DÝŒ6�$‰<Œ<˜˜T˜	Ô"×&Ò& r§v¢v¨e°c©kÑ':Ô':Ñ;Ô;€DØ€Kr    rÙ   rÍ   r–  rÜ   rÝ   c	           
      óˆ  — t          |¦  «        }	t          |¦  «        }
d}|	                     ||¦  «        }|	                     ||¦  «        }|	                     g |j        ¢d‘R |j        |
¬¦  «        }t          j        |¦  «        d                              d|	                     |	 	                    ||¦  «        |	 	                    ||¦  «        ¦  «        z  ¦  «        }| rdnd}| rdnd}|	 
                    |d         ¦  «        |k    }|	 
                    |d         |	j        z
  ¦  «        |k    }||z   }|s;t          |¦  «        s,|	                     | ¦  «        rt          j        dd¬¦  «         |	                     |d|z  d|z  | rd	nd
z  ¦  «        }t          j        |¦  «        d                              |¦  «        }|	                     |||z
  |d|f         ¦  «        }t          j        |¦  «        d|f                              |¦  «        }|	                     |||z   |d|f         ¦  «        }|s;||z  }t          j        |¦  «        d                              |d         |z
  ¦  «        }t          j        |¦  «        d|f                              |¦  «        }||	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Õ     s¨  € õ 
˜Ñ	Ô	€BÝ�q‰\Œ\€FØ
€CØ�xŠx˜˜1‰~Œ~€HØ—’˜˜A‘”€Ið �XŠX�m˜œ�m �m�m¨1¬7¸6ˆXÑBÔB€FåŒV�F‰^Œ^˜FÔ#×'Ò'¨¨B¯HªH°R·X²X¸aÀ±^´^ÀRÇXÂXÈaÐQRÁ^Ä^Ñ,TÔ,TÑ(TÑUÔU€Fà Ð'�!�! a€KØ Ð'�!�! a€Kð �FŠF�6˜&”>Ñ"Ô" cÒ)€EØ�FŠF�6˜&”> B¤EÑ)Ñ*Ô*¨cÒ1€EØ�e‰mÐ€EØð 
¥]°5Ñ%9Ô%9ð 
¸b¿fºfÀeÀV¹n¼nð 
ÝŒðð ð		
ñ 	
ô 	
ð 	
ð 
�Š�%˜˜X™ q¨9¡}¸iÐ8N¸¸ÈQÑ'OÑ	PÔ	P€BÝŒV�F‰^Œ^˜FÔ#×'Ò'¨Ñ+Ô+€Fð 
�Š�%˜ IÑ-¨v°c¸;Ð6FÔ/GÑ	HÔ	H€BÝŒV�F‰^Œ^˜C Ð,Ô-×1Ò1°"Ñ5Ô5€Fð 
�Š�%˜ IÑ-¨v°c¸;Ð6FÔ/GÑ	HÔ	H€BØð CØ�$‰YˆÝ”˜‘” Ô'×+Ò+¨F°6¬N¸TÑ,AÑBÔBˆÝŒV�F‰^Œ^˜C Ð,Ô-×1Ò1°"Ñ5Ô5€Fà�r”u‰n  R¤U¡Ñ+¨b¬eÑ3€FØ€Mr    r  r”   c                 óN  — t          | ¦  «        }|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
  }|                     ||||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£   W  s>  € Ý	˜Ñ	Ô	€BØŒI�OŠO˜A˜c 2 A 2˜gœJ¨¨#¨r°¨r¨'¬
Ñ3Ô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                 óX   — t          j        | d|¬¦  «        } | d         | dd d…f         fS )NrM   r%   rý   .r   )r5   r6   )r”   r   s     r   r  r  g  s3   € ÝŒ�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   l  s   € Ø•R”U˜U‘]Ñ#Ð#r    c                 ó&   — | dt           j        z  z  S r²  r³  rµ  s    r   rÅ   rÅ   p  s   € Ø�U�Rœ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  r2  r8  Úslicer=  rR  rC  rD  rˆ  r   rª   r…   rá   Úlistr�   r›  rÕ   r£   r  rb   rÅ   r}   r    r   ú<module>rÄ     s	  ððð ð 
€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð +Ð *Ð *Ð *Ð *Ð *Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ð
 Øðð
 ðð ð Ø
ðàðð ðð
 ðð ðð ð ð ð$#+ð #+˜ð #+¨Tð #+¸eð #+ð #+ð #+ð #+ðLC' Eð C'¨eð C'ð C'ð C'ð 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Øð$3Ø$(ð$3ØHLð$3à
ð$3ð $3ð $3ð $3ðV ð	2ð $ð2ð 2ð 2Ø
ð2à
ð2ð ð2ð ð	2ð ð2ð ð2ð 2ð 2ð 2ðj9ˆeð 9˜ð 9ð 9ð 9ð 9ð�Eð ˜eð ð ð ð ð KPðð Ø
ðØðØ%*¨T¡\ðØCGðà
ðð ð ð ð4 !%Ø)-ð<ð <Ø
ð<à˜Ñð<ð �‰*�u˜S #˜X”Ñ
&ð<ð ð	<ð <ð <ð <ðB ØðH*ð H*Ø
ðH*à
�$‰,ðH*ð �4‰<ðH*ð ˆ5�%˜$‘, ¨¡Ð,Ô-ð	H*ð H*ð H*ð H*ðV"ð "�ð "˜uð "¨tð "Àð "ð "ð "ð "ð"1Ø
ð1Øð1Ø(+¨e©°lÑ(BÀTÑ(Ið1à
ð1ð 1ð 1ð 1ð RWð^$ð ^$Øð^$Øð^$Ø!&¨¡ð^$ØJNð^$à
ˆ5�%˜ÐÔð^$ð ^$ð ^$ð ^$ðB$�eð $ ð $°ð $¸%ÀÀuÈeÐ@SÔ:Tð $ð $ð $ð $ðDJ:ØðJ:ØðJ:Ø!&ðJ:à
ˆ5�%˜ÐÔðJ:ð J:ð J:ð J:ðZ,ˆeð ,˜ ™ð ,¨%ð ,ð ,ð ,ð ,ð@ ð ¨%ð ð ð ð ð	2˜%ð 	2 Eð 	2ð 	2ð 	2ð 	2ðN #ð N¨#ð Nð Nð Nð Nð)Ø
ð)àð)ð 	ð)ð 	ð	)ð
 ð)ð ð)ð ð)ð )ð )ð )ðX 4¨¤9ð °eð Èð ÐQVð ð ð ð ð ð ¨Eð À%ð ð ð ð ð;Øð;àð;ð ð;ð ð	;ð
 ð;ð ð;ð ð;ð ð;ð ð;ð ð;ð ;ð ;ð ;ð|�Eð ˜eð ¨ð ð ð ð ð #�uð # U¨5°%¨<Ô%8ð #ð #ð #ð #ð
$�Uð $˜uð $ð $ð $ð $ð$�Uð $˜uð $ð $ð $ð $ð $ð $r    