
    biC                        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
 Z"d Z#d!dZ$d Z% G d d      Z& G d d      Z' G d d      Z( G d d      Z) G d d      Z*d Z+d Z,d Z-e	j\                  j_                  e!ej`                  k(  d      d        Z1e	j\                  jd                  d        Z3d Z4d  Z5y)"    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                     t         j                  j                  t         j                  j                  t         j                  j	                  t
                    d|       S )Ndata)ospathjoinabspathdirname__file__)basenames    _/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/interpolate/tests/test_fitpack.py	data_filer#      s8    77<<(AB* *    c                 h    t        j                  t        j                  | j                  |             S N)npsqrtdotT)xs    r"   norm2r,      s    77266!##q>""r$   c                     |dz  dk(  rt        j                  |       S |dz  dk(  rt        j                  |       S |dz  dk(  rt        j                  |        S |dz  dk(  rt        j                  |        S y)z$Derivatives of sin->cos->-sin->-cos.   r            N)r'   sincos)r+   ds     r"   f1r5      so    1uzvvay1uzvvay1uzq	z1uzq	z r$   c           
          t        j                  t        t        j                  t        j
                  |       t        j
                  |                        }|j                  S )z7Helper function to create an array of pairs of x and y.)r'   arraylist	itertoolsproductasarrayr*   )r+   yxys      r"   	makepairsr>   *   s;    	$y((A

1FG	HB44Kr$   c                      e Zd ZdZddddej
                  z  dddfdZddddej
                  z  fdZd	 Zd
 Z	e
j                  j                  dddg      e
j                  j                  dddg      d               Ze
j                  j                  dddg      e
j                  j                  dddg      d               Ze
j                  j                  dddg      e
j                  j                  dddg      d               Zd Ze
j                  j                  dddg      e
j                  j                  dg d      d               Zd Zy)TestSmokeTestszj
    Smoke tests (with a few asserts) for fitpack routines -- mostly
    check that they are runnable
    r   r0   FNc                    ||}||}dt        j                  ||dz         }|||z
  t        j                  dt              z  t        dz
        z  z   }	t	        |      }
fd}t        dd      D ]  }t        ||
|||      }|r	|d   ||  n|	}t        |dz         D ]K  } |||      }t        t	        ||      t        |||      z
        t        t	        ||            z  }||k  rKJ  |st        ||
|||      }t        |j                        t        |d         k(  rOt        |j                  |d   d	
       t        |j                  |d   d |j                  j                   d
       |dk(  rJ t        j                  |
d   |
d   d	
      rht        ||
|||d      }|dk7  sDt        |j                  |d   d	
       t        |j                  |d   d |j                  j                   d
       t!        t"              5  t        ||
|||d      }d d d         y # 1 sw Y   xY w)N   r/   dtypec                 H    dz  }d|d| |z
  z  z  z  }dkD  r|dz  z  }|S )N      ?         ?r   g     j@ )kr4   htolNss       r"   err_estz'TestSmokeTests.check_1.<locals>.err_estB   s;    aAa#qs)n$C1us1uJr$      rN   perrJ   xer   )rJ   rN   xbrS   V瞯<atolvIh%<=rG   periodic)rJ   rN   rT   rS   bc_type)r'   linspacearangefloatr5   ranger   r,   r   r
   lentr   csizeallcloseassert_raises
ValueError)selfrR   rN   abat_nodesrT   rS   r+   x1vrO   rJ   tckttr4   rL   errsplrM   s     `                @r"   check_1zTestSmokeTests.check_15   s+   :B:BKK1a!e$!a%299Q77%A,FFqE	 q! 	LAAqR8C!)Q1"rB1Q3Z !amBr1Ib#q(99:U2b!9=MMSy y! !!Q!qRB?suu:SV,#CEE3q6>#CEE3q6+355::+>UK6M6;;qtQrU7%aa1JWCAv's1vEB's1vksuuzz/BO&z2 L)!Q!q-/B
LL L1	L0L Ls   H99I	rB   c           	         ddt         j                  z  dt         j                  z  }}}t        j                  ||dz         }t        j                  |      }	fd}
g }t	        dd      D ];  }t        ||	d|||      }|j                  t        |||      t        ||      g       = d}|D ]:  }d}|d   D ])  } |
||      }t        |t        ||      d|       |dz   }+ |dz   }< y )	Nr   r0   皙?r/   c                 .    dz  }d|d| |z
  z  z  z  }|S )NrF   rG   rH   rI   )rJ   r4   rK   rL   rM   s       r"   rO   z'TestSmokeTests.check_2.<locals>.err_estk   s'    aAa#qs)n$CJr$   rP   rQ   rW   rtol)r'   pir\   r2   r_   r   appendr   r   r   r5   )rg   rR   rM   iaibrh   ri   dxr+   rl   rO   nkrJ   rm   rr4   drrL   s     `               r"   check_2zTestSmokeTests.check_2f   s    ags255yb1KK1ac"FF1I	 q! 	>AAqQ7CIIvb"c*F2sO<=	>  	AAd amBr1IAC@aC !A	r$   c                 n    | j                  d       | j                  dt        j                  z         y )Ngư>rN         ?)ri   rq   r'   rw   rg   s    r"   test_smoke_splrep_splevz&TestSmokeTests.test_smoke_splrep_splev   s&    ts255y!r$   c                     | j                  dt        j                  z  dt        j                  z  dd       | j                  dt        j                  z  dd       y )Nr   r0   r/   皙?)ri   rS   rR   rN   )ri   rR   rN   r   r   s    r"    test_smoke_splrep_splev_periodicz/TestSmokeTests.test_smoke_splrep_splev_periodic   s@    s255yQruuW!t<qwA.r$   rR   r/   rj   Tc                 *    | j                  ||       y )N)rR   rj   )rq   )rg   rR   rj   s      r"   test_smoke_splrep_splev_2z(TestSmokeTests.test_smoke_splrep_splev_2   s     	x0r$   rM   2   c                 *    | j                  ||       y )N)rR   rM   )r   rg   rM   rR   s      r"   test_smoke_splint_spaldez'TestSmokeTests.test_smoke_splint_spalde   s     	"r$   c                 l    | j                  dt        j                  z  t        j                  ||       y )Nrs   )ry   rz   rM   rR   )r   r'   rw   r   s      r"   test_smoke_splint_spalde_iaibz,TestSmokeTests.test_smoke_splint_spalde_iaib   s$     	BEE	beeqc:r$   c           	         d\  }}t        j                  ||d      }t        j                  |      }dD ]6  }t        ||dd||      }t	        t
              5  t        |       d d d        8 d}t        ||dd      }t        |      }t        t        ||      t        j                  t        |            dd	       t        |t         j                  t        j                  g d
      z  d       y # 1 sw Y   xY w)N)r      rB   )r/   r0   r.   rG   r   rQ   r1   )rN   rJ   绽|=ru   )r/   r0   r1   r.   gMbP?rv   )r'   r\   r2   r   re   rf   r   r   r   zerosr`   rw   r7   )rg   rh   ri   r+   rl   rJ   rm   rootss           r"   test_smoke_sprootz TestSmokeTests.test_smoke_sproot   s    1KK1b!FF1I 	AAQ15Cz* s 	
 QQ!$seS)288CJ+?eRWXruurxx'==DI s   C33C<	rJ   r/   r0   r1   r.   rG   c                 X   ddt         j                  z  dt         j                  z  }}}t        j                  |||dz         }t        j                  |      }t	        ||gdd|d      \  }}	t        ||      }
t        |
d   t        j                  |
d         z
        }|dk  sJ t        ||dd|      }t        t        |
d   |      t        j                  |
d         z
        }|dk  sJ |d	k(  r7t	        ||gdd|d      \  }}	t        d|dz         D ]  }t        |||      }
 y y )
Nr          @rs   r/   rY   )rN   rR   rJ   nest{Gz?)rN   rR   rJ   r1   )	r'   rw   r\   r2   r   r   absr   r_   )rg   rM   rJ   rh   ri   r{   r+   rl   tckpuuverr1rm   err2r4   s                  r"   test_smoke_splprep_splrep_splevz.TestSmokeTests.test_smoke_splprep_splrep_splev   s'    bhBEE	b1KK1ac"FF1I1a&A1;a2t_2a5266"Q%=()d{{QQA+5A$rvvbe}45d{{ 6q!fqAB?GD!1ac] (2tQ'( r$   c           	      f   ddt         j                  z  }}ddt         j                  z  }}d\  }}d\  }}d }	t        j                  |||dz         }
t        j                  |||dz         }t        |
|      }t	        |d   |d    |	|d   |d         d||      }|d   ||  |d   ||  g}t        |d   |d         }t        |d   |d   |      } |	|d   |d         }|j                  t        |d         t        |d               }t        t        j                  ||z
              dk  sJ y )	Nr   r   r1   r1   )rB   rB   c                 2    t        j                  | |z         S r&   r'   r2   r+   r<   s     r"   f2z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2   s    66!A#;r$   r/   rN   kxkyr   )
r'   rw   r\   r>   r   r   reshaper`   r,   ravel)rg   rT   rS   ybyer   r   NxNyr   r+   r<   r=   rm   rn   t2v1v2s                     r"   test_smoke_bisplrep_bisplevz*TestSmokeTests.test_smoke_bisplrep_bisplev   s?   BruuHBBruuHBBB	 KKBQ'KKBQ'q!_r!ubeR1r!u%5rbI!fRnc!fRn-r!ube$RUBqE3'1r!uZZBqE
C1J/RXXb2g&'$...r$   )__name__
__module____qualname____doc__r'   rw   rq   r   r   r   pytestmarkparametrizer   r   r   r   r   r   rI   r$   r"   r@   r@   0   si    qA2555D/Lb raAbeeG 2"/ [[UQF+[[Z$71 8 ,1 [[S2r(+[[UQF+# , ,# [[S2r(+[[UQF+; , ,;J" [[S2r(+[[S/2( 3 ,((/r$   r@   c                       e Zd Zd Zd Zd Zy)	TestSplevc                     g d}g d}t        ||      }t        dg|      }|j                  dk(  sJ t        d|      }|j                  dk(  sJ y )Nr   r.   rG   rP         r/   )r/   rI   )r   r   shape)rg   r+   r<   rm   zs        r"   test_1d_shapezTestSplev.test_1d_shape   sO    Ql1#sOww$!SMww"}}r$   c                     g d}g d}t        ||      }t        j                  g dg dg      }t        ||      }t        |d   |      }t        |d   |      }t	        |t        j
                  ||f             y )Nr   r   )rF   r   r         @)      @g      @      @g      @r   r/   )r   r'   r7   r   r   vstack)rg   r+   r<   rm   ra   r   z0z1s           r"   test_2d_shapezTestSplev.test_2d_shape   sr    QlHH**, -!SM1Q41Q4299b"X./r$   c                     g d}g d}t        ||d      }ddgddgd ddgg}d	D ]  }t        t        ddg||
      ||          ! t        t        t        ddg|d
       y )N)r/   r0   r1   )r   r0   r.   r/   )rJ   rP   r   r.   )r   r/   r1   )extr0   )r   r   r   re   rf   )rg   r+   r<   rm   rstlr   s         r"   test_extrapolation_modesz"TestSplev.test_extrapolation_modes   sx     QQQ!Q1v. 	NC%eQFCS&A49M	N 	j%!Q!<r$   N)r   r   r   r   r   r   rI   r$   r"   r   r      s    	0=r$   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	
TestSplderc                     t        j                  ddd      dz  }t        j                  d|z        }t        ||      | _        t        j
                  t        j                  | j                  d               dkD  sJ y )Nr   r/   d   r1   rB   )r'   r\   r2   r   rp   ptpdiff)rg   r+   r<   s      r"   setup_methodzTestSplder.setup_method   sa    KK1c"A%FF26N!Q< vvbggdhhqk*+a///r$   c                    t        d      D ]s  }t        | j                  |      }t        ||      }t	        | j                  d   |d          t	        | j                  d   |d          | j                  d   |d   k(  rsJ  y )NrG   r   r/   r0   )r_   r   rp   r   r   )rg   nspl2spl3s       r"   test_inversezTestSplder.test_inverse  sv    q 	*Adhh*D$?DDHHQKa1DHHQKa188A;$q')))	*r$   c                 *   t        d      D ]  }t        j                  ddd      }|dk(  r||dk\  |dk  z     }t        || j                  |      }t        | j                  |      }t        ||      }|dk(  rt        ||d	       zt        ||        y )
Nr.   rY   r0   i  r1   r   r/   g>r   )r_   r'   r\   r   rp   r   r   )rg   r   xxdyr   dy2s         r"   test_splder_vs_splevzTestSplder.test_splder_vs_splev  s     s 	)ARD)BAv qR1W-.r488Q'B$((A&DD/CAvCd3C(	)r$   c                 <   t        | j                        }t        j                  ddd      }|D ]k  }|D ]d  }t	        ||| j                        }t        ||      t        ||      z
  }t        t        j                  |      t        j                  |             f m y )Nr   r/   rB   )r   rp   r'   r\   r   r   r   r;   )rg   r   r   rk   x2y1y2s          r"   test_splantider_vs_splintz$TestSplder.test_splantider_vs_splint   s    $((# [[Ar" 	@B @BDHH-2t_uR6

2

2?@	@r$   c                 D    t        t        t        | j                  d       y )Nr.   )re   rf   r   rp   r   s    r"   test_order0_diffzTestSplder.test_order0_diff.  s    j&$((A6r$   c                 H   t        d| j                  d      }t        |d       t        t        t        |d       t        d| j                  d      }t        |d       t        t        t        |d       t        d| j                  d      }t        t        t        |d       y )N      ?r0   )mr1   r/   r.   )r   rp   r   re   rf   )rg   r   s     r"   	test_kinkzTestSplder.test_kink1  sv     c488q)tQj&$2c488q)tQj&$2c488q)j&$2r$   c                 $   t        d      D ]  }| j                  \  }}}t        j                  |||f   }t        j                  ||f      }t        |||f|      }t        ||      }t        ||d          t        ||d          ||d   k(  rJ  y )Nr1   r   r/   r0   )r_   rp   r'   c_dstackr   r   r   )rg   r   ra   rb   rJ   c2r   r   s           r"   test_multidimzTestSplder.test_multidim?  s    q 
	 AhhGAq!q!QwBB8$Bq"aj!,D$?DAtAw'BQ(Q<<
	 r$   N)
r   r   r   r   r   r   r   r   r   r   rI   r$   r"   r   r      s&    0*)&@73 r$   r   c                       e Zd Zd Zy)
TestSplintc           	      4   d\  }}t        j                  |      }|dz  }t        ||d      \  }}}t        |      t        |      cxk(  r|d|dz
  z  z   k(  sJ  J t	        dd|||f      }d}t        ||z
        d	k  sJ |j                         }	t         j                  |	t        |      |z
  dz
  d  t	        dd||	|f      }
t        |
|z
        d	k  sJ t         j                  |	d<   t        j                  t	        dd||	|f            sJ |d t        |      |z
  dz
   }t	        dd|||f      }||z
  d	k  sJ t        t        d
      5  t	        ddt        j                  d      t        j                  d      df       d d d        y # 1 sw Y   y xY w)N)r   r1   r1   r   r   r0   r/   rP   g     @t@rX   z>=n-k-1)match
   rG   )r'   r]   r   r`   r   r   copynanisnanre   	Exceptionones)rg   r   rJ   r+   r<   ra   rb   resexpectedc0res0c1res1s                r"   
test_len_czTestSplint.test_len_cO  s   1IIaLqDA#1a 1vQ.1q!A#w;..... QAq!9%3>"U*** VVX ff3q6A:>?aQAJ'4(?#e+++ 1xxq!aQZ0111 A
QaQAJ'x5(((
 9J7 	71a"''"+rwwqz156	7 	7 	7s   7FFN)r   r   r   r  rI   r$   r"   r   r   N  s    !7r$   r   c                   x    e Zd Zd Zd Zej                  j                  ee	j                  k7  d      d        Zy)TestBisplrepc                     ddl m} t        j                  dk(  rd}nd} |t	        j
                  d      |f      }t        t        t        ||||ddddd	       y )
Nr   )
as_stridedr   l    d</i q rI   )r   r/   )wrT   rS   r   r   rN   )	numpy.lib.stride_tricksr	  r   itemsizer'   r   re   OverflowErrorr   )rg   r	  rc   r+   s       r"   test_overflowzTestBisplrep.test_overflowt  sT    6  A%DD rxx|D73mXq!Q!qQ1	3r$   c           	          t        j                  t        d            5 }|d   }d d d        t        d d df   |d d df   |d d df   dddd       y # 1 sw Y   1xY w)	Nzbug-1310.npzr   r   r/   r0   r1   T)r   r   rN   full_output)r'   loadr#   r   )rg   loaded_datar   s      r"   test_regression_1310z!TestBisplrep.test_regression_1310  se    WWY~./ 	';v&D	' 	acD1ItAaCyQ1!	#	' 	's   AAzneeds ilp64 fitpackreasonc                 "   t        d       t        j                  ddd      }t        j                  ddd      }t        j                  ||      \  }}t        j                  |      }t        |||ddd      }t        t        dd|      d       y )	Ni`m  r   r/   i  r1   r   r   rN   r           )r   r'   r\   meshgrid
zeros_liker   r   r   )rg   r+   r<   r   rm   s        r"   test_ilp64_bisplrepz TestBisplrep.test_ilp64_bisplrep  sw    % KK1c"KK1c"{{1a 1MM!q!Q1a0S#.4r$   N)r   r   r   r  r  r   r   skipifr   r'   int64r  rI   r$   r"   r  r  s  s?    
3
# [[09NO5 P5r$   r  c            	         t        j                  dd      } t        j                  dd      }t        j                  | |      \  }}t        | |d|z  |z        }t	        |j
                        }|j                  |j                         t        t        dddd|      dz
        dk  sJ t        t        dddd|      dz
        dk  sJ t        t        dddd|      dz
        dk  sJ t        t        dd	dd	|      dz
        dk  sJ y )
Nr   r/   r.   r   r   g      ?rH   ir   )
r'   r\   r  r	   r8   rm   extenddegreesr   r   )r+   r<   r   yyrectrm   s         r"   test_dblintr#    s     	AqA
AqA[[AFBq!QVb[1D
txx.CJJt||vaAq#&*+e333vaaC(4/05888vc1aC(4/05888vdCsC0145===r$   c                     t        j                  g d      t        j                  g d      df} | \  }}}t        j                  g d      }t        t        ||       |d   |d   |d   z
  |z  |d   z  z          t        t        || d      t        j                  |      |d   |d   z
  z  |d   z         t         j
                  j                  d       t        j                  t         j
                  j                  d            }t         j
                  j                  d      }t        ||      \  }}}|d   d	z
  |d
   d	z   g}t        |||f|      }t        t        ||||f|      t        ||             y )N)r  r  r   r   )ggg~'	@r  r  r/   )r   r   r1   r   r0   i     rF   rY   )
r'   r7   r   r   	ones_likerandomseedsortr   r   )rm   ra   rb   rJ   r+   r<   tck2s          r"   test_splev_der_kr,    sO   
 88&'8856C GAq!
!A E!SM1Q41Q4!A$;!*;AaD*@#@AE!S!$LLOqtad{3ad:
 IINN4
		  $%A
		AQlGAq!	
1AbEBJA1a)QDE!aAY*E!TN;r$   c                  X   t        j                  ddd      } t        j                  dt         j                  z  | z        }t        j                  dt         j                  z  | z        }t        ||gd      \  }}t        j                  ddd       |d   }t        ||gd|	      \  }}y )
Nr   g?r   r0   r   g)\(?r   rY   )taskra   )r'   r]   r2   rw   r3   r   )ra   r+   r<   rm   r   uknotss         r"   test_splprep_segfaultr0    s     			!S#A
qwqyA
qwqyAaVq!FCIIatVFaV"/FCr$   z>Will crash (see gh-23396), test only meant for 32-bit overflowr  c                     t         j                  j                  d       t        j                  ddd      } | }t         j                  j	                  dd      j                         }d}d}t        | ||d d d d ||d
      \  }}}}}	}
}|d | |d | |	d ||z
  dz
  ||z
  dz
  z   ||f}t        j                  dg      }t        j                  dg      }t        t        t        ft        |||       y )Nr/   r      r  r  i  ( )r'   r(  r)  r\   randnr   r   r   re   RuntimeErrorMemoryErrorr   )r+   r<   r   r   r   nxtxnytyrb   fpierrm   xpyps                  r"   test_bisplev_integer_overflowr>    s     IINN1
Aq"A	A
		B%%'A	
B	
B!,	1atT4B2">BBAr3cr7BsGQ=b1b1 =>B
GC	7)	B	7)	B<-wBDr$   c            	         d} d\  }}d }t        j                  dd|       }t        j                  dd|       }t        ||      }t        |d   |d    ||d   |d         d||	      }d
}t        j                  |      |d<   t        j                  |      dz  |d<   t        j                  d      }	t        j                  d      dz  }
t        j                  t              5  t        |	|
|dd       d d d        y # 1 sw Y   y xY w)N   r   c                 2    t        j                  | |z         S r&   r   r   s     r"   r   ztest_gh_1766.<locals>.f2  s    vvac{r$   r   r   r   i  r/   r   i  r.   r1   )	r'   r\   r>   r   r]   r   r   r5  r   )rc   r   r   r   r+   r<   r=   rm   
tx_ty_sizett_0tt_1s              r"   test_gh_1766rE    s     DFB 	Ar4 A
BT"A	1aB
2a5"Q%BqE2a5!1Q2"
EC JYYz"CFYYz"Q&CF99R=D99R=1D	{	# 'dCA&' ' 's   $C==Dc                      t        j                  dd      } | dz  }t        | |ddg      }t        t        j                  d      |      }t        j
                  g d      }t        ||       y )Nr   r   r1   rG   )rJ   ra   r/   )rF   r         @rG  )r'   r\   r   r   float64r7   r   )r+   r<   rm   r   dess        r"   test_spalde_scalar_inputrJ    sZ    
ArA	1A
Aqc
"C
A
$C
((#
$CS!r$   c                  f   t        j                  g dd      } g d}t        j                  g d      }d}t        | |||f      }t        j                  |      }t        j                  t	        d      D cg c]  }t        | |||f|       c}      }t        ||j                  d	       y c c}w )
N)      $      "                                                                    r  r   rF   r   r   r   r   r         @rG  r^   rC   )rL  rL  rL  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  r  r   rF   r   r   r   r   r   rY  rG  rG  rG  rG  )rF   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r1   r.   rU   rV   )r'   r;   r   r   r_   r   r   r*   )r+   ra   rb   rJ   r   nu	res_splevs          r"   test_spalde_ncr\    s     	

 J!	#A	"A 	

 < 	=A	A
Q1I
C
))C.C

eAhGE!aAY3GHIC51 Hs   7B.)r   )6r9   r   numpyr'   scipy._lib._array_apir   r   r   r   r   r   re   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,   r5   r>   r@   r   r   r   r  r#  r,  r0  r   r  r  r>  xslowrE  rJ  r\  rI   r$   r"   <module>re     s    	   +  3 1 )J J J J 3 4*
#	a/ a/H#= #=LQ  Q h"7 "7J!5 !5H> <8
0 LBHH,O  QEQE& ' ',"2r$   