a
    ReF                     @   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   Z/var/www/sunrise/env/lib/python3.9/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mZ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 )Nr   )r	   getr9   )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/          @:0yE>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&   gd~QJgAjZKr$   r/         @r@   rC   rD   )r   r   r)   r*   r#   r   rE   r   )
rG   r/   r2   Z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>   rQ   r?   r   rR   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   rS   r   r.   rE   r\   setattrr   )rG   ZmonkeypatchrT   r2   r   ZlargeNr   rH   r5   rU   rV   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   ra   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   rg   rh   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}
 qqh|
sJ d S )Nr   r   Fr&   g?g?r       r   r$   rQ   )r$   r?   )rA   	smoothingr/   r   T)
r   r)   r*   r   linspacer   rS   rE   sqrtrg   )rG   r/   rT   r2   ZnoiseZrmse_tolZsmoothing_ranger   r   ri   Zrmse_within_tolro   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>   rQ   r?   r    )r>   g     @@ro   rf   rD   )r   r)   r*   r   r   rS   r   r.   copyzerosrE   r   )rG   rT   r2   r   r   r5   rV   r   Zy_with_outlierro   rj   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   rx   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`rw   r   rp   ru   ry   rz   r{   rE   rG   r   r|   rx   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.rw   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 berw   rs   )r   rp   ru   onesry   rz   r{   rE   )rG   r   r|   ro   rx   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 ofrw   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 specifiedrw   rM   )	r   rp   ru   r   r   ry   rz   r{   rE   )rG   r   r|   r/   rx   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.rw   r~   )rG   r   r   r|   rx   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 requiredrw   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 ]X\}}d| }tjt|d( | j||d||d d W d    q,1 sz0    Y  q,d S )Nr   r   r%   z`degree` should not be below rw   r?   )rA   r/   r   )	r   rp   ru   r	   itemsry   ZwarnsWarningrE   )rG   r   r|   r/   degrx   r   r   r   test_degree_warningp  s    

z(_TestRBFInterpolator.test_degree_warningc                 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   rQ   r?   )rQ   rQ   rQ   zdoes not have full column rankrw   r   rM   )r   r`   ry   rz   r   rE   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linearrM   )r   ru   r   rE   r   )rG   Z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   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__ry   markparametrizesortedr   rK   rL   r   rP   rW   Zslowr_   rb   re   rk   rl   rr   rv   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   rY   rZ   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   ro   Zrcondr   rC   rD   )r   r   r)   r*   r   rE   r   r.   r,   lstsqr   rG   r2   r   ro   r   rH   r   rI   r5   rU   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	neighborsrn   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$   rn   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   ry   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#   r9   r   r   r   r<   r=   r   r   r   r   r   r   r   <module>   s(   
  L7