o
    ?Hh+@                     @   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   ^/home/air/sanwanet/gpt-api/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Dgkꚛ?)r;   g{tOgx?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_limitsg333331g̼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_typegh㈵Ծ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kir(   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   gC]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    
