o
    ?Hh@                     @   sd  d dl Z d dlZd dlZd dl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 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)xp_assert_equalxp_assert_closeassert_almost_equalassert_array_almost_equal)raises)check_free_memory)RectBivariateSpline)make_splrep)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    d/home/air/sanwanet/gpt-api/venv/lib/python3.10/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      r)   c                 C   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 )z$Derivatives of sin->cos->-sin->-cos.   r            N)r$   sincos)r(   dr    r    r!   f1   s   

r2   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   "r:   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              	      sn  |d u r|}|d u r|}d t || d }||| t jd td t d   }	t|}
 fdd}tddD ]y}t||
|||d}|rR|d ||  n|	}t|d D ]!}|||}tt||t||| tt|| }||k s{J qZ|st	||
|||d	}t
|jt
|d krt|j|d d
d t|j|d d |jj dd q;|dksJ q;d S )N   r,   dtypec                    s4   d  }d|d| |    }dkr|d 7 }|S )N      ?         ?r   g     j@r    kr1   htolNsr    r!   err_estB   s
   z'TestSmokeTests.check_1.<locals>.err_est   rH   perrC   xer   )rC   rH   xbrM   V瞯<atolvIh%<=r@   )r$   linspacearangefloatr2   ranger
   r)   r   r	   lentr   csize)selfrL   rH   abat_nodesrN   rM   r(   x1vrI   rC   tckttr1   rE   errsplr    rF   r!   check_15   s0   (
("zTestSmokeTests.check_1r<   c              	      s   ddt j dt j }}}t || d }t |}	 fdd}
g }tddD ]}t||	d|||d}|t|||t||g q)d}|D ]#}d}|d D ]}|
||}t	|t
||d|d	 |d }qP|d }qHd S )
Nr   r-   皙?r,   c                    s    d  }d|d| |    }|S )Nr?   r@   rA   r    rB   rG   r    r!   rI   a   s   z'TestSmokeTests.check_2.<locals>.err_estrJ   rK   rQ   rtol)r$   pirS   r/   rV   r
   appendr   r   r   r2   )r[   rL   rG   iaibr\   r]   dxr(   r`   rI   nkrC   ra   rr1   drrE   r    rg   r!   check_2\   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ư>rH         ?)r]   r-   r,   皙?)r]   rM   rL   rH   )re   r$   rj   r[   r    r    r!   test_smoke_splrep_splevu   s   "z&TestSmokeTests.test_smoke_splrep_splevrL   r,   r^   Tc                 C   s   | j ||d d S )N)rL   r^   )re   )r[   rL   r^   r    r    r!   test_smoke_splrep_splev_2z      z(TestSmokeTests.test_smoke_splrep_splev_2rG   2   c                 C   s   | j ||d d S )N)rL   rG   )rr   r[   rG   rL   r    r    r!   test_smoke_splint_spalde   ry   z'TestSmokeTests.test_smoke_splint_spaldec                 C   s   | j dtj tj||d d S )Nrf   )rl   rm   rG   rL   )rr   r$   rj   r{   r    r    r!   test_smoke_splint_spalde_iaib   s   z,TestSmokeTests.test_smoke_splint_spalde_iaibc              	   C   s   d\}}t ||d}t |}dD ]$}t||dd||d}tt t| W d    n1 s1w   Y  qd}t||ddd}t|}tt||t 	t
|ddd	 t|t jt g d
 dd d S )N)ru      r<   )r,   r-   r+   r@   r   rK   r.   )rH   rC   绽|=rh   )r,   r-   r.   r+   gMbP?ri   )r$   rS   r/   r
   assert_raises
ValueErrorr   r   r   zerosrW   rj   r3   )r[   r\   r]   r(   r`   rC   ra   rootsr    r    r!   test_smoke_sproot   s   


 "z TestSmokeTests.test_smoke_sprootrC   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 sAJ t||dd|d}tt|
d |t |
d  }|dk s`J |d	krt||gdd|dd\}}	td|d D ]
}t|||}
qxd S d S )
Nr          @rf   r,   )rH   rL   rC   nest{Gz?)rH   rL   rC   r.   )	r$   rj   rS   r/   r   r   absr
   rV   )r[   rG   rC   r\   r]   rn   r(   r`   tckpuuverr1ra   err2r1   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 sJ d S )
Nr   r   r.   r.   )r<   r<   c                 S      t | | S r#   r$   r/   r(   r8   r    r    r!   f2      z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2r,   rH   kxkyr   )
r$   rj   rS   r:   r   r   rW   shaper)   ravel)r[   rN   rM   ybyer   r   NxNyr   r(   r8   r9   ra   rb   t2v1v2r    r    r!   test_smoke_bisplrep_bisplev   s   
*$z*TestSmokeTests.test_smoke_bisplrep_bisplev)__name__
__module____qualname____doc__r$   rj   re   rr   rw   pytestmarkparametrizerx   r|   r}   r   r   r   r    r    r    r!   r;   0   s*    
'r;   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	TestSplevc                 C   sP   g d}g d}t ||}tdg|}|jdksJ td|}|jdks&J d S )Nr   r+   r@   rJ         r,   )r,   r    )r
   r   r   )r[   r(   r8   ra   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 )Nr   r   )r?   rt   r         @)      @g      @      @g      @r   r,   )r
   r$   r3   r   r   vstack)r[   r(   r8   ra   rX   r   z0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,   )rC   rJ   r   r+   )r   r,   r.   )extr-   )r
   r   r   r   r   )r[   r(   r8   ra   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   sN   t dddd }t d| }t||| _t t | jd dks%J d S )Nr   r,   d   r.   r<   )r$   rS   r/   r
   rd   ptpdiff)r[   r(   r8   r    r    r!   setup_method   s   "zTestSplder.setup_methodc                 C   sf   t dD ],}t| j|}t||}t| jd |d  t| jd |d  | jd |d ks0J qd S )Nr@   r   r,   r-   )rV   r   rd   r   r   )r[   nspl2spl3r    r    r!   test_inverse   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 )
Nr+   r   r-   i  r.   r   r,   g>r   )rV   r$   rS   r   rd   r   r   )r[   r   xxdyr   dy2r    r    r!   test_splder_vs_splev   s   
zTestSplder.test_splder_vs_splevc                 C   sh   t | j}tddd}|D ]#}|D ]}t||| j}t||t|| }tt|t| qqd S )Nr   r,   r<   )r   rd   r$   rS   r   r   r   r7   )r[   r   r   r_   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+   )r   r   r   rd   rv   r    r    r!   test_order0_diff!  r*   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   rd   r   r   r   )r[   r   r    r    r!   	test_kink$  s   

zTestSplder.test_kinkc                 C   s   t dD ]:}| j\}}}tj|||f }t||f}t|||f|}t||}t||d  t||d  ||d ks>J qd S )Nr.   r   r,   r-   )rV   rd   r$   c_dstackr   r   r   )r[   r   rX   rY   rC   c2r   r   r    r    r!   test_multidim2  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   s  d\}}t |}|d }t||dd\}}}t|t|  kr,|d|d   ks/J  J tdd|||f}d}t|| d	k sDJ | }	t j|	t|| d d < tdd||	|f}
t|
| d	k shJ t j|	d< t tdd||	|fs{J |d t|| d  }tdd|||f}|| d	k sJ t	t
d
d tddt dt ddf W d    d S 1 sw   Y  d S )N)r   r.   r.   r   rs   r-   r,   rJ   g     @t@rR   z>=n-k-1)match
   r@   )r$   rT   r
   rW   r   r   copynanisnanr   	Exceptionones)r[   r   rC   r(   r8   rX   rY   resexpectedc0res0c1res1r    r    r!   
test_len_cB  s(   
0
 "zTestSplint.test_len_cN)r   r   r   r   r    r    r    r!   r   A  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,   )wrN   rM   r   r   rH   )	numpy.lib.stride_tricksr   r   itemsizer$   r   r   OverflowErrorr   )r[   r   rZ   r(   r    r    r!   test_overflowg  s   


zTestBisplrep.test_overflowc              	   C   st   t td}|d }W d    n1 sw   Y  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   rH   full_output)r$   loadr"   r   )r[   loaded_datar   r    r    r!   test_regression_1310s  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   rH   r           )r   r$   rS   meshgrid
zeros_liker   r   r   )r[   r(   r8   r   ra   r    r    r!   test_ilp64_bisplrep  s   
z TestBisplrep.test_ilp64_bisplrepN)r   r   r   r   r   r   r   skipifr   r$   int64r   r    r    r    r!   r   f  s
    r   c                  C   s   t dd} t dd}t | |\}}t| |d| | }t|j}||j tt	dddd|d dk s9J tt	dddd|d dk sIJ tt	dddd|d dk sYJ tt	dd	dd	|d dk siJ d S )
Nr   r,   r+   r   r   g      ?rA   ir   )
r$   rS   r   r   r4   ra   extenddegreesr   r   )r(   r8   r   yyrectra   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t ||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?   r   )
r$   r3   r   r   	ones_likerandomseedsortr
   r   )ra   rX   rY   rC   r(   r8   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?ru   r-   rs   g)\(?r   r   )taskrX   )r$   rT   r/   rj   r0   r   )rX   r(   r8   ra   r   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  rS   randnr   r   r   r   RuntimeErrorMemoryErrorr   )r(   r8   r   r   r   nxtxnytyrY   fpierra   xp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    d S 1 siw   Y  d S )N   r   c                 S   r   r#   r   r   r    r    r!   r     r   ztest_gh_1766.<locals>.f2r   r   rz   i  r,   r   i  r+   r.   )	r$   rS   r:   r   rT   r   r   r  r   )rZ   r   r   r   r(   r8   r9   ra   
tx_ty_sizett_0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@   )rC   rX   r,   )r?   r         @r  )r$   rS   r
   r   float64r3   r   )r(   r8   ra   r   desr    r    r!   test_spalde_scalar_input  s   r  c                     s|   t jg dddg dt g d dt f} t | } t  fddtd	D }t| |jd
d d S )N)      $      "                                                                    r   r   r?   rt   r   r   r   r         @r  rU   r=   )r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r   r   r?   rt   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   r.   c                    s   g | ]}t  f|qS r    )r   ).0nurY   rC   rX   r(   r    r!   
<listcomp>  s    z"test_spalde_nc.<locals>.<listcomp>r+   rO   rP   )r$   r7   r   r   rV   r   r'   )r   	res_splevr    r.  r!   test_spalde_nc  s   

"r1  )r   )4r5   r   numpyr$   scipy._lib._array_apir   r   r   r   r   r   r   scipy._lib._testutilsr   scipy.interpolater   r	   scipy.interpolate._fitpack_pyr
   r   r   r   r   r   r   r   r   r   r   r   scipy.interpolate._dfitpackr   scipy.interpolate._fitpack2r   r"   r)   r2   r:   r;   r   r   r   r   r   r  r  r  r   xslowr  r  r1  r    r    r    r!   <module>   s<    8
 &T%$

