
    _MhJ                     b   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	 Zd
 Zd Zd Zej                            d ee                    d             Z G d d          Z G d de          Z G d de          Z  G 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                 b    t          | j        d         |          }t          j        | |          S )N   )r
   shaper   _polynomial_matrix)xdegreepowerss      f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/interpolate/tests/test_rbfinterp.py_vandermonder      s,     agaj&11F0F;;;    c                     | d d df         } dt          j        |            dt          j        d| z            z  z
  dt          j        d| z            z  z   z  }|S )Nr   g
ףp=
@      npexp)r   ys     r   _1d_test_functionr!      sX     	
!!!Q$AbfaRjj1RVBqD\\>)AbfRTllN:;AHr   c                    | d d df         | d d df         }}dt          j        d|z  dz
  dz   dz  d|z  dz
  dz  dz  z
            z  }dt          j        d|z  dz   dz   dz  d|z  dz   dz  z
            z  }d	t          j        d|z  d
z
  dz   dz  d|z  dz
  dz  dz  z
            z  }dt          j        d|z  dz
  dz   d|z  d
z
  dz  z
            z  }||z   |z   |z   }|S )Nr   r   g      ?	      r   1   
   g      ?   r   gɿr   )r   x1x2term1term2term3term4r    s           r   _2d_test_functionr.      s    qqq!tWa1gB26AbDFQ;,q.AbDFQ;q=8999E26AbDFQ;,r/QrT!VRK7888E"&1R46A+a1R46A+a-7888E26AbDFQ;,!B$q&14555E%AHr   c                 p   d}d}dD ]-}t          |dt          j                                                  }t	          |          D ]}d|                    |          z  dz
  }t          j        ||           }t          ||dz
            }	t          j        	                    |	d	          \  }
}|
d d |	j
        d         d f         }|j                            |                              |          }	 t          j                            |           # t          j        j        $ r Y   dS w xY w/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Bs                 r   #_is_conditionally_positive_definiterM   +   s?    
BF   TE	0E0E0G0GHHHv 	 	A#**R.. 1$A"1!V<<AQA&&A9<<
<33DAq
 111agajkk>"B##A	""1%%%%9(   uuuu	  4s   7DD10D1r@   c                 Z    t          j        | d          dz   }t          | |          sJ d S )Nr   )r	   getrM   )r@   rA   s     r   $test_conditionally_positive_definiterQ   J   s7    
 	++a/A.vq9999999r   c                      e Zd Zej                            d ee                    d             Zej                            d ee                    d             Z	ej                            d ee
                    d             Zd Zej        j        d             Zd Zd Zej                            d ee
                    d	             Zej                            d ee
                    d
             Zej                            d ee
                    d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej        j        d             Zd Zd Z d Z!d Z"dS )_TestRBFInterpolatorr@   c                    t          ddt          j                                                  }d|                    d          z  }t	          |          }d|                    d          z  } |                     ||d|          |          } |                     ||d|          |          }t          ||d	
           d S )Nr   Fr2   r   2         ?epsilonr@          @:0yE>atol)r   r   r7   r8   r!   buildr   selfr@   rE   r   r    xitpyitp1yitp2s           r   test_scale_invariance_1dz-_TestRBFInterpolator.test_scale_invariance_1dT   s     QRY-B-B-D-DEEEcjjnna  B<

1aV
<<TBB<

1aV
<<TBBu4000000r   c                    t          ddt          j                                                  }|                    d          }t	          |          }|                    d          } |                     ||d|          |          } |                     ||d|          |          }t          ||d	           d S )
Nr$   Fr2   r0   rV   rW   rY   rZ   r[   )r   r   r7   r8   r.   r]   r   r^   s           r   test_scale_invariance_2dz-_TestRBFInterpolator.test_scale_invariance_2d`   s     QRY-B-B-D-DEEEJJsOOa  zz#<

1aV
<<TBB<

1aV
<<TBBu4000000r   c                 V   t          ddt          j                                                  }d}d}|                    d          }t	          |          }|                    d          }|t
          v rO |                     |||          |          } |                     ||z  |z   ||          ||z  |z             }	nS |                     ||d|	          |          } |                     ||z  |z   |d|z  |	          ||z  |z             }	t          ||	d
           d S )Nr$   Fr2   gd~QJgAjZKr0   r@         @rW   rZ   r[   )r   r   r7   r8   r.   r   r]   r   )
r_   r@   rE   scaleshiftr   r    r`   ra   rb   s
             r   test_extreme_domainsz)_TestRBFInterpolator.test_extreme_domainsl   s\    QRY-B-B-D-DEEEJJsOOa  zz#%%%3DJJq!FJ33D99EDJJ%%    u*u$& &EE
 ADJJq!SJ@@FFEDJJ%%E	    u*u$	& &E 	u4000000r   c                    t           j                            d          }t          dd|          }d}|                    d          }|                    d          }t	          ||          }t	          ||          }|                    dd|j        d	                   }|                    |          }	|                    |          }
 |                     ||	|
          |          }t          |
|d           d S )Nr   r$   Fr2   r   rU           rV   r   r   rZ   r[   )
r   r7   r8   r   r   normalr   r>   r]   r   )r_   rngrE   r   r   r`   rH   Pitppoly_coeffsr    ra   rb   s               r   test_polynomial_reproductionz1_TestRBFInterpolator.test_polynomial_reproduction   s     i##A&&QS111JJrNNzz"~~F##D&))jjc171:66EE+%%/

1a
//55u4000000r   c                 N   t           j                            d          }t          dd|          }d}d}|                    d          }|                    |          }t	          ||          }t	          ||          }	|                    dd	|j        d
                   }
|                    |
          }|	                    |
          }|                     |||          }|j	        fd}|
                    |d|            ||          }t          ||d           d S )Nr   r$   Fr2   r   i	  rU   rm   rV   r   rn   c                  @    |                     d            | i |S )Nr0   )memory_budget)update)argskwargsce_reals     r   _chunk_evaluatorz<_TestRBFInterpolator.test_chunking.<locals>._chunk_evaluator   s,    MMM,,,7D+F+++r   r{   rZ   r[   )r   r7   r8   r   r   ro   r   r>   r]   r{   setattrr   )r_   monkeypatchrp   rE   r   largeNr   r`   rH   rq   rr   r    ra   interpr{   rb   rz   s                   @r   test_chunkingz"_TestRBFInterpolator.test_chunking   s/   
 i##A&&QS111JJrNNzz&!!F##D&))jjc171:66EE+%%Aq00)	, 	, 	, 	, 	, 	F$68HIIItu4000000r   c           
         t          ddt          j                                                  }|                    d          }|                    d          }t          j        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$   Fr2   r0   rO   r   r   )	r   r   r7   r8   arrayr.   r=   r]   r   r_   rE   r   r`   r    ra   rb   yitp3s           r   test_vector_dataz%_TestRBFInterpolator.test_vector_data   s7    QRY-B-B-D-DEEEJJsOOzz#H'**'!!!TTrT'
335 6 667 	
 !

1a  &&&

1a1g&&t,,&

1a1g&&t,,aaadU+++aaadU+++++r   c           	      6   t          ddt          j                                                  }|                    d          }|                    d          }t	          |          dt	          |d d d d df                   z  z   } |                     ||          |          } |                     ||j                  |          } |                     ||j                  |          }t          |j        |           t          |j        |           d S )Nr$   Fr2   r0   y              ?rO   )	r   r   r7   r8   r.   r]   realimagr   r   s           r   test_complex_dataz&_TestRBFInterpolator.test_complex_data   s     QRY-B-B-D-DEEEJJsOOzz#a  2&7!!!TTrT'
&C&C#CC 

1a  &&%

1af%%d++%

1af%%d++
E***
E*****r   c                    t          ddt          j                                                  }d|                    d          z  }d|                    d          z  }t	          |          }t	          |          } |                     ||d|          |          }t          j        ||z
  dz            }|d	k     sJ d S )
Nr   Fr2   r   rU   rh   rW   r$   -C6?)r   r   r7   r8   r!   r]   mean	r_   r@   rE   r   r`   r    ytrueyitpmses	            r   test_interpolation_misfit_1dz1_TestRBFInterpolator.test_interpolation_misfit_1d   s     QRY-B-B-D-DEEEcjjnnBa  !$'';tzz!QFz;;DAAgte|a'((V||||||r   c                 z   t          ddt          j                                                  }|                    d          }|                    d          }t	          |          }t	          |          } |                     ||d|          |          }t          j        ||z
  dz            }|dk     sJ d S )Nr$   Fr2   r0   rh   rW   g-C6*?)r   r   r7   r8   r.   r]   r   r   s	            r   test_interpolation_misfit_2dz1_TestRBFInterpolator.test_interpolation_misfit_2d   s     QRY-B-B-D-DEEEJJsOOzz#a  !$'';tzz!QFz;;DAAgte|a'((V||||||r   c           	         t           j                            d          }t          dd|          }d}d}dt          j        ddd	          z  }d
|                    d          z  }t          |          |                    d|d          z   }t          |          }	d}
|D ][} |                     ||d||          |          }t          j        t          j	        ||	z
  dz                      }||k     rd}
 n\|
sJ d S )Nr   r   Fr2   g?g?r&      r   r0   rm   )r0   rV   )rX   	smoothingr@   r$   T)
r   r7   r8   r   linspacer!   ro   r]   sqrtr   )r_   r@   rp   rE   noisermse_tolsmoothing_ranger   r    r   rmse_within_tolr   ysmoothrmses                 r   test_smoothing_misfitz*_TestRBFInterpolator.test_smoothing_misfit  s/    i##A&&QS111bk"a444cjjooa  3::c5&#A#AA!!$$( 		 		Idjj1#	 !    !	" "G
 727GeOa#78899Dh"&  r   c                    t           j                            d          }t          dd|          }d}|                    d          }t	          ||          }|                    dd|j        d                   }|                    |          }t          j        |          }|d	xx         dz  cc<   t          j	        d
          }	d|	d	<    | 
                    |||	          |          }
t          |
|d           d S )Nr   r   Fr2   r$   rU   rm   rV   r&   )rU   g     @@r   r   r[   )r   r7   r8   r   r   ro   r   r>   copyzerosr]   r   )r_   rp   rE   r   r   rH   rr   r    y_with_outlierr   r   s              r   test_array_smoothingz)_TestRBFInterpolator.test_array_smoothing  s     i##A&&QS111JJrNNF##jjc171:66EE+rc!HUOO		"Atzz!^yzAA!DDad++++++r   c                    t          ddt          j                                                                      d          }t	          |          }t          ddt          j                                                                      d          }d}t          j        t          |          5   |                     ||          |           d d d            d S # 1 swxY w Y   d S )Nr$   Fr2   r&   r   zExpected the second axis of `x`match)	r   r   r7   r8   r.   pytestraises
ValueErrorr]   )r_   r    dr   r   s        r   $test_inconsistent_x_dimensions_errorz9_TestRBFInterpolator.test_inconsistent_x_dimensions_error0  s    1u29+@+@+B+BCCCJJ2NNa  1u29+@+@+B+BCCCJJ2NN1]:U333 	  	 DJJq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   / CC #C c                    t          j        ddd          d d d f         }t          j        d          }d}t          j        t
          |          5  |                     ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r1   zExpected the first axis of `d`r   r   r   r   r   r   r   r]   r_   r    r   r   s       r    test_inconsistent_d_length_errorz5_TestRBFInterpolator.test_inconsistent_d_length_error:  s    K1a  D)HQKK0]:U333 	 	JJq!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A66A:=A:c                     t          j        ddd          }t          j        d          }d}t          j        t
          |          5  |                     ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r1   z"`y` must be a 2-dimensional array.r   r   r   s       r   test_y_not_2d_errorz(_TestRBFInterpolator.test_y_not_2d_errorA  s    K1a  HQKK4]:U333 	 	JJq!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A,,A03A0c                 2   t          j        ddd          d d d f         }t          j        d          }t          j        d          }d}t	          j        t          |          5  |                     |||           d d d            d S # 1 swxY w Y   d S )Nr   r   r1   zExpected `smoothing` to ber   r   )r   r   r   onesr   r   r   r]   )r_   r    r   r   r   s        r   (test_inconsistent_smoothing_length_errorz=_TestRBFInterpolator.test_inconsistent_smoothing_length_errorH  s    K1a  D)HQKKGAJJ	,]:U333 	2 	2JJq!yJ111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   &BBBc                 
   t          j        ddd          d d d f         }t          j        d          }d}t          j        t
          |          5  |                     ||d           d d d            d S # 1 swxY w Y   d S )Nr   r   r1   z`kernel` must be one ofr   testrg   r   r   s       r   test_invalid_kernel_name_errorz3_TestRBFInterpolator.test_invalid_kernel_name_errorP  s    K1a  D)HQKK)]:U333 	, 	,JJq!FJ+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   A88A<?A<c                 0   t          j        ddd          d d d f         }t          j        d          }t          D ]Y}|t          v rd}t          j        t          |          5  |                     |||           d d d            n# 1 swxY w Y   Zd S )Nr   r   r1   z`epsilon` must be specifiedr   rg   )	r   r   r   r   r   r   r   r   r]   )r_   r    r   r@   r   s        r    test_epsilon_not_specified_errorz5_TestRBFInterpolator.test_epsilon_not_specified_errorW  s    K1a  D)HQKK  	0 	0F)))1Ez777 0 0

1a
///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	0 	0s   %B

B	B	c                 D   t          j        ddd          d d d f         }t          j        ddd          }t          j        d          }d}t          j        t
          |          5   |                     ||          |           d d d            d S # 1 swxY w Y   d S )Nr   r   r1   z"`x` must be a 2-dimensional array.r   r   )r_   r    r   r   r   s        r   test_x_not_2d_errorz(_TestRBFInterpolator.test_x_not_2d_errorb  s    K1a  D)K1a  HQKK4]:U333 	  	 DJJq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   ( BBBc                 
   t          j        ddd          d d d f         }t          j        d          }d}t          j        t
          |          5  |                     ||d           d d d            d S # 1 swxY w Y   d S )Nr   r   z#At least 2 data points are requiredr   thin_plate_splinerg   r   r   s       r   "test_not_enough_observations_errorz7_TestRBFInterpolator.test_not_enough_observations_errorj  s    K1a  D)HQKK5]:U333 	9 	9JJq!$7J888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9r   c           
      V   t          j        ddd          d d d f         }t          j        d          }t          j                    D ]`\  }}|dk    rUd| }t          j        t          |          5  |                     ||d||dz
             d d d            n# 1 swxY w Y   ad S )Nr   r   r1   z`degree` should not be below r   rV   rX   r@   r   )	r   r   r   r	   itemsr   warnsWarningr]   )r_   r    r   r@   degr   s         r   test_degree_warningz(_TestRBFInterpolator.test_degree_warningq  s   K1a  D)HQKK.466 	O 	OKFCaxx===\'777 O OJJq!SAJNNNO O O O O O O O O O O O O O O		O 	Os   3BB!	$B!	c                     t          j        ddd          d d d f         }t          j        d          }t          j                    D ]\  }}|                     ||d|d            d S )Nr   r   r1   rV   rO   r   )r   r   r   r	   r   r]   )r_   r    r   r@   rF   s        r   test_minus_one_degreez*_TestRBFInterpolator.test_minus_one_degree|  sx    K1a  D)HQKK,244 	D 	DIFAJJq!SJCCCC	D 	Dr   c                    t          j        ddgddgddgg          }t          j        g d          }d}t          j        t          |          5   |                     ||d          |           d d d            d S # 1 swxY w Y   d S )	NrY   rm   rV   )rm   rm   rm   zdoes not have full column rankr   r   rg   )r   r   r   r   r   r]   r   s       r   test_rank_errorz$_TestRBFInterpolator.test_rank_error  s     HsCj3*sCj9::H___%%0];e444 	< 	<8DJJq!$7J88;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   "B  BBc                     dD ]]}t          j        d|f          }t          j        d          } |                     ||d          |          }t	          ||           ^d S )N)r   r$   r   r   )r   linearrg   )r   r   r   r]   r   )r_   dimr    r   fs        r   test_single_pointz&_TestRBFInterpolator.test_single_point  sq      	" 	"C!S""AA1

1a
11!44AAq!!!!		" 	"r   c                    t          ddt          j                            d                    }d|                    d          z  }d|                    d          z  }t	          |          }|                     ||          } ||          } t          j        t          j        |                    |          }t          ||d           d S )	Nr   Fl   e r2   r   rU   gؗҜ<r[   )
r   r   r7   r8   r!   r]   pickleloadsdumpsr   )r_   rE   r   r`   r    r   ra   rb   s           r   test_pickleablez$_TestRBFInterpolator.test_pickleable  s     QRY-B-B:-N-NOOOcjjnnBa  Aq!!t2V\&1122488u5111111r   N)#__name__
__module____qualname__r   markparametrizesortedr   rc   re   r   rk   rs   slowr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   thread_unsafer   r   r   r   r    r   r   rS   rS   S   s       [Xvv.>'?'?@@	1 	1 A@	1 [Xvv.>'?'?@@	1 	1 A@	1 [Xvvj'9'9::1 1 ;:161 1 1, [1 1 1>, , ,$+ + +" [Xvvj'9'9::  ;: [Xvvj'9'9::  ;: [Xvvj'9'9::  ;:6, , ,&         2 2 2, , ,	0 	0 	0     9 9 9 [O O OD D D< < <" " "2 2 2 2 2r   rS   c                        e Zd Zd Zd Zd ZdS ) TestRBFInterpolatorNeighborsNonec                     t          |i |S Nr   r_   rx   ry   s      r   r]   z&TestRBFInterpolatorNeighborsNone.build  s    ////r   c                    t          ddt          j                                                  }d}d}d|                    d          z  }d|                    d          z  }t	          |          } |                     ||||          |          }t          ||          }t          ||          }	|	                    t          j        	                    ||d           d	                   }
t          ||
d
           d S )Nr   Fr2   r       חArU   r   r   rcondr   rZ   r[   )r   r   r7   r8   r!   r]   r   r>   r;   lstsqr   r_   rE   r   r   r   r`   r    ra   rH   rq   rb   s              r   test_smoothing_limit_1dz8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_1d  s     QRY-B-B-D-DEEE	cjjnnBa  

q    	  F##D&))AT::1=>>u4000000r   c                    t          ddt          j                                                  }d}d}|                    d          }|                    d          }t	          |          } |                     ||||          |          }t          ||          }t          ||          }	|	                    t          j        	                    ||d           d	                   }
t          ||
d
           d S )Nr$   Fr2   r   r   r0   r   r   r   rZ   r[   )r   r   r7   r8   r.   r]   r   r>   r;   r   r   r   s              r   test_smoothing_limit_2dz8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_2d  s     QRY-B-B-D-DEEE	JJsOOzz#a  

q    	  F##D&))AT::1=>>u4000000r   N)r   r   r   r]   r   r   r   r   r   r   r     sA        0 0 01 1 121 1 1 1 1r   r   c                        e Zd Zd Zd Zd ZdS )TestRBFInterpolatorNeighbors20c                 "    t          |i |ddiS )N	neighborsr   r   r   s      r   r]   z$TestRBFInterpolatorNeighbors20.build  s     ==="====r   c           	         t          ddt          j                                                  }|                    d          }|                    d          }t	          |          } |                     ||          |          }g }t          |          }|D ]_}|                    |d          \  }	}
|                     t          ||
         ||
                   |d                    d                    `t          ||d           d S )	Nr$   Fr2   r0   r   r   rZ   r[   )r   r   r7   r8   r.   r]   r   queryappendr   r   )r_   rE   r   r`   r    ra   rb   treexirF   nbrs              r   #test_equivalent_to_rbf_interpolatorzBTestRBFInterpolatorNeighbors20.test_equivalent_to_rbf_interpolator  s    QRY-B-B-D-DEEEJJsOOzz#a   

1a  &&qzz 	G 	GBZZB''FAsLL83388DBB1EFFFFu4000000r   c                 ,   t          ddt          j                            d                    }|                    d          }|                    d          }t	          |          }|                     ||          }d }t          d|||           d S )Nr$   Fr   r2   r0   c                      ||           d S r   r   )rF   r   xps      r   	worker_fnzBTestRBFInterpolatorNeighbors20.test_concurrency.<locals>.worker_fn   s    F2JJJJJr   r&   )r   r   r7   r8   r.   r]   r   )r_   rE   r   r`   r    r   r   s          r   test_concurrencyz/TestRBFInterpolatorNeighbors20.test_concurrency  s     QRY-B-B1-E-EFFFJJsOOzz#a  Aq!!	 	 	 	 Ivt<<<<<r   N)r   r   r   r]   r   r   r   r   r   r   r     sA        > > >1 1 1$= = = = =r   r   c                       e Zd Zd Zd ZdS )TestRBFInterpolatorNeighborsInfc                 6    t          |i |dt          j        iS )Nr   )r   r   infr   s      r   r]   z%TestRBFInterpolatorNeighborsInf.build	  s"    AAA"&AAAAr   c                 t   t          ddt          j                                                  }d|                    d          z  }d|                    d          z  }t	          |          } |                     ||          |          } t          ||          |          }t          ||d           d S )Nr   Fr2   r   rU   rZ   r[   )r   r   r7   r8   r!   r]   r   r   )r_   rE   r   r`   r    ra   rb   s          r   r   zCTestRBFInterpolatorNeighborsInf.test_equivalent_to_rbf_interpolator  s    QRY-B-B-D-DEEEcjjnnBa   

1a  &&%1%%d++u4000000r   N)r   r   r   r]   r   r   r   r   r  r    s5        B B B
1 
1 
1 
1 
1r   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.   rM   r   r   r   rQ   rS   r   r   r  r   r   r   <module>r     s	         $ $ $ $ $ $ 1 1 1 1 1 1 " " " " " " ! ! ! ! ! !              1 0 0 0 0 0 9 9 9 9 9 9< < <  	 	 	  > 66*#5#566: : 76:Q2 Q2 Q2 Q2 Q2 Q2 Q2 Q2h
41 41 41 41 41'; 41 41 41n%= %= %= %= %=%9 %= %= %=P1 1 1 1 1&F 1 1 1 1 1r   