§
    ¢éUgÆ1  ã                   óº   — d dl Z d dlZd dlZd dlZd dlmZ ddlmZ d dl	m
c mZ d dlmZ ddlmZ dgZd„ Z G d	„ d¦  «        Zej        fd
„Zdej        dœd„ZdS )é    N)Úprodé   )Ú_bspl)Ú	csr_array)Ú_not_a_knotÚ	NdBSplinec                 óp   — t          j        | t           j        ¦  «        rt           j        S t           j        S )z>Return np.complex128 for complex dtypes, np.float64 otherwise.)ÚnpÚ
issubdtypeÚcomplexfloatingÚ
complex128Úfloat64©Údtypes    ú[/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/interpolate/_ndbspline.pyÚ
_get_dtyper      s)   € å	„}�U�BÔ.Ñ/Ô/ð ÝŒ}ÐåŒzÐó    c                   óD   — e Zd ZdZddœd„Zdddœd„Zed	d„¦   «         ZdS )
r   a©  Tensor product spline object.

    The value at point ``xp = (x1, x2, ..., xN)`` is evaluated as a linear
    combination of products of one-dimensional b-splines in each of the ``N``
    dimensions::

       c[i1, i2, ..., iN] * B(x1; i1, t1) * B(x2; i2, t2) * ... * B(xN; iN, tN)


    Here ``B(x; i, t)`` is the ``i``-th b-spline defined by the knot vector
    ``t`` evaluated at ``x``.

    Parameters
    ----------
    t : tuple of 1D ndarrays
        knot vectors in directions 1, 2, ... N,
        ``len(t[i]) == n[i] + k + 1``
    c : ndarray, shape (n1, n2, ..., nN, ...)
        b-spline coefficients
    k : int or length-d tuple of integers
        spline degrees.
        A single integer is interpreted as having this degree for
        all dimensions.
    extrapolate : bool, optional
        Whether to extrapolate out-of-bounds inputs, or return `nan`.
        Default is to extrapolate.

    Attributes
    ----------
    t : tuple of ndarrays
        Knots vectors.
    c : ndarray
        Coefficients of the tensor-produce spline.
    k : tuple of integers
        Degrees for each dimension.
    extrapolate : bool, optional
        Whether to extrapolate or return nans for out-of-bounds inputs.
        Defaults to true.

    Methods
    -------
    __call__
    design_matrix

    See Also
    --------
    BSpline : a one-dimensional B-spline object
    NdPPoly : an N-dimensional piecewise tensor product polynomial

    N)Úextrapolatec                ó  — t          |¦  «        }	 t          |¦  «         n# t          $ r	 |f|z  }Y nw xY wt          |¦  «        |k    r0t          dt          |¦  «        ›dt          |¦  «        ›d�¦  «        ‚t          d„ |D ¦   «         ¦  «        | _        t          d„ |D ¦   «         ¦  «        | _        t          j        |¦  «        | _        |€d}t          |¦  «        | _
        t          j        |¦  «        | _        t          |¦  «        D �]½}| j        |         }| j        |         }|j        d         |z
  dz
  }	|dk     rt          d	|› d
�¦  «        ‚|j        dk    rt          d|› d�¦  «        ‚|	|dz   k     rt          dd|z  dz   › d|› d|› d�¦  «        ‚t          j        |¦  «        dk                          ¦   «         rt          d|› d�¦  «        ‚t          t          j        |||	dz   …         ¦  «        ¦  «        dk     rt          d|› d�¦  «        ‚t          j        |¦  «                             ¦   «         st          d|› d�¦  «        ‚| j        j        |k     rt          d|› d�¦  «        ‚| j        j        |         |	k    r<t          d|› d| j        j        |         › dt          |¦  «        › d|	› d|› d�¦  «        ‚�Œ¿t'          | j        j        ¦  «        }
t          j        | j        |
¬¦  «        | _        d S )Nz	len(t) = z != len(k) = ú.c              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S ©N)ÚoperatorÚindex)Ú.0Úkis     r   ú	<genexpr>z%NdBSpline.__init__.<locals>.<genexpr>Y   s,   è è € Ð6Ð6¨b•x”~ bÑ)Ô)Ð6Ð6Ð6Ð6Ð6Ð6r   c              3   óL   K  — | ]}t          j        |t          ¬ ¦  «        V — Œ dS ©r   N)r
   ÚascontiguousarrayÚfloat©r   Útis     r   r   z%NdBSpline.__init__.<locals>.<genexpr>Z   s2   è è € ÐIÐIÀ•rÔ+¨BµeÐ<Ñ<Ô<ÐIÐIÐIÐIÐIÐIr   Tr   r   zSpline degree in dimension z cannot be negative.zKnot vector in dimension z must be one-dimensional.zNeed at least é   z knots for degree z in dimension zKnots in dimension z# must be in a non-decreasing order.z.Need at least two internal knots in dimension z should not have nans or infs.zCoefficients must be at least z-dimensional.z,Knots, coefficients and degree in dimension z are inconsistent: got z coefficients for z knots, need at least z for k=r   )ÚlenÚ	TypeErrorÚ
ValueErrorÚtupleÚkÚtr
   ÚasarrayÚcÚboolr   ÚrangeÚshapeÚndimÚdiffÚanyÚuniqueÚisfiniteÚallr   r   r!   )Úselfr+   r-   r*   r   r1   ÚdÚtdÚkdÚnÚdts              r   Ú__init__zNdBSpline.__init__M   sÉ  € Ý�1‰vŒvˆð	Ý�‰FŒFˆFˆFøÝð 	ð 	ð 	à��T‘	ˆAˆAˆAð	øøøõ ˆq‰6Œ6�TŠ>ˆ>ÝÐ;¥ A¡¤Ð;Ð;­s°1©v¬vÐ;Ð;Ð;Ñ<Ô<Ð<åÐ6Ð6°AÐ6Ñ6Ô6Ñ6Ô6ˆŒÝÐIÐIÀqÐIÑIÔIÑIÔIˆŒÝ”˜A‘”ˆŒàÐØˆKÝ Ñ,Ô,ˆÔå”˜A‘”ˆŒå�t‘”ð 	-ñ 	-ˆAØ”˜”ˆBØ”˜”ˆBØ”˜”˜bÑ  1Ñ$ˆAØ�AŠvˆvÝ ð "/¸qð "/ð "/ð "/ñ 0ô 0ð 0àŒw˜!Š|ˆ|Ý ð "6¸Qð "6ð "6ð "6ñ 7ô 7ð 7à�2˜‘6ŠzˆzÝ ð "<°!°B±$¸±(ð "<ð "<Ø%'ð"<ð "<Ø78ð"<ð "<ð "<ñ =ô =ð =å”˜‘”˜a’×$Ò$Ñ&Ô&ð <Ý ð ";°qð ";ð ";ð ";ñ <ô <ð <å•2”9˜R  1 q¡5 œ\Ñ*Ô*Ñ+Ô+¨aÒ/Ð/Ý ð "4Ø/0ð"4ð "4ð "4ñ 5ô 5ð 5å”;˜r‘?”?×&Ò&Ñ(Ô(ð 4Ý ð "3°qð "3ð "3ð "3ñ 4ô 4ð 4àŒvŒ{˜TÒ!Ð!Ý ð "6Ø%&ð"6ð "6ð "6ñ 7ô 7ð 7àŒvŒ|˜AŒ !Ò#Ð#Ý ð ",Ø%&ð",ð ",à)-¬¬°a¬ð",ð ",õ &)¨¡W¤Wð",ð ",ð EFð",ð ",ð ()ð	",ð ",ð ",ñ -ô -ð -ñ $õ ˜œœÑ%Ô%ˆÝÔ% d¤f°BÐ7Ñ7Ô7ˆŒˆˆs   ‘! ¡4³4)Únur   c                ó^  ‡— t          | j        ¦  «        }|€| j        }t          |¦  «        }|€"t	          j        |ft          j        ¬¦  «        }n‰t	          j        |t          j        ¬¦  «        }|j        dk    s|j	        d         |k    r(t          d|›dt          | j        ¦  «        › d�¦  «        ‚t          |dk     ¦  «        rt          d|›�¦  «        ‚t	          j        |t          ¬¦  «        }|j	        }|                     d	|d	         ¦  «        }t	          j        |¦  «        }|d	         |k    rt          d
|› d|› �¦  «        ‚t	          j        | j        t	          j        d¦  «        ¬¦  «        }d„ | j        D ¦   «         }t	          j        |t%          |¦  «        ft          ¬¦  «        }|                     t          j        ¦  «         t+          |¦  «        D ].}	| j        |	         ||	dt          | j        |	         ¦  «        …f<   Œ/t	          j        |t	          j        d¦  «        ¬¦  «        }t-          d„ | j        D ¦   «         ¦  «        }
t	          j        t	          j        t3          |
¦  «        ¦  «        |
¦  «        }t	          j        |t          j        ¬¦  «        j        }| j                             | j        j	        d|…         dz   ¦  «        Š‰                     ¦   «         }t	          j        ˆfd„‰j        D ¦   «         t          j        ¬¦  «        }‰j	        d	         }t	          j        |j	        dd	…         |fz   ‰j        ¬¦  «        }t?          j         |||||||||||¦  «         |                     |dd	…         | j        j	        |d…         z   ¦  «        S )a@  Evaluate the tensor product b-spline at ``xi``.

        Parameters
        ----------
        xi : array_like, shape(..., ndim)
            The coordinates to evaluate the interpolator at.
            This can be a list or tuple of ndim-dimensional points
            or an array with the shape (num_points, ndim).
        nu : array_like, optional, shape (ndim,)
            Orders of derivatives to evaluate. Each must be non-negative.
            Defaults to the zeroth derivivative.
        extrapolate : bool, optional
            Whether to exrapolate based on first and last intervals in each
            dimension, or return `nan`. Default is to ``self.extrapolate``.

        Returns
        -------
        values : ndarray, shape ``xi.shape[:-1] + self.c.shape[ndim:]``
            Interpolated values at ``xi``
        Nr   r   r   z)invalid number of derivative orders nu = z for ndim = r   z'derivatives must be positive, got nu = éÿÿÿÿzShapes: xi.shape=z
 and ndim=Úlongc                 ó,   — g | ]}t          |¦  «        ‘ŒS © ©r&   r#   s     r   ú
<listcomp>z&NdBSpline.__call__.<locals>.<listcomp>¹   s   € Ð*Ð*Ð*˜R•�R‘”Ð*Ð*Ð*r   c              3   ó    K  — | ]	}|d z   V — Œ
dS )r   NrC   )r   r:   s     r   r   z%NdBSpline.__call__.<locals>.<genexpr>Á   s&   è è € Ð.Ð. �b˜1‘fÐ.Ð.Ð.Ð.Ð.Ð.r   )r@   c                 ó.   •— g | ]}|‰j         j        z  ‘ŒS rC   )r   Úitemsize)r   ÚsÚc1s     €r   rE   z&NdBSpline.__call__.<locals>.<listcomp>Ê   s3   ø€ ð "7ð "7ð "7Ø&'ð #$ r¤xÔ'8Ñ"8ð "7ð "7ð "7r   )!r&   r+   r   r.   r
   ÚzerosÚintcr,   r1   r0   r(   r3   r"   Úreshaper!   r*   r   ÚemptyÚmaxÚfillÚnanr/   r)   Úunravel_indexÚaranger   ÚintpÚTr-   ÚravelÚstridesr   Úevaluate_ndbspline)r7   Úxir>   r   r1   Úxi_shapeÚ_kÚlen_tÚ_tr8   r0   ÚindicesÚ_indices_k1dÚc1rÚ_strides_c1Únum_c_trÚoutrJ   s                    @r   Ú__call__zNdBSpline.__call__†   sŠ  ø€ õ* �4”6‰{Œ{ˆàÐØÔ*ˆKÝ˜;Ñ'Ô'ˆàˆ:Ý”˜4˜'­¬Ð1Ñ1Ô1ˆBˆBå”˜B¥b¤gÐ.Ñ.Ô.ˆBØŒw˜!Š|ˆ|˜rœx¨œ{¨dÒ2Ð2Ý ð-¸2ð -ð -Ý! $¤&™kœkð-ð -ð -ñ.ô .ð .õ �2˜’6‰{Œ{ð OÝ Ð!MÀbÐ!MÐ!MÑNÔNÐNõ ŒZ˜¥%Ð(Ñ(Ô(ˆØ”8ˆØ�ZŠZ˜˜H RœLÑ)Ô)ˆÝÔ! "Ñ%Ô%ˆà�BŒ<˜4ÒÐÝÐK°ÐKÐKÀTÐKÐKÑLÔLÐLõ ŒZ˜œ¥b¤h¨vÑ&6Ô&6Ð7Ñ7Ô7ˆð +Ð* 4¤6Ð*Ñ*Ô*ˆÝŒX�t�S ™ZœZÐ(µÐ6Ñ6Ô6ˆØ
�Š•”‰ŒˆÝ�t‘”ð 	/ð 	/ˆAØ%)¤V¨A¤YˆBˆq�/•3�t”v˜a”y‘>”>�/Ð!Ñ"Ð"Ý”
˜5­¬°Ñ(8Ô(8Ð9Ñ9Ô9ˆõ Ð.Ð. t¤vÐ.Ñ.Ô.Ñ.Ô.ˆÝÔ"¥2¤9­T°%©[¬[Ñ#9Ô#9¸5ÑAÔAˆÝ”z 'µ´Ð9Ñ9Ô9Ô;ˆð ŒV�^Š^˜DœFœL¨¨$¨Ô/°%Ñ7Ñ8Ô8ˆØ�hŠh‰jŒjˆõ ”jð "7ð "7ð "7ð "7Ø+-¬:ð"7ñ "7ô "7Ý>@¼gðGñ Gô Gˆð ”8˜B”<ˆÝŒh�r”x   ”}¨ {Ñ2¸"¼(ÐCÑCÔCˆåÔ  Ø!#Ø!&Ø!#Ø!#Ø!,Ø!$Ø!)Ø!,Ø!-Ø!$ñ
	'ô 
	'ð 
	'ð �{Š{˜8 C R Cœ=¨4¬6¬<¸¸¸Ô+>Ñ>Ñ?Ô?Ð?r   Tc                 ó¤  — t          j        |t          ¬¦  «        }|j        d         }t	          |¦  «        |k    r#t          dt	          |¦  «        › d|›d�¦  «        ‚	 t	          |¦  «         n# t          $ r	 |f|z  }Y nw xY wt          j        |t           j        ¬¦  «        }t          j	        |||¦  «        \  }}}	t          |||	f¦  «        S )a  Construct the design matrix as a CSR format sparse array.

        Parameters
        ----------
        xvals :  ndarray, shape(npts, ndim)
            Data points. ``xvals[j, :]`` gives the ``j``-th data point as an
            ``ndim``-dimensional array.
        t : tuple of 1D ndarrays, length-ndim
            Knot vectors in directions 1, 2, ... ndim,
        k : int
            B-spline degree.
        extrapolate : bool, optional
            Whether to extrapolate out-of-bounds values of raise a `ValueError`

        Returns
        -------
        design_matrix : a CSR array
            Each row of the design matrix corresponds to a value in `xvals` and
            contains values of b-spline basis elements which are non-zero
            at this value.

        r   r@   z*Data and knots are inconsistent: len(t) = z for  ndim = r   )r
   r,   r"   r0   r&   r(   r'   Úint32r   Ú
_colloc_ndr   )
ÚclsÚxvalsr+   r*   r   r1   ÚkkÚdatar^   Úindptrs
             r   Údesign_matrixzNdBSpline.design_matrixÞ   sñ   € õ0 ”
˜5­Ð.Ñ.Ô.ˆØŒ{˜2ŒˆÝˆq‰6Œ6�TŠ>ˆ>Ýð½SÀ¹V¼Vð ð Øðð ð ñô ð ð	Ý�‰FŒFˆFˆFøÝð 	ð 	ð 	à��T‘	ˆAˆAˆAð	øøøõ ŒZ˜¥¤Ð*Ñ*Ô*ˆÝ %Ô 0°¸¸2Ñ >Ô >Ñˆˆg�vÝ˜$ ¨Ð0Ñ1Ô1Ð1s   Á A0 Á0BÂB)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r=   rd   Úclassmethodrm   rC   r   r   r   r      s‰   € € € € € ð1ð 1ðd 04ð 78ð 78ð 78ð 78ð 78ðr "&°4ð V@ð V@ð V@ð V@ð V@ðp ð&2ð &2ð &2ñ „[ð&2ð &2ð &2r   c           
      ó  — t          j        |j        t           j        ¦  «        r0t	          | |j        |fi |¤Ž}t	          | |j        |fi |¤Ž}|d|z  z   S |j        dk    r�|j        d         dk    rpt          j	        |¦  «        }t          |j        d         ¦  «        D ]?} || |d d …|f         fi |¤Ž\  |d d …|f<   }|dk    rt          d|›d|›d|› d�¦  «        ‚Œ@|S  || |fi |¤Ž\  }}|dk    rt          d|›d	|›d�¦  «        ‚|S )
Ny              ð?r%   r   r   z	solver = z returns info =z for column r   z returns info = )r
   r   r   r   Ú_iter_solveÚrealÚimagr1   r0   Ú
empty_liker/   r(   )	ÚaÚbÚsolverÚsolver_argsru   rv   ÚresÚjÚinfos	            r   rt   rt     sg  € õ
 
„}�Q”W�bÔ0Ñ1Ô1ð Ý˜1˜aœf fÐ<Ð<°Ð<Ð<ˆÝ˜1˜aœf fÐ<Ð<°Ð<Ð<ˆØ�b˜‘g‰~Ðà„v�‚{€{�q”w˜q”z A’~�~ÝŒm˜AÑÔˆÝ�q”w˜q”zÑ"Ô"ð 	Rð 	RˆAØ$˜f Q¨¨!¨!¨!¨Q¨$¬Ð?Ð?°;Ð?Ð?‰OˆC����1�‰I�tØ�qŠyˆyÝ Ð!P FÐ!PÐ!P¸Ð!PÐ!PÈAÐ!PÐ!PÐ!PÑQÔQÐQð àˆ
à�F˜1˜aÐ/Ð/ ;Ð/Ð/‰	ˆˆTØ�1Š9ˆ9ÝÐ> Ð>Ð>°DÐ>Ð>Ð>Ñ?Ô?Ð?Øˆ
r   é   ©rz   c                óÜ  ‡ ‡— t          ‰ ¦  «        }t          d„ ‰ D ¦   «         ¦  «        }	 t          ‰¦  «         n# t          $ r	 ‰f|z  ŠY nw xY wt          ‰ ¦  «        D ]]\  }}t          t	          j        |¦  «        ¦  «        }	|	‰|         k    r+t          d|	› d|› d‰|         › d‰|         dz   › d�	¦  «        ‚Œ^t          ˆˆ fd„t          |¦  «        D ¦   «         ¦  «        }
t	          j        d	„ t          j
        ‰ Ž D ¦   «         t          ¬
¦  «        }t                               ||
‰¦  «        }|j        }t          |d|…         ¦  «        t          ||d…         ¦  «        f}|                     |¦  «        }|t"          j        k    r$t'          j        t*          |¬¦  «        }d|vrd|d<    |||fi |¤Ž}|                     |||d…         z   ¦  «        }t          |
|‰¦  «        S )a™  Construct an interpolating NdBspline.

    Parameters
    ----------
    points : tuple of ndarrays of float, with shapes (m1,), ... (mN,)
        The points defining the regular grid in N dimensions. The points in
        each dimension (i.e. every element of the `points` tuple) must be
        strictly ascending or descending.      
    values : ndarray of float, shape (m1, ..., mN, ...)
        The data on the regular grid in n dimensions.
    k : int, optional
        The spline degree. Must be odd. Default is cubic, k=3
    solver : a `scipy.sparse.linalg` solver (iterative or direct), optional.
        An iterative solver from `scipy.sparse.linalg` or a direct one,
        `sparse.sparse.linalg.spsolve`.
        Used to solve the sparse linear system
        ``design_matrix @ coefficients = rhs`` for the coefficients.
        Default is `scipy.sparse.linalg.gcrotmk`
    solver_args : dict, optional
        Additional arguments for the solver. The call signature is
        ``solver(csr_array, rhs_vector, **solver_args)``

    Returns
    -------
    spl : NdBSpline object

    Notes
    -----
    Boundary conditions are not-a-knot in all dimensions.
    c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rD   )r   Úxs     r   r   zmake_ndbspl.<locals>.<genexpr>@  s(   è è € Ð,Ð, •S˜‘V”VÐ,Ð,Ð,Ð,Ð,Ð,r   z
There are z points in dimension z, but order z requires at least  r   z points per dimension.c              3   ó‚   •K  — | ]9}t          t          j        ‰|         t          ¬ ¦  «        ‰|         ¦  «        V — Œ:dS r    )r   r
   r,   r"   )r   r8   r*   Úpointss     €€r   r   zmake_ndbspl.<locals>.<genexpr>O  sX   øè è € ð $ð $Øõ �"œ* V¨A¤YµeÐ<Ñ<Ô<¸aÀ¼dÑCÔCð $ð $ð $ð $ð $ð $r   c                 ó   — g | ]}|‘ŒS rC   rC   )r   Úxvs     r   rE   zmake_ndbspl.<locals>.<listcomp>Q  s   € Ð@Ð@Ð@˜r˜Ð@Ð@Ð@r   r   Nr€   Úatolg�íµ ÷Æ°>)r&   r)   r'   Ú	enumerater
   Ú
atleast_1dr(   r/   r,   Ú	itertoolsÚproductr"   r   rm   r0   r   rM   ÚsslÚspsolveÚ	functoolsÚpartialrt   )r…   Úvaluesr*   rz   r{   r1   rZ   r8   ÚpointÚnumptsr+   ri   ÚmatrÚv_shapeÚ
vals_shapeÚvalsÚcoefs   ` `              r   Úmake_ndbsplr™      sb  øø€ õ> ˆv‰;Œ;€DÝÐ,Ð, VÐ,Ñ,Ô,Ñ,Ô,€HðÝˆA‰ŒˆˆøÝð ð ð àˆD�‰Iˆˆˆðøøøõ ˜fÑ%Ô%ð Að A‰ˆˆ5Ý•R”] 5Ñ)Ô)Ñ*Ô*ˆØ�Q�q”TŠ>ˆ>Ýð @¨&ð @ð @Àqð @ð @Ø+,¨Q¬4ð@ð @à!" 1¤ a¡ð@ð @ð @ñ Aô Að Að õ
 	ð $ð $ð $ð $ð $Ý˜T‘{”{ð$ñ $ô $ñ 	$ô 	$€AåŒJÐ@Ð@¥YÔ%6¸Ð%?Ð@Ñ@Ô@ÍÐNÑNÔN€Eõ ×"Ò" 5¨!¨QÑ/Ô/€Dð
 Œl€GÝ�w˜u ˜u”~Ñ&Ô&­¨W°T°U°U¬^Ñ(<Ô(<Ð=€JØ�>Š>˜*Ñ%Ô%€Dà•”ÒÐÝÔ"¥;°vÐ>Ñ>Ô>ˆØ˜Ð$Ð$à"&ˆK˜Ñàˆ6�$˜Ð,Ð, Ð,Ð,€DØ�<Š<˜ 7¨4¨5¨5¤>Ñ1Ñ2Ô2€DÝ�Q˜˜aÑ Ô Ð s   ¬< ¼AÁA)r   )r‹   r�   r   Únumpyr
   Úmathr   Ú r   Úscipy.sparse.linalgÚsparseÚlinalgr�   Úscipy.sparser   Ú	_bsplinesr   Ú__all__r   r   Úgcrotmkrt   r™   rC   r   r   ú<module>r¤      s+  ðØ Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø "Ð "Ð "Ð "Ð "Ð "à "Ð "Ð "Ð "Ð "Ð "àˆ-€ðð ð ðk2ð k2ð k2ð k2ð k2ñ k2ô k2ð k2ð\ !œ[ð ð ð ð ð0E!¨s¬{ð E!ð E!ð E!ð E!ð E!ð E!ð E!r   