§
    fŠtj§E  ã                   ó
  — 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
Z
 d dlmc mZ d dlmZ d dlmZmZ ddlmZmZ d	gZd
„ Z edddg¬¦  «         G d„ d	¦  «        ¦   «         Zd„ Zej        fd„Zdej        dœd„ZdS )é    N)Úprod)ÚGenericAliasé   )Ú_dierckx)Ú	csr_array)Úarray_namespaceÚxp_capabilities)Ú_not_a_knotÚBSplineÚ	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    úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/interpolate/_ndbspline.pyÚ
_get_dtyper      s)   € å	„}�U�BÔ.Ñ/Ô/ð ÝŒ}ÐåŒzÐó    TF)z
dask.arrayz7https://github.com/data-apis/array-api-extra/issues/488)Úcpu_onlyÚjax_jitÚskip_backendsc                   óª   — e Zd ZdZ ee¦  «        Zddœd„Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zdddœd	„Zedd„¦   «         Zdd„Z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-product 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__
    derivative
    design_matrix

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

    N©Úextrapolatec                óê  — t          ||¦  «        \  | _        | _        \  | _        | _        t          |g|¢R Ž j        | _        |€d}t          |¦  «        | _	        t          j        |¦  «        | _        | j        j        d         }| j        j        |k     rt          d|› d�¦  «        ‚t          |¦  «        D ]�}| j        |         }| j        |         }|j        d         |z
  dz
  }	| j        j        |         |	k    r<t          d|› d| j        j        |         › dt%          |¦  «        › d	|	› d
|› d�¦  «        ‚Œ‚t'          | j        j        ¦  «        }
t          j        | j        |
¬¦  «        | _        d S )NTr   zCoefficients must be at least z-dimensional.r   z,Knots, coefficients and degree in dimension z are inconsistent: got z coefficients for z knots, need at least z for k=ú.r   )Ú_preprocess_inputsÚ_kÚ_indices_k1dÚ_tÚ_len_tr   ÚasarrayÚ_asarrayÚboolr   r   Ú_cÚshapeÚndimÚ
ValueErrorÚrangeÚtÚkÚlenr   r   Úascontiguousarray)Úselfr-   Úcr.   r   r*   ÚdÚtdÚkdÚnÚdts              r   Ú__init__zNdBSpline.__init__[   s   € Ý=OÐPQÐSTÑ=UÔ=UÑ:ˆŒ�Ô"Ñ$: T¤W¨d¬kå'¨Ð.¨AÐ.Ð.Ð.Ô6ˆŒàÐØˆKÝ Ñ,Ô,ˆÔå”*˜Q‘-”-ˆŒàŒwŒ}˜QÔˆØŒ7Œ<˜$ÒÐÝÐQ¸dÐQÐQÐQÑRÔRÐRå�t‘”ð 
	-ð 
	-ˆAØ”˜”ˆBØ”˜”ˆBØ”˜”˜bÑ  1Ñ$ˆAàŒwŒ}˜QÔ 1Ò$Ð$Ý ð ",Ø%&ð",ð ",à)-¬¬°qÔ)9ð",ð ",õ &)¨¡W¤Wð",ð ",ð EFð",ð ",ð ()ð	",ð ",ð ",ñ -ô -ð -ð %õ ˜œœÑ&Ô&ˆÝÔ& t¤w°bÐ9Ñ9Ô9ˆŒˆˆr   c                 ó*   — t          | j        ¦  «        S ©N)Útupler!   ©r1   s    r   r.   zNdBSpline.ky   s   € å�T”W‰~Œ~Ðr   c                 ót   ‡ — t          ˆ fd„t          ‰ j        j        d         ¦  «        D ¦   «         ¦  «        S )Nc              3   óv   •K  — | ]3}‰                      ‰j        |d ‰j        |         …f         ¦  «        V — Œ4d S r:   )r&   r#   r$   ©Ú.0r3   r1   s     €r   ú	<genexpr>zNdBSpline.t.<locals>.<genexpr>€   sV   øè è € ð 
ð 
Ø;<ˆD�MŠM˜$œ' ! _ d¤k°!¤n _Ð"4Ô5Ñ6Ô6ð
ð 
ð 
ð 
ð 
ð 
r   r   )r;   r,   r#   r)   r<   s   `r   r-   zNdBSpline.t}   sO   ø€ õ ð 
ð 
ð 
ð 
Ý@EÀdÄgÄmÐTUÔFVÑ@WÔ@Wð
ñ 
ô 
ñ 
ô 
ð 	
r   c                 ó6   — |                       | j        ¦  «        S r:   )r&   r(   r<   s    r   r2   zNdBSpline.c„   s   € à�}Š}˜TœWÑ%Ô%Ð%r   )Únur   c                ó^  ‡— | j         j        d         }|€| 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|› �¦  «        ‚| j        j        j        dk    }| j        }|r| j        j        |k    r| j        d         }|                     t          ¦  «        }|                     |j        d|…         dz   ¦  «        Š‰                     ¦   «         }t	          j        ˆfd„‰j        D ¦   «         t          j        ¬¦  «        }	‰j        d	         }
t-          j        || j         | j        | j        ||||
|	| j        ¦
  «
        }|                     | j        j        ¦  «        }|                     |dd	…         | j        j        |d…         z   ¦  «        }|                      |¦  «        S )aB  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 : sequence of length ``ndim``, optional
            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``
        r   Nr   r   ú)invalid number of derivative orders nu = ú for ndim = r   z'derivatives must be positive, got nu = éÿÿÿÿzShapes: xi.shape=z
 and ndim=r2   ).N)rG   c                 ó.   •— g | ]}|‰j         j        z  ‘ŒS © )r   Úitemsize)r@   ÚsÚc1s     €r   ú
<listcomp>z&NdBSpline.__call__.<locals>.<listcomp>Å   s3   ø€ ð "7ð "7ð "7Ø&'ð #$ r¤xÔ'8Ñ"8ð "7ð "7ð "7r   )r#   r)   r   r'   r   ÚzerosÚint64r%   r*   r+   r/   r-   ÚanyÚfloatÚreshaper0   r(   r   ÚkindÚviewÚravelÚstridesr   Úevaluate_ndbspliner$   r!   r"   r&   )r1   ÚxirC   r   r*   Úxi_shapeÚwas_complexÚccÚc1rÚ_strides_c1Únum_c_trÚoutrL   s               @r   Ú__call__zNdBSpline.__call__ˆ   s¶  ø€ ð* ŒwŒ}˜QÔˆàÐØÔ*ˆKÝ˜;Ñ'Ô'ˆàˆ:Ý”˜4˜'­¬Ð2Ñ2Ô2ˆBˆBå”˜B¥b¤hÐ/Ñ/Ô/ˆ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ð ”g”mÔ(¨CÒ/ˆØŒWˆØð 	$˜4œ7œ<¨4Ò/Ð/ð ”˜Ô#ˆBØ�WŠW•U‰^Œ^ˆð �ZŠZ˜œ  $ œ¨%Ñ/Ñ0Ô0ˆØ�hŠh‰jŒjˆõ ”jð "7ð "7ð "7ð "7Ø+-¬:ð"7ñ "7ô "7Ý>@¼hðHñ Hô Hˆð ”8˜B”<ˆÝÔ)¨"Ø!%¤Ø!%¤Ø!%¤Ø!#Ø!,Ø!$Ø!)Ø!,Ø!%Ô!2ñ

ô 

ˆð �hŠh�t”w”}Ñ%Ô%ˆØ�kŠk˜( 3 B 3œ-¨$¬'¬-¸¸¸Ô*>Ñ>Ñ?Ô?ˆØ�}Š}˜SÑ!Ô!Ð!r   Tc                 óB  ‡‡— t          j        |t          ¬¦  «        }|j        d         }t	          |¦  «        |k    r#t          dt	          |¦  «        › d|›d�¦  «        ‚t          ‰|¦  «        \  Š}\  }Št          ˆˆfd„t          |¦  «        D ¦   «         ¦  «        }|dd…         d	z   }	t          j	        |	ddd…         t           j
        ¬¦  «        ddd…                              ¦   «         }
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   rG   z*Data and knots are inconsistent: len(t) = z for  ndim = r   c              3   ó@   •K  — | ]}‰|         ‰|         z
  d z
  V — ŒdS ©r   NrI   )r@   r3   r.   Úlen_ts     €€r   rA   z*NdBSpline.design_matrix.<locals>.<genexpr>þ   s4   øè è € ÐAÐA°˜˜aœ 1 Q¤4™¨!Ñ+ÐAÐAÐAÐAÐAÐAr   r   N©r   )r   r%   rQ   r)   r/   r+   r    r;   r,   ÚcumprodrO   Úcopyr   Ú	_coloc_ndr   )ÚclsÚxvalsr-   r.   r   r*   r"   r#   Úc_shapeÚcsÚcstridesÚdataÚindicesÚindptrrd   s      `          @r   Údesign_matrixzNdBSpline.design_matrixØ   sB  øø€ õ0 ”
˜5­Ð.Ñ.Ô.ˆØŒ{˜2ŒˆÝˆq‰6Œ6�TŠ>ˆ>Ýð½SÀ¹V¼Vð ð Øðð ð ñô ð õ (:¸!¸QÑ'?Ô'?Ñ$ˆˆ<™˜"˜eõ
 ÐAÐAÐAÐAÐAµU¸4±[´[ÐAÑAÔAÑAÔAˆð �Q�R�RŒ[˜4ÑˆÝ”:˜b   2 œh­b¬hÐ7Ñ7Ô7¸¸¸"¸Ô=×BÒBÑDÔDˆõ !)Ô 2°5Ø�E˜1˜l¨Hñ!6ô !6Ñˆˆg�võ ˜$ ¨Ð0Ñ1Ô1Ð1r   r   c           	      ó  — t          j        ||d¦  «        }|j        d         }|j        dd …         }|                     |d¦  «        }g }	d }
t	          |j        d         ¦  «        D ]Ê}||k    rgt          j        ||d d …|f         |¦  «        }|                     |¦  «        }|j        d t          |j
        ¦  «        |j        z
  dz
  …         |_        n8t          j        |t          j        t          |¦  «        dz
  ¦  «        d¦  «        }|
€|j
        }
|	                     |j        ¦  «         ŒËt          j        |	d¬¦  «                             t          |	d         ¦  «        f|z   ¦  «        }t          j        |d|¦  «        }||
fS )Nr   r   rG   )Úaxis)r   Úmoveaxisr)   rR   r,   r   Úconstruct_fastÚ
derivativer2   r/   r-   r.   rN   ÚappendÚstack)r1   r2   r-   r.   rs   rC   r6   Útrailing_shapeÚc_flatÚ
new_c_listÚnew_tÚiÚbÚdbÚnew_cs                  r   Ú_bspline_derivative_along_axisz(NdBSpline._bspline_derivative_along_axis  sr  € åŒK˜˜4 Ñ#Ô#ˆØŒG�AŒJˆØœ   œˆØ—’˜1˜bÑ!Ô!ˆàˆ
Øˆå�v”| A”Ñ'Ô'ð 	$ð 	$ˆAØ�BŠwˆwÝÔ*¨1¨f°Q°Q°Q¸°T¬l¸AÑ>Ô>�Ø—\’\ "Ñ%Ô%�à”tÐ1�S ¤™YœY¨¬Ñ-°Ñ1Ð1Ô2�”�åÔ+¨A­r¬x½¸A¹¼À¹
Ñ/CÔ/CÀQÑGÔG�àˆ}Øœ�à×Ò˜bœdÑ#Ô#Ð#Ð#å”˜¨!Ð,Ñ,Ô,×4Ò4Ý�˜A”ÑÔÐ! NÑ2ñ4ô 4ˆå”˜E 1 dÑ+Ô+ˆà�eˆ|Ðr   c                 óX  ‡ — t          j        |t           j        ¬¦  «        }t          ‰ j        ¦  «        }|j        dk    s|j        d         |k    r(t          d|›dt          ‰ j        ¦  «        › d�¦  «        ‚t          |dk     ¦  «        rt          d|›�¦  «        ‚ˆ fd„t          ‰ j
        j        d         ¦  «        D ¦   «         }t          ‰ j        ¦  «        }‰ j                             ¦   «         }t          |¦  «        D ]T\  }}|dk    rŒ‰                      |||         ||         ||¬	¦  «        \  }||<   t#          ||         |z
  d¦  «        ||<   ŒUt%          t'          ˆ fd
„|D ¦   «         ¦  «        ‰                      |¦  «        t'          |¦  «        ‰ j        ¬¦  «        S )a{  
        Construct a new NdBSpline representing the partial derivative.

        Parameters
        ----------
        nu : array_like of shape (ndim,)
            Orders of the partial derivatives to compute along each dimension.

        Returns
        -------
        NdBSpline
            A new NdBSpline representing the partial derivative of the original spline.

        r   r   r   rE   rF   r   z-derivative orders must be positive, got nu = c                 óH   •— g | ]}‰j         |d ‰j        |         …f         ‘ŒS r:   )r#   r$   r?   s     €r   rM   z(NdBSpline.derivative.<locals>.<listcomp>D  s/   ø€ ÐNÐNÐN°�”˜˜O˜Tœ[¨œ^˜OÐ+Ô,ÐNÐNÐNr   )rC   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r:   )r&   )r@   r-   r1   s     €r   rA   z'NdBSpline.derivative.<locals>.<genexpr>Q  s/   øè è € Ð?Ð?°A˜tŸ}š}¨QÑ/Ô/Ð?Ð?Ð?Ð?Ð?Ð?r   r   )r   r%   rO   r/   r-   r*   r)   r+   rP   r,   r#   Úlistr.   r(   rg   Ú	enumerater�   Úmaxr   r;   r&   r   )	r1   rC   Únu_arrr*   Út_newÚk_newÚc_newrs   r6   s	   `        r   rv   zNdBSpline.derivative)  sÈ  ø€ õ ”˜B¥b¤hÐ/Ñ/Ô/ˆÝ�4”6‰{Œ{ˆàŒ;˜!ÒÐ˜vœ|¨Aœ°$Ò6Ð6Ýð)°rð )ð )Ý˜dœf™+œ+ð)ð )ð )ñ*ô *ð *õ ˆv˜Šz‰?Œ?ð 	QÝÐOÈÐOÐOÑPÔPÐPð OÐNÐNÐNµe¸D¼G¼MÈ!Ô<LÑ6MÔ6MÐNÑNÔNˆÝ�T”V‘”ˆØ”—’‘”ˆå  Ñ(Ô(ð 	2ð 	2‰GˆD�!Ø�AŠvˆvØà!%×!DÒ!DØ�u˜T”{ E¨$¤K°¸!ð "Eñ "ô "ÑˆE�5˜‘;õ ˜e Dœk¨A™o¨qÑ1Ô1ˆE�$‰KˆKå�Ð?Ð?Ð?Ð?¸Ð?Ñ?Ô?Ñ?Ô?ØŸš uÑ-Ô-Ý˜u™œØ%)Ô%5ð
ñ 
ô 
ð 	
r   )Tre   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   Ú__class_getitem__r8   Úpropertyr.   r-   r2   r`   rq   r�   rv   rI   r   r   r   r      s  € € € € € ð2ð 2ðj $˜ LÑ1Ô1Ðà/3ð :ð :ð :ð :ð :ð< ðð ñ „Xðð ð
ð 
ñ „Xð
ð ð&ð &ñ „Xð&ð "&°4ð N"ð N"ð N"ð N"ð N"ð` ð02ð 02ð 02ñ „[ð02ðdð ð ð ð<,
ð ,
ð ,
ð ,
ð ,
r   c           
      ó  — t          |t          ¦  «        st          d|› d�¦  «        ‚t          |¦  «        }	 t          | ¦  «         n# t          $ r	 | f|z  } Y nw xY wt          j        d„ | D ¦   «         t
          j        ¬¦  «        } t          | ¦  «        |k    r0t          dt          |¦  «        › dt          | ¦  «        ›d�¦  «        ‚t          |¦  «        }t          |¦  «        D �]P}t          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�¦  «        ‚�ŒRt          d„ | D ¦   «         ¦  «        }t          j        t          j        t%          |¦  «        ¦  «        |¦  «        }t          j        |t
          j        ¬¦  «        j                             ¦   «         }	d„ |D ¦   «         }t          |¦  «        }d„ |D ¦   «         }
t          j        |t-          |
¦  «        ft.          ¬¦  «        }|                     t
          j        ¦  «         t          |¦  «        D ]$}||         ||dt          ||         ¦  «        …f<   Œ%t          j        |
t
          j        ¬¦  «        }
| |	||
ffS )zÁHelpers: validate and preprocess NdBSpline inputs.

       Parameters
       ----------
       k : int or tuple
          Spline orders
       t_tpl : tuple or array-likes
          Knots.
    z-Expect `t` to be a tuple of array-likes. Got z	 instead.c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS rI   )ÚoperatorÚindex)r@   Úkis     r   rM   z&_preprocess_inputs.<locals>.<listcomp>o  s"   € Ð3Ð3Ð3¨2•H”N 2Ñ&Ô&Ð3Ð3Ð3r   r   z	len(t) = z != len(k) = r   r   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.c              3   ó    K  — | ]	}|d z   V — Œ
dS rc   rI   )r@   r5   s     r   rA   z%_preprocess_inputs.<locals>.<genexpr>�  s&   è è € Ð%Ð%˜R�"�q‘&Ð%Ð%Ð%Ð%Ð%Ð%r   c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS rI   )r   r%   )r@   r-   s     r   rM   z&_preprocess_inputs.<locals>.<listcomp>˜  s    € Ð*Ð*Ð*˜q�RŒZ˜‰]Œ]Ð*Ð*Ð*r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rI   ©r/   )r@   Útis     r   rM   z&_preprocess_inputs.<locals>.<listcomp>š  s   € Ð%Ð%Ð%˜�S�‰WŒWÐ%Ð%Ð%r   N)Ú
isinstancer;   r+   r/   Ú	TypeErrorr   r%   rO   r,   r)   r*   ÚdiffrP   ÚuniqueÚisfiniteÚallÚunravel_indexÚaranger   ÚTrg   Úemptyr‡   rQ   ÚfillÚnan)r.   Út_tplr*   r3   r4   r5   r6   r)   ro   r"   rd   r#   s               r   r    r    W  s  € õ �e�UÑ#Ô#ð 
Ýð 1Ø %ð1ð 1ð 1ñ 
ô 
ð 	
õ
 ˆu‰:Œ:€DðÝˆA‰ŒˆˆøÝð ð ð àˆD�‰Iˆˆˆðøøøõ 	Œ
Ð3Ð3°Ð3Ñ3Ô3½2¼8ÐDÑDÔD€Aå
ˆ1�v„v�‚~€~ÝÐA¥S¨¡Z¤ZÐAÐAµS¸±V´VÐAÐAÐAÑBÔBÐBõ ˆu‰:Œ:€DÝ�4‰[Œ[ð 0ñ 0ˆÝŒZ˜˜aœÑ!Ô!ˆØˆqŒTˆØŒH�QŒK˜"Ñ˜qÑ ˆØ�Š6ˆ6Ýð +¸1ð +ð +ð +ñ ,ô ,ð ,àŒ7�aŠ<ˆ<Ýð 2¸ð 2ð 2ð 2ñ 3ô 3ð 3àˆr�A‰vŠ:ˆ:Ýð 8¨a°©d°Q©hð 8ð 8Ø!#ð8ð 8Ø34ð8ð 8ð 8ñ 9ô 9ð 9åŒG�B‰KŒK˜!ŠO× Ò Ñ"Ô"ð 	8Ýð 7°1ð 7ð 7ð 7ñ 8ô 8ð 8å�rŒy˜˜B˜q 1™u˜HœÑ&Ô&Ñ'Ô'¨!Ò+Ð+Ýð 0Ø+,ð0ð 0ð 0ñ 1ô 1ð 1åŒ{˜2‰Œ×"Ò"Ñ$Ô$ð 	0Ýð /°1ð /ð /ð /ñ 0ô 0ð 0ñ	0õ Ð%Ð% 1Ð%Ñ%Ô%Ñ%Ô%€EÝÔ�rœy­¨e©¬Ñ5Ô5°uÑ=Ô=€GÝ”:˜g­R¬XÐ6Ñ6Ô6Ô8×=Ò=Ñ?Ô?€Lð +Ð* EÐ*Ñ*Ô*€EÝˆu‰:Œ:€DØ%Ð%˜uÐ%Ñ%Ô%€EÝ	Œ�4�˜U™œÐ$­EÐ	2Ñ	2Ô	2€BØ‡G‚G�BŒF�O„O€OÝ�4‰[Œ[ð )ð )ˆØ % a¤ˆˆ1ˆn�s�5˜”8‰}Œ}ˆnÐÑÐÝŒJ�u¥B¤HÐ-Ñ-Ô-€Eàˆl˜R ˜KÐ'Ð's   ¹A	 Á	AÁA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Úimagr*   r)   Ú
empty_liker,   r+   )	Úar~   ÚsolverÚsolver_argsr­   r®   ÚresÚjÚinfos	            r   r¬   r¬   ¤  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   é   ©r±   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                               ||
‰¦  «        }‰d         dk    r|                     ¦   «          |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:   rœ   )r@   Úxs     r   rA   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   N)r
   r   r%   rQ   )r@   r3   r.   Úpointss     €€r   rA   zmake_ndbspl.<locals>.<genexpr>ë  sX   øè è € ð $ð $Øõ �"œ* V¨A¤YµeÐ<Ñ<Ô<¸aÀ¼dÑCÔCð $ð $ð $ð $ð $ð $r   c                 ó   — g | ]}|‘ŒS rI   rI   )r@   Úxvs     r   rM   zmake_ndbspl.<locals>.<listcomp>í  s   € Ð@Ð@Ð@˜r˜Ð@Ð@Ð@r   r   r   r¶   Nr·   Úatolg�íµ ÷Æ°>)r/   r;   rŸ   r†   r   Ú
atleast_1dr+   r,   r%   Ú	itertoolsÚproductrQ   r   rq   Úeliminate_zerosr)   r   rR   ÚsslÚspsolveÚ	functoolsÚpartialr¬   )r¼   Úvaluesr.   r±   r²   r*   rY   r3   ÚpointÚnumptsr-   rj   ÚmatrÚv_shapeÚ
vals_shapeÚvalsÚcoefs   ` `              r   Úmake_ndbsplrÐ   ¼  sƒ  øø€ õ> ˆ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ð 	ˆ„tˆq‚y€yØ×ÒÑÔÐð
 Œ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   Útypesr   Ú r   Úscipy.sparse.linalgÚsparseÚlinalgrÄ   Úscipy.sparser   Úscipy._lib._array_apir   r	   Ú	_bsplinesr
   r   Ú__all__r   r   r    Úgcrotmkr¬   rÐ   rI   r   r   ú<module>rÝ      sž  ðØ Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø "Ð "Ð "Ð "Ð "Ð "Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà +Ð +Ð +Ð +Ð +Ð +Ð +Ð +àˆ-€ðð ð ð €Ø˜5ð	Dððñ ô ðr
ð r
ð r
ð r
ð r
ñ r
ô r
ñô ðr
ðh	J(ð J(ð J(ðZ !œ[ð ð ð ð ð0J!¨s¬{ð J!ð J!ð J!ð J!ð J!ð J!ð J!r   