
    bi<                         d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	m
Z
 d dlmZ d dlmc mZ d dlmc mZ d dlZd dlZej.                  dk  Zd Z G d d      Z G d	 d
      Z G d d      Zy)    N)raises)xp_assert_closeassert_almost_equal)check_free_memoryl        c                     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_interpnd.py	data_filer      s8    77<<(AB* *    c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zej                  j                  ej                  j!                  ed      d               Zy)TestLinearNDInterpolationc                    t        j                  g dt         j                        }t        j                  |j                  d   t         j                        } t        j                  ||      |      }t        ||       y )Nr   r   )      r   )r         ?)r   r   )      ?333333?dtyper   nparrayfloat64arangeshapeinterpndLinearNDInterpolatorr   selfxyyis       r   test_smoketestz(TestLinearNDInterpolation.test_smoketest   sY    HHN::'IIaggaj

30X**1a03Ar"r   c                 D   t        j                  g dt         j                        }t        j                  |j                  d   t         j                        } t        j                  |d d df   |d d df   f|      |d d df   |d d df         }t        ||       y )Nr   r   r      r   r&   s       r   test_smoketest_alternatez2TestLinearNDInterpolation.test_smoketest_alternate#   s    HHN::'IIaggaj

3?X**AacFAacF+;Q?!A#!A#OAr"r   c                    t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  } t        j                  ||      |      }t        ||       y Nr   r   r                 @r   r&   s       r   test_complex_smoketestz0TestLinearNDInterpolation.test_complex_smoketest,   sf    HHN::'IIaggaj

31H0X**1a03Ar"r   c                 d   t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      }t        j                  ||      } ||      }t        ||       |j                  |u sJ y r0   )r   r    r!   r"   r#   qhullDelaunayr$   r%   r   tri)r'   r(   r)   r6   interpolatorr*   s         r   test_tri_inputz(TestLinearNDInterpolation.test_tri_input6   s    HHN::'IIaggaj

31HnnQ44S!<!_Ar"3&&&r   c                 J   t        j                  g dt         j                        }t        j                  g dt         j                        fd}t        j                  t        j                  ddd      d d d f   t        j                  ddd      d d d f         \  }}|j                         }|j                         }t        j                  ||g      j                  j                         } t        j                  |      |      }t        | |||             y )N)r   r   r-   r-   r-   r-   r   r   g      ?g       @g      g      @c                     | |z   dk  }| }| |   }||   }| |   }||   }d| z  }	d   d|z
  |z
  z  	d   |z  z   	d   |z  z   ||<   	d   ||z   dz
  z  	d   d|z
  z  z   	d   d|z
  z  z   ||<   |S )Nr-   r          )
r(   r)   t1t2x1y1x2y2zvaluess
            r   ipz1TestLinearNDInterpolation.test_square.<locals>.ipQ   s    a%1*BB2B2B2B2B!AAYB,ay|$ay|$AbE AYR!,ay!b&)*ay!b&)*AbE Hr   r   r-      r   r    r!   broadcast_arrayslinspaceravelTcopyr$   r%   r   )r'   pointsrJ   xxyyxizirI   s          @r   test_squarez%TestLinearNDInterpolation.test_squareC   s     6bjjI+2::>	* $$R[[Ar%:1T6%B%'[[Ar%:46%BDBXXZXXZXXr2h!!&&(:X**66:2>B2r
+r   c                 
   t        j                  g dt         j                        }t        j                  |j                  d   t         j                        } t        j                  ||d      |      }t        ||       y )Nr   )rZ   )rZ      )r[   r[   )g      @r?   r   r   Trescaler   r&   s       r   test_smoketest_rescalez0TestLinearNDInterpolation.test_smoketest_rescalep   s[    HHB::'IIaggaj

3>X**1a>qAAr"r   c                 l   t        j                  g dt         j                        }t        j                  g dt         j                        }t        j                  t        j                  ddd      d d d f   t        j                  ddd      d d d f         \  }}|j                         }|j                         }t        j                  ||g      j                  j                         } t        j                  ||      |      } t        j                  ||d	      |      }t        ||       y )
N)r   )r   d   )
   r`   )ra   r   r   r=   r   ra   rK   r`   Tr\   rL   )r'   rR   rI   rS   rT   rU   rV   zi_rescaleds           r   test_square_rescalez-TestLinearNDInterpolation.test_square_rescaley   s     <BJJO+2::>$$R[[B%;AdF%C%'[[C%<T!V%DFBXXZXXZXXr2h!!&&(:X**66:2>h33FF " 	B,r   c                    t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      } t        j                  |j                  |      |      } t        j                  |j                  |d      |      }t        ||       y NrY   r   r   r1   Tr\   )r   r    r!   r"   r#   r4   r5   r$   r%   rR   r   r'   r(   r)   r6   r*   
yi_rescales         r   test_tripoints_input_rescalez6TestLinearNDInterpolation.test_tripoints_input_rescale   s    HH?::'IIaggaj

31HnnQ9X**3::q9!<X223::q!
B
+r   c                    t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      }d}t        j                  t        |      5   t        j                  ||d      |       d d d        y # 1 sw Y   y xY w	NrY   r   r   r1   zORescaling is not supported when passing a Delaunay triangulation as ``points``.)matchTr\   )r   r    r!   r"   r#   r4   r5   pytestr   
ValueErrorr$   r%   r'   r(   r)   r6   rk   s        r   test_tri_input_rescalez0TestLinearNDInterpolation.test_tri_input_rescale   s    HH?::'IIaggaj

31HnnQ9]]:U3 	C?H))#q$?B	C 	C 	C   B<<Cc                    t         j                  j                  d       t         j                  j                  dd      }t         j                  j                  d      dt         j                  j                  d      z  z   }t	        j
                  ||      }t        j                  t        j                  |            }t         |dd       |dd             y N     r@   y              ?r   )
r   randomseedrandr$   r%   pickleloadsdumpsr   )r'   r(   r)   rJ   ip2s        r   test_picklez%TestLinearNDInterpolation.test_pickle   s    
		tIINN2q!IINN2BIINN2$6!66**1a0ll6<<+,BsCL#c3-8r   zit fails on 32-bit)reasonc           	         t        d       t        j                  ddd      }t        j                  ddd      }t        j                  ||      \  }}d }t        j                  |j                         |j                         f      j                  }||z  j                         }t        j                  ||      }t        j                  ||t        dd      t        dd      f      }	t        j                  ||t        dd      t        dd      f      }
t        j                  ||t        dd      t        dd      f      }t        j                  ||t        dd      t        dd      f      }|	j                          |
j                          |j                          |j                          |	j                          |
j                          |j                          |j                          y )Ni'  r   ih  ra   c                 J    t         j                  ||f   \  }} | ||f      }|S N)r   mgrid)r7   
slice_rows
slice_colsgrid_xgrid_yress         r   	do_interpz;TestLinearNDInterpolation.test_threading.<locals>.do_interp   s-    XXj*&<=NFF/0CJr   i4  )targetargs)r   r   r"   meshgridvstackrO   rP   r$   r%   	threadingThreadslicestartr   )r'   r_ticks	phi_ticksr_gridphi_gridr   rR   rI   r7   worker_thread_1worker_thread_2worker_thread_3worker_thread_4s                r   test_threadingz(TestLinearNDInterpolation.test_threading   s   
 	% ))AtR(IIar*	;;w	:	
 FLLNHNN,<=>@@8#**,44VVD#**aa?A $**dD 15D>BD $**adD0ABD $**dD 15t3DEG 	r   N)__name__
__module____qualname__r+   r.   r2   r8   rW   r^   rc   rh   ro   r|   rl   markslowskipif	_IS_32BITr   rA   r   r   r   r      sr    ###'+,Z#-$,C	9 [[[[	*>?' @ 'r   r   c                       e Zd Zd Zd Zy)TestEstimateGradients2DGlobalc           	         t        j                  g dt              }t        j                  |      }d dfd dfd dfd	 d
fg}t        |      D ]{  \  }\  }} ||d d df   |d d df         }t        j                  ||d      }|j                  dk(  sJ t        |t        j                  |      d d d f   d|z  z   ddd|        } y )N)r   )r   r@   r<   )r-   r@   r   g      ?g333333?g?r   c                     d| z  dz   S Nr   r-   rA   r(   r)   s     r   <lambda>z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>   s    !A#' r   r   c                     d| z   S Nr   rA   r   s     r   r   z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>   s
    !a% r   r<   c                     d|z   S NrA   r   s     r   r   z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>   s
    "q& r   r:   c                     dd| z  z   d|z  z   S Nr?   L,@rA   r   s     r   r   z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>   s    !ac'E!G+ r   )r?   r   r   r-   ư>)tol)   r@   gh㈵>zitem )rtolatolerr_msg)
r   r    floatr4   r5   	enumerater$   estimate_gradients_2d_globalr#   r   )	r'   r(   r6   funcsjfuncgradrH   dzs	            r   r+   z,TestEstimateGradients2DGlobal.test_smoketest   s    HH @GLNnnQ
 "6*( &)+Z8	
  )/ 	OA|dQqsVQqsV$A66sA4HB88v%%%BHHTN47+ad2Ds	r   c                    t        j                  t        d            }t         j                  j	                  |j
                  d         }t        j                  |      }t        j                         5  t        j                  ddt        j                         t        j                  ||d       d d d        y # 1 sw Y   y xY w)Nzestimate_gradients_hang.npyr   ignorez$Gradient estimation did not converger-   )maxiter)r   loadr   ru   rw   r#   r4   r5   warningscatch_warningsfilterwarningsr$   GradientEstimationWarningr   )r'   rR   rI   r6   s       r   test_regression_2359z2TestEstimateGradients2DGlobal.test_regression_2359   s     #@ABQ0nnV$ $$& 	J##622
 11#vqI	J 	J 	Js   4>B;;CN)r   r   r   r+   r   rA   r   r   r   r      s    0Jr   r   c                       e Zd Z	 	 ddZd Zd Zd Zd Zd Ze	j                  j                  d      d	        Zd
 Zd Zd Zy)TestCloughTocher2DInterpolatorNc           	         t         j                  j                  d      }|t        j                  g dt              }|s/t        j                  | ||d d df   |d d df         d|      }n>t        j                  |d d df   |d d df   f ||d d df   |d d df         d|      }|j                  dd	      }	|s	 ||	      }
n ||	d d df   |	d d df         }
 ||	d d df   |	d d df         }	 t        |
|fi | y # t        $ r0 t        d
t        |
|z
               t        d|j                          w xY w)Nrs   )r   r:   r<   r;   r   r   )r   g?r   r   r-   r   )r   r]   2   r@   z_check_accuracy: abs(a-b):zip.grad:)r   ru   RandomStater    r   r$   CloughTocher2DInterpolatorrw   r   AssertionErrorprintabsr   )r'   r   r(   r   	alternater]   kwrngrJ   pabs               r   _check_accuracyz.TestCloughTocher2DInterpolator._check_accuracy  sN   ii##D)9 &  %&A
 44QQqsVQqsV8L9=wPB 44a!fa!f5E59!AaC&!AaC&5I9=wPB HHRO1A1QqS61QqS6"A1Q31Q3 	Aq'B' 	.AE
;*bgg&	s   :D 9Ec                    d d d d g}t        |      D ]m  \  }}| j                  |dddd|        | j                  |dddd	d
|        | j                  |dddd| d	       | j                  |dddd	d	d|        o y )Nc                     d| z  dz   S r   rA   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>,  s    1q r   c                     d| z   S r   rA   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>-  s
    Q r   c                     d|z   S r   rA   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>.  s
    a r   c                     dd| z  z   d|z  z   S r   rA   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>/  s    QqS57* r   gvIh%<=gHz>	Function r   r   r   r   TzFunction (alternate) )r   r   r   r   r   zFunction (rescaled) r   r   r   r   r]   zFunction (alternate, rescaled) )r   r   r   r   r]   r   r   r   r'   r   r   r   s       r   test_linear_smoketestz4TestCloughTocher2DInterpolator.test_linear_smoketest)  s     !*	
 !' 	GAt  %d1# !    %d/s3 ! 
   %d.qc2D !    %dt9!= ! 	r   c           	          d d d d g}t        |      D ]8  \  }}| j                  |dddd| 	       | j                  |dddd| d
       : y )Nc                     | dz  S Nr@   rA   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>G  
    A r   c                     |dz  S r   rA   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>H  r   r   c                     | dz  |dz  z
  S r   rA   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>I      A1 r   c                     | |z  S r   rA   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>J  
    1 r   &.>g)\(?r   r   r   Tr   r   r   s       r   test_quadratic_smoketestz7TestCloughTocher2DInterpolator.test_quadratic_smoketestD  s~     $	
 !' 	GAt  $TYqc? !    $TYqc?TX ! 		r   c                 @   t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      } t        j                  ||      |      }t        ||       y r0   )
r   r    r!   r"   r#   r4   r5   r$   r   r   )r'   r(   r)   r6   r*   s        r   r8   z-TestCloughTocher2DInterpolator.test_tri_inputU  st    HHN::'IIaggaj

31HnnQ8X00a8;Ar"r   c                    t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      }d}t        j                  t        |      5   t        j                  ||d      |       d d d        y # 1 sw Y   y xY wrj   )r   r    r!   r"   r#   r4   r5   rl   r   rm   r$   r   rn   s        r   ro   z5TestCloughTocher2DInterpolator.test_tri_input_rescale`  s    HH?::'IIaggaj

31HnnQ9]]:U3 	IEH//QEaH	I 	I 	Irp   c                    t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      } t        j                  |j                  |      |      } t        j                  |j                  |d      |      }t        ||       y re   )r   r    r!   r"   r#   r4   r5   r$   r   rR   r   rf   s         r   rh   z;TestCloughTocher2DInterpolator.test_tripoints_input_rescalem  s    HH?::'IIaggaj

31HnnQ?X00Q?BUX88QPTUVWX
B
+r   r[   c           
      j   d d d d d g}t         j                  j                  d      }t         j                  t        j                  g dt
              |j                  d	d
      f   }t        |      D ]:  \  }}| j                  ||dddd|        | j                  ||dddd| d       < y )Nc                     | dz  S r   rA   r   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>}  r   r   c                     |dz  S r   rA   r   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>~  r   r   c                     | dz  |dz  z
  S r   rA   r   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>  r   r   c                     | |z  S r   rA   r   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>  r   r   c                     t        j                  dt         j                  z  | z        t        j                  dt         j                  z  |z        z  S r   )r   cospisinr   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>  s5    "%%	*266!BEE'!)+<< r   i  )r   r:   r<   r;   r   i  r@   r   g{Gzt?g{Gz?r   )r(   r   r   r   r   T)r(   r   r   r   r   r]   )	r   ru   r   r_r    r   rw   r   r   )r'   r   r   gridr   r   s         r   
test_densez)TestCloughTocher2DInterpolator.test_densey  s     $<
 ii##D)uuRXX:%HXXeQ'( ) !' 	GAt  $T	RSQTo !    $T#A3 ! 		r   c                     t         j                  j                  dd      }t         j                  j                  d      }t        t        t
        j                  ||       y )Nrt   r?   )r   ru   randnassert_raisesrm   r$   r   )r'   r(   r)   s      r   test_wrong_ndimz.TestCloughTocher2DInterpolator.test_wrong_ndim  s<    IIOOB"IIOOBj("E"Eq!Lr   c                 b   t         j                  j                  d      }|j                  dd      }|j                  d      d|j                  d      z  z   }t	        j
                  ||      }t        j                  t        j                  |            }t         |dd       |dd             y rr   )
r   ru   r   rw   r$   r   rx   ry   rz   r   )r'   r   r(   r)   rJ   r{   s         r   r|   z*TestCloughTocher2DInterpolator.test_pickle  s    ii##D)HHROHHRL2chhrl?*00A6ll6<<+,BsCL#c3-8r   c                 @   t        j                  dddt        j                  d      dz  fg      }t        j                  g d      }t        j                  ||      }d|j
                  d<   d	}t        j                  dt        j                  |      z  dt        j                  |      z  g      }t        j                  dt        j                  t         j                  dz  |z
        z  dt        j                  t         j                  dz  |z
        z  g      } ||      } ||      }t        ||       t         j                  j                  d
      }	|	j                  dd      }
|	j                  d      }|
j                  |j                        j                  |d d d f   z   }|
j                  |      |z   }|
j                  |      |z   }t        j                  ||      }d|j
                  d<    ||      } ||      }t        ||       t        ||       y )Nr   r<   r   r?   r@   )r-   r   r   r   .r   r-   )r   r    sqrtr$   r   r   r   r   r   r   ru   r   r   dotrP   )r'   rR   rI   rJ   alphap1p2v1v2r   Ar   w1w2s                 r   test_boundary_tri_symmetryz9TestCloughTocher2DInterpolator.test_boundary_tri_symmetry  s   
 66CA+>?@)$00@  XXsRVVE]*C"&&-,?@AXXsRVVBEE!GeO44cBFF2557U?<S6STUVVB ii##A&IIaOIIaLvxx""QtAvY.UU2Y]UU2Y]00@VVBBr   )Nr   FF)r   r   r   r   r   r   r8   ro   rh   rl   r   	fail_slowr   r   r|   r  rA   r   r   r   r     s[    @E %B6"	#I
, [[1 .M
	9% r   r   )r	   sysr   numpyr   rl   r   r   scipy._lib._array_apir   r   scipy._lib._testutilsr   scipy.interpolate._interpndinterpolate	_interpndr$   scipy.spatial._qhullspatial_qhullr4   rx   r   maxsizer   r   r   r   r   rA   r   r   <module>r     sh    	 
   *  F 3 . . $ $  [[5 	*
@ @F'J 'JT@  @ r   