a
    .'aN@                     @   sX   d dl mZmZmZ 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 )    )divisionabsolute_importprint_functionN)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seedZnormallinalgnormZnewaxis)ndimn_ptsZpoints r   =lib/python3.9/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_flat;   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 )NZ
dimensionsr)   r   r   r+   r   r,   r0   r   r   r   test_input_dim_mismatchK   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,   r0   r   r   r   test_input_at_least1d\   s
    z(TestGeometricSlerp.test_input_at_least1dzstart, end, expected)r   r         ?)r   r   g      warning)        gԬ3ODgkꚛ?)r7   g{tOgx?Z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 )
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_antipodesi   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_limitsg333331g̼d@c              	   C   sJ   t jtdd( t||tdddd}W d    n1 s<0    Y  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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_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   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,   r0   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arangeZ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_conversion6  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_arraylikeC  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   rW   )r   )r   r   rC   rX   rY   r"   r   rZ   r   r   r   test_scalar_tW  s    z TestGeometricSlerp.test_scalar_tr   c                 C   s   t |jdkrJtt t|||d W d    q1 s>0    Y  nZ|jf|j }t 	||}t|||d}t
|| t||d d d |d}|j|jksJ d S )Nr   r   r'   )r   Zasarrayr   r-   r.   r/   r   r
   r"   Zfullr   )r$   r   r    r"   r9   r%   Znon_degenerater   r   r   test_degenerate_inputa  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 X}|t	 t
|||d}t jj|dd}t t |d }	|	dk sJ W d    n1 s0    Y  d S )Nr   r   d   )r   r   r   r   gC]r2<r   gV瞯<)r   Zpir!   rC   ZcosZsinZtestingZsuppress_warningsfilterr8   r   r   r   rS   abs)
r$   r^   ZangleZtsPQZ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 s0    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-   ZmarkZparametrizer&   r(   r   ZzerosZonesr1   rC   r2   r4   r;   rX   r@   r!   rF   rG   rM   rN   rQ   ZlogspacerU   rV   r[   r\   r]   rf   rg   r   r   r   r   r      s  

	
	















	


!



r   )r   r   )Z
__future__r   r   r   Znumpyr   Znumpy.testingr   r-   Zscipy.spatialr   r   r   r   r   r   r   <module>   s   
