ó
    Eñiz/  ã                   óv   • S r SSKrSSKJrJrJrJr  SSKJ	r	  / SQr
 " S S\5      rS	\R                  S
4S jrg)zD
Convenience interface to N-D interpolation

.. versionadded:: 0.9

é    Né   )ÚLinearNDInterpolatorÚNDInterpolatorBaseÚCloughTocher2DInterpolatorÚ_ndim_coords_from_arrays)ÚcKDTree)ÚgriddataÚNearestNDInterpolatorr   r   c                   ó(   • \ rS rSrSrSS jrS rSrg)r
   é   a…  Nearest-neighbor interpolator in N > 1 dimensions.

Methods
-------
__call__

Parameters
----------
x : (npoints, ndims) 2-D ndarray of floats
    Data point coordinates.
y : (npoints, ...) N-D ndarray of float or complex
    Data values. The length of `y` along the first axis must be equal to
    the length of `x`.
rescale : boolean, optional
    Rescale points to unit cube before performing interpolation.
    This is useful if some of the input dimensions have
    incommensurable units and differ by many orders of magnitude.

    .. versionadded:: 0.14.0
tree_options : dict, optional
    Options passed to the underlying ``cKDTree``.

    .. versionadded:: 0.17.0

See Also
--------
griddata :
    Interpolate unstructured D-D data.
LinearNDInterpolator :
    Piecewise linear interpolator in N dimensions.
CloughTocher2DInterpolator :
    Piecewise cubic, C1 smooth, curvature-minimizing interpolator in 2D.
interpn : Interpolation on a regular grid or rectilinear grid.
RegularGridInterpolator : Interpolator on a regular or rectilinear grid
                          in arbitrary dimensions (`interpn` wraps this
                          class).

Notes
-----
Uses ``scipy.spatial.cKDTree``

.. note:: For data on a regular grid use `interpn` instead.

Examples
--------
We can interpolate values on a 2D plane:

>>> from scipy.interpolate import NearestNDInterpolator
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> rng = np.random.default_rng()
>>> x = rng.random(10) - 0.5
>>> y = rng.random(10) - 0.5
>>> z = np.hypot(x, y)
>>> X = np.linspace(min(x), max(x))
>>> Y = np.linspace(min(y), max(y))
>>> X, Y = np.meshgrid(X, Y)  # 2D grid for interpolation
>>> interp = NearestNDInterpolator(list(zip(x, y)), z)
>>> Z = interp(X, Y)
>>> plt.pcolormesh(X, Y, Z, shading='auto')
>>> plt.plot(x, y, "ok", label="input point")
>>> plt.legend()
>>> plt.colorbar()
>>> plt.axis("equal")
>>> plt.show()

Nc           	      ó¸   • [         R                  " XX#SSS9  Uc
  [        5       n[        U R                  40 UD6U l        [        R                  " U5      U l        g )NF)ÚrescaleÚneed_contiguousÚneed_values)	r   Ú__init__Údictr   ÚpointsÚtreeÚnpÚasarrayÚvalues)ÚselfÚxÚyr   Útree_optionss        ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/scipy/interpolate/_ndgriddata.pyr   ÚNearestNDInterpolator.__init__Y   sM   € Ü×#Ò# D¨QØ49Ø05ò	7ð ÑÜ›6ˆLÜ˜DŸK™KÑ8¨<Ñ8ˆŒ	Ü—j’j “mˆ�ó    c                 óâ  • [        XR                  R                  S   S9nU R                  U5      nU R	                  U5      nUR                  SUR                  S   5      nUR                  nUR                  nU R                  R                  " U40 UD6u  px[        R                  " U5      n	U R                  R                  S:”  a   USS U R                  R                  SS -   n
OUSS n
[        R                  " U R                  R                  [        R                  5      (       a9  [        R                  " U
[        R                   U R                  R                  S9nO%[        R                  " U
[        R                   5      nU R                  X‰   S4   X¹'   U R                  R                  S:”  a   USS U R                  R                  SS -   nOUSS nUR                  U5      nU$ )a%  
Evaluate interpolator at given points.

Parameters
----------
x1, x2, ... xn : array-like of float
    Points where to interpolate data at.
    x1, x2, ... xn can be array-like of float with broadcastable shape.
    or x1 can be array-like of float with shape ``(..., ndim)``
**query_options
    This allows ``eps``, ``p``, ``distance_upper_bound``, and ``workers``
    being passed to the cKDTree's query function to be explicitly set.
    See `scipy.spatial.cKDTree.query` for an overview of the different options.

    .. versionadded:: 1.12.0

r   )ÚndiméÿÿÿÿN)Údtype.)r   r   ÚshapeÚ_check_call_shapeÚ_scale_xÚreshaper   Úqueryr   Úisfiniter   r    Ú
issubdtyper"   ÚcomplexfloatingÚfullÚnan)r   ÚargsÚquery_optionsÚxiÚxi_flatÚoriginal_shapeÚflattened_shapeÚdistÚiÚ
valid_maskÚinterp_shapeÚinterp_valuesÚ	new_shapes                r   Ú__call__ÚNearestNDInterpolator.__call__b   s•  € ô* & d·±×1BÑ1BÀ1Ñ1EÑFˆØ×#Ñ# BÓ'ˆØ�]‰]˜2Óˆð —*‘*˜R §¡¨"¡Ó.ˆØŸ™ˆØ!Ÿ-™-ˆð —)‘)—/’/ 'Ñ;¨]Ñ;‰ˆÜ—[’[ Ó&ˆ
ð �;‰;×Ñ˜aÓØ*¨3¨BÐ/°$·+±+×2CÑ2CÀAÀBÐ2GÑG‰Là*¨3¨BÐ/ˆLä�=Š=˜Ÿ™×*Ñ*¬B×,>Ñ,>×?Ñ?ÜŸGšG L´"·&±&ÀÇÁ×@QÑ@QÑR‰MäŸGšG L´"·&±&Ó9ˆMà$(§K¡K°±¸sÐ0BÑ$CˆÑ!à�;‰;×Ñ˜aÓØ& s¨Ð+¨d¯k©k×.?Ñ.?ÀÀÐ.CÑC‰Ià& s¨Ð+ˆIØ%×-Ñ-¨iÓ8ˆàÐr   )r   r   )FN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r9   Ú__static_attributes__© r   r   r
   r
      s   † ñBôH$õAr   r
   ÚlinearFc           	      óP  • [        U 5      n U R                  S:  a  U R                  nOU R                  S   nUS:X  a‡  US;   a�  SSKJn  U R                  5       n [        U[        5      (       a  [        U5      S:w  a  [        S5      eUu  n[        R                  " U 5      nX   n X   nUS:X  a  SnU" XUS	S
US9n	U	" U5      $ US:X  a  [        XUS9n	U	" U5      $ US:X  a  [        XUUS9n	U	" U5      $ US:X  a  US:X  a  [        XUUS9n	U	" U5      $ [        SU< SU S35      e)a
  
Convenience function for interpolating unstructured data in multiple dimensions.

Parameters
----------
points : 2-D ndarray of floats with shape (n, D), or length D tuple of 1-D ndarrays with shape (n,).
    Data point coordinates.
values : ndarray of float or complex, shape (n,)
    Data values.
xi : 2-D ndarray of floats with shape (m, D), or length D tuple of ndarrays broadcastable to the same shape.
    Points at which to interpolate data.
method : {'linear', 'nearest', 'cubic'}, optional
    Method of interpolation. One of

    ``nearest``
      return the value at the data point closest to
      the point of interpolation. See `NearestNDInterpolator` for
      more details.

    ``linear``
      tessellate the input point set to N-D
      simplices, and interpolate linearly on each simplex. See
      `LinearNDInterpolator` for more details.

    ``cubic`` (1-D)
      return the value determined from a cubic
      spline.

    ``cubic`` (2-D)
      return the value determined from a
      piecewise cubic, continuously differentiable (C1), and
      approximately curvature-minimizing polynomial surface. See
      `CloughTocher2DInterpolator` for more details.
fill_value : float, optional
    Value used to fill in for requested points outside of the
    convex hull of the input points. If not provided, then the
    default is ``nan``. This option has no effect for the
    'nearest' method.
rescale : bool, optional
    Rescale points to unit cube before performing interpolation.
    This is useful if some of the input dimensions have
    incommensurable units and differ by many orders of magnitude.

    .. versionadded:: 0.14.0

Returns
-------
ndarray
    Array of interpolated values.

See Also
--------
LinearNDInterpolator :
    Piecewise linear interpolator in N dimensions.
NearestNDInterpolator :
    Nearest-neighbor interpolator in N dimensions.
CloughTocher2DInterpolator :
    Piecewise cubic, C1 smooth, curvature-minimizing interpolator in 2D.
interpn : Interpolation on a regular grid or rectilinear grid.
RegularGridInterpolator : Interpolator on a regular or rectilinear grid
                          in arbitrary dimensions (`interpn` wraps this
                          class).

Notes
-----

.. versionadded:: 0.9

.. note:: For data on a regular grid use `interpn` instead.

Examples
--------

Suppose we want to interpolate the 2-D function

>>> import numpy as np
>>> def func(x, y):
...     return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2

on a grid in [0, 1]x[0, 1]

>>> grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]

but we only know its values at 1000 data points:

>>> rng = np.random.default_rng()
>>> points = rng.random((1000, 2))
>>> values = func(points[:,0], points[:,1])

This can be done with `griddata` -- below we try out all of the
interpolation methods:

>>> from scipy.interpolate import griddata
>>> grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
>>> grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')
>>> grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')

One can see that the exact result is reproduced by all of the
methods to some degree, but for this smooth function the piecewise
cubic interpolant gives the best results:

>>> import matplotlib.pyplot as plt
>>> plt.subplot(221)
>>> plt.imshow(func(grid_x, grid_y).T, extent=(0,1,0,1), origin='lower')
>>> plt.plot(points[:,0], points[:,1], 'k.', ms=1)
>>> plt.title('Original')
>>> plt.subplot(222)
>>> plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower')
>>> plt.title('Nearest')
>>> plt.subplot(223)
>>> plt.imshow(grid_z1.T, extent=(0,1,0,1), origin='lower')
>>> plt.title('Linear')
>>> plt.subplot(224)
>>> plt.imshow(grid_z2.T, extent=(0,1,0,1), origin='lower')
>>> plt.title('Cubic')
>>> plt.gcf().set_size_inches(6, 6)
>>> plt.show()

é   r!   r   )ÚnearestrB   Úcubic)Úinterp1dz"invalid number of dimensions in xirE   Úextrapolater   F)ÚkindÚaxisÚbounds_errorÚ
fill_value)r   rB   )rL   r   rF   zUnknown interpolation method z for z dimensional data)r   r    r#   Ú_interpolaterG   ÚravelÚ
isinstanceÚtupleÚlenÚ
ValueErrorr   Úargsortr
   r   r   )
r   r   r/   ÚmethodrL   r   r    rG   ÚidxÚips
             r   r	   r	   «   sG  € ôt & fÓ-€Fà‡{�{�QƒØ�{‰{‰à�|‰|˜BÑˆàˆqƒy�VÐ=Ó=Ý*Ø—‘“ˆÜ�bœ%× Ñ Ü�2‹w˜!‹|Ü Ð!EÓFÐFØ‰CˆBä�jŠj˜Ó ˆØ‘ˆØ‘ˆØ�YÓØ&ˆJÙ�f¨6¸ÈØ!+ñ-ˆá�"‹vˆØ	�9Ó	Ü" 6¸7ÑCˆÙ�"‹vˆØ	�8Ó	Ü! &¸ZØ*1ñ3ˆá�"‹vˆØ	�7Ó	˜t q›yÜ'¨À:Ø07ñ9ˆá�"‹vˆäØ+¨F©:°U¸4¸&Ð@QÐRó
ð 	
r   )r?   Únumpyr   Ú	_interpndr   r   r   r   Úscipy.spatialr   Ú__all__r
   r,   r	   rA   r   r   Ú<module>r[      sG   ðñó ÷;ó ;å !ò)€ôOÐ.ô Oðn )1¸R¿V¹VØõ_
r   