o
    g8                     @   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    b/home/ubuntu/cloudmapper/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              	      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 ]C}t||
|||d}|rR|d ||  n|	}g }t|d D ]!}|||}tt||t||| tt|| }||k s}J q\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_est@   s
   z'TestSmokeTests.check_1.<locals>.err_est   rG   perrB   xer   )	r$   linspacearangefloatr2   ranger
   r)   r   )selfrK   rG   abat_nodesxbrL   r(   x1vrH   rB   tckttndr1   rD   errr    rE   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 ]}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?   r@   r    rA   rF   r    r!   rH   W   s   z'TestSmokeTests.check_2.<locals>.err_estrI   rJ   atolrtol)r$   pirM   r/   rP   r
   appendr   r   r   r2   )rQ   rK   rF   iaibrR   rS   dxr(   rW   rH   nkrB   rX   rr1   drrD   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ư>rG         ?)rS   r-   r,   皙?)rS   rL   rK   rG   )r\   r$   rb   rQ   r    r    r!   test_smoke_splrep_splevk   s   "z&TestSmokeTests.test_smoke_splrep_splevrK   r,   rT   Tc                 C   s   | j ||d d S )N)rK   rT   )r\   )rQ   rK   rT   r    r    r!   test_smoke_splrep_splev_2p      z(TestSmokeTests.test_smoke_splrep_splev_2rF   2   c                 C   s   | j ||d d S )N)rK   rF   )rj   rQ   rF   rK   r    r    r!   test_smoke_splint_spaldeu   rq   z'TestSmokeTests.test_smoke_splint_spaldec                 C   s   | j dtj tj||d d S )Nr]   )rd   re   rF   rK   )rj   r$   rb   rs   r    r    r!   test_smoke_splint_spalde_iaibz   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||dddd	 t|t j	t 
g d
 dd d S )N)rm      r<   )r,   r-   r+   r?   r   rJ   r.   )rG   rB   g|=r_   )r,   r-   r.   r+   gMbP?ra   )r$   rM   r/   r
   assert_raises
ValueErrorr   r   r   rb   r3   )rQ   rR   rS   r(   rW   rB   rX   rootsr    r    r!   test_smoke_sproot   s   


"z TestSmokeTests.test_smoke_sprootrB   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          @r]   r,   )rG   rK   rB   nest{Gz?)rG   rK   rB   r.   )	r$   rb   rM   r/   r   r   absr
   rP   )rQ   rF   rB   rR   rS   rf   r(   rW   tckpuuverr1rX   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   s   t | | S r#   )r$   r/   )r(   r8   r    r    r!   f2   s   z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2r,   )rG   kxkyr   )
r$   rb   rM   r:   r   r   lenshaper)   ravel)rQ   rU   rL   ybyer   r   NxNyr   r(   r8   r9   rX   rY   t2v1v2r    r    r!   test_smoke_bisplrep_bisplev   s   
*$z*TestSmokeTests.test_smoke_bisplrep_bisplev)__name__
__module____qualname____doc__r$   rb   r\   rj   ro   pytestmarkparametrizerp   rt   ru   r{   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 )Nr|   r+   r?   rI         r,   )r,   r    )r
   r   r   r   )rQ   r(   r8   rX   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>   rl   r}         @)      @g      @g      @g      @r   r,   )r
   r$   r3   r   r   	row_stack)rQ   r(   r8   rX   tr   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,   )rB   rI   r   r+   )r   r,   r.   )extr-   )r
   r   r   rx   ry   )rQ   r(   r8   rX   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$   rM   r/   r
   splr   diffptp)rQ   r(   r8   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 )Nr?   r   r,   r-   )rP   r   r   r   r   r   )rQ   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>rw   )rP   r$   rM   r   r   r   r   )rQ   r   xxdyr   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   r,   r<   )r   r   r$   rM   r   r   r   )rQ   r   r   rV   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+   )rx   ry   r   r   rn   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   r   r   rx   ry   )rQ   r   r    r    r!   	test_kink  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 )Nr.   r   r,   r-   )	rP   r   r$   c_dstackr   r   r   r   )rQ   r   r   crB   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   sn  d\}}t |}|d }t||dd\}}}t|t|  kr,|d|d   ks/J  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ssJ |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    d S 1 sw   Y  d S )N)r   r.   r.   r   rk   r-   r,   rI   g     @t@gV瞯<)r`   z>=n-k-1)match
   r?   )r$   rN   r
   r   r   r   copynanisnanrx   	Exceptionones)rQ   r   rB   r(   r8   r   r   resc0res0c1res1r    r    r!   
test_len_c8  s&   
0
 "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,   )wrU   rL   r   r   rG   )	numpy.lib.stride_tricksr   r   itemsizer$   zerosrx   OverflowErrorr   )rQ   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   rG   full_output)r$   loadr"   r   )rQ   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   rG   r           )r   r$   rM   meshgrid
zeros_liker   r   r   )rQ   r(   r8   r   rX   r    r    r!   test_ilp64_bisplrepr  s   
z TestBisplrep.test_ilp64_bisplrepN)r   r   r   r   r   r   r   skipifr   r$   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$   rM   r   r	   r4   rX   extenddegreesr   r   )r(   r8   r   yyrectrX   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>   r~   )	r$   r3   r   r   randomseedsortr
   r   )rX   r   r   rB   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?rm   r-   rk   g)\(?r   r~   )taskr   )r$   rN   r/   rb   r0   r   )r   r(   r8   rX   r   unew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   rM   randnr   r   r   rx   RuntimeErrorMemoryErrorr   )r(   r8   r   r   r   nxtxnytyr   fpierrX   xpypr    r    r!   test_bisplev_integer_overflow  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?   )rB   r   r,   )r>   r         @r  )r$   rM   r
   r   float64r3   r   )r(   r8   rX   r   desr    r    r!   test_spalde_scalar_input  s   r  )r   )0r5   r   numpyr$   numpy.testingr   r   r   r   r   r   r   rx   scipy._lib._testutilsr   scipy.interpolater	   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  r    r    r    r!   <module>   s4    8
 &T##