Coverage for nilearn/decoding/tests/_testing.py: 0%
33 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-16 12:32 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-16 12:32 +0200
1"""Test utilities for decoding module."""
3import numpy as np
4from scipy import linalg
5from scipy.ndimage import gaussian_filter
8def create_graph_net_simulation_data(
9 snr=1.0,
10 n_samples=200,
11 size=8,
12 n_points=10,
13 random_state=42,
14 task="regression",
15 smooth_X=1,
16):
17 """Generate graph net simulation data."""
18 generator = np.random.default_rng(random_state)
19 # Coefs
20 w = np.zeros((size, size, size))
21 for _ in range(n_points):
22 point = (
23 generator.integers(0, size),
24 generator.integers(0, size),
25 generator.integers(0, size),
26 )
27 w[point] = 1.0
28 mask = np.ones((size, size, size), dtype=bool)
29 w = gaussian_filter(w, sigma=1)
30 w = w[mask]
32 # Generate smooth background noise
33 XX = generator.standard_normal((n_samples, size, size, size))
34 noise = []
35 for i in range(n_samples):
36 Xi = gaussian_filter(XX[i, :, :, :], smooth_X)
37 Xi = Xi[mask]
38 noise.append(Xi)
39 noise = np.array(noise)
41 # Generate the signal y
42 if task == "regression":
43 y = generator.standard_normal(n_samples)
44 elif task == "classification":
45 y = np.ones(n_samples)
46 y[::2] = -1
47 X = np.dot(y[:, np.newaxis], w[np.newaxis])
48 norm_noise = linalg.norm(X, 2) / np.exp(snr / 20.0)
49 noise_coef = norm_noise / linalg.norm(noise, 2)
50 noise *= noise_coef
51 snr = 20 * np.log(linalg.norm(X, 2) / linalg.norm(noise, 2))
53 # Mixing of signal + noise and splitting into train/test
54 X += noise
55 X -= X.mean(axis=-1)[:, np.newaxis]
56 X /= X.std(axis=-1)[:, np.newaxis]
58 return X, y, w, mask