
    Ug>                        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	 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-d Z.e
j/        j0        d             Z1d Z2d 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                     t           j                            t           j                            t           j                            t
                              d|           S )Ndata)ospathjoinabspathdirname__file__)basenames    c/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/interpolate/tests/test_fitpack.py	data_filer#      s=    7<<(A(ABB* * *    c                 Z    t          j        t          j        | j        |                     S N)npsqrtdotT)xs    r"   norm2r,      s    726!#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 dS )z$Derivatives of sin->cos->-sin->-cos.   r            N)r'   sincos)r+   ds     r"   f1r5      sy    1uzzvayy1uzzvayy1uzzq		z1uzzq		z zr$   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FGG	H	HB4Kr$   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e	j
                            d
ddg          e	j
                            dddg          d                         Ze	j
                            dddg          e	j
                            d
ddg          d                         Ze	j
                            dddg          e	j
                            d
ddg          d                         Zd Ze	j
                            dddg          e	j
                            dg d          d                         Zd ZdS )TestSmokeTestszj
    Smoke tests (with a few asserts) for fitpack routines -- mostly
    check that they are runnable
    r   r0   FNc           
      P   ||}||}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 ]c} |||          }t          t	          ||          t          |||          z
            t          t	          ||                    z  }||k     sJ dd S )N   r/   dtypec                 J    dz  }d|d| |z
  z  z  z  }dk    r|dz  z  }|S )N      ?         ?r   g     j@ )kr4   htolNss       r"   err_estz'TestSmokeTests.check_1.<locals>.err_est@   s=    aAa#qs)n$C1uus1uJr$      rN   perrJ   xer   )	r'   linspacearangefloatr5   ranger   r,   r   )selfrR   rN   abat_nodesxbrS   r+   x1vrO   rJ   tckttr4   rL   errrM   s     `               @r"   check_1zTestSmokeTests.check_13   s`   :B:BK1a!e$$!a%29Q7777%A,,FFqEE	 	 	 	 	 	 q! 	! 	!AAqR888C!)1Q1"rB1Q3ZZ ! !gammBr1IIb#q(9(99::U2b!99=M=MMSyyyyy!		! 	!r$   rB   c           	         ddt           j        z  dt           j        z  }}}t          j        ||dz             }t          j        |          }	fd}
g }t	          dd          D ]K}t          ||	d|||          }|                    t          |||          t          ||          g           Ld}|D ]F}d}|d         D ]4} |
||          }t          |t          ||          d|           |dz   }5|dz   }Gd S )	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_estV   s'    aAa#qs)n$CJr$   rP   rQ   atolrtol)r'   pirT   r2   rW   r   appendr   r   r   r5   )rX   rR   rM   iaibrY   rZ   dxr+   r^   rO   nkrJ   r_   rr4   drrL   s     `               r"   check_2zTestSmokeTests.check_2Q   s9   ags25yb1K1ac""F1II	 	 	 	 	 q! 	> 	>AAqQ777CIIvb"c**F2sOO<==== 	 	AAd  gammBr1IIAC@@@@aC!AA	 	r$   c                     |                      d           |                      dt          j        z             |                      dt          j        z  dt          j        z  dd           d S )	Ngư>rN         ?)rZ   r0   r/   皙?)rZ   rS   rR   rN   )rb   r'   ri   rX   s    r"   test_smoke_splrep_splevz&TestSmokeTests.test_smoke_splrep_splevj   s\    ts25y!!!s25yQruW!t<<<<<r$   rR   r/   r[   Tc                 4    |                      ||           d S )N)rR   r[   )rb   )rX   rR   r[   s      r"   test_smoke_splrep_splev_2z(TestSmokeTests.test_smoke_splrep_splev_2o   s      	x00000r$   rM   2   c                 4    |                      ||           d S )N)rR   rM   )rq   rX   rM   rR   s      r"   test_smoke_splint_spaldez'TestSmokeTests.test_smoke_splint_spaldet   s      	"""""r$   c                 f    |                      dt          j        z  t          j        ||           d S )Nrd   )rk   rl   rM   rR   )rq   r'   ri   r|   s      r"   test_smoke_splint_spalde_iaibz,TestSmokeTests.test_smoke_splint_spalde_iaiby   s,     	BE	beqc:::::r$   c           	         d\  }}t          j        ||d          }t          j        |          }dD ]R}t          ||dd||          }t	          t
                    5  t          |           d d d            n# 1 swxY w Y   Sd}t          ||dd          }t          |          }t          t          ||          ddd	           t          |t           j	        t          j
        g d
          z  d           d S )N)ru      rB   )r/   r0   r.   rG   r   rQ   r1   )rN   rJ   g|=rf   )r/   r0   r1   r.   gMbP?rh   )r'   rT   r2   r   assert_raises
ValueErrorr   r   r   ri   r7   )rX   rY   rZ   r+   r^   rJ   r_   rootss           r"   test_smoke_sprootz TestSmokeTests.test_smoke_sproot~   s<   1K1b!!F1II 	 	AAQ1555Cz**  s               QQ!$$$seS))15uEEEErurx'='==DIIIIIIs   A99A=	 A=	rJ   r/   r0   r1   r.   rG   c                    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    r@t	          ||gdd|d          \  }}	t          d|dz             D ]}t          |||          }
d S d S )
Nr          @rd   r/   )rN   rR   rJ   nest{Gz?)rN   rR   rJ   r1   )	r'   ri   rT   r2   r   r   absr   rW   )rX   rM   rJ   rY   rZ   rm   r+   r^   tckpuuverr1r_   err2r4   s                  r"   test_smoke_splprep_splrep_splevz.TestSmokeTests.test_smoke_splprep_splrep_splev   sX    bhBE	b1K1ac""F1II1a&A1;;;a2t__2a526"Q%==())d{{{{QQA+++5A$$rvbe}}455d{{{{ 66q!fqAB???GD!1ac]] ( (2tQ'' 6( (r$   c           	         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                   }t          |d                   t          |d                   f|_        t          t          j	        ||z
                      dk     sJ d S )	Nr   r   r1   r1   )rB   rB   c                 0    t          j        | |z             S r&   r'   r2   r+   r<   s     r"   f2z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2   s    6!A#;;r$   r/   rN   kxkyr   )
r'   ri   rT   r>   r   r   lenshaper,   ravel)rX   r\   rS   ybyer   r   NxNyr   r+   r<   r=   r_   r`   t2v1v2s                     r"   test_smoke_bisplrep_bisplevz*TestSmokeTests.test_smoke_bisplrep_bisplev   sp   BruHBBruHBBB	 	 	 KBQ''KBQ''q!__r!ubeRR1r!u%5%5rbIII!fRVnc!fRVn-r!ube$$RUBqE3''R1r!ur!u::s2a5zz)RXb2g&&''$......r$   )__name__
__module____qualname____doc__r'   ri   rb   rq   rw   pytestmarkparametrizery   r}   r   r   r   r   rI   r$   r"   r@   r@   .   s         qA255D! ! ! !< raAbeG    2= = =
 [UQF++[Z$771 1 87 ,+1 [S2r(++[UQF++# # ,+ ,+# [S2r(++[UQF++; ; ,+ ,+;J J J" [S2r(++[S///22( ( 32 ,+((/ / / / /r$   r@   c                        e Zd Zd Zd Zd ZdS )	TestSplevc                     g d}g d}t          ||          }t          dg|          }t          |j        d           t          d|          }t          |j        d           d S )Nr   r.   rG   rP         r/   )r/   rI   )r   r   r   r   )rX   r+   r<   r_   zs        r"   test_1d_shapezTestSplev.test_1d_shape   sg    KKKKQll1#sOOQWd###!SMMQWb!!!!!r$   c                 *   g d}g d}t          ||          }t          j        g dg dg          }t          ||          }t          |d         |          }t          |d         |          }t	          |t          j        ||f                     d S )Nr   r   )rF   rt   r         @)      @g      @      @g      @r   r/   )r   r'   r7   r   r   vstack)rX   r+   r<   r_   tr   z0z1s           r"   test_2d_shapezTestSplev.test_2d_shape   s    OOOOQllH******, - -!SMM1Q41Q4Q	2r(++,,,,,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
           d S )N)r/   r0   r1   )r   r0   r.   r/   )rJ   rP   r   r.   )r   r/   r1   )extr0   )r   r   r   r   r   )rX   r+   r<   r_   rstlr   s         r"   test_extrapolation_modesz"TestSplev.test_extrapolation_modes   s     GGGGQQQ!Q1v. 	N 	NC%eQFCS&A&A&A49MMMMj%!Q!<<<<<<r$   N)r   r   r   r   r   r   rI   r$   r"   r   r      sA        " " "	- 	- 	-= = = = =r$   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	
TestSplderc                    t          j        ddd          dz  }t          j        d|z            }t          ||          | _        t          t          j        t          j        | j        d                             dk               d S )Nr   r/   d   r1   rB   )r'   rT   r2   r   splr   ptpdiff)rX   r+   r<   s      r"   setup_methodzTestSplder.setup_method   so    K1c""A%F26NN!Q<< 	rwtx{++,,q011111r$   c                 :   t          d          D ]}t          | j        |          }t          ||          }t	          | j        d         |d                    t	          | j        d         |d                    t          | j        d         |d                    d S )NrG   r   r/   r0   )rW   r   r   r   r   r   )rX   nspl2spl3s       r"   test_inversezTestSplder.test_inverse   s    q 	/ 	/Adh**D$??DDHQKa111DHQKa111!d1g....	/ 	/r$   c                 P   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	           t          ||           d S )
Nr.   r   r0   i  r1   r   r/   g>r   )rW   r'   rT   r   r   r   r   )rX   r   xxdyr   dy2s         r"   test_splder_vs_splevzTestSplder.test_splder_vs_splev   s     s 	) 	)ARD))BAvv qR1W-.r48Q''B$(A&&DD//CAvvCd33333C((((	) 	)r$   c                     t          | j                  }t          j        ddd          }|D ]N}|D ]I}t	          ||| j                  }t          ||          t          ||          z
  }t          ||           JOd S )Nr   r/   rB   )r   r   r'   rT   r   r   r   )rX   r   r   r]   x2y1y2s          r"   test_splantider_vs_splintz$TestSplder.test_splantider_vs_splint  s    $(## [Ar"" 	( 	(B ( (BDH--2t__uR6B''''(	( 	(r$   c                 H    t          t          t          | j        d           d S )Nr.   )r   r   r   r   rv   s    r"   test_order0_diffzTestSplder.test_order0_diff  s    j&$(A66666r$   c                 x   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           d S )N      ?r0   )mr1   r/   r.   )r   r   r   r   r   )rX   r   s     r"   	test_kinkzTestSplder.test_kink  s     c48q)))tQj&$222c48q)))tQj&$222c48q)))j&$22222r$   c                 `   t          d          D ]}| j        \  }}}t          j        |||f         }t          j        ||f          }t          |||f|          }t          ||          }t          ||d                    t          ||d                    t          ||d                    d S )Nr1   r   r/   r0   )	rW   r   r'   c_dstackr   r   r   r   )rX   r   r   crJ   c2r   r   s           r"   test_multidimzTestSplder.test_multidim'  s    q 
	% 
	%AhGAq!q!QwBB8$$Bq"aj!,,D$??DAtAw'''BQ(((DG$$$$
	% 
	%r$   N)
r   r   r   r   r   r   r   r   r   r   rI   r$   r"   r   r      s}        2 2 2/ / /) ) )&( ( (7 7 73 3 3% % % % %r$   r   c                       e Zd Zd ZdS )
TestSplintc           	         d\  }}t          j        |          }|dz  }t          ||d          \  }}}t          |          t          |          cxk    r|d|dz
  z  z   k    sn J t	          dd|||f          }t          |dd	
           |                                }t           j        |t          |          |z
  dz
  d <   t	          dd|||f          }	t          |	dd	
           t           j        |d<   t          j        t	          dd|||f                    sJ |d t          |          |z
  dz
           }
t	          dd||
|f          }t          |dd	
           t          t          d          5  t	          ddt          j        d          t          j        d          df           d d d            d S # 1 swxY w Y   d S )N)r   r1   r1   r   rs   r0   r/   rP   g     @t@V瞯<rg   z>=n-k-1)match
   rG   )r'   rU   r   r   r   r   copynanisnanr   	Exceptionones)rX   r   rJ   r+   r<   r   r   resc0res0c1res1s               r"   
test_len_czTestSplint.test_len_c7  s!   1IaLLqDA###1a 1vvQ....1q!A#w;...... QAq!9%%XE2222 VVXX&3q66!8A:;;aQAJ''hU3333 1xq!aQZ0011111 A
QaQAJ''hU3333 9J777 	7 	71a"'"++rwqzz15666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   =9GG
GN)r   r   r   r   rI   r$   r"   r   r   6  s#        7 7 7 7 7r$   r   c                   v    e Zd Zd Zd Zej                            ee	j
        k    d          d             ZdS )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	           d S )
Nr   )
as_stridedr   l    d</i q rI   )r   r/   )wr\   rS   r   r   rN   )	numpy.lib.stride_tricksr   r   itemsizer'   zerosr   OverflowErrorr   )rX   r   sizer+   s       r"   test_overflowzTestBisplrep.test_overflowZ  s    666666 A%%DDD Jrx||D7333mXq!Q!qQ1	3 	3 	3 	3 	3 	3r$   c           	          t          j        t          d                    5 }|d         }d d d            n# 1 swxY w Y   t          |d d df         |d d df         |d d df         dddd           d S )	Nzbug-1310.npzr   r   r/   r0   r1   T)r   r   rN   full_output)r'   loadr#   r   )rX   loaded_datar   s      r"   test_regression_1310z!TestBisplrep.test_regression_1310f  s    WY~..// 	';v&D	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	aaacD1ItAAAaCyQ1!	# 	# 	# 	# 	# 	#s   	7;;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           d S )	Ni`m  r   r/   i  r1   r   r   rN   r           )r	   r'   rT   meshgrid
zeros_liker   r   r   )rX   r+   r<   r   r_   s        r"   test_ilp64_bisplrepz TestBisplrep.test_ilp64_bisplrepr  s    %   K1c""K1c""{1a  1M!q!Q1a000S#..44444r$   N)r   r   r   r  r	  r   r   skipifr   r'   int64r  rI   r$   r"   r   r   Y  sl        
3 
3 
3
# 
# 
# [09NOO5 5 PO5 5 5r$   r   c            	         t          j        dd          } t          j        dd          }t          j        | |          \  }}t          | |d|z  |z            }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      ?rH   ir   )
r'   rT   r  r
   r8   r_   extenddegreesr   r   )r+   r<   r   yyrectr_   s         r"   test_dblintr  }  s     	AqA
AqA[AFBq!QVb[11D
tx..CJJt|q!Q3//333q#q!S114888sAq!S114888tS$S991=====r$   c                  B   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          |d         |d         z
  |d         z             t           j                            d           t          j        t           j                            d                    }t           j                            d          }t          ||          \  }}}|d         d	z
  |d
         d	z   g}t          |||f|          }t          t          ||||f|          t          ||                     d S )N)r  r  r   r   )ggg~'	@r  r  r/   )r   r   r1   r   r0   i     rF   r   )	r'   r7   r   r   randomseedsortr   r   )r_   r   r   rJ   r+   r<   tck2s          r"   test_splev_der_kr     s   
 8&&&''855566C GAq!
!!A E!SMM1Q41Q4!A$;!*;AaD*@#@AAAE!S!$$qtAaDyAaD&8999 INN4
	  $$%%A
	AQllGAq!	
1AbEBJA1a)QDE!aAY**E!TNN;;;;;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|	          \  }}d S )
Nr   g?ru   r0   rs   g)\(?r   r   )taskr   )r'   rU   r2   ri   r3   r   )r   r+   r<   r_   r   uknotss         r"   test_splprep_segfaultr$    s     		!S#A
qwqyA
qwqyAaVq!!!FCIatVFaV"///FCr$   c                     t           j                            d           t          j        ddd          } | }t           j                            dd                                          }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          |||           d S )Nr/   r      r  r  i  ( )r'   r  r  rT   randnr   r   r  r   RuntimeErrorMemoryErrorr   )r+   r<   r   r   r   nxtxnytyr   fpierr_   xpyps                  r"   test_bisplev_integer_overflowr2    s   INN1
Aq"A	A
	B%%''A	
B	
B!,	1atT4B2"> "> ">BBAr3crc7BssGQ=b1b1 ==>B
GC	7)		B	7)		B<-wBDDDDDr$   c            	      F   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            d S # 1 swxY w Y   d S )N   r   c                 0    t          j        | |z             S r&   r   r   s     r"   r   ztest_gh_1766.<locals>.f2  s    vac{{r$   r   r   rz   i  r/   r   i  r.   r1   )	r'   rT   r>   r   rU   r   r   r)  r   )r  r   r   r   r+   r<   r=   r_   
tx_ty_sizett_0tt_1s              r"   test_gh_1766r9    sg    DFB   	Ar4  A
BT""A	1aB
2a5"Q%BqE2a5!1!1Q2"
E
E
EC JYz""CFYz""Q&CF9R==D9R==1D	{	#	# ' 'dCA&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   5DDDc                      t          j        dd          } | dz  }t          | |ddg          }t          t          j        d          |          }t          j        g d          }t          ||           d S )Nr   r   r1   rG   )rJ   r   r/   )rF   r         @r;  )r'   rT   r   r   float64r7   r   )r+   r<   r_   r   dess        r"   test_spalde_scalar_inputr>    sw    
ArA	1A
Aqc
"
"
"C
A
$
$C
(###
$
$CS!!!!!r$   c                  *   t          j        g dd          g dt          j        g d          dt          f          } t          j        fdt          d          D                       }t	          | |j        d	
           d S )N)      $      "                                                                    r  r   rF   rt   r   r   r   r         @r;  rV   rC   )r@  r@  r@  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  r  r   rF   rt   r   r   r   r   rM  r;  r;  r;  r;  )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   c                 8    g | ]}t          f|          S rI   )r   ).0nur   rJ   r   r+   s     r"   
<listcomp>z"test_spalde_nc.<locals>.<listcomp>  s+    GGGE!aAY33GGGr$   r.   r   r   )r'   r;   r   rW   r   r*   )r   	res_splevr   rJ   r   r+   s     @@@@r"   test_spalde_ncrS    s     	
 J J J!	# 	# 	#A	" 	" 	"A 	
 < < < 	= 	=A	A
Q1I

C
GGGGGGGeAhhGGGHHIC5111111r$   )r   )4r9   r   numpyr'   numpy.testingr   r   r   r   r   r   r   r   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,   r5   r>   r@   r   r   r   r   r  r   r$  r2  r   xslowr9  r>  rS  rI   r$   r"   <module>r\     s+       				    K K K K K K K K K K K K K K * * * * * *  3 3 3 3 3 3 1 1 1 1 1 1J J J J J J J J J J J J J J J J J J J J J J J J J J J J 3 3 3 3 3 3 4 4 4 4 4 4* * *
# # #	 	 	 	  K/ K/ K/ K/ K/ K/ K/ K/\#= #= #= #= #= #= #= #=LQ% Q% Q% Q% Q% Q% Q% Q%h 7  7  7  7  7  7  7  7F!5 !5 !5 !5 !5 !5 !5 !5H> > > < < <4
0 
0 
0E E E& ' ' '," " "2 2 2 2 2r$   