o
    Eb1?                     @   sp  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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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dZ/dd Z0dd Z1G dd dZ2G dd dZ3G dd dZ4G dd dZ5dd Z6d d! Z7d"d# Z8d$d% Z9dS )(    N)assert_equalassert_allcloseassert_assert_almost_equalassert_array_almost_equal)raises)check_free_memory)
arrayasarraypisincosarangedotravelsqrtround)interpolate)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*   F/usr/lib/python3/dist-packages/scipy/interpolate/tests/test_fitpack.py	data_file   s   r,   c                 C   s   t t| j| S )N)r   r   T)xr*   r*   r+   norm2   s   r/   c                 C   sp   |d u rdS | d u rdS |d dkrt | S |d dkr t| S |d dkr+t |  S |d dkr6t|  S d S )Nr   zsin(x)   r            r   r   )r.   dr*   r*   r+   f1   s   

r6   c                 C   s|   | d u rdS || }|d dkrt | | S |d dkr"t| | S |d dkr/t | |  S |d dkr<t| |  S d S )Nzsin(x+y)r0   r   r1   r2   r3   r4   )r.   ydxdyr5   r*   r*   r+   f2+   s   r:   c                 C   s"   t ttt| t|}|jS )z7Helper function to create an array of pairs of x and y.)r	   list	itertoolsproductr
   r-   )r.   r7   xyr*   r*   r+   	makepairs9   s   r?   c                  G   s<   ddl }t|jd dr|jdtt| d  dS dS )z(Produce some output if file run directlyr   N__main__Z__put_prints 
)syshasattrmodulesstderrwriter%   mapstr)arC   r*   r*   r+   put?   s    rK   c                   @   s  e Zd ZdZedddde ddddf	ddZedddde ddddde de fd	d
Zedddde ddddde de fddZedddde ddddde de fddZ	e
dddde dde dddf
ddZdd Zdd Zdd Z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   r2      Nc
              
      s  |d u r|}|	d u r|}	||| t  d td t   }
||| t d td t d   }||
}g } fdd}tddD ]U}t|
||||	d}|r[|d ||  }n|}g }t|d D ]-}|||}t|||t||| t||| }t||k ||||f |||f qe|| qCtd|d t	t
|d	t	t
|	d	t	t
|d	t	t
|d	f  |rd
}nd}td|t	|f  td d}|D ]}td|  |D ]}td|  qtd |d }qd S )Nr1   Zdtypec                    8   dt   }d|d| |    }dkr|d 7 }|S N      ?         ?r   g     j@floatkr5   htolNsr*   r+   err_estV   
   z'TestSmokeTests.check_1.<locals>.err_est   r\   perrW   xer   /
f = %s  s=S_k(x;t,c)  x in [%s, %s] > [%s, %s]r3   zat knotszat the middle of nodesz per=%d s=%s Evaluation %sz6 k :  |f-s|^2  |f'-s'| |f''-.. |f'''-. |f''''- |f'''''z %d : z %.1e  %.1erB   )r   rU   ranger   r/   r   r   appendrK   reprr   )selffra   r\   rJ   br[   atxbrb   r.   x1vnkr]   rW   tcktZndr5   rY   errrI   lrr*   rZ   r+   check_1L   sL   $&
(

zTestSmokeTests.check_1皙?c                    s  |d u r|}|d u r|}||| t  d td t   }||} fdd}g }tddD ]}t|||||d}|t|	|
|t||g q0td|d tt	|dtt	|dtt	|dtt	|df  td	|t tt	|	dtt	|
dtt	|df  td
 d}|D ]_}|d dk rd}nd}td||t
|d t
|d ||
d||	d  f  d}|d D ]'}t
d||||  }|||}t||k ||f td||f  |d }qtd |d }qd S )Nr1   rN   c                    rO   rP   rT   rV   rZ   r*   r+   r]      r^   z'TestSmokeTests.check_2.<locals>.err_estr_   r`   rc   r3   z* per=%d s=%s N=%d [a, b] = [%s, %s]  dx=%szC k :  int(s,[a,b]) Int.Error   Rel. error of s^(d)(dx) d = 0, .., kr   - z %d   %s%.8f   %.1e z
 %.1e %.1erB   )r   rU   rd   r   re   r   r   rK   rf   r   absr   )rg   rh   ra   r\   rJ   ri   r[   rk   rb   iaibr8   r.   rm   r]   rn   rW   ro   rs   srr5   Zdrrq   rY   r*   rZ   r+   check_2|   sF   $
:


zTestSmokeTests.check_2c              	   C   s   |d u r|}|d u r|}||| t |d td t|  }||}td|d tt|dtt|df  tddD ]?}t||||||d}|dkrut|}tt	||dddd	 t|t
tg d
 dd td|t| f  q<ttt| q<d S )Nr1   rN   z1  k  :     Roots of s(x) approx %s  x in [%s,%s]:r3   r_   r`   r   g|=)Zatolrtol)r1   r2   r3   r0   gMbP?r~   z
  %d  : %s)r   rU   rK   rf   r   rd   r   r   r   r   r   r	   tolistassert_raises
ValueError)rg   rh   ra   r\   rJ   ri   r[   rk   rb   rz   r{   r8   r.   rm   rW   ro   rootsr*   r*   r+   check_3   s$   $ zTestSmokeTests.check_3c                 C   s  |d u r|}|d u r|}||| t |d td t|  }||| t d|td t|d   }||||}}tdtt|d|f  td|dd   tddD ]U}t||g|||dd	\}}t|||||d
}t||}t	|d ||d  }t	t|d |||d  }t
|dk  t
|dk  td|tdd |D ||f  qUtd d}t||g|||dd	\}}td|d D ]}t|||}tdt|d   qd S )Nr1   rN   z u = %s   N = %dr3   z<  k  :  [x(u), %s(x(u))]  Error of splprep  Error of splrep r   r_   rx   )r\   ra   rW   Znest)r\   ra   rW   {Gz?z"  %d  :  %s    %.1e           %.1ec                 S   s   g | ]}t |d qS )r3   )r   ).0zr*   r*   r+   
<listcomp>   s    z*TestSmokeTests.check_4.<locals>.<listcomp>z=Derivatives of parametric cubic spline at u (first function):z %s )r   rU   rK   rf   r   rd   r   r   r   ry   r   )rg   rh   ra   r\   rJ   ri   r[   rk   rb   rz   r{   r8   r.   rl   rm   _rW   Ztckpuro   ZuvZerr1Zerr2r5   r*   r*   r+   check_4   s<   $&
zTestSmokeTests.check_4r3   c                 C   s  ||| t |d td t|  }||| t |	d td t|	  }t||}t|d |d ||d |d |
||d}|d ||  |d ||  g}t|d |d }t|d |d |}t|d |d }t|d t|d f|_tt	|| }t
|dk | t| d S )Nr1   rN   r   )r\   kxkyr   )r   rU   r?   r   r   r:   lenshaper/   r   r   rK   )rg   rh   r   r   rk   rb   ybyeZNxZNyr\   r.   r7   r>   ro   ttt2Zv1Zv2rq   r*   r*   r+   check_5   s   $$
*$zTestSmokeTests.check_5c                 C   sp   t d | jdd |   | jdd | jdd | jddd | jdt d	 | jdt d
t ddd d S )Nz***************** splrep/splevgư>r\   r1   )rj   ra   )ra   rj         ?)ri   r2   皙?)ri   rb   ra   r\   )rK   rt   r   rg   r*   r*   r+   test_smoke_splrep_splev   s   z&TestSmokeTests.test_smoke_splrep_splevc                 C   sF   t d |   | jdd | jdt td | jdt tdd d S )Nz***************** splint/spalder1   r   ru   )rz   r{   2   )rz   r{   r[   )rK   r}   r   r   r*   r*   r+   test_smoke_splint_spalde   s
   z'TestSmokeTests.test_smoke_splint_spaldec                 C   s   t d | jddd d S )Nz***************** sprootr      )rJ   ri   )rK   r   r   r*   r*   r+   test_smoke_sproot   s   z TestSmokeTests.test_smoke_sprootc                 C   s    t d |   | jdd d S )Nz&***************** splprep/splrep/splevr   )r[   )rK   r   r   r*   r*   r+   test_smoke_splprep_splrep_splev   s   z.TestSmokeTests.test_smoke_splprep_splrep_splevc                 C   s   t d |   d S )Nz***************** bisplev)rK   r   r   r*   r*   r+   test_smoke_bisplrep_bisplev  s   z*TestSmokeTests.test_smoke_bisplrep_bisplev)__name__
__module____qualname____doc__r6   r   rt   r}   r   r   r:   r   r   r   r   r   r   r*   r*   r*   r+   rL   F   s$     0
,

&
rL   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 )Nr1   r2   r3   r0   rR   r0   rR   r_         r1   )r1   r*   )r   r   r   r   )rg   r.   r7   ro   r   r*   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 )Nr   r   )rQ   r   g       @      @)g      @g      @g      @g      @r   r1   )r   npr	   r   r   Z	row_stack)rg   r.   r7   ro   rp   r   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)r1   r2   r3   )r   r2   r0   r1   )rW   r_   r   r0   )r   r1   r3   )extr2   )r   r   r   r   r   )rg   r.   r7   ro   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   r1   d   r3   rM   )r   linspacer   r   splr   ZdiffZptp)rg   r.   r7   r*   r*   r+   setup_method.  s    zTestSplder.setup_methodc                 C   sd   t dD ]+}t| j|}t||}t| jd |d  t| jd |d  t| jd |d  qd S )NrR   r   r1   r2   )rd   r   r   r   r   r   )rg   nspl2spl3r*   r*   r+   test_inverse7  s   
zTestSplder.test_inversec                 C   s   t dD ]:}tddd}|dkr||dk|dk@  }t|| j|}t| j|}t||}|dkr9t||dd	 qt|| qd S )
Nr0   rx   r2   i  r3   r   r1   g>r   )rd   r   r   r   r   r   r   )rg   r   xxr9   r   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 ]}t||| j}t||t|| }t|| qqd S )Nr   r1   rM   )r   r   r   r   r   r   r   )rg   r   r   rl   Zx2Zy1Zy2r*   r*   r+   test_splantider_vs_splintS  s   
z$TestSplder.test_splantider_vs_splintc                 C   s   t tt| jd d S )Nr0   )r   r   r   r   r   r*   r*   r+   test_order0_diffa  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      ?r2   )mr3   r1   r0   )r   r   r   r   r   )rg   r   r*   r*   r+   	test_kinkd  s   

zTestSplder.test_kinkc                 C   s   t dD ]9}| j\}}}tj|||f }t||f}t|||f|}t||}t||d  t||d  t||d  qd S )Nr3   r   r1   r2   )	rd   r   r   Zc_Zdstackr   r   r   r   )rg   r   rp   crW   Zc2r   r   r*   r*   r+   test_multidimr  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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   r1   )wrk   rb   r   r   r\   )	Znumpy.lib.stride_tricksr   r!   itemsizer   zerosr   OverflowErrorr   )rg   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   r1   r2   r3   T)r   r   r\   Zfull_output)r   loadr,   r   )rg   r"   r*   r*   r+   test_regression_1310  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   r1   i  r3   r   r   r\   r           )r   r   r   meshgridZ
zeros_liker   r   r   )rg   r.   r7   r   ro   r*   r*   r+   test_ilp64_bisplrep  s   
z TestBisplrep.test_ilp64_bisplrepN)r   r   r   r   r   pytestZmarkZskipifr!   r   Zint64r   r*   r*   r*   r+   r     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   r1   r0   r   g      ?rS   ir   )r   r   r   r   ZRectBivariateSpliner;   ro   extendZdegreesr   r   )r.   r7   r   ZyyZrectro   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   r1   )r   r   r3   r   r2   i     rQ   rx   )	r   r	   r   r   randomseedsortr   r   )ro   rp   r   rW   r.   r7   Ztck2r*   r*   r+   test_splev_der_k  s   
0&"r   c                  C   s~   t ddd} t dt j |  }t dt j |  }tj||gdd\}}t ddd}|d }tj||gd|d	\}}d S )
Nr   g?r   r2   r   g)\(?r   rx   )Ztaskrp   )r   r   r   r   r   r   r   )rp   r.   r7   ro   r   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 )Nr1   r      r   r   i  ( )r   r   r   r   Zrandnr   r    r   r   RuntimeErrorMemoryErrorr   )r.   r7   r   r   r   ZnxZtxnyZtyr   fpZierro   ZxpZypr*   r*   r+   test_bisplev_integer_overflow  s   :r   )r   )r   r   r   ):r<   r#   Znumpyr   Znumpy.testingr   r   r   r   r   r   r   r   Zscipy._lib._testutilsr   r	   r
   r   r   r   r   r   r   r   r   Zscipyr   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/   r6   r:   r?   rK   rL   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   s6    08

 B&T#