o
    Ö­j+@  ã                   @   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é   ©Úaxisr   )ÚnpÚrandomÚseedÚnormalÚlinalgÚnormÚnewaxis)ÚndimÚn_ptsÚpoints© r   ú[/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/spatial/tests/test_slerp.pyÚ_generate_spherical_points   s   "r   c                   @   sT  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j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sJ ‚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   óL   t jtdd�� t||t ddd¡d� W d   ƒ d S 1 sw   Y  d S )Nzone-dimensional©Úmatchr   r   é
   r   ©ÚpytestÚraisesÚ
ValueErrorr   r   r"   ©r%   r   r    r   r   r   Útest_input_shape_flat9   ó   þ"ÿz(TestGeometricSlerp.test_input_shape_flatr   r   c              	   C   r*   )NÚ
dimensionsr+   r   r   r-   r   r.   r2   r   r   r   Útest_input_dim_mismatchI   s   þ"ÿz*TestGeometricSlerp.test_input_dim_mismatchc              	   C   r*   )Núat least two-dimr+   r   r   r-   r   r.   r2   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êš›ÿÿï?)r;   gè¾ÿ{tO¿gx¤€ÿÿï?Úsuccessc              	   C   s‚   |dkr(t jtdd�� t||t ddd¡d�}W d   ƒ n1 s"w   Y  nt||t ddd¡d�}ttjj|dd�d	ƒ d S )
Nr:   Ú	antipodesr+   r   r   r-   r   r	   r9   )	r/   Ú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   ç¼‰Ø—²Òœ<©Úatol)r   r   r"   r   )r%   r   r    r@   r&   r   r   r   Útest_straightforward_examples‘   s
   "þz0TestGeometricSlerp.test_straightforward_examplesr!   iìÿÿÿé   i,  g-Cëâ6¿g-Cëâ6?c                 C   sV   t jtdd�� tt ddg¡t ddg¡|d�}W d   ƒ d S 1 s$w   Y  d S )Nzinterpolation parameterr+   r   r   r   ©r/   r0   r1   r   r   Úarray©r%   r!   Ú_r   r   r   Útest_t_values_limits¸   s   	þ"ÿz'TestGeometricSlerp.test_t_values_limitsg33333³1ÀgÍÌÌÌÌ¼d@c              	   C   sL   t jtdd�� t||t ddd¡d�}W d   ƒ d S 1 sw   Y  d S )Nr7   r+   r   r   rD   r   r.   )r%   r   r    rM   r   r   r   Útest_0_sphere_handlingÆ   r4   z)TestGeometricSlerp.test_0_sphere_handlingÚtolr   Ú7)r   é   r   g      "@c              	   C   sb   t jtdd��  tt ddg¡t ddg¡t ddd¡|d�}W d   ƒ d S 1 s*w   Y  d S )Nzmust be a floatr+   r   r   r   ©r   r    r!   rP   )r/   r0   r1   r   r   rK   r"   ©r%   rP   rM   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   rS   )r   r   rK   r"   rT   r   r   r   Útest_tol_signç   s
   
ýz TestGeometricSlerp.test_tol_sign)çzo ð?r   r   )r   çé!çýÿï?r   )rW   r   r   r   )r   rX   r   r   c              	   C   r*   )Nzunit n-spherer+   r   r   r   r   r.   r2   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 )NrI   i  r   r-   r   )
r   r   r   ÚmaxÚflipudÚarangeÚshuffleÚcopyr   r   )r%   r   r    rZ   Ú
num_t_valsÚforward_t_valsÚreverse_t_valsÚshuffled_indicesÚscramble_t_valsÚforward_resultsÚreverse_resultsÚscrambled_resultsr   r   r   Útest_order_handling  s0   

þþþÿz&TestGeometricSlerp.test_order_handlingz15, 5, 7c                 C   sN   t  t¡� tt dg¡t dg¡|d�}W d   ƒ d S 1 s w   Y  d S )Nr   r   r   rJ   rL   r   r   r   Útest_t_values_conversion5  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Õ?rC   gUUUUUUå?r   r   r   rC   ©ÚdtyperE   rF   )r   r   rK   ÚsqrtÚfloat64r   ©r%   r&   r@   r   r   r   Útest_accept_arraylikeB  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s%J ‚t||ƒ d S )Nr   r   rC   r   rj   )r   )r   r   rK   rl   rm   r#   r   rn   r   r   r   Útest_scalar_tV  s   ÿÿz TestGeometricSlerp.test_scalar_tr   c                 C   s¬   t  |¡jdkr't t¡� t|||d� W d   ƒ d S 1 s w   Y  d S |jf|j }t  	||¡}t|||d�}t
||ƒ t||d d d… |d�}|j|jksTJ ‚d S )Nr   r   r(   )r   Úasarrayr   r/   r0   r1   r   r   r#   Úfullr   )r%   r   r!   r#   r@   r&   Ú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 ¡ �-}| t	¡ t
|||dƒ}t jj|dd�}t  t  |d ¡¡}	|	dk sLJ ‚W d   ƒ d S 1 sWw   Y  d S )Nr   r   éd   )r   r   r   r   g¬CÒÑ]r2<r	   gVçž¯ò<)r   Úpir"   rK   ÚcosÚsinÚtestingÚsuppress_warningsÚfilterr?   r   r   r   r[   Úabs)
r%   ru   ÚangleÚtsÚPÚQÚsupÚresultÚ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 s%w   Y  t t¡� t|||d� W d   ƒ d S 1 sBw   Y  d S )Nr   r   r   )r   rK   r/   r0   r1   r   )r%   r!   Úarr1Úarr2r   r   r   Útest_interpolation_param_ndim�  s   þÿþ"ÿz0TestGeometricSlerp.test_interpolation_param_ndimN)!Ú__name__Ú
__module__Ú__qualname__r/   ÚmarkÚparametrizer'   r)   r   ÚzerosÚonesr3   rK   r6   r8   Úthread_unsaferB   rl   rH   r"   rN   rO   rU   rV   rY   Úlogspacerh   ri   ro   rp   rt   r†   r‰   r   r   r   r   r      s   ú
ú
	þ
	þþî
ýþ
ýþ

ýþë

ü


ÿ

ÿ

ÿû
ú
	þ
ÿÿö
ÿÿÿÿú
ÿ!þ

þ
ú
þr   )r   r   )	Únumpyr   Únumpy.testingr   r/   Úscipy.spatialr   r   r   r   r   r   r   Ú<module>   s    
