a
    Re>                     @   s\  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.e
j/j0d#d$ Z1d%d& Z2d'd( Z3d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    X/var/www/sunrise/env/lib/python3.9/site-packages/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productasarrayr'   )r(   yxyr    r    r!   	makepairs(   s    "r9   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g d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 u r|}|d u r|}d t || d }||| t jd td t d   }	t|}
 fdd}tddD ]}t||
|||d}|r|d ||  n|	}t|d D ]B}|||}tt||t||| tt|| }||k sJ 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   rF   perrA   xer   )	r$   linspacearangefloatr1   ranger
   r)   r   )selfrJ   rF   abat_nodesxbrK   r(   x1vrG   rA   tckttr0   rC   errr    rD   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@   rE   r    r!   rG   V   s    z'TestSmokeTests.check_2.<locals>.err_estrH   rI   atolrtol)r$   pirL   r.   rO   r
   appendr   r   r   r1   )rP   rJ   rE   iaibrQ   rR   dxr(   rV   rG   ZnkrA   rW   rr0   ZdrrC   r    r\   r!   check_2Q   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ư>rF         ?)rR   r,   r+   皙?)rR   rK   rJ   rF   )rZ   r$   r`   rP   r    r    r!   test_smoke_splrep_splevj   s    z&TestSmokeTests.test_smoke_splrep_splevrJ   r+   rS   Tc                 C   s   | j ||d d S )N)rJ   rS   )rZ   )rP   rJ   rS   r    r    r!   test_smoke_splrep_splev_2o   s    z(TestSmokeTests.test_smoke_splrep_splev_2rE   2   c                 C   s   | j ||d d S )N)rJ   rE   )rf   rP   rE   rJ   r    r    r!   test_smoke_splint_spaldet   s    z'TestSmokeTests.test_smoke_splint_spaldec                 C   s   | j dtj tj||d d S )Nr[   )rb   rc   rE   rJ   )rf   r$   r`   rn   r    r    r!   test_smoke_splint_spalde_iaiby   s    z,TestSmokeTests.test_smoke_splint_spalde_iaibc              	   C   s   d\}}t ||d}t |}dD ]H}t||dd||d}tt t| W d    q$1 sb0    Y  q$d}t||ddd}t|}tt||dddd	 t|t j	t 
g d
 dd d S )N)ri      r;   )r+   r,   r*   r>   r   rI   r-   )rF   rA   g|=r]   )r+   r,   r-   r*   gMbP?r_   )r$   rL   r.   r
   assert_raises
ValueErrorr   r   r   r`   r2   )rP   rQ   rR   r(   rV   rA   rW   rootsr    r    r!   test_smoke_sproot~   s    

(z TestSmokeTests.test_smoke_sprootrA   r+   r,   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 sJ t||dd|d}tt|
d |t |
d  }|dk sJ |d	krt||gdd|dd\}}	td|d D ]}t|||}
qd S )
Nr          @r[   r+   )rF   rJ   rA   Znest{Gz?)rF   rJ   rA   r-   )	r$   r`   rL   r.   r   r   absr
   rO   )rP   rE   rA   rQ   rR   rd   r(   rV   ZtckpuZuvZerr1rW   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"J d S )
Nr   rx   r-   r-   )r;   r;   c                 S   s   t | | S r#   r$   r.   r(   r7   r    r    r!   f2   s    z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2r+   rF   kxkyrz   )
r$   r`   rL   r9   r   r   lenshaper)   ravel)rP   rT   rK   ybyer   r   ZNxZNyr   r(   r7   r8   rW   rX   t2Zv1Zv2r    r    r!   test_smoke_bisplrep_bisplev   s    
*$z*TestSmokeTests.test_smoke_bisplrep_bisplev)__name__
__module____qualname____doc__r$   r`   rZ   rf   rk   pytestmarkZparametrizerl   ro   rp   rv   r}   r   r    r    r    r!   r:   .   s(   
r:   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	TestSplevc                 C   sL   g d}g d}t ||}tdg|}t|jd td|}t|jd d S )Nrw   r*   r>   rH         r+   )r+   r    )r
   r   r   r   )rP   r(   r7   rW   zr    r    r!   test_1d_shape   s    

zTestSplev.test_1d_shapec                 C   sn   g d}g d}t ||}tg dg dg}t||}t|d |}t|d |}t|t||f d S )Nrw   r   )r=   rh   rx         @)      @g      @      @g      @r   r+   )r
   r$   r2   r   r   Z	row_stack)rP   r(   r7   rW   tr   Zz0Zz1r    r    r!   test_2d_shape   s    


zTestSplev.test_2d_shapec                 C   sv   g d}g d}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 )N)r+   r,   r-   )r   r,   r*   r+   )rA   rH   r   r*   )r   r+   r-   )extr,   )r
   r   r   rs   rt   )rP   r(   r7   rW   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$   rL   r.   r
   splr   diffZptp)rP   r(   r7   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,   )rO   r   r   r   r   r   )rP   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*   ry   r,   i  r-   r   r+   g>rr   )rO   r$   rL   r   r   r   r   )rP   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$   rL   r   r   r   )rP   r   r   rU   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*   )rs   rt   r   r   rj   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   rs   rt   )rP   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,   )	rO   r   r$   Zc_Zdstackr   r   r   r   )rP   r   r   crA   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   sl  d\}}t |}|d }t||dd\}}}t|t|  krV|d|d   ks\n J 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sJ |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 d    n1 s^0    Y  d S )N)r   r-   r-   r   rg   r,   r+   rH   g     @t@V瞯<r^   z>=n-k-1)match
   r>   )r$   rM   r
   r   r   r   copynanisnanrs   	ExceptionZones)rP   r   rA   r(   r7   r   r   resZc0Zres0Zc1Zres1r    r    r!   
test_len_c7  s$    
.
zTestSplint.test_len_cN)r   r   r   r   r    r    r    r!   r   6  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+   )wrT   rK   r   r   rF   )	Znumpy.lib.stride_tricksr   r   itemsizer$   zerosrs   OverflowErrorr   )rP   r   sizer(   r    r    r!   test_overflowZ  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   rF   Zfull_output)r$   loadr"   r   )rP   r   r    r    r!   test_regression_1310f  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   rF   r           )r   r$   rL   meshgridZ
zeros_liker   r   r   )rP   r(   r7   r   rW   r    r    r!   test_ilp64_bisplrepq  s    
z TestBisplrep.test_ilp64_bisplrepN)r   r   r   r   r   r   r   Zskipifr   r$   int64r   r    r    r    r!   r   Y  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$   rL   r   r	   r3   rW   extenddegreesr   r   )r(   r7   r   yyZrectrW   r    r    r!   test_dblint|  s    
r   c                  C   s  t g dt g ddf} | \}}}t g d}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 )N)r   r   r   r   )ggg~'	@r   r   r+   )r   r   r-   r   r,   i     r=   ry   )	r$   r2   r   r   randomseedsortr
   r   )rW   r   r   rA   r(   r7   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?ri   r,   rg   g)\(?rz   ry   )Ztaskr   )r$   rM   r.   r`   r/   r   )r   r(   r7   rW   r|   Z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   rL   Zrandnr   r   r   rs   RuntimeErrorMemoryErrorr   )r(   r7   r   r   r   ZnxZtxnytyr   fpZierrW   ZxpZypr    r    r!   test_bisplev_integer_overflow  s    :r   c                  C   s   d} d\}}dd }t dd| }t dd| }t||}t|d |d	 ||d |d	 d||d
}d}t ||d< t |d |d	< t d}	t dd }
tt  t|	|
|d	d	 W d    n1 s0    Y  d S )N   r~   c                 S   s   t | | S r#   r   r   r    r    r!   r     s    ztest_gh_1766.<locals>.f2r   r   rm   i  r+   r   i  r*   r-   )	r$   rL   r9   r   rM   r   r   r   r   )r   r   r   r   r(   r7   r8   rW   Z
tx_ty_sizeZtt_0Ztt_1r    r    r!   test_gh_1766  s    
*
r   c                  C   sR   t dd} | d }t| |ddgd}tt d|}t g d}t|| d S )Nr   r   r-   r>   )rA   r   r+   )r=   r         @r   )r$   rL   r
   r   float64r2   r   )r(   r7   rW   r   Zdesr    r    r!   test_spalde_scalar_input  s    r   c                     sr   t jg dddg dt g d dt f} t  fddtd	D }t| |jd
d d S )N)      $      "                                                                    r   r   r=   rh   rx   r   r   r         @r   rN   r<   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   rh   rx   r   r   r   r   r   r   r   r   )r=   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   c                    s   g | ]}t  f|qS r    )r   ).0nur   rA   r   r(   r    r!   
<listcomp>      z"test_spalde_nc.<locals>.<listcomp>r*   r   r   )r$   r6   r   rO   r   r'   )r   Z	res_splevr    r   r!   test_spalde_nc  s    
"r   )r   )4r4   r   numpyr$   Znumpy.testingr   r   r   r   r   r   r   rs   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   r9   r:   r   r   r   r   r   r   r   r   r   Zxslowr   r   r   r    r    r    r!   <module>   s8   8
 &T##

