o
    Ö­j–J  ã                   @   sø   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Z d dlmZmZmZmZmZ d dlmZ d dlmZ d	d
„ Zdd„ Zdd„ Zdd„ Zej deeƒ¡dd„ ƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!dS )é    N)ÚLinAlgError)Úxp_assert_close)ÚHalton)ÚcKDTree)Ú
_AVAILABLEÚ_SCALE_INVARIANTÚ_NAME_TO_MIN_DEGREEÚ_monomial_powersÚRBFInterpolator)Ú_rbfinterp_pythran)Ú_run_concurrent_barrierc                 C   s   t | jd |ƒ}t | |¡S )Né   )r	   Úshaper   Ú_polynomial_matrix)ÚxÚdegreeÚpowers© r   úc/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/interpolate/tests/test_rbfinterp.pyÚ_vandermonde   s   r   c                 C   sH   | d d …df } dt  |  ¡dt  d|  ¡  dt  d|  ¡   }|S )Nr   g
×£p=
@é   éþÿÿÿé   éýÿÿÿ©ÚnpÚexp)r   Úyr   r   r   Ú_1d_test_function   s   4r   c                 C   sú   | d d …df | d d …df }}dt  d| d d  d d| d d d  ¡ }dt  d| d d  d d| d d  ¡ }d	t  d| d
 d  d d| d d d  ¡ }dt  d| d d  d| d
 d  ¡ }|| | | }|S )Nr   r   g      è?é	   é   r   é1   é
   g      à?é   r   gš™™™™™É¿r   )r   Úx1Úx2Úterm1Úterm2Úterm3Úterm4r   r   r   r   Ú_2d_test_function   s   "404,r*   c              
   C   sÐ   d}d}dD ]_}t |dtj ¡ d�}t|ƒD ]N}d| |¡ d }t || ¡}t||d ƒ}	tjj	|	dd	�\}
}|
d d …|	j
d d …f }|j |¡ |¡}ztj |¡ W q tjjyd   Y   dS w qd
S )Nr"   éd   )r   r    r   r   é   F©ÚscrambleÚseedr    r   Úcomplete)ÚmodeT)r   r   ÚrandomÚRandomStateÚranger   Ú_kernel_matrixr   ÚlinalgÚqrr   ÚTÚdotÚcholeskyr   )ÚkernelÚmÚnxÚntestsÚndimÚseqÚ_r   ÚAÚPÚQÚRÚQ2ÚBr   r   r   Ú#_is_conditionally_positive_definite+   s$   
ÿórH   r;   c                 C   s"   t  | d¡d }t| |ƒsJ ‚d S )Néÿÿÿÿr   )r   ÚgetrH   )r;   r<   r   r   r   Ú$test_conditionally_positive_definiteJ   s   rK   c                   @   sH  e Zd Zej deeƒ¡dd„ ƒZej deeƒ¡dd„ ƒZ	ej dee
ƒ¡dd„ ƒZdd	„ Zejjd
d„ ƒZdd„ Zdd„ Zej dee
ƒ¡dd„ ƒZej dee
ƒ¡dd„ ƒZej dee
ƒ¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zejjd(d)„ ƒZd*d+„ Zd,d-„ Z d.d/„ Z!d0d1„ Z"d2S )3Ú_TestRBFInterpolatorr;   c                 C   sv   t ddtj ¡ d�}d| d¡ }t|ƒ}d| d¡ }| j||d|d�|ƒ}| j||d|d�|ƒ}t||d	d
� d S )Nr   Fr-   r   é2   ç      ð?©Úepsilonr;   ç       @ç:Œ0âŽyE>©Úatol)r   r   r2   r3   r   Úbuildr   ©Úselfr;   r@   r   r   ÚxitpÚyitp1Úyitp2r   r   r   Útest_scale_invariance_1dT   s   z-_TestRBFInterpolator.test_scale_invariance_1dc                 C   sn   t ddtj ¡ d�}| d¡}t|ƒ}| d¡}| j||d|d�|ƒ}| j||d|d�|ƒ}t||dd	� d S )
Nr    Fr-   r+   rN   rO   rQ   rR   rS   )r   r   r2   r3   r*   rU   r   rV   r   r   r   Útest_scale_invariance_2d`   s   

z-_TestRBFInterpolator.test_scale_invariance_2dc           
      C   sÌ   t ddtj ¡ d�}d}d}| d¡}t|ƒ}| d¡}|tv r=| j|||d�|ƒ}| j|| | ||d�|| | ƒ}	n | j||d|d	�|ƒ}| j|| | |d| |d	�|| | ƒ}	t||	d
d� d S )Nr    Fr-   gšd~ÅQJgAüjéZKr+   ©r;   ç      @rO   rR   rS   )r   r   r2   r3   r*   r   rU   r   )
rW   r;   r@   ÚscaleÚshiftr   r   rX   rY   rZ   r   r   r   Útest_extreme_domainsl   s.   

þ
ýý
üz)_TestRBFInterpolator.test_extreme_domainsc                 C   s”   t j d¡}tdd|d�}d}| d¡}| d¡}t||ƒ}t||ƒ}| dd|jd	 ¡}| |¡}	| |¡}
| j||	|d
�|ƒ}t	|
|dd� d S )Nr   r    Fr-   r   rM   ç        rN   r   ©r   rR   rS   )
r   r2   r3   r   r   Únormalr   r9   rU   r   )rW   Úrngr@   r   r   rX   rC   ÚPitpÚpoly_coeffsr   rY   rZ   r   r   r   Útest_polynomial_reproductionˆ   s   





z1_TestRBFInterpolator.test_polynomial_reproductionc                    s¼   t j d¡}tdd|d�}d}d}| d¡}| |¡}t||ƒ}t||ƒ}	| dd	|jd
 ¡}
| |
¡}|	 |
¡}| j|||d�}|j	‰ ‡ fdd„}| 
|d|¡ ||ƒ}t||dd� d S )Nr   r    Fr-   r   i	  rM   rb   rN   r   rc   c                     s   |j dd� ˆ | i |¤ŽS )Nr+   )Úmemory_budget)Úupdate)ÚargsÚkwargs©Úce_realr   r   Ú_chunk_evaluator¶   s   z<_TestRBFInterpolator.test_chunking.<locals>._chunk_evaluatorro   rR   rS   )r   r2   r3   r   r   rd   r   r9   rU   ro   Úsetattrr   )rW   Úmonkeypatchre   r@   r   ÚlargeNr   rX   rC   rf   rg   r   rY   Úinterpro   rZ   r   rm   r   Útest_chunkingž   s"   





z"_TestRBFInterpolator.test_chunkingc              	   C   sÊ   t ddtj ¡ d�}| d¡}| d¡}t t|ƒt|d d …d d d…f ƒg¡j}|  ||¡|ƒ}|  ||d d …df ¡|ƒ}|  ||d d …df ¡|ƒ}t|d d …df |ƒ t|d d …df |ƒ d S )Nr    Fr-   r+   rI   r   r   )	r   r   r2   r3   Úarrayr*   r8   rU   r   ©rW   r@   r   rX   r   rY   rZ   Úyitp3r   r   r   Útest_vector_data¾   s   


ÿÿz%_TestRBFInterpolator.test_vector_datac                 C   sž   t ddtj ¡ d�}| d¡}| d¡}t|ƒdt|d d …d d d…f ƒ  }|  ||¡|ƒ}|  ||j¡|ƒ}|  ||j¡|ƒ}t|j|ƒ t|j|ƒ d S )Nr    Fr-   r+   y              ð?rI   )	r   r   r2   r3   r*   rU   ÚrealÚimagr   rv   r   r   r   Útest_complex_dataÐ   s   

&z&_TestRBFInterpolator.test_complex_datac           	      C   sx   t ddtj ¡ d�}d| d¡ }d| d¡ }t|ƒ}t|ƒ}| j||d|d�|ƒ}t || d ¡}|d	k s:J ‚d S )
Nr   Fr-   r   rM   r^   rO   r    ç-Cëâ6?)r   r   r2   r3   r   rU   Úmean©	rW   r;   r@   r   rX   r   ÚytrueÚyitpÚmser   r   r   Útest_interpolation_misfit_1dá   s   z1_TestRBFInterpolator.test_interpolation_misfit_1dc           	      C   sp   t ddtj ¡ d�}| d¡}| d¡}t|ƒ}t|ƒ}| j||d|d�|ƒ}t || d ¡}|dk s6J ‚d S )Nr    Fr-   r+   r^   rO   g-Cëâ6*?)r   r   r2   r3   r*   rU   r}   r~   r   r   r   Útest_interpolation_misfit_2dñ   s   

z1_TestRBFInterpolator.test_interpolation_misfit_2dc                 C   sº   t j d¡}tdd|d�}d}d}dt  ddd	¡ }d
| d¡ }t|ƒ| d|d¡ }t|ƒ}	d}
|D ]"}| j||d||d�|ƒ}t  t  	||	 d ¡¡}||k rVd}
 nq4|
s[J ‚d S )Nr   r   Fr-   gš™™™™™É?gš™™™™™¹?r"   éüÿÿÿé   r   r+   rb   )r+   rN   )rP   Ú	smoothingr;   r    T)
r   r2   r3   r   Úlinspacer   rd   rU   Úsqrtr}   )rW   r;   re   r@   ÚnoiseÚrmse_tolÚsmoothing_ranger   r   r   Úrmse_within_tolr†   ÚysmoothÚrmser   r   r   Útest_smoothing_misfit  s0   üüþz*_TestRBFInterpolator.test_smoothing_misfitc                 C   s¢   t j d¡}tdd|d�}d}| d¡}t||ƒ}| dd|jd ¡}| |¡}t  |¡}|d	  d7  < t  	d
¡}	d|	d	< | j
|||	d�|ƒ}
t|
|dd� d S )Nr   r   Fr-   r    rM   rb   rN   r"   )rM   g     @�@©r†   r|   rS   )r   r2   r3   r   r   rd   r   r9   ÚcopyÚzerosrU   r   )rW   re   r@   r   r   rC   rg   r   Úy_with_outlierr†   r€   r   r   r   Útest_array_smoothing  s   




z)_TestRBFInterpolator.test_array_smoothingc                 C   s„   t ddtj ¡ d� d¡}t|ƒ}t ddtj ¡ d� d¡}d}tjt|d�� |  ||¡|ƒ W d   ƒ d S 1 s;w   Y  d S )Nr    Fr-   r"   r   zExpected the second axis of `x`©Úmatch)	r   r   r2   r3   r*   ÚpytestÚraisesÚ
ValueErrorrU   )rW   r   Údr   r–   r   r   r   Ú$test_inconsistent_x_dimensions_error0  s   "ÿz9_TestRBFInterpolator.test_inconsistent_x_dimensions_errorc                 C   sh   t  ddd¡d d …d f }t  d¡}d}tjt|d�� |  ||¡ W d   ƒ d S 1 s-w   Y  d S )Nr   r   r,   zExpected the first axis of `d`r•   ©r   r‡   r’   r—   r˜   r™   rU   ©rW   r   rš   r–   r   r   r   Ú test_inconsistent_d_length_error:  s   
"ÿz5_TestRBFInterpolator.test_inconsistent_d_length_errorc                 C   s\   t  ddd¡}t  d¡}d}tjt|d�� |  ||¡ W d   ƒ d S 1 s'w   Y  d S )Nr   r   r,   z"`y` must be a 2-dimensional array.r•   rœ   r�   r   r   r   Útest_y_not_2d_errorA  s   
"ÿz(_TestRBFInterpolator.test_y_not_2d_errorc                 C   sv   t  ddd¡d d …d f }t  d¡}t  d¡}d}tjt|d�� | j|||d� W d   ƒ d S 1 s4w   Y  d S )Nr   r   r,   zExpected `smoothing` to ber•   r�   )r   r‡   r’   Úonesr—   r˜   r™   rU   )rW   r   rš   r†   r–   r   r   r   Ú(test_inconsistent_smoothing_length_errorH  s   

"ÿz=_TestRBFInterpolator.test_inconsistent_smoothing_length_errorc                 C   sl   t  ddd¡d d …d f }t  d¡}d}tjt|d�� | j||dd� W d   ƒ d S 1 s/w   Y  d S )Nr   r   r,   z`kernel` must be one ofr•   Útestr]   rœ   r�   r   r   r   Útest_invalid_kernel_name_errorP  ó   
"ÿz3_TestRBFInterpolator.test_invalid_kernel_name_errorc              	   C   s~   t  ddd¡d d …d f }t  d¡}tD ](}|tv rqd}tjt|d�� | j|||d� W d   ƒ n1 s7w   Y  qd S )Nr   r   r,   z`epsilon` must be specifiedr•   r]   )	r   r‡   r’   r   r   r—   r˜   r™   rU   )rW   r   rš   r;   r–   r   r   r   Ú test_epsilon_not_specified_errorW  s   
ÿ€ûz5_TestRBFInterpolator.test_epsilon_not_specified_errorc                 C   sz   t  ddd¡d d …d f }t  ddd¡}t  d¡}d}tjt|d�� |  ||¡|ƒ W d   ƒ d S 1 s6w   Y  d S )Nr   r   r,   z"`x` must be a 2-dimensional array.r•   rœ   )rW   r   r   rš   r–   r   r   r   Útest_x_not_2d_errorb  s   
"ÿz(_TestRBFInterpolator.test_x_not_2d_errorc                 C   sl   t  ddd¡d d …d f }t  d¡}d}tjt|d�� | j||dd� W d   ƒ d S 1 s/w   Y  d S )Nr   r   z#At least 2 data points are requiredr•   Úthin_plate_spliner]   rœ   r�   r   r   r   Ú"test_not_enough_observations_errorj  r¤   z7_TestRBFInterpolator.test_not_enough_observations_errorc              	   C   s’   t  ddd¡d d …d f }t  d¡}t ¡ D ]0\}}|dkrFd|› �}tjt|d�� | j||d||d d� W d   ƒ n1 sAw   Y  qd S )Nr   r   r,   z`degree` should not be below r•   rN   ©rP   r;   r   )	r   r‡   r’   r   Úitemsr—   ÚwarnsÚWarningrU   )rW   r   rš   r;   Údegr–   r   r   r   Útest_degree_warningq  s   

ÿ€üz(_TestRBFInterpolator.test_degree_warningc                 C   sN   t  ddd¡d d …d f }t  d¡}t ¡ D ]\}}| j||d|dd� qd S )Nr   r   r,   rN   rI   r©   )r   r‡   r’   r   rª   rU   )rW   r   rš   r;   rA   r   r   r   Útest_minus_one_degree|  s
   
ÿz*_TestRBFInterpolator.test_minus_one_degreec                 C   sv   t  ddgddgddgg¡}t  g d¢¡}d}tjt|d�� | j||dd�|ƒ W d   ƒ d S 1 s4w   Y  d S )	NrQ   rb   rN   )rb   rb   rb   zdoes not have full column rankr•   r§   r]   )r   ru   r—   r˜   r   rU   r�   r   r   r   Útest_rank_errorƒ  s   "ÿz$_TestRBFInterpolator.test_rank_errorc                 C   sD   dD ]}t  d|f¡}t  d¡}| j||dd�|ƒ}t||ƒ qd S )N)r   r    r   r   )r   Úlinearr]   )r   r’   r    rU   r   )rW   Údimr   rš   Úfr   r   r   Útest_single_pointŒ  s   
üz&_TestRBFInterpolator.test_single_pointc                 C   st   t ddtj d¡d�}d| d¡ }d| d¡ }t|ƒ}|  ||¡}||ƒ}t t |¡¡|ƒ}t	||dd� d S )	Nr   Fl   eä r-   r   rM   g¼‰Ø—²Òœ<rS   )
r   r   r2   r3   r   rU   ÚpickleÚloadsÚdumpsr   )rW   r@   r   rX   r   rs   rY   rZ   r   r   r   Útest_pickleable•  s   z$_TestRBFInterpolator.test_pickleableN)#Ú__name__Ú
__module__Ú__qualname__r—   ÚmarkÚparametrizeÚsortedr   r[   r\   r   ra   rh   Úslowrt   rx   r{   r‚   rƒ   r�   r”   r›   rž   rŸ   r¡   r£   r¥   r¦   r¨   Úthread_unsafer®   r¯   r°   r´   r¸   r   r   r   r   rL   S   sB    









		rL   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú TestRBFInterpolatorNeighborsNonec                 O   s   t |i |¤ŽS ©N©r
   ©rW   rk   rl   r   r   r   rU   ¨  s   z&TestRBFInterpolatorNeighborsNone.buildc                 C   s˜   t ddtj ¡ d�}d}d}d| d¡ }d| d¡ }t|ƒ}| j||||d�|ƒ}t||ƒ}t||ƒ}	|	 tjj	||d d�d	 ¡}
t
||
d
d� d S )Nr   Fr-   r   ç    „×—ArM   ©r   r†   ©Úrcondr   rR   rS   )r   r   r2   r3   r   rU   r   r9   r6   Úlstsqr   ©rW   r@   r   r†   r   rX   r   rY   rC   rf   rZ   r   r   r   Útest_smoothing_limit_1d«  s"   ýü

z8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_1dc                 C   s�   t ddtj ¡ d�}d}d}| d¡}| d¡}t|ƒ}| j||||d�|ƒ}t||ƒ}t||ƒ}	|	 tjj	||d d�d	 ¡}
t
||
d
d� d S )Nr    Fr-   r   rÆ   r+   rÇ   rÈ   r   rR   rS   )r   r   r2   r3   r*   rU   r   r9   r6   rÊ   r   rË   r   r   r   Útest_smoothing_limit_2dÄ  s"   

ýü

z8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_2dN)r¹   rº   r»   rU   rÌ   rÍ   r   r   r   r   rÂ   §  s    rÂ   c                   @   rÁ   )ÚTestRBFInterpolatorNeighbors20c                 O   s   t |i |¤ddi¤ŽS )NÚ	neighborsr…   rÄ   rÅ   r   r   r   rU   à  s   z$TestRBFInterpolatorNeighbors20.buildc                 C   sœ   t ddtj ¡ d�}| d¡}| d¡}t|ƒ}|  ||¡|ƒ}g }t|ƒ}|D ]}| |d¡\}	}
| t	||
 ||
 ƒ|d  ƒd ¡ q(t
||dd� d S )	Nr    Fr-   r+   r…   r   rR   rS   )r   r   r2   r3   r*   rU   r   ÚqueryÚappendr
   r   )rW   r@   r   rX   r   rY   rZ   ÚtreeÚxirA   Únbrr   r   r   Ú#test_equivalent_to_rbf_interpolatorã  s   

&zBTestRBFInterpolatorNeighbors20.test_equivalent_to_rbf_interpolatorc                 C   sX   t ddtj d¡d�}| d¡}| d¡}t|ƒ}|  ||¡}dd„ }td|||ƒ d S )	Nr    Fr   r-   r+   c                 S   s   ||ƒ d S rÃ   r   )rA   rs   Úxpr   r   r   Ú	worker_fn   s   zBTestRBFInterpolatorNeighbors20.test_concurrency.<locals>.worker_fnr"   )r   r   r2   r3   r*   rU   r   )rW   r@   r   rX   r   rs   r×   r   r   r   Útest_concurrencyõ  s   

z/TestRBFInterpolatorNeighbors20.test_concurrencyN)r¹   rº   r»   rU   rÕ   rØ   r   r   r   r   rÎ   Þ  s    rÎ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestRBFInterpolatorNeighborsInfc                 O   s   t |i |¤dtji¤ŽS )NrÏ   )r
   r   ÚinfrÅ   r   r   r   rU   	  s   z%TestRBFInterpolatorNeighborsInf.buildc                 C   sh   t ddtj ¡ d�}d| d¡ }d| d¡ }t|ƒ}|  ||¡|ƒ}t||ƒ|ƒ}t||dd� d S )Nr   Fr-   r   rM   rR   rS   )r   r   r2   r3   r   rU   r
   r   )rW   r@   r   rX   r   rY   rZ   r   r   r   rÕ     s   zCTestRBFInterpolatorNeighborsInf.test_equivalent_to_rbf_interpolatorN)r¹   rº   r»   rU   rÕ   r   r   r   r   rÙ     s    rÙ   )"rµ   r—   Únumpyr   Únumpy.linalgr   Úscipy._lib._array_apir   Úscipy.stats.qmcr   Úscipy.spatialr   Úscipy.interpolate._rbfinterpr   r   r   r	   r
   Úscipy.interpolater   Úscipy._lib._testutilsr   r   r   r*   rH   r¼   r½   r¾   rK   rL   rÂ   rÎ   rÙ   r   r   r   r   Ú<module>   s,    
  V7(