U
    Gvf8                     @   sD  d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dl
Z
d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dl m!Z! d	d
 Z"dd Z#d%ddZ$dd Z%G dd dZ&G dd dZ'G dd dZ(G dd dZ)G dd dZ*dd Z+dd Z,dd  Z-d!d" Z.d#d$ Z/dS )&    N)assert_equalassert_allcloseassert_assert_almost_equalassert_array_almost_equal)raises)check_free_memory)RectBivariateSpline)splrepsplevbisplrepbisplevsprootsplprepsplintspaldesplder
splantiderinsertdblint)regrid_smth)dfitpack_intc                 C   s    t jt jt jtd| S )Ndata)ospathjoinabspathdirname__file__)basename r    H/tmp/pip-unpacked-wheel-96ln3f52/scipy/interpolate/tests/test_fitpack.py	data_file   s     r"   c                 C   s   t t | j| S N)npsqrtdotT)xr    r    r!   norm2   s    r)   c                 C   s`   |d dkrt | S |d dkr,t | S |d dkrDt |  S |d dkr\t |  S dS )z$Derivatives of sin->cos->-sin->-cos.   r            N)r$   sincos)r(   dr    r    r!   f1   s    

r1   c              	   C   s(   t ttt | t |}|jS )z7Helper function to create an array of pairs of x and y.)r$   arraylist	itertoolsproductZasarrayr'   )r(   yxyr    r    r!   	makepairs(   s    "r8   c                	   @   s  e Zd ZdZddddej dddfddZddddej fd	d
Zdd Ze	j
dddge	j
dddgdd Ze	j
dddge	j
dddgdd Ze	j
dddge	j
dddgdd Zdd Ze	j
dddge	j
ddddddgdd  Zd!d" ZdS )#TestSmokeTestszj
    Smoke tests (with a few asserts) for fitpack routines -- mostly
    check that they are runnable
    r   r,   FNc              	      s  |d kr|}|d kr|}d t || d }||| t jd td t d   }	t|}
 fdd}tddD ]}t||
|||d}|r|d ||  n|	}g }t|d D ]B}|||}tt||t||| tt|| }||k st	qqvd S )	N   r+   )Zdtypec                    s4   d  }d|d| |    }dkr0|d 7 }|S )N      ?         ?r   g     j@r    kr0   htolNsr    r!   err_est@   s
    z'TestSmokeTests.check_1.<locals>.err_est   rD   perr?   xer   )
r$   linspacearangefloatr1   ranger
   r)   r   AssertionError)selfrH   rD   abat_nodesxbrI   r(   x1vrE   r?   tckttZndr0   rA   errr    rB   r!   check_13   s"    (
(zTestSmokeTests.check_1r:   c              	      s   ddt j dt j   }}}t || d }t |}	 fdd}
g }tddD ]4}t||	d|||d}|t|||t||g qRd}|D ]F}d}|d D ],}|
||}t	|t
||d|d	 |d }q|d }qd S )
Nr   r,   皙?r+   c                    s    d  }d|d| |    }|S )Nr;   r<   r=   r    r>   rC   r    r!   rE   W   s    z'TestSmokeTests.check_2.<locals>.err_estrF   rG   atolrtol)r$   pirJ   r.   rM   r
   appendr   r   r   r1   )rO   rH   rC   iaibrP   rQ   dxr(   rU   rE   Znkr?   rV   rr0   ZdrrA   r    r[   r!   check_2R   s     


zTestSmokeTests.check_2c                 C   s@   | j dd | j dtj d | j dtj dtj ddd d S )	Ngư>rD         ?)rQ   r,   r+   皙?)rQ   rI   rH   rD   )rY   r$   r_   rO   r    r    r!   test_smoke_splrep_splevk   s    z&TestSmokeTests.test_smoke_splrep_splevrH   r+   rR   Tc                 C   s   | j ||d d S )N)rH   rR   )rY   )rO   rH   rR   r    r    r!   test_smoke_splrep_splev_2p   s    z(TestSmokeTests.test_smoke_splrep_splev_2rC   2   c                 C   s   | j ||d d S )N)rH   rC   )re   rO   rC   rH   r    r    r!   test_smoke_splint_spaldeu   s    z'TestSmokeTests.test_smoke_splint_spaldec                 C   s   | j dtj tj||d d S )NrZ   )ra   rb   rC   rH   )re   r$   r_   rm   r    r    r!   test_smoke_splint_spalde_iaibz   s    z,TestSmokeTests.test_smoke_splint_spalde_iaibc              
   C   s   d\}}t ||d}t |}dD ]4}t||dd||d}tt t| W 5 Q R X q$d}t||ddd}t|}tt||dddd	 t|t j	t 
d
dddg dd d S )N)rh      r:   )r+   r,   r*   r<   r   rG   r-   )rD   r?   g|=r\   r+   r,   r*   gMbP?r^   )r$   rJ   r.   r
   assert_raises
ValueErrorr   r   r   r_   r2   )rO   rP   rQ   r(   rU   r?   rV   rootsr    r    r!   test_smoke_sproot   s    

z TestSmokeTests.test_smoke_sprootr?   r-   r*   r<   c                 C   s  ddt j dt j   }}}t |||d }t |}t||gdd|dd\}}	t||}
t|
d t |
d  }|dk stt||dd|d}tt|
d |t |
d  }|dk st|d	krt||gdd|dd\}}	t	d|d D ]}t|||}
qd S )
Nr          @rZ   r+   )rD   rH   r?   Znest{Gz?)rD   rH   r?   r-   )
r$   r_   rJ   r.   r   r   absrN   r
   rM   )rO   rC   r?   rP   rQ   rc   r(   rU   ZtckpuZuvZerr1rV   Zerr2r0   r    r    r!   test_smoke_splprep_splrep_splev   s    

 
z.TestSmokeTests.test_smoke_splprep_splrep_splevc                 C   s&  ddt j  }}ddt j  }}d\}}d\}}dd }	t |||d }
t |||d }t|
|}t|d |d |	|d |d d||d}|d ||  |d ||  g}t|d |d }t|d |d |}|	|d |d }t|d t|d f|_tt 	|| d	k s"t
d S )
Nr   rv   )r-   r-   )r:   r:   c                 S   s   t | | S r#   )r$   r.   )r(   r6   r    r    r!   f2   s    z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2r+   )rD   kxkyrx   )r$   r_   rJ   r8   r   r   lenshaper)   ravelrN   )rO   rS   rI   ybyer}   r~   ZNxZNyr|   r(   r6   r7   rV   rW   t2Zv1Zv2r    r    r!   test_smoke_bisplrep_bisplev   s    
*$z*TestSmokeTests.test_smoke_bisplrep_bisplev)__name__
__module____qualname____doc__r$   r_   rY   re   rj   pytestmarkZparametrizerk   rn   ro   ru   r{   r   r    r    r    r!   r9   .   s*    
r9   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	TestSplevc                 C   sX   dddddg}dddddg}t ||}tdg|}t|jd	 td|}t|jd
 d S )Nr+   r,   r-   r*   r<   rF         )r+   r    )r
   r   r   r   )rO   r(   r6   rV   zr    r    r!   test_1d_shape   s    

zTestSplev.test_1d_shapec                 C   s   dddddg}dddddg}t ||}td	d
ddgddddgg}t||}t|d |}t|d |}t|t||f d S )Nr+   r,   r-   r*   r<   rF   r   r   r;   rg   rv         @      @g      @g      @g      @r   )r
   r$   r2   r   r   Z	row_stack)rO   r(   r6   rV   tr   Zz0Zz1r    r    r!   test_2d_shape   s    


zTestSplev.test_2d_shapec                 C   sz   dddg}dddg}t ||dd}ddgddgd ddgg}d	D ] }ttddg||d
||  q>tttddg|dd
 d S )Nr+   r,   r-   r   r*   )r?   rF   )r   r+   r-   )ext)r
   r   r   rr   rs   )rO   r(   r6   rV   Zrstlr   r    r    r!   test_extrapolation_modes   s    

z"TestSplev.test_extrapolation_modesN)r   r   r   r   r   r   r    r    r    r!   r      s   	r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
TestSplderc                 C   sL   t dddd }t d| }t||| _tt | jd  dk d S )Nr   r+   d   r-   r:   )r$   rJ   r.   r
   splr   ZdiffZptp)rO   r(   r6   r    r    r!   setup_method   s    zTestSplder.setup_methodc                 C   sd   t dD ]V}t| j|}t||}t| jd |d  t| jd |d  t| jd |d  qd S )Nr<   r   r+   r,   )rM   r   r   r   r   r   )rO   nspl2spl3r    r    r!   test_inverse   s    
zTestSplder.test_inversec                 C   s   t dD ]t}tddd}|dkr6||dk|dk@  }t|| j|}t| j|}t||}|dkrrt||dd	 qt|| qd S )
Nr*   rw   r,   i  r-   r   r+   g>rq   )rM   r$   rJ   r   r   r   r   )rO   r   xxZdyr   Zdy2r    r    r!   test_splder_vs_splev   s    
zTestSplder.test_splder_vs_splevc                 C   s\   t | j}tddd}|D ]:}|D ]0}t||| j}t||t|| }t|| q$qd S )Nr   r+   r:   )r   r   r$   rJ   r   r   r   )rO   r   r   rT   Zx2y1y2r    r    r!   test_splantider_vs_splint	  s    
z$TestSplder.test_splantider_vs_splintc                 C   s   t tt| jd d S )Nr*   )rr   rs   r   r   ri   r    r    r!   test_order0_diff  s    zTestSplder.test_order0_diffc                 C   sr   t d| jdd}t|d ttt|d t d| jdd}t|d ttt|d t d| jdd}ttt|d d S )N      ?r,   )mr-   r+   r*   )r   r   r   rr   rs   )rO   r   r    r    r!   	test_kink  s    

zTestSplder.test_kinkc                 C   s   t dD ]r}| j\}}}tj|||f }t||f}t|||f|}t||}t||d  t||d  t||d  qd S )Nr-   r   r+   r,   )	rM   r   r$   Zc_Zdstackr   r   r   r   )rO   r   r   cr?   c2r   r   r    r    r!   test_multidim(  s    
zTestSplder.test_multidimN)
r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r      s   		r   c                   @   s   e Zd Zdd ZdS )
TestSplintc              	   C   sV  d\}}t |}|d }t||dd\}}}t|t|  krV|d|d   ks\n ttdd|||f}t|dd	d
 | }t j|t|| d d < tdd|||f}	t|	dd	d
 t j|d< t 	tdd|||fst|d t|| d  }
tdd||
|f}t|dd	d
 t
tdd$ tddt dt ddf W 5 Q R X d S )N)r   r-   r-   r   rf   r,   r+   rF   g     @t@gV瞯<)r]   z>=n-k-1)match
   r<   )r$   rK   r
   r   rN   r   r   copynanisnanrr   	ExceptionZones)rO   r   r?   r(   r6   r   r   resZc0Zres0Zc1Zres1r    r    r!   
test_len_c8  s$    
.
zTestSplint.test_len_cN)r   r   r   r   r    r    r    r!   r   7  s   r   c                   @   s:   e Zd Zdd Zdd Zejjee	j
kdddd Zd	S )
TestBisplrepc                 C   sV   ddl m} tjdkrd}nd}|td|fd}ttt||||dddddd	 d S )
Nr   )
as_stridedr   l    d</i q r    )r   r+   )wrS   rI   r   r   rD   )	Znumpy.lib.stride_tricksr   r   itemsizer$   zerosrr   OverflowErrorr   )rO   r   sizer(   r    r    r!   test_overflow[  s    
    zTestBisplrep.test_overflowc              	   C   sP   t tdd }t|d d df |d d df |d d df ddddd d S )	Nzbug-1310.npzr   r   r+   r,   r-   T)r}   r~   rD   Zfull_output)r$   loadr"   r   )rO   r   r    r    r!   test_regression_1310g  s    2z!TestBisplrep.test_regression_1310zneeds ilp64 fitpack)reasonc                 C   sh   t d tddd}tddd}t||\}}t|}t|||dddd}ttdd|d d S )	Ni`m  r   r+   i  r-   r}   r~   rD   r           )r   r$   rJ   meshgridZ
zeros_liker   r   r   )rO   r(   r6   r   rV   r    r    r!   test_ilp64_bisplrepr  s    
z TestBisplrep.test_ilp64_bisplrepN)r   r   r   r   r   r   r   Zskipifr   r$   Zint64r   r    r    r    r!   r   Z  s   r   c                  C   s   t dd} t dd}t | |\}}t| |d| | }t|j}||j tt	dddd|d tt	dddd|d tt	dddd|d tt	dddd|d d S )	Nr   r+   r*   r   g      ?r=   ir   )
r$   rJ   r   r	   r3   rV   extenddegreesr   r   )r(   r6   r   yyZrectrV   r    r    r!   test_dblint}  s    
r   c                  C   s  t ddddgt ddddgdf} | \}}}t ddddg}tt|| |d |d |d  | |d	    tt|| d|d |d  |d	   t jd
 t t jd}t jd}t||\}}}|d d |d d g}t|||f|}tt||||f|t|| d S )Nr   r   ggg~'	@r+   r   r-   r,   i     r;   rw   )	r$   r2   r   r   randomseedsortr
   r   )rV   r   r   r?   r(   r6   Ztck2r    r    r!   test_splev_der_k  s    
0&r   c                  C   sz   t ddd} t dt j |  }t dt j |  }t||gdd\}}t ddd}|d }t||gd|d	\}}d S )
Nr   g?rh   r,   rf   g)\(?rx   rw   )Ztaskr   )r$   rK   r.   r_   r/   r   )r   r(   r6   rV   rz   ZunewZuknotsr    r    r!   test_splprep_segfault  s    r   c                  C   s   t jd t ddd} | }t jdd }d}d}t| ||d d d d ||dd
\}}}}}	}
}|d | |d | |	d || d || d   ||f}t dg}t dg}tt	t
ft||| d S )Nr+   r      r   r   i  ( )r$   r   r   rJ   Zrandnr   r   r   rr   RuntimeErrorMemoryErrorr   )r(   r6   r   r}   r~   ZnxZtxnytyr   fpZierrV   ZxpZypr    r    r!   test_bisplev_integer_overflow  s,             :r   c                  C   sV   t dd} | d }t| |ddgd}tt d|}t ddd	d	g}t|| d S )
Nr   r   r-   r<   )r?   r   r+   r;   r   g      @)r$   rJ   r
   r   Zfloat64r2   r   )r(   r6   rV   r   Zdesr    r    r!   test_spalde_scalar_input  s    r   )r   )0r4   r   Znumpyr$   Znumpy.testingr   r   r   r   r   r   r   rr   Zscipy._lib._testutilsr   Zscipy.interpolater	   Zscipy.interpolate._fitpack_pyr
   r   r   r   r   r   r   r   r   r   r   r   Zscipy.interpolate.dfitpackr   Zscipy.interpolate._fitpack2r   r"   r)   r1   r8   r9   r   r   r   r   r   r   r   r   r   r    r    r    r!   <module>   s2   8
 &T##