U
    »mœdÏF  ã                   @   sð   d dl Z d dlZd dlZd dlmZ d dlmZ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Úassert_array_equal)Ú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   ú_/home/sam/Atlas/atlas_env/lib/python3.8/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k
rÊ   Y   dS X 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     r:   r/   c                 C   s"   t  | d¡d }t| |ƒst‚d S )Néÿÿÿÿr   )r	   Úgetr:   ÚAssertionError)r/   r0   r   r   r   Ú$test_conditionally_positive_definiteI   s    r>   c                   @   s8  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 d0S )1Ú_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/   r3   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$   rA   rB   rD   rE   rF   )r   r   r)   r*   r#   rG   r   rH   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k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/   ç      @rB   rE   rF   )r   r   r)   r*   r#   r   rG   r   )
rI   r/   r3   ÚscaleÚshiftr   r   rJ   rK   rL   r   r   r   Útest_extreme_domainsk   s2    


 þ
ý
 ý
ü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@   ç        rA   r   ©r   rE   rF   )
r   r)   r*   r   r   Únormalr   r.   rG   r   )rI   Úrngr3   r   r   rJ   r6   ÚPitpÚpoly_coeffsr   rK   rL   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@   rT   rA   r   rU   c                     s   |j dd� ˆ | |ŽS )Nr$   )Zmemory_budget)Úupdate)ÚargsÚkwargs©Zce_realr   r   Ú_chunk_evaluatorµ   s    z<_TestRBFInterpolator.test_chunking.<locals>._chunk_evaluatorr_   rE   rF   )r   r)   r*   r   r   rV   r   r.   rG   r_   Úsetattrr   )rI   ZmonkeypatchrW   r3   r   ZlargeNr   rJ   r6   rX   rY   r   rK   Úinterpr_   rL   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-   rG   r   ©rI   r3   r   rJ   r   rK   rL   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#   rG   ÚrealÚimagr   rd   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 stt‚d S )
Nr   Fr&   r   r@   rP   rB   r   ç-Cëâ6?)r   r   r)   r*   r   rG   Úmeanr=   ©	rI   r/   r3   r   rJ   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 slt‚d S )Nr   Fr&   r$   rP   rB   g-Cëâ6*?)r   r   r)   r*   r#   rG   rj   r=   rk   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¶t
‚d S )Nr   r   Fr&   gš™™™™™É?gš™™™™™¹?r    éüÿÿÿé   r   r$   rT   )r$   rA   )rC   Ú	smoothingr/   r   T)r   r)   r*   r   Úlinspacer   rV   rG   Úsqrtrj   r=   )rI   r/   rW   r3   ÚnoiseZrmse_tolZsmoothing_ranger   r   rl   Zrmse_within_tolrr   ZysmoothZ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   r@   rT   rA   r    )r@   g     @�@©rr   ri   rF   )r   r)   r*   r   r   rV   r   r.   ÚcopyÚzerosrG   r   )rI   rW   r3   r   r   r6   rY   r   Zy_with_outlierrr   rm   r   r   r   Útest_array_smoothing  s    




z)_TestRBFInterpolator.test_array_smoothingc              	   C   sn   t ddtj ¡ d� d¡}t|ƒ}t ddtj ¡ d� d¡}d}tjt|d�� |  ||¡|ƒ W 5 Q R X d S )Nr   Fr&   r    r   zExpected the second axis of `x`©Úmatch)	r   r   r)   r*   r#   ÚpytestÚraisesÚ
ValueErrorrG   )rI   r   Údr   r|   r   r   r   Ú$test_inconsistent_x_dimensions_error/  s    z9_TestRBFInterpolator.test_inconsistent_x_dimensions_errorc              	   C   sR   t  ddd¡d d …d f }t  d¡}d}tjt|d�� |  ||¡ W 5 Q R X d S )Nr   r   r%   zExpected the first axis of `d`r{   ©r   rs   ry   r}   r~   r   rG   ©rI   r   r€   r|   r   r   r   Ú test_inconsistent_d_length_error9  s
    
z5_TestRBFInterpolator.test_inconsistent_d_length_errorc              	   C   sF   t  ddd¡}t  d¡}d}tjt|d�� |  ||¡ W 5 Q R X d S )Nr   r   r%   z"`y` must be a 2-dimensional array.r{   r‚   rƒ   r   r   r   Útest_y_not_2d_error@  s
    
z(_TestRBFInterpolator.test_y_not_2d_errorc              	   C   s`   t  ddd¡d d …d f }t  d¡}t  d¡}d}tjt|d�� | j|||d� W 5 Q R X d S )Nr   r   r%   zExpected `smoothing` to ber{   rw   )r   rs   ry   Úonesr}   r~   r   rG   )rI   r   r€   rr   r|   r   r   r   Ú(test_inconsistent_smoothing_length_errorG  s    

z=_TestRBFInterpolator.test_inconsistent_smoothing_length_errorc              	   C   sV   t  ddd¡d d …d f }t  d¡}d}tjt|d�� | j||dd� W 5 Q R X d S )Nr   r   r%   z`kernel` must be one ofr{   ÚtestrO   r‚   rƒ   r   r   r   Útest_invalid_kernel_name_errorO  s
    
z3_TestRBFInterpolator.test_invalid_kernel_name_errorc              
   C   sj   t  ddd¡d d …d f }t  d¡}tD ]<}|tkr6q(d}tjt|d�� | j|||d� W 5 Q R X q(d S )Nr   r   r%   z`epsilon` must be specifiedr{   rO   )	r   rs   ry   r   r   r}   r~   r   rG   )rI   r   r€   r/   r|   r   r   r   Ú test_epsilon_not_specified_errorV  s    
z5_TestRBFInterpolator.test_epsilon_not_specified_errorc              	   C   sd   t  ddd¡d d …d f }t  ddd¡}t  d¡}d}tjt|d�� |  ||¡|ƒ W 5 Q R X d S )Nr   r   r%   z"`x` must be a 2-dimensional array.r{   r‚   )rI   r   r   r€   r|   r   r   r   Útest_x_not_2d_errora  s    
z(_TestRBFInterpolator.test_x_not_2d_errorc              	   C   sV   t  ddd¡d d …d f }t  d¡}d}tjt|d�� | j||dd� W 5 Q R X d S )Nr   r   z#At least 2 data points are requiredr{   Úthin_plate_splinerO   r‚   rƒ   r   r   r   Ú"test_not_enough_observations_errori  s
    
z7_TestRBFInterpolator.test_not_enough_observations_errorc              
   C   sv   t  ddd¡d d …d f }t  d¡}t ¡ D ]D\}}d|› �}tjt|d�� | j||d||d d� W 5 Q R X q,d S )Nr   r   r%   z`degree` should not be below r{   rA   )rC   r/   r   )	r   rs   ry   r	   Úitemsr}   ZwarnsÚWarningrG   )rI   r   r€   r/   Údegr|   r   r   r   Útest_degree_warningp  s    

z(_TestRBFInterpolator.test_degree_warningc              	   C   sb   t  ddgddgddgg¡}t  dddg¡}d}tjt|d�� | j||dd�|ƒ W 5 Q R X d S )NrD   rT   rA   zdoes not have full column rankr{   rŒ   rO   )r   rc   r}   r~   r   rG   rƒ   r   r   r   Útest_rank_errorx  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linearrO   )r   ry   r†   rG   r   )rI   Údimr   r€   Úfr   r   r   Útest_single_point�  s
    
z&_TestRBFInterpolator.test_single_pointc                 C   sp   t ddtj d¡d�}d| d¡ }d| d¡ }t|ƒ}|  ||¡}||ƒ}t t |¡¡|ƒ}t	||ƒ d S )Nr   Fl   eä r&   r   r@   )
r   r   r)   r*   r   rG   ÚpickleÚloadsÚdumpsr   )rI   r3   r   rJ   r   ra   rK   rL   r   r   r   Útest_pickleableŠ  s    z$_TestRBFInterpolator.test_pickleableN)!Ú__name__Ú
__module__Ú__qualname__r}   ÚmarkÚparametrizeÚsortedr   rM   rN   r   rS   rZ   Zslowrb   re   rh   rn   ro   rv   rz   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 ||ŽS )N©r   ©rI   r\   r]   r   r   r   rG   �  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   rr   ©Zrcondr   rE   rF   )r   r   r)   r*   r   rG   r   r.   r,   Úlstsqr   ©rI   r3   r   rr   r   rJ   r   rK   r6   rX   rL   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   rE   rF   )r   r   r)   r*   r#   rG   r   r.   r,   r¦   r   r§   r   r   r   Útest_smoothing_limit_2d¹  s$    

 ýü

z8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_2dN)rš   r›   rœ   rG   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 ||ddi—ŽS )NÚ	neighborsrq   r¡   r¢   r   r   r   rG   Õ  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$   rq   r   rE   rF   )r   r   r)   r*   r#   rG   r   ÚqueryÚappendr   r   )rI   r3   r   rJ   r   rK   rL   ÚtreeÚxir4   Znbrr   r   r   Ú#test_equivalent_to_rbf_interpolatorØ  s    

&zBTestRBFInterpolatorNeighbors20.test_equivalent_to_rbf_interpolatorN©rš   r›   rœ   rG   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 ||dtji—ŽS )Nr«   )r   r   Úinfr¢   r   r   r   rG   î  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@   rE   rF   )r   r   r)   r*   r   rG   r   r   )rI   r3   r   rJ   r   rK   rL   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   r   Zscipy.stats.qmcr   Zscipy.spatialr   Zscipy.interpolate._rbfinterpr   r   r	   r
   r   Zscipy.interpolater   r   r   r#   r:   r�   rž   rŸ   r>   r?   r    rª   r²   r   r   r   r   Ú<module>   s(   
  L7