diff --git a/bsi_zoo/estimators.py b/bsi_zoo/estimators.py index 25447c3..812b517 100644 --- a/bsi_zoo/estimators.py +++ b/bsi_zoo/estimators.py @@ -75,7 +75,7 @@ def _compute_reginv2(sing, n_nzero, lambda2): reginv = np.zeros_like(sing) sing = sing[:n_nzero] with np.errstate(invalid="ignore"): # if lambda2==0 - reginv[:n_nzero] = np.where(sing > 0, sing / (sing ** 2 + lambda2), 0) + reginv[:n_nzero] = np.where(sing > 0, sing / (sing**2 + lambda2), 0) return reginv @@ -119,7 +119,7 @@ def _compute_eloreta_kernel(L, *, lambda2, n_orient, whitener, loose=1.0, max_it # Outer product R_prior = source_std.reshape(n_src, 1, 3) * source_std.reshape(n_src, 3, 1) else: - R_prior = source_std ** 2 + R_prior = source_std**2 # The following was adapted under BSD license by permission of Guido Nolte if force_equal or n_orient == 1: @@ -207,7 +207,7 @@ def _solve_reweighted_lasso( n_positions = L_w.shape[1] // n_orient lc = np.empty(n_positions) for j in range(n_positions): - L_j = L_w[:, (j * n_orient): ((j + 1) * n_orient)] + L_j = L_w[:, (j * n_orient) : ((j + 1) * n_orient)] lc[j] = np.linalg.norm(np.dot(L_j.T, L_j), ord=2) coef_, active_set, _ = _mixed_norm_solver_bcd( y, @@ -253,7 +253,7 @@ def _gamma_map_opt( Parameters ---------- - M : array, shape=(n_sensors, n_times) + : array, shape=(n_sensors, n_times) Observation. G : array, shape=(n_sensors, n_sources) Forward operator. @@ -341,7 +341,7 @@ def denom_fun(x): if update_mode == 1: # MacKay fixed point update (10) in [1] - numer = gammas ** 2 * np.mean((A * A.conj()).real, axis=1) + numer = gammas**2 * np.mean((A * A.conj()).real, axis=1) denom = gammas * np.sum(G * CMinvG, axis=0) elif update_mode == 2: # modified MacKay fixed point update (11) in [1] @@ -350,7 +350,7 @@ def denom_fun(x): elif update_mode == 3: # Expectation Maximization (EM) update denom = None - numer = gammas ** 2 * np.mean((A * A.conj()).real, axis=1) + gammas * ( + numer = gammas**2 * np.mean((A * A.conj()).real, axis=1) + gammas * ( 1 - gammas * np.sum(G * CMinvG, axis=0) ) else: @@ -531,6 +531,17 @@ def gprime(w): return x +def norm_l2inf(A, n_orient, copy=True): + from math import sqrt + + """L2-inf norm.""" + if A.size == 0: + return 0.0 + if copy: + A = A.copy() + return sqrt(np.max(groups_norm2(A, n_orient))) + + def iterative_L1(L, y, alpha=0.2, n_orient=1, max_iter=1000, max_iter_reweighting=10): """Iterative Type-I estimator with L1 regularizer. @@ -578,9 +589,18 @@ def gprime(w): grp_norms = np.sqrt(groups_norm2(w.copy(), n_orient)) return np.repeat(grp_norms, n_orient).ravel() + eps - alpha_max = abs(L.T.dot(y)).max() / len(L) + if n_orient == 1: + alpha_max = abs(L.T.dot(y)).max() / len(L) + else: + n_dip_per_pos = 3 + alpha_max = norm_l2inf(np.dot(L.T, y), n_dip_per_pos) + alpha = alpha * alpha_max + # eigen_fields, sing, eigen_leads = _safe_svd(L, full_matrices=False) + + # y->M + # L->gain x = _solve_reweighted_lasso( L, y, alpha, n_orient, weights, max_iter, max_iter_reweighting, gprime ) @@ -600,6 +620,7 @@ def iterative_L2(L, y, alpha=0.2, n_orient=1, max_iter=1000, max_iter_reweightin for solving the following problem: x^(k+1) <-- argmin_x ||y - Lx||^2_Fro + alpha * sum_i w_i^(k)|x_i| + Parameters ---------- L : array, shape (n_sensors, n_sources) @@ -634,7 +655,12 @@ def gprime(w): grp_norm2 = groups_norm2(w.copy(), n_orient) return np.repeat(grp_norm2, n_orient).ravel() + eps - alpha_max = abs(L.T.dot(y)).max() / len(L) + if n_orient == 1: + alpha_max = abs(L.T.dot(y)).max() / len(L) + else: + n_dip_per_pos = 3 + alpha_max = norm_l2inf(np.dot(L.T, y), n_dip_per_pos) + alpha = alpha * alpha_max x = _solve_reweighted_lasso( @@ -693,7 +719,12 @@ def g(w): def gprime(w): return 2.0 * np.repeat(g(w), n_orient).ravel() - alpha_max = abs(L.T.dot(y)).max() / len(L) + if n_orient == 1: + alpha_max = abs(L.T.dot(y)).max() / len(L) + else: + n_dip_per_pos = 3 + alpha_max = norm_l2inf(np.dot(L.T, y), n_dip_per_pos) + alpha = alpha * alpha_max x = _solve_reweighted_lasso( @@ -778,7 +809,12 @@ def iterative_L1_typeII( n_sensors, n_sources = L.shape weights = np.ones(n_sources) - alpha_max = abs(L.T.dot(y)).max() / len(L) + if n_orient == 1: + alpha_max = abs(L.T.dot(y)).max() / len(L) + else: + n_dip_per_pos = 3 + alpha_max = norm_l2inf(np.dot(L.T, y), n_dip_per_pos) + alpha = alpha * alpha_max if isinstance(cov, float): @@ -877,7 +913,12 @@ def iterative_L2_typeII( n_sensors, n_sources = L.shape weights = np.ones(n_sources) - alpha_max = abs(L.T.dot(y)).max() / len(L) + if n_orient == 1: + alpha_max = abs(L.T.dot(y)).max() / len(L) + else: + n_dip_per_pos = 3 + alpha_max = norm_l2inf(np.dot(L.T, y), n_dip_per_pos) + alpha = alpha * alpha_max if isinstance(cov, float): @@ -904,7 +945,7 @@ def epsilon_update(L, weights, cov): # w_mat(weights) # - np.multiply(w_mat(weights ** 2), np.diag((L_T @ sigmaY_inv) @ L)) # ) - return weights_ - (weights_ ** 2) * ((L_T @ sigmaY_inv) * L_T).sum(axis=1) + return weights_ - (weights_**2) * ((L_T @ sigmaY_inv) * L_T).sum(axis=1) def g_coef(coef): return groups_norm2(coef.copy(), n_orient) diff --git a/bsi_zoo/run_benchmark.py b/bsi_zoo/run_benchmark.py index 0fc52c4..a8bd2d9 100644 --- a/bsi_zoo/run_benchmark.py +++ b/bsi_zoo/run_benchmark.py @@ -18,11 +18,13 @@ from bsi_zoo.metrics import euclidean_distance, mse, emd, f1, reconstructed_noise from bsi_zoo.config import get_leadfield_path -n_jobs = 30 -nruns = 10 -spatial_cv = [False, True] -subjects = ["CC120264", "CC120313", "CC120309"] -# "CC120166", "CC120313", +n_jobs = 20 +nruns = 1 +# spatial_cv = [False, True] +spatial_cv = [False] + +# +subjects = ["CC120166", "CC120264", "CC120313", "CC120309"] metrics = [ euclidean_distance, mse, @@ -32,101 +34,19 @@ ] # list of metric functions here nnzs = [1, 2, 3, 5] alpha_SNR = [0.99, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.01] -# estimator_alphas = [ -# 0.01, -# 0.01544452, -# 0.02385332, -# 0.03684031, -# 0.0568981, -# 0.08787639, -# 0.13572088, -# 0.2096144, -# ] # logspaced -estimator_alphas = np.logspace(0, -2, 20)[1:] +estimator_alphas_I = np.logspace(0, -2, 20)[1:] +estimator_alphas_II = [0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 10000, 100000] memory = Memory(".") for do_spatial_cv in spatial_cv: for subject in subjects: - """Fixed orientation parameters for the benchmark""" - - orientation_type = "fixed" - data_args_I = { - # "n_sensors": [50], - "n_times": [10], - # "n_sources": [200], - "nnz": nnzs, - "cov_type": ["diag"], - "path_to_leadfield": [get_leadfield_path(subject, type=orientation_type)], - "orientation_type": [orientation_type], - "alpha": alpha_SNR, # this is actually SNR - } - - data_args_II = { - # "n_sensors": [50], - "n_times": [10], - # "n_sources": [200], - "nnz": nnzs, - "cov_type": ["full"], - "path_to_leadfield": [get_leadfield_path(subject, type=orientation_type)], - "orientation_type": [orientation_type], - "alpha": alpha_SNR, # this is actually SNR - } - - estimators = [ - (fake_solver, data_args_I, {"alpha": estimator_alphas}, {}), - # (eloreta, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_L1, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_L2, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_sqrt, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_L1_typeII, data_args_II, {"alpha": estimator_alphas}, {}), - # (iterative_L2_typeII, data_args_II, {"alpha": estimator_alphas}, {}), - # (gamma_map, data_args_II, {"alpha": estimator_alphas}, {"update_mode": 1}), - # (gamma_map, data_args_II, {"alpha": estimator_alphas}, {"update_mode": 2}), - # (gamma_map, data_args_II, {"alpha": estimator_alphas}, {"update_mode": 3}), - ] - - df_results = [] - for estimator, data_args, estimator_args, estimator_extra_params in estimators: - benchmark = Benchmark( - estimator, - subject, - metrics, - data_args, - estimator_args, - random_state=42, - memory=memory, - n_jobs=n_jobs, - do_spatial_cv=do_spatial_cv, - estimator_extra_params=estimator_extra_params, - ) - results = benchmark.run(nruns=nruns) - df_results.append(results) - # save results - data_path = Path("bsi_zoo/data") - data_path.mkdir(exist_ok=True) - FILE_NAME = f"{estimator}_{subject}_{data_args['orientation_type'][0]}_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" - results.to_pickle(data_path / FILE_NAME) - - - df_results = pd.concat(df_results, axis=0) - - data_path = Path("bsi_zoo/data") - data_path.mkdir(exist_ok=True) - if do_spatial_cv: - FILE_NAME = f"benchmark_data_{subject}_{data_args['orientation_type'][0]}_spatialCV_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" - else: - FILE_NAME = f"benchmark_data_{subject}_{data_args['orientation_type'][0]}_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" - df_results.to_pickle(data_path / FILE_NAME) - - print(df_results) - - # """ Free orientation parameters for the benchmark """ + # """Fixed orientation parameters for the benchmark""" - # orientation_type = "free" + # orientation_type = "fixed" # data_args_I = { - # "n_sensors": [50], + # # "n_sensors": [50], # "n_times": [10], - # "n_sources": [200], + # # "n_sources": [200], # "nnz": nnzs, # "cov_type": ["diag"], # "path_to_leadfield": [get_leadfield_path(subject, type=orientation_type)], @@ -135,9 +55,9 @@ # } # data_args_II = { - # "n_sensors": [50], + # # "n_sensors": [50], # "n_times": [10], - # "n_sources": [200], + # # "n_sources": [200], # "nnz": nnzs, # "cov_type": ["full"], # "path_to_leadfield": [get_leadfield_path(subject, type=orientation_type)], @@ -146,16 +66,16 @@ # } # estimators = [ - # (fake_solver, data_args_I, {"alpha": estimator_alphas}, {}), - # (eloreta, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_L1, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_L2, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_sqrt, data_args_I, {"alpha": estimator_alphas}, {}), - # (iterative_L1_typeII, data_args_II, {"alpha": estimator_alphas}, {}), - # (iterative_L2_typeII, data_args_II, {"alpha": estimator_alphas}, {}), - # # (gamma_map, data_args_II, {"alpha": estimator_alphas}, {"update_mode": 1}), - # (gamma_map, data_args_II, {"alpha": estimator_alphas}, {"update_mode": 2}), - # # (gamma_map, data_args_II, {"alpha": estimator_alphas}, {"update_mode": 3}), + # (fake_solver, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (eloreta, data_args_I, {"alpha": estimator_alphas_II}, {}), + # (iterative_L1, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (iterative_L2, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (iterative_sqrt, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (iterative_L1_typeII, data_args_II, {"alpha": estimator_alphas_I}, {}), + # (iterative_L2_typeII, data_args_II, {"alpha": estimator_alphas_I}, {}), + # # (gamma_map, data_args_II, {"alpha": estimator_alphas_I}, {"update_mode": 1}), + # (gamma_map, data_args_II, {"alpha": estimator_alphas_II}, {"update_mode": 2}), + # # (gamma_map, data_args_II, {"alpha": estimator_alphas_I}, {"update_mode": 3}), # ] # df_results = [] @@ -174,15 +94,19 @@ # ) # results = benchmark.run(nruns=nruns) # df_results.append(results) - # # save results - # data_path = Path("bsi_zoo/data") + # # save results + # data_path = Path("bsi_zoo/data/updated_alpha_grid") # data_path.mkdir(exist_ok=True) - # FILE_NAME = f"{estimator}_{subject}_{data_args['orientation_type'][0]}_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" + # if do_spatial_cv: + # FILE_NAME = f"{estimator}_{subject}_{data_args['orientation_type'][0]}_spatialCV_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" + # else: + # FILE_NAME = f"{estimator}_{subject}_{data_args['orientation_type'][0]}_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" # results.to_pickle(data_path / FILE_NAME) + # df_results = pd.concat(df_results, axis=0) - # data_path = Path("bsi_zoo/data") + # data_path = Path("bsi_zoo/data/ramen") # data_path.mkdir(exist_ok=True) # if do_spatial_cv: # FILE_NAME = f"benchmark_data_{subject}_{data_args['orientation_type'][0]}_spatialCV_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" @@ -191,3 +115,89 @@ # df_results.to_pickle(data_path / FILE_NAME) # print(df_results) + + """ Free orientation parameters for the benchmark """ + + orientation_type = "free" + data_args_I = { + "n_sensors": [50], + "n_times": [10], + "n_sources": [200], + "nnz": nnzs, + "cov_type": ["diag"], + "path_to_leadfield": [get_leadfield_path(subject, type=orientation_type)], + "orientation_type": [orientation_type], + "alpha": alpha_SNR, # this is actually SNR + } + + data_args_II = { + "n_sensors": [50], + "n_times": [10], + "n_sources": [200], + "nnz": nnzs, + "cov_type": ["full"], + "path_to_leadfield": [get_leadfield_path(subject, type=orientation_type)], + "orientation_type": [orientation_type], + "alpha": alpha_SNR, # this is actually SNR + } + + if spatial_cv: + # currently no support for type II methods + estimators = [ + # (fake_solver, data_args_I, {"alpha": estimator_alphas_I}, {}), + (iterative_L1, data_args_I, {"alpha": estimator_alphas_I}, {}), + (iterative_L2, data_args_I, {"alpha": estimator_alphas_I}, {}), + (iterative_sqrt, data_args_I, {"alpha": estimator_alphas_I}, {}), + ] + else: + estimators = [ + # (fake_solver, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (eloreta, data_args_I, {"alpha": estimator_alphas_II}, {}), + (iterative_L1, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (iterative_L2, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (iterative_sqrt, data_args_I, {"alpha": estimator_alphas_I}, {}), + # (iterative_L1_typeII, data_args_II, {"alpha": estimator_alphas_I}, {}), + # (iterative_L2_typeII, data_args_II, {"alpha": estimator_alphas_I}, {}), + # (gamma_map, data_args_II, {"alpha": estimator_alphas_I}, {"update_mode": 1}), + # (gamma_map, data_args_II, {"alpha": estimator_alphas_II}, {"update_mode": 2}), + # (gamma_map, data_args_II, {"alpha": estimator_alphas_I}, {"update_mode": 3}), + ] + + df_results = [] + for estimator, data_args, estimator_args, estimator_extra_params in estimators: + benchmark = Benchmark( + estimator, + subject, + metrics, + data_args, + estimator_args, + random_state=42, + memory=memory, + n_jobs=n_jobs, + do_spatial_cv=do_spatial_cv, + estimator_extra_params=estimator_extra_params, + ) + results = benchmark.run(nruns=nruns) + df_results.append(results) + # save results + data_path = Path("bsi_zoo/data/free3") + data_path.mkdir(exist_ok=True) + + if do_spatial_cv: + FILE_NAME = f"{estimator}_{subject}_{data_args['orientation_type'][0]}_spatialCV_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" + else: + FILE_NAME = f"{estimator}_{subject}_{data_args['orientation_type'][0]}_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" + results.to_pickle(data_path / FILE_NAME) + + df_results = pd.concat(df_results, axis=0) + + data_path = Path("bsi_zoo/data/free3") + data_path.mkdir(exist_ok=True) + if do_spatial_cv: + FILE_NAME = f"benchmark_data_{subject}_{data_args['orientation_type'][0]}_spatialCV_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" + else: + FILE_NAME = f"benchmark_data_{subject}_{data_args['orientation_type'][0]}_{time.strftime('%b-%d-%Y_%H%M', time.localtime())}.pkl" + df_results.to_pickle(data_path / FILE_NAME) + + print(df_results) + diff --git a/plot_benchmark_metrics.ipynb b/plot_benchmark_metrics.ipynb index 7365ff7..0fbe9b8 100644 --- a/plot_benchmark_metrics.ipynb +++ b/plot_benchmark_metrics.ipynb @@ -28,6 +28,956 @@ "\n" ] }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + " | estimator | \n", + "error | \n", + "alpha | \n", + "cov_type | \n", + "n_sensors | \n", + "n_sources | \n", + "n_times | \n", + "nnz | \n", + "orientation_type | \n", + "path_to_leadfield | \n", + "extra_params | \n", + "estimator__alpha | \n", + "estimator__alpha_cv | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.99 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
1 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.99 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
2 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.99 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
3 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.99 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
4 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.90 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
5 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.90 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
6 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.90 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
7 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.90 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
8 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.80 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
9 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.80 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
10 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.80 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
11 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.80 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
12 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.70 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
13 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.70 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
14 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.70 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
15 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.70 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
16 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.60 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
17 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.60 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
18 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.60 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
19 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.60 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
20 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.50 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
21 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.50 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
22 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.50 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
23 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.50 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
24 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.40 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
25 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.40 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
26 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.40 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
27 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.40 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
28 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.30 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
29 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.30 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
30 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.30 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
31 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.30 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
32 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.20 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
33 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.20 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
34 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.20 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
35 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.20 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
36 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.10 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
37 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.10 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
38 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.10 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
39 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.10 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
40 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.01 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "1 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
41 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.01 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "2 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
42 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.01 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "3 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "
43 | \n", + "eloreta | \n", + "matmul: Input operand 1 has a mismatch in its ... | \n", + "0.01 | \n", + "diag | \n", + "50 | \n", + "200 | \n", + "10 | \n", + "5 | \n", + "free | \n", + "bsi_zoo/tests/data/lead_field_free_CC120264.npz | \n", + "{} | \n", + "[0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 1... | \n", + "None | \n", + "