Ë
    âQ(h[ ã                   óJ  — d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlZd dlZd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d „ Z)d!„ Z*d"„ Z+d#„ Z,d$„ Z-d%„ Z.d&„ Z/d'„ Z0d(„ Z1d)„ Z2d*„ Z3d+„ Z4d,„ Z5d-„ Z6d.„ Z7d/„ Z8d0„ Z9d1„ Z:d2„ Z;d3„ Z<d4„ Z=d5„ Z>d6„ Z?d7„ Z@d8„ ZAd9„ ZBd:„ ZCe jˆ                  j‹                  d; ed<«      «      e jˆ                  j‹                  d=d>«      d?„ «       «       ZFe jˆ                  j‹                  d; ed<«      «      e jˆ                  j‹                  d=d>«      d@„ «       «       ZGe jˆ                  j�                  e jˆ                  j‹                  d; ed<«      «      e jˆ                  j‹                  d=d>«      dA„ «       «       «       ZIe jˆ                  j�                  e jˆ                  j‹                  d; ed<«      «      e jˆ                  j‹                  d=d>«      dB„ «       «       «       ZJe jˆ                  j�                  e jˆ                  j‹                  d; ed<«      «      e jˆ                  j‹                  d=d>«      dC„ «       «       «       ZKdD„ ZLdE„ ZMdF„ ZNdG„ ZOdH„ ZPdI„ ZQdJ„ ZRdK„ ZSdL„ ZTe jˆ                  j�                  dM„ «       ZUdN„ ZVdO„ ZWdP„ ZXdQ„ ZYdR„ ZZdS„ Z[dT„ Z\dU„ Z]dV„ Z^dW„ Z_dX„ Z`dY„ ZadZ„ Zbd[„ Zcd\„ Zdd]„ Zed^„ Zfd_„ Zgd`„ Zhda„ Zidb„ Zjdc„ Zkdd„ Zlde„ Zmdf„ Zndg„ Zodh„ Zpdi„ Zqdj„ Zrdk„ Zsdl„ Ztdm„ ZudnZvdo„ Zwdp„ Zxdq„ Zydr„ Zzds„ Z{dt„ Z|du„ Z}dv„ Z~dw„ Zdx„ Z€dy„ Z�dz„ Z‚d{„ Zƒd|„ Z„d}„ Z…d~„ Z†d„ Z‡d€„ Zˆd�„ Z‰d‚„ ZŠdƒ„ Z‹d„„ ZŒd…„ Z�d†„ ZŽe jˆ                  j�                  d‡„ «       Z�dˆ„ Z�d‰„ Z‘dŠ„ Z’d‹„ Z“dŒ„ Z”d�„ Z•dŽ„ Z–d�„ Z—d�„ Z˜d‘„ Z™d’„ Zšd“„ Z›d”„ Zœd•„ Z�y)–é    N)Úassert_equalÚassert_array_almost_equal)Úassert_allclose)ÚRotationÚSlerp)Úspecial_ortho_group)Úpermutationsc                 ó:   — | dk(  rg d¢S | dk(  rg d¢S | dk(  rg d¢S y )NÚx©é   r   r   Úy©r   r   r   Úz©r   r   r   © ©Úaxiss    úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/spatial/transform/tests/test_rotation.pyÚ	basis_vecr      s.   € Øˆs‚{ÚÐØ	�ŠÚÐØ	�ŠÚÐð 
ó    c                  óÐ   — t        j                  g d¢g d¢g«      } t        j                  | «      }| t        j                  dgdgg«      z  }t	        |j                  «       |«       y )N©é   é   r   r   )é   é   r   r   r   é   ©ÚnpÚarrayr   Ú	from_quatr   Úas_quat©r   ÚrÚexpected_quats      r   Útest_generic_quat_matrixr'      sP   € Ü
�‰’,¢Ð.Ó/€AÜ×Ñ˜1Ó€AØœŸ™ 1 #¨ t Ó-Ñ-€MÜ˜aŸi™i›k¨=Õ9r   c                  óš   — t        j                  g d¢«      } t        j                  | «      }| dz  }t	        |j                  «       |«       y ©Nr   r   r   r$   s      r   Útest_from_single_1d_quaternionr*      s9   € Ü
�‰’Ó€AÜ×Ñ˜1Ó€AØ˜‘E€MÜ˜aŸi™i›k¨=Õ9r   c                  óœ   — t        j                  g d¢g«      } t        j                  | «      }| dz  }t	        |j                  «       |«       y r)   r   r$   s      r   Útest_from_single_2d_quaternionr,   #   s;   € Ü
�‰’,�Ó €AÜ×Ñ˜1Ó€AØ˜‘E€MÜ˜aŸi™i›k¨=Õ9r   c                  ó^  — t         j                  j                  d«      } t        j                  g d¢d¬«      }t        |j                  «       t        j                  d«      dd¬«       t        j                  t        j                  g d¢d	«      d¬«      }t        |j                  «       t        j                  t        j                  d«      d
«      dd¬«       | j                  dd«      }|t         j                  j                  |d¬«      d d …d f   z  }|D ]I  }t        j                  |d¬«      }t        t        j                  |j                  «       d«      |d¬«       ŒK t        j                  |d¬«      }t        t        j                  |j                  «       dd¬«      |d¬«       y )Nr   ©r   r   r   r   T©Úscalar_firstr   çVçž¯Ò<ç¼‰Ø—²Òœ<©ÚrtolÚatol©é
   r   )r7   r   r   éd   r   r   r   ©r4   )r    ÚrandomÚRandomStater   r"   r   Ú	as_matrixÚeyeÚtileÚrandnÚlinalgÚnormÚrollr#   ©Úrngr%   ÚqÚqis       r   Útest_from_quat_scalar_firstrG   *   s4  € Ü
�)‰)×
Ñ
 Ó
"€Cä×Ñš<°dÔ;€AÜ�A—K‘K“M¤2§6¡6¨!£9°5¸uÕEä×Ñœ2Ÿ7™7¢<°Ó9ÈÔM€AÜ�A—K‘K“M¤2§7¡7¬2¯6©6°!«9°jÓ#AØ Uõ,ð 	�	‰	�#�qÓ€AØŒ�‰�‰˜ ˆÓ	"¢1 d 7Ñ	+Ñ+€AØò AˆÜ×Ñ˜r°Ô5ˆÜœŸ™ §	¡	£¨QÓ/°¸%Ö@ðAô 	×Ñ˜1¨4Ô0€AÜ”B—G‘G˜AŸI™I›K¨°Ô3°Q¸UÖCr   c            	      óJ  — t         j                  j                  d«      } t        j                  dt        j
                  d«      «      }t        |j                  d¬«      g d¢dd¬	«       t        j                  dt        j
                  d
«      «      }t        |j                  d¬«      t        j                  g d¢d«      dd¬	«       | j                  dd«      }|t         j                  j                  |d¬«      d d …d f   z  }|D ]Œ  }t        j                  |«      }t        |j                  d¬«      t        j                  |d«      d¬«       t        |j                  dd¬«      t        j                  |j                  d¬«      d«      d¬«       ŒŽ t        j                  |«      }t        |j                  d¬«      t        j                  |dd¬«      d¬«       t        |j                  dd¬«      t        j                  |j                  d¬«      dd¬«      d¬«       y )Nr   Úxyzr   Tr/   r.   r1   r2   r3   )r7   r   r6   r8   r   r   r   r9   )Ú	canonicalr0   ©rJ   )r    r:   r;   r   Ú
from_eulerÚzerosr   r#   r>   r?   r@   rA   r"   rB   rC   s       r   Útest_as_quat_scalar_firstrN   >   s¯  € Ü
�)‰)×
Ñ
 Ó
"€Cä×Ñ˜E¤2§8¡8¨A£;Ó/€AÜ�A—I‘I¨4�IÓ0²,Ø Uõ,ô 	×Ñ˜E¤2§8¡8¨GÓ#4Ó5€AÜ�A—I‘I¨4�IÓ0Ü—G‘GšL¨'Ó2¸ÀUõLð 	�	‰	�#�qÓ€AØŒ�‰�‰˜ ˆÓ	"¢1 d 7Ñ	+Ñ+€AØò $ˆÜ×Ñ˜rÓ"ˆÜ˜Ÿ	™	¨t˜	Ó4´b·g±g¸bÀ!³nØ"õ	$ô 	˜Ÿ	™	¨D¸t˜	ÓDÜŸ™ §	¡	°D 	Ó 9¸1Ó=Ø"ö	$ð$ô 	×Ñ˜1Ó€AÜ�A—I‘I¨4�IÓ0´"·'±'¸!¸QÀQÔ2GØõ ô �A—I‘I¨¸4�IÓ@Ü—G‘G˜AŸI™I°˜IÓ5°q¸qÔAÈöOr   c            	      óø   — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g«      } t        j                  | «      }| t        j                  dgdgd	gd
gd	gd
gg«      z  }t	        |j                  «       |«       y )N)r   r   r   r   ©r   r   r   r   ©r   r   r   r   )éÿÿÿÿrR   rR   r   ©r   r   r   rR   ©rR   rR   rR   rR   r   r   r   é   r   r$   s      r   Útest_from_square_quat_matrixrV   \   su   € ä
�‰ÚÚÚÚÚÚð
ó 	€Aô 	×Ñ˜1Ó€AØœŸ™ 1 #¨ t¨a¨S°1°#¸°s¸Q¸CÐ!@ÓAÑA€MÜ˜aŸi™i›k¨=Õ9r   c                  ó*  — t        j                  g d¢g d¢g d¢g d¢g d¢g«      } t        j                  | «      }t        j                  | «      t         j
                  j                  | d¬«      d d …d f   z  }t        |j                  d¬	«      |«       y )
N)rR   r   r   r   )r   rR   r   r   )r   r   rR   r   rS   rT   r   r   TrK   )	r    r!   r   r"   Úabsr@   rA   r   r#   r$   s      r   Ú*test_quat_double_to_canonical_single_coverrY   k   sw   € Ü
�‰ÚÚÚÚÚð
ó 	€Aô 	×Ñ˜1Ó€AÜ—F‘F˜1“I¤§	¡	§¡¨q°q Ó 9º!¸T¸'Ñ BÑB€MÜ�A—I‘I¨�IÓ-¨}Õ=r   c                  óˆ  — t        j                  g d¢«      } t        j                  | «      }t	        | |j                  d¬«      «       t        j                  g d¢«      t        j                  d«      z  } t        j                  | «      }||z  |z  }t        |j                  d¬«      t        j                  d«      z  g d¢«       t        |j                  «       j                  d¬«      t        j                  d«      z  g d¢«       t        |j                  d¬«      t        j                  d«      z  g d¢«       t        |j                  «       j                  d¬«      t        j                  d«      z  g d¢«       t        ||j                  «       z  j                  d¬«      g d	¢d
¬«       t        ||j                  «       z  j                  d¬«      g d	¢d
¬«       t        ||z  j                  d¬«      g d¢d
¬«       t        |j                  «       |j                  «       z  j                  d¬«      g d¢d
¬«       y )NrS   FrK   )r   r   r   r   rU   )rR   r   r   r   )r   r   r   rR   )rR   r   r   rR   rQ   g¼‰Ø—²Ò¬<©r5   )	r    r!   r   r"   r   r#   Úsqrtr   Úinv)rE   r%   Úr3s      r   Útest_quat_double_coverr_   x   s°  € ô 	�‰’Ó€AÜ×Ñ˜1Ó€AÜ��A—I‘I¨�IÓ.Ô/ô 	�‰’ÓœrŸw™w q›zÑ)€AÜ×Ñ˜1Ó€AØ	
ˆ1‰ˆQ‰€BÜ�A—I‘I¨�IÓ.¬r¯w©w°q«zÑ9Ú ô"ä�A—E‘E“G—O‘O¨e�OÓ4´R·W±W¸Q³ZÑ?Ú!ô#ä�B—J‘J¨�JÓ/´·±¸³
Ñ:Ú!ô#ä�B—F‘F“H×$Ñ$¨uÐ$Ó5´b·g±g¸a³jÑ@Ú"ô$ô �Q�q—u‘u“w‘Y×'Ñ'°%Ð'Ó8Ú  uõ.ä�R˜Ÿ™›‘[×)Ñ)°EÐ)Ó:Ú  uõ.ä�Q�r‘T—N‘N¨U�NÓ3Ú!¨õ/ä�Q—U‘U“W˜RŸV™V›XÑ%×.Ñ.¸Ð.Ó?Ú!¨ö/r   c                  ó4  — t        j                  t        d¬«      5  t        j                  t        j                  g d¢«      «       d d d «       t        j                  t        d¬«      5  t        j                  t        j                  g d¢g d¢g«      «       d d d «       t        j                  t        d¬«      5  t        j                  t        j                  g d¢gg d¢gg«      «       d d d «       y # 1 sw Y   Œ°xY w# 1 sw Y   ŒjxY w# 1 sw Y   y xY w)NzExpected `quat` to have shape©Úmatch©r   rU   r   )r   rU   r   r   r   )r   r   é   é   é   ©r   rU   r   r   )r   r   rd   re   )ÚpytestÚraisesÚ
ValueErrorr   r"   r    r!   r   r   r   Útest_from_quat_wrong_shaperk   ˜   sÚ   € ä	�‰”zÐ)HÔ	Iñ 0Ü×Ñœ2Ÿ8™8¢IÓ.Ô/÷0ô 
�‰”zÐ)HÔ	Iñ Ü×Ñœ2Ÿ8™8ÚÚð%ó ô 	÷ô 
�‰”zÐ)HÔ	Iñ Ü×Ñœ2Ÿ8™8ÚˆNÚˆNð%ó ô 	÷ð ÷0ð 0ú÷ð ú÷ð ús#   œ+C6Á*/DÂ<1DÃ6C?ÄDÄDc                  óÆ   — t        j                  g d¢g d¢g d¢g«      } t        j                  t        «      5  t        j                  | «       d d d «       y # 1 sw Y   y xY w)Nr   )r   r   r   r   rP   )r    r!   rh   ri   rj   r   r"   )r   s    r   Útest_zero_norms_from_quatrm   ¬   sO   € Ü
�‰ÚÚÚðó 	€Aô
 
�‰”zÓ	"ñ Ü×Ñ˜1Ô÷÷ ñ ús   ¸AÁA c                  ó�   — g d¢} t        j                  | «      j                  «       }t        |t	        j
                  d«      «       y )NrQ   r   )r   r"   r<   r   r    r=   )ÚquatÚmats     r   Ú#test_as_matrix_single_1d_quaternionrq   ¶   s2   € Ú€DÜ
×
Ñ
˜TÓ
"×
,Ñ
,Ó
.€Cä˜c¤2§6¡6¨!£9Õ-r   c                  óÚ   — g d¢g} t        j                  | «      j                  «       }t        |j                  d«       t        j                  g d¢g d¢g d¢g«      }t        |d   |«       y )N©r   r   r   r   ©r   r   r   ©r   rR   r   r   r   r   ©r   r"   r<   r   Úshaper    r!   r   )ro   rp   Úexpected_mats      r   Ú#test_as_matrix_single_2d_quaternionry   ½   s\   € Úˆ>€DÜ
×
Ñ
˜TÓ
"×
,Ñ
,Ó
.€CÜ�—‘˜IÔ&Ü—8‘8ÚÚÚð
ó €Lô
 ˜c !™f lÕ3r   c                  óÎ  — g d¢g d¢g d¢g d¢g} t        j                  | «      j                  «       }t        |j                  d«       t        j                  g d¢g d¢g d¢g«      }t        |d	   |«       t        j                  g d¢g d
¢g d¢g«      }t        |d   |«       t        |d   t        j                  d«      «       t        |d   t        j                  d«      «       y )Nrs   ©r   r   r   r   rQ   rS   )r   r   r   ru   r   r   r   r   ©rR   r   r   r   rU   r   )	r   r"   r<   r   rw   r    r!   r   r=   )Úquatsrp   Ú	expected0Ú	expected1s       r   Ú test_as_matrix_from_square_inputr€   É   sÂ   € âÚÚÚð	€Eô ×
Ñ
˜UÓ
#×
-Ñ
-Ó
/€CÜ�—‘˜IÔ&ä—‘ÚÚÚð
ó €Iô
 ˜c !™f iÔ0ä—‘ÚÚÚð
ó €Iô
 ˜c !™f iÔ0ä˜c !™f¤b§f¡f¨Q£iÔ0Ü˜c !™f¤b§f¡f¨Q£iÕ0r   c                  ó   — g d¢g d¢g d¢g} t        j                  | «      j                  «       }t        |j                  d«       t        j                  g d¢g d¢g d¢g«      }t        |d   |«       t        j                  g d¢g d	¢g d
¢g«      }t        |d   |«       t        j                  g d¢g d¢g d¢g«      dz  }t        |d   |«       y )Nrs   r{   rg   )r   r   r   ru   r   r   r   r   r|   r   )çš™™™™™Ù?éþÿÿÿgš™™™™™@)gffffff@r   r‚   )rR   rU   rU   r   rU   rv   )r}   rp   r~   r   Ú	expected2s        r   Ú!test_as_matrix_from_generic_inputr…   å   sÉ   € âÚÚð€Eô
 ×
Ñ
˜UÓ
#×
-Ñ
-Ó
/€CÜ�—‘˜IÔ&ä—‘ÚÚÚð
ó €Iô
 ˜c !™f iÔ0ä—‘ÚÚÚð
ó €Iô
 ˜c !™f iÔ0ä—‘ÚÚÚð
ó ð ñ	€Iô
 ˜c !™f iÕ0r   c                  ó|   — g d¢g d¢g d¢g} g d¢}t        t        j                  | «      j                  «       |«       y )Nr   r   r   ©ç      à?rˆ   rˆ   rˆ   )r   r   Úfrom_matrixr#   ©rp   r&   s     r   Útest_from_single_2d_matrixr‹     s;   € âÚÚð€Cò
 )€MÜÜ× Ñ  Ó%×-Ñ-Ó/Øõr   c                  ó  — t        j                  g d¢g d¢g d¢g«      j                  d«      } t        j                  g d¢«      j                  d«      }t        t	        j
                  | «      j                  «       |«       y )Nr   r   r   rt   r‡   ©r   r   )r    r!   Úreshaper   r   r‰   r#   rŠ   s     r   Útest_from_single_3d_matrixr�     sk   € Ü
�(‰(ÚÚÚð
ó ÷ ‰7�9Óð	 ô
 —H‘HÒ1Ó2×:Ñ:¸6ÓB€MÜÜ× Ñ  Ó%×-Ñ-Ó/Øõr   c                  óŠ  — t        j                  g d¢«      t        j                  d«      z  } t        j                  g d¢g d¢g d¢g«      }t        t	        j
                  |«      j                  «       | «       t        t	        j
                  |j                  d«      «      j                  «       | j                  d«      «       y )N)r   r   rd   r   é'   )çÓ3~Ë·ì¿gâ6¿iÐ¿çnzÃoùÖ?)r“   r’   çâ6¿iÐ?)r”   r“   gÓ3~Ë·ì?rt   r�   )r    r!   r\   r   r   r‰   r#   rŽ   )r&   rp   s     r   Útest_from_matrix_calculationr•     s•   € Ü—H‘Hš\Ó*¬R¯W©W°R«[Ñ8€MÜ
�(‰(Ú/Ú.Ú-ðó €Cô
 Ü× Ñ  Ó%×-Ñ-Ó/Øôô Ü× Ñ  §¡¨YÓ!7Ó8×@Ñ@ÓBØ×!Ñ! &Ó)õ+r   c                  óŽ   — t        j                  ddd¬«      } t        t        j                  | «      j                  «       | «       y )Nr   r7   r   )ÚsizeÚrandom_state)r   Úrvsr   r   r‰   r<   ©rp   s    r   Ú test_matrix_calculation_pipeliner›   +  s4   € Ü
×
!Ñ
! !¨"¸1Ô
=€CÜœh×2Ñ2°3Ó7×AÑAÓCÀSÕIr   c                  ó   — t         j                  j                  d«      } | j                  d«      }t         j                  j                  |«      }t        t        |«      «      D ]  }||   dk  sŒ||    ||<   Œ t        j                  |«      j                  «       }t        j                  d||j                  d«      «      }t        j                  d«      }t        d«      D ]  }d|d d …||f<   Œ t        ||«       y )Nr   )r8   r   r   ú...ij,...jk->...ik)r   rU   r   r   ç      ð?)r    r:   r;   Úrandom_sampler@   ÚdetÚrangeÚlenr   r‰   r<   ÚeinsumÚ	transposerM   r   )Úrndrp   ÚdetsÚiÚ	ortho_matÚmult_resultÚeye3ds          r   Útest_from_matrix_ortho_outputr«   0  sä   € Ü
�)‰)×
Ñ
 Ó
"€CØ
×
Ñ
˜KÓ
(€CÜ�9‰9�=‰=˜Ó€DÜ”3�t“9Óò ˆà�‰7�Q‹;Ø˜!‘f�WˆC�ŠFðô ×$Ñ$ SÓ)×3Ñ3Ó5€Iä—)‘)Ð0°)Ø%×/Ñ/°	Ó:ó<€Kô �H‰H�[Ó!€EÜ�1‹Xò ˆØˆŠa��AˆgŠðô ˜k¨5Õ1r   c                  ó°  — t        j                  g d¢g d¢g d¢g«      } t        j                  g d¢g d¢g d¢g«      }t        t        j                  | «      j                  «       |d¬«       t        j                  g d	¢g d
¢g d¢g«      } t        j                  g d¢g d¢g d¢g«      }t        t        j                  | «      j                  «       |d¬«       y )N©r   r   r   r   r   )ç½5_%Ÿì?gÔx'ŸÜ?ç        )gÔx'ŸÜ¿r®   r¯   )r¯   r¯   rž   ç�íµ ÷Æ°>r[   )r   ç      à¿r   )rˆ   r   r   )r   r   rˆ   ru   r   )r    r!   r   r   r‰   r<   )rp   Úexpecteds     r   Útest_from_matrix_normalizer³   D  s¹   € Ü
�(‰(ÚÚÚðó €Cô �x‰xÒ3Ú3Ú3ð5ó 6€Hô ”H×(Ñ(¨Ó-×7Ñ7Ó9¸8È$ÕOä
�(‰(ÚÚÚðó €Cô �x‰xšÚ$Ú$ð&ó '€Hô ”H×(Ñ(¨Ó-×7Ñ7Ó9¸8È$ÖOr   c                  óV  — t        j                  d«      } d| d<   t        j                  t        d¬«      5  t        j                  | «       d d d «       d| d<   t        j                  t        d¬«      5  t        j                  | «       d d d «       y # 1 sw Y   ŒHxY w# 1 sw Y   y xY w)Nr   r   ©r   r   zNon-positive determinantra   rR   )r    r=   rh   ri   rj   r   r‰   rš   s    r   Ú)test_from_matrix_non_positive_determinantr¶   X  sŒ   € Ü
�&‰&�‹)€CØ€Cˆ�IÜ	�‰”zÐ)CÔ	Dñ "Ü×Ñ˜SÔ!÷"ð €Cˆ�IÜ	�‰”zÐ)CÔ	Dñ "Ü×Ñ˜SÔ!÷"ð "÷	"ð "ú÷"ð "ús   ¶BÁ4BÂBÂB(c                  ó˜   — g d¢} t        j                  g d¢«      }t        j                  | «      }t	        |j                  «       |«       y ©Nr   )g§”×Jè®Þ?r   r   gž<Ñ(ì?©r    r!   r   Úfrom_rotvecr   r#   ©Úrotvecr&   Úresults      r   Útest_from_1d_single_rotvecr¾   c  s7   € Ú€FÜ—H‘HÒ9Ó:€MÜ×!Ñ! &Ó)€FÜ˜fŸn™nÓ.°Õ>r   c                  óœ   — g d¢g} t        j                  g d¢g«      }t        j                  | «      }t	        |j                  «       |«       y r¸   r¹   r»   s      r   Útest_from_2d_single_rotvecrÀ   j  s<   € Úˆ[€FÜ—H‘HÒ:Ð;Ó<€MÜ×!Ñ! &Ó)€FÜ˜fŸn™nÓ.°Õ>r   c                  ó°   — g d¢g d¢g d¢g} t        j                  g d¢g d¢g d¢g«      }t        t        j                  | «      j                  «       |«       y )N©r   rU   rU   ©r   rR   rˆ   ©r   r   r   )g.pó¦GÕ?çcUÎ(§Gå?rÅ   gQœHÕ²?)gNZ]óOÝ?gNZ]óOÝ¿gNZ]óOÍ?g0×þiç?rQ   )r    r!   r   r   rº   r#   )r¼   r&   s     r   Útest_from_generic_rotvecrÆ   q  sT   € âÚÚð€Fô
 —H‘HÚ4Ú5Úð
ó €Mô
 Ü× Ñ  Ó(×0Ñ0Ó2Øõr   c                  ó  — t        j                  dt        j                  d«      z  dt        j                  d«      z  dt        j                  d«      z  gg d¢g d¢g«      } t        j                  | «      j                  «       }t        |d   d«       t        |dd d…f   | d   d	z  «       t        |d
   d«       t        |dd d…f   t        j                  g d¢«      «       t        |d   t        j                  g d¢«      «       y )Ngü©ñÒMb@?r   gü©ñÒMb@¿)çš™™™™™É?g333333Ó?r‚   rÄ   ©r   r   r   r   rˆ   ©r   r   g@ù»wÔØî?)g>Ü}²J¹?g„.eÞøÂ?g>Ü}²JÉ?rU   rQ   )r    r!   r\   r   rº   r#   r   r   )r¼   ro   s     r   Útest_from_rotvec_small_anglerË   �  sâ   € Ü�X‰XØ	”—‘˜“
Ñ	˜E¤B§G¡G¨A£JÑ.°´r·w±w¸q³zÑ0AÐBÚÚð
ó €Fô ×Ñ Ó'×/Ñ/Ó1€Dä�D˜‘J Ô"ä�D˜˜B˜Q˜B˜‘K ¨¡¨S¡Ô1ä�D˜‘J 	Ô*ÜØ��B�Q�B�‰KÜ�H‰Hò ó ôô ��a‘œ"Ÿ(™(¢<Ó0Õ1r   c                  ól  — dt        j                  d«      z  dt        j                  d«      z  dt        j                  d«      z  g} t        j                  | d¬«      }|j	                  «       }t        j
                  | «      }t        j                  |«      }|j	                  «       }t        ||«       y )Nrž   r   T©Údegrees)r    Úcbrtr   rº   r#   Údeg2radr   )Úrotvec1Úrot1Úquat1Úrotvec2Úrot2Úquat2s         r   Útest_degrees_from_rotvecr×   š  s…   € Ø”R—W‘W˜Q“ZÑ ¤r§w¡w¨q£zÑ!1°3¼¿¹À»Ñ3CÐD€GÜ×Ñ °Ô6€DØ�L‰L‹N€Eä�j‰j˜Ó!€GÜ×Ñ Ó(€DØ�L‰L‹N€Eä�E˜5Õ!r   c                  ó’   — t        j                  t        d¬«      5  t        j                  ddg«       d d d «       y # 1 sw Y   y xY w)Nú Expected `rot_vec` to have shapera   r   rU   ©rh   ri   rj   r   rº   r   r   r   Útest_malformed_1d_from_rotvecrÛ   ¦  s8   € Ü	�‰”zÐ)KÔ	Lñ %Ü×Ñ˜a ˜VÔ$÷%÷ %ñ %úó	   œ=½Ac                  óš   — t        j                  t        d¬«      5  t        j                  g d¢g d¢g«       d d d «       y # 1 sw Y   y xY w)NrÙ   ra   rg   ©r   rd   re   rf   rÚ   r   r   r   Útest_malformed_2d_from_rotvecrß   «  s?   € Ü	�‰”zÐ)KÔ	Lñ Ü×ÑÚÚðô 	÷÷ ñ úó   œAÁA
c            	      óè  — t        j                  g d¢g d¢g d¢g«      } | t         j                  j                  | d¬«      d d …d f   z  } t	        j
                  | «      j                  «       }t         j                  j                  |d¬«      }t        | d d …df   t        j                  |dz  «      «       t        t        j                  || d d …d d…f   «      t        j                  d«      «       y )	N©r   rU   rR   rˆ   ©r   rR   r   ga2U0*©3?rQ   r   r   r   rU   )r   r   )r    r!   r@   rA   r   r"   Ú	as_rotvecr   ÚcosÚcrossrM   )ro   r¼   Úangles      r   Útest_as_generic_rotvecrè   ³  s»   € Ü�8‰8ÚÚÚðó €Dð
 	ŒB�I‰I�N‰N˜4 aˆNÓ(ª¨D¨Ñ1Ñ1€Dä×Ñ Ó%×/Ñ/Ó1€FÜ�I‰I�N‰N˜6¨ˆNÓ*€Eä�Dš˜A˜‘J¤§¡ u¨Q¡w£Ô0Ü”B—H‘H˜V Tª!¨R¨a¨R¨%¡[Ó1´2·8±8¸FÓ3CÕDr   c                  óê   — t        j                  g d¢«      } t        j                  g d¢«      }t        j                  | «      j	                  «       }t        |j                  d«       t        ||«       y )N©r   rU   éýÿÿÿrU   ©gj*0	¼xâ?g$¼xò?g:2 (µû¿©r   ©r    r!   r   r"   rä   r   rw   r   ©ro   Úexpected_rotvecÚactual_rotvecs      r   Útest_as_rotvec_single_1d_inputrò   Â  sR   € Ü�8‰8’MÓ"€DÜ—h‘hÒAÓB€Oä×&Ñ& tÓ,×6Ñ6Ó8€Mä�×$Ñ$ dÔ+Ü�M ?Õ3r   c                  óî   — t        j                  g d¢g«      } t        j                  g d¢g«      }t        j                  | «      j	                  «       }t        |j                  d«       t        ||«       y )Nrê   rì   rÊ   rî   rï   s      r   Útest_as_rotvec_single_2d_inputrô   Ì  sW   € Ü�8‰8’]�OÓ$€DÜ—h‘hÒ BÐCÓD€Oä×&Ñ& tÓ,×6Ñ6Ó8€Mä�×$Ñ$ fÔ-Ü�M ?Õ3r   c                  ó  — g d¢g d¢g d¢g} t        j                  | «      }|j                  d¬«      }t        j                  j                  |«      }t        |d«       t        |d   |d   «       t        |d   |d	   «       y )
Nr   r   r   TrÍ   g      ^@r   r   rU   )r   r‰   rä   r    r@   rA   r   )rp   Úrotr¼   rç   s       r   Útest_as_rotvec_degreesr÷   Ö  sn   € â’i¢Ð
+€CÜ
×
Ñ
˜sÓ
#€CØ�]‰] 4ˆ]Ó(€FÜ�I‰I�N‰N˜6Ó"€EÜ�E˜5Ô!Ü�F˜1‘I˜v a™yÔ)Ü�F˜1‘I˜v a™yÕ)r   c                  óü   — t        j                  g d¢g d¢g d¢g«      } t        t        j                  | «      j                  «       | «       t        t        j                  | d¬«      j                  d¬«      | «       y )NrÄ   ©r   rR   rU   )ga2U0*©3¿gÇº¸�ð6?ga2U0*©?TrÍ   )r    r!   r   r   rº   rä   )r¼   s    r   Útest_rotvec_calc_pipelinerú   á  sg   € ä�X‰XÚÚÚð
ó €Fô
 ”H×(Ñ(¨Ó0×:Ñ:Ó<¸fÔEÜ”H×(Ñ(¨¸Ô>×HÑHÐQUÐHÓVØõr   c                  ó˜   — g d¢} t        j                  g d¢«      }t        j                  | «      }t	        |j                  «       |«       y ©N)r   r   rž   )r   r   r   r   ©r    r!   r   Úfrom_mrpr   r#   ©Úmrpr&   r½   s      r   Útest_from_1d_single_mrpr  í  s6   € Ú
€CÜ—H‘Hš\Ó*€MÜ×Ñ˜sÓ#€FÜ˜fŸn™nÓ.°Õ>r   c                  óœ   — g d¢g} t        j                  g d¢g«      }t        j                  | «      }t	        |j                  «       |«       y rü   rý   rÿ   s      r   Útest_from_2d_single_mrpr  ô  s:   € Úˆ-€CÜ—H‘Hšl˜^Ó,€MÜ×Ñ˜sÓ#€FÜ˜fŸn™nÓ.°Õ>r   c                  óÖ   — t        j                  g d¢g d¢g d¢g«      } t        j                  g d¢g d¢g d¢g«      }t        t        j                  | «      j                  «       |«       y )NrÂ   rÃ   rÄ   )rÈ   r‚   r‚   gš™™™™™é¿)g}�+;±ã?g}�+;±ã¿g}�+;±Ó?gß¨Ó‰�Ø¿rQ   )r    r!   r   r   rþ   r#   )r   r&   s     r   Útest_from_generic_mrpr  û  s\   € Ü
�(‰(ÚÚÚðó €Cô —H‘HÚÚ:Úðó €Mô œh×/Ñ/°Ó4×<Ñ<Ó>ÀÕNr   c                  ó’   — t        j                  t        d¬«      5  t        j                  ddg«       d d d «       y # 1 sw Y   y xY w)NúExpected `mrp` to have shapera   r   rU   ©rh   ri   rj   r   rþ   r   r   r   Útest_malformed_1d_from_mrpr	    s8   € Ü	�‰”zÐ)GÔ	Hñ "Ü×Ñ˜1˜a˜&Ô!÷"÷ "ñ "úrÜ   c                  óš   — t        j                  t        d¬«      5  t        j                  g d¢g d¢g«       d d d «       y # 1 sw Y   y xY w)Nr  ra   rg   rÞ   r  r   r   r   Útest_malformed_2d_from_mrpr    s?   € Ü	�‰”zÐ)GÔ	Hñ Ü×ÑÚÚðô 	÷÷ ñ úrà   c                  ó,  — t        j                  g d¢g d¢g d¢g«      } | t         j                  j                  | d¬«      d d …d f   z  } t        j                  g d¢g d¢g d¢g«      }t	        t        j                  | «      j                  «       |«       y )	Nrâ   rã   rQ   r   r   )gÚÁQUUÕ?g“vWUUå?çÚÁQUUÕ¿)çužF”Õxâ?gužF”Õxâ¿r  rÄ   )r    r!   r@   rA   r   r   r"   Úas_mrp)ro   Úexpected_mrps     r   Útest_as_generic_mrpr    s€   € Ü�8‰8ÚÚÚðó €Dð 	ŒB�I‰I�N‰N˜4 aˆNÓ(ª¨D¨Ñ1Ñ1€Dä—8‘8Ú-Ú-Úðó €Lô œh×0Ñ0°Ó6×=Ñ=Ó?ÀÕNr   c                  óè   — t        j                  t        j                  t         j                  dz  dz  «       ddg«      } t	        t        j                  dg d¢d¬«      j                  «       | «       y )	NrU   r   r¯   r   rI   )i  r   r   TrÍ   )r    r!   ÚtanÚpir   r   rL   r  )r  s    r   Útest_past_180_degree_rotationr  !  sW   € ô —8‘8œbŸf™f¤R§U¡U¨1¡W¨Q¡YÓ/Ð/°°aÐ8Ó9€LÜÜ×Ñ˜E¢;¸Ô=×DÑDÓFØõr   c                  óê   — t        j                  g d¢«      } t        j                  g d¢«      }t        j                  | «      j	                  «       }t        |j                  d«       t        ||«       y )Nrê   ©g²Š�Ä?g²Š�Ô?g‹O—ÁÞ¿rí   ©r    r!   r   r"   r  r   rw   r   ©ro   r  Ú
actual_mrps      r   Útest_as_mrp_single_1d_inputr  +  sR   € Ü�8‰8’MÓ"€DÜ—8‘8ÒAÓB€Lä×#Ñ# DÓ)×0Ñ0Ó2€Jä�×!Ñ! 4Ô(Ü�J Õ-r   c                  óî   — t        j                  g d¢g«      } t        j                  g d¢g«      }t        j                  | «      j	                  «       }t        |j                  d«       t        ||«       y )Nrê   r  rÊ   r  r  s      r   Útest_as_mrp_single_2d_inputr  5  sW   € Ü�8‰8’]�OÓ$€DÜ—8‘8ÒBÐCÓD€Lä×#Ñ# DÓ)×0Ñ0Ó2€Jä�×!Ñ! 6Ô*Ü�J Õ-r   c                  óâ   — t        j                  g d¢g d¢g d¢g d¢g«      } t        j                  g d¢g d¢g d¢g d¢g«      }t        t        j                  | «      j                  «       |«       y )NrÄ   rù   )gzŸp—y‚Ú?r   r   )çš™™™™™¹?rÈ   r  )gKÚ}\UUÅ¿gKÚ}\UUÅ?r  )r    r!   r   r   rþ   r  )r  r  s     r   Útest_mrp_calc_pipeliner   ?  sb   € Ü—‘ÚÚÚÚð	ó €Jô
 —8‘8ÚÚ.ÚÚð	ó €Lô
 ”H×%Ñ% jÓ1×8Ñ8Ó:¸LÕIr   c                  óÂ   — t        j                  ddd¬«      j                  «       } t        j                  g d¢«      t        j
                  d«      z  }t        | |«       y )Nr   éZ   TrÍ   rs   rU   )r   rL   r#   r    r!   r\   r   )ro   r&   s     r   Útest_from_euler_single_rotationr#  M  sD   € Ü×Ñ˜s B°Ô5×=Ñ=Ó?€DÜ—H‘Hš\Ó*¬R¯W©W°Q«ZÑ7€MÜ�D˜-Õ(r   c                  ó´   — t        j                  ddd¬«      j                  «       } t        j                  ddd¬«      j                  «       }t        | |«       y )Nr   r"  TrÍ   ÚZ)r   rL   r<   r   ©Ú	extrinsicÚ	intrinsics     r   Ú(test_single_intrinsic_extrinsic_rotationr)  S  sF   € Ü×#Ñ# C¨°TÔ:×DÑDÓF€IÜ×#Ñ# C¨°TÔ:×DÑDÓF€IÜ�I˜yÕ)r   c                  ó2  — t         j                  j                  d«      } | j                  ddd¬«      }|d d …d d d…f   }t	        j
                  d|d¬«      j                  «       }t	        j
                  d	|d¬«      j                  «       }t        ||«       y )
Nr   é´   )rd   r   ©ÚlowÚhighr—   rR   rI   TrÍ   ÚZYX)r    r:   r;   Úrandintr   rL   r#   r   )r¥   ÚaÚbr   r   s        r   Útest_from_euler_rotation_orderr3  Y  s   € ä
�)‰)×
Ñ
 Ó
"€CØ�‰˜ ¨&ˆÓ1€AØ	Š!‰TˆrˆTˆ'‰
€AÜ×Ñ˜E 1¨dÔ3×;Ñ;Ó=€AÜ×Ñ˜E 1¨dÔ3×;Ñ;Ó=€AÜ�A�qÕr   c                  ó¨   — t        j                  dddgd¬«      j                  «       } t        j                  g d¢g d¢g d¢g«      }t        | |«       y )NÚzxr"  TrÍ   ru   ©r   r   rR   r   )r   rL   r<   r    r!   r   )rp   rx   s     r   Ú-test_from_euler_elementary_extrinsic_rotationr7  c  sK   € ä
×
Ñ
˜d R¨ H°dÔ
;×
EÑ
EÓ
G€CÜ—8‘8ÚÚÚðó €Lô
 ˜c <Õ0r   c            	      óh  — g d¢g d¢g d¢g} t        j                  d| d¬«      j                  «       }t        |d   t	        j
                  g d¢g d	¢g d
¢g«      «       t        |d   t	        j
                  g d¢g d¢g d¢g«      «       t        |d   t	        j
                  g d¢g d¢g d¢g«      «       y )N©é   é<   é-   ©r:  r;  r:  ©r<  r:  r;  ÚZXYTrÍ   r   )g#ß Ž˜Ó?ç      Ð¿gÎ™þ6Õdí?)g$+¿ÆHì?ç‘+Pæz¶Û?çPï˜pž Æ¿)gPï˜pž Ö¿ç‘+Pæz¶ë?gPï˜pž Ö?r   )g�”+aá?r@  çÉ(s=Ûé?)rD  rA  g�&(�¸‘Ù¿)r@  rC  rA  rU   )gøaÎ}ƒ@¨?gF�6Ž˜ã¿gå^�µ@é?)g0	¼8–å?gF�6Ž˜ã?gä˜Ñ4ÍàÛ?)ç      è¿rˆ   rA  ©r   rL   r<   r   r    r!   ©Úanglesrp   s     r   Ú&test_from_euler_intrinsic_rotation_312rI  n  sª   € âÚÚð
€Fô
 ×
Ñ
˜e V°TÔ
:×
DÑ
DÓ
F€Cä˜c !™f¤b§h¡hÚ*Ú*Ú*ð0ó 'ô ô ˜c !™f¤b§h¡hÚ*Ú*Ú*ð0ó 'ô ô ˜c !™f¤b§h¡hÚ*Ú)Ú*ð0ó 'õ r   c            	      óh  — g d¢g d¢g d¢g} t        j                  d| d¬«      j                  «       }t        |d   t	        j
                  g d¢g d	¢g d
¢g«      «       t        |d   t	        j
                  g d¢g d¢g d¢g«      «       t        |d   t	        j
                  g d¢g d¢g d¢g«      «       y )Nr9  r=  r>  ÚZXZTrÍ   r   )ç>ìdôÌàÛ?gŠ ­µ@é¿rA  )çél>–å?ç^¯|‚@¨¿rE  )çó±XŽ˜ã?rO  rˆ   r   ©g      ä?g­ ¼,ÜÈä¿rA  ©g­ ¼,ÜÈä?g      À?rE  ©rA  ç      è?rˆ   rU   )rB  g4§&Õdí¿çß'Üež Ö?)ç³cÆHì?çó±XŽ˜Ó¿gß'Üež Ö¿)rA  ç      Ð?rC  rF  rG  s     r   Ú&test_from_euler_intrinsic_rotation_313rX  ‰  sª   € âÚÚð
€Fô
 ×
Ñ
˜e V°TÔ
:×
DÑ
DÓ
F€Cä˜c !™f¤b§h¡hÚ,Ú,Ú*ð0ó 'ô ô ˜c !™f¤b§h¡hÚ+Ú*Ú'ð0ó 'ô ô ˜c !™f¤b§h¡hÚ-Ú.Ú*ð0ó 'õ r   c            	      óh  — g d¢g d¢g d¢g} t        j                  d| d¬«      j                  «       }t        |d   t	        j
                  g d¢g d	¢g d
¢g«      «       t        |d   t	        j
                  g d¢g d	¢g d¢g«      «       t        |d   t	        j
                  g d¢g d¢g d¢g«      «       y )Nr9  r=  r>  ÚzxyTrÍ   r   )ç4§&Õdí?gPï˜pž Æ?rT  )rW  rA  g‘+Pæz¶ë¿)rV  rU  rT  r   )gä
”¹žíî?çŒ\�2×³­¿rW  )r\  g­ ¼,ÜÈì?rA  rU   )rM  rN  rS  )rO  rO  r±   )g>ìdôÌàÛ¿çŠ ­µ@é?rA  rF  rG  s     r   Ú&test_from_euler_extrinsic_rotation_312r^  ¤  sª   € âÚÚð
€Fô
 ×
Ñ
˜e V°TÔ
:×
DÑ
DÓ
F€Cä˜c !™f¤b§h¡hÚ+Ú+Ú-ð0ó 'ô ô ˜c !™f¤b§h¡hÚ+Ú+Ú+ð0ó 'ô ô ˜c !™f¤b§h¡hÚ,Ú,Ú,ð0ó 'õ r   c            	      óh  — g d¢g d¢g d¢g} t        j                  d| d¬«      j                  «       }t        |d   t	        j
                  g d¢g d	¢g d
¢g«      «       t        |d   t	        j
                  g d¢g d¢g d
¢g«      «       t        |d   t	        j
                  g d¢g d¢g d¢g«      «       y )Nr9  r=  r>  ÚzxzTrÍ   r   )rL  gél>–å¿rO  )r]  rN  gó±XŽ˜ã¿rR  r   rP  rQ  rU   )rB  g³cÆHì¿rA  )r[  rV  r@  )rT  rT  rC  rF  rG  s     r   Ú&test_from_euler_extrinsic_rotation_313ra  ¿  sª   € âÚÚð
€Fô
 ×
Ñ
˜e V°TÔ
:×
DÑ
DÓ
F€Cä˜c !™f¤b§h¡hÚ-Ú.Ú)ð0ó 'ô ô ˜c !™f¤b§h¡hÚ,Ú+Ú)ð0ó 'ô ô ˜c !™f¤b§h¡hÚ,Ú,Ú+ð0ó 'õ r   Ú	seq_tuplerI   r(  )FTc                 ó  — d„ }t         j                  j                  d«      }d}t        j                  |df«      }|j	                  t         j
                   t         j
                  |f¬«      |d d …df<   |j	                  t         j
                   dz  t         j
                  dz  |f¬«      |d d …df<   |j	                  t         j
                   t         j
                  |f¬«      |d d …df<   dj                  | «      }|r|j                  «       }t        j                  ||«      }|j                  |«      }|j                  |«      }	t        ||dd	¬
«       t        ||	dd	¬
«        |||z
  dd«        ||	|z
  dd«       y )Nc                 ó  — t        j                  | d¬«      }t        j                  | d¬«      }t        j                  ||«      }t        j                  t        j
                  |«      |k  «      sJ ‚t        j                  ||k  «      sJ ‚y ©Nr   r   ©r    ÚmeanÚstdÚhypotÚallrX   ©ÚerrorÚmean_maxÚrms_maxrg  rh  Úrmss         r   Ú
test_statsz1test_as_euler_asymmetric_axes.<locals>.test_statsÞ  óg   € Ü�w‰w�u 1Ô%ˆÜ�f‰f�U Ô#ˆÜ�h‰h�t˜SÓ!ˆÜ�v‰v”b—f‘f˜T“l XÑ-Ô.Ð.Ð.Ü�v‰v�c˜G‘mÔ$Ð$Ñ$r   r   éè  r   r,  rU   r   Ú çê-�™—q=©r5   r4   r1   ç›+¡†›„=©r    r:   r;   ÚemptyÚuniformr  ÚjoinÚupperr   rL   Úas_eulerÚ_as_euler_from_matrixr   ©
rb  r(  rp  r¥   ÚnrH  ÚseqÚrotationÚangles_quatÚ
angles_mats
             r   Útest_as_euler_asymmetric_axesr„  Ú  sB  € ò%ô �)‰)×
Ñ
 Ó
"€CØ€AÜ�X‰X�q˜!�fÓ€FØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ—;‘;¤B§E¡E 6¨A¡:´B·E±E¸A±IÀQÀD�;ÓI€FŠ1ˆaˆ4�LØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�Là
�'‰'�)Ó
€CÙð �i‰i‹kˆÜ×"Ñ" 3¨Ó/€HØ×#Ñ# CÓ(€KØ×/Ñ/°Ó4€JÜ�F˜K¨a°eÕ<Ü�F˜J¨Q°UÕ;Ùˆ{˜VÑ# U¨EÔ2Ùˆz˜FÑ" E¨5Õ1r   c                 óð  — d„ }t         j                  j                  d«      }d}t        j                  |df«      }|j	                  t         j
                   t         j
                  |f¬«      |d d …df<   |j	                  dt         j
                  |f¬«      |d d …df<   |j	                  t         j
                   t         j
                  |f¬«      |d d …df<   dj                  | d   | d   | d   g«      }|r|j                  «       }t        j                  ||«      }|j                  |«      }|j                  |«      }	t        ||dd	¬
«       t        ||	dd¬
«        |||z
  dd«        ||	|z
  dd	«       y )Nc                 ó  — t        j                  | d¬«      }t        j                  | d¬«      }t        j                  ||«      }t        j                  t        j
                  |«      |k  «      sJ ‚t        j                  ||k  «      sJ ‚y re  rf  rk  s         r   rp  z0test_as_euler_symmetric_axes.<locals>.test_statsÿ  rq  r   r   rr  r   r,  r   rU   rs  g‚vIhÂ%<=ru  ç•Ö&è.>r2   rv  r1   rw  r~  s
             r   Útest_as_euler_symmetric_axesrˆ  û  sG  € ò%ô �)‰)×
Ñ
 Ó
"€CØ€AÜ�X‰X�q˜!�fÓ€FØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ—;‘; 1¬2¯5©5¸°t�;Ó<€FŠ1ˆaˆ4�LØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�Lð �'‰'�9˜Q‘< ¨1¡¨y¸©|Ð<Ó
=€CÙØ�i‰i‹kˆÜ×"Ñ" 3¨Ó/€HØ×#Ñ# CÓ(€KØ×/Ñ/°Ó4€JÜ�F˜K¨a°eÕ<Ü�F˜J¨Q°TÕ:Ùˆ{˜VÑ# U¨EÔ2Ùˆz˜FÑ" E¨5Õ1r   c                 óÆ  — t        j                  g d¢g d¢g d¢g d¢g«      }dj                  | «      }|r|j                  «       }t	        j
                  ||d¬«      }|j                  «       }t        j                  t        d¬	«      5  |j                  |d¬«      }d d d «       t	        j
                  |d¬«      j                  «       }t        ||«       y # 1 sw Y   Œ<xY w)
N©r<  r"  é#   ©r‹  é¦ÿÿÿé   ©r‹  r"  é   ©r�  r�  é   rs  TrÍ   úGimbal lockra   ©r    r!   rz  r{  r   rL   r<   rh   ÚwarnsÚUserWarningr|  r   ©rb  r(  rH  r€  r�  Úmat_expectedÚangle_estimatesÚmat_estimateds           r   Ú(test_as_euler_degenerate_asymmetric_axesr›    sÄ   € ô �X‰XÚÚÚÚð	ó €Fð �'‰'�)Ó
€CÙð �i‰i‹kˆÜ×"Ñ" 3¨¸Ô=€HØ×%Ñ%Ó'€Lä	�‰”k¨Ô	7ñ ?Ø"×+Ñ+¨C¸Ð+Ó>ˆ÷?ä×'Ñ'¨¨_ÀdÔK×UÑUÓW€Mä˜l¨MÕ:÷	?ð ?ús   ÂCÃC c                 óÞ  — t        j                  g d¢g d¢g d¢g d¢g«      }dj                  | d   | d   | d   g«      }|r|j                  «       }t	        j
                  ||d¬	«      }|j                  «       }t        j                  t        d
¬«      5  |j                  |d¬	«      }d d d «       t	        j
                  |d¬	«      j                  «       }t        ||«       y # 1 sw Y   Œ<xY w)N©r’  r   r;  ©r‹  r   éK   ©r;  r+  r‹  ©r’  iLÿÿÿr�  rs  r   r   TrÍ   r“  ra   r”  r—  s           r   Ú'test_as_euler_degenerate_symmetric_axesr¢  5  s×   € ô �X‰XÚÚÚÚð	ó €Fð �'‰'�9˜Q‘< ¨1¡¨y¸©|Ð<Ó
=€CÙð �i‰i‹kˆÜ×"Ñ" 3¨¸Ô=€HØ×%Ñ%Ó'€Lä	�‰”k¨Ô	7ñ ?Ø"×+Ñ+¨C¸Ð+Ó>ˆ÷?ä×'Ñ'¨¨_ÀdÔK×UÑUÓW€Mä˜l¨MÕ:÷	?ð ?ús   ÂC#Ã#C,c                 óä  — t        j                  g d¢g d¢g d¢g d¢g«      }dj                  | «      }|r|j                  «       }t	        j
                  ||d¬«      }t        j                  t        d¬	«      5  |j                  |d¬«      }d d d «       t        j                  t        d¬	«      5  |j                  |d¬«      }d d d «       t        d d …d
dgf   d d …d
dgf   d
d¬«       t        |d d …df   |d d …df   d
d¬«       t        j                  g d¢g d¢g d¢g d¢g«      }|d d …df   d
k(  }dj                  | d
   | d   | d
   g«      }|r|j                  «       }t	        j
                  ||d¬«      }t        j                  t        d¬	«      5  |j                  |d¬«      }d d d «       t        j                  t        d¬	«      5  |j                  |d¬«      }d d d «       t        |d d …d
dgf   |d d …d
dgf   d
d¬«       t        || df   || df   d
d¬«       t        ||df   ||df   d¬«       y # 1 sw Y   �Œ¶xY w# 1 sw Y   �ŒŒxY w# 1 sw Y   Œ¯xY w# 1 sw Y   Œ„xY w)NrŠ  rŒ  r�  r‘  rs  TrÍ   r“  ra   r   rU   rt  ru  r   çH¯¼šò×z>r�  rž  r   r¡  r°   r[   )r    r!   rz  r{  r   rL   rh   r•  r–  r}  r|  r   )rb  r(  rH  r€  rö   Úestimates_matrixÚestimates_quatÚidxs           r   Ú+test_as_euler_degenerate_compare_algorithmsr¨  Q  s}  € ô �X‰XÚÚÚÚð	ó €Fð �'‰'�)Ó
€CÙð �i‰i‹kˆä
×
Ñ
˜c 6°4Ô
8€CÜ	�‰”k¨Ô	7ñ HØ×4Ñ4°SÀ$Ð4ÓGÐ÷Hä	�‰”k¨Ô	7ñ 9ØŸ™ c°4˜Ó8ˆ÷9äØš˜Q ˜F˜Ñ# ^²A¸¸1°v°IÑ%>ÀQÈUõô Ð$¢Q¨ TÑ*¨Nº1¸a¸4Ñ,@ÀqÈtÕTô �X‰XÚÚÚÚð	ó €Fð ’�A�‰,˜!Ñ
€Cð �'‰'�9˜Q‘< ¨1¡¨y¸©|Ð<Ó
=€CÙð �i‰i‹kˆä
×
Ñ
˜c 6°4Ô
8€CÜ	�‰”k¨Ô	7ñ HØ×4Ñ4°SÀ$Ð4ÓGÐ÷Hä	�‰”k¨Ô	7ñ 9ØŸ™ c°4˜Ó8ˆ÷9äØš˜Q ˜F˜Ñ# ^²A¸¸1°v°IÑ%>ÀQÈUõô Ø˜#˜˜q˜Ñ! >°3°$¸°'Ñ#:ÀÈõô Ø˜˜a˜Ñ  .°°a°Ñ"8¸tö÷UHñ Hú÷9ñ 9ú÷8Hð Hú÷9ð 9ús0   Á8I Â/IÆIÇI&É I
ÉIÉI#É&I/c                  óÀ  — t         j                  j                  d«      } d}t        j                  || ¬«      }|j	                  «       }|j                  «       }|j                  «       }t        j                  d||«      }t        j                  d||«      }t        j                  |ddf«      }t        j                  d«      |d d  t        ||«       t        ||«       y )Nr   r7   )Únumr˜   r�   r   )
r    r:   r;   r   r]   r<   r£   rx  r=   r   )	r¥   r  ÚprE   Úp_matÚq_matÚresult1Úresult2rª   s	            r   Útest_invr°  •  s«   € Ü
�)‰)×
Ñ
 Ó
"€CØ
€Aä�‰˜A¨CÔ0€AØ	�‰‹€Aà�K‰K‹M€EØ�K‰K‹M€EÜ�i‰iÐ,¨e°UÓ;€GÜ�i‰iÐ,¨e°UÓ;€Gä�H‰H�a˜˜A�YÓ€EÜ�v‰v�a‹y€E‰!€Hä˜g uÔ-Ü˜g uÕ-r   c                  óô  — t         j                  j                  d«      } t        j                  | ¬«      }|j	                  «       }|j                  «       }|j                  «       }t        j                  ||«      }t        j                  ||«      }t        j                  d«      }t        ||«       t        ||«       t        j                  d| ¬«      }|j	                  «       }	|j                  «       }
|	j                  «       }t        j                  d|
|«      }t        j                  d||
«      }t        j                  d«      }t        j                  d«      |d d  t        ||«       t        ||«       y )Nì	   #Þ;h2ã9¾s+,g0øHn ©rD   r   r   )rª  rD   r�   rt   )r    r:   Údefault_rngr   r]   r<   Údotr=   r   r£   rx  )rD   r«  rE   r¬  r­  Úres1Úres2r=   r   r   Úx_matrixÚy_matrixr®  r¯  rª   s                  r   Útest_inv_single_rotationrº  ¨  s  € Ü
�)‰)×
Ñ
Ð GÓ
H€CÜ�‰˜CÔ €AØ	�‰‹€Aà�K‰K‹M€EØ�K‰K‹M€EÜ�6‰6�%˜Ó€DÜ�6‰6�%˜Ó€Dä
�&‰&�‹)€Cä˜d CÔ(Ü˜d CÔ(ä�‰˜A 3Ô'€AØ	�‰‹€Aà�{‰{‹}€HØ�{‰{‹}€HÜ�i‰iÐ,¨h¸ÓA€GÜ�i‰iÐ,¨h¸ÓA€Gä�H‰H�YÓ€EÜ�v‰v�a‹y€E‰!€Hä˜g uÔ-Ü˜g uÕ-r   c                  óØ   — d} t        t        j                  | «      j                  «       d«       t        t        j                  | «      j	                  «       j                  «       d«       y )Nr7   r   )r   r   ÚidentityÚ	magnituder]   )r  s    r   Útest_identity_magnituder¾  Æ  sL   € Ø
€AÜ”H×%Ñ% aÓ(×2Ñ2Ó4°aÔ8Ü”H×%Ñ% aÓ(×,Ñ,Ó.×8Ñ8Ó:¸AÕ>r   c                  ó¼   — t        j                  «       j                  «       dk(  sJ ‚t        j                  «       j                  «       j                  «       dk(  sJ ‚y )Nr   )r   r¼  r½  r]   r   r   r   Útest_single_identity_magnituderÀ  Ì  sK   € Ü×ÑÓ×(Ñ(Ó*¨aÒ/Ð/Ð/Ü×ÑÓ×"Ñ"Ó$×.Ñ.Ó0°AÒ5Ð5Ñ5r   c                  ó6  — d} t        j                  | d¬«      }|t        j                  | «      z  }t        |j	                  «       |j	                  «       «       ||j                  «       z  }t        |j                  «       t        j                  | «      «       y ©Nr7   r   r³  ©	r   r:   r¼  r   r#   r]   r½  r    rM   ©r  r«  r½   s      r   Útest_identity_invariancerÅ  Ñ  sn   € Ø
€AÜ�‰˜˜qÔ!€Aà”×"Ñ" 1Ó%Ñ%€FÜ˜aŸi™i›k¨6¯>©>Ó+;Ô<à�a—e‘e“gÑ€FÜ˜f×.Ñ.Ó0´"·(±(¸1³+Õ>r   c                  ó4  — d} t        j                  | d¬«      }|t        j                  «       z  }t        |j	                  «       |j	                  «       «       ||j                  «       z  }t        |j                  «       t        j                  | «      «       y rÂ  rÃ  rÄ  s      r   Útest_single_identity_invariancerÇ  Ü  sl   € Ø
€AÜ�‰˜˜qÔ!€Aà”×"Ñ"Ó$Ñ$€FÜ˜aŸi™i›k¨6¯>©>Ó+;Ô<à�a—e‘e“gÑ€FÜ˜f×.Ñ.Ó0´"·(±(¸1³+Õ>r   c                  óÎ  — t        j                  t        j                  d«      «      } | j	                  «       }t        |t        j                  t        j                  t        j                  dg«       t        j                  t        j                  d«       «      } | j	                  «       }t        |t        j                  t        j                  t        j                  dg«       y )Nr   r   )r   r"   r    r=   r½  r   r  )r%   r½   s     r   Útest_magnituderÉ  ç  sˆ   € Ü×Ñœ2Ÿ6™6 !›9Ó%€AØ�[‰[‹]€FÜ˜f¤r§u¡u¬b¯e©e´R·U±U¸AÐ&>Ô?ä×ÑœBŸF™F 1›I˜:Ó&€AØ�[‰[‹]€FÜ˜f¤r§u¡u¬b¯e©e´R·U±U¸AÐ&>Õ?r   c                  óì   — t        j                  t        j                  d«      «      } | d   j	                  «       }t        |t        j                  «       | d   j	                  «       }t        |d«       y )Nr   r   r   )r   r"   r    r=   r½  r   r  )r%   r®  r¯  s      r   Útest_magnitude_single_rotationrË  ñ  sR   € Ü×Ñœ2Ÿ6™6 !›9Ó%€AØ�‰d�n‰nÓ€GÜ�GœRŸU™UÔ#à�‰d�n‰nÓ€GÜ�G˜QÕr   c                  óL  — t         j                  j                  d«      } t        j                  d| ¬«      }t        j                  d| ¬«      }||j	                  «       z  }|j                  «       }t        j                  |«      }t        |j                  ||«      ||k  «       y )Nr²  r7   r³  )	r    r:   r´  r   r]   r½  Úmedianr   Úapprox_equal)rD   r«  rE   r%   Úr_magr5   s         r   Útest_approx_equalrÐ  ú  sx   € Ü
�)‰)×
Ñ
Ð GÓ
H€CÜ�‰˜ Ô$€AÜ�‰˜ Ô$€AØ	ˆA�E‰E‹G‰€AØ�K‰K‹M€EÜ�9‰9�UÓ€DÜ�—‘  4Ó(¨5°4©<Õ9r   c                  óÎ  — t        j                  g d¢«      } t        j                  t        j                  d«      «      }| j                  |d   «      sJ ‚| j                  |d   «      rJ ‚| j                  |d   d¬«      rJ ‚| j                  |d   dd¬	«      rJ ‚t        j                  t        d
¬«      5  | j                  |d   d¬«      sJ ‚	 d d d «       y # 1 sw Y   y xY w)N)r   r   r‡  r   r   r   ç»½×Ùß|Û=r[   g:Œ0âŽyE>T)r5   rÎ   zatol must be setra   rÍ   )	r   rº   r"   r    r=   rÎ  rh   r•  r–  )r«  rE   s     r   Ú!test_approx_equal_single_rotationrÓ    sÎ   € ô 	×Ñš\Ó*€AÜ×Ñœ2Ÿ6™6 !›9Ó%€AØ�>‰>˜!˜A™$ÔÐÐØ�~‰~˜a ™dÔ#Ð#Ð#ð �~‰~˜a ™d¨ˆ~Ô/Ð/Ð/Ø�~‰~˜a ™d¨°tˆ~Ô<Ð<Ð<Ü	�‰”kÐ);Ô	<ñ 2Ø�~‰~˜a ™d¨Dˆ~Ô1Ð1Ñ1÷2÷ 2ñ 2ús   Â8CÃC$c                  ób  — t        j                  t        j                  d«       t        j                  d«      f«      } t        j                  dt         j                  dz  d«      }|D ]D  }t        j                  || z  «      }t        |j                  «       j                  «       dd¬«       ŒF y )Nr   r   rU   r8   rÒ  r[   )
r    Úconcatenater=   Úlinspacer  r   rº   r   rg  r½  )ÚaxesÚthetasÚtr%   s       r   Ú	test_meanrÚ    s   € Ü�>‰>œBŸF™F 1›I˜:¤r§v¡v¨a£yÐ1Ó2€DÜ�[‰[˜œBŸE™E A™I sÓ+€FØò =ˆÜ× Ñ   T¡Ó*ˆÜ˜Ÿ™›×*Ñ*Ó,¨a°eÖ<ñ=r   c                  ó¦  — t        j                  g d¢g d¢g d¢g«      } t        j                  dt         j                  dz  d«      }|D ]†  }t	        j
                  || d d z  «      }|j                  ddg¬«      }t	        j
                  || z  «      }|j                  «       }t        ||j                  «       z  j                  «       dd¬	«       Œˆ y )
NrÄ   r   r   rU   r8   r   ©ÚweightsrÒ  r[   )
r    r!   rÖ  r  r   rº   rg  r   r]   r½  )r×  rØ  rÙ  ÚrwÚmwr%   Úms          r   Útest_weighted_meanrá    s®   € ä�8‰8’Y¢	ª9Ð5Ó6€DÜ�[‰[˜œBŸE™E A™I sÓ+€FØò CˆÜ×!Ñ! ! d¨2¨A h¡,Ó/ˆØ�W‰W˜a ˜VˆWÓ$ˆä× Ñ   T¡Ó*ˆØ�F‰F‹HˆÜ˜˜RŸV™V›X™×0Ñ0Ó2°A¸EÖBñCr   c                  ó   — t        j                  t        d¬«      5  t        j                  t        j                  d«      «      } | j                  t        j                  d«       ¬«       d d d «       y # 1 sw Y   y xY w)Nznon-negativera   r   rÜ  )	rh   ri   rj   r   r"   r    r=   rg  Úones©r%   s    r   Útest_mean_invalid_weightsrå  (  sU   € Ü	�‰”z¨Ô	8ñ $Ü×ÑœrŸv™v a›yÓ)ˆØ	�‰œŸ™ ›
�{ˆÔ#÷$÷ $ñ $ús   œAA4Á4A=c                  óp   — t        j                  «       j                  d¬«      } t        | t         «      sJ ‚y )NF©Úreturn_indices)r   r¼  ÚreduceÚ
isinstance)r½   s    r   Útest_reduction_no_indicesrë  .  s.   € Ü×ÑÓ ×'Ñ'°uÐ'Ó=€FÜ�fœhÔ'Ð'Ñ'r   c                  ó®   — t        j                  «       j                  d¬«      } t        | «      t        u sJ ‚t        | «      dk(  sJ ‚| \  }}}|�J ‚|�J ‚y )NTrç  r   )r   r¼  ré  ÚtypeÚtupler¢   )r½   ÚreducedÚ	left_bestÚ
right_bests       r   Útest_reduction_none_indicesrò  3  sf   € Ü×ÑÓ ×'Ñ'°tÐ'Ó<€FÜ�‹<œ5Ñ Ð Ð Üˆv‹;˜!ÒÐÐà%+Ñ"€GˆY˜
ØÐÐÐØÐÐÑr   c                  óR  — t         j                  j                  d«      } t        j                  d| ¬«      }t        j                  d| ¬«      }t        j                  d| ¬«      }|j	                  ||d¬«      \  }}}t        j
                  t        |«      t        |«      t        |«      f«      }t        |«      D ]]  \  }}	t        |«      D ]J  \  }
}t        |«      D ]7  \  }}t        j                  |	|z  |z  j                  «       d   «      |||
|f<   Œ9 ŒL Œ_ t        j                  t        j                  |d	d
«      |j                  d	   df«      }t        j                  t        j                  |t        |«      df«      d	¬«      }|t        |«      z  }|t        |«      z  }||k(  j                  «       sJ ‚||k(  j                  «       sJ ‚||   |z  ||   z  }|j                  «       |z  j!                  «       }t#        |t        j
                  t        |«      «      «       y )Nr²  r   r³  r7   re   Trç  r   r   r   rR   r   )r    r:   r´  r   ré  rM   r¢   Ú	enumeraterX   r#   rŽ   Úmoveaxisrw   Úargmaxrj  r]   r½  r   )rD   Úlr%   r«  rï  rð  rñ  Úscalarsr§   ÚliÚjÚpjÚkÚrkÚmax_indÚleft_best_checkÚright_best_checkÚreduced_checkÚmags                      r   Ú!test_reduction_scalar_calculationr  =  så  € Ü
�)‰)×
Ñ
Ð GÓ
H€CÜ�‰˜˜sÔ#€AÜ�‰˜ Ô$€AÜ�‰˜˜sÔ#€AØ%&§X¡X¨a°À4 XÓ%HÑ"€GˆY˜
ô �h‰hœ˜A›¤ A£¬¨A«Ð/Ó0€GÜ˜1“ò G‰ˆˆ2Ü˜q“\ò 	G‰EˆAˆrÜ" 1›ò G‘��2Ü#%§6¡6¨2°©7°R©<×*@Ñ*@Ó*BÀ1Ñ*EÓ#F�˜˜1˜a˜Ò ñGñ	GðGô �j‰jœŸ™ W¨a°Ó3°g·m±mÀAÑ6FÈÐ5KÓL€Gä�i‰iœŸ
™
 7¬S°«V°R¨LÓ9ÀÔB€GØ¤ Q£Ñ'€OØ¤ Q£Ñ'ÐØ˜Ñ(×-Ñ-Ô/Ð/Ð/ØÐ*Ñ*×/Ñ/Ô1Ð1Ð1à�oÑ&¨Ñ*¨QÐ/?Ñ-@Ñ@€MØ�;‰;‹=˜=Ñ(×
3Ñ
3Ó
5€CÜ˜c¤2§8¡8¬C°«FÓ#3Õ4r   c                  ó’  — t        j                  g d¢g d¢g d¢g«      } t        j                  | «      }t        j                  t        j                  | d¬«      «      }t        j                  g d¢«      }t        j                  |d¬«      }t        j                  g d¢«      }t        j                  |d¬«      }t        |j                  |«      |«       t        |j                  |«      |«       t        |j                  |«      |«       t        |j                  |«      |«       t        j                  g d¢«      }t        j                  |d¬«      }t        |j                  |d	¬
«      |«       t        |j                  |d	¬
«      |«       t        |j                  |d	¬
«      |«       t        |j                  |d	¬
«      |«       y )Nru   r   r   r   r   rc   ©rƒ   r   r   ©rU   rR   r   T©Úinverse©r    r!   r   r‰   Úexpand_dimsr   Úapply)	rp   Úr_1dÚr_2dÚv_1dÚv_2dÚv1d_rotatedÚv2d_rotatedÚv1d_inverseÚv2d_inverses	            r   Ú'test_apply_single_rotation_single_pointr  W  sM  € Ü
�(‰(ÚÚÚðó €Cô
 ×Ñ Ó$€DÜ×Ñ¤§¡¨s¸Ô ;Ó<€Dä�8‰8’IÓ€DÜ�>‰>˜$ QÔ'€DÜ—(‘(š:Ó&€KÜ—.‘. °1Ô5€Kä�D—J‘J˜tÓ$ kÔ2Ü�D—J‘J˜tÓ$ kÔ2Ü�D—J‘J˜tÓ$ kÔ2Ü�D—J‘J˜tÓ$ kÔ2ä—(‘(š:Ó&€KÜ—.‘. °1Ô5€Kä�D—J‘J˜t¨T�JÓ2°KÔ@Ü�D—J‘J˜t¨T�JÓ2°KÔ@Ü�D—J‘J˜t¨T�JÓ2°KÔ@Ü�D—J‘J˜t¨T�JÓ2°KÕ@r   c                  ó@  — t        j                  g d¢g d¢g d¢g«      } t        j                  | «      }t        j                  t        j                  | d¬«      «      }t        j                  g d¢g d¢g«      }t        j                  g d¢g d	¢g«      }t        |j                  |«      |«       t        |j                  |«      |«       t        j                  g d
¢g d¢g«      }t        |j                  |d¬«      |«       t        |j                  |d¬«      |«       y )Nru   r   r   r   r   rc   ©r   r   rd   r  )éûÿÿÿr   rd   r  )r   éüÿÿÿrd   Tr  r	  )rp   Úr1Úr2ÚvÚ	v_rotatedÚ	v_inverses         r   Ú*test_apply_single_rotation_multiple_pointsr  s  sÖ   € Ü
�(‰(ÚÚÚðó €Cô
 
×	Ñ	˜cÓ	"€BÜ	×	Ñ	œbŸn™n¨S°qÔ9Ó	:€Bä
�‰’)šYÐ'Ó(€AÜ—‘š*¢jÐ1Ó2€Iä�B—H‘H˜Q“K Ô+Ü�B—H‘H˜Q“K Ô+ä—‘š*¢jÐ1Ó2€Iä�B—H‘H˜Q¨�HÓ-¨yÔ9Ü�B—H‘H˜Q¨�HÓ-¨yÕ9r   c                  ó„  — t        j                  d«      } t        j                  g d¢g d¢g d¢g«      | d<   t        j                  g d¢g d¢g d¢g«      | d<   t        j                  | «      }t        j                  g d	¢«      }t        j
                  |d¬
«      }t        j                  g d¢g d¢g«      }t        |j                  |«      |«       t        |j                  |«      |«       t        j                  g d¢g d¢g«      }t        |j                  |d¬«      |«       t        |j                  |d¬«      |«       y )N©rU   r   r   ru   r   r   r   r6  r   r   rc   r   r  )r   rë   rU   r  )r   r   rƒ   Tr  )r    rx  r!   r   r‰   r
  r   r  )rp   r%   Úv1Úv2r  r  s         r   Ú*test_apply_multiple_rotations_single_pointr#  ˆ  sú   € Ü
�(‰(�9Ó
€CÜ�X‰XÚÚÚðó €Cˆ�Fô
 �X‰XÚÚÚðó €Cˆ�Fô
 	×Ñ˜SÓ!€Aä	�‰’)Ó	€BÜ	�‰˜ Ô	#€Bä—‘š*¢jÐ1Ó2€Iä�A—G‘G˜B“K Ô+Ü�A—G‘G˜B“K Ô+ä—‘š*¢jÐ1Ó2€Iä�A—G‘G˜B¨�GÓ-¨yÔ9Ü�A—G‘G˜B¨�GÓ-¨yÕ9r   c                  óî  — t        j                  d«      } t        j                  g d¢g d¢g d¢g«      | d<   t        j                  g d¢g d¢g d¢g«      | d<   t        j                  | «      }t        j                  g d	¢g d
¢g«      }t        j                  g d¢g d¢g«      }t        |j                  |«      |«       t        j                  g d¢g d¢g«      }t        |j                  |d¬«      |«       y )Nr   ru   r   r   r   r6  r   r   rc   r  r  )r   iúÿÿÿr   r  )r   rd   r  Tr  )r    rx  r!   r   r‰   r   r  )rp   r%   r  r  r  s        r   Ú-test_apply_multiple_rotations_multiple_pointsr%  ¤  sÆ   € Ü
�(‰(�9Ó
€CÜ�X‰XÚÚÚðó €Cˆ�Fô
 �X‰XÚÚÚðó €Cˆ�Fô
 	×Ñ˜SÓ!€Aä
�‰’)šYÐ'Ó(€AÜ—‘š*¢jÐ1Ó2€IÜ�A—G‘G˜A“J 	Ô*ä—‘š*¢jÐ1Ó2€IÜ�A—G‘G˜A t�GÓ,¨iÕ8r   c                  óÒ  — t        j                  d«      } t        j                  g d¢g d¢g d¢g«      | d<   t        j                  g d¢g d¢g d¢g«      | d<   t        j                  | «      }t        |d   j                  «       | d   d	¬
«       t        |d   j                  «       | d   d	¬
«       t        |d d j                  «       t        j                  | d   d¬«      d	¬
«       y )Nr   ru   r   r   r   r6  r   r   r1   r[   rR   r   )r    rx  r!   r   r‰   r   r<   r
  ©rp   r%   s     r   Útest_getitemr(  º  sÄ   € Ü
�(‰(�9Ó
€CÜ�X‰XÚÚÚðó €Cˆ�Fô
 �X‰XÚÚÚðó €Cˆ�Fô
 	×Ñ˜SÓ!€Aä�A�a‘D—N‘NÓ$ c¨!¡f°5Õ9Ü�A�a‘D—N‘NÓ$ c¨!¡f°5Õ9Ü�A�c�r�F×$Ñ$Ó&¬¯©°s¸1±vÀAÔ(FÈUÖSr   c                  ó’   — t        j                  t        d¬«      5  t        j                  «       d    d d d «       y # 1 sw Y   y xY w©Nznot subscriptablera   r   )rh   ri   Ú	TypeErrorr   r¼  r   r   r   Útest_getitem_singler,  Í  s7   € Ü	�‰”yÐ(;Ô	<ñ Ü×ÑÓ˜AÒ÷÷ ñ úrÜ   c                  óº   — t        j                  «       } t        j                  t        d¬«      5  t        j                  «       | d<   d d d «       y # 1 sw Y   y xY wr*  )r   r¼  rh   ri   r+  rä  s    r   Útest_setitem_singler.  Ò  sF   € Ü×ÑÓ€AÜ	�‰”yÐ(;Ô	<ñ #Ü× Ñ Ó"ˆˆ!‰÷#÷ #ñ #ús   °AÁAc                  óþ   — t         j                  j                  d«      } t        j                  d| ¬«      }t        j                  d| ¬«      }||dd t	        |dd j                  «       |j                  «       «       y )Nr²  r7   r³  r   r   rd   ©r    r:   r´  r   r   r#   ©rD   r  r  s      r   Útest_setitem_slicer2  Ø  s_   € Ü
�)‰)×
Ñ
Ð GÓ
H€CÜ	�‰˜ Ô	%€BÜ	�‰˜ Ô	$€BØ€B€qˆ€GÜ��A�a�—‘Ó" B§J¡J£LÕ1r   c                  óü   — t         j                  j                  d«      } t        j                  d| ¬«      }t        j                  | ¬«      }||d<   t	        |d   j                  «       |j                  «       «       y )Nr²  r7   r³  r   r0  r1  s      r   Útest_setitem_integerr4  à  sX   € Ü
�)‰)×
Ñ
Ð GÓ
H€CÜ	�‰˜ Ô	%€BÜ	�‰˜SÔ	!€BØ€B€q�EÜ��A‘—‘“ "§*¡*£,Õ/r   c                  óœ   — t        j                  dd¬«      } t        j                  t        d¬«      5  d| d<   d d d «       y # 1 sw Y   y xY w)Nr7   r   r³  zRotation objectra   r   )r   r:   rh   ri   r+  rä  s    r   Útest_setitem_wrong_typer6  è  s?   € Ü�‰˜ Ô"€AÜ	�‰”yÐ(9Ô	:ñ Øˆˆ!‰÷÷ ñ ús   ³AÁAc                  ó6  — t        j                  d«      } t        j                  g d¢g d¢g d¢g«      | d<   t        j                  g d¢g d¢g d¢g«      | d<   t        j                  | «      }t        t        |«      d	«       t        t        |d d
 «      d«       y )Nr   ru   r   r   r   r6  r   r   rU   rR   )r    rx  r!   r   r‰   r   r¢   r'  s     r   Útest_n_rotationsr8  î  s†   € Ü
�(‰(�9Ó
€CÜ�X‰XÚÚÚðó €Cˆ�Fô
 �X‰XÚÚÚðó €Cˆ�Fô
 	×Ñ˜SÓ!€Aä”�Q“˜ÔÜ”�Q�s˜�V“˜aÕ r   c                  ó  — t         j                  j                  d«      } t        t	        j                  | ¬«      j                  «       j                  d«       t        t	        j                  d | ¬«      j                  «       j                  d«       t        t	        j                  d| ¬«      j                  «       j                  d«       t        t	        j                  d| ¬«      j                  «       j                  d«       y )Nr²  r³  ©r   r   r�   r   ©r   r   )r    r:   r´  r   r   r#   rw   r³  s    r   Útest_random_rotation_shaper<     s¥   € Ü
�)‰)×
Ñ
Ð GÓ
H€CÜ”—‘ SÔ)×1Ñ1Ó3×9Ñ9¸4Ô@Ü”—‘ ¨3Ô/×7Ñ7Ó9×?Ñ?ÀÔFä”—‘ ¨Ô,×4Ñ4Ó6×<Ñ<¸fÔEÜ”—‘ ¨Ô,×4Ñ4Ó6×<Ñ<¸fÕEr   c                  ó  — t        j                  g d¢g d¢g«      } | j                  «       }t        j                  | |«      \  }}t        |j                  «       t        j                  d«      «       t        |dd¬«       y )Nrc   r  r   r   r°   r[   )	r    r!   Úcopyr   Úalign_vectorsr   r<   r=   r   )r   r   r%   Úrssds       r   Útest_align_vectors_no_rotationrA  	  sZ   € Ü
�‰’)šYÐ'Ó(€AØ	�‰‹€Aä×$Ñ$ Q¨Ó*�G€A€tÜ˜aŸk™k›m¬R¯V©V°A«YÔ7Ü�D˜! $Ö'r   c                  óR  — t         j                  j                  d«      } t        j                  | ¬«      }| j	                  d¬«      }|j                  |«      }t        j                  ||«      \  }}t        |j                  «       |j                  «       «       t        |dd¬«       y )Nl	   #Þt}":xþ×L r³  )r   r   ©r—   r   r¤  r[   )	r    r:   r´  r   Únormalr  r?  r   r#   )rD   Úcr2  r1  Úestr@  s         r   Útest_align_vectors_no_noiserG    sz   € Ü
�)‰)×
Ñ
Ð FÓ
G€CÜ�‰˜CÔ €AØ�
‰
˜ˆ
Ó€AØ	�‰�‹
€Aä×&Ñ& q¨!Ó,�I€CˆÜ�A—I‘I“K §¡£Ô/Ü�D˜! $Ö'r   c                  óø   — t        j                  g d¢g d¢g«      } t        j                  g d¢g d¢g«      }t        j                  | |«      \  }}t	        | |j                  |«      d¬«       t	        |dd¬«       y )	N)gð…q“ì?gÔH*×fÜ¿gþHlÒÈB³?)gM·Ós^Eã?g+ObçpÞ¿gÕn^w„ä¿)g¯=Ô2)p˜?g[�[VåKê¿gª?gwí7â?)g�Ëû²Ñ¿gãÜGêvî¿gpÏßßÀ¿r°   r[   r   r¤  )r    r!   r   r?  r   r  )r   r   rF  r@  s       r   Ú$test_align_vectors_improper_rotationrI    sl   € ä
�‰Ò6Ú7ð9ó 	:€Aä
�‰Ò6Ú8ð:ó 	;€Aô ×&Ñ& q¨!Ó,�I€CˆÜ�A�s—y‘y “|¨$Õ/Ü�D˜! $Ö'r   c                  ó  — d} t        j                  g d¢g d¢g d¢g«      }d}g d¢g d¢g d¢g}g d¢g d	¢g d
¢g}t        j                  ||d¬«      \  }}}t        j                  || |¬«      sJ ‚t        j
                  |||¬«      sJ ‚y )NgÔbÿQÂ?)rÈ   r¯   r¯   )r¯   ç      ø?rž   )r¯   rž   rž   r°   r   ©r   r   r   r   )r   gš™™™™™ñ?r   )r   gÍÌÌÌÌÌì?r   T©Úreturn_sensitivityr[   )r    r!   r   r?  ÚiscloseÚallclose)Úrssd_expectedÚsens_expectedr5   r1  r2  rö   r@  Úsenss           r   Ú#test_align_vectors_rssd_sensitivityrT  )  s‡   € Ø%€MÜ—H‘HšnÚ,Ú,ð.ó /€Mð €DÚ	’IšyÐ)€AÚ	’K¢Ð-€AÜ×,Ñ,¨Q°ÀdÔK�O€CˆˆtÜ�:‰:�d˜M°Õ5Ð5Ð5Ü�;‰;�t˜]°Õ6Ð6Ñ6r   c                  ó  — d} t        j                  | d¬«      j                  g d¢«      }t        j                  | d¬«      j                  g d¢«      }d}t        j                  ||t	        j
                  | «      d«      \  }}}t        j                  |||t	        j
                  | «      z  d«      \  }}}	t        |j                  «       |j                  «       «       t        t	        j                  |«      |z  |d¬	«       t        ||	«       y )
Nr7   r   r³  r   r   rU   Tr°   r[   )	r   r:   r  r?  r    rã  r   r<   r\   )
r  r1  r2  ÚscaleÚest1Úrssd1Úcov1Úest2Úrssd2Úcov2s
             r   Ú!test_align_vectors_scaled_weightsr]  6  sÌ   € Ø
€AÜ�‰˜˜qÔ!×'Ñ'ª	Ó2€AÜ�‰˜˜qÔ!×'Ñ'ª	Ó2€AØ€Eä ×.Ñ.¨q°!´R·W±W¸Q³ZÀÓFÑ€Dˆ%�Ü ×.Ñ.¨q°!°U¼R¿W¹WÀQ»ZÑ5GÈÓNÑ€Dˆ%�ä�D—N‘NÓ$ d§n¡nÓ&6Ô7Ü”B—G‘G˜E“N UÑ*¨E¸Õ=Ü�D˜$Õr   c            	      ó   — t         j                  j                  d«      } d}t        j                  | ¬«      }| j	                  |df¬«      }|j                  |«      }t        j                  d«      }d|z  }t        j                  | j	                  |df|¬«      «      }|j                  |«      }t        j                  ||d	¬
«      \  }	}
}||	j                  «       z  j                  «       }t        |d   d|¬«       t        |d   d|¬«       t        |d   d|¬«       ||z  }t        |d   d|¬«       t        |d   d|¬«       t        |d   d|¬«       t        |
t        j                  ||	j                  |«      z
  dz  «      dz  «       y )Nr²  r8   r³  r   rC  r   rK  )r—   rV  TrM  r   r[   rU   rµ   )r   r   )rU   rU   rˆ   )r    r:   r´  r   rD  r  rÐ   rº   r?  r]   rä   r   Úsum)rD   Ú	n_vectorsrö   Úvectorsr½   ÚsigmaÚ	toleranceÚnoiseÚnoisy_resultrF  r@  ÚcovÚerror_vectors                r   Útest_align_vectors_noiserh  D  sm  € Ü
�)‰)×
Ñ
Ð GÓ
H€CØ€IÜ
�/‰/˜cÔ
"€CØ�j‰j˜y¨!˜nˆjÓ-€GØ�Y‰Y�wÓ€Fô �J‰J�q‹M€EØ�e‘€IÜ× Ñ Ø�
‰
Ø˜Q�Øð 	ó 	
ó€Eð —;‘;˜vÓ&€Lä×+Ñ+¨L¸'Ø?CôE�N€Cˆˆsð ˜#Ÿ'™'›)‘O×.Ñ.Ó0€LÜ�L ‘O Q¨YÕ7Ü�L ‘O Q¨YÕ7Ü�L ‘O Q¨YÕ7ð ˆ5�L€CÜ�C˜‘I˜q yÕ1Ü�C˜‘I˜q yÕ1Ü�C˜‘I˜q yÕ1ä�Dœ"Ÿ&™& ,°·±¸7Ó1CÑ"CÀaÑ!GÓHÈ#ÑMÕNr   c                  ó¦  — t        j                  t        d¬«      5  t        j                  g d¢g d¢«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢g d¢«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢g d¢gg d¢g«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢gg d¢gd	gg¬
«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢g d¢gg d¢g d¢gg d¢¬
«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢gg d¢gdg¬
«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢g d¢gg d¢g d¢gt
        j                  t
        j                  g¬
«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢gg d¢g«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢g d¢gg d¢g d¢gdt
        j                  d	g¬«       d d d «       t        j                  t        d¬«      5  t        j                  g d¢gg d¢gd¬«       d d d «       y # 1 sw Y   �ŒžxY w# 1 sw Y   �ŒmxY w# 1 sw Y   �Œ7xY w# 1 sw Y   �Œ xY w# 1 sw Y   �ŒÃxY w# 1 sw Y   �Œ�xY w# 1 sw Y   �Œ4xY w# 1 sw Y   �ŒxY w# 1 sw Y   Œ´xY w# 1 sw Y   y xY w)Nz Expected input `a` to have shapera   rg   rc   z Expected input `b` to have shapez/Expected inputs `a` and `b` to have same shapesr  z&Expected `weights` to be 1 dimensionalr   rÜ  z+Expected `weights` to have number of valuesz)`weights` may not contain negative valuesrR   z#Only one infinite weight is allowedz(Cannot align zero length primary vectorsrÄ   z Cannot return sensitivity matrixT)rN  rÝ  rM  )rh   ri   rj   r   r?  r    Úinfr   r   r   Ú test_align_vectors_invalid_inputrk  k  s·  € Ü	�‰”zÐ)KÔ	Lñ 8Ü×Ñš|ªYÔ7÷8ô 
�‰”zÐ)KÔ	Lñ 8Ü×Ñšyª,Ô7÷8ô 
�‰”zð *?ô 
@ñ Cä×Ñ¢	ª)Ð4²y°kÔB÷Cô 
�‰”zØEô
Gñ Hä×Ñ¢	˜{ªY¨KÀ1À#ÀÕG÷Hô 
�‰”zØJô
Lñ 2ä×Ñ¢	ª9Ð5º	Â9Ð7MÚ'0õ	2÷2ô
 
�‰”zØHô
Jñ Gä×Ñ¢	˜{ªY¨KÀ"ÀÕF÷Gô 
�‰”zØBô
Dñ 9ä×Ñ¢	ª9Ð5º	Â9Ð7MÜ(*¯©´·±Ð'7õ	9÷9ô
 
�‰”zØGô
Iñ 9ä×Ñ¢	˜{ªY¨KÔ8÷9ô 
�‰”zØ?ô
Añ Mä×Ñ¢	ª9Ð5º	Â9Ð7MØ26ÄÇÁÈÀõ	M÷Mô
 
�‰”zØ?ô
Añ 8ä×Ñ¢	˜{ªY¨KØ26õ	8÷8ð 8÷K8ñ 8ú÷8ñ 8ú÷Cñ Cú÷Hñ Hú÷2ñ 2ú÷
Gñ Gú÷9ñ 9ú÷
9ñ 9ú÷Mð Mú÷
8ð 8úsx   œKÁK Â K-Ã!K:Ä'LÅ) LÆ,AL!ÈL.É6L;Ê+MËKË K*Ë-K7Ë:LÌLÌLÌ!L+Ì.L8Ì;MÍMc                  óº  — d} g d¢g d¢g}g d¢g d¢g}t        j                  g d¢g d¢g d¢g«      }t        j                  ||t         j                  dg¬«      \  }}t        |j                  «       || ¬	«       t        |j                  |«      || ¬	«       t        j                  |d
| ¬	«      sJ ‚g d¢g d¢g}d}t        j                  ||t         j                  dg¬«      \  }}t        |j                  «       || ¬	«       t        |j                  |«      d
   |d
   | ¬	«       t        j                  ||| ¬	«      sJ ‚g d¢g d¢g}t        |j                  |«      || ¬	«       g d¢g d¢g}g d¢g d¢g}d}t        j                  ||t         j                  dg¬«      \  }}t        |j                  |«      d
   |d
   | ¬	«       t        j                  ||| ¬	«      sJ ‚y )Nrt  r   r­   r   rL  r   r   rÜ  r[   r   )r   rU   r   rž   ©r   r   rU   rc   )rƒ   r   rR   )rR   r   rU   rù   gÿ4ÍÖiöô?)	r    r!   r   r?  rj  r   r<   r  rO  )r5   r2  r1  Ú
m_expectedÚRr@  rQ  Ú
a_expecteds           r   Ú"test_align_vectors_align_constrainrq  —  s–  € ð
 €DÚ	’IÐ€AÚ	’IÐ€AÜ—‘š9Ú$Ú$ð&ó '€Jô ×$Ñ$ Q¨´B·F±F¸A°;Ô?�G€A€tÜ�A—K‘K“M :°DÕ9Ü�A—G‘G˜A“J ¨Õ-Ü�:‰:�d˜A DÕ)Ð)Ð)ò 
’IÐ€AØ€MÜ×$Ñ$ Q¨´B·F±F¸A°;Ô?�G€A€tÜ�A—K‘K“M :°DÕ9Ü�A—G‘G˜A“J˜q‘M 1 Q¡4¨dÕ3Ü�:‰:�d˜M°Õ5Ð5Ð5ÚšYÐ'€JÜ�A—G‘G˜A“J 
°Õ6ò 
’KÐ €AÚ	’ZÐ €AØ&€MÜ×$Ñ$ Q¨´B·F±F¸A°;Ô?�G€A€tÜ�A—G‘G˜A“J˜q‘M 1 Q¡4¨dÕ3Ü�:‰:�d˜M°Õ5Ð5Ñ5r   c                  ó¸  — d} g }t        d«      D ]9  }|j                  t        j                  | d|z   ¬«      j	                  «       «       Œ; t        | «      D ]¬  }d|d   |   d   z  d|d   |   d   z  g}d|d   |   d   z  d	|d   |   d   z  g}t        j
                  ||d
dg¬«      \  }}t        j
                  ||t        j                  dg¬«      \  }}t        |j	                  «       |j	                  «       d¬«       Œ® t        | «      D ]Ç  }d|d   |   d   z  d|d   |   d   z  d|d   |   d   z  g}d	|d   |   d   z  d|d	   |   d   z  d|d   |   d   z  g}t        j
                  ||g d¢¬«      \  }}t        j
                  ||t        j                  ddg¬«      \  }}t        |j	                  «       |j	                  «       d¬«       ŒÉ y )Nr8   rd   r7   r³  r   r   rU   r   r   ç    _ BrÜ  ç-Cëâ6?r[   r   )rs  rU   r   )	r¡   Úappendr   r:   r<   r?  r    rj  r   )r  Úmatsr§   r1  r2  ro  Ú_ÚR2s           r   Útest_align_vectors_near_infry  º  sç  € ð 	€AØ€DÜ�1‹Xò @ˆØ�‰”H—O‘O A¨2°©6Ô2×<Ñ<Ó>Õ?ð@ô �1‹Xò Bˆàˆt�A‰w�q‰z˜!‰}‰_˜a  Q¡¨¡
¨1¡™oÐ.ˆØˆt�A‰w�q‰z˜!‰}‰_˜a  Q¡¨¡
¨1¡™oÐ.ˆä×%Ñ% a¨°T¸1°IÔ>‰ˆˆ1Ü×&Ñ& q¨!´b·f±f¸a°[ÔA‰ˆˆAÜ˜Ÿ™› r§|¡|£~¸DÖAðBô �1‹Xò Bˆàˆt�A‰w�q‰z˜!‰}‰_˜a  Q¡¨¡
¨1¡™o¨q°°a±¸±¸A±©Ð?ˆØˆt�A‰w�q‰z˜!‰}‰_˜a  Q¡¨¡
¨1¡™o¨q°°a±¸±¸A±©Ð?ˆä×%Ñ% a¨²LÔA‰ˆˆ1Ü×&Ñ& q¨!´b·f±f¸aÀ°^ÔD‰ˆˆAÜ˜Ÿ™› r§|¡|£~¸DÖAñBr   c                  óD  — d} g d¢g d¢g}g d¢g d¢g}t        j                  g d¢g d¢g d¢g«      }t        j                  ||t         j                  dg¬«      \  }}t        |j                  «       || ¬«       t        j                  |d	   |d	   «      \  }}t        |j                  «       || ¬«       t        |j                  |d	   «      |d	   | ¬«       g d¢g d¢g}t        j                  g d¢g d¢g d¢g«      }t        j                  ||t         j                  dg¬«      \  }}t        |j                  «       || ¬«       t        j                  |d	   |d	   «      \  }}t        |j                  «       || ¬«       t        |j                  |d	   «      |d	   | ¬«       y )
Nrt  r   r   r|   r   r   rÜ  r[   r   )r    r!   r   r?  rj  r   r<   r  )r5   r1  r2  rn  ro  rw  s         r   Útest_align_vectors_parallelr{  Ö  s[  € Ø€DÚ	’IÐ€AÚ	’IÐ€AÜ—‘š9Ú%Ú$ð&ó '€Jô ×!Ñ! ! Q´·±¸°Ô<�D€A€qÜ�A—K‘K“M :°DÕ9Ü×!Ñ! ! A¡$¨¨!©Ó-�D€A€qÜ�A—K‘K“M :°DÕ9Ü�A—G‘G˜A˜a™D“M 1 Q¡4¨dÕ3â	’IÐ€AÜ—‘š9Ú$Ú$ð&ó '€Jô ×!Ñ! ! Q´·±¸°Ô<�D€A€qÜ�A—K‘K“M :°DÕ9Ü×!Ñ! ! A¡$¨¨!©Ó-�D€A€qÜ�A—K‘K“M :°DÕ9Ü�A—G‘G˜A˜a™D“M 1 Q¡4¨dÖ3r   c                  óœ  — d} t        j                  g d¢g d¢gg d¢g d¢gg d¢g d¢gg«      }|D �cg c]  }|d    |d   g‘Œ }}t        ||«      D ]}  \  }}t        j                  ||t         j
                  dg¬«      \  }}t        |j                  «       t         j                  | ¬«       t        |j                  |d   «      |d   | ¬«       Œ t        j                  d	d¬
«      }t        j                  |j                  «       dz  «      }g d¢g d¢g}g d¢g d¢g}g }|D ]*  }	|j                  |	j                  |d   «      |d   g«       Œ, |D ]t  }t        j                  ||t         j
                  dg¬«      \  }}t        j                  ||ddg¬«      \  }
}t        |j                  «       |
j                  «       | ¬«       Œv y c c}w )Nrt  r   r   r   r   r   rÜ  r[   r8   r³  rt  r|   rs  )r    r!   Úzipr   r?  rj  r   r½  r  r  r:   rº   rä   ru  r<   )r5   Ú
as_to_testr1  Ú
bs_to_testr2  ro  rw  ÚRsÚdRsÚdRrx  s              r   Útest_align_vectors_antiparallelrƒ  î  s¢  € à€DÜ—‘šI¢yÐ1Ú%¢yÐ1Ú%¢yÐ1ð3ó 4€Jð *4Ö4 A�A�a‘D�5˜!˜A™$’-Ð4€JÐ4Ü�J 
Ó+ò 8‰ˆˆ1Ü×%Ñ% a¨´R·V±V¸Q°KÔ@‰ˆˆ1Ü˜Ÿ™›¤r§u¡u°4Õ8Ü˜Ÿ™  !¡› q¨¡t°$Ö7ð8ô 
�‰˜ !Ô	$€BÜ
×
Ñ
˜rŸ|™|›~¨dÑ2Ó
3€CÚ	’YÐ€AÚ	’YÐ€AØ€JØò 2ˆØ×Ñ˜2Ÿ8™8 A a¡D›>¨1¨Q©4Ð0Õ1ð2àò BˆÜ×%Ñ% a¨´R·V±V¸Q°KÔ@‰ˆˆ1Ü×&Ñ& q¨!°d¸A°YÔ?‰ˆˆAÜ˜Ÿ™› r§|¡|£~¸DÖAñBùò 5s   ±G	c                  óx  — d} t        j                  dd¬«      j                  «       }t        j                  dd¬«      j                  «       }t        ||«      D ]_  \  }}|d   }|d   }t        j                  ||«      \  }}t        |j                  |«      || ¬«       t        j                  |d| ¬«      rŒ_J ‚ y )Nrt  r8   r   r³  r   r[   )	r   r:   r<   r}  r?  r   r  r    rO  )	r5   Úmats_aÚmats_bÚmat_aÚmat_br1  r2  ro  r@  s	            r   Útest_align_vectors_primary_onlyr‰    s§   € Ø€DÜ�_‰_˜S aÔ(×2Ñ2Ó4€FÜ�_‰_˜S aÔ(×2Ñ2Ó4€FÜ˜F FÓ+ò .‰ˆˆuà�!‰HˆØ�!‰Hˆô ×(Ñ(¨¨AÓ.‰ˆˆ4Ü˜Ÿ™ ›
 A¨DÕ1Ü�z‰z˜$ ¨Ö-Ð-Ð-ñ.r   c                  óÖ  — t         j                  j                  d«      } t        j                  | j                  d¬«      «      }|j                  «       }g d¢}t        ||«      }g d¢} ||«      }|j                  «       }||d d …df   dk  xx   dz  cc<   ||d d …df   dk  xx   dz  cc<   t        |d   |d   «       t        |d   |d   «       t        |d	   |d
   «       t        |d   |d   «       t        |d   |d   «       t        j                  |d   |d
   z  «      }t        j                  |d
   |d   z  «      }	t        ||	«       t        j                  |d   |d   z  «      }
t        j                  |d   |d	   z  «      }t        |
|«       t        j                  |d   |d   z  «      }t        |d
|d
z  z  dz
  «       t        t        |«      t        |«      «       y )Nr   r;  rC  )r   r   rU   r   r   )r   rˆ   rW  r   rK  rU   g      @r   g      
@gÍÌÌÌÌÌ@r   rR   r   r   r   rU   re   r7   r   )r    r:   r;   r   r"   ry  r#   r   r   r_  r   r¢   )r¥   Úkey_rotsÚ	key_quatsÚ	key_timesÚinterpolatorÚtimesÚinterp_rotsÚinterp_quatsÚ
cos_theta1Ú
cos_theta2Ú
cos_theta4Ú
cos_theta5Ú
cos_theta3s                r   Ú
test_slerpr—    sÔ  € Ü
�)‰)×
Ñ
 Ó
"€Cä×!Ñ! #§+¡+°6 +Ó":Ó;€HØ× Ñ Ó"€Iâ€IÜ˜ HÓ-€Lâ=€EÙ˜uÓ%€KØ×&Ñ&Ó(€Lð �ša ˜eÑ$ qÑ(Ó)¨RÑ/Ó)àˆiš˜2˜Ñ Ñ"Ó# rÑ)Ó#ô �L ‘O Y¨q¡\Ô2Ü�L ‘O Y¨q¡\Ô2Ü�L ‘O Y¨q¡\Ô2Ü�L ‘O Y¨q¡\Ô2Ü�L Ñ$ i°¡lÔ3ô —‘˜ Q™¨,°q©/Ñ9Ó:€JÜ—‘˜ Q™¨,°q©/Ñ9Ó:€JÜ�J 
Ô+ä—‘˜ Q™¨,°q©/Ñ9Ó:€JÜ—‘˜ Q™¨,°q©/Ñ9Ó:€JÜ�J 
Ô+ô —‘˜ Q™¨,°q©/Ñ9Ó:€JÜ�J  Z°¡]Ñ 3°aÑ 7Ô8ô ”�[Ó!¤3 u£:Õ.r   c                  óà   — t        j                  t        d¬«      5  t        j                  g d¢g d¢g«      } t        j                  ddg«      }t        || «       d d d «       y # 1 sw Y   y xY w)Nzmust be a `Rotation` instancera   rg   rQ   r   r   )rh   ri   r+  r    r!   r   )r%   rÙ  s     r   Útest_slerp_rot_is_rotationr™  C  sY   € Ü	�‰”yÐ(GÔ	Hñ Ü�H‰H’iÚð!ó "ˆä�H‰H�a˜�VÓˆÜˆa�Œ÷	÷ ñ ús   œ?A$Á$A-z*must be a sequence of at least 2 rotationsc                  ó´   — t        j                  g d¢«      } t        j                  t        t
        ¬«      5  t        dg| «       d d d «       y # 1 sw Y   y xY w)Nrg   ra   r   )r   r"   rh   ri   rj   ÚSLERP_EXCEPTION_MESSAGEr   rä  s    r   Útest_slerp_single_rotrœ  L  sA   € Ü×Ñš<Ó(€AÜ	�‰”zÔ)@Ô	Añ Üˆqˆc�1Œ÷÷ ñ ús   ·AÁAc                  ó¬   — t        j                  «       } t        j                  t        t
        ¬«      5  t        g | «       d d d «       y # 1 sw Y   y xY w)Nra   ©r   r:   rh   ri   rj   r›  r   rä  s    r   Útest_slerp_rot_len0rŸ  R  s;   € Ü�‰Ó€AÜ	�‰”zÔ)@Ô	Añ Üˆb�!Œ÷÷ ñ ús   ´A
Á
Ac                  ó°   — t        j                  d«      } t        j                  t        t
        ¬«      5  t        dg| «       d d d «       y # 1 sw Y   y xY w)Nr   ra   rž  rä  s    r   Útest_slerp_rot_len1r¡  X  s?   € Ü�‰˜Ó€AÜ	�‰”zÔ)@Ô	Añ Üˆqˆc�1Œ÷÷ ñ ús   µAÁAc                  ó6  — t        j                  t        d¬«      5  t        j                  j                  d«      } t        j                  | j                  d¬«      «      }t        j                  dgdgg«      }t        ||«       d d d «       y # 1 sw Y   y xY w)Nz.times to be specified in a 1 dimensional arrayra   r   )rU   r   rC  r   rU   )rh   ri   rj   r    r:   r;   r   r"   ry  r!   r   ©r¥   r%   rÙ  s      r   Útest_slerp_time_dim_mismatchr¤  ^  s}   € Ü	�‰”zØMô
Oñ ä�i‰i×#Ñ# AÓ&ˆÜ×Ñ˜sŸ{™{°˜{Ó7Ó8ˆÜ�H‰H�q�cØ�cðó ˆäˆa�Œ÷÷ ñ ús   œA*BÂBc                  ó.  — t        j                  t        d¬«      5  t        j                  j                  d«      } t        j                  | j                  d¬«      «      }t        j                  d«      }t        ||«       d d d «       y # 1 sw Y   y xY w)Nz7number of rotations to be equal to number of timestampsra   r   r;  rC  re   )rh   ri   rj   r    r:   r;   r   r"   ry  Úaranger   r£  s      r   Ú!test_slerp_num_rotations_mismatchr§  h  sq   € Ü	�‰”zð *@ô 
Añ ä�i‰i×#Ñ# AÓ&ˆÜ×Ñ˜sŸ{™{°˜{Ó7Ó8ˆÜ�I‰I�a‹LˆÜˆa�Œ÷÷ ñ ús   œA&BÂBc                  ó  — t        j                  t        d¬«      5  t        j                  j                  d«      } t        j                  | j                  d¬«      «      }g d¢}t        ||«       d d d «       y # 1 sw Y   y xY w)Nústrictly increasing orderra   r   r;  rC  )r   r   rU   rU   r   ©
rh   ri   rj   r    r:   r;   r   r"   ry  r   r£  s      r   Útest_slerp_equal_timesr«  q  óc   € Ü	�‰”zÐ)DÔ	Eñ Ü�i‰i×#Ñ# AÓ&ˆÜ×Ñ˜sŸ{™{°˜{Ó7Ó8ˆÚˆÜˆa�Œ÷	÷ ñ úó   œAA:Á:Bc                  ó  — t        j                  t        d¬«      5  t        j                  j                  d«      } t        j                  | j                  d¬«      «      }g d¢}t        ||«       d d d «       y # 1 sw Y   y xY w)Nr©  ra   r   r;  rC  )r   r   r   rU   r   rª  r£  s      r   Útest_slerp_decreasing_timesr¯  y  r¬  r­  c                  óp  — t         j                  j                  d«      } t        j                  | j                  d¬«      «      }t        j                  d«      }t        ||«      }t        j                  t        d¬«      5  t        j                  dgdgg«      } ||«       d d d «       y # 1 sw Y   y xY w)	Nr   r;  rC  r   z&`times` must be at most 1-dimensional.ra   g      @gÍÌÌÌÌÌ@)r    r:   r;   r   r"   ry  r¦  r   rh   ri   rj   r!   )r¥   r%   rÙ  ÚsÚinterp_timess        r   Ú!test_slerp_call_time_dim_mismatchr³  �  s“   € Ü
�)‰)×
Ñ
 Ó
"€CÜ×Ñ˜3Ÿ;™;¨F˜;Ó3Ó4€AÜ
�	‰	�!‹€AÜˆa�‹€Aä	�‰”zØEô
Gñ ä—x‘x # Ø"% ð!(ó )ˆá	ˆ,Œ÷	÷ ñ ús   Â"B,Â,B5c                  ó¼  — t         j                  j                  d«      } t        j                  | j                  d¬«      «      }t        j                  d«      dz   }t        ||«      }t        j                  t        d¬«      5   |g d¢«       d d d «       t        j                  t        d¬«      5   |g d	¢«       d d d «       y # 1 sw Y   Œ8xY w# 1 sw Y   y xY w)
Nr   r;  rC  r   r   ztimes must be within the rangera   rm  )r   rU   rd   )r    r:   r;   r   r"   ry  r¦  r   rh   ri   rj   )r¥   r%   rÙ  r±  s       r   Ú!test_slerp_call_time_out_of_rangerµ  Ž  s©   € Ü
�)‰)×
Ñ
 Ó
"€CÜ×Ñ˜3Ÿ;™;¨F˜;Ó3Ó4€AÜ
�	‰	�!‹�qÑ€AÜˆa�‹€Aä	�‰”zÐ)IÔ	Jñ Ù	Š)Œ÷ä	�‰”zÐ)IÔ	Jñ Ù	Š)Œ÷ð ÷ð ú÷ð ús   ÂCÂ2CÃCÃCc                  óò   — t        j                  dddgd¬«      } t        ddg| «      } |d«      }t        j                  ddd¬«      }||j                  «       z  }t	        |j                  «       dd	¬
«       y )NÚXr   éP   TrÍ   r   rW  rŽ  r2   r[   )r   rL   r   r]   r   r½  )r%   r±  Úr_interpolatedÚr_interpolated_expectedÚdeltas        r   Útest_slerp_call_scalar_timer¼  š  so   € Ü×Ñ˜C ! R °$Ô7€AÜˆq�!ˆf�aÓ€Aá�t“W€NÜ&×1Ñ1°#°rÀ4ÔHÐàÐ4×8Ñ8Ó:Ñ:€Eä�E—O‘OÓ% q¨uÖ5r   c                  óð   — t        j                  dd¬«      } t        j                  dd¬«      }| D ]C  }|||z  z  }t        t        j                  j                  |j                  «       d¬«      d«       ŒE y )Né2   r   r³  rr  r   r   )r   r:   r   r    r@   rA   r#   )ÚqsÚrsrE   s      r   Útest_multiplication_stabilityrÁ  ¦  sa   € Ü	�‰˜ Ô	#€BÜ	�‰˜ 1Ô	%€BØò AˆØ
ˆa�"‰f‰ˆÜœŸ	™	Ÿ™ r§z¡z£|¸!˜Ó<¸aÕ@ñAr   c                  óÚ  — d} t        j                  dd¬«      }|j                  «       }dD ]ó  }||z  }t        j                  d«      }t	        t        |«      «      D ]  }|dkD  r||z  }Œ||z  }Œ ||j                  «       z  j                  «       }t        j                  || k  «      sJ ‚t        j                  g d¢«      }||z  j                  «       j                  dk(  sJ ‚t        j                  g d¢g«      }||z  j                  «       j                  dk(  rŒóJ ‚ d	D ]W  }||z  }t        j                  ||j                  «       z  «      }t        |j                  «       |j                  «       | ¬
«       ŒY t        j                  g d¢«      }d}||z  }t        j                  ||j                  «       z  «      }t        |j                  «       |j                  «       | ¬
«       y )Nrv  r7   r   r³  )r  rƒ   rR   r   r   rU   r   rQ   r:  r�   )ç      ø¿r±   g       €r¯   rˆ   rK  r[   )rt  r   r   r   )r   r:   r]   r¼  r¡   rX   r½  r    rj  r"   r#   rw   rº   rä   r   )r5   r«  Úp_invr  rE   r%   rw  Úangs           r   Útest_powrÆ  ®  s¬  € Ø€DÜ�‰˜ Ô"€AØ�E‰E‹G€Eà%ò 0ˆà�‰FˆÜ×Ñ˜bÓ!ˆÜ”s˜1“v“ò 	ˆAØ�1ŠuØ˜‘E‘à˜‘I‘ð		ð
 �1—5‘5“7‰{×%Ñ%Ó'ˆÜ�v‰v�c˜D‘jÔ!Ð!Ð!ô ×Ñš|Ó,ˆØ�1‘�~‰~Ó×%Ñ%¨Ò-Ð-Ð-Ü×Ñ¢˜~Ó.ˆØ�1‘�~‰~Ó×%Ñ%¨Ó/Ð/Ð/ð!0ð& /ò =ˆØ�‰FˆÜ× Ñ   Q§[¡[£]Ñ!2Ó3ˆÜ˜Ÿ	™	› Q§Y¡Y£[°tÖ<ð=ô 	×Ñš]Ó+€AØ	€AØ	ˆQ‰€AÜ×Ñ˜Q §¡£Ñ.Ó/€AÜ�A—I‘I“K §¡£°4Ö8r   c                  óª   — t        j                  d¬«      } t        j                  t        d¬«      5  t        | dd«       d d d «       y # 1 sw Y   y xY w)Nr   r³  zmodulus not supportedra   r   )r   r:   rh   ri   ÚNotImplementedErrorÚpow)r«  s    r   Útest_pow_errorsrÊ  Ó  s@   € Ü�‰˜AÔ€AÜ	�‰Ô*Ð2IÔ	Jñ ÜˆAˆq�!Œ÷÷ ñ ús   ²A	Á	Ac                  óF  — t        j                  d¬«      } t        j                  dd¬«      }t        j                  | «      }t	        |j
                  d«       t        j                  |«      }t	        |j
                  d«       t        |d   j                  «       |d   j                  «       «       t        |d   j                  «       |d   j                  «       «       t        j                  | g«      }t	        |j
                  d«       t	        |d   | «       t        j                  |g«      }t	        |j
                  d«       t        |d	   j                  «       |d   j                  «       «       t        |d
   j                  «       |d   j                  «       «       t        j                  | |gt        ¬«      }t	        |j
                  d«       t	        |d   | «       t	        |d   |«       t        j                  |||g«      }t	        |j
                  d«       y )Nr   r³  rU   r   r   )rU   )r   )r   rU   rµ   )r   r   )Údtype)r   rU   )	r   r:   r    r!   r   rw   r   r<   Úobject)ÚsingleÚmultipler!   s      r   Ú test_rotation_within_numpy_arrayrÐ  Ù  s”  € Ü�_‰_ Ô#€FÜ�‰˜q aÔ(€Hä�H‰H�VÓ€EÜ�—‘˜bÔ!ä�H‰H�XÓ€EÜ�—‘˜dÔ#Ü�E˜!‘H×&Ñ&Ó(¨(°1©+×*?Ñ*?Ó*AÔBÜ�E˜!‘H×&Ñ&Ó(¨(°1©+×*?Ñ*?Ó*AÔBä�H‰H�f�XÓ€EÜ�—‘˜dÔ#Ü��q‘˜6Ô"ä�H‰H�h�ZÓ €EÜ�—‘˜fÔ%Ü�E˜$‘K×)Ñ)Ó+¨X°a©[×-BÑ-BÓ-DÔEÜ�E˜$‘K×)Ñ)Ó+¨X°a©[×-BÑ-BÓ-DÔEä�H‰H�f˜hÐ'¬vÔ6€EÜ�—‘˜dÔ#Ü��q‘˜6Ô"Ü��q‘˜8Ô$ä�H‰H�h ¨(Ð3Ó4€EÜ�—‘˜fÕ%r   c            	      ón  — t        j                  ddt        j                  t        j                  dz  «      t        j
                  t        j                  dz  «      g«      } t        j                  | «      }t        j                  |«      }t        | j                  «       |j                  «       d¬«       y ©Nr   r   r1   r[   )r   r"   r    Úsinr  rå   ÚpickleÚdumpsÚloadsr   r<   )r%   ÚpklÚ	unpickleds      r   Útest_picklingrÙ  ÷  sq   € Ü×Ñ˜A˜q¤"§&¡&¬¯©¨q©£/´2·6±6¼"¿%¹%À¹'³?ÐCÓD€AÜ
�,‰,�q‹/€CÜ—‘˜SÓ!€IÜ�A—K‘K“M 9×#6Ñ#6Ó#8¸uÖEr   c            	      óD  — t        j                  ddt        j                  t        j                  dz  «      t        j
                  t        j                  dz  «      g«      } t        j                  | «      }t        | j                  «       |j                  «       d¬«       y rÒ  )
r   r"   r    rÓ  r  rå   r>  Údeepcopyr   r<   )r%   r  s     r   Útest_deepcopyrÜ  þ  sa   € Ü×Ñ˜A˜q¤"§&¡&¬¯©¨q©£/´2·6±6¼"¿%¹%À¹'³?ÐCÓD€AÜ	�‰�qÓ	€BÜ�A—K‘K“M 2§<¡<£>¸Ö>r   c                  ó:  — t        j                  g d¢«      } | j                  d«      }| j                  d«      }|j                  d   du sJ ‚|j                  d   du sJ ‚t	        d„ |j
                  D «       «      sJ ‚t	        d„ |j
                  D «       «      sJ ‚y )NrQ   rI   ÚXYZÚC_CONTIGUOUSTc              3   ó&   K  — | ]	  }|d k\  –— Œ y­w©r   Nr   ©Ú.0r§   s     r   ú	<genexpr>z+test_as_euler_contiguous.<locals>.<genexpr>
  ó   è ø€ Ò*˜!ˆq�A�vÑ*ùó   ‚c              3   ó&   K  — | ]	  }|d k\  –— Œ y­wrá  r   râ  s     r   rä  z+test_as_euler_contiguous.<locals>.<genexpr>  rå  ræ  )r   r"   r|  Úflagsrj  Ústrides)r%   Úe1Úe2s      r   Útest_as_euler_contiguousrì    sŒ   € Ü×Ñš<Ó(€AØ	
�‰�EÓ	€BØ	
�‰�EÓ	€BØ�8‰8�NÑ# tÑ+Ð+Ð+Ø�8‰8�NÑ# tÑ+Ð+Ð+ÜÑ*˜rŸz™zÔ*Ô*Ð*Ð*ÜÑ*˜rŸz™zÔ*Ô*Ð*Ñ*r   c                  ó”  — t        j                  dd¬«      } g d¢}dgt        t        j                  |«      «      z   }t        ||«      D ��cg c]  \  }}| |||z    ‘Œ }}}t        j                  |«      }t        | j                  «       |j                  «       «       t        j                  | «      }t        | j                  «       |j                  «       «       | |usJ ‚t        j                  t        j                  «       «      }t        t        j                  «       j                  «       |j                  «       «       y c c}}w )Nr7   r   r³  )r   rU   r   r   r   )
r   r:   Úlistr    Úcumsumr}  rÕ  r   r#   r¼  )r�  ÚsizesÚstartsr§   r  Úsplitr½   s          r   Útest_concatenateró    s  € Ü�‰˜r qÔ)€HÚ€EØˆS”4œŸ	™	 %Ó(Ó)Ñ)€FÜ+.¨v°uÓ+=×>¡4 1 aˆX�a˜˜A™ÒÐ>€EÑ>Ü×!Ñ! %Ó(€FÜ�×!Ñ!Ó# V§^¡^Ó%5Ô6ô ×!Ñ! (Ó+€FÜ�×!Ñ!Ó# V§^¡^Ó%5Ô6ð ˜6Ñ!Ð!Ð!ô ×!Ñ!¤(×"3Ñ"3Ó"5Ó6€FÜ”×"Ñ"Ó$×,Ñ,Ó.°·±Ó0@ÕAùó ?s   ÁEc                  ó¸   — t        j                  t        d¬«      5  t        j                  t        j
                  «       dd g«       d d d «       y # 1 sw Y   y xY w)NzRotation objects onlyra   r   )rh   ri   r+  r   rÕ  r¼  r   r   r   Útest_concatenate_wrong_typerõ  "  sD   € Ü	�‰”yÐ(?Ô	@ñ =Ü×Ñœh×/Ñ/Ó1°1°dÐ;Ô<÷=÷ =ñ =ús   œ+AÁAc                  ó*  — t        g d¢g«      } t        g d¢g d¢g«      }t        g d¢«      }t        | «      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  t        d¬«      5  t        |«       d d d «       | sJ ‚|sJ ‚|sJ ‚y # 1 sw Y   ŒxY w)NrQ   r   rU   zSingle rotation has no len().ra   )r   r¢   rh   ri   r+  )Úrotation_multi_oneÚrotation_multiÚrotation_singles      r   Útest_len_and_boolrú  (  s–   € Ü!¢< .Ó1ÐÜš|ª\Ð:Ó;€NÜš|Ó,€OäÐ!Ó" aÒ'Ð'Ð'Üˆ~Ó !Ò#Ð#Ð#Ü	�‰”yÐ(GÔ	Hñ ÜˆOÔ÷ñ ÐÐÙÐˆ>ÙÐ‰?÷ð ús   Á(B	Â	Bc                  óÌ   — g d¢} t        j                  | ddd¬«      j                  «       }t        j                  g d¢«      t        j
                  d«      z  }t        ||«       y )Nr   r'  r"  TrÍ   rs   rU   )r   Úfrom_davenportr#   r    r!   r\   r   )r   ro   r&   s      r   Ú#test_from_davenport_single_rotationrý  8  sO   € Ú€DÜ×"Ñ" 4¨°bØ+/ô1ß18±³ð 	ä—H‘Hš\Ó*¬R¯W©W°Q«ZÑ7€MÜ�D˜-Õ(r   c                  ó¦  — g d¢} g d¢}t        j                  t        j                  | «      t        j                  z  dz  «      }t        j
                  | dt        j                  dz  «      }t        |j                  d¬«      |j                  d¬«      «       t        j                  t        j                  | «      t        j                  z  dz  g«      }t        j
                  | gdt        j                  dz  g«      }t        |j                  d¬«      |j                  d¬«      «       t        j                  t        j                  | «      t        j                  z  dz  t        j                  |«      t        j                  z  dz  g«      }|d   |d	   z  }t        j
                  || gdt        j                  dz  t        j                  dz  g«      }t        |j                  d¬«      |j                  d¬«      «       t        j                  t        j                  | «      t        j                  z  dz  t        j                  | «      t        j                  z  dz  g«      }t        j
                  | gdt        j                  dz  t        j                  dz  g«      }t        |j                  d¬«      |j                  d¬«      «       y )
Nr   r   r   ÚeTrK   rd   r   r   )r   rº   r    r!   r  rü  r   r#   )ÚezÚeyrö   Úrot_davs       r   Ú#test_from_davenport_one_or_two_axesr  @  s   € Ú	€BÚ	€Bô ×
Ñ
œrŸx™x¨›|¬b¯e©eÑ3°AÑ5Ó
6€CÜ×%Ñ% b¨#¬r¯u©u°Q©wÓ7€GÜ�C—K‘K¨$�KÓ/Ø—O‘O¨d�OÓ3ô5ô ×
Ñ
¤§¡¨£¬r¯u©uÑ 4°QÑ 6Ð7Ó
8€CÜ×%Ñ% r d¨C´"·%±%¸±'°Ó;€GÜ�C—K‘K¨$�KÓ/Ø—O‘O¨d�OÓ3ô5ô ×
Ñ
¤§¡¨£¬r¯u©uÑ 4°QÑ 6Ü "§¡¨£¬r¯u©uÑ 4°QÑ 6ð 8ó 9€Cà
ˆa‰&�3�q‘6‰/€CÜ×%Ñ% r¨2 h°´b·e±e¸A±g¼r¿u¹uÀQ¹wÐ5GÓH€GÜ�C—K‘K¨$�KÓ/Ø—O‘O¨d�OÓ3ô5ô ×
Ñ
¤§¡¨£¬r¯u©uÑ 4°QÑ 6Ü "§¡¨£¬r¯u©uÑ 4°QÑ 6ð 8ó 9€Cä×%Ñ% r d¨C´"·%±%¸±'¼2¿5¹5À¹7Ð1CÓD€GÜ�C—K‘K¨$�KÓ/Ø—O‘O¨d�OÓ3õ5r   c                  ót  — g d¢} g d¢}g d¢}t        j                  t        d¬«      5  t        j                  | |gdddg«       d d d «       t        j                  t        d¬«      5  t        j                  | ||gdg d¢«       d d d «       t        j                  t        d	¬«      5  t        j                  | gd
dg«       d d d «       t        j                  t        d¬«      5  t        j                  | || gdg d¢«       d d d «       y # 1 sw Y   ŒÇxY w# 1 sw Y   Œ“xY w# 1 sw Y   ŒbxY w# 1 sw Y   y xY w)Nr   r   rL  zmust be orthogonalra   rÿ  r   rÄ   zorder should berI   zExpected `angles`)r   r   rU   r   )rh   ri   rj   r   rü  )r   r  Úezys      r   Ú!test_from_davenport_invalid_inputr  `  s  € Ú	€BÚ	€BÚ
€CÜ	�‰”zÐ)=Ô	>ñ 8Ü×Ñ  S 	¨3°°A°Ô7÷8ä	�‰”zÐ)=Ô	>ñ ?Ü×Ñ  R¨ ¨s²IÔ>÷?ä	�‰”zÐ):Ô	;ñ 2Ü×Ñ   e¨a¨SÔ1÷2ä	�‰”zÐ)<Ô	=ñ AÜ×Ñ  R¨ ¨c²<Ô@÷Að A÷8ð 8ú÷?ð ?ú÷2ð 2ú÷Að Aús/   ¨D
Á'DÂ'D"Ã$D.Ä
DÄDÄ"D+Ä.D7c                  óN  — t         j                  j                  d«      } d}t        j                  |df«      }| j	                  t         j
                   t         j
                  |f¬«      |d d …df<   | j	                  dt         j
                  |f¬«      }| j	                  t         j
                   t         j
                  |f¬«      |d d …df<   | j	                  dt         j
                  d¬«      }t        j                  g d¢«      }t        j                  g d¢«      }|D ]ƒ  }||t        j                  ||z  «      j                  |«      g}||z
  |d d …d	f<   d
D ]F  }	|	dk(  r|n|d d d…   }
t        j                  |
|	|«      }|j                  |
|	«      }t        ||«       ŒH Œ… y )Nr   r8   r   r,  rU   )rŽ  r   r   r   r&  r(  rR   )r    r:   r;   rx  ry  r  r!   r   rº   r  rü  Úas_davenportr   )r¥   r  rH  Úangles_middleÚlambdasrê  rë  ÚlambÚax_lambÚorderÚaxrö   Ú
angles_davs                r   Útest_as_davenportr  n  sg  € Ü
�)‰)×
Ñ
 Ó
"€CØ€AÜ�X‰X�q˜!�fÓ€FØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ—K‘K A¬B¯E©E¸¸�KÓ=€MØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ�k‰k˜a¤b§e¡e°%ˆkÓ8€Gä	�‰’)Ó	€BÜ	�‰’)Ó	€Bàò 0ˆØ�rœ8×/Ñ/°°R±Ó8×>Ñ>¸rÓBÐCˆØ$ tÑ+ˆŠq�!ˆt‰Ø/ò 	0ˆEØ! [Ò0‘°g¹dÀ¸d±mˆBÜ×)Ñ)¨"¨e°VÓ<ˆCØ×)Ñ)¨"¨eÓ4ˆJÜ˜J¨Õ/ñ		0ñ0r   c                  óJ  — t         j                  j                  d«      } d}t        j                  |df«      }| j	                  t         j
                   t         j
                  |f¬«      |d d …df<   t        |«      D �cg c]#  }| j                  dt         j
                  g«      ‘Œ% }}| j	                  t         j
                   t         j
                  |f¬«      |d d …df<   | j	                  dt         j
                  d¬«      }t        j                  g d¢«      }t        j                  g d¢«      }|D ]Ü  }||t        j                  ||z  «      j                  |«      g}	||z
  |d d …d	f<   d
D ]Ÿ  }
|
dk(  r|	n|	d d d…   }t        j                  ||
|«      }t        j                  t        d¬«      5  |j!                  ||
«      }d d d «       |j#                  «       }t        j                  ||
«      j#                  «       }t%        ||«       Œ¡ ŒÞ y c c}w # 1 sw Y   ŒTxY w)Nr   r   r   r,  rU   )r   r   r   r   r&  r(  rR   r“  ra   )r    r:   r;   rx  ry  r  r¡   Úchoicer!   r   rº   r  rü  rh   r•  r–  r  r<   r   )r¥   r  rH  r§   r	  r
  rê  rë  r  r  r  r  rö   r  r˜  rš  s                   r   Útest_as_davenport_degenerater  „  sÍ  € ô �)‰)×
Ñ
 Ó
"€CØ	€AÜ�X‰X�q˜!�fÓ€Fð —;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LÜ5:¸1³XÖ>°�S—Z‘Z ¤B§E¡E 
Õ+Ð>€MÐ>Ø—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ�k‰k˜a¤b§e¡e°$ˆkÓ7€Gä	�‰’)Ó	€BÜ	�‰’)Ó	€Bàò 
CˆØ�rœ8×/Ñ/°°R±Ó8×>Ñ>¸rÓBÐCˆØ$ tÑ+ˆŠq�!ˆt‰Ø/ò 	CˆEØ! [Ò0‘°g¹dÀ¸d±mˆBÜ×)Ñ)¨"¨e°VÓ<ˆCÜ—‘œk°Ô?ñ 9Ø ×-Ñ-¨b°%Ó8�
÷9àŸ=™=›?ˆLÜ$×3Ñ3°B¸¸zÓJ×TÑTÓVˆMÜ% l°MÕBñ	Cñ
Cùò ?÷9ð 9ús   Á?(HÆ3HÈH"c                  óÔ  — t         j                  j                  d«      } d}t        j                  |df«      }| j	                  t         j
                   t         j
                  |f¬«      |d d …df<   | j	                  dt         j
                  |f¬«      |d d …df<   | j	                  t         j
                   t         j
                  |f¬«      |d d …df<   dD ]·  }t        d«      D ]§  }d	j                  |d   |d   |d   g«      }|D �cg c]  }t        |«      ‘Œ }}|d
k(  r|j                  «       }t        j                  ||«      }t        j                  |||«      }	t        |j                  d¬«      |	j                  d¬«      d¬«       Œ© Œ¹ |d d …dfxx   t         j
                  dz  z  cc<   dD ]§  }t        d«      D ]—  }d	j                  |«      }|D �cg c]  }t        |«      ‘Œ }}|d
k(  r|j                  «       }t        j                  ||«      }t        j                  |||«      }	t        |j                  «       |	j                  «       d¬«       Œ™ Œ© y c c}w c c}w )Nr   r8   r   r,  r   rU   r&  rI   rs  r(  TrK   rt  r9   )r    r:   r;   rx  ry  r  r	   rz  r   r{  r   rL   rü  r   r#   )
r¥   r  rH  r  rb  r€  r§   r  ÚeulÚdavs
             r   Ú&test_compare_from_davenport_from_eulerr  ¢  s  € Ü
�)‰)×
Ñ
 Ó
"€CØ€AÜ�X‰X�q˜!�fÓ€Fð —;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ—;‘; 1¬2¯5©5¸°t�;Ó<€FŠ1ˆaˆ4�LØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ+ò 	(ˆÜ% eÓ,ò 	(ˆIØ—'‘'˜9 Q™<¨°1©°yÀ±|ÐDÓEˆCØ(+Ö, 1”)˜A•,Ð,ˆBÐ,Ø˜Ò#Ø—i‘i“k�Ü×%Ñ% c¨6Ó2ˆCÜ×)Ñ)¨"¨e°VÓ<ˆCÜ˜CŸK™K°$˜KÓ7¸¿¹Èt¸Ó9TØ!&ö(ñ	(ð	(ð Š1ˆaˆ4ƒL”B—E‘E˜A‘IÑƒLØ+ò FˆÜ% eÓ,ò 	FˆIØ—'‘'˜)Ó$ˆCØ(+Ö, 1”)˜A•,Ð,ˆBÐ,Ø˜Ò#Ø—i‘i“k�Ü×%Ñ% c¨6Ó2ˆCÜ×)Ñ)¨"¨e°VÓ<ˆCÜ˜CŸK™K›M¨3¯;©;«=¸uÖEñ	FñFùò -ùò -s   Ä	I ÇI%c                  óŒ  — t         j                  j                  d«      } d}t        j                  |df«      }| j	                  t         j
                   t         j
                  |f¬«      |d d …df<   | j	                  dt         j
                  |f¬«      |d d …df<   | j	                  t         j
                   t         j
                  |f¬«      |d d …df<   dD ]£  }t        d«      D ]“  }d	j                  |d   |d   |d   g«      }|D �cg c]  }t        |«      ‘Œ }}|d
k(  r|j                  «       }t        j                  ||«      }|j                  |«      }	|j                  ||«      }
t        |	|
d¬«       Œ• Œ¥ |d d …dfxx   t         j
                  dz  z  cc<   dD ]—  }t        d«      D ]‡  }d	j                  |«      }|D �cg c]  }t        |«      ‘Œ }}|d
k(  r|j                  «       }t        j                  ||«      }|j                  |«      }	|j                  ||«      }
t        |	|
d¬«       Œ‰ Œ™ y c c}w c c}w )Nr   r8   r   r,  r   rU   r&  rI   rs  r(  rt  r9   )r    r:   r;   rx  ry  r  r	   rz  r   r{  r   rL   r|  r  r   )r¥   r  rH  r  rb  r€  r§   r  rö   r  r  s              r   Ú"test_compare_as_davenport_as_eulerr  Ã  s  € Ü
�)‰)×
Ñ
 Ó
"€CØ€AÜ�X‰X�q˜!�fÓ€Fð —;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ—;‘; 1¬2¯5©5¸°t�;Ó<€FŠ1ˆaˆ4�LØ—;‘;¤B§E¡E 6´·±¸Q¸D�;ÓA€FŠ1ˆaˆ4�LØ+ò 	2ˆÜ% eÓ,ò 	2ˆIØ—'‘'˜9 Q™<¨°1©°yÀ±|ÐDÓEˆCØ(+Ö, 1”)˜A•,Ð,ˆBÐ,Ø˜Ò#Ø—i‘i“k�Ü×%Ñ% c¨6Ó2ˆCØ—,‘,˜sÓ#ˆCØ×"Ñ" 2 uÓ-ˆCÜ˜C ¨5Ö1ñ	2ð	2ð Š1ˆaˆ4ƒL”B—E‘E˜A‘IÑƒLØ+ò 	2ˆÜ% eÓ,ò 	2ˆIØ—'‘'˜)Ó$ˆCØ(+Ö, 1”)˜A•,Ð,ˆBÐ,Ø˜Ò#Ø—i‘i“k�Ü×%Ñ% c¨6Ó2ˆCØ—,‘,˜sÓ#ˆCØ×"Ñ" 2 uÓ-ˆCÜ˜C ¨5Ö1ñ	2ñ	2ùò -ùò -s   Ä	H<ÇIc                  óº  — t        j                  d¬«      } t        | «      dk(  sJ ‚t        j                  d¬«      }t        |«      dk(  sJ ‚t        j                  d¬«      g    }t        |«      dk(  sJ ‚t        j                  t        j                  d«      «      }t        |«      dk(  sJ ‚t        j                  t        j                  d«      «      }t        |«      dk(  sJ ‚t        j                  dt        j                  d«      «      }t        |«      dk(  sJ ‚t        j                  t        j                  d«      «      }t        |«      dk(  sJ ‚t        j                  t        j                  d«      dt        j                  d«      «      }t        |«      dk(  sJ ‚t        j                  t        j                  d«      «      }t        |«      dk(  sJ ‚y )	Nr   ©rª  r   ©r   r   ©r   r   r   rI   rÉ   r'  )r   r:   r¢   r¼  r"   r    rM   r‰   rL   rº   rü  r=   rþ   )	r%   Úr_ideÚr_getÚr_quatÚr_matrixÚr_eulerÚr_vecÚr_davÚr_mrps	            r   Útest_zero_rotation_constructionr&  å  sm  € Ü�‰˜AÔ€AÜˆq‹6�QŠ;Ðˆ;ä×Ñ !Ô$€EÜˆu‹:˜Š?Ðˆ?ä�O‰O Ô" 2Ñ&€EÜˆu‹:˜Š?Ðˆ?ä×Ñ¤§¡¨Ó 0Ó1€FÜˆv‹;˜!ÒÐÐä×#Ñ#¤B§H¡H¨YÓ$7Ó8€HÜˆx‹=˜AÒÐÐä×!Ñ! %¬¯©°&Ó)9Ó:€GÜˆw‹<˜1ÒÐÐä× Ñ ¤§¡¨&Ó!1Ó2€EÜˆu‹:˜Š?Ðˆ?ä×#Ñ#¤B§F¡F¨1£I¨{¼B¿H¹HÀVÓ<LÓM€EÜˆu‹:˜Š?Ðˆ?ä×ÑœbŸh™h vÓ.Ó/€EÜˆu‹:˜Š?Ð‰?r   c                  óÐ  — t        j                  d¬«      } | j                  «       j                  dk(  sJ ‚| j	                  «       j                  dk(  sJ ‚| j                  d«      j                  dk(  sJ ‚| j                  «       j                  dk(  sJ ‚| j                  «       j                  dk(  sJ ‚| j                  t        j                  d«      d«      j                  dk(  sJ ‚y )	Nr   r  r  r  rI   rÉ   r   r'  )r   r:   r#   rw   r<   r|  rä   r  r  r    r=   rä  s    r   Ú!test_zero_rotation_representationr(    s¼   € Ü�‰˜AÔ€AØ�9‰9‹;×Ñ Ò&Ð&Ð&Ø�;‰;‹=×Ñ )Ò+Ð+Ð+Ø�:‰:�eÓ×"Ñ" fÒ,Ð,Ð,Ø�;‰;‹=×Ñ &Ò(Ð(Ð(Ø�8‰8‹:×Ñ˜vÒ%Ð%Ð%Ø�>‰>œ"Ÿ&™& ›) [Ó1×7Ñ7¸6ÒAÐAÑAr   c                  ó¼  — t        j                  d¬«      } t        j                  g d¢«      }| j	                  |«      }|j
                  dk(  sJ ‚t        j                  d«      }| j	                  |«      }|j
                  dk(  sJ ‚t        j                  d«      }t        j                  t        d¬«      5  | j	                  |«       d d d «       y # 1 sw Y   y xY w)Nr   r  rc   rÉ   )rU   r   z/Expected equal numbers of rotations and vectorsra   )r   r:   r    r!   r  rw   rM   rã  rh   ri   rj   )r%   r  r  Úv0Úv0_rotr"  s         r   Ú!test_zero_rotation_array_rotationr,    sª   € Ü�‰˜AÔ€Aä
�‰’Ó€AØ—‘˜“
€IØ�?‰?˜fÒ$Ð$Ð$ä	�‰�&Ó	€BØ�W‰W�R‹[€FØ�<‰<˜6Ò!Ð!Ð!ä	�‰�‹€BÜ	�‰ÜÐKô
Mñ à	�‰�Œ÷÷ ñ ús   Â7CÃCc                  ó  — t        j                  d¬«      } t        j                  «       }| |z  }t        |«      dk(  sJ ‚|| z  }t        |«      dk(  sJ ‚t        j                  d«      }| |z  }t        |«      dk(  sJ ‚d}t        j                  d«      }t        j                  t
        |¬«      5  ||z   d d d «       t        j                  t
        |¬«      5  ||z   d d d «       y # 1 sw Y   Œ3xY w# 1 sw Y   y xY w)Nr   r  ú"Expected equal number of rotationsrU   ra   )r   r:   r¢   rh   ri   rj   )r%   Úr_singleÚr_mult_leftÚr_mult_rightÚr0Úr_multÚmsg_rotation_errorr  s           r   Ú!test_zero_rotation_multiplicationr5    sî   € Ü�‰˜AÔ€Aä�‰Ó €HØ�h‘,€KÜˆ{Ó˜qÒ Ð Ð à˜a‘<€LÜˆ|Ó Ò!Ð!Ð!ä	�‰˜Ó	€BØ�‰V€FÜˆv‹;˜!ÒÐÐà=ÐÜ	�‰˜Ó	€BÜ	�‰”zÐ);Ô	<ñ Ø
ˆRŠ÷ô 
�‰”zÐ);Ô	<ñ Ø
ˆRŠ÷ð ÷ð ú÷ð ús   Â1C)ÃC5Ã)C2Ã5C>c                  óÀ  — t        j                  d¬«      } t        j                  | | g«      }t        |«      dk(  sJ ‚| j                  t        j                  «       | g«      }t        |«      dk(  sJ ‚| j                  t        j                  d«      | g«      }t        |«      dk(  sJ ‚| j                  | t        j                  d«      g«      }t        |«      dk(  sJ ‚y )Nr   r  r   r   r   )r   r:   rÕ  r¢   )r%   r2  r  r^   Úr4s        r   Ú!test_zero_rotation_concatentationr8  4  s¶   € Ü�‰˜AÔ€Aä	×	Ñ	˜q !˜fÓ	%€BÜˆr‹7�aŠ<Ðˆ<à	
�‰œŸ™Ó)¨1Ð-Ó	.€BÜˆr‹7�aŠ<Ðˆ<à	
�‰œŸ™¨Ó*¨AÐ.Ó	/€BÜˆr‹7�aŠ<Ðˆ<à	
�‰˜œ8Ÿ?™?¨1Ó-Ð.Ó	/€BÜˆr‹7�aŠ<Ð‰<r   c                  óh   — t        j                  d¬«      } dD ]  }| |z  }t        |«      dk(  rŒJ ‚ y )Nr   r  )rÃ  rR   r   r   rK  )r   r:   r¢   )r%   ÚppÚpow0s      r   Útest_zero_rotation_powerr<  D  s8   € Ü�‰˜AÔ€AØ#ò ˆØ�"‰uˆÜ�4‹y˜A‹~Ðˆ~ñr   c                  óp   — t        j                  d¬«      } | j                  «       }t        |«      dk(  sJ ‚y )Nr   r  )r   r:   r]   r¢   )r%   Úr_invs     r   Útest_zero_rotation_inverser?  K  s+   € Ü�‰˜AÔ€AØ�E‰E‹G€EÜˆu‹:˜Š?Ð‰?r   c                  ór   — t        j                  d¬«      } | j                  «       }|j                  dk(  sJ ‚y )Nr   r  ©r   )r   r:   r½  rw   )r%   r½  s     r   Útest_zero_rotation_magnituderB  Q  s-   € Ü�‰˜AÔ€AØ—‘“€IØ�?‰?˜dÒ"Ð"Ñ"r   c                  ó°   — t        j                  d¬«      } t        j                  t        d¬«      5  | j                  «        d d d «       y # 1 sw Y   y xY w)Nr   r  z+Mean of an empty rotation set is undefined.ra   )r   r:   rh   ri   rj   rg  rä  s    r   Útest_zero_rotation_meanrD  W  s=   € Ü�‰˜AÔ€AÜ	�‰”zÐ)VÔ	Wñ Ø	�‰Œ÷÷ ñ ús   ²AÁAc                  óŽ  — t        j                  d«      } | j                  t        j                  d«      «      j                  dk(  sJ ‚| j                  t        j                  «       «      j                  dk(  sJ ‚t        j                  «       j                  | «      j                  dk(  sJ ‚d}t        j                  d«      }t	        j
                  t        |¬«      5  | j                  |«       d d d «       t	        j
                  t        |¬«      5  |j                  | «       d d d «       y # 1 sw Y   Œ?xY w# 1 sw Y   y xY w)Nr   rA  r.  rU   ra   )r   r:   rÎ  rw   rh   ri   rj   )r%   Ú
approx_msgr^   s      r   Útest_zero_rotation_approx_equalrG  ]  sø   € Ü�‰˜Ó€AØ�>‰>œ(Ÿ/™/¨!Ó,Ó-×3Ñ3°tÒ;Ð;Ð;Ø�>‰>œ(Ÿ/™/Ó+Ó,×2Ñ2°dÒ:Ð:Ð:Ü�?‰?Ó×)Ñ)¨!Ó,×2Ñ2°dÒ:Ð:Ð:à5€JÜ	�‰˜Ó	€BÜ	�‰”z¨Ô	4ñ Ø	�‰�rÔ÷ô 
�‰”z¨Ô	4ñ Ø
�‰˜Ô÷ð ÷ð ú÷ð ús   ÃD/ÄD;Ä/D8Ä;Ec                  óÜ  — t        j                  d«      } | g    }t        |«      dk(  sJ ‚| d d }t        |«      dk(  sJ ‚t        j                  t
        «      5  | dg    d d d «       t        j                  t
        «      5  | dg    d d d «       t        j                  t
        «      5  t        j                  «       | d<   d d d «       y # 1 sw Y   ŒkxY w# 1 sw Y   ŒOxY w# 1 sw Y   y xY w)Nr   T©r   r:   r¢   rh   ri   Ú
IndexError)r%   r  Úr_slices      r   Útest_zero_rotation_get_setrL  l  sÔ   € Ü�‰˜Ó€Aàˆb‰E€EÜˆu‹:˜Š?Ðˆ?à��ˆe€GÜˆw‹<˜1ÒÐÐä	�‰”zÓ	"ñ Ø	ˆ1ˆ#Š÷ô 
�‰”zÓ	"ñ Ø	ˆ4ˆ&Š	÷ô 
�‰”zÓ	"ñ !Ü�‰Ó ˆˆ!‰÷!ð !÷ð ú÷ð ú÷!ð !ús$   ÁC
ÂCÂ)C"Ã
CÃCÃ"C+c                  ó"  — t        j                  d«      } | g d¢   }t        |«      dk(  sJ ‚| g d¢   }t        |«      dk(  sJ ‚| g d¢   }t        |«      dk(  sJ ‚t        j                  t
        «      5  | ddg    d d d «       y # 1 sw Y   y xY w)Nr   )FFFr   )FTFr   )TTTTrI  )r%   r2  r  r^   s       r   Útest_boolean_indexesrN    s�   € Ü�‰˜Ó€Aà	
Ò Ñ	!€BÜˆr‹7�aŠ<Ðˆ<à	
ÒÑ	 €BÜˆr‹7�aŠ<Ðˆ<à	
ÒÑ	€BÜˆr‹7�aŠ<Ðˆ<ä	�‰”zÓ	"ñ Ø	ˆ4�ˆ,Š÷÷ ñ ús   Á4BÂB)žrh   Únumpyr    Únumpy.testingr   r   r   Úscipy.spatial.transformr   r   Úscipy.statsr   Ú	itertoolsr	   rÔ  r>  r   r'   r*   r,   rG   rN   rV   rY   r_   rk   rm   rq   ry   r€   r…   r‹   r�   r•   r›   r«   r³   r¶   r¾   rÀ   rÆ   rË   r×   rÛ   rß   rè   rò   rô   r÷   rú   r  r  r  r	  r  r  r  r  r  r   r#  r)  r3  r7  rI  rX  r^  ra  ÚmarkÚparametrizer„  rˆ  Úthread_unsafer›  r¢  r¨  r°  rº  r¾  rÀ  rÅ  rÇ  rÉ  rË  rÐ  rÓ  rÚ  rá  rå  rë  rò  r  r  r  r#  r%  r(  r,  r.  r2  r4  r6  r8  r<  rA  rG  rI  rT  r]  rh  rk  rq  ry  r{  rƒ  r‰  r—  r™  r›  rœ  rŸ  r¡  r¤  r§  r«  r¯  r³  rµ  r¼  rÁ  rÆ  rÊ  rÐ  rÙ  rÜ  rì  ró  rõ  rú  rý  r  r  r  r  r  r  r&  r(  r,  r5  r8  r<  r?  rB  rD  rG  rL  rN  r   r   r   ú<module>rW     s›  ðÛ ã ß AÝ )ß 3Ý +Ý "ã Û òò:ò:ò:òDò(Oò<:ò
>ò/ò@ò(ò.ò	4ò1ò81ò>	ò	ò+òJò
2ò(Pò("ò?ò?òò 2ò2	"ò%ò
òEò4ò4ò*ò	ò?ò?ò	Oò"ò
òOòò.ò.òJò)ò*òò1òò6ò6ò6ð6 ‡�×Ñ˜¡l°5Ó&9Ó:Ø‡�×Ñ˜ mÓ4ñ2ó 5ó ;ð2ð> ‡�×Ñ˜¡l°5Ó&9Ó:Ø‡�×Ñ˜ mÓ4ñ2ó 5ó ;ð2ð: ‡�×ÑØ‡�×Ñ˜¡l°5Ó&9Ó:Ø‡�×Ñ˜ mÓ4ñ;ó 5ó ;ó ð;ð0 ‡�×ÑØ‡�×Ñ˜¡l°5Ó&9Ó:Ø‡�×Ñ˜ mÓ4ñ;ó 5ó ;ó ð;ð2 ‡�×ÑØ‡�×Ñ˜¡l°5Ó&9Ó:Ø‡�×Ñ˜ mÓ4ñ>ó 5ó ;ó ð>òB.ò&.ò<?ò6ò
?ò?ò@ò ò:ð ‡�×Ññ2ó ð2ò=ò
Cò$ò(ò
ò5ò4Aò8:ò*:ò89ò,Tò&ò
#ò2ò0òò!ò$Fò(ò(ò	(ò
7ò ò$OòN)8òX 6òFBò84ò0Bò4.ò)/òXð GÐ òòòòòòòò
ò	ò	6òAò"9òJò&ò<Fò?ò+òBò(=òò )ò5ò@Aò0ð, ‡�×ÑñCó ðCò:FòB2òDò:Bòò"ò.ò òò#òòò!ó&r   