a
    ‡ù»jZJ  ã                   @   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	„ 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)Úassert_allclose)ÚHalton)ÚcKDTree)Ú
_AVAILABLEÚ_SCALE_INVARIANTÚ_NAME_TO_MIN_DEGREEÚ_monomial_powersÚRBFInterpolator)Ú_rbfinterp_pythranc                 C   s   t | jd |ƒ}t | |¡S )Né   )r	   Úshaper   Z_polynomial_matrix)ÚxÚdegreeZpowers© r   úLE:\soccer\ml_env\Lib\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   Úx1Zx2Zterm1Zterm2Zterm3Z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 ]ž}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yÈ   Y   dS 0 q,qd
S )Nr   éd   )r   r   r   r   é   F©ZscrambleÚseedr   r   Zcomplete)ÚmodeT)r   r   ÚrandomÚRandomStateÚranger   Z_kernel_matrixr   ÚlinalgZqrr   ÚTÚdotZcholeskyr   )ÚkernelÚmÚnxZntestsÚndimÚseqÚ_r   ÚAÚPÚQÚRZQ2ÚBr   r   r   Ú#_is_conditionally_positive_definite*   s     r9   r.   c                 C   s"   t  | d¡d }t| |ƒsJ ‚d S )Néÿÿÿÿr   )r   Úgetr9   )r.   r/   r   r   r   Ú$test_conditionally_positive_definiteI   s    r<   c                   @   s@  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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>©Zatol)r   r   r(   r)   r   Úbuildr   ©Úselfr.   r2   r   r   ÚxitpÚyitp1Úyitp2r   r   r   Útest_scale_invariance_1dS   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#   r?   r@   rB   rC   rD   )r   r   r(   r)   r"   rE   r   rF   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 rz| j|||d�|ƒ}| j|| | ||d�|| | ƒ}	n@| j||d|d	�|ƒ}| j|| | |d| |d	�|| | ƒ}	t||	d
d� d S )Nr   Fr%   gšd~ÅQJgAüjéZKr#   ©r.   ç      @r@   rC   rD   )r   r   r(   r)   r"   r   rE   r   )
rG   r.   r2   ÚscaleÚshiftr   r   rH   rI   rJ   r   r   r   Útest_extreme_domainsk   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   r>   ç        r?   r   ©r   rC   rD   )
r   r(   r)   r   r   Únormalr   r-   rE   r   )rG   Úrngr2   r   r   rH   r5   ÚPitpÚpoly_coeffsr   rI   rJ   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	  r>   rR   r?   r   rS   c                     s   |j dd� ˆ | i |¤ŽS )Nr#   )Zmemory_budget)Úupdate)ÚargsÚkwargs©Zce_realr   r   Ú_chunk_evaluatorµ   s    z<_TestRBFInterpolator.test_chunking.<locals>._chunk_evaluatorr]   rC   rD   )r   r(   r)   r   r   rT   r   r-   rE   r]   Úsetattrr   )rG   ZmonkeypatchrU   r2   r   ZlargeNr   rH   r5   rV   rW   r   rI   Úinterpr]   rJ   r   r\   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#   r:   r   r   )	r   r   r(   r)   Úarrayr"   r,   rE   r   ©rG   r2   r   rH   r   rI   rJ   Z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              ð?r:   )	r   r   r(   r)   r"   rE   ÚrealÚimagr   rb   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 stJ ‚d S )
Nr   Fr%   r   r>   rN   r@   r   ç-Cëâ6?)r   r   r(   r)   r   rE   Úmean©	rG   r.   r2   r   rH   r   ÚytrueÚyitpZ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 slJ ‚d S )Nr   Fr%   r#   rN   r@   g-Cëâ6*?)r   r   r(   r)   r"   rE   rh   ri   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 ]D}| j||d||d�|ƒ}t  t  	||	 d ¡¡}||k rhd}
 q®qh|
s¶J ‚d S )Nr   r   Fr%   gš™™™™™É?gš™™™™™¹?r   éüÿÿÿé   r   r#   rR   )r#   r?   )rA   Ú	smoothingr.   r   T)
r   r(   r)   r   Úlinspacer   rT   rE   Úsqrtrh   )rG   r.   rU   r2   ÚnoiseZrmse_tolZsmoothing_ranger   r   rj   Zrmse_within_tolrp   ZysmoothZrmser   r   r   Útest_smoothing_misfit   s.    üü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   r>   rR   r?   r   )r>   g     @�@©rp   rg   rD   )r   r(   r)   r   r   rT   r   r-   ÚcopyÚzerosrE   r   )rG   rU   r2   r   r   r5   rW   r   Zy_with_outlierrp   rk   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   ƒ n1 st0    Y  d S )Nr   Fr%   r   r   zExpected the second axis of `x`©Úmatch)	r   r   r(   r)   r"   ÚpytestÚraisesÚ
ValueErrorrE   )rG   r   Údr   rz   r   r   r   Ú$test_inconsistent_x_dimensions_error/  s    z9_TestRBFInterpolator.test_inconsistent_x_dimensions_errorc                 C   sf   t  ddd¡d d …d f }t  d¡}d}tjt|d�� |  ||¡ W d   ƒ n1 sX0    Y  d S )Nr   r   r$   zExpected the first axis of `d`ry   ©r   rq   rw   r{   r|   r}   rE   ©rG   r   r~   rz   r   r   r   Ú test_inconsistent_d_length_error9  s
    
z5_TestRBFInterpolator.test_inconsistent_d_length_errorc                 C   sZ   t  ddd¡}t  d¡}d}tjt|d�� |  ||¡ W d   ƒ n1 sL0    Y  d S )Nr   r   r$   z"`y` must be a 2-dimensional array.ry   r€   r�   r   r   r   Útest_y_not_2d_error@  s
    
z(_TestRBFInterpolator.test_y_not_2d_errorc                 C   st   t  ddd¡d d …d f }t  d¡}t  d¡}d}tjt|d��  | j|||d� W d   ƒ n1 sf0    Y  d S )Nr   r   r$   zExpected `smoothing` to bery   ru   )r   rq   rw   Úonesr{   r|   r}   rE   )rG   r   r~   rp   rz   r   r   r   Ú(test_inconsistent_smoothing_length_errorG  s    

z=_TestRBFInterpolator.test_inconsistent_smoothing_length_errorc                 C   sj   t  ddd¡d d …d f }t  d¡}d}tjt|d��  | j||dd� W d   ƒ n1 s\0    Y  d S )Nr   r   r$   z`kernel` must be one ofry   ÚtestrM   r€   r�   r   r   r   Útest_invalid_kernel_name_errorO  s
    
z3_TestRBFInterpolator.test_invalid_kernel_name_errorc              	   C   s~   t  ddd¡d d …d f }t  d¡}tD ]P}|tv r6q(d}tjt|d��  | j|||d� W d   ƒ q(1 sn0    Y  q(d S )Nr   r   r$   z`epsilon` must be specifiedry   rM   )	r   rq   rw   r   r   r{   r|   r}   rE   )rG   r   r~   r.   rz   r   r   r   Ú test_epsilon_not_specified_errorV  s    
z5_TestRBFInterpolator.test_epsilon_not_specified_errorc                 C   sx   t  ddd¡d d …d f }t  ddd¡}t  d¡}d}tjt|d��  |  ||¡|ƒ W d   ƒ n1 sj0    Y  d S )Nr   r   r$   z"`x` must be a 2-dimensional array.ry   r€   )rG   r   r   r~   rz   r   r   r   Útest_x_not_2d_errora  s    
z(_TestRBFInterpolator.test_x_not_2d_errorc                 C   sj   t  ddd¡d d …d f }t  d¡}d}tjt|d��  | j||dd� W d   ƒ n1 s\0    Y  d S )Nr   r   z#At least 2 data points are requiredry   Úthin_plate_splinerM   r€   r�   r   r   r   Ú"test_not_enough_observations_errori  s
    
z7_TestRBFInterpolator.test_not_enough_observations_errorc              	   C   s’   t  ddd¡d d …d f }t  d¡}t ¡ D ]`\}}|dkr,d|› �}tjt|d��( | j||d||d d� W d   ƒ q,1 s‚0    Y  q,d S )Nr   r   r$   z`degree` should not be below ry   r?   ©rA   r.   r   )	r   rq   rw   r   Úitemsr{   ZwarnsÚWarningrE   )rG   r   r~   r.   Údegrz   r   r   r   Útest_degree_warningp  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$   r?   r:   rŒ   )r   rq   rw   r   r�   rE   )rG   r   r~   r.   r3   r   r   r   Útest_minus_one_degreez  s    
z*_TestRBFInterpolator.test_minus_one_degreec                 C   st   t  ddgddgddgg¡}t  g d¢¡}d}tjt|d��$ | j||dd�|ƒ W d   ƒ n1 sf0    Y  d S )	NrB   rR   r?   )rR   rR   rR   zdoes not have full column rankry   rŠ   rM   )r   ra   r{   r|   r   rE   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   ZlinearrM   )r   rw   r„   rE   r   )rG   Ú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   r>   g¼‰Ø—²Òœ<rD   )
r   r   r(   r)   r   rE   ÚpickleÚloadsÚdumpsr   )rG   r2   r   rH   r   r_   rI   rJ   r   r   r   Útest_pickleable“  s    z$_TestRBFInterpolator.test_pickleableN)"Ú__name__Ú
__module__Ú__qualname__r{   ÚmarkÚparametrizeÚsortedr   rK   rL   r   rQ   rX   Zslowr`   rc   rf   rl   rm   rt   rx   r   r‚   rƒ   r…   r‡   rˆ   r‰   r‹   r�   r‘   r’   r•   r™   r   r   r   r   r=   R   s>   








		r=   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú TestRBFInterpolatorNeighborsNonec                 O   s   t |i |¤ŽS )N©r
   ©rG   rZ   r[   r   r   r   rE   ¦  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   ç    „×—Ar>   ©r   rp   ©Zrcondr   rC   rD   )r   r   r(   r)   r   rE   r   r-   r+   Úlstsqr   ©rG   r2   r   rp   r   rH   r   rI   r5   rV   rJ   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   rC   rD   )r   r   r(   r)   r"   rE   r   r-   r+   r¦   r   r§   r   r   r   Útest_smoothing_limit_2dÂ  s"    

ýü

z8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_2dN)rš   r›   rœ   rE   r¨   r©   r   r   r   r   r    ¥  s   r    c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestRBFInterpolatorNeighbors20c                 O   s   t |i |¤ddi¤ŽS )NÚ	neighborsro   r¡   r¢   r   r   r   rE   Þ  s    z$TestRBFInterpolatorNeighbors20.buildc                 C   sœ   t ddtj ¡ d�}| d¡}| d¡}t|ƒ}|  ||¡|ƒ}g }t|ƒ}|D ]8}| |d¡\}	}
| t	||
 ||
 ƒ|d  ƒd ¡ qPt
||dd� d S )	Nr   Fr%   r#   ro   r   rC   rD   )r   r   r(   r)   r"   rE   r   ÚqueryÚappendr
   r   )rG   r2   r   rH   r   rI   rJ   ÚtreeÚxir3   Znbrr   r   r   Ú#test_equivalent_to_rbf_interpolatorá  s    

&zBTestRBFInterpolatorNeighbors20.test_equivalent_to_rbf_interpolatorN©rš   r›   rœ   rE   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   rE   ÷  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   r>   rC   rD   )r   r   r(   r)   r   rE   r
   r   )rG   r2   r   rH   r   rI   rJ   r   r   r   r°   ú  s    zCTestRBFInterpolatorNeighborsInf.test_equivalent_to_rbf_interpolatorNr±   r   r   r   r   r²   ô  s   r²   ) r–   r{   Únumpyr   Znumpy.linalgr   Znumpy.testingr   Zscipy.stats.qmcr   Zscipy.spatialr   Zscipy.interpolate._rbfinterpr   r   r   r	   r
   Zscipy.interpolater   r   r   r"   r9   r�   rž   rŸ   r<   r=   r    rª   r²   r   r   r   r   Ú<module>   s(   
  U7