U
    Gvf@                     @   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   B/tmp/pip-unpacked-wheel-96ln3f52/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 )NZ
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Dgkꚛ?g{tOgx?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 )
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_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   r8   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_limitsg333331g̼d@c              	   C   s6   t jtdd t||tdddd}W 5 Q R X d S )Nr2   r(   r   r   r<   r   r+   )r#   r   r   rD   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   rG   )r,   r-   r.   r   r
   rB   r   r#   rG   rD   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   rJ   )r   r
   rB   r   rK   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 )Nr@   i  r   r*   r   )
r
   r   r   maxZflipudZarangeshufflecopyr   r   )r#   r   r   rO   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   rA   rC   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
   rB   sqrtfloat64r   r#   r$   r8   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   rU   )r   )r   r
   rB   rV   rW   r    r!   r   rX   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std S )Nr   r   r&   )r
   Zasarrayr   r,   r-   r.   r   r   r    fullr   r!   )r#   r   r   r    r8   r$   Z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 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 stW 5 Q R X d S )Nr   r   d   gC]r2<r	   gV瞯<)r
   pir   rB   cossinZtestingZsuppress_warningsfilterr7   r   r   r   rP   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
   rB   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
   zerosZonesr0   rB   r1   r3   r:   rV   r?   r   rE   rF   rL   rM   rN   ZlogspacerS   rT   rY   rZ   r\   rj   rk   r   r   r   r   r      s*  

	
	   




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