a
    ˆù»j¬A  ã                   @   sD   d dl Zd dlmZ d dlZd dlmZ d
dd„ZG dd	„ d	ƒZdS )é    N)Úassert_allclose)Úgeometric_slerpé   é   c                 C   sP   t j d¡ t jj|| fd�}|t jj|dd�d d …t jf  }|d |d fS )Né{   )Úsizeé   ©Zaxisr   )ÚnpÚrandomÚseedÚnormalÚlinalgÚnormZnewaxis)ÚndimÚn_ptsZpoints© r   úDE:\soccer\ml_env\Lib\site-packages\scipy/spatial/tests/test_slerp.pyÚ_generate_spherical_points   s    "r   c                   @   sL  e Zd Zej dg d¢¡ej dg d¢¡dd„ ƒƒZej dg d¢¡ej dddg¡d	d
„ ƒƒZej de 	d¡e 
d¡fe 	d¡e 
d¡fe 	d¡e 
d¡fg¡dd„ ƒZej de 	d¡e 
d¡fe 	d¡e 
d¡fe g ¡e 
d¡fg¡dd„ ƒZej de g ¡e g ¡fg¡dd„ ƒZej de g d¢¡e g d¢¡dfe g d¢¡e g d¢¡dfe g d¢¡e g d¢¡dfg¡dd„ ƒZej de dd g¡e d dg¡e dd ge d¡d d!gd!e d¡d gd dgg¡fe g d"¢¡e g d#¢¡e g d"¢e d¡d d!d gd!e d¡d d gg d#¢g¡fe g d$¢¡e g d%¢¡e g d$¢e d¡d d!d d d gd!e d¡d d d d gg d%¢g¡fg¡d&d'„ ƒZej d(e d)d*d+¡e d,d-d¡g¡d.d/„ ƒZej de dg¡e d g¡fe d g¡e dg¡fe d0g¡e d1g¡fg¡d2d3„ ƒZej d4d5d6g d7¢e d8¡g¡d9d:„ ƒZej d4d;d<g¡d=d>„ ƒZej de dd g¡e d d g¡fe g d?¢¡e g d@¢¡fe g dA¢¡e g dB¢¡fg¡dCdD„ ƒZej de dd g¡e e d¡dE e d¡dE g¡fe dd g¡e e d¡ dE e d¡dE g¡fg¡ej dFejejg¡dGdH„ ƒƒZej d(dIg¡dJdK„ ƒZdLdM„ ZdNdO„ Zej dPe g d"¢¡e d dg¡g¡ej d(e d¡e dg¡e dgg¡e dggg¡e g ¡e d dd5¡g¡dQdR„ ƒƒZej dSe dTdUdV¡¡dWdX„ ƒZej d(d d!ggd d!gggggggggg¡dYdZ„ ƒZd[S )\ÚTestGeometricSlerpÚn_dims)r   r   é   é   é	   r   )r   r   é   c                 C   s<   t |dƒ\}}t||t dd|¡d�}|j||fks8J ‚d S )Nr   r   r   ©ÚstartÚendÚt)r   r   r
   ÚlinspaceÚshape©Úselfr   r   r   r   Úactualr   r   r   Útest_shape_property   s    þz&TestGeometricSlerp.test_shape_propertyr   r   c                 C   sF   t |dƒ\}}t||t dd|¡d�}t|d |ƒ t|d |ƒ d S )Nr   r   r   r   éÿÿÿÿ)r   r   r
   r   r   r!   r   r   r   Útest_include_ends$   s    þz$TestGeometricSlerp.test_include_endsz
start, end)r   r   r   )r   r   c              	   C   sJ   t jtdd��( t||t ddd¡d� W d   ƒ n1 s<0    Y  d S )Nzone-dimensional©Úmatchr   r   é
   r   ©ÚpytestÚraisesÚ
ValueErrorr   r
   r   ©r"   r   r   r   r   r   Útest_input_shape_flat9   s
    þz(TestGeometricSlerp.test_input_shape_flatr   r   c              	   C   sJ   t jtdd��( t||t ddd¡d� W d   ƒ n1 s<0    Y  d S )NÚ
dimensionsr'   r   r   r)   r   r*   r.   r   r   r   Útest_input_dim_mismatchI   s
    þz*TestGeometricSlerp.test_input_dim_mismatchc              	   C   sJ   t jtdd��( t||t ddd¡d� W d   ƒ n1 s<0    Y  d S )Núat least two-dimr'   r   r   r)   r   r*   r.   r   r   r   Útest_input_at_least1dZ   s
    þz(TestGeometricSlerp.test_input_at_least1dzstart, end, expected)r   r   ç      ð?)r   r   g      ð¿Úwarning)ç        gÔ¬3OD¿gkêš›ÿÿï?)r6   gè¾ÿ{tO¿gx¤€ÿÿï?Úsuccessc              	   C   s‚   |dkrPt jtdd��( t||t ddd¡d�}W d   ƒ qh1 sD0    Y  nt||t ddd¡d�}ttjj|dd�d	ƒ d S )
Nr5   Z	antipodesr'   r   r   r)   r   r	   r4   )	r+   ZwarnsÚUserWarningr   r
   r   r   r   r   )r"   r   r   ÚexpectedÚresr   r   r   Útest_handle_antipodesg   s    þ&þz(TestGeometricSlerp.test_handle_antipodesr   ç      à?)r   r   r   )r   r   r   )r   r   r   r   r   )r   r   r   r   r   c                 C   s*   t ||t ddd¡d�}t||dd� d S )Nr   r   é   r   ç¼‰Ø—²Òœ<©Zatol)r   r
   r   r   )r"   r   r   r9   r#   r   r   r   Útest_straightforward_examples�   s
    "þz0TestGeometricSlerp.test_straightforward_examplesr   iìÿÿÿé   i,  g-Cëâ6¿g-Cëâ6?c                 C   sT   t jtdd��2 tt ddg¡t ddg¡|d�}W d   ƒ n1 sF0    Y  d S )Nzinterpolation parameterr'   r   r   r   ©r+   r,   r-   r   r
   Úarray©r"   r   Ú_r   r   r   Útest_t_values_limits·   s
    	þz'TestGeometricSlerp.test_t_values_limitsg33333³1ÀgÍÌÌÌÌ¼d@c              	   C   sJ   t jtdd��( t||t ddd¡d�}W d   ƒ n1 s<0    Y  d S )Nr2   r'   r   r   r=   r   r*   )r"   r   r   rE   r   r   r   Útest_0_sphere_handlingÅ   s
    þz)TestGeometricSlerp.test_0_sphere_handlingÚtolr   Ú7)r   é   r   g      "@c              	   C   s`   t jtdd��> tt ddg¡t ddg¡t ddd¡|d�}W d   ƒ n1 sR0    Y  d S )Nzmust be a floatr'   r   r   r   ©r   r   r   rH   )r+   r,   r-   r   r
   rC   r   ©r"   rH   rE   r   r   r   Útest_tol_typeÕ   s    ýz TestGeometricSlerp.test_tol_typegñhãˆµøÔ¾gÆœÞC¾c                 C   s2   t t ddg¡t ddg¡t ddd¡|d�}d S )Nr   r   r   rK   )r   r
   rC   r   rL   r   r   r   Útest_tol_signæ   s
    ýz TestGeometricSlerp.test_tol_sign)çzo ð?r   r   )r   çé!çýÿï?r   )rO   r   r   r   )r   rP   r   r   c              	   C   sJ   t jtdd��( t||t ddd¡d� W d   ƒ n1 s<0    Y  d S )Nzunit n-spherer'   r   r   r   r   r*   r.   r   r   r   Útest_unit_sphere_enforcementò   s
    þz/TestGeometricSlerp.test_unit_sphere_enforcementg       @Út_funcc                 C   s    d}t j d¡ |dd|ƒ}|| ¡  }t  |¡}t  |¡}t j |¡ | ¡ | }t|||d�}	t|||d�}
t|||d�}t	|	t  |
¡ƒ t	|	| |ƒ d S )NrA   i  r   r)   r   )
r
   r   r   ÚmaxZflipudZarangeÚshuffleÚcopyr   r   )r"   r   r   rR   Z
num_t_valsZforward_t_valsZreverse_t_valsZshuffled_indicesZscramble_t_valsZforward_resultsZreverse_resultsZscrambled_resultsr   r   r   Útest_order_handling  s0    

þþþÿz&TestGeometricSlerp.test_order_handlingz15, 5, 7c                 C   sL   t  t¡�. tt dg¡t dg¡|d�}W d   ƒ n1 s>0    Y  d S )Nr   r   r   rB   rD   r   r   r   Útest_t_values_conversion4  s
    
þz+TestGeometricSlerp.test_t_values_conversionc                 C   s€   t ddgddgg d¢ƒ}tjddgt d¡d dgt d¡d t d¡d gdt d¡d gddggtjd�}t||dd	� d S )
Nr   r   )r   gUUUUUUÕ?r<   gUUUUUUå?r   r   r   r<   ©Zdtyper>   r?   )r   r
   rC   ÚsqrtÚfloat64r   ©r"   r#   r9   r   r   r   Útest_accept_arraylikeA  s    
ÿûû
z(TestGeometricSlerp.test_accept_arraylikec                 C   sX   t ddgddgdƒ}tjt d¡d t d¡d gtjd�}|jdksJJ ‚t||ƒ d S )Nr   r   r<   r   rX   )r   )r   r
   rC   rY   rZ   r    r   r[   r   r   r   Útest_scalar_tU  s    ÿÿz TestGeometricSlerp.test_scalar_tr   c                 C   s¨   t  |¡jdkrJt t¡� t|||d� W d   ƒ q¤1 s>0    Y  nZ|jf|j }t  	||¡}t|||d�}t
||ƒ t||d d d… |d�}|j|jks¤J ‚d S )Nr   r   r%   )r
   Zasarrayr   r+   r,   r-   r   r   r    Úfullr   )r"   r   r   r    r9   r#   Znon_degenerater   r   r   Útest_degenerate_input_  s    .
z(TestGeometricSlerp.test_degenerate_inputÚkiöÿÿÿr%   r)   c           
      C   sº   t j| }t  ddd¡}t  g d¢¡}t  t  |¡t  |¡ddg¡}t j ¡ �X}| t	¡ t
|||dƒ}t jj|dd�}t  t  |d ¡¡}	|	dk s˜J ‚W d   ƒ n1 s¬0    Y  d S )Nr   r   éd   )r   r   r   r   g¬CÒÑ]r2<r	   gVçž¯ò<)r
   Úpir   rC   ÚcosÚsinZtestingZsuppress_warningsÚfilterr8   r   r   r   rS   Úabs)
r"   r`   ZangleÚtsÚPÚQÚsupÚresultZnormsÚerrorr   r   r   Útest_numerical_stability_pi|  s    

z.TestGeometricSlerp.test_numerical_stability_pic                 C   s�   t  ddg¡}t  ddg¡}t t¡� t|||d� W d   ƒ n1 sJ0    Y  t t¡� t|||d� W d   ƒ n1 s‚0    Y  d S )Nr   r   r   )r
   rC   r+   r,   r-   r   )r"   r   Zarr1Zarr2r   r   r   Útest_interpolation_param_ndim�  s    þ$þz0TestGeometricSlerp.test_interpolation_param_ndimN) Ú__name__Ú
__module__Ú__qualname__r+   ÚmarkZparametrizer$   r&   r
   ZzerosZonesr/   rC   r1   r3   r;   rY   r@   r   rF   rG   rM   rN   rQ   ZlogspacerV   rW   r\   r]   r_   rm   rn   r   r   r   r   r      s  ú
ú
	þ
	þþî

ýþ
ýþ

ýþë

ü


ÿ

ÿ

ÿû
ú
	þ
ÿÿö
ÿÿÿÿú
ÿ!þ

þ
ú
þr   )r   r   )	Únumpyr
   Znumpy.testingr   r+   Zscipy.spatialr   r   r   r   r   r   r   Ú<module>   s
   
