U
    »mœd@  ã                   @   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   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/spatial/tests/test_slerp.pyÚ_generate_spherical_points   s    "r   c                   @   s–  e Zd Zej ddddddg¡ej dddd	g¡d
d„ ƒƒZej ddddddg¡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 dddg¡e dddg¡dfe dddg¡e dddg¡dfe ddd g¡e dddg¡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 dddg¡e dddg¡e dddge d¡d d$dgd$e d¡d dgdddgg¡fe dddddg¡e dddddg¡e dddddge d¡d d$dddgd$e d¡d dddgdddddg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 d/g¡e d0g¡fg¡d1d2„ ƒZej d3dd4dd5dge d6¡g¡d7d8„ ƒZej d3d9d:g¡d;d<„ ƒZej de ddg¡e ddg¡fe d=ddg¡e dd>dg¡fe d=dddg¡e dd>ddg¡fg¡d?d@„ ƒZej de ddg¡e e d¡dA e d¡dA g¡fe ddg¡e e d¡ dA e d¡dA g¡fg¡ej dBejejg¡dCdD„ ƒƒZej d'dEg¡dFdG„ ƒZdHdI„ ZdJdK„ Zej dLe dddg¡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d¡g¡dMdN„ ƒƒZej dOe dPdQdR¡¡dSdT„ ƒZej d'dd$ggdd$gggggggggg¡dUdV„ ƒZdWS )XÚTestGeometricSlerpÚn_dimsr   r   é   é   é	   r   r   é   c                 C   s<   t |dƒ\}}t||t dd|¡d�}|j||fks8t‚d S )Nr   r   r   ©ÚstartÚendÚt)r   r   r
   ÚlinspaceÚshapeÚAssertionError©Úselfr   r   r   r   Úactualr   r   r   Útest_shape_property   s    þz&TestGeometricSlerp.test_shape_propertyc                 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   s6   t jtdd�� t||t ddd¡d� W 5 Q R X 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_flatc              	   C   s6   t jtdd�� t||t ddd¡d� W 5 Q R X 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   s6   t jtdd�� t||t ddd¡d� W 5 Q R X 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ç      ð?g      ð¿Úwarningg        gÔ¬3OD¿gkêš›ÿÿï?gè¾ÿ{tO¿gx¤€ÿÿï?Úsuccessc              	   C   sn   |dkr<t jtdd�� t||t ddd¡d�}W 5 Q R X nt||t ddd¡d�}ttjj|dd�d	ƒ d S )
Nr6   Z	antipodesr(   r   r   r*   r   r	   r5   )	r,   ZwarnsÚUserWarningr   r
   r   r   r   r   )r#   r   r   ÚexpectedÚresr   r   r   Útest_handle_antipodesg   s    þþz(TestGeometricSlerp.test_handle_antipodesç      à?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   s@   t jtdd��( tt ddg¡t ddg¡|d�}W 5 Q R X 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   s6   t jtdd�� t||t ddd¡d�}W 5 Q R X d S )Nr3   r(   r   r   r=   r   r+   )r#   r   r   rE   r   r   r   Útest_0_sphere_handlingÅ   s
    þz)TestGeometricSlerp.test_0_sphere_handlingÚtolÚ7é   g      "@c              	   C   sL   t jtdd��4 tt ddg¡t ddg¡t ddd¡|d�}W 5 Q R X 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_signgzo ð?gé!çýÿï?c              	   C   s6   t jtdd�� t||t ddd¡d� W 5 Q R X 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   rP   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   s8   t  t¡�$ tt dg¡t dg¡|d�}W 5 Q R X 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dddddgƒ}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   gUUUUUUÕ?r<   gUUUUUUå?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sJt‚t||ƒ d S )Nr   r   r<   r   rV   )r   )r   r
   rC   rW   rX   r    r!   r   rY   r   r   r   Útest_scalar_tU  s    ÿÿz TestGeometricSlerp.test_scalar_tr   c              	   C   s”   t  |¡jdkr6t t¡� t|||d� W 5 Q R X nZ|jf|j }t  	||¡}t|||d�}t
||ƒ t||d d d… |d�}|j|jks�t‚d S )Nr   r   r&   )r
   Zasarrayr   r,   r-   r.   r   r   r    Úfullr   r!   )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  ddddg¡}t  t  |¡t  |¡ddg¡}t j ¡ �N}| t	¡ t
|||dƒ}t jj|dd�}t  t  |d ¡¡}	|	dk sœt‚W 5 Q R X d S )Nr   r   éd   g¬CÒÑ]r2<r	   gVçž¯ò<)r
   Úpir   rC   ÚcosÚsinÚtestingZsuppress_warningsÚfilterr8   r   r   r   rQ   Úabsr!   )
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   sh   t  ddg¡}t  ddg¡}t t¡� t|||d� W 5 Q R X t t¡� t|||d� W 5 Q R X 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onesr0   rC   r2   r4   r;   rW   r@   r   rF   rG   rM   rN   rO   ZlogspacerT   rU   rZ   r[   r]   rl   rm   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
   
