
    S_fk5                         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c mZ d dlmc mZ d dlZd Z G d d      Z G d d      Z G d	 d
      Zy)    N)assert_equalassert_allcloseassert_almost_equalsuppress_warnings)raisesc                     t         j                  j                  t         j                  j                  t         j                  j	                  t
                    d|       S )Ndata)ospathjoinabspathdirname__file__)basenames    Elib/python3.12/site-packages/scipy/interpolate/tests/test_interpnd.py	data_filer      s8    77<<(AB* *    c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z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                 @   t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      } t        j                  ||      |      }t        ||       y r1   )
r    r!   r"   r#   r$   qhullDelaunayr%   r&   r   r(   r)   r*   trir+   s        r   test_tri_inputz(TestLinearNDInterpolation.test_tri_input1   st    HHN::'IIaggaj

31HnnQ2X**3215Ar"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>.ipJ   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(   pointsrK   xxyyxizirJ   s          @r   test_squarez%TestLinearNDInterpolation.test_square<   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   )r[   )r[      )r\   r\   )g      @r@   r   r   Trescaler   r'   s       r   test_smoketest_rescalez0TestLinearNDInterpolation.test_smoketest_rescalei   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   )
   ra   )rb   r   r   r>   r   rb   rL   ra   Tr]   rM   )r(   rS   rJ   rT   rU   rV   rW   zi_rescaleds           r   test_square_rescalez-TestLinearNDInterpolation.test_square_rescaler   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 NrZ   r   r   r2   Tr]   )r    r!   r"   r#   r$   r5   r6   r%   r&   rS   r   r(   r)   r*   r8   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	NrZ   r   r   r2   zORescaling is not supported when passing a Delaunay triangulation as ``points``.)matchTr]   )r    r!   r"   r#   r$   r5   r6   pytestr   
ValueErrorr%   r&   r(   r)   r*   r8   rl   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     rA   y              ?r   )
r    randomseedrandr%   r&   pickleloadsdumpsr   r(   r)   r*   rK   ip2s        r   test_picklez%TestLinearNDInterpolation.test_pickle   s    
		tIINN2q!IINN2BIINN2$6!66**1a0ll6<<+,BsCL#c3-8r   N)__name__
__module____qualname__r,   r/   r3   r9   rX   r_   rd   ri   rp   r~   rB   r   r   r   r      s6    ###	#+,Z#-$,C	9r   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      }t        |j                  d       t        |t        j                  |      d d d f   d|z  z   ddd|z          y )N)r   )r   rA   r=   )r.   rA   r   g      ?g333333?g?r   c                     d| z  dz   S Nr   r.   rB   r)   r*   s     r   <lambda>z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>   s    !A#' r   r   c                     d| z   S Nr   rB   r   s     r   r   z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>   s
    !a% r   r=   c                     d|z   S NrB   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,@rB   r   s     r   r   z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>   s    !ac'E!G+ r   )r@   r   r   r.   ư>)tol)   rA   gh㈵>zitem %d)rtolatolerr_msg)r    r!   floatr5   r6   	enumerater%   estimate_gradients_2d_globalr   r$   r   )	r(   r)   r8   funcsjfuncgradrI   dzs	            r   r,   z,TestEstimateGradients2DGlobal.test_smoketest   s    HH @GLNnnQ
 "6*( &)+Z8	
  )/ 	IOA|dQqsVQqsV$A66sA4HB6*BtAv 62 =!%D)a-I	Ir   c                 p   t        j                  t        d            }t         j                  j	                  |j
                  d         }t        j                  |      }t               5 }|j                  t        j                  d       t        j                  ||d       d d d        y # 1 sw Y   y xY w)Nzestimate_gradients_hang.npyr   z$Gradient estimation did not converger.   )maxiter)r    loadr   rv   rx   r$   r5   r6   r   filterr%   GradientEstimationWarningr   )r(   rS   rJ   r8   sups        r   test_regression_2359z2TestEstimateGradients2DGlobal.test_regression_2359   s     #@ABQ0nnV$   	JCJJx99=?11#vqI	J 	J 	Js   *9B,,B5N)r   r   r   r,   r   rB   r   r   r   r      s    I,Jr   r   c                   N    e Zd Z	 	 ddZd Zd Zd Zd Zd Z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|      }t         j                  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)Nrt   )r   r;   r=   r<   r   r   )r   g?r   r   r.   r   )r   r^   2   rA   z_check_accuracy: abs(a-b):zip.grad:)r    rv   rw   r!   r   r%   CloughTocher2DInterpolatorrx   r   AssertionErrorprintabsr   )r(   r   r)   r   	alternater^   kwrK   pabs              r   _check_accuracyz.TestCloughTocher2DInterpolator._check_accuracy   sO   
		t9 &  %&A
 44QQqsVQqsV8L9=wPB 44a!fa!f5E59!AaC&!AaC&5I9=wPB IINN2q!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|z         | j                  |dddd	d
|z         | j                  |dddd|z  d	       | j                  |dddd	d	d|z         o y )Nc                     d| z  dz   S r   rB   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>   s    1q r   c                     d| z   S r   rB   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>   s
    Q r   c                     d|z   S r   rB   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>   s
    a r   c                     dd| z  z   d|z  z   S r   rB   r   s     r   r   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>   s    QqS57* r   gvIh%<=gHz>Function %dr   r   r   r   TzFunction (alternate) %d)r   r   r   r   r   zFunction (rescaled) %dr   r   r   r   r^   z!Function (alternate, rescaled) %d)r   r   r   r   r^   r   r   r   r(   r   r   r   s       r   test_linear_smoketestz4TestCloughTocher2DInterpolator.test_linear_smoketest   s     !*	
 !' 	RGAt  5t$)6): ! <  5t$+/)BQ)F ! H   5t$)AA)Et ! U  5t$+/)Lq)P ! R	Rr   c           	          d d d d g}t        |      D ]8  \  }}| j                  |dddd|z  	       | j                  |dddd|z  d
       : y )Nc                     | dz  S NrA   rB   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>
  
    A r   c                     |dz  S r   rB   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>  r   r   c                     | dz  |dz  z
  S r   rB   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>      A1 r   c                     | |z  S NrB   r   s     r   r   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>  
    1 r   &.>g)\(?r   r   r   Tr   r   r   s       r   test_quadratic_smoketestz7TestCloughTocher2DInterpolator.test_quadratic_smoketest  s|     $	
 !' 	JGAt  4d)6): ! <  4d)6):D ! J	Jr   c                 @   t        j                  g dt         j                        }t        j                  |j                  d   t         j                        }|d|z  z
  }t        j                  |      } t        j                  ||      |      }t        ||       y r1   )
r    r!   r"   r#   r$   r5   r6   r%   r   r   r7   s        r   r9   z-TestCloughTocher2DInterpolator.test_tri_input  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rk   )r    r!   r"   r#   r$   r5   r6   rm   r   rn   r%   r   ro   s        r   rp   z5TestCloughTocher2DInterpolator.test_tri_input_rescale!  s    HH?::'IIaggaj

31HnnQ9]]:U3 	IEH//QEaH	I 	I 	Irq   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 rf   )r    r!   r"   r#   r$   r5   r6   r%   r   rS   r   rg   s         r   ri   z;TestCloughTocher2DInterpolator.test_tripoints_input_rescale.  s    HH?::'IIaggaj

31HnnQ?X00Q?BUX88QPTUVWX
B
+r   c           
         d d d d d g}t         j                  j                  d       t         j                  t        j                  g dt
              t         j                  j                  d	d
      f   }t        |      D ]:  \  }}| j                  ||dddd|z         | j                  ||dddd|z  d       < y )Nc                     | dz  S r   rB   r   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>=  r   r   c                     |dz  S r   rB   r   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>>  r   r   c                     | dz  |dz  z
  S r   rB   r   s     r   r   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>?  r   r   c                     | |z  S r   rB   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>A  s5    "%%	*266!BEE'!)+<< r   i  )r   r;   r=   r<   r   i  rA   r   g{Gzt?g{Gz?r   )r)   r   r   r   r   T)r)   r   r   r   r   r^   )	r    rv   rw   r_r!   r   rx   r   r   )r(   r   gridr   r   s        r   
test_densez)TestCloughTocher2DInterpolator.test_dense:  s     $<
 			tuuRXX:%HYY^^E1-. / !' 	JGAt  4d)6): ! <  4d)6):D ! J	Jr   c                     t         j                  j                  dd      }t         j                  j                  d      }t        t        t
        j                  ||       y )Nru   r@   )r    rv   randnassert_raisesrn   r%   r   )r(   r)   r*   s      r   test_wrong_ndimz.TestCloughTocher2DInterpolator.test_wrong_ndimN  s<    IIOOB"IIOOBj("E"Eq!Lr   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 rs   )
r    rv   rw   rx   r%   r   ry   rz   r{   r   r|   s        r   r~   z*TestCloughTocher2DInterpolator.test_pickleS  s    
		tIINN2q!IINN2BIINN2$6!6600A6ll6<<+,BsCL#c3-8r   c                 x   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
       t         j                  j                  dd      }	t         j                  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@   rA   )r.   r   r   r   .r   r.   )r    r!   sqrtr%   r   r   r   r   r   r   rv   rw   r   dotrQ   )r(   rS   rJ   rK   alphap1p2v1v2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 			qIIOOAq!IIOOAvxx""QtAvY.UU2Y]UU2Y]00@VVBBr   )Nr   FF)r   r   r   r   r   r   r9   rp   ri   r   r   r~   r   rB   r   r   r   r      s@    @E %@R,J	#I
,J(M
	9% r   r   )r
   numpyr    numpy.testingr   r   r   r   rm   r   r   scipy.interpolate.interpndinterpolater%   scipy.spatial._qhullspatial_qhullr5   ry   r   r   r   r   rB   r   r   <module>r      sU    	 . . *  - - $ $ *
S9 S9l"J "JJt  t r   