3737
3838X = np .random .RandomState (0 ).normal (0 , 1 , (5 , 2 ))
3939Y = np .random .RandomState (0 ).normal (0 , 1 , (6 , 2 ))
40+ # Set shared test data as read-only to avoid unintentional in-place
41+ # modifications that would introduce side-effects between tests.
42+ X .flags .writeable = False
43+ Y .flags .writeable = False
4044
4145kernel_rbf_plus_white = RBF (length_scale = 2.0 ) + WhiteKernel (noise_level = 3.0 )
4246kernels = [
7074@pytest .mark .parametrize ("kernel" , kernels )
7175def test_kernel_gradient (kernel ):
7276 # Compare analytic and numeric gradient of kernels.
77+ kernel = clone (kernel ) # make tests independent of one-another
7378 K , K_gradient = kernel (X , eval_gradient = True )
7479
7580 assert K_gradient .shape [0 ] == X .shape [0 ]
@@ -97,6 +102,7 @@ def eval_kernel_for_theta(theta):
97102)
98103def test_kernel_theta (kernel ):
99104 # Check that parameter vector theta of kernel is set correctly.
105+ kernel = clone (kernel ) # make tests independent of one-another
100106 theta = kernel .theta
101107 _ , K_gradient = kernel (X , eval_gradient = True )
102108
@@ -154,6 +160,7 @@ def test_kernel_theta(kernel):
154160 ],
155161)
156162def test_auto_vs_cross (kernel ):
163+ kernel = clone (kernel ) # make tests independent of one-another
157164 # Auto-correlation and cross-correlation should be consistent.
158165 K_auto = kernel (X )
159166 K_cross = kernel (X , X )
@@ -162,6 +169,7 @@ def test_auto_vs_cross(kernel):
162169
163170@pytest .mark .parametrize ("kernel" , kernels )
164171def test_kernel_diag (kernel ):
172+ kernel = clone (kernel ) # make tests independent of one-another
165173 # Test that diag method of kernel returns consistent results.
166174 K_call_diag = np .diag (kernel (X ))
167175 K_diag = kernel .diag (X )
@@ -182,12 +190,12 @@ def test_kernel_anisotropic():
182190 kernel = 3.0 * RBF ([0.5 , 2.0 ])
183191
184192 K = kernel (X )
185- X1 = np . array ( X )
193+ X1 = X . copy ( )
186194 X1 [:, 0 ] *= 4
187195 K1 = 3.0 * RBF (2.0 )(X1 )
188196 assert_almost_equal (K , K1 )
189197
190- X2 = np . array ( X )
198+ X2 = X . copy ( )
191199 X2 [:, 1 ] /= 4
192200 K2 = 3.0 * RBF (0.5 )(X2 )
193201 assert_almost_equal (K , K2 )
@@ -202,13 +210,15 @@ def test_kernel_anisotropic():
202210 "kernel" , [kernel for kernel in kernels if kernel .is_stationary ()]
203211)
204212def test_kernel_stationary (kernel ):
213+ kernel = clone (kernel ) # make tests independent of one-another
205214 # Test stationarity of kernels.
206215 K = kernel (X , X + 1 )
207216 assert_almost_equal (K [0 , 0 ], np .diag (K ))
208217
209218
210219@pytest .mark .parametrize ("kernel" , kernels )
211220def test_kernel_input_type (kernel ):
221+ kernel = clone (kernel ) # make tests independent of one-another
212222 # Test whether kernels is for vectors or structured data
213223 if isinstance (kernel , Exponentiation ):
214224 assert kernel .requires_vector_input == kernel .kernel .requires_vector_input
@@ -237,6 +247,7 @@ def check_hyperparameters_equal(kernel1, kernel2):
237247
238248@pytest .mark .parametrize ("kernel" , kernels )
239249def test_kernel_clone (kernel ):
250+ kernel = clone (kernel ) # make tests independent of one-another
240251 # Test that sklearn's clone works correctly on kernels.
241252 kernel_cloned = clone (kernel )
242253
@@ -254,6 +265,7 @@ def test_kernel_clone(kernel):
254265
255266@pytest .mark .parametrize ("kernel" , kernels )
256267def test_kernel_clone_after_set_params (kernel ):
268+ kernel = clone (kernel ) # make tests independent of one-another
257269 # This test is to verify that using set_params does not
258270 # break clone on kernels.
259271 # This used to break because in kernels such as the RBF, non-trivial
@@ -312,6 +324,7 @@ def test_matern_kernel():
312324
313325@pytest .mark .parametrize ("kernel" , kernels )
314326def test_kernel_versus_pairwise (kernel ):
327+ kernel = clone (kernel ) # make tests independent of one-another
315328 # Check that GP kernels can also be used as pairwise kernels.
316329
317330 # Test auto-kernel
@@ -330,6 +343,7 @@ def test_kernel_versus_pairwise(kernel):
330343
331344@pytest .mark .parametrize ("kernel" , kernels )
332345def test_set_get_params (kernel ):
346+ kernel = clone (kernel ) # make tests independent of one-another
333347 # Check that set_params()/get_params() is consistent with kernel.theta.
334348
335349 # Test get_params()
@@ -372,6 +386,7 @@ def test_set_get_params(kernel):
372386
373387@pytest .mark .parametrize ("kernel" , kernels )
374388def test_repr_kernels (kernel ):
389+ kernel = clone (kernel ) # make tests independent of one-another
375390 # Smoke-test for repr in kernels.
376391
377392 repr (kernel )
0 commit comments