In [1]:
# Set up sys.path so that 'src/spindle_dev' is importable as 'spindle_dev'
import sys
import importlib
from pathlib import Path
project_root = '/data/sarkar_lab/Projects/spindle_dev'
src_path = Path(project_root) / 'src'
if str(src_path) not in sys.path:
sys.path.insert(0, str(src_path))
import spindle_dev
# Reload to pick up code changes without restarting the kernel
importlib.reload(spindle_dev)
Out[1]:
<module 'spindle_dev' from '/data/sarkar_lab/Projects/spindle_dev/src/spindle_dev/__init__.py'>
In [2]:
import scanpy as sc
import glob
In [3]:
h5ad_files = glob.glob("/data/sarkar_lab/insitupy_demo_data_xenium/*.h5ad")
In [4]:
import spindle_dev
import spindle_dev.metrics as metrics
import spindle_dev.index as index
import spindle_dev.preprocessing as preprocessing
import spindle_dev.plotting as plotting
import spindle_dev.test as test
import spindle_dev.search as search
import spindle_dev.typing as typing
import time
In [5]:
from pathlib import Path
In [6]:
import numpy as np
from concurrent.futures import ThreadPoolExecutor, as_completed
from joblib import Parallel, delayed
import argparse
import pandas as pd
In [7]:
def create_index(adata, resolution=0.5, min_final_size=10, top_genes=200, n_queries = 2000, all_genes=False):
# start time
# Create index directory if it doesn't exist
#Path(index_path).mkdir(parents=True, exist_ok=True)
start_time = time.time()
coords = adata.obsm["spatial"]
tiles = preprocessing.build_quadtree_tiles(coords, max_pts=200, min_side=0.0, max_depth=40)
# remove tiles with less than 5 spots
tiles = [tile for tile in tiles if len(tile.idx) >= 5]
tiles = preprocessing.reindex_tiles(tiles)
if all_genes:
num_genes = adata.n_vars
else:
num_genes = top_genes
genes_work, gene_idx = spindle_dev.preprocessing.topvar_genes(adata, G=num_genes)
tile_covs = spindle_dev.preprocessing.build_tile_covs_full_serial(adata, tiles, gene_idx, eps=1e-6)
data = index.ProcessedData(tiles, tile_covs, genes_work, adata.n_obs)
if 'pca' not in data.latent:
data.reduce_dim(num_pca_components=30, n_components=2, do_umap=True)
data.cluster_spds(cluster_distance="tree", cluster_method="leiden", resolution=resolution)
data.assign_label_to_spots()
data.get_corr_mean_by_cluster()
out_dict = data.get_adaptive_runs(find_blocks=True, with_size_guard=True,min_final_size=min_final_size,max_final_size=100)
epsilon_block_wise_dict = {}
epsilon_dict = {}
for cluster_id in set(data.labels):
eps_per_block, eps_elbow_per_block, eps = index.choose_adaptive_epsilons(data, cluster_id, k_target_per_block=64)
epsilon_block_wise_dict[int(cluster_id)] = eps_elbow_per_block
epsilon_dict[int(cluster_id)] = eps
# Create indices config
config = typing.IndexConfig()
config.epsilon_dict = epsilon_dict
config.epsilon_block_wise_dict = epsilon_block_wise_dict
config.threshold_type = 'constant'
config.kmean_method = 'epsilon_net'
dag_dict, stat, dist_list = index.index_spds(data, config=config)
seed = 40
rng = np.random.default_rng(seed)
all_indices = np.arange(len(data.spd_matrices))
valid_clusters = list(dag_dict.keys())
mask = np.isin(data.labels, valid_clusters)
candidate_indices = all_indices[mask]
query_indices = rng.choice(candidate_indices, size=n_queries, replace=False)
dag_dict, stat, dist_list = index.index_spds(data, config=config)
gt_paths = test.create_ground_truth_paths(dag_dict)
query_matrices = [data.spd_matrices[i] for i in query_indices]
true_clusters = [int(data.labels[i]) for i in query_indices]
predicted_clusters = search.assign_clusters_to_new_spds(query_matrices, data)
predicted_df = pd.DataFrame({'True Cluster': true_clusters, 'Predicted Cluster': predicted_clusters})
print(f"Done with search")
return predicted_df
In [ ]:
In [8]:
all_df = []
for h5ad_file in h5ad_files:
if '5k' not in h5ad_file:
adata = sc.read_h5ad(h5ad_file)
experiment_name = h5ad_file.split("/")[-1].replace(".h5ad", "")
print(experiment_name)
predicted_df = create_index(adata, all_genes =True, n_queries=10)
predicted_df['experiment_name'] = experiment_name
all_df += [predicted_df]
del adata
xenium_human_skin_melanoma
[2026-01-20 12:41:00,009] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:41:00,131] INFO spindle_dev.index: Building ultrametric features from SPD matrices. [2026-01-20 12:41:42,003] INFO spindle_dev.index: Computing latent features from the tree representations. [2026-01-20 12:41:42,726] INFO spindle_dev.index: Reducing latent features to 30 dimensions using PCA. [2026-01-20 12:41:55,062] INFO spindle_dev.index: Explained variance ratios by PCA components: [0.0594365 0.04257701 0.02694363 0.02286748 0.01322526 0.00847291 0.00765662 0.00680464 0.00621679 0.00598492 0.0054304 0.00475169 0.00459882 0.00427495 0.00419172 0.00405914 0.00396039 0.00382956 0.00374104 0.00359517 0.00349659 0.00337946 0.00327844 0.00323106 0.00320595 0.00311978 0.00309778 0.00301003 0.00297968 0.00291783] [2026-01-20 12:41:55,070] INFO spindle_dev.index: Reducing latent features to 2 dimensions using UMAP. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism. warn( [2026-01-20 12:42:02,839] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:42:02,840] INFO spindle_dev.index: Clustering SPD matrices using Leiden clustering with resolution 0.50. [2026-01-20 12:42:02,927] INFO spindle_dev.index: Since clustering method is tree, I am going to find global order per cluster [2026-01-20 12:42:02,927] INFO spindle_dev.index: Finding consensus tree for cluster 0 [2026-01-20 12:42:03,063] INFO spindle_dev.index: Finding consensus tree for cluster 1 [2026-01-20 12:42:03,190] INFO spindle_dev.index: Finding consensus tree for cluster 2 [2026-01-20 12:42:03,305] INFO spindle_dev.index: Finding consensus tree for cluster 3 [2026-01-20 12:42:03,386] INFO spindle_dev.index: Finding consensus tree for cluster 4 [2026-01-20 12:42:03,460] INFO spindle_dev.index: Finding consensus tree for cluster 5 [2026-01-20 12:42:03,879] INFO spindle_dev.index: Computing mean correlation matrix for cluster 0 [2026-01-20 12:42:21,797] INFO spindle_dev.index: Computing mean correlation matrix for cluster 1 [2026-01-20 12:42:27,821] INFO spindle_dev.index: Computing mean correlation matrix for cluster 2 [2026-01-20 12:42:28,891] INFO spindle_dev.index: Computing mean correlation matrix for cluster 3 [2026-01-20 12:42:29,281] INFO spindle_dev.index: Computing mean correlation matrix for cluster 4 [2026-01-20 12:42:29,541] INFO spindle_dev.index: Computing mean correlation matrix for cluster 5 [2026-01-20 12:42:29,809] INFO spindle_dev.index: Finding adaptive block runs for cluster 0 [2026-01-20 12:42:30,445] INFO spindle_dev.index: Chose t=0.8403484674528324 resulting in 250 blocks instead of 135 blocks would have gotten by default [2026-01-20 12:42:30,518] INFO spindle_dev.index: Final block runs for cluster 0: 28 blocks. [2026-01-20 12:42:30,518] INFO spindle_dev.index: Finding adaptive block runs for cluster 1 [2026-01-20 12:42:31,132] INFO spindle_dev.index: Chose t=0.84045364173602 resulting in 249 blocks instead of 110 blocks would have gotten by default [2026-01-20 12:42:31,206] INFO spindle_dev.index: Final block runs for cluster 1: 30 blocks. [2026-01-20 12:42:31,207] INFO spindle_dev.index: Finding adaptive block runs for cluster 2 [2026-01-20 12:42:31,809] INFO spindle_dev.index: Chose t=0.882815137034527 resulting in 209 blocks instead of 110 blocks would have gotten by default [2026-01-20 12:42:31,864] INFO spindle_dev.index: Final block runs for cluster 2: 26 blocks. [2026-01-20 12:42:31,864] INFO spindle_dev.index: Finding adaptive block runs for cluster 3 [2026-01-20 12:42:32,477] INFO spindle_dev.index: Chose t=0.8928216387309484 resulting in 213 blocks instead of 142 blocks would have gotten by default [2026-01-20 12:42:32,534] INFO spindle_dev.index: Final block runs for cluster 3: 26 blocks. [2026-01-20 12:42:32,534] INFO spindle_dev.index: Finding adaptive block runs for cluster 4 [2026-01-20 12:42:33,152] INFO spindle_dev.index: Chose t=0.8501217149922651 resulting in 196 blocks instead of 76 blocks would have gotten by default [2026-01-20 12:42:33,197] INFO spindle_dev.index: Final block runs for cluster 4: 24 blocks. [2026-01-20 12:42:33,198] INFO spindle_dev.index: Finding adaptive block runs for cluster 5 [2026-01-20 12:42:33,819] INFO spindle_dev.index: Chose t=0.869744973970191 resulting in 218 blocks instead of 98 blocks would have gotten by default [2026-01-20 12:42:33,875] INFO spindle_dev.index: Final block runs for cluster 5: 28 blocks. [2026-01-20 12:42:38,200] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:42:38,202] INFO spindle_dev.index: Building SPD index with epsilon=5.552291169329959 [2026-01-20 12:42:38,204] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:38,240] INFO spindle_dev.index: Cluster 0: 229 SPDs, 28 blocks [2026-01-20 12:42:38,240] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:38,275] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:38,276] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:38,326] INFO spindle_dev.index: Finished block 1 in 0.05 seconds, found 15 clusters. [2026-01-20 12:42:38,326] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:38,380] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 17 clusters. [2026-01-20 12:42:38,381] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:38,433] INFO spindle_dev.index: Finished block 3 in 0.05 seconds, found 15 clusters. [2026-01-20 12:42:38,434] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:38,480] INFO spindle_dev.index: Finished block 4 in 0.05 seconds, found 13 clusters. [2026-01-20 12:42:38,480] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:38,528] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 14 clusters. [2026-01-20 12:42:38,529] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:38,576] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 14 clusters. [2026-01-20 12:42:38,576] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:38,634] INFO spindle_dev.index: Finished block 7 in 0.06 seconds, found 18 clusters. [2026-01-20 12:42:38,634] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:38,674] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 11 clusters. [2026-01-20 12:42:38,675] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:38,735] INFO spindle_dev.index: Finished block 9 in 0.06 seconds, found 19 clusters. [2026-01-20 12:42:38,736] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:38,783] INFO spindle_dev.index: Finished block 10 in 0.05 seconds, found 13 clusters. [2026-01-20 12:42:38,784] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:38,811] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 6 clusters. [2026-01-20 12:42:38,812] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:38,847] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 9 clusters. [2026-01-20 12:42:38,848] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:38,878] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 7 clusters. [2026-01-20 12:42:38,878] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:38,898] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:38,899] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:38,924] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:38,924] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:38,949] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:38,949] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:39,000] INFO spindle_dev.index: Finished block 17 in 0.05 seconds, found 6 clusters. [2026-01-20 12:42:39,001] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:39,035] INFO spindle_dev.index: Finished block 18 in 0.03 seconds, found 5 clusters. [2026-01-20 12:42:39,036] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:39,072] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 9 clusters. [2026-01-20 12:42:39,072] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:39,097] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 5 clusters. [2026-01-20 12:42:39,097] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:39,124] INFO spindle_dev.index: Finished block 21 in 0.03 seconds, found 5 clusters. [2026-01-20 12:42:39,125] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:39,150] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 5 clusters. [2026-01-20 12:42:39,150] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:39,172] INFO spindle_dev.index: Finished block 23 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:39,173] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:39,187] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:39,188] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:39,203] INFO spindle_dev.index: Finished block 25 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:39,204] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:42:39,220] INFO spindle_dev.index: Finished block 26 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:39,220] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:42:39,307] INFO spindle_dev.index: Finished block 27 in 0.09 seconds, found 2 clusters. [2026-01-20 12:42:39,308] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:39,308] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:39,309] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:39,310] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:39,310] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:39,317] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:39,318] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:39,318] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:42:39,319] INFO spindle_dev.index: Building SPD index with epsilon=6.528217930503226 [2026-01-20 12:42:39,319] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:39,342] INFO spindle_dev.index: Cluster 1: 212 SPDs, 30 blocks [2026-01-20 12:42:39,343] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:39,358] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:39,358] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:39,375] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:39,375] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:39,402] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 7 clusters. [2026-01-20 12:42:39,402] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:39,433] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:39,434] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:39,468] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 10 clusters. [2026-01-20 12:42:39,468] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:39,500] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:39,500] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:39,530] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 8 clusters. [2026-01-20 12:42:39,531] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:39,569] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 12 clusters. [2026-01-20 12:42:39,570] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:39,606] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 11 clusters. [2026-01-20 12:42:39,607] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:39,642] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 10 clusters. [2026-01-20 12:42:39,643] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:39,677] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 10 clusters. [2026-01-20 12:42:39,677] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:39,708] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 8 clusters. [2026-01-20 12:42:39,708] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:39,738] INFO spindle_dev.index: Finished block 12 in 0.03 seconds, found 7 clusters. [2026-01-20 12:42:39,738] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:39,766] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 6 clusters. [2026-01-20 12:42:39,767] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:39,786] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:39,786] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:39,803] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:39,804] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:39,818] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:39,819] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:39,835] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:39,835] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:39,856] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:39,857] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:39,876] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:39,876] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:39,892] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:39,893] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:39,915] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:39,915] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:39,933] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:39,934] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:39,950] INFO spindle_dev.index: Finished block 23 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:39,950] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:39,966] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:39,967] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:39,980] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:39,980] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:42:39,998] INFO spindle_dev.index: Finished block 26 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:39,998] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:42:40,087] INFO spindle_dev.index: Finished block 27 in 0.09 seconds, found 7 clusters. [2026-01-20 12:42:40,088] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:42:40,113] INFO spindle_dev.index: Finished block 28 in 0.03 seconds, found 6 clusters. [2026-01-20 12:42:40,114] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:42:40,139] INFO spindle_dev.index: Finished block 29 in 0.03 seconds, found 3 clusters. [2026-01-20 12:42:40,140] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:40,140] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:40,140] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:40,141] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:40,141] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:40,147] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:40,147] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:40,148] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:42:40,148] INFO spindle_dev.index: Building SPD index with epsilon=6.086265270524512 [2026-01-20 12:42:40,149] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:40,168] INFO spindle_dev.index: Cluster 2: 177 SPDs, 26 blocks [2026-01-20 12:42:40,169] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:40,186] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:40,186] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:40,205] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 5 clusters. [2026-01-20 12:42:40,205] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:40,234] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 11 clusters. [2026-01-20 12:42:40,235] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:40,267] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 12 clusters. [2026-01-20 12:42:40,267] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:40,304] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 14 clusters. [2026-01-20 12:42:40,304] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:40,350] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 18 clusters. [2026-01-20 12:42:40,350] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:40,393] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 17 clusters. [2026-01-20 12:42:40,393] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:40,432] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 15 clusters. [2026-01-20 12:42:40,432] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:40,464] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 12 clusters. [2026-01-20 12:42:40,464] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:40,500] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 14 clusters. [2026-01-20 12:42:40,501] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:40,539] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 15 clusters. [2026-01-20 12:42:40,539] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:40,568] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 10 clusters. [2026-01-20 12:42:40,568] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:40,596] INFO spindle_dev.index: Finished block 12 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:40,596] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:40,611] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:40,611] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:40,631] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:40,632] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:40,643] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:40,644] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:40,671] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 2 clusters. [2026-01-20 12:42:40,672] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:40,691] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:40,691] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:40,708] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:40,709] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:40,739] INFO spindle_dev.index: Finished block 19 in 0.03 seconds, found 2 clusters. [2026-01-20 12:42:40,739] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:40,753] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:40,754] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:40,813] INFO spindle_dev.index: Finished block 21 in 0.06 seconds, found 4 clusters. [2026-01-20 12:42:40,813] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:40,827] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:40,827] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:40,839] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:40,840] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:40,856] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:40,857] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:40,881] INFO spindle_dev.index: Finished block 25 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:40,881] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:40,881] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:40,882] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:40,882] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:40,883] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:41,338] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:41,339] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:41,339] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:42:41,339] INFO spindle_dev.index: Building SPD index with epsilon=5.895040311192139 [2026-01-20 12:42:41,340] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:41,355] INFO spindle_dev.index: Cluster 3: 122 SPDs, 26 blocks [2026-01-20 12:42:41,356] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:41,368] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:41,368] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:41,383] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 7 clusters. [2026-01-20 12:42:41,383] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:41,398] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 7 clusters. [2026-01-20 12:42:41,399] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:41,419] INFO spindle_dev.index: Finished block 3 in 0.02 seconds, found 11 clusters. [2026-01-20 12:42:41,419] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:41,441] INFO spindle_dev.index: Finished block 4 in 0.02 seconds, found 12 clusters. [2026-01-20 12:42:41,442] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:41,467] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 15 clusters. [2026-01-20 12:42:41,468] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:41,501] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 19 clusters. [2026-01-20 12:42:41,502] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:41,536] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 21 clusters. [2026-01-20 12:42:41,537] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:41,571] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 20 clusters. [2026-01-20 12:42:41,571] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:41,603] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 18 clusters. [2026-01-20 12:42:41,603] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:41,648] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 25 clusters. [2026-01-20 12:42:41,648] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:41,675] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 15 clusters. [2026-01-20 12:42:41,676] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:41,691] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 7 clusters. [2026-01-20 12:42:41,691] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:41,723] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 16 clusters. [2026-01-20 12:42:41,724] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:41,742] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 8 clusters. [2026-01-20 12:42:41,742] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:41,754] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:41,754] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:41,766] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:41,766] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:41,776] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:41,776] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:41,785] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:41,785] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:41,803] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:41,804] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:41,814] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:41,815] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:41,829] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:41,830] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:41,847] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:41,848] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:41,874] INFO spindle_dev.index: Finished block 23 in 0.03 seconds, found 2 clusters. [2026-01-20 12:42:41,875] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:41,887] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:41,887] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:41,929] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 5 clusters. [2026-01-20 12:42:41,930] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:41,930] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:41,930] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:41,931] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:41,931] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:41,935] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:41,935] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:41,936] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:42:41,936] INFO spindle_dev.index: Building SPD index with epsilon=8.0682202120226 [2026-01-20 12:42:41,937] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:41,949] INFO spindle_dev.index: Cluster 4: 106 SPDs, 24 blocks [2026-01-20 12:42:41,951] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:41,958] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:41,958] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:41,966] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:41,966] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:41,973] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:41,974] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:41,983] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:41,983] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:41,992] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:41,993] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:42,002] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,002] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:42,010] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,011] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:42,020] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,020] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:42,029] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,029] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:42,038] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,038] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:42,048] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,049] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:42,057] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:42,057] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:42,066] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,067] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:42,103] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 4 clusters. [2026-01-20 12:42:42,103] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:42,113] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,114] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:42,161] INFO spindle_dev.index: Finished block 15 in 0.05 seconds, found 11 clusters. [2026-01-20 12:42:42,162] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:42,172] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,172] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:42,180] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,181] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:42,193] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,194] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:42,204] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,205] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:42,214] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,215] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:42,227] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,227] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:42,239] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,239] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:42,252] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,252] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:42,252] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:42,253] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:42,253] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:42,253] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:42,256] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:42,257] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:42,257] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:42:42,257] INFO spindle_dev.index: Building SPD index with epsilon=7.231150426282728 [2026-01-20 12:42:42,258] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:42,271] INFO spindle_dev.index: Cluster 5: 101 SPDs, 28 blocks [2026-01-20 12:42:42,272] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:42,278] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:42,278] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:42,285] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,286] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:42,295] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:42,295] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:42,306] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:42,306] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:42,317] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:42,317] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:42,328] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:42,329] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:42,340] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 6 clusters. [2026-01-20 12:42:42,341] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:42,352] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:42,353] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:42,365] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:42,365] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:42,375] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:42,375] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:42,384] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,385] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:42,396] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:42,396] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:42,406] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,406] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:42,416] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:42,416] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:42,432] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:42,432] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:42,444] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:42,444] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:42,451] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,452] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:42,461] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,462] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:42,474] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,474] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:42,483] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:42,483] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:42,493] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:42,494] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:42,503] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:42,504] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:42,516] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,517] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:42,526] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:42,527] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:42,537] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:42,538] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:42,544] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:42,545] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:42:42,551] INFO spindle_dev.index: Finished block 26 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:42,552] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:42:42,596] INFO spindle_dev.index: Finished block 27 in 0.04 seconds, found 10 clusters. [2026-01-20 12:42:42,597] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:42,597] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:42,597] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:42,598] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:42,598] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:42,601] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:42,601] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:42,603] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:42:42,604] INFO spindle_dev.index: Building SPD index with epsilon=5.552291169329959 [2026-01-20 12:42:42,604] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:42,629] INFO spindle_dev.index: Cluster 0: 229 SPDs, 28 blocks [2026-01-20 12:42:42,629] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:42,665] INFO spindle_dev.index: Finished block 0 in 0.04 seconds, found 9 clusters. [2026-01-20 12:42:42,665] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:42,716] INFO spindle_dev.index: Finished block 1 in 0.05 seconds, found 15 clusters. [2026-01-20 12:42:42,716] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:42,771] INFO spindle_dev.index: Finished block 2 in 0.06 seconds, found 17 clusters. [2026-01-20 12:42:42,771] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:42,821] INFO spindle_dev.index: Finished block 3 in 0.05 seconds, found 15 clusters. [2026-01-20 12:42:42,821] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:42,865] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 13 clusters. [2026-01-20 12:42:42,865] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:42,912] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 14 clusters. [2026-01-20 12:42:42,912] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:42,958] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 14 clusters. [2026-01-20 12:42:42,958] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:43,015] INFO spindle_dev.index: Finished block 7 in 0.06 seconds, found 18 clusters. [2026-01-20 12:42:43,015] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:43,054] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 11 clusters. [2026-01-20 12:42:43,055] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:43,116] INFO spindle_dev.index: Finished block 9 in 0.06 seconds, found 19 clusters. [2026-01-20 12:42:43,116] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:43,164] INFO spindle_dev.index: Finished block 10 in 0.05 seconds, found 13 clusters. [2026-01-20 12:42:43,165] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:43,192] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 6 clusters. [2026-01-20 12:42:43,192] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:43,227] INFO spindle_dev.index: Finished block 12 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:43,227] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:43,257] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 7 clusters. [2026-01-20 12:42:43,257] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:43,277] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:43,277] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:43,302] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 2 clusters. [2026-01-20 12:42:43,303] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:43,328] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 4 clusters. [2026-01-20 12:42:43,328] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:43,380] INFO spindle_dev.index: Finished block 17 in 0.05 seconds, found 6 clusters. [2026-01-20 12:42:43,380] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:43,414] INFO spindle_dev.index: Finished block 18 in 0.03 seconds, found 5 clusters. [2026-01-20 12:42:43,414] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:43,450] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 9 clusters. [2026-01-20 12:42:43,450] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:43,475] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 5 clusters. [2026-01-20 12:42:43,475] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:43,502] INFO spindle_dev.index: Finished block 21 in 0.03 seconds, found 5 clusters. [2026-01-20 12:42:43,503] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:43,527] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 5 clusters. [2026-01-20 12:42:43,527] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:43,548] INFO spindle_dev.index: Finished block 23 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:43,549] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:43,563] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:43,563] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:43,578] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:43,578] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:42:43,595] INFO spindle_dev.index: Finished block 26 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:43,595] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:42:43,680] INFO spindle_dev.index: Finished block 27 in 0.08 seconds, found 2 clusters. [2026-01-20 12:42:43,681] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:43,681] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:43,681] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:43,682] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:43,682] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:43,689] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:43,689] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:43,689] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:42:43,690] INFO spindle_dev.index: Building SPD index with epsilon=6.528217930503226 [2026-01-20 12:42:43,691] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:43,716] INFO spindle_dev.index: Cluster 1: 212 SPDs, 30 blocks [2026-01-20 12:42:43,717] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:43,731] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:43,732] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:43,748] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:43,748] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:43,774] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 7 clusters. [2026-01-20 12:42:43,774] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:43,805] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:43,806] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:43,839] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 10 clusters. [2026-01-20 12:42:43,839] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:43,871] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:43,871] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:43,901] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 8 clusters. [2026-01-20 12:42:43,902] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:43,941] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 12 clusters. [2026-01-20 12:42:43,942] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:43,978] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 11 clusters. [2026-01-20 12:42:43,978] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:44,013] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 10 clusters. [2026-01-20 12:42:44,013] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:44,047] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 10 clusters. [2026-01-20 12:42:44,047] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:44,077] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 8 clusters. [2026-01-20 12:42:44,078] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:44,107] INFO spindle_dev.index: Finished block 12 in 0.03 seconds, found 7 clusters. [2026-01-20 12:42:44,108] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:44,136] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 6 clusters. [2026-01-20 12:42:44,137] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:44,156] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:44,156] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:44,173] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:44,174] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:44,188] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:44,188] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:44,204] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:44,204] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:44,225] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:44,225] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:44,244] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:44,244] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:44,260] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:44,260] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:44,282] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:44,283] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:44,300] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:44,301] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:44,316] INFO spindle_dev.index: Finished block 23 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:44,317] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:44,333] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 2 clusters. [2026-01-20 12:42:44,333] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:44,347] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:44,347] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:42:44,366] INFO spindle_dev.index: Finished block 26 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:44,366] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:42:44,453] INFO spindle_dev.index: Finished block 27 in 0.09 seconds, found 7 clusters. [2026-01-20 12:42:44,454] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:42:44,479] INFO spindle_dev.index: Finished block 28 in 0.03 seconds, found 6 clusters. [2026-01-20 12:42:44,480] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:42:44,505] INFO spindle_dev.index: Finished block 29 in 0.03 seconds, found 3 clusters. [2026-01-20 12:42:44,506] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:44,506] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:44,507] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:44,507] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:44,507] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:44,513] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:44,514] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:44,514] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:42:44,515] INFO spindle_dev.index: Building SPD index with epsilon=6.086265270524512 [2026-01-20 12:42:44,515] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:44,539] INFO spindle_dev.index: Cluster 2: 177 SPDs, 26 blocks [2026-01-20 12:42:44,540] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:44,556] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:44,557] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:44,576] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 5 clusters. [2026-01-20 12:42:44,576] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:44,606] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 11 clusters. [2026-01-20 12:42:44,606] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:44,640] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 12 clusters. [2026-01-20 12:42:44,640] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:44,676] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 14 clusters. [2026-01-20 12:42:44,677] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:44,724] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 18 clusters. [2026-01-20 12:42:44,724] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:44,768] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 17 clusters. [2026-01-20 12:42:44,769] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:44,806] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 15 clusters. [2026-01-20 12:42:44,807] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:44,839] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 12 clusters. [2026-01-20 12:42:44,839] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:44,875] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 14 clusters. [2026-01-20 12:42:44,875] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:44,914] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 15 clusters. [2026-01-20 12:42:44,914] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:44,944] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 10 clusters. [2026-01-20 12:42:44,944] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:44,972] INFO spindle_dev.index: Finished block 12 in 0.03 seconds, found 9 clusters. [2026-01-20 12:42:44,972] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:44,987] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:44,987] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:45,007] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:45,007] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:45,018] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:45,018] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:45,045] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 2 clusters. [2026-01-20 12:42:45,045] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:45,063] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:45,064] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:45,081] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:45,082] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:45,110] INFO spindle_dev.index: Finished block 19 in 0.03 seconds, found 2 clusters. [2026-01-20 12:42:45,110] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:45,125] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:45,125] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:45,182] INFO spindle_dev.index: Finished block 21 in 0.06 seconds, found 4 clusters. [2026-01-20 12:42:45,182] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:45,196] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:45,196] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:45,208] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:45,209] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:45,226] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 1 clusters. [2026-01-20 12:42:45,226] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:45,250] INFO spindle_dev.index: Finished block 25 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:45,251] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:45,251] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:45,252] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:45,252] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:45,252] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:45,257] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:45,258] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:45,258] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:42:45,258] INFO spindle_dev.index: Building SPD index with epsilon=5.895040311192139 [2026-01-20 12:42:45,259] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:45,273] INFO spindle_dev.index: Cluster 3: 122 SPDs, 26 blocks [2026-01-20 12:42:45,274] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:45,287] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:45,287] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:45,302] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 7 clusters. [2026-01-20 12:42:45,302] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:45,318] INFO spindle_dev.index: Finished block 2 in 0.02 seconds, found 7 clusters. [2026-01-20 12:42:45,318] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:45,339] INFO spindle_dev.index: Finished block 3 in 0.02 seconds, found 11 clusters. [2026-01-20 12:42:45,340] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:45,361] INFO spindle_dev.index: Finished block 4 in 0.02 seconds, found 12 clusters. [2026-01-20 12:42:45,362] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:45,389] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 15 clusters. [2026-01-20 12:42:45,389] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:45,423] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 19 clusters. [2026-01-20 12:42:45,424] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:45,459] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 21 clusters. [2026-01-20 12:42:45,460] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:45,494] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 20 clusters. [2026-01-20 12:42:45,494] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:45,527] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 18 clusters. [2026-01-20 12:42:45,527] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:45,572] INFO spindle_dev.index: Finished block 10 in 0.05 seconds, found 25 clusters. [2026-01-20 12:42:45,573] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:45,600] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 15 clusters. [2026-01-20 12:42:45,601] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:45,616] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 7 clusters. [2026-01-20 12:42:45,617] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:45,649] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 16 clusters. [2026-01-20 12:42:45,649] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:45,667] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 8 clusters. [2026-01-20 12:42:45,667] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:45,679] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:45,680] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:45,692] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:45,692] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:45,702] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,702] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:45,711] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,712] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:45,731] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:45,732] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:45,742] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,743] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:45,758] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:45,758] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:45,776] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 3 clusters. [2026-01-20 12:42:45,777] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:45,803] INFO spindle_dev.index: Finished block 23 in 0.03 seconds, found 2 clusters. [2026-01-20 12:42:45,804] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:45,815] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,816] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:45,857] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 5 clusters. [2026-01-20 12:42:45,857] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:45,857] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:45,858] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:45,858] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:45,858] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:45,862] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:45,863] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:45,864] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:42:45,864] INFO spindle_dev.index: Building SPD index with epsilon=8.0682202120226 [2026-01-20 12:42:45,864] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:45,876] INFO spindle_dev.index: Cluster 4: 106 SPDs, 24 blocks [2026-01-20 12:42:45,877] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:45,884] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:45,885] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:45,892] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,893] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:45,900] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,900] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:45,910] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:45,910] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:45,919] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:45,920] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:45,929] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:45,929] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:45,937] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,938] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:45,947] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:45,948] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:45,957] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:45,957] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:45,966] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,966] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:45,976] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:45,977] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:45,985] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:45,985] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:45,995] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:45,995] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:46,031] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 4 clusters. [2026-01-20 12:42:46,031] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:46,041] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,042] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:46,089] INFO spindle_dev.index: Finished block 15 in 0.05 seconds, found 11 clusters. [2026-01-20 12:42:46,090] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:46,100] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,100] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:46,108] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,108] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:46,122] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,122] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:46,132] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:46,133] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:46,143] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:46,143] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:46,155] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,156] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:46,167] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,168] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:46,180] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:46,181] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:46,181] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:46,181] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:46,182] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:46,182] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:46,185] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:46,185] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:46,186] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:42:46,186] INFO spindle_dev.index: Building SPD index with epsilon=7.231150426282728 [2026-01-20 12:42:46,186] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:42:46,199] INFO spindle_dev.index: Cluster 5: 101 SPDs, 28 blocks [2026-01-20 12:42:46,200] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:42:46,206] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:46,207] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:42:46,213] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,214] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:42:46,223] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:46,223] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:42:46,234] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:46,234] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:42:46,245] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:46,246] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:42:46,256] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:46,257] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:42:46,269] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 6 clusters. [2026-01-20 12:42:46,269] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:42:46,280] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:46,280] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:42:46,292] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:46,293] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:42:46,303] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:46,303] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:42:46,312] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:46,313] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:42:46,325] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:46,326] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:42:46,335] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:46,335] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:42:46,344] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:46,345] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:42:46,361] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 4 clusters. [2026-01-20 12:42:46,361] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:42:46,373] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 5 clusters. [2026-01-20 12:42:46,373] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:42:46,381] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,382] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:42:46,391] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,391] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:42:46,404] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:46,404] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:42:46,413] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:46,413] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:42:46,424] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:46,424] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:42:46,434] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 4 clusters. [2026-01-20 12:42:46,435] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:42:46,448] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,448] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:42:46,458] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 2 clusters. [2026-01-20 12:42:46,458] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:42:46,468] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 3 clusters. [2026-01-20 12:42:46,469] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:42:46,475] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:46,476] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:42:46,483] INFO spindle_dev.index: Finished block 26 in 0.01 seconds, found 1 clusters. [2026-01-20 12:42:46,483] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:42:46,528] INFO spindle_dev.index: Finished block 27 in 0.04 seconds, found 10 clusters. [2026-01-20 12:42:46,529] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:42:46,529] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:42:46,529] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:42:46,530] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:42:46,530] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:42:46,533] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:42:46,533] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:42:46,614] INFO spindle_dev.test: Built ground-truth paths for 229 SPDs in cluster 0 across 28 blocks. [2026-01-20 12:42:46,686] INFO spindle_dev.test: Built ground-truth paths for 212 SPDs in cluster 1 across 30 blocks. [2026-01-20 12:42:46,731] INFO spindle_dev.test: Built ground-truth paths for 177 SPDs in cluster 2 across 26 blocks. [2026-01-20 12:42:46,758] INFO spindle_dev.test: Built ground-truth paths for 122 SPDs in cluster 3 across 26 blocks. [2026-01-20 12:42:46,772] INFO spindle_dev.test: Built ground-truth paths for 106 SPDs in cluster 4 across 24 blocks. [2026-01-20 12:42:46,788] INFO spindle_dev.test: Built ground-truth paths for 101 SPDs in cluster 5 across 28 blocks.
Done with search xenium_human_brain_cancer
[2026-01-20 12:43:25,468] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:43:25,471] INFO spindle_dev.index: Building ultrametric features from SPD matrices. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/scipy/cluster/hierarchy.py:1673: RuntimeWarning: invalid value encountered in scalar divide c = xp.sum(numerator) / xp.sqrt(xp.sum(denomA) * xp.sum(denomB)) [2026-01-20 12:46:20,963] INFO spindle_dev.index: Computing latent features from the tree representations. [2026-01-20 12:46:34,702] INFO spindle_dev.index: Reducing latent features to 30 dimensions using PCA. [2026-01-20 12:47:20,029] INFO spindle_dev.index: Explained variance ratios by PCA components: [0.03411894 0.02578561 0.01285703 0.00938737 0.00588084 0.00551661 0.00453925 0.00377464 0.00356478 0.00307318 0.00273169 0.0026462 0.00263546 0.00248134 0.00241321 0.00210543 0.00208783 0.00205712 0.0020324 0.00196088 0.00191746 0.00189922 0.00186625 0.00184357 0.00182782 0.00181393 0.00176957 0.00176038 0.00173033 0.00172268] [2026-01-20 12:47:20,034] INFO spindle_dev.index: Reducing latent features to 2 dimensions using UMAP. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism. warn( [2026-01-20 12:47:45,917] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:47:45,920] INFO spindle_dev.index: Clustering SPD matrices using Leiden clustering with resolution 0.50. [2026-01-20 12:47:52,629] INFO spindle_dev.index: Since clustering method is tree, I am going to find global order per cluster [2026-01-20 12:47:52,632] INFO spindle_dev.index: Finding consensus tree for cluster 0 [2026-01-20 12:47:59,309] INFO spindle_dev.index: Finding consensus tree for cluster 1 [2026-01-20 12:48:03,124] INFO spindle_dev.index: Finding consensus tree for cluster 2 [2026-01-20 12:48:05,495] INFO spindle_dev.index: Finding consensus tree for cluster 3 [2026-01-20 12:48:08,982] INFO spindle_dev.index: Finding consensus tree for cluster 4 [2026-01-20 12:48:09,975] INFO spindle_dev.index: Finding consensus tree for cluster 5 [2026-01-20 12:48:10,837] INFO spindle_dev.index: Finding consensus tree for cluster 6 [2026-01-20 12:48:11,220] INFO spindle_dev.index: Finding consensus tree for cluster 7 [2026-01-20 12:48:32,671] INFO spindle_dev.index: Computing mean correlation matrix for cluster 0 [2026-01-20 12:49:46,137] INFO spindle_dev.index: Computing mean correlation matrix for cluster 1 [2026-01-20 12:49:59,385] INFO spindle_dev.index: Computing mean correlation matrix for cluster 2 [2026-01-20 12:50:08,981] INFO spindle_dev.index: Computing mean correlation matrix for cluster 3 [2026-01-20 12:50:15,197] INFO spindle_dev.index: Computing mean correlation matrix for cluster 4 [2026-01-20 12:50:20,041] INFO spindle_dev.index: Computing mean correlation matrix for cluster 5 [2026-01-20 12:50:21,660] INFO spindle_dev.index: Computing mean correlation matrix for cluster 6 [2026-01-20 12:50:22,954] INFO spindle_dev.index: Computing mean correlation matrix for cluster 7 [2026-01-20 12:50:23,063] INFO spindle_dev.index: Finding adaptive block runs for cluster 0 [2026-01-20 12:50:24,153] INFO spindle_dev.index: Chose t=0.8632246875507528 resulting in 354 blocks instead of 242 blocks would have gotten by default [2026-01-20 12:50:24,300] INFO spindle_dev.index: Final block runs for cluster 0: 36 blocks. [2026-01-20 12:50:24,301] INFO spindle_dev.index: Finding adaptive block runs for cluster 1 [2026-01-20 12:50:25,368] INFO spindle_dev.index: Chose t=0.8421314547071789 resulting in 370 blocks instead of 245 blocks would have gotten by default [2026-01-20 12:50:25,531] INFO spindle_dev.index: Final block runs for cluster 1: 36 blocks. [2026-01-20 12:50:25,532] INFO spindle_dev.index: Finding adaptive block runs for cluster 2 [2026-01-20 12:50:26,614] INFO spindle_dev.index: Chose t=0.8416540402268181 resulting in 331 blocks instead of 226 blocks would have gotten by default [2026-01-20 12:50:26,749] INFO spindle_dev.index: Final block runs for cluster 2: 35 blocks. [2026-01-20 12:50:26,750] INFO spindle_dev.index: Finding adaptive block runs for cluster 3 [2026-01-20 12:50:27,835] INFO spindle_dev.index: Chose t=0.8631705570040082 resulting in 387 blocks instead of 270 blocks would have gotten by default [2026-01-20 12:50:28,015] INFO spindle_dev.index: Final block runs for cluster 3: 38 blocks. [2026-01-20 12:50:28,015] INFO spindle_dev.index: Finding adaptive block runs for cluster 4 [2026-01-20 12:50:29,090] INFO spindle_dev.index: Chose t=0.784655953570506 resulting in 383 blocks instead of 205 blocks would have gotten by default [2026-01-20 12:50:29,269] INFO spindle_dev.index: Final block runs for cluster 4: 39 blocks. [2026-01-20 12:50:29,269] INFO spindle_dev.index: Finding adaptive block runs for cluster 5 [2026-01-20 12:50:30,332] INFO spindle_dev.index: Chose t=0.8552197331616531 resulting in 326 blocks instead of 208 blocks would have gotten by default [2026-01-20 12:50:30,459] INFO spindle_dev.index: Final block runs for cluster 5: 35 blocks. [2026-01-20 12:50:30,460] INFO spindle_dev.index: Finding adaptive block runs for cluster 6 [2026-01-20 12:50:31,522] INFO spindle_dev.index: Chose t=0.8304446409718929 resulting in 368 blocks instead of 241 blocks would have gotten by default [2026-01-20 12:50:31,685] INFO spindle_dev.index: Final block runs for cluster 6: 38 blocks. [2026-01-20 12:50:31,685] INFO spindle_dev.index: Finding adaptive block runs for cluster 7 [2026-01-20 12:50:32,142] INFO spindle_dev.index: Chose t=0.9705885179838508 resulting in 339 blocks instead of 459 blocks would have gotten by default [2026-01-20 12:50:32,281] INFO spindle_dev.index: Final block runs for cluster 7: 19 blocks. [2026-01-20 12:51:58,654] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:51:58,658] INFO spindle_dev.index: Building SPD index with epsilon=6.102528176453383 [2026-01-20 12:51:58,658] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:51:59,583] INFO spindle_dev.index: Cluster 0: 3053 SPDs, 36 blocks [2026-01-20 12:51:59,584] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:51:59,789] INFO spindle_dev.index: Finished block 0 in 0.21 seconds, found 2 clusters. [2026-01-20 12:51:59,791] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:00,150] INFO spindle_dev.index: Finished block 1 in 0.36 seconds, found 6 clusters. [2026-01-20 12:52:00,151] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:00,434] INFO spindle_dev.index: Finished block 2 in 0.28 seconds, found 4 clusters. [2026-01-20 12:52:00,435] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:00,715] INFO spindle_dev.index: Finished block 3 in 0.28 seconds, found 4 clusters. [2026-01-20 12:52:00,716] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:01,232] INFO spindle_dev.index: Finished block 4 in 0.52 seconds, found 10 clusters. [2026-01-20 12:52:01,233] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:01,806] INFO spindle_dev.index: Finished block 5 in 0.57 seconds, found 10 clusters. [2026-01-20 12:52:01,808] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:02,349] INFO spindle_dev.index: Finished block 6 in 0.54 seconds, found 11 clusters. [2026-01-20 12:52:02,350] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:02,904] INFO spindle_dev.index: Finished block 7 in 0.55 seconds, found 11 clusters. [2026-01-20 12:52:02,905] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:03,489] INFO spindle_dev.index: Finished block 8 in 0.58 seconds, found 12 clusters. [2026-01-20 12:52:03,490] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:04,096] INFO spindle_dev.index: Finished block 9 in 0.61 seconds, found 12 clusters. [2026-01-20 12:52:04,097] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:04,796] INFO spindle_dev.index: Finished block 10 in 0.70 seconds, found 15 clusters. [2026-01-20 12:52:04,798] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:05,326] INFO spindle_dev.index: Finished block 11 in 0.53 seconds, found 10 clusters. [2026-01-20 12:52:05,328] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:06,017] INFO spindle_dev.index: Finished block 12 in 0.69 seconds, found 15 clusters. [2026-01-20 12:52:06,019] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:06,838] INFO spindle_dev.index: Finished block 13 in 0.82 seconds, found 17 clusters. [2026-01-20 12:52:06,839] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:07,557] INFO spindle_dev.index: Finished block 14 in 0.72 seconds, found 15 clusters. [2026-01-20 12:52:07,558] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:08,341] INFO spindle_dev.index: Finished block 15 in 0.78 seconds, found 17 clusters. [2026-01-20 12:52:08,342] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:09,356] INFO spindle_dev.index: Finished block 16 in 1.01 seconds, found 22 clusters. [2026-01-20 12:52:09,357] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:52:10,238] INFO spindle_dev.index: Finished block 17 in 0.88 seconds, found 19 clusters. [2026-01-20 12:52:10,239] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:52:11,143] INFO spindle_dev.index: Finished block 18 in 0.90 seconds, found 20 clusters. [2026-01-20 12:52:11,145] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:52:12,107] INFO spindle_dev.index: Finished block 19 in 0.96 seconds, found 21 clusters. [2026-01-20 12:52:12,109] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:52:13,310] INFO spindle_dev.index: Finished block 20 in 1.20 seconds, found 26 clusters. [2026-01-20 12:52:13,311] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:52:13,843] INFO spindle_dev.index: Finished block 21 in 0.53 seconds, found 10 clusters. [2026-01-20 12:52:13,844] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:52:14,417] INFO spindle_dev.index: Finished block 22 in 0.57 seconds, found 11 clusters. [2026-01-20 12:52:14,418] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:52:15,753] INFO spindle_dev.index: Finished block 23 in 1.34 seconds, found 15 clusters. [2026-01-20 12:52:15,754] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:52:16,248] INFO spindle_dev.index: Finished block 24 in 0.49 seconds, found 6 clusters. [2026-01-20 12:52:16,250] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:52:16,841] INFO spindle_dev.index: Finished block 25 in 0.59 seconds, found 2 clusters. [2026-01-20 12:52:16,843] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:52:17,319] INFO spindle_dev.index: Finished block 26 in 0.48 seconds, found 8 clusters. [2026-01-20 12:52:17,322] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:52:17,568] INFO spindle_dev.index: Finished block 27 in 0.25 seconds, found 2 clusters. [2026-01-20 12:52:17,569] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:52:17,762] INFO spindle_dev.index: Finished block 28 in 0.19 seconds, found 1 clusters. [2026-01-20 12:52:17,763] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:52:17,954] INFO spindle_dev.index: Finished block 29 in 0.19 seconds, found 1 clusters. [2026-01-20 12:52:17,955] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:52:18,146] INFO spindle_dev.index: Finished block 30 in 0.19 seconds, found 1 clusters. [2026-01-20 12:52:18,147] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:52:18,342] INFO spindle_dev.index: Finished block 31 in 0.20 seconds, found 1 clusters. [2026-01-20 12:52:18,344] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:52:18,541] INFO spindle_dev.index: Finished block 32 in 0.20 seconds, found 1 clusters. [2026-01-20 12:52:18,542] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:52:18,742] INFO spindle_dev.index: Finished block 33 in 0.20 seconds, found 1 clusters. [2026-01-20 12:52:18,743] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:52:18,943] INFO spindle_dev.index: Finished block 34 in 0.20 seconds, found 1 clusters. [2026-01-20 12:52:18,944] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:52:19,873] INFO spindle_dev.index: Finished block 35 in 0.93 seconds, found 1 clusters. [2026-01-20 12:52:19,873] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:52:19,874] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:52:19,874] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:52:19,874] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:52:19,875] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:52:19,955] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:52:19,956] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:52:19,957] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:52:19,957] INFO spindle_dev.index: Building SPD index with epsilon=7.198015254724661 [2026-01-20 12:52:19,958] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:52:20,265] INFO spindle_dev.index: Cluster 1: 2643 SPDs, 36 blocks [2026-01-20 12:52:20,268] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:52:20,417] INFO spindle_dev.index: Finished block 0 in 0.15 seconds, found 1 clusters. [2026-01-20 12:52:20,419] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:20,559] INFO spindle_dev.index: Finished block 1 in 0.14 seconds, found 1 clusters. [2026-01-20 12:52:20,560] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:20,731] INFO spindle_dev.index: Finished block 2 in 0.17 seconds, found 2 clusters. [2026-01-20 12:52:20,732] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:20,920] INFO spindle_dev.index: Finished block 3 in 0.19 seconds, found 2 clusters. [2026-01-20 12:52:20,922] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:21,133] INFO spindle_dev.index: Finished block 4 in 0.21 seconds, found 3 clusters. [2026-01-20 12:52:21,135] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:21,368] INFO spindle_dev.index: Finished block 5 in 0.23 seconds, found 4 clusters. [2026-01-20 12:52:21,368] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:21,576] INFO spindle_dev.index: Finished block 6 in 0.21 seconds, found 3 clusters. [2026-01-20 12:52:21,577] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:21,760] INFO spindle_dev.index: Finished block 7 in 0.18 seconds, found 2 clusters. [2026-01-20 12:52:21,761] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:22,008] INFO spindle_dev.index: Finished block 8 in 0.25 seconds, found 4 clusters. [2026-01-20 12:52:22,009] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:22,192] INFO spindle_dev.index: Finished block 9 in 0.18 seconds, found 2 clusters. [2026-01-20 12:52:22,193] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:22,453] INFO spindle_dev.index: Finished block 10 in 0.26 seconds, found 3 clusters. [2026-01-20 12:52:22,454] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:22,689] INFO spindle_dev.index: Finished block 11 in 0.24 seconds, found 3 clusters. [2026-01-20 12:52:22,690] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:22,941] INFO spindle_dev.index: Finished block 12 in 0.25 seconds, found 3 clusters. [2026-01-20 12:52:22,943] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:23,209] INFO spindle_dev.index: Finished block 13 in 0.27 seconds, found 3 clusters. [2026-01-20 12:52:23,211] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:23,465] INFO spindle_dev.index: Finished block 14 in 0.26 seconds, found 3 clusters. [2026-01-20 12:52:23,466] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:23,687] INFO spindle_dev.index: Finished block 15 in 0.22 seconds, found 2 clusters. [2026-01-20 12:52:23,688] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:23,972] INFO spindle_dev.index: Finished block 16 in 0.28 seconds, found 4 clusters. [2026-01-20 12:52:23,973] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:52:24,328] INFO spindle_dev.index: Finished block 17 in 0.35 seconds, found 6 clusters. [2026-01-20 12:52:24,329] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:52:24,696] INFO spindle_dev.index: Finished block 18 in 0.37 seconds, found 6 clusters. [2026-01-20 12:52:24,697] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:52:25,101] INFO spindle_dev.index: Finished block 19 in 0.40 seconds, found 7 clusters. [2026-01-20 12:52:25,103] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:52:25,346] INFO spindle_dev.index: Finished block 20 in 0.24 seconds, found 2 clusters. [2026-01-20 12:52:25,347] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:52:25,723] INFO spindle_dev.index: Finished block 21 in 0.38 seconds, found 6 clusters. [2026-01-20 12:52:25,723] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:52:26,066] INFO spindle_dev.index: Finished block 22 in 0.34 seconds, found 5 clusters. [2026-01-20 12:52:26,067] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:52:26,350] INFO spindle_dev.index: Finished block 23 in 0.28 seconds, found 3 clusters. [2026-01-20 12:52:26,351] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:52:26,592] INFO spindle_dev.index: Finished block 24 in 0.24 seconds, found 2 clusters. [2026-01-20 12:52:26,593] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:52:27,801] INFO spindle_dev.index: Finished block 25 in 1.21 seconds, found 5 clusters. [2026-01-20 12:52:27,802] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:52:28,132] INFO spindle_dev.index: Finished block 26 in 0.33 seconds, found 5 clusters. [2026-01-20 12:52:28,134] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:52:28,576] INFO spindle_dev.index: Finished block 27 in 0.44 seconds, found 4 clusters. [2026-01-20 12:52:28,578] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:52:28,828] INFO spindle_dev.index: Finished block 28 in 0.25 seconds, found 2 clusters. [2026-01-20 12:52:28,829] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:52:29,060] INFO spindle_dev.index: Finished block 29 in 0.23 seconds, found 1 clusters. [2026-01-20 12:52:29,061] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:52:29,292] INFO spindle_dev.index: Finished block 30 in 0.23 seconds, found 1 clusters. [2026-01-20 12:52:29,293] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:52:29,584] INFO spindle_dev.index: Finished block 31 in 0.29 seconds, found 1 clusters. [2026-01-20 12:52:29,585] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:52:29,858] INFO spindle_dev.index: Finished block 32 in 0.27 seconds, found 2 clusters. [2026-01-20 12:52:29,859] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:52:30,115] INFO spindle_dev.index: Finished block 33 in 0.26 seconds, found 1 clusters. [2026-01-20 12:52:30,116] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:52:30,336] INFO spindle_dev.index: Finished block 34 in 0.22 seconds, found 1 clusters. [2026-01-20 12:52:30,337] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:52:32,363] INFO spindle_dev.index: Finished block 35 in 2.03 seconds, found 26 clusters. [2026-01-20 12:52:32,364] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:52:32,365] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:52:32,365] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:52:32,365] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:52:32,366] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:52:32,433] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:52:32,434] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:52:32,434] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:52:32,435] INFO spindle_dev.index: Building SPD index with epsilon=7.622794235690398 [2026-01-20 12:52:32,435] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:52:32,771] INFO spindle_dev.index: Cluster 2: 1523 SPDs, 35 blocks [2026-01-20 12:52:32,773] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:52:32,863] INFO spindle_dev.index: Finished block 0 in 0.09 seconds, found 1 clusters. [2026-01-20 12:52:32,864] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:32,948] INFO spindle_dev.index: Finished block 1 in 0.08 seconds, found 1 clusters. [2026-01-20 12:52:32,949] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:33,035] INFO spindle_dev.index: Finished block 2 in 0.09 seconds, found 1 clusters. [2026-01-20 12:52:33,036] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:33,143] INFO spindle_dev.index: Finished block 3 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:33,144] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:33,234] INFO spindle_dev.index: Finished block 4 in 0.09 seconds, found 1 clusters. [2026-01-20 12:52:33,235] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:33,341] INFO spindle_dev.index: Finished block 5 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:33,342] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:33,455] INFO spindle_dev.index: Finished block 6 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:33,456] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:33,568] INFO spindle_dev.index: Finished block 7 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:33,569] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:33,701] INFO spindle_dev.index: Finished block 8 in 0.13 seconds, found 3 clusters. [2026-01-20 12:52:33,702] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:33,833] INFO spindle_dev.index: Finished block 9 in 0.13 seconds, found 3 clusters. [2026-01-20 12:52:33,834] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:33,965] INFO spindle_dev.index: Finished block 10 in 0.13 seconds, found 3 clusters. [2026-01-20 12:52:33,966] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:34,097] INFO spindle_dev.index: Finished block 11 in 0.13 seconds, found 3 clusters. [2026-01-20 12:52:34,098] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:34,211] INFO spindle_dev.index: Finished block 12 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:34,212] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:34,346] INFO spindle_dev.index: Finished block 13 in 0.13 seconds, found 3 clusters. [2026-01-20 12:52:34,347] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:34,494] INFO spindle_dev.index: Finished block 14 in 0.15 seconds, found 3 clusters. [2026-01-20 12:52:34,495] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:34,648] INFO spindle_dev.index: Finished block 15 in 0.15 seconds, found 4 clusters. [2026-01-20 12:52:34,649] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:34,783] INFO spindle_dev.index: Finished block 16 in 0.13 seconds, found 3 clusters. [2026-01-20 12:52:34,784] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:52:34,956] INFO spindle_dev.index: Finished block 17 in 0.17 seconds, found 5 clusters. [2026-01-20 12:52:34,957] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:52:35,112] INFO spindle_dev.index: Finished block 18 in 0.16 seconds, found 4 clusters. [2026-01-20 12:52:35,114] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:52:35,307] INFO spindle_dev.index: Finished block 19 in 0.19 seconds, found 6 clusters. [2026-01-20 12:52:35,309] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:52:35,477] INFO spindle_dev.index: Finished block 20 in 0.17 seconds, found 4 clusters. [2026-01-20 12:52:35,478] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:52:35,659] INFO spindle_dev.index: Finished block 21 in 0.18 seconds, found 5 clusters. [2026-01-20 12:52:35,660] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:52:35,845] INFO spindle_dev.index: Finished block 22 in 0.18 seconds, found 5 clusters. [2026-01-20 12:52:35,846] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:52:35,991] INFO spindle_dev.index: Finished block 23 in 0.15 seconds, found 3 clusters. [2026-01-20 12:52:35,992] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:52:36,602] INFO spindle_dev.index: Finished block 24 in 0.61 seconds, found 6 clusters. [2026-01-20 12:52:36,603] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:52:36,778] INFO spindle_dev.index: Finished block 25 in 0.18 seconds, found 3 clusters. [2026-01-20 12:52:36,779] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:52:36,906] INFO spindle_dev.index: Finished block 26 in 0.13 seconds, found 2 clusters. [2026-01-20 12:52:36,907] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:52:37,057] INFO spindle_dev.index: Finished block 27 in 0.15 seconds, found 3 clusters. [2026-01-20 12:52:37,058] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:52:37,187] INFO spindle_dev.index: Finished block 28 in 0.13 seconds, found 2 clusters. [2026-01-20 12:52:37,188] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:52:37,314] INFO spindle_dev.index: Finished block 29 in 0.13 seconds, found 2 clusters. [2026-01-20 12:52:37,315] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:52:37,450] INFO spindle_dev.index: Finished block 30 in 0.14 seconds, found 2 clusters. [2026-01-20 12:52:37,452] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:52:37,576] INFO spindle_dev.index: Finished block 31 in 0.12 seconds, found 2 clusters. [2026-01-20 12:52:37,577] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:52:38,351] INFO spindle_dev.index: Finished block 32 in 0.77 seconds, found 14 clusters. [2026-01-20 12:52:38,352] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:52:38,529] INFO spindle_dev.index: Finished block 33 in 0.18 seconds, found 4 clusters. [2026-01-20 12:52:38,530] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:52:39,004] INFO spindle_dev.index: Finished block 34 in 0.47 seconds, found 2 clusters. [2026-01-20 12:52:39,005] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:52:39,005] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:52:39,006] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:52:39,006] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:52:39,007] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:52:39,048] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:52:39,049] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:52:39,049] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:52:39,049] INFO spindle_dev.index: Building SPD index with epsilon=7.687026962565294 [2026-01-20 12:52:39,050] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:52:39,657] INFO spindle_dev.index: Cluster 3: 1479 SPDs, 38 blocks [2026-01-20 12:52:39,659] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:52:39,745] INFO spindle_dev.index: Finished block 0 in 0.09 seconds, found 1 clusters. [2026-01-20 12:52:39,746] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:39,831] INFO spindle_dev.index: Finished block 1 in 0.09 seconds, found 1 clusters. [2026-01-20 12:52:39,832] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:39,913] INFO spindle_dev.index: Finished block 2 in 0.08 seconds, found 1 clusters. [2026-01-20 12:52:39,914] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:40,013] INFO spindle_dev.index: Finished block 3 in 0.10 seconds, found 2 clusters. [2026-01-20 12:52:40,013] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:40,100] INFO spindle_dev.index: Finished block 4 in 0.09 seconds, found 1 clusters. [2026-01-20 12:52:40,101] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:40,198] INFO spindle_dev.index: Finished block 5 in 0.10 seconds, found 2 clusters. [2026-01-20 12:52:40,199] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:40,285] INFO spindle_dev.index: Finished block 6 in 0.09 seconds, found 1 clusters. [2026-01-20 12:52:40,286] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:40,392] INFO spindle_dev.index: Finished block 7 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:40,393] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:40,501] INFO spindle_dev.index: Finished block 8 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:40,504] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:40,625] INFO spindle_dev.index: Finished block 9 in 0.12 seconds, found 1 clusters. [2026-01-20 12:52:40,626] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:40,733] INFO spindle_dev.index: Finished block 10 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:40,734] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:40,841] INFO spindle_dev.index: Finished block 11 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:40,842] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:40,956] INFO spindle_dev.index: Finished block 12 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:40,957] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:41,063] INFO spindle_dev.index: Finished block 13 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:41,064] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:41,168] INFO spindle_dev.index: Finished block 14 in 0.10 seconds, found 2 clusters. [2026-01-20 12:52:41,169] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:41,273] INFO spindle_dev.index: Finished block 15 in 0.10 seconds, found 2 clusters. [2026-01-20 12:52:41,273] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:41,378] INFO spindle_dev.index: Finished block 16 in 0.10 seconds, found 2 clusters. [2026-01-20 12:52:41,378] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:52:41,491] INFO spindle_dev.index: Finished block 17 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:41,492] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:52:41,613] INFO spindle_dev.index: Finished block 18 in 0.12 seconds, found 2 clusters. [2026-01-20 12:52:41,614] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:52:41,736] INFO spindle_dev.index: Finished block 19 in 0.12 seconds, found 2 clusters. [2026-01-20 12:52:41,737] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:52:41,904] INFO spindle_dev.index: Finished block 20 in 0.17 seconds, found 5 clusters. [2026-01-20 12:52:41,905] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:52:42,049] INFO spindle_dev.index: Finished block 21 in 0.14 seconds, found 3 clusters. [2026-01-20 12:52:42,049] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:52:42,205] INFO spindle_dev.index: Finished block 22 in 0.16 seconds, found 3 clusters. [2026-01-20 12:52:42,206] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:52:42,369] INFO spindle_dev.index: Finished block 23 in 0.16 seconds, found 5 clusters. [2026-01-20 12:52:42,370] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:52:42,517] INFO spindle_dev.index: Finished block 24 in 0.15 seconds, found 4 clusters. [2026-01-20 12:52:42,518] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:52:42,692] INFO spindle_dev.index: Finished block 25 in 0.17 seconds, found 5 clusters. [2026-01-20 12:52:42,693] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:52:42,885] INFO spindle_dev.index: Finished block 26 in 0.19 seconds, found 6 clusters. [2026-01-20 12:52:42,886] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:52:43,064] INFO spindle_dev.index: Finished block 27 in 0.18 seconds, found 5 clusters. [2026-01-20 12:52:43,066] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:52:43,242] INFO spindle_dev.index: Finished block 28 in 0.18 seconds, found 5 clusters. [2026-01-20 12:52:43,243] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:52:43,415] INFO spindle_dev.index: Finished block 29 in 0.17 seconds, found 5 clusters. [2026-01-20 12:52:43,416] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:52:43,567] INFO spindle_dev.index: Finished block 30 in 0.15 seconds, found 4 clusters. [2026-01-20 12:52:43,568] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:52:43,755] INFO spindle_dev.index: Finished block 31 in 0.19 seconds, found 6 clusters. [2026-01-20 12:52:43,756] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:52:43,926] INFO spindle_dev.index: Finished block 32 in 0.17 seconds, found 5 clusters. [2026-01-20 12:52:43,927] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:52:44,228] INFO spindle_dev.index: Finished block 33 in 0.30 seconds, found 9 clusters. [2026-01-20 12:52:44,229] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:52:45,204] INFO spindle_dev.index: Finished block 34 in 0.98 seconds, found 22 clusters. [2026-01-20 12:52:45,205] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:52:45,342] INFO spindle_dev.index: Finished block 35 in 0.14 seconds, found 3 clusters. [2026-01-20 12:52:45,343] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 12:52:45,494] INFO spindle_dev.index: Finished block 36 in 0.15 seconds, found 4 clusters. [2026-01-20 12:52:45,495] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 12:52:45,829] INFO spindle_dev.index: Finished block 37 in 0.33 seconds, found 3 clusters. [2026-01-20 12:52:45,830] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:52:45,830] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:52:45,831] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:52:45,831] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:52:45,832] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:52:46,267] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:52:46,267] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:52:46,268] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:52:46,268] INFO spindle_dev.index: Building SPD index with epsilon=6.851659581044885 [2026-01-20 12:52:46,269] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:52:47,180] INFO spindle_dev.index: Cluster 4: 1196 SPDs, 39 blocks [2026-01-20 12:52:47,182] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:52:47,255] INFO spindle_dev.index: Finished block 0 in 0.07 seconds, found 1 clusters. [2026-01-20 12:52:47,256] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:47,366] INFO spindle_dev.index: Finished block 1 in 0.11 seconds, found 4 clusters. [2026-01-20 12:52:47,367] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:47,478] INFO spindle_dev.index: Finished block 2 in 0.11 seconds, found 4 clusters. [2026-01-20 12:52:47,479] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:47,604] INFO spindle_dev.index: Finished block 3 in 0.13 seconds, found 5 clusters. [2026-01-20 12:52:47,605] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:47,719] INFO spindle_dev.index: Finished block 4 in 0.11 seconds, found 4 clusters. [2026-01-20 12:52:47,719] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:47,863] INFO spindle_dev.index: Finished block 5 in 0.14 seconds, found 6 clusters. [2026-01-20 12:52:47,864] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:48,020] INFO spindle_dev.index: Finished block 6 in 0.16 seconds, found 7 clusters. [2026-01-20 12:52:48,021] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:48,166] INFO spindle_dev.index: Finished block 7 in 0.15 seconds, found 6 clusters. [2026-01-20 12:52:48,167] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:48,312] INFO spindle_dev.index: Finished block 8 in 0.14 seconds, found 6 clusters. [2026-01-20 12:52:48,313] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:48,457] INFO spindle_dev.index: Finished block 9 in 0.14 seconds, found 6 clusters. [2026-01-20 12:52:48,458] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:48,674] INFO spindle_dev.index: Finished block 10 in 0.22 seconds, found 11 clusters. [2026-01-20 12:52:48,675] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:48,845] INFO spindle_dev.index: Finished block 11 in 0.17 seconds, found 8 clusters. [2026-01-20 12:52:48,846] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:49,019] INFO spindle_dev.index: Finished block 12 in 0.17 seconds, found 8 clusters. [2026-01-20 12:52:49,021] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:49,244] INFO spindle_dev.index: Finished block 13 in 0.22 seconds, found 9 clusters. [2026-01-20 12:52:49,245] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:49,484] INFO spindle_dev.index: Finished block 14 in 0.24 seconds, found 9 clusters. [2026-01-20 12:52:49,485] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:49,743] INFO spindle_dev.index: Finished block 15 in 0.26 seconds, found 11 clusters. [2026-01-20 12:52:49,744] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:49,962] INFO spindle_dev.index: Finished block 16 in 0.22 seconds, found 11 clusters. [2026-01-20 12:52:49,963] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:52:50,224] INFO spindle_dev.index: Finished block 17 in 0.26 seconds, found 14 clusters. [2026-01-20 12:52:50,225] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:52:50,514] INFO spindle_dev.index: Finished block 18 in 0.29 seconds, found 13 clusters. [2026-01-20 12:52:50,515] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:52:50,770] INFO spindle_dev.index: Finished block 19 in 0.25 seconds, found 13 clusters. [2026-01-20 12:52:50,771] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:52:50,978] INFO spindle_dev.index: Finished block 20 in 0.21 seconds, found 10 clusters. [2026-01-20 12:52:50,978] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:52:51,138] INFO spindle_dev.index: Finished block 21 in 0.16 seconds, found 7 clusters. [2026-01-20 12:52:51,139] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:52:51,287] INFO spindle_dev.index: Finished block 22 in 0.15 seconds, found 6 clusters. [2026-01-20 12:52:51,287] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:52:51,467] INFO spindle_dev.index: Finished block 23 in 0.18 seconds, found 8 clusters. [2026-01-20 12:52:51,468] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:52:51,591] INFO spindle_dev.index: Finished block 24 in 0.12 seconds, found 4 clusters. [2026-01-20 12:52:51,592] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:52:51,718] INFO spindle_dev.index: Finished block 25 in 0.13 seconds, found 2 clusters. [2026-01-20 12:52:51,719] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:52:51,815] INFO spindle_dev.index: Finished block 26 in 0.10 seconds, found 2 clusters. [2026-01-20 12:52:51,816] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:52:51,911] INFO spindle_dev.index: Finished block 27 in 0.09 seconds, found 2 clusters. [2026-01-20 12:52:51,912] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:52:52,005] INFO spindle_dev.index: Finished block 28 in 0.09 seconds, found 2 clusters. [2026-01-20 12:52:52,006] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:52:52,099] INFO spindle_dev.index: Finished block 29 in 0.09 seconds, found 2 clusters. [2026-01-20 12:52:52,100] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:52:52,207] INFO spindle_dev.index: Finished block 30 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:52,208] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:52:52,333] INFO spindle_dev.index: Finished block 31 in 0.13 seconds, found 2 clusters. [2026-01-20 12:52:52,333] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:52:52,463] INFO spindle_dev.index: Finished block 32 in 0.13 seconds, found 2 clusters. [2026-01-20 12:52:52,464] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:52:52,570] INFO spindle_dev.index: Finished block 33 in 0.11 seconds, found 2 clusters. [2026-01-20 12:52:52,572] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:52:52,717] INFO spindle_dev.index: Finished block 34 in 0.15 seconds, found 5 clusters. [2026-01-20 12:52:52,718] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:52:52,896] INFO spindle_dev.index: Finished block 35 in 0.18 seconds, found 7 clusters. [2026-01-20 12:52:52,898] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 12:52:52,981] INFO spindle_dev.index: Finished block 36 in 0.08 seconds, found 1 clusters. [2026-01-20 12:52:52,982] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 12:52:53,106] INFO spindle_dev.index: Finished block 37 in 0.12 seconds, found 4 clusters. [2026-01-20 12:52:53,107] INFO spindle_dev.index: Using epsilon-net clustering for block 38 [2026-01-20 12:52:53,645] INFO spindle_dev.index: Finished block 38 in 0.54 seconds, found 8 clusters. [2026-01-20 12:52:53,646] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:52:53,647] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:52:53,647] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:52:53,648] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:52:53,648] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:52:53,683] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:52:53,685] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:52:53,685] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:52:53,686] INFO spindle_dev.index: Building SPD index with epsilon=6.414602220897768 [2026-01-20 12:52:53,686] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:52:53,773] INFO spindle_dev.index: Cluster 5: 460 SPDs, 35 blocks [2026-01-20 12:52:53,774] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:52:53,802] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:53,803] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:53,842] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:53,843] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:53,870] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:53,871] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:53,915] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 4 clusters. [2026-01-20 12:52:53,916] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:53,965] INFO spindle_dev.index: Finished block 4 in 0.05 seconds, found 5 clusters. [2026-01-20 12:52:53,965] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:54,027] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 7 clusters. [2026-01-20 12:52:54,028] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:54,080] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 5 clusters. [2026-01-20 12:52:54,080] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:54,142] INFO spindle_dev.index: Finished block 7 in 0.06 seconds, found 7 clusters. [2026-01-20 12:52:54,143] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:54,203] INFO spindle_dev.index: Finished block 8 in 0.06 seconds, found 7 clusters. [2026-01-20 12:52:54,204] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:54,269] INFO spindle_dev.index: Finished block 9 in 0.07 seconds, found 7 clusters. [2026-01-20 12:52:54,270] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:54,349] INFO spindle_dev.index: Finished block 10 in 0.08 seconds, found 10 clusters. [2026-01-20 12:52:54,350] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:54,421] INFO spindle_dev.index: Finished block 11 in 0.07 seconds, found 9 clusters. [2026-01-20 12:52:54,421] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:54,498] INFO spindle_dev.index: Finished block 12 in 0.08 seconds, found 10 clusters. [2026-01-20 12:52:54,498] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:54,579] INFO spindle_dev.index: Finished block 13 in 0.08 seconds, found 11 clusters. [2026-01-20 12:52:54,580] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:54,651] INFO spindle_dev.index: Finished block 14 in 0.07 seconds, found 9 clusters. [2026-01-20 12:52:54,652] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:54,765] INFO spindle_dev.index: Finished block 15 in 0.11 seconds, found 16 clusters. [2026-01-20 12:52:54,766] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:54,865] INFO spindle_dev.index: Finished block 16 in 0.10 seconds, found 14 clusters. [2026-01-20 12:52:54,866] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:52:54,961] INFO spindle_dev.index: Finished block 17 in 0.10 seconds, found 13 clusters. [2026-01-20 12:52:54,962] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:52:55,045] INFO spindle_dev.index: Finished block 18 in 0.08 seconds, found 10 clusters. [2026-01-20 12:52:55,046] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:52:55,100] INFO spindle_dev.index: Finished block 19 in 0.05 seconds, found 5 clusters. [2026-01-20 12:52:55,101] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:52:55,138] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 2 clusters. [2026-01-20 12:52:55,139] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:52:55,296] INFO spindle_dev.index: Finished block 21 in 0.16 seconds, found 6 clusters. [2026-01-20 12:52:55,296] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:52:55,360] INFO spindle_dev.index: Finished block 22 in 0.06 seconds, found 6 clusters. [2026-01-20 12:52:55,360] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:52:55,402] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:55,403] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:52:55,478] INFO spindle_dev.index: Finished block 24 in 0.07 seconds, found 2 clusters. [2026-01-20 12:52:55,479] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:52:55,526] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 2 clusters. [2026-01-20 12:52:55,527] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:52:55,557] INFO spindle_dev.index: Finished block 26 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:55,557] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:52:55,587] INFO spindle_dev.index: Finished block 27 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:55,588] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:52:55,620] INFO spindle_dev.index: Finished block 28 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:55,621] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:52:55,652] INFO spindle_dev.index: Finished block 29 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:55,652] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:52:55,686] INFO spindle_dev.index: Finished block 30 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:55,687] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:52:55,873] INFO spindle_dev.index: Finished block 31 in 0.19 seconds, found 6 clusters. [2026-01-20 12:52:55,874] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:52:55,966] INFO spindle_dev.index: Finished block 32 in 0.09 seconds, found 11 clusters. [2026-01-20 12:52:55,967] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:52:56,048] INFO spindle_dev.index: Finished block 33 in 0.08 seconds, found 10 clusters. [2026-01-20 12:52:56,048] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:52:56,258] INFO spindle_dev.index: Finished block 34 in 0.21 seconds, found 25 clusters. [2026-01-20 12:52:56,259] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:52:56,260] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:52:56,260] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:52:56,261] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:52:56,261] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:52:56,276] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:52:56,277] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:52:56,277] INFO spindle_dev.index: Processing cluster 6 [2026-01-20 12:52:56,278] INFO spindle_dev.index: Building SPD index with epsilon=7.348541690464721 [2026-01-20 12:52:56,278] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:52:56,372] INFO spindle_dev.index: Cluster 6: 414 SPDs, 38 blocks [2026-01-20 12:52:56,374] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:52:56,401] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 12:52:56,402] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:56,426] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 1 clusters. [2026-01-20 12:52:56,428] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:56,460] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:56,461] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:56,494] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:56,495] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:56,525] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:56,525] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:56,555] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:56,556] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:56,592] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:56,592] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:56,627] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 3 clusters. [2026-01-20 12:52:56,628] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:56,662] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 3 clusters. [2026-01-20 12:52:56,663] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:56,693] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:56,694] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:56,730] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:56,731] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:56,763] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:56,763] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:56,805] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 4 clusters. [2026-01-20 12:52:56,805] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:56,841] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:56,841] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:56,886] INFO spindle_dev.index: Finished block 14 in 0.04 seconds, found 5 clusters. [2026-01-20 12:52:56,887] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:56,922] INFO spindle_dev.index: Finished block 15 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:56,922] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:56,958] INFO spindle_dev.index: Finished block 16 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:56,958] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:52:57,000] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 4 clusters. [2026-01-20 12:52:57,000] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:52:57,044] INFO spindle_dev.index: Finished block 18 in 0.04 seconds, found 4 clusters. [2026-01-20 12:52:57,045] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:52:57,104] INFO spindle_dev.index: Finished block 19 in 0.06 seconds, found 7 clusters. [2026-01-20 12:52:57,105] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:52:57,143] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:57,143] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:52:57,191] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 5 clusters. [2026-01-20 12:52:57,192] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:52:57,245] INFO spindle_dev.index: Finished block 22 in 0.05 seconds, found 4 clusters. [2026-01-20 12:52:57,246] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:52:57,289] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 4 clusters. [2026-01-20 12:52:57,290] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:52:57,323] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:57,324] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:52:57,367] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 4 clusters. [2026-01-20 12:52:57,368] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:52:57,511] INFO spindle_dev.index: Finished block 26 in 0.14 seconds, found 4 clusters. [2026-01-20 12:52:57,511] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:52:57,557] INFO spindle_dev.index: Finished block 27 in 0.05 seconds, found 4 clusters. [2026-01-20 12:52:57,558] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:52:57,597] INFO spindle_dev.index: Finished block 28 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:57,598] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:52:57,638] INFO spindle_dev.index: Finished block 29 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:57,639] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:52:57,680] INFO spindle_dev.index: Finished block 30 in 0.04 seconds, found 2 clusters. [2026-01-20 12:52:57,680] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:52:57,715] INFO spindle_dev.index: Finished block 31 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:57,716] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:52:57,754] INFO spindle_dev.index: Finished block 32 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:57,754] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:52:57,787] INFO spindle_dev.index: Finished block 33 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:57,788] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:52:57,821] INFO spindle_dev.index: Finished block 34 in 0.03 seconds, found 2 clusters. [2026-01-20 12:52:57,822] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:52:58,002] INFO spindle_dev.index: Finished block 35 in 0.18 seconds, found 6 clusters. [2026-01-20 12:52:58,003] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 12:52:58,042] INFO spindle_dev.index: Finished block 36 in 0.04 seconds, found 2 clusters. [2026-01-20 12:52:58,042] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 12:52:58,078] INFO spindle_dev.index: Finished block 37 in 0.04 seconds, found 3 clusters. [2026-01-20 12:52:58,078] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:52:58,079] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:52:58,079] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:52:58,079] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:52:58,080] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:52:58,092] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:52:58,093] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:52:58,093] INFO spindle_dev.index: Processing cluster 7 [2026-01-20 12:52:58,093] INFO spindle_dev.index: Building SPD index with epsilon=1.8774843590512265 [2026-01-20 12:52:58,094] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:52:58,121] INFO spindle_dev.index: Cluster 7: 34 SPDs, 19 blocks [2026-01-20 12:52:58,123] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:52:58,125] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 1 clusters. [2026-01-20 12:52:58,126] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:52:58,130] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 6 clusters. [2026-01-20 12:52:58,130] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:52:58,136] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 7 clusters. [2026-01-20 12:52:58,136] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:52:58,141] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 8 clusters. [2026-01-20 12:52:58,142] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:52:58,146] INFO spindle_dev.index: Finished block 4 in 0.00 seconds, found 5 clusters. [2026-01-20 12:52:58,146] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:52:58,152] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 9 clusters. [2026-01-20 12:52:58,153] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:52:58,162] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 13 clusters. [2026-01-20 12:52:58,163] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:52:58,168] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 8 clusters. [2026-01-20 12:52:58,169] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:52:58,175] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 10 clusters. [2026-01-20 12:52:58,176] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:52:58,184] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 14 clusters. [2026-01-20 12:52:58,185] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:52:58,192] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 13 clusters. [2026-01-20 12:52:58,193] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:52:58,216] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 33 clusters. [2026-01-20 12:52:58,217] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:52:58,223] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 9 clusters. [2026-01-20 12:52:58,223] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:52:58,228] INFO spindle_dev.index: Finished block 13 in 0.00 seconds, found 5 clusters. [2026-01-20 12:52:58,229] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:52:58,235] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 7 clusters. [2026-01-20 12:52:58,236] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:52:58,244] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 11 clusters. [2026-01-20 12:52:58,244] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:52:58,251] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 1 clusters. [2026-01-20 12:52:58,251] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:53:03,439] INFO spindle_dev.index: Finished block 17 in 5.19 seconds, found 1 clusters. [2026-01-20 12:53:03,453] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:53:07,804] INFO spindle_dev.index: Finished block 18 in 4.35 seconds, found 1 clusters. [2026-01-20 12:53:07,806] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:53:07,806] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:53:07,807] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:53:07,808] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:53:07,809] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:53:07,813] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:53:07,814] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:53:07,818] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:53:07,823] INFO spindle_dev.index: Building SPD index with epsilon=6.102528176453383 [2026-01-20 12:53:07,824] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:53:08,844] INFO spindle_dev.index: Cluster 0: 3053 SPDs, 36 blocks [2026-01-20 12:53:08,845] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:53:09,058] INFO spindle_dev.index: Finished block 0 in 0.21 seconds, found 2 clusters. [2026-01-20 12:53:09,059] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:53:09,427] INFO spindle_dev.index: Finished block 1 in 0.37 seconds, found 6 clusters. [2026-01-20 12:53:09,428] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:53:09,728] INFO spindle_dev.index: Finished block 2 in 0.30 seconds, found 4 clusters. [2026-01-20 12:53:09,729] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:53:10,038] INFO spindle_dev.index: Finished block 3 in 0.31 seconds, found 4 clusters. [2026-01-20 12:53:10,040] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:53:10,570] INFO spindle_dev.index: Finished block 4 in 0.53 seconds, found 10 clusters. [2026-01-20 12:53:10,572] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:53:11,194] INFO spindle_dev.index: Finished block 5 in 0.62 seconds, found 10 clusters. [2026-01-20 12:53:11,195] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:53:11,765] INFO spindle_dev.index: Finished block 6 in 0.57 seconds, found 11 clusters. [2026-01-20 12:53:11,767] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:53:12,345] INFO spindle_dev.index: Finished block 7 in 0.58 seconds, found 11 clusters. [2026-01-20 12:53:12,347] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:53:12,969] INFO spindle_dev.index: Finished block 8 in 0.62 seconds, found 12 clusters. [2026-01-20 12:53:12,971] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:53:13,598] INFO spindle_dev.index: Finished block 9 in 0.63 seconds, found 12 clusters. [2026-01-20 12:53:13,599] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:53:14,356] INFO spindle_dev.index: Finished block 10 in 0.76 seconds, found 15 clusters. [2026-01-20 12:53:14,357] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:53:14,914] INFO spindle_dev.index: Finished block 11 in 0.56 seconds, found 10 clusters. [2026-01-20 12:53:14,915] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:53:15,668] INFO spindle_dev.index: Finished block 12 in 0.75 seconds, found 15 clusters. [2026-01-20 12:53:15,669] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:53:16,509] INFO spindle_dev.index: Finished block 13 in 0.84 seconds, found 17 clusters. [2026-01-20 12:53:16,510] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:53:17,270] INFO spindle_dev.index: Finished block 14 in 0.76 seconds, found 15 clusters. [2026-01-20 12:53:17,271] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:53:18,102] INFO spindle_dev.index: Finished block 15 in 0.83 seconds, found 17 clusters. [2026-01-20 12:53:18,106] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:53:19,158] INFO spindle_dev.index: Finished block 16 in 1.05 seconds, found 22 clusters. [2026-01-20 12:53:19,160] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:53:20,072] INFO spindle_dev.index: Finished block 17 in 0.91 seconds, found 19 clusters. [2026-01-20 12:53:20,072] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:53:21,037] INFO spindle_dev.index: Finished block 18 in 0.96 seconds, found 20 clusters. [2026-01-20 12:53:21,038] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:53:22,030] INFO spindle_dev.index: Finished block 19 in 0.99 seconds, found 21 clusters. [2026-01-20 12:53:22,032] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:53:23,300] INFO spindle_dev.index: Finished block 20 in 1.27 seconds, found 26 clusters. [2026-01-20 12:53:23,301] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:53:23,856] INFO spindle_dev.index: Finished block 21 in 0.56 seconds, found 10 clusters. [2026-01-20 12:53:23,857] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:53:24,464] INFO spindle_dev.index: Finished block 22 in 0.61 seconds, found 11 clusters. [2026-01-20 12:53:24,465] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:53:25,831] INFO spindle_dev.index: Finished block 23 in 1.37 seconds, found 15 clusters. [2026-01-20 12:53:25,832] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:53:26,357] INFO spindle_dev.index: Finished block 24 in 0.52 seconds, found 6 clusters. [2026-01-20 12:53:26,358] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:53:26,974] INFO spindle_dev.index: Finished block 25 in 0.62 seconds, found 2 clusters. [2026-01-20 12:53:26,975] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:53:27,464] INFO spindle_dev.index: Finished block 26 in 0.49 seconds, found 8 clusters. [2026-01-20 12:53:27,465] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:53:27,721] INFO spindle_dev.index: Finished block 27 in 0.26 seconds, found 2 clusters. [2026-01-20 12:53:27,723] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:53:27,942] INFO spindle_dev.index: Finished block 28 in 0.22 seconds, found 1 clusters. [2026-01-20 12:53:27,943] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:53:28,159] INFO spindle_dev.index: Finished block 29 in 0.22 seconds, found 1 clusters. [2026-01-20 12:53:28,161] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:53:28,383] INFO spindle_dev.index: Finished block 30 in 0.22 seconds, found 1 clusters. [2026-01-20 12:53:28,384] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:53:28,603] INFO spindle_dev.index: Finished block 31 in 0.22 seconds, found 1 clusters. [2026-01-20 12:53:28,604] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:53:28,813] INFO spindle_dev.index: Finished block 32 in 0.21 seconds, found 1 clusters. [2026-01-20 12:53:28,815] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:53:29,023] INFO spindle_dev.index: Finished block 33 in 0.21 seconds, found 1 clusters. [2026-01-20 12:53:29,024] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:53:29,240] INFO spindle_dev.index: Finished block 34 in 0.22 seconds, found 1 clusters. [2026-01-20 12:53:29,241] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:53:30,200] INFO spindle_dev.index: Finished block 35 in 0.96 seconds, found 1 clusters. [2026-01-20 12:53:30,200] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:53:30,201] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:53:30,201] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:53:30,202] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:53:30,202] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:53:30,279] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:53:30,280] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:53:30,281] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:53:30,281] INFO spindle_dev.index: Building SPD index with epsilon=7.198015254724661 [2026-01-20 12:53:30,282] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:53:30,649] INFO spindle_dev.index: Cluster 1: 2643 SPDs, 36 blocks [2026-01-20 12:53:30,651] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:53:30,813] INFO spindle_dev.index: Finished block 0 in 0.16 seconds, found 1 clusters. [2026-01-20 12:53:30,814] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:53:30,962] INFO spindle_dev.index: Finished block 1 in 0.15 seconds, found 1 clusters. [2026-01-20 12:53:30,963] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:53:31,144] INFO spindle_dev.index: Finished block 2 in 0.18 seconds, found 2 clusters. [2026-01-20 12:53:31,145] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:53:31,324] INFO spindle_dev.index: Finished block 3 in 0.18 seconds, found 2 clusters. [2026-01-20 12:53:31,325] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:53:31,537] INFO spindle_dev.index: Finished block 4 in 0.21 seconds, found 3 clusters. [2026-01-20 12:53:31,538] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:53:31,783] INFO spindle_dev.index: Finished block 5 in 0.25 seconds, found 4 clusters. [2026-01-20 12:53:31,784] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:53:32,004] INFO spindle_dev.index: Finished block 6 in 0.22 seconds, found 3 clusters. [2026-01-20 12:53:32,005] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:53:32,190] INFO spindle_dev.index: Finished block 7 in 0.18 seconds, found 2 clusters. [2026-01-20 12:53:32,191] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:53:32,437] INFO spindle_dev.index: Finished block 8 in 0.25 seconds, found 4 clusters. [2026-01-20 12:53:32,438] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:53:32,618] INFO spindle_dev.index: Finished block 9 in 0.18 seconds, found 2 clusters. [2026-01-20 12:53:32,619] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:53:32,864] INFO spindle_dev.index: Finished block 10 in 0.25 seconds, found 3 clusters. [2026-01-20 12:53:32,865] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:53:33,097] INFO spindle_dev.index: Finished block 11 in 0.23 seconds, found 3 clusters. [2026-01-20 12:53:33,098] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:53:33,345] INFO spindle_dev.index: Finished block 12 in 0.25 seconds, found 3 clusters. [2026-01-20 12:53:33,346] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:53:33,595] INFO spindle_dev.index: Finished block 13 in 0.25 seconds, found 3 clusters. [2026-01-20 12:53:33,597] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:53:33,825] INFO spindle_dev.index: Finished block 14 in 0.23 seconds, found 3 clusters. [2026-01-20 12:53:33,826] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:53:34,015] INFO spindle_dev.index: Finished block 15 in 0.19 seconds, found 2 clusters. [2026-01-20 12:53:34,016] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:53:34,286] INFO spindle_dev.index: Finished block 16 in 0.27 seconds, found 4 clusters. [2026-01-20 12:53:34,287] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:53:34,616] INFO spindle_dev.index: Finished block 17 in 0.33 seconds, found 6 clusters. [2026-01-20 12:53:34,617] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:53:34,951] INFO spindle_dev.index: Finished block 18 in 0.33 seconds, found 6 clusters. [2026-01-20 12:53:34,952] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:53:35,315] INFO spindle_dev.index: Finished block 19 in 0.36 seconds, found 7 clusters. [2026-01-20 12:53:35,316] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:53:35,535] INFO spindle_dev.index: Finished block 20 in 0.22 seconds, found 2 clusters. [2026-01-20 12:53:35,537] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:53:35,885] INFO spindle_dev.index: Finished block 21 in 0.35 seconds, found 6 clusters. [2026-01-20 12:53:35,886] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:53:36,186] INFO spindle_dev.index: Finished block 22 in 0.30 seconds, found 5 clusters. [2026-01-20 12:53:36,187] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:53:36,423] INFO spindle_dev.index: Finished block 23 in 0.24 seconds, found 3 clusters. [2026-01-20 12:53:36,424] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:53:36,634] INFO spindle_dev.index: Finished block 24 in 0.21 seconds, found 2 clusters. [2026-01-20 12:53:36,635] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:53:37,661] INFO spindle_dev.index: Finished block 25 in 1.03 seconds, found 5 clusters. [2026-01-20 12:53:37,663] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:53:37,970] INFO spindle_dev.index: Finished block 26 in 0.31 seconds, found 5 clusters. [2026-01-20 12:53:37,972] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:53:38,322] INFO spindle_dev.index: Finished block 27 in 0.35 seconds, found 4 clusters. [2026-01-20 12:53:38,324] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:53:38,533] INFO spindle_dev.index: Finished block 28 in 0.21 seconds, found 2 clusters. [2026-01-20 12:53:38,534] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:53:38,713] INFO spindle_dev.index: Finished block 29 in 0.18 seconds, found 1 clusters. [2026-01-20 12:53:38,715] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:53:38,896] INFO spindle_dev.index: Finished block 30 in 0.18 seconds, found 1 clusters. [2026-01-20 12:53:38,898] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:53:39,117] INFO spindle_dev.index: Finished block 31 in 0.22 seconds, found 1 clusters. [2026-01-20 12:53:39,118] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:53:39,334] INFO spindle_dev.index: Finished block 32 in 0.22 seconds, found 2 clusters. [2026-01-20 12:53:39,335] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:53:39,521] INFO spindle_dev.index: Finished block 33 in 0.19 seconds, found 1 clusters. [2026-01-20 12:53:39,523] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:53:39,732] INFO spindle_dev.index: Finished block 34 in 0.21 seconds, found 1 clusters. [2026-01-20 12:53:39,734] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:53:41,631] INFO spindle_dev.index: Finished block 35 in 1.90 seconds, found 26 clusters. [2026-01-20 12:53:41,633] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:53:41,634] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:53:41,634] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:53:41,635] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:53:41,635] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:53:41,703] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:53:41,703] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:53:41,704] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:53:41,704] INFO spindle_dev.index: Building SPD index with epsilon=7.622794235690398 [2026-01-20 12:53:41,705] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:53:42,006] INFO spindle_dev.index: Cluster 2: 1523 SPDs, 35 blocks [2026-01-20 12:53:42,009] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:53:42,111] INFO spindle_dev.index: Finished block 0 in 0.10 seconds, found 1 clusters. [2026-01-20 12:53:42,112] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:53:42,200] INFO spindle_dev.index: Finished block 1 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:42,202] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:53:42,291] INFO spindle_dev.index: Finished block 2 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:42,292] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:53:42,395] INFO spindle_dev.index: Finished block 3 in 0.10 seconds, found 2 clusters. [2026-01-20 12:53:42,397] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:53:42,484] INFO spindle_dev.index: Finished block 4 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:42,485] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:53:42,587] INFO spindle_dev.index: Finished block 5 in 0.10 seconds, found 2 clusters. [2026-01-20 12:53:42,587] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:53:42,694] INFO spindle_dev.index: Finished block 6 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:42,695] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:53:42,807] INFO spindle_dev.index: Finished block 7 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:42,808] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:53:42,931] INFO spindle_dev.index: Finished block 8 in 0.12 seconds, found 3 clusters. [2026-01-20 12:53:42,932] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:53:43,063] INFO spindle_dev.index: Finished block 9 in 0.13 seconds, found 3 clusters. [2026-01-20 12:53:43,064] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:53:43,197] INFO spindle_dev.index: Finished block 10 in 0.13 seconds, found 3 clusters. [2026-01-20 12:53:43,199] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:53:43,328] INFO spindle_dev.index: Finished block 11 in 0.13 seconds, found 3 clusters. [2026-01-20 12:53:43,329] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:53:43,441] INFO spindle_dev.index: Finished block 12 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:43,442] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:53:43,575] INFO spindle_dev.index: Finished block 13 in 0.13 seconds, found 3 clusters. [2026-01-20 12:53:43,576] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:53:43,710] INFO spindle_dev.index: Finished block 14 in 0.13 seconds, found 3 clusters. [2026-01-20 12:53:43,711] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:53:43,855] INFO spindle_dev.index: Finished block 15 in 0.14 seconds, found 4 clusters. [2026-01-20 12:53:43,855] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:53:43,982] INFO spindle_dev.index: Finished block 16 in 0.13 seconds, found 3 clusters. [2026-01-20 12:53:43,983] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:53:44,148] INFO spindle_dev.index: Finished block 17 in 0.17 seconds, found 5 clusters. [2026-01-20 12:53:44,149] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:53:44,303] INFO spindle_dev.index: Finished block 18 in 0.15 seconds, found 4 clusters. [2026-01-20 12:53:44,304] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:53:44,501] INFO spindle_dev.index: Finished block 19 in 0.20 seconds, found 6 clusters. [2026-01-20 12:53:44,503] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:53:44,668] INFO spindle_dev.index: Finished block 20 in 0.17 seconds, found 4 clusters. [2026-01-20 12:53:44,669] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:53:44,853] INFO spindle_dev.index: Finished block 21 in 0.18 seconds, found 5 clusters. [2026-01-20 12:53:44,854] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:53:45,032] INFO spindle_dev.index: Finished block 22 in 0.18 seconds, found 5 clusters. [2026-01-20 12:53:45,033] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:53:45,174] INFO spindle_dev.index: Finished block 23 in 0.14 seconds, found 3 clusters. [2026-01-20 12:53:45,174] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:53:45,755] INFO spindle_dev.index: Finished block 24 in 0.58 seconds, found 6 clusters. [2026-01-20 12:53:45,755] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:53:45,930] INFO spindle_dev.index: Finished block 25 in 0.17 seconds, found 3 clusters. [2026-01-20 12:53:45,931] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:53:46,058] INFO spindle_dev.index: Finished block 26 in 0.13 seconds, found 2 clusters. [2026-01-20 12:53:46,059] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:53:46,203] INFO spindle_dev.index: Finished block 27 in 0.14 seconds, found 3 clusters. [2026-01-20 12:53:46,204] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:53:46,329] INFO spindle_dev.index: Finished block 28 in 0.13 seconds, found 2 clusters. [2026-01-20 12:53:46,330] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:53:46,458] INFO spindle_dev.index: Finished block 29 in 0.13 seconds, found 2 clusters. [2026-01-20 12:53:46,459] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:53:46,587] INFO spindle_dev.index: Finished block 30 in 0.13 seconds, found 2 clusters. [2026-01-20 12:53:46,588] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:53:46,717] INFO spindle_dev.index: Finished block 31 in 0.13 seconds, found 2 clusters. [2026-01-20 12:53:46,718] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:53:47,513] INFO spindle_dev.index: Finished block 32 in 0.80 seconds, found 14 clusters. [2026-01-20 12:53:47,514] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:53:47,704] INFO spindle_dev.index: Finished block 33 in 0.19 seconds, found 4 clusters. [2026-01-20 12:53:47,704] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:53:48,197] INFO spindle_dev.index: Finished block 34 in 0.49 seconds, found 2 clusters. [2026-01-20 12:53:48,198] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:53:48,198] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:53:48,199] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:53:48,199] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:53:48,200] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:53:48,240] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:53:48,240] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:53:48,241] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:53:48,241] INFO spindle_dev.index: Building SPD index with epsilon=7.687026962565294 [2026-01-20 12:53:48,242] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:53:48,457] INFO spindle_dev.index: Cluster 3: 1479 SPDs, 38 blocks [2026-01-20 12:53:48,459] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:53:48,552] INFO spindle_dev.index: Finished block 0 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:48,553] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:53:48,644] INFO spindle_dev.index: Finished block 1 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:48,646] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:53:48,733] INFO spindle_dev.index: Finished block 2 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:48,734] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:53:48,843] INFO spindle_dev.index: Finished block 3 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:48,845] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:53:48,933] INFO spindle_dev.index: Finished block 4 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:48,934] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:53:49,041] INFO spindle_dev.index: Finished block 5 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:49,042] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:53:49,133] INFO spindle_dev.index: Finished block 6 in 0.09 seconds, found 1 clusters. [2026-01-20 12:53:49,134] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:53:49,242] INFO spindle_dev.index: Finished block 7 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:49,243] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:53:49,353] INFO spindle_dev.index: Finished block 8 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:49,354] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:53:49,474] INFO spindle_dev.index: Finished block 9 in 0.12 seconds, found 1 clusters. [2026-01-20 12:53:49,475] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:53:49,585] INFO spindle_dev.index: Finished block 10 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:49,586] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:53:49,700] INFO spindle_dev.index: Finished block 11 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:49,701] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:53:49,815] INFO spindle_dev.index: Finished block 12 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:49,816] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:53:49,933] INFO spindle_dev.index: Finished block 13 in 0.12 seconds, found 2 clusters. [2026-01-20 12:53:49,934] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:53:50,047] INFO spindle_dev.index: Finished block 14 in 0.11 seconds, found 2 clusters. [2026-01-20 12:53:50,048] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:53:50,163] INFO spindle_dev.index: Finished block 15 in 0.12 seconds, found 2 clusters. [2026-01-20 12:53:50,164] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:53:50,280] INFO spindle_dev.index: Finished block 16 in 0.12 seconds, found 2 clusters. [2026-01-20 12:53:50,281] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:53:50,402] INFO spindle_dev.index: Finished block 17 in 0.12 seconds, found 2 clusters. [2026-01-20 12:53:50,403] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:53:50,519] INFO spindle_dev.index: Finished block 18 in 0.12 seconds, found 2 clusters. [2026-01-20 12:53:50,520] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:53:50,635] INFO spindle_dev.index: Finished block 19 in 0.12 seconds, found 2 clusters. [2026-01-20 12:53:50,636] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:53:50,811] INFO spindle_dev.index: Finished block 20 in 0.18 seconds, found 5 clusters. [2026-01-20 12:53:50,812] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:53:50,961] INFO spindle_dev.index: Finished block 21 in 0.15 seconds, found 3 clusters. [2026-01-20 12:53:50,962] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:53:51,134] INFO spindle_dev.index: Finished block 22 in 0.17 seconds, found 3 clusters. [2026-01-20 12:53:51,135] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:53:51,315] INFO spindle_dev.index: Finished block 23 in 0.18 seconds, found 5 clusters. [2026-01-20 12:53:51,316] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:53:51,476] INFO spindle_dev.index: Finished block 24 in 0.16 seconds, found 4 clusters. [2026-01-20 12:53:51,477] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:53:51,651] INFO spindle_dev.index: Finished block 25 in 0.17 seconds, found 5 clusters. [2026-01-20 12:53:51,652] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:53:51,840] INFO spindle_dev.index: Finished block 26 in 0.19 seconds, found 6 clusters. [2026-01-20 12:53:51,842] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:53:52,015] INFO spindle_dev.index: Finished block 27 in 0.17 seconds, found 5 clusters. [2026-01-20 12:53:52,016] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:53:52,190] INFO spindle_dev.index: Finished block 28 in 0.17 seconds, found 5 clusters. [2026-01-20 12:53:52,191] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:53:52,367] INFO spindle_dev.index: Finished block 29 in 0.18 seconds, found 5 clusters. [2026-01-20 12:53:52,368] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:53:52,528] INFO spindle_dev.index: Finished block 30 in 0.16 seconds, found 4 clusters. [2026-01-20 12:53:52,529] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:53:52,722] INFO spindle_dev.index: Finished block 31 in 0.19 seconds, found 6 clusters. [2026-01-20 12:53:52,722] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:53:52,892] INFO spindle_dev.index: Finished block 32 in 0.17 seconds, found 5 clusters. [2026-01-20 12:53:52,893] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:53:53,187] INFO spindle_dev.index: Finished block 33 in 0.29 seconds, found 9 clusters. [2026-01-20 12:53:53,188] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:53:54,170] INFO spindle_dev.index: Finished block 34 in 0.98 seconds, found 22 clusters. [2026-01-20 12:53:54,171] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:53:54,305] INFO spindle_dev.index: Finished block 35 in 0.13 seconds, found 3 clusters. [2026-01-20 12:53:54,306] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 12:53:54,460] INFO spindle_dev.index: Finished block 36 in 0.15 seconds, found 4 clusters. [2026-01-20 12:53:54,461] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 12:53:54,820] INFO spindle_dev.index: Finished block 37 in 0.36 seconds, found 3 clusters. [2026-01-20 12:53:54,821] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:53:54,822] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:53:54,823] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:53:54,823] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:53:54,824] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:53:54,865] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:53:54,866] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:53:54,867] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:53:54,867] INFO spindle_dev.index: Building SPD index with epsilon=6.851659581044885 [2026-01-20 12:53:54,867] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:53:55,022] INFO spindle_dev.index: Cluster 4: 1196 SPDs, 39 blocks [2026-01-20 12:53:55,023] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:53:55,098] INFO spindle_dev.index: Finished block 0 in 0.07 seconds, found 1 clusters. [2026-01-20 12:53:55,098] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:53:55,207] INFO spindle_dev.index: Finished block 1 in 0.11 seconds, found 4 clusters. [2026-01-20 12:53:55,208] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:53:55,315] INFO spindle_dev.index: Finished block 2 in 0.11 seconds, found 4 clusters. [2026-01-20 12:53:55,316] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:53:55,442] INFO spindle_dev.index: Finished block 3 in 0.13 seconds, found 5 clusters. [2026-01-20 12:53:55,443] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:53:55,560] INFO spindle_dev.index: Finished block 4 in 0.12 seconds, found 4 clusters. [2026-01-20 12:53:55,561] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:53:55,711] INFO spindle_dev.index: Finished block 5 in 0.15 seconds, found 6 clusters. [2026-01-20 12:53:55,712] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:53:55,873] INFO spindle_dev.index: Finished block 6 in 0.16 seconds, found 7 clusters. [2026-01-20 12:53:55,875] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:53:56,023] INFO spindle_dev.index: Finished block 7 in 0.15 seconds, found 6 clusters. [2026-01-20 12:53:56,024] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:53:56,166] INFO spindle_dev.index: Finished block 8 in 0.14 seconds, found 6 clusters. [2026-01-20 12:53:56,167] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:53:56,309] INFO spindle_dev.index: Finished block 9 in 0.14 seconds, found 6 clusters. [2026-01-20 12:53:56,309] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:53:56,524] INFO spindle_dev.index: Finished block 10 in 0.21 seconds, found 11 clusters. [2026-01-20 12:53:56,525] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:53:56,697] INFO spindle_dev.index: Finished block 11 in 0.17 seconds, found 8 clusters. [2026-01-20 12:53:56,698] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:53:56,880] INFO spindle_dev.index: Finished block 12 in 0.18 seconds, found 8 clusters. [2026-01-20 12:53:56,881] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:53:57,081] INFO spindle_dev.index: Finished block 13 in 0.20 seconds, found 9 clusters. [2026-01-20 12:53:57,082] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:53:57,278] INFO spindle_dev.index: Finished block 14 in 0.20 seconds, found 9 clusters. [2026-01-20 12:53:57,279] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:53:57,496] INFO spindle_dev.index: Finished block 15 in 0.22 seconds, found 11 clusters. [2026-01-20 12:53:57,497] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:53:57,714] INFO spindle_dev.index: Finished block 16 in 0.22 seconds, found 11 clusters. [2026-01-20 12:53:57,715] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:53:57,983] INFO spindle_dev.index: Finished block 17 in 0.27 seconds, found 14 clusters. [2026-01-20 12:53:57,984] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:53:58,280] INFO spindle_dev.index: Finished block 18 in 0.30 seconds, found 13 clusters. [2026-01-20 12:53:58,281] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:53:58,533] INFO spindle_dev.index: Finished block 19 in 0.25 seconds, found 13 clusters. [2026-01-20 12:53:58,534] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:53:58,739] INFO spindle_dev.index: Finished block 20 in 0.21 seconds, found 10 clusters. [2026-01-20 12:53:58,740] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:53:58,904] INFO spindle_dev.index: Finished block 21 in 0.16 seconds, found 7 clusters. [2026-01-20 12:53:58,905] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:53:59,057] INFO spindle_dev.index: Finished block 22 in 0.15 seconds, found 6 clusters. [2026-01-20 12:53:59,059] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:53:59,245] INFO spindle_dev.index: Finished block 23 in 0.19 seconds, found 8 clusters. [2026-01-20 12:53:59,246] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:53:59,372] INFO spindle_dev.index: Finished block 24 in 0.13 seconds, found 4 clusters. [2026-01-20 12:53:59,373] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:53:59,504] INFO spindle_dev.index: Finished block 25 in 0.13 seconds, found 2 clusters. [2026-01-20 12:53:59,506] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:53:59,605] INFO spindle_dev.index: Finished block 26 in 0.10 seconds, found 2 clusters. [2026-01-20 12:53:59,607] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:53:59,703] INFO spindle_dev.index: Finished block 27 in 0.10 seconds, found 2 clusters. [2026-01-20 12:53:59,704] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:53:59,801] INFO spindle_dev.index: Finished block 28 in 0.10 seconds, found 2 clusters. [2026-01-20 12:53:59,802] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:53:59,896] INFO spindle_dev.index: Finished block 29 in 0.10 seconds, found 2 clusters. [2026-01-20 12:53:59,897] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:54:00,008] INFO spindle_dev.index: Finished block 30 in 0.11 seconds, found 2 clusters. [2026-01-20 12:54:00,008] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:54:00,140] INFO spindle_dev.index: Finished block 31 in 0.13 seconds, found 2 clusters. [2026-01-20 12:54:00,141] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:54:00,276] INFO spindle_dev.index: Finished block 32 in 0.14 seconds, found 2 clusters. [2026-01-20 12:54:00,277] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:54:00,384] INFO spindle_dev.index: Finished block 33 in 0.11 seconds, found 2 clusters. [2026-01-20 12:54:00,385] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:54:00,531] INFO spindle_dev.index: Finished block 34 in 0.15 seconds, found 5 clusters. [2026-01-20 12:54:00,532] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:54:00,708] INFO spindle_dev.index: Finished block 35 in 0.18 seconds, found 7 clusters. [2026-01-20 12:54:00,709] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 12:54:00,791] INFO spindle_dev.index: Finished block 36 in 0.08 seconds, found 1 clusters. [2026-01-20 12:54:00,792] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 12:54:00,918] INFO spindle_dev.index: Finished block 37 in 0.13 seconds, found 4 clusters. [2026-01-20 12:54:00,919] INFO spindle_dev.index: Using epsilon-net clustering for block 38 [2026-01-20 12:54:01,473] INFO spindle_dev.index: Finished block 38 in 0.55 seconds, found 8 clusters. [2026-01-20 12:54:01,474] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:54:01,475] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:54:01,475] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:54:01,475] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:54:01,476] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:54:01,510] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:54:01,511] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:54:01,511] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:54:01,512] INFO spindle_dev.index: Building SPD index with epsilon=6.414602220897768 [2026-01-20 12:54:01,512] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:54:01,583] INFO spindle_dev.index: Cluster 5: 460 SPDs, 35 blocks [2026-01-20 12:54:01,585] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:54:01,610] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 12:54:01,611] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:54:01,649] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:01,650] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:54:01,676] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 1 clusters. [2026-01-20 12:54:01,677] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:54:01,721] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 4 clusters. [2026-01-20 12:54:01,722] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:54:01,770] INFO spindle_dev.index: Finished block 4 in 0.05 seconds, found 5 clusters. [2026-01-20 12:54:01,771] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:54:01,833] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 7 clusters. [2026-01-20 12:54:01,833] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:54:01,883] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 5 clusters. [2026-01-20 12:54:01,884] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:54:01,947] INFO spindle_dev.index: Finished block 7 in 0.06 seconds, found 7 clusters. [2026-01-20 12:54:01,947] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:54:02,008] INFO spindle_dev.index: Finished block 8 in 0.06 seconds, found 7 clusters. [2026-01-20 12:54:02,009] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:54:02,071] INFO spindle_dev.index: Finished block 9 in 0.06 seconds, found 7 clusters. [2026-01-20 12:54:02,072] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:54:02,152] INFO spindle_dev.index: Finished block 10 in 0.08 seconds, found 10 clusters. [2026-01-20 12:54:02,153] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:54:02,226] INFO spindle_dev.index: Finished block 11 in 0.07 seconds, found 9 clusters. [2026-01-20 12:54:02,227] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:54:02,306] INFO spindle_dev.index: Finished block 12 in 0.08 seconds, found 10 clusters. [2026-01-20 12:54:02,307] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:54:02,392] INFO spindle_dev.index: Finished block 13 in 0.08 seconds, found 11 clusters. [2026-01-20 12:54:02,392] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:54:02,465] INFO spindle_dev.index: Finished block 14 in 0.07 seconds, found 9 clusters. [2026-01-20 12:54:02,466] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:54:02,585] INFO spindle_dev.index: Finished block 15 in 0.12 seconds, found 16 clusters. [2026-01-20 12:54:02,586] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:54:02,688] INFO spindle_dev.index: Finished block 16 in 0.10 seconds, found 14 clusters. [2026-01-20 12:54:02,689] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:54:02,786] INFO spindle_dev.index: Finished block 17 in 0.10 seconds, found 13 clusters. [2026-01-20 12:54:02,786] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:54:02,867] INFO spindle_dev.index: Finished block 18 in 0.08 seconds, found 10 clusters. [2026-01-20 12:54:02,868] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:54:02,920] INFO spindle_dev.index: Finished block 19 in 0.05 seconds, found 5 clusters. [2026-01-20 12:54:02,921] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:54:02,957] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 2 clusters. [2026-01-20 12:54:02,958] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:54:03,109] INFO spindle_dev.index: Finished block 21 in 0.15 seconds, found 6 clusters. [2026-01-20 12:54:03,110] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:54:03,172] INFO spindle_dev.index: Finished block 22 in 0.06 seconds, found 6 clusters. [2026-01-20 12:54:03,172] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:54:03,215] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:03,215] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:54:03,292] INFO spindle_dev.index: Finished block 24 in 0.08 seconds, found 2 clusters. [2026-01-20 12:54:03,292] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:54:03,343] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 2 clusters. [2026-01-20 12:54:03,344] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:54:03,375] INFO spindle_dev.index: Finished block 26 in 0.03 seconds, found 1 clusters. [2026-01-20 12:54:03,376] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:54:03,407] INFO spindle_dev.index: Finished block 27 in 0.03 seconds, found 1 clusters. [2026-01-20 12:54:03,408] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:54:03,444] INFO spindle_dev.index: Finished block 28 in 0.04 seconds, found 1 clusters. [2026-01-20 12:54:03,444] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:54:03,479] INFO spindle_dev.index: Finished block 29 in 0.03 seconds, found 1 clusters. [2026-01-20 12:54:03,480] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:54:03,516] INFO spindle_dev.index: Finished block 30 in 0.04 seconds, found 1 clusters. [2026-01-20 12:54:03,516] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:54:03,706] INFO spindle_dev.index: Finished block 31 in 0.19 seconds, found 6 clusters. [2026-01-20 12:54:03,707] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:54:03,799] INFO spindle_dev.index: Finished block 32 in 0.09 seconds, found 11 clusters. [2026-01-20 12:54:03,800] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:54:03,880] INFO spindle_dev.index: Finished block 33 in 0.08 seconds, found 10 clusters. [2026-01-20 12:54:03,881] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:54:04,081] INFO spindle_dev.index: Finished block 34 in 0.20 seconds, found 25 clusters. [2026-01-20 12:54:04,081] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:54:04,082] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:54:04,082] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:54:04,082] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:54:04,083] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:54:04,096] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:54:04,097] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:54:04,098] INFO spindle_dev.index: Processing cluster 6 [2026-01-20 12:54:04,098] INFO spindle_dev.index: Building SPD index with epsilon=7.348541690464721 [2026-01-20 12:54:04,098] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:54:04,152] INFO spindle_dev.index: Cluster 6: 414 SPDs, 38 blocks [2026-01-20 12:54:04,153] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:54:04,176] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 1 clusters. [2026-01-20 12:54:04,177] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:54:04,201] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 1 clusters. [2026-01-20 12:54:04,201] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:54:04,230] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:04,231] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:54:04,260] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:04,260] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:54:04,291] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:04,291] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:54:04,321] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:04,322] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:54:04,356] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 3 clusters. [2026-01-20 12:54:04,357] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:54:04,392] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:04,393] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:54:04,428] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 3 clusters. [2026-01-20 12:54:04,429] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:54:04,458] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:04,459] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:54:04,496] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:04,497] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:54:04,530] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:04,531] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:54:04,573] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 4 clusters. [2026-01-20 12:54:04,574] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:54:04,611] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:04,611] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:54:04,657] INFO spindle_dev.index: Finished block 14 in 0.05 seconds, found 5 clusters. [2026-01-20 12:54:04,658] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:54:04,695] INFO spindle_dev.index: Finished block 15 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:04,696] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:54:04,734] INFO spindle_dev.index: Finished block 16 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:04,734] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:54:04,777] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 4 clusters. [2026-01-20 12:54:04,778] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:54:04,823] INFO spindle_dev.index: Finished block 18 in 0.05 seconds, found 4 clusters. [2026-01-20 12:54:04,824] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:54:04,882] INFO spindle_dev.index: Finished block 19 in 0.06 seconds, found 7 clusters. [2026-01-20 12:54:04,882] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:54:04,920] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:04,921] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:54:04,969] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 5 clusters. [2026-01-20 12:54:04,970] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:54:05,022] INFO spindle_dev.index: Finished block 22 in 0.05 seconds, found 4 clusters. [2026-01-20 12:54:05,023] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:54:05,065] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 4 clusters. [2026-01-20 12:54:05,066] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:54:05,098] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:05,099] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:54:05,141] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 4 clusters. [2026-01-20 12:54:05,142] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:54:05,277] INFO spindle_dev.index: Finished block 26 in 0.13 seconds, found 4 clusters. [2026-01-20 12:54:05,277] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:54:05,322] INFO spindle_dev.index: Finished block 27 in 0.04 seconds, found 4 clusters. [2026-01-20 12:54:05,322] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 12:54:05,359] INFO spindle_dev.index: Finished block 28 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:05,359] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 12:54:05,397] INFO spindle_dev.index: Finished block 29 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:05,398] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 12:54:05,436] INFO spindle_dev.index: Finished block 30 in 0.04 seconds, found 2 clusters. [2026-01-20 12:54:05,437] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 12:54:05,470] INFO spindle_dev.index: Finished block 31 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:05,471] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 12:54:05,509] INFO spindle_dev.index: Finished block 32 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:05,510] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 12:54:05,543] INFO spindle_dev.index: Finished block 33 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:05,543] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 12:54:05,576] INFO spindle_dev.index: Finished block 34 in 0.03 seconds, found 2 clusters. [2026-01-20 12:54:05,577] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 12:54:05,763] INFO spindle_dev.index: Finished block 35 in 0.19 seconds, found 6 clusters. [2026-01-20 12:54:05,763] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 12:54:05,804] INFO spindle_dev.index: Finished block 36 in 0.04 seconds, found 2 clusters. [2026-01-20 12:54:05,804] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 12:54:05,841] INFO spindle_dev.index: Finished block 37 in 0.04 seconds, found 3 clusters. [2026-01-20 12:54:05,841] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:54:05,842] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:54:05,842] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:54:05,842] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:54:05,843] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:54:05,856] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:54:05,857] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:54:05,858] INFO spindle_dev.index: Processing cluster 7 [2026-01-20 12:54:05,858] INFO spindle_dev.index: Building SPD index with epsilon=1.8774843590512265 [2026-01-20 12:54:05,858] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:54:05,866] INFO spindle_dev.index: Cluster 7: 34 SPDs, 19 blocks [2026-01-20 12:54:05,867] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:54:05,870] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 1 clusters. [2026-01-20 12:54:05,871] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:54:05,876] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 6 clusters. [2026-01-20 12:54:05,877] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:54:05,881] INFO spindle_dev.index: Finished block 2 in 0.00 seconds, found 7 clusters. [2026-01-20 12:54:05,882] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:54:05,887] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 8 clusters. [2026-01-20 12:54:05,889] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:54:05,894] INFO spindle_dev.index: Finished block 4 in 0.00 seconds, found 5 clusters. [2026-01-20 12:54:05,894] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:54:05,901] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 9 clusters. [2026-01-20 12:54:05,901] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:54:05,911] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 13 clusters. [2026-01-20 12:54:05,912] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:54:05,917] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 8 clusters. [2026-01-20 12:54:05,918] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:54:05,924] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 10 clusters. [2026-01-20 12:54:05,926] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:54:05,935] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 14 clusters. [2026-01-20 12:54:05,935] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:54:05,944] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 13 clusters. [2026-01-20 12:54:05,945] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:54:05,969] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 33 clusters. [2026-01-20 12:54:05,970] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:54:05,977] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 9 clusters. [2026-01-20 12:54:05,977] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:54:05,982] INFO spindle_dev.index: Finished block 13 in 0.00 seconds, found 5 clusters. [2026-01-20 12:54:05,983] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:54:05,989] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 7 clusters. [2026-01-20 12:54:05,990] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:54:05,996] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 11 clusters. [2026-01-20 12:54:05,997] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:54:06,003] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 1 clusters. [2026-01-20 12:54:06,003] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:54:13,469] INFO spindle_dev.index: Finished block 17 in 7.47 seconds, found 1 clusters. [2026-01-20 12:54:13,471] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:54:18,815] INFO spindle_dev.index: Finished block 18 in 5.34 seconds, found 1 clusters. [2026-01-20 12:54:18,818] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:54:18,819] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:54:18,820] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:54:18,822] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:54:18,823] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:54:18,826] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:54:18,827] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:54:36,268] INFO spindle_dev.test: Built ground-truth paths for 3053 SPDs in cluster 0 across 36 blocks. [2026-01-20 12:54:48,586] INFO spindle_dev.test: Built ground-truth paths for 2643 SPDs in cluster 1 across 36 blocks. [2026-01-20 12:54:52,642] INFO spindle_dev.test: Built ground-truth paths for 1523 SPDs in cluster 2 across 35 blocks. [2026-01-20 12:54:56,365] INFO spindle_dev.test: Built ground-truth paths for 1479 SPDs in cluster 3 across 38 blocks. [2026-01-20 12:54:59,263] INFO spindle_dev.test: Built ground-truth paths for 1196 SPDs in cluster 4 across 39 blocks. [2026-01-20 12:54:59,690] INFO spindle_dev.test: Built ground-truth paths for 460 SPDs in cluster 5 across 35 blocks. [2026-01-20 12:55:00,032] INFO spindle_dev.test: Built ground-truth paths for 414 SPDs in cluster 6 across 38 blocks. [2026-01-20 12:55:00,036] INFO spindle_dev.test: Built ground-truth paths for 34 SPDs in cluster 7 across 19 blocks.
Done with search xenium_human_kidney_nondiseased
[2026-01-20 12:55:03,475] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:55:03,476] INFO spindle_dev.index: Building ultrametric features from SPD matrices. [2026-01-20 12:55:34,749] INFO spindle_dev.index: Computing latent features from the tree representations. [2026-01-20 12:55:35,484] INFO spindle_dev.index: Reducing latent features to 30 dimensions using PCA. [2026-01-20 12:55:46,322] INFO spindle_dev.index: Explained variance ratios by PCA components: [0.02177409 0.01621489 0.01402322 0.01061548 0.00804401 0.00778217 0.00701543 0.00619309 0.00554718 0.00534228 0.00509347 0.00502122 0.0047046 0.00462159 0.00455817 0.00440397 0.00429407 0.00424094 0.00418784 0.00394087 0.0039099 0.00384954 0.00378505 0.0037558 0.00374439 0.00363669 0.00356704 0.00348344 0.00337764 0.00329356] [2026-01-20 12:55:46,324] INFO spindle_dev.index: Reducing latent features to 2 dimensions using UMAP. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism. warn( [2026-01-20 12:55:47,758] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:55:47,759] INFO spindle_dev.index: Clustering SPD matrices using Leiden clustering with resolution 0.50. [2026-01-20 12:55:47,805] INFO spindle_dev.index: Since clustering method is tree, I am going to find global order per cluster [2026-01-20 12:55:47,806] INFO spindle_dev.index: Finding consensus tree for cluster 0 [2026-01-20 12:55:47,877] INFO spindle_dev.index: Finding consensus tree for cluster 1 [2026-01-20 12:55:47,926] INFO spindle_dev.index: Finding consensus tree for cluster 2 [2026-01-20 12:55:47,972] INFO spindle_dev.index: Finding consensus tree for cluster 3 [2026-01-20 12:55:48,010] INFO spindle_dev.index: Finding consensus tree for cluster 4 [2026-01-20 12:55:48,045] INFO spindle_dev.index: Finding consensus tree for cluster 5 [2026-01-20 12:55:48,329] INFO spindle_dev.index: Computing mean correlation matrix for cluster 0 [2026-01-20 12:55:54,004] INFO spindle_dev.index: Computing mean correlation matrix for cluster 1 [2026-01-20 12:55:58,086] INFO spindle_dev.index: Computing mean correlation matrix for cluster 2 [2026-01-20 12:55:58,522] INFO spindle_dev.index: Computing mean correlation matrix for cluster 3 [2026-01-20 12:55:58,843] INFO spindle_dev.index: Computing mean correlation matrix for cluster 4 [2026-01-20 12:55:59,126] INFO spindle_dev.index: Computing mean correlation matrix for cluster 5 [2026-01-20 12:55:59,230] INFO spindle_dev.index: Finding adaptive block runs for cluster 0 [2026-01-20 12:55:59,950] INFO spindle_dev.index: Chose t=0.9156707036128818 resulting in 201 blocks instead of 188 blocks would have gotten by default [2026-01-20 12:56:00,005] INFO spindle_dev.index: Final block runs for cluster 0: 25 blocks. [2026-01-20 12:56:00,006] INFO spindle_dev.index: Finding adaptive block runs for cluster 1 [2026-01-20 12:56:00,700] INFO spindle_dev.index: Chose t=0.9043303022203169 resulting in 210 blocks instead of 171 blocks would have gotten by default [2026-01-20 12:56:00,760] INFO spindle_dev.index: Final block runs for cluster 1: 27 blocks. [2026-01-20 12:56:00,760] INFO spindle_dev.index: Finding adaptive block runs for cluster 2 [2026-01-20 12:56:01,459] INFO spindle_dev.index: Chose t=0.9146734050499059 resulting in 199 blocks instead of 191 blocks would have gotten by default [2026-01-20 12:56:01,515] INFO spindle_dev.index: Final block runs for cluster 2: 27 blocks. [2026-01-20 12:56:01,516] INFO spindle_dev.index: Finding adaptive block runs for cluster 3 [2026-01-20 12:56:02,207] INFO spindle_dev.index: Chose t=0.9197732613802214 resulting in 224 blocks instead of 223 blocks would have gotten by default [2026-01-20 12:56:02,278] INFO spindle_dev.index: Final block runs for cluster 3: 26 blocks. [2026-01-20 12:56:02,278] INFO spindle_dev.index: Finding adaptive block runs for cluster 4 [2026-01-20 12:56:03,000] INFO spindle_dev.index: Chose t=0.9274690944099538 resulting in 163 blocks instead of 177 blocks would have gotten by default [2026-01-20 12:56:03,038] INFO spindle_dev.index: Final block runs for cluster 4: 21 blocks. [2026-01-20 12:56:03,039] INFO spindle_dev.index: Finding adaptive block runs for cluster 5 [2026-01-20 12:56:03,739] INFO spindle_dev.index: Chose t=0.8917303715632674 resulting in 185 blocks instead of 137 blocks would have gotten by default [2026-01-20 12:56:03,789] INFO spindle_dev.index: Final block runs for cluster 5: 25 blocks. [2026-01-20 12:56:07,753] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:56:07,754] INFO spindle_dev.index: Building SPD index with epsilon=5.515774736849565 [2026-01-20 12:56:07,755] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:07,770] INFO spindle_dev.index: Cluster 0: 196 SPDs, 25 blocks [2026-01-20 12:56:07,771] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:07,804] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:07,804] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:07,850] INFO spindle_dev.index: Finished block 1 in 0.05 seconds, found 14 clusters. [2026-01-20 12:56:07,850] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:07,896] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 14 clusters. [2026-01-20 12:56:07,896] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:07,950] INFO spindle_dev.index: Finished block 3 in 0.05 seconds, found 17 clusters. [2026-01-20 12:56:07,950] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:08,000] INFO spindle_dev.index: Finished block 4 in 0.05 seconds, found 15 clusters. [2026-01-20 12:56:08,001] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:08,054] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 16 clusters. [2026-01-20 12:56:08,055] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:08,106] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 15 clusters. [2026-01-20 12:56:08,107] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:08,153] INFO spindle_dev.index: Finished block 7 in 0.05 seconds, found 13 clusters. [2026-01-20 12:56:08,154] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:08,194] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:08,195] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:08,271] INFO spindle_dev.index: Finished block 9 in 0.08 seconds, found 23 clusters. [2026-01-20 12:56:08,272] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:08,309] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 10 clusters. [2026-01-20 12:56:08,310] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:08,348] INFO spindle_dev.index: Finished block 11 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:08,348] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:08,389] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:08,390] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:08,448] INFO spindle_dev.index: Finished block 13 in 0.06 seconds, found 16 clusters. [2026-01-20 12:56:08,448] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:08,476] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 6 clusters. [2026-01-20 12:56:08,476] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:08,507] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:08,507] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:08,532] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:08,533] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:08,553] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 1 clusters. [2026-01-20 12:56:08,553] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:08,604] INFO spindle_dev.index: Finished block 18 in 0.05 seconds, found 1 clusters. [2026-01-20 12:56:08,605] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:08,627] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:08,627] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:08,662] INFO spindle_dev.index: Finished block 20 in 0.03 seconds, found 1 clusters. [2026-01-20 12:56:08,662] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:08,699] INFO spindle_dev.index: Finished block 21 in 0.04 seconds, found 2 clusters. [2026-01-20 12:56:08,699] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:08,727] INFO spindle_dev.index: Finished block 22 in 0.03 seconds, found 5 clusters. [2026-01-20 12:56:08,728] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:08,759] INFO spindle_dev.index: Finished block 23 in 0.03 seconds, found 4 clusters. [2026-01-20 12:56:08,760] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:08,788] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 2 clusters. [2026-01-20 12:56:08,789] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:08,789] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:08,790] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:08,790] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:08,791] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:08,796] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:08,797] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:08,798] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:56:08,798] INFO spindle_dev.index: Building SPD index with epsilon=6.060163377910802 [2026-01-20 12:56:08,799] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:08,814] INFO spindle_dev.index: Cluster 1: 178 SPDs, 27 blocks [2026-01-20 12:56:08,815] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:08,835] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:08,835] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:08,857] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:08,857] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:08,888] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 9 clusters. [2026-01-20 12:56:08,889] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:08,926] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:08,927] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:08,961] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 10 clusters. [2026-01-20 12:56:08,962] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:08,992] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:08,993] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:09,030] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:09,031] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:09,068] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:09,069] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:09,109] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 13 clusters. [2026-01-20 12:56:09,109] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:09,144] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 10 clusters. [2026-01-20 12:56:09,144] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:09,174] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:09,174] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:09,205] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:09,205] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:09,227] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:09,227] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:09,262] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 10 clusters. [2026-01-20 12:56:09,263] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:09,294] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 7 clusters. [2026-01-20 12:56:09,295] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:09,324] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 7 clusters. [2026-01-20 12:56:09,324] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:09,344] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:09,344] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:09,366] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 2 clusters. [2026-01-20 12:56:09,366] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:09,389] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:09,389] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:09,426] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 4 clusters. [2026-01-20 12:56:09,427] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:09,457] INFO spindle_dev.index: Finished block 20 in 0.03 seconds, found 3 clusters. [2026-01-20 12:56:09,457] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:09,483] INFO spindle_dev.index: Finished block 21 in 0.03 seconds, found 6 clusters. [2026-01-20 12:56:09,484] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:09,511] INFO spindle_dev.index: Finished block 22 in 0.03 seconds, found 7 clusters. [2026-01-20 12:56:09,511] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:09,531] INFO spindle_dev.index: Finished block 23 in 0.02 seconds, found 2 clusters. [2026-01-20 12:56:09,531] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:09,581] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 3 clusters. [2026-01-20 12:56:09,582] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:56:09,603] INFO spindle_dev.index: Finished block 25 in 0.02 seconds, found 2 clusters. [2026-01-20 12:56:09,604] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:56:09,637] INFO spindle_dev.index: Finished block 26 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:09,638] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:09,638] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:09,639] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:09,639] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:09,640] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:09,646] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:09,647] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:09,648] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:56:09,648] INFO spindle_dev.index: Building SPD index with epsilon=7.402832328795446 [2026-01-20 12:56:09,649] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:09,665] INFO spindle_dev.index: Cluster 2: 162 SPDs, 27 blocks [2026-01-20 12:56:09,667] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:09,678] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:56:09,679] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:09,693] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:09,694] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:09,709] INFO spindle_dev.index: Finished block 2 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:09,710] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:09,724] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:09,725] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:09,739] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:09,739] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:09,755] INFO spindle_dev.index: Finished block 5 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:09,756] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:09,770] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:09,770] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:09,787] INFO spindle_dev.index: Finished block 7 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:09,787] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:09,803] INFO spindle_dev.index: Finished block 8 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:09,804] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:09,821] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:09,822] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:09,839] INFO spindle_dev.index: Finished block 10 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:09,839] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:09,858] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:09,858] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:09,879] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:09,879] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:09,898] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:09,898] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:09,916] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:09,916] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:09,936] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:09,937] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:09,959] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 6 clusters. [2026-01-20 12:56:09,959] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:09,998] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 5 clusters. [2026-01-20 12:56:09,999] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:10,014] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:10,014] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:10,035] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:10,036] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:10,058] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:10,059] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:10,080] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:10,080] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:10,096] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:10,096] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:10,182] INFO spindle_dev.index: Finished block 23 in 0.09 seconds, found 10 clusters. [2026-01-20 12:56:10,183] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:10,200] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:10,200] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:56:10,217] INFO spindle_dev.index: Finished block 25 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:10,217] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:56:10,250] INFO spindle_dev.index: Finished block 26 in 0.03 seconds, found 4 clusters. [2026-01-20 12:56:10,251] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:10,251] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:10,252] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:10,252] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:10,252] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:10,257] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:10,258] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:10,258] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:56:10,259] INFO spindle_dev.index: Building SPD index with epsilon=7.041532964388605 [2026-01-20 12:56:10,259] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:10,271] INFO spindle_dev.index: Cluster 3: 126 SPDs, 26 blocks [2026-01-20 12:56:10,272] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:10,280] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:56:10,281] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:10,290] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:10,291] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:10,301] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:10,301] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:10,311] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:10,311] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:10,325] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,326] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:10,339] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,339] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:10,353] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,353] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:10,368] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,369] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:10,382] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:10,383] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:10,397] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,398] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:10,412] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,413] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:10,427] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,428] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:10,443] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,443] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:10,461] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:10,462] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:10,479] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:10,479] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:10,496] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:10,497] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:10,512] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,513] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:10,528] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:10,529] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:10,545] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:10,546] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:10,584] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 3 clusters. [2026-01-20 12:56:10,584] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:10,601] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:10,601] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:10,618] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:10,618] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:10,632] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:10,632] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:10,648] INFO spindle_dev.index: Finished block 23 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:10,648] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:10,683] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 5 clusters. [2026-01-20 12:56:10,684] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:56:10,735] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 2 clusters. [2026-01-20 12:56:10,736] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:10,736] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:10,737] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:10,737] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:10,738] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:10,741] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:10,742] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:10,743] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:56:10,743] INFO spindle_dev.index: Building SPD index with epsilon=6.08888899114165 [2026-01-20 12:56:10,743] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:10,754] INFO spindle_dev.index: Cluster 4: 107 SPDs, 21 blocks [2026-01-20 12:56:10,755] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:10,762] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:56:10,763] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:10,774] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:10,774] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:10,790] INFO spindle_dev.index: Finished block 2 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:10,790] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:10,803] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:10,804] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:10,820] INFO spindle_dev.index: Finished block 4 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:10,820] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:10,834] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:10,835] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:10,852] INFO spindle_dev.index: Finished block 6 in 0.02 seconds, found 8 clusters. [2026-01-20 12:56:10,853] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:10,872] INFO spindle_dev.index: Finished block 7 in 0.02 seconds, found 10 clusters. [2026-01-20 12:56:10,873] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:10,889] INFO spindle_dev.index: Finished block 8 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:10,890] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:10,910] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 9 clusters. [2026-01-20 12:56:10,910] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:10,925] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:10,925] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:10,950] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 9 clusters. [2026-01-20 12:56:10,950] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:10,966] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:10,967] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:10,984] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:10,984] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:10,996] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:10,996] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:11,013] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:11,014] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:11,048] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 4 clusters. [2026-01-20 12:56:11,049] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:11,091] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 4 clusters. [2026-01-20 12:56:11,092] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:11,116] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:11,116] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:11,147] INFO spindle_dev.index: Finished block 19 in 0.03 seconds, found 3 clusters. [2026-01-20 12:56:11,148] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:11,190] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 6 clusters. [2026-01-20 12:56:11,191] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:11,191] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:11,192] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:11,192] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:11,192] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:11,195] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:11,196] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:11,197] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:56:11,198] INFO spindle_dev.index: Building SPD index with epsilon=6.677926691662406 [2026-01-20 12:56:11,199] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:11,203] INFO spindle_dev.index: Cluster 5: 38 SPDs, 25 blocks [2026-01-20 12:56:11,205] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:11,209] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 1 clusters. [2026-01-20 12:56:11,209] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:11,214] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 3 clusters. [2026-01-20 12:56:11,214] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:11,220] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:11,221] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:11,226] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:11,227] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:11,232] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:11,233] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:11,239] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:11,239] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:11,245] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:11,246] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:11,252] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:11,252] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:11,259] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 7 clusters. [2026-01-20 12:56:11,259] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:11,265] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:11,266] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:11,273] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 7 clusters. [2026-01-20 12:56:11,273] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:11,281] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 7 clusters. [2026-01-20 12:56:11,281] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:11,288] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 8 clusters. [2026-01-20 12:56:11,289] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:11,296] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:11,297] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:11,304] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 9 clusters. [2026-01-20 12:56:11,305] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:11,312] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 8 clusters. [2026-01-20 12:56:11,313] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:11,322] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 8 clusters. [2026-01-20 12:56:11,322] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:11,335] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:11,335] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:11,341] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:11,342] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:11,347] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:11,348] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:11,369] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 10 clusters. [2026-01-20 12:56:11,370] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:11,377] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:11,378] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:11,382] INFO spindle_dev.index: Finished block 22 in 0.00 seconds, found 2 clusters. [2026-01-20 12:56:11,383] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:11,394] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:11,394] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:11,400] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:11,400] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:11,401] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:11,401] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:11,402] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:11,402] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:11,404] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:11,404] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:11,406] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:56:11,406] INFO spindle_dev.index: Building SPD index with epsilon=5.515774736849565 [2026-01-20 12:56:11,407] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:11,424] INFO spindle_dev.index: Cluster 0: 196 SPDs, 25 blocks [2026-01-20 12:56:11,425] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:11,459] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:11,459] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:11,506] INFO spindle_dev.index: Finished block 1 in 0.05 seconds, found 14 clusters. [2026-01-20 12:56:11,507] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:11,554] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 14 clusters. [2026-01-20 12:56:11,554] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:11,610] INFO spindle_dev.index: Finished block 3 in 0.06 seconds, found 17 clusters. [2026-01-20 12:56:11,610] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:11,660] INFO spindle_dev.index: Finished block 4 in 0.05 seconds, found 15 clusters. [2026-01-20 12:56:11,660] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:11,709] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 16 clusters. [2026-01-20 12:56:11,709] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:11,758] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 15 clusters. [2026-01-20 12:56:11,758] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:11,802] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 13 clusters. [2026-01-20 12:56:11,802] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:11,841] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:11,841] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:11,917] INFO spindle_dev.index: Finished block 9 in 0.08 seconds, found 23 clusters. [2026-01-20 12:56:11,917] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:11,954] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 10 clusters. [2026-01-20 12:56:11,955] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:11,994] INFO spindle_dev.index: Finished block 11 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:11,995] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:12,037] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:12,038] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:12,099] INFO spindle_dev.index: Finished block 13 in 0.06 seconds, found 16 clusters. [2026-01-20 12:56:12,100] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:12,128] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 6 clusters. [2026-01-20 12:56:12,129] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:12,161] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:12,162] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:12,188] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 5 clusters. [2026-01-20 12:56:12,189] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:12,208] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 1 clusters. [2026-01-20 12:56:12,209] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:12,259] INFO spindle_dev.index: Finished block 18 in 0.05 seconds, found 1 clusters. [2026-01-20 12:56:12,259] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:12,281] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:12,281] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:12,315] INFO spindle_dev.index: Finished block 20 in 0.03 seconds, found 1 clusters. [2026-01-20 12:56:12,316] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:12,352] INFO spindle_dev.index: Finished block 21 in 0.04 seconds, found 2 clusters. [2026-01-20 12:56:12,353] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:12,381] INFO spindle_dev.index: Finished block 22 in 0.03 seconds, found 5 clusters. [2026-01-20 12:56:12,381] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:12,412] INFO spindle_dev.index: Finished block 23 in 0.03 seconds, found 4 clusters. [2026-01-20 12:56:12,413] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:12,441] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 2 clusters. [2026-01-20 12:56:12,441] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:12,442] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:12,442] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:12,443] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:12,443] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:12,450] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:12,450] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:12,450] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:56:12,451] INFO spindle_dev.index: Building SPD index with epsilon=6.060163377910802 [2026-01-20 12:56:12,451] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:12,466] INFO spindle_dev.index: Cluster 1: 178 SPDs, 27 blocks [2026-01-20 12:56:12,468] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:12,486] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:12,487] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:12,507] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:12,507] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:12,537] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 9 clusters. [2026-01-20 12:56:12,538] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:12,573] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 11 clusters. [2026-01-20 12:56:12,573] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:12,605] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 10 clusters. [2026-01-20 12:56:12,606] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:12,633] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:12,634] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:12,671] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 11 clusters. [2026-01-20 12:56:12,671] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:12,705] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 11 clusters. [2026-01-20 12:56:12,706] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:12,746] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 13 clusters. [2026-01-20 12:56:12,746] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:12,780] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 10 clusters. [2026-01-20 12:56:12,781] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:12,812] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:12,812] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:12,842] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:12,843] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:12,866] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:12,866] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:12,902] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 10 clusters. [2026-01-20 12:56:12,902] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:12,935] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 7 clusters. [2026-01-20 12:56:12,935] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:12,964] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 7 clusters. [2026-01-20 12:56:12,965] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:12,985] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:12,986] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:13,008] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 2 clusters. [2026-01-20 12:56:13,008] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:13,030] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:13,031] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:13,068] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 4 clusters. [2026-01-20 12:56:13,068] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:13,098] INFO spindle_dev.index: Finished block 20 in 0.03 seconds, found 3 clusters. [2026-01-20 12:56:13,098] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:13,123] INFO spindle_dev.index: Finished block 21 in 0.03 seconds, found 6 clusters. [2026-01-20 12:56:13,124] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:13,151] INFO spindle_dev.index: Finished block 22 in 0.03 seconds, found 7 clusters. [2026-01-20 12:56:13,151] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:13,171] INFO spindle_dev.index: Finished block 23 in 0.02 seconds, found 2 clusters. [2026-01-20 12:56:13,172] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:13,220] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 3 clusters. [2026-01-20 12:56:13,221] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:56:13,242] INFO spindle_dev.index: Finished block 25 in 0.02 seconds, found 2 clusters. [2026-01-20 12:56:13,242] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:56:13,274] INFO spindle_dev.index: Finished block 26 in 0.03 seconds, found 8 clusters. [2026-01-20 12:56:13,274] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:13,275] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:13,275] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:13,276] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:13,276] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:13,282] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:13,283] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:13,283] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:56:13,284] INFO spindle_dev.index: Building SPD index with epsilon=7.402832328795446 [2026-01-20 12:56:13,284] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:13,298] INFO spindle_dev.index: Cluster 2: 162 SPDs, 27 blocks [2026-01-20 12:56:13,299] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:13,310] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:56:13,310] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:13,323] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:13,323] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:13,337] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:13,338] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:13,350] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:13,351] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:13,364] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:13,364] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:13,380] INFO spindle_dev.index: Finished block 5 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,380] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:13,393] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:13,393] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:13,408] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:13,408] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:13,424] INFO spindle_dev.index: Finished block 8 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,424] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:13,439] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,440] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:13,456] INFO spindle_dev.index: Finished block 10 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,456] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:13,473] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:13,474] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:13,494] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:13,495] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:13,513] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:13,514] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:13,533] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:13,534] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:13,554] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:13,555] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:13,578] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 6 clusters. [2026-01-20 12:56:13,578] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:13,618] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 5 clusters. [2026-01-20 12:56:13,619] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:13,634] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 2 clusters. [2026-01-20 12:56:13,635] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:13,657] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,658] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:13,682] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:13,682] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:13,704] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:13,704] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:13,722] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,722] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:13,808] INFO spindle_dev.index: Finished block 23 in 0.09 seconds, found 10 clusters. [2026-01-20 12:56:13,809] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:13,827] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,827] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:56:13,843] INFO spindle_dev.index: Finished block 25 in 0.02 seconds, found 3 clusters. [2026-01-20 12:56:13,844] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:56:13,876] INFO spindle_dev.index: Finished block 26 in 0.03 seconds, found 4 clusters. [2026-01-20 12:56:13,876] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:13,877] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:13,877] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:13,877] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:13,878] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:13,883] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:13,883] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:13,883] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:56:13,885] INFO spindle_dev.index: Building SPD index with epsilon=7.041532964388605 [2026-01-20 12:56:13,885] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:13,896] INFO spindle_dev.index: Cluster 3: 126 SPDs, 26 blocks [2026-01-20 12:56:13,897] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:13,905] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:56:13,906] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:13,915] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:13,916] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:13,926] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:13,926] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:13,936] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 2 clusters. [2026-01-20 12:56:13,936] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:13,950] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:13,950] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:13,963] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:13,964] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:13,977] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:13,977] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:13,991] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:13,992] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:14,004] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:14,005] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:14,018] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,019] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:14,033] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,033] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:14,047] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,048] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:14,061] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,062] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:14,077] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:14,077] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:14,093] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 5 clusters. [2026-01-20 12:56:14,093] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:14,110] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:14,110] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:14,124] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,124] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:14,139] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,139] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:14,155] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:14,155] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:14,191] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 3 clusters. [2026-01-20 12:56:14,192] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:14,208] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:14,209] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:14,224] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:14,225] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:14,237] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:14,237] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:14,252] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,252] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:14,287] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 5 clusters. [2026-01-20 12:56:14,287] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:56:14,339] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 2 clusters. [2026-01-20 12:56:14,340] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:14,340] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:14,341] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:14,341] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:14,342] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:14,346] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:14,346] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:14,347] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:56:14,347] INFO spindle_dev.index: Building SPD index with epsilon=6.08888899114165 [2026-01-20 12:56:14,348] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:14,360] INFO spindle_dev.index: Cluster 4: 107 SPDs, 21 blocks [2026-01-20 12:56:14,361] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:14,368] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:56:14,369] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:14,381] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,381] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:14,398] INFO spindle_dev.index: Finished block 2 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:14,399] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:14,412] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:14,413] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:14,430] INFO spindle_dev.index: Finished block 4 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:14,430] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:14,447] INFO spindle_dev.index: Finished block 5 in 0.02 seconds, found 6 clusters. [2026-01-20 12:56:14,448] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:14,466] INFO spindle_dev.index: Finished block 6 in 0.02 seconds, found 8 clusters. [2026-01-20 12:56:14,466] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:14,487] INFO spindle_dev.index: Finished block 7 in 0.02 seconds, found 10 clusters. [2026-01-20 12:56:14,488] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:14,504] INFO spindle_dev.index: Finished block 8 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:14,505] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:14,526] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 9 clusters. [2026-01-20 12:56:14,527] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:14,543] INFO spindle_dev.index: Finished block 10 in 0.02 seconds, found 6 clusters. [2026-01-20 12:56:14,544] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:14,568] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 9 clusters. [2026-01-20 12:56:14,569] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:14,586] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:14,586] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:14,603] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:14,603] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:14,614] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 3 clusters. [2026-01-20 12:56:14,614] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:14,632] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 7 clusters. [2026-01-20 12:56:14,633] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:14,668] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 4 clusters. [2026-01-20 12:56:14,668] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:14,711] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 4 clusters. [2026-01-20 12:56:14,711] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:14,735] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 4 clusters. [2026-01-20 12:56:14,735] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:14,766] INFO spindle_dev.index: Finished block 19 in 0.03 seconds, found 3 clusters. [2026-01-20 12:56:14,767] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:14,807] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 6 clusters. [2026-01-20 12:56:14,808] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:14,808] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:14,809] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:14,809] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:14,810] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:14,813] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:14,814] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:14,814] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:56:14,815] INFO spindle_dev.index: Building SPD index with epsilon=6.677926691662406 [2026-01-20 12:56:14,815] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:56:14,819] INFO spindle_dev.index: Cluster 5: 38 SPDs, 25 blocks [2026-01-20 12:56:14,820] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:56:14,824] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 1 clusters. [2026-01-20 12:56:14,824] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:56:14,828] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 3 clusters. [2026-01-20 12:56:14,829] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:56:14,834] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:14,834] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:56:14,839] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:14,839] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:56:14,845] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:14,845] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:56:14,850] INFO spindle_dev.index: Finished block 5 in 0.00 seconds, found 5 clusters. [2026-01-20 12:56:14,850] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:56:14,855] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:14,856] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:56:14,861] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:14,861] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:56:14,867] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 7 clusters. [2026-01-20 12:56:14,868] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:56:14,873] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:14,874] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:56:14,880] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 7 clusters. [2026-01-20 12:56:14,880] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:56:14,886] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 7 clusters. [2026-01-20 12:56:14,887] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:56:14,893] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 8 clusters. [2026-01-20 12:56:14,894] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:56:14,900] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:14,900] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:56:14,907] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 9 clusters. [2026-01-20 12:56:14,907] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:56:14,914] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 8 clusters. [2026-01-20 12:56:14,915] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:56:14,923] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 8 clusters. [2026-01-20 12:56:14,923] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:56:14,934] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 5 clusters. [2026-01-20 12:56:14,935] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:56:14,940] INFO spindle_dev.index: Finished block 18 in 0.00 seconds, found 4 clusters. [2026-01-20 12:56:14,940] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:56:14,945] INFO spindle_dev.index: Finished block 19 in 0.00 seconds, found 4 clusters. [2026-01-20 12:56:14,945] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:56:14,965] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 10 clusters. [2026-01-20 12:56:14,965] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:56:14,972] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 4 clusters. [2026-01-20 12:56:14,972] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:56:14,976] INFO spindle_dev.index: Finished block 22 in 0.00 seconds, found 2 clusters. [2026-01-20 12:56:14,976] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:56:14,986] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 6 clusters. [2026-01-20 12:56:14,987] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:56:14,991] INFO spindle_dev.index: Finished block 24 in 0.00 seconds, found 4 clusters. [2026-01-20 12:56:14,992] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:56:14,992] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:56:14,993] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:56:14,993] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:56:14,994] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:56:14,996] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:56:14,996] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:56:15,061] INFO spindle_dev.test: Built ground-truth paths for 196 SPDs in cluster 0 across 25 blocks. [2026-01-20 12:56:15,114] INFO spindle_dev.test: Built ground-truth paths for 178 SPDs in cluster 1 across 27 blocks. [2026-01-20 12:56:15,156] INFO spindle_dev.test: Built ground-truth paths for 162 SPDs in cluster 2 across 27 blocks. [2026-01-20 12:56:15,182] INFO spindle_dev.test: Built ground-truth paths for 126 SPDs in cluster 3 across 26 blocks. [2026-01-20 12:56:15,200] INFO spindle_dev.test: Built ground-truth paths for 107 SPDs in cluster 4 across 21 blocks. [2026-01-20 12:56:15,204] INFO spindle_dev.test: Built ground-truth paths for 38 SPDs in cluster 5 across 25 blocks.
Done with search xenium_human_lung_cancer
[2026-01-20 12:56:19,628] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:56:19,629] INFO spindle_dev.index: Building ultrametric features from SPD matrices. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/scipy/cluster/hierarchy.py:1673: RuntimeWarning: invalid value encountered in scalar divide c = xp.sum(numerator) / xp.sqrt(xp.sum(denomA) * xp.sum(denomB)) [2026-01-20 12:57:02,943] INFO spindle_dev.index: Computing latent features from the tree representations. [2026-01-20 12:57:03,718] INFO spindle_dev.index: Reducing latent features to 30 dimensions using PCA. [2026-01-20 12:57:18,038] INFO spindle_dev.index: Explained variance ratios by PCA components: [0.0328614 0.02074485 0.01140492 0.00788271 0.00654937 0.00551079 0.00487785 0.00442108 0.00411965 0.00376257 0.00348872 0.00346468 0.00331665 0.00305813 0.00302168 0.00296301 0.00272664 0.00267984 0.00263388 0.00257382 0.00251245 0.00249516 0.0024585 0.00242671 0.00238647 0.0023464 0.00231849 0.00228553 0.00227161 0.00225024] [2026-01-20 12:57:18,040] INFO spindle_dev.index: Reducing latent features to 2 dimensions using UMAP. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism. warn( [2026-01-20 12:57:22,386] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:57:22,387] INFO spindle_dev.index: Clustering SPD matrices using Leiden clustering with resolution 0.50. [2026-01-20 12:57:22,574] INFO spindle_dev.index: Since clustering method is tree, I am going to find global order per cluster [2026-01-20 12:57:22,575] INFO spindle_dev.index: Finding consensus tree for cluster 0 [2026-01-20 12:57:22,899] INFO spindle_dev.index: Finding consensus tree for cluster 1 [2026-01-20 12:57:23,122] INFO spindle_dev.index: Finding consensus tree for cluster 2 [2026-01-20 12:57:23,293] INFO spindle_dev.index: Finding consensus tree for cluster 3 [2026-01-20 12:57:23,347] INFO spindle_dev.index: Finding consensus tree for cluster 4 [2026-01-20 12:57:23,371] INFO spindle_dev.index: Finding consensus tree for cluster 5 [2026-01-20 12:57:23,396] INFO spindle_dev.index: Finding consensus tree for cluster 6 [2026-01-20 12:57:24,181] INFO spindle_dev.index: Computing mean correlation matrix for cluster 0 [2026-01-20 12:57:41,208] INFO spindle_dev.index: Computing mean correlation matrix for cluster 1 [2026-01-20 12:57:42,607] INFO spindle_dev.index: Computing mean correlation matrix for cluster 2 [2026-01-20 12:57:43,710] INFO spindle_dev.index: Computing mean correlation matrix for cluster 3 [2026-01-20 12:57:44,003] INFO spindle_dev.index: Computing mean correlation matrix for cluster 4 [2026-01-20 12:57:44,098] INFO spindle_dev.index: Computing mean correlation matrix for cluster 5 [2026-01-20 12:57:44,185] INFO spindle_dev.index: Computing mean correlation matrix for cluster 6 [2026-01-20 12:57:44,237] INFO spindle_dev.index: Finding adaptive block runs for cluster 0 [2026-01-20 12:57:44,988] INFO spindle_dev.index: Chose t=0.8916557251774895 resulting in 236 blocks instead of 161 blocks would have gotten by default [2026-01-20 12:57:45,064] INFO spindle_dev.index: Final block runs for cluster 0: 25 blocks. [2026-01-20 12:57:45,065] INFO spindle_dev.index: Finding adaptive block runs for cluster 1 [2026-01-20 12:57:45,768] INFO spindle_dev.index: Chose t=0.8930321866952864 resulting in 238 blocks instead of 165 blocks would have gotten by default [2026-01-20 12:57:45,841] INFO spindle_dev.index: Final block runs for cluster 1: 27 blocks. [2026-01-20 12:57:45,841] INFO spindle_dev.index: Finding adaptive block runs for cluster 2 [2026-01-20 12:57:46,490] INFO spindle_dev.index: Chose t=0.8579001161911946 resulting in 251 blocks instead of 142 blocks would have gotten by default [2026-01-20 12:57:46,571] INFO spindle_dev.index: Final block runs for cluster 2: 28 blocks. [2026-01-20 12:57:46,571] INFO spindle_dev.index: Finding adaptive block runs for cluster 3 [2026-01-20 12:57:47,240] INFO spindle_dev.index: Chose t=0.9169219175064776 resulting in 198 blocks instead of 193 blocks would have gotten by default [2026-01-20 12:57:47,296] INFO spindle_dev.index: Final block runs for cluster 3: 25 blocks. [2026-01-20 12:57:47,297] INFO spindle_dev.index: Finding adaptive block runs for cluster 4 [2026-01-20 12:57:47,948] INFO spindle_dev.index: Chose t=0.9520779171281959 resulting in 238 blocks instead of 298 blocks would have gotten by default [2026-01-20 12:57:48,023] INFO spindle_dev.index: Final block runs for cluster 4: 27 blocks. [2026-01-20 12:57:48,024] INFO spindle_dev.index: Finding adaptive block runs for cluster 5 [2026-01-20 12:57:48,678] INFO spindle_dev.index: Chose t=0.9093288131112657 resulting in 182 blocks instead of 161 blocks would have gotten by default [2026-01-20 12:57:48,725] INFO spindle_dev.index: Final block runs for cluster 5: 24 blocks. [2026-01-20 12:57:48,725] INFO spindle_dev.index: Finding adaptive block runs for cluster 6 [2026-01-20 12:57:49,377] INFO spindle_dev.index: Chose t=0.8837762877964697 resulting in 193 blocks instead of 120 blocks would have gotten by default [2026-01-20 12:57:49,426] INFO spindle_dev.index: Final block runs for cluster 6: 28 blocks. [2026-01-20 12:57:57,630] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:57:57,631] INFO spindle_dev.index: Building SPD index with epsilon=7.189364799659769 [2026-01-20 12:57:57,632] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:57:57,674] INFO spindle_dev.index: Cluster 0: 570 SPDs, 25 blocks [2026-01-20 12:57:57,675] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:57:57,721] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 2 clusters. [2026-01-20 12:57:57,722] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:57:57,762] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 2 clusters. [2026-01-20 12:57:57,763] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:57:57,818] INFO spindle_dev.index: Finished block 2 in 0.06 seconds, found 4 clusters. [2026-01-20 12:57:57,819] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:57:57,877] INFO spindle_dev.index: Finished block 3 in 0.06 seconds, found 4 clusters. [2026-01-20 12:57:57,877] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:57:57,940] INFO spindle_dev.index: Finished block 4 in 0.06 seconds, found 5 clusters. [2026-01-20 12:57:57,940] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:57:58,003] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 5 clusters. [2026-01-20 12:57:58,003] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:57:58,059] INFO spindle_dev.index: Finished block 6 in 0.06 seconds, found 4 clusters. [2026-01-20 12:57:58,059] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:57:58,115] INFO spindle_dev.index: Finished block 7 in 0.06 seconds, found 4 clusters. [2026-01-20 12:57:58,115] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:57:58,181] INFO spindle_dev.index: Finished block 8 in 0.07 seconds, found 5 clusters. [2026-01-20 12:57:58,181] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:57:58,244] INFO spindle_dev.index: Finished block 9 in 0.06 seconds, found 5 clusters. [2026-01-20 12:57:58,245] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:57:58,308] INFO spindle_dev.index: Finished block 10 in 0.06 seconds, found 5 clusters. [2026-01-20 12:57:58,308] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:57:58,392] INFO spindle_dev.index: Finished block 11 in 0.08 seconds, found 7 clusters. [2026-01-20 12:57:58,392] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:57:58,456] INFO spindle_dev.index: Finished block 12 in 0.06 seconds, found 5 clusters. [2026-01-20 12:57:58,456] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:57:58,516] INFO spindle_dev.index: Finished block 13 in 0.06 seconds, found 4 clusters. [2026-01-20 12:57:58,516] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:57:58,607] INFO spindle_dev.index: Finished block 14 in 0.09 seconds, found 4 clusters. [2026-01-20 12:57:58,608] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:57:58,686] INFO spindle_dev.index: Finished block 15 in 0.08 seconds, found 5 clusters. [2026-01-20 12:57:58,687] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:57:58,763] INFO spindle_dev.index: Finished block 16 in 0.08 seconds, found 5 clusters. [2026-01-20 12:57:58,763] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:57:58,841] INFO spindle_dev.index: Finished block 17 in 0.08 seconds, found 4 clusters. [2026-01-20 12:57:58,842] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:57:59,066] INFO spindle_dev.index: Finished block 18 in 0.22 seconds, found 6 clusters. [2026-01-20 12:57:59,067] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:57:59,126] INFO spindle_dev.index: Finished block 19 in 0.06 seconds, found 4 clusters. [2026-01-20 12:57:59,127] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:57:59,185] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 4 clusters. [2026-01-20 12:57:59,185] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:57:59,236] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 3 clusters. [2026-01-20 12:57:59,236] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:57:59,295] INFO spindle_dev.index: Finished block 22 in 0.06 seconds, found 3 clusters. [2026-01-20 12:57:59,296] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:57:59,347] INFO spindle_dev.index: Finished block 23 in 0.05 seconds, found 3 clusters. [2026-01-20 12:57:59,348] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:57:59,585] INFO spindle_dev.index: Finished block 24 in 0.24 seconds, found 8 clusters. [2026-01-20 12:57:59,586] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:57:59,586] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:57:59,587] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:57:59,588] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:57:59,588] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:57:59,600] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:57:59,600] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:57:59,601] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:57:59,602] INFO spindle_dev.index: Building SPD index with epsilon=7.6542997470609215 [2026-01-20 12:57:59,602] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:57:59,741] INFO spindle_dev.index: Cluster 1: 546 SPDs, 27 blocks [2026-01-20 12:57:59,742] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:57:59,785] INFO spindle_dev.index: Finished block 0 in 0.04 seconds, found 2 clusters. [2026-01-20 12:57:59,786] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:57:59,825] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 2 clusters. [2026-01-20 12:57:59,825] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:57:59,864] INFO spindle_dev.index: Finished block 2 in 0.04 seconds, found 2 clusters. [2026-01-20 12:57:59,864] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:57:59,903] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 2 clusters. [2026-01-20 12:57:59,903] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:57:59,945] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 2 clusters. [2026-01-20 12:57:59,945] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:57:59,984] INFO spindle_dev.index: Finished block 5 in 0.04 seconds, found 2 clusters. [2026-01-20 12:57:59,984] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:00,028] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:00,028] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:00,068] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:00,069] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:00,117] INFO spindle_dev.index: Finished block 8 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:00,118] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:00,164] INFO spindle_dev.index: Finished block 9 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:00,164] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:00,212] INFO spindle_dev.index: Finished block 10 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:00,212] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:00,265] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:00,266] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:00,313] INFO spindle_dev.index: Finished block 12 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:00,314] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:00,356] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:00,356] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:00,418] INFO spindle_dev.index: Finished block 14 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:00,418] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:00,492] INFO spindle_dev.index: Finished block 15 in 0.07 seconds, found 4 clusters. [2026-01-20 12:58:00,493] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:00,542] INFO spindle_dev.index: Finished block 16 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:00,543] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:00,649] INFO spindle_dev.index: Finished block 17 in 0.11 seconds, found 2 clusters. [2026-01-20 12:58:00,650] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:00,733] INFO spindle_dev.index: Finished block 18 in 0.08 seconds, found 3 clusters. [2026-01-20 12:58:00,734] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:00,783] INFO spindle_dev.index: Finished block 19 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:00,783] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:00,842] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 4 clusters. [2026-01-20 12:58:00,843] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:00,898] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:00,898] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:00,941] INFO spindle_dev.index: Finished block 22 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:00,942] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:00,985] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:00,986] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:01,025] INFO spindle_dev.index: Finished block 24 in 0.04 seconds, found 1 clusters. [2026-01-20 12:58:01,026] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:01,322] INFO spindle_dev.index: Finished block 25 in 0.30 seconds, found 11 clusters. [2026-01-20 12:58:01,322] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:01,386] INFO spindle_dev.index: Finished block 26 in 0.06 seconds, found 3 clusters. [2026-01-20 12:58:01,387] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:01,388] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:01,388] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:01,389] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:01,389] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:01,401] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:01,401] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:01,402] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:58:01,403] INFO spindle_dev.index: Building SPD index with epsilon=7.440186811717104 [2026-01-20 12:58:01,404] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:01,493] INFO spindle_dev.index: Cluster 2: 449 SPDs, 28 blocks [2026-01-20 12:58:01,494] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:01,521] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 12:58:01,522] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:01,553] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:01,554] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:01,586] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:01,586] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:01,619] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:01,620] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:01,657] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:01,657] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:01,690] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:01,690] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:01,727] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:01,728] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:01,767] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:01,767] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:01,811] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 4 clusters. [2026-01-20 12:58:01,811] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:01,850] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:01,850] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:01,895] INFO spindle_dev.index: Finished block 10 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:01,896] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:01,951] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 6 clusters. [2026-01-20 12:58:01,951] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:02,006] INFO spindle_dev.index: Finished block 12 in 0.05 seconds, found 5 clusters. [2026-01-20 12:58:02,006] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:02,046] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:02,047] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:02,087] INFO spindle_dev.index: Finished block 14 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:02,087] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:02,148] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:02,149] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:02,192] INFO spindle_dev.index: Finished block 16 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:02,193] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:02,233] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:02,234] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:02,292] INFO spindle_dev.index: Finished block 18 in 0.06 seconds, found 6 clusters. [2026-01-20 12:58:02,293] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:02,352] INFO spindle_dev.index: Finished block 19 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:02,353] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:02,412] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 3 clusters. [2026-01-20 12:58:02,412] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:02,462] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:02,463] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:02,498] INFO spindle_dev.index: Finished block 22 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:02,498] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:02,558] INFO spindle_dev.index: Finished block 23 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:02,559] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:02,603] INFO spindle_dev.index: Finished block 24 in 0.04 seconds, found 4 clusters. [2026-01-20 12:58:02,604] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:02,653] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:02,654] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:02,699] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:02,700] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:58:02,920] INFO spindle_dev.index: Finished block 27 in 0.22 seconds, found 10 clusters. [2026-01-20 12:58:02,921] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:02,922] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:02,922] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:02,923] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:02,924] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:02,933] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:02,934] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:02,935] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:58:02,935] INFO spindle_dev.index: Building SPD index with epsilon=7.138602425803477 [2026-01-20 12:58:02,936] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:02,992] INFO spindle_dev.index: Cluster 3: 117 SPDs, 25 blocks [2026-01-20 12:58:02,993] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:03,000] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:58:03,001] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:03,008] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 1 clusters. [2026-01-20 12:58:03,009] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:03,016] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 1 clusters. [2026-01-20 12:58:03,016] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:03,025] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 2 clusters. [2026-01-20 12:58:03,026] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:03,035] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,036] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:03,046] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,046] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:03,056] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,057] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:03,067] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,068] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:03,078] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,078] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:03,089] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,089] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:03,101] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:03,101] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:03,113] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:03,113] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:03,126] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:03,127] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:03,141] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:03,141] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:03,158] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 7 clusters. [2026-01-20 12:58:03,159] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:03,174] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 6 clusters. [2026-01-20 12:58:03,174] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:03,188] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:03,188] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:03,203] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:03,203] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:03,217] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:03,218] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:03,232] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:03,232] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:03,269] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 5 clusters. [2026-01-20 12:58:03,270] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:03,282] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,282] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:03,306] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 6 clusters. [2026-01-20 12:58:03,306] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:03,346] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 5 clusters. [2026-01-20 12:58:03,346] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:03,395] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 8 clusters. [2026-01-20 12:58:03,396] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:03,397] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:03,397] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:03,398] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:03,399] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:03,402] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:03,403] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:03,403] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:58:03,404] INFO spindle_dev.index: Building SPD index with epsilon=5.844685463123093 [2026-01-20 12:58:03,405] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:03,418] INFO spindle_dev.index: Cluster 4: 38 SPDs, 27 blocks [2026-01-20 12:58:03,419] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:03,423] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 1 clusters. [2026-01-20 12:58:03,423] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:03,426] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 1 clusters. [2026-01-20 12:58:03,427] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:03,430] INFO spindle_dev.index: Finished block 2 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,431] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:03,435] INFO spindle_dev.index: Finished block 3 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,435] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:03,439] INFO spindle_dev.index: Finished block 4 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:03,440] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:03,444] INFO spindle_dev.index: Finished block 5 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:03,444] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:03,448] INFO spindle_dev.index: Finished block 6 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:03,448] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:03,452] INFO spindle_dev.index: Finished block 7 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,452] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:03,456] INFO spindle_dev.index: Finished block 8 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,456] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:03,460] INFO spindle_dev.index: Finished block 9 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,461] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:03,466] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:03,467] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:03,472] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:03,472] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:03,476] INFO spindle_dev.index: Finished block 12 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,476] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:03,480] INFO spindle_dev.index: Finished block 13 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:03,481] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:03,486] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:03,486] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:03,492] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 7 clusters. [2026-01-20 12:58:03,493] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:03,497] INFO spindle_dev.index: Finished block 16 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:03,498] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:03,503] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 6 clusters. [2026-01-20 12:58:03,504] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:03,512] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 10 clusters. [2026-01-20 12:58:03,512] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:03,519] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:03,519] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:03,527] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 10 clusters. [2026-01-20 12:58:03,527] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:03,535] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 12 clusters. [2026-01-20 12:58:03,536] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:03,544] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 10 clusters. [2026-01-20 12:58:03,544] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:03,555] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 15 clusters. [2026-01-20 12:58:03,555] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:03,566] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 14 clusters. [2026-01-20 12:58:03,566] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:03,581] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 13 clusters. [2026-01-20 12:58:03,581] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:03,596] INFO spindle_dev.index: Finished block 26 in 0.02 seconds, found 11 clusters. [2026-01-20 12:58:03,597] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:03,598] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:03,598] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:03,599] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:03,599] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:03,602] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:03,602] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:03,603] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:58:03,604] INFO spindle_dev.index: Building SPD index with epsilon=5.579999529314699 [2026-01-20 12:58:03,604] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:03,614] INFO spindle_dev.index: Cluster 5: 37 SPDs, 24 blocks [2026-01-20 12:58:03,615] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:03,620] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,620] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:03,625] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:03,626] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:03,631] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 7 clusters. [2026-01-20 12:58:03,632] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:03,637] INFO spindle_dev.index: Finished block 3 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:03,637] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:03,644] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:03,644] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:03,651] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 8 clusters. [2026-01-20 12:58:03,651] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:03,658] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 8 clusters. [2026-01-20 12:58:03,658] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:03,666] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 12 clusters. [2026-01-20 12:58:03,666] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:03,675] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 11 clusters. [2026-01-20 12:58:03,675] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:03,686] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 13 clusters. [2026-01-20 12:58:03,686] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:03,693] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:03,693] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:03,700] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:03,700] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:03,709] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 11 clusters. [2026-01-20 12:58:03,710] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:03,718] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 12 clusters. [2026-01-20 12:58:03,718] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:03,726] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 11 clusters. [2026-01-20 12:58:03,726] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:03,733] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:03,733] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:03,738] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:03,739] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:03,762] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 14 clusters. [2026-01-20 12:58:03,762] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:03,771] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 8 clusters. [2026-01-20 12:58:03,771] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:03,777] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 6 clusters. [2026-01-20 12:58:03,778] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:03,784] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 2 clusters. [2026-01-20 12:58:03,785] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:03,800] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 8 clusters. [2026-01-20 12:58:03,801] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:03,806] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:03,806] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:03,815] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,815] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:03,816] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:03,816] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:03,817] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:03,817] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:03,820] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:03,820] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:03,821] INFO spindle_dev.index: Processing cluster 6 [2026-01-20 12:58:03,822] INFO spindle_dev.index: Building SPD index with epsilon=4.772250341169802 [2026-01-20 12:58:03,822] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:03,830] INFO spindle_dev.index: Cluster 6: 20 SPDs, 28 blocks [2026-01-20 12:58:03,831] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:03,834] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:03,835] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:03,839] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 9 clusters. [2026-01-20 12:58:03,839] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:03,844] INFO spindle_dev.index: Finished block 2 in 0.00 seconds, found 10 clusters. [2026-01-20 12:58:03,844] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:03,850] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 15 clusters. [2026-01-20 12:58:03,850] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:03,855] INFO spindle_dev.index: Finished block 4 in 0.00 seconds, found 12 clusters. [2026-01-20 12:58:03,855] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:03,861] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 14 clusters. [2026-01-20 12:58:03,861] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:03,866] INFO spindle_dev.index: Finished block 6 in 0.00 seconds, found 13 clusters. [2026-01-20 12:58:03,867] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:03,872] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 13 clusters. [2026-01-20 12:58:03,872] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:03,876] INFO spindle_dev.index: Finished block 8 in 0.00 seconds, found 8 clusters. [2026-01-20 12:58:03,877] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:03,881] INFO spindle_dev.index: Finished block 9 in 0.00 seconds, found 10 clusters. [2026-01-20 12:58:03,881] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:03,886] INFO spindle_dev.index: Finished block 10 in 0.00 seconds, found 10 clusters. [2026-01-20 12:58:03,886] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:03,889] INFO spindle_dev.index: Finished block 11 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:03,890] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:03,893] INFO spindle_dev.index: Finished block 12 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:03,893] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:03,896] INFO spindle_dev.index: Finished block 13 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,897] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:03,900] INFO spindle_dev.index: Finished block 14 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:03,900] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:03,903] INFO spindle_dev.index: Finished block 15 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:03,903] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:03,906] INFO spindle_dev.index: Finished block 16 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:03,907] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:03,910] INFO spindle_dev.index: Finished block 17 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:03,911] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:03,914] INFO spindle_dev.index: Finished block 18 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:03,914] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:03,918] INFO spindle_dev.index: Finished block 19 in 0.00 seconds, found 8 clusters. [2026-01-20 12:58:03,919] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:03,921] INFO spindle_dev.index: Finished block 20 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,922] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:03,924] INFO spindle_dev.index: Finished block 21 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,925] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:03,927] INFO spindle_dev.index: Finished block 22 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,928] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:03,936] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:03,937] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:03,941] INFO spindle_dev.index: Finished block 24 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:03,942] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:03,944] INFO spindle_dev.index: Finished block 25 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:03,945] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:03,949] INFO spindle_dev.index: Finished block 26 in 0.00 seconds, found 7 clusters. [2026-01-20 12:58:03,949] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:58:03,954] INFO spindle_dev.index: Finished block 27 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:03,954] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:03,955] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:03,956] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:03,956] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:03,957] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:03,960] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:03,960] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:03,962] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 12:58:03,962] INFO spindle_dev.index: Building SPD index with epsilon=7.189364799659769 [2026-01-20 12:58:03,963] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:04,065] INFO spindle_dev.index: Cluster 0: 570 SPDs, 25 blocks [2026-01-20 12:58:04,066] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:04,112] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 2 clusters. [2026-01-20 12:58:04,113] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:04,156] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:04,157] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:04,210] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:04,211] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:04,268] INFO spindle_dev.index: Finished block 3 in 0.06 seconds, found 4 clusters. [2026-01-20 12:58:04,269] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:04,329] INFO spindle_dev.index: Finished block 4 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:04,330] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:04,392] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:04,392] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:04,447] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:04,447] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:04,502] INFO spindle_dev.index: Finished block 7 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:04,502] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:04,566] INFO spindle_dev.index: Finished block 8 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:04,566] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:04,629] INFO spindle_dev.index: Finished block 9 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:04,629] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:04,692] INFO spindle_dev.index: Finished block 10 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:04,692] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:04,773] INFO spindle_dev.index: Finished block 11 in 0.08 seconds, found 7 clusters. [2026-01-20 12:58:04,774] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:04,837] INFO spindle_dev.index: Finished block 12 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:04,837] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:04,897] INFO spindle_dev.index: Finished block 13 in 0.06 seconds, found 4 clusters. [2026-01-20 12:58:04,898] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:04,984] INFO spindle_dev.index: Finished block 14 in 0.09 seconds, found 4 clusters. [2026-01-20 12:58:04,985] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:05,063] INFO spindle_dev.index: Finished block 15 in 0.08 seconds, found 5 clusters. [2026-01-20 12:58:05,063] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:05,141] INFO spindle_dev.index: Finished block 16 in 0.08 seconds, found 5 clusters. [2026-01-20 12:58:05,142] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:05,220] INFO spindle_dev.index: Finished block 17 in 0.08 seconds, found 4 clusters. [2026-01-20 12:58:05,221] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:05,447] INFO spindle_dev.index: Finished block 18 in 0.23 seconds, found 6 clusters. [2026-01-20 12:58:05,447] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:05,508] INFO spindle_dev.index: Finished block 19 in 0.06 seconds, found 4 clusters. [2026-01-20 12:58:05,508] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:05,566] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 4 clusters. [2026-01-20 12:58:05,567] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:05,616] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:05,617] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:05,674] INFO spindle_dev.index: Finished block 22 in 0.06 seconds, found 3 clusters. [2026-01-20 12:58:05,675] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:05,725] INFO spindle_dev.index: Finished block 23 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:05,726] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:05,951] INFO spindle_dev.index: Finished block 24 in 0.22 seconds, found 8 clusters. [2026-01-20 12:58:05,951] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:05,952] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:05,953] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:05,953] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:05,954] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:05,966] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:05,966] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:05,966] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 12:58:05,967] INFO spindle_dev.index: Building SPD index with epsilon=7.6542997470609215 [2026-01-20 12:58:05,968] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:06,033] INFO spindle_dev.index: Cluster 1: 546 SPDs, 27 blocks [2026-01-20 12:58:06,035] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:06,077] INFO spindle_dev.index: Finished block 0 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,078] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:06,115] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,116] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:06,154] INFO spindle_dev.index: Finished block 2 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,155] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:06,194] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,194] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:06,234] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,235] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:06,274] INFO spindle_dev.index: Finished block 5 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,275] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:06,318] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,319] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:06,359] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,360] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:06,408] INFO spindle_dev.index: Finished block 8 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:06,408] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:06,455] INFO spindle_dev.index: Finished block 9 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:06,456] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:06,503] INFO spindle_dev.index: Finished block 10 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:06,503] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:06,556] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:06,557] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:06,604] INFO spindle_dev.index: Finished block 12 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:06,604] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:06,646] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:06,646] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:06,710] INFO spindle_dev.index: Finished block 14 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:06,711] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:06,775] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 4 clusters. [2026-01-20 12:58:06,776] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:06,825] INFO spindle_dev.index: Finished block 16 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:06,826] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:06,931] INFO spindle_dev.index: Finished block 17 in 0.11 seconds, found 2 clusters. [2026-01-20 12:58:06,932] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:07,014] INFO spindle_dev.index: Finished block 18 in 0.08 seconds, found 3 clusters. [2026-01-20 12:58:07,015] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:07,064] INFO spindle_dev.index: Finished block 19 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:07,064] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:07,122] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 4 clusters. [2026-01-20 12:58:07,123] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:07,178] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:07,179] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:07,220] INFO spindle_dev.index: Finished block 22 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:07,221] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:07,262] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:07,263] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:07,302] INFO spindle_dev.index: Finished block 24 in 0.04 seconds, found 1 clusters. [2026-01-20 12:58:07,302] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:07,606] INFO spindle_dev.index: Finished block 25 in 0.30 seconds, found 11 clusters. [2026-01-20 12:58:07,607] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:07,662] INFO spindle_dev.index: Finished block 26 in 0.06 seconds, found 3 clusters. [2026-01-20 12:58:07,663] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:07,663] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:07,664] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:07,665] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:07,665] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:07,677] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:07,677] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:07,678] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 12:58:07,679] INFO spindle_dev.index: Building SPD index with epsilon=7.440186811717104 [2026-01-20 12:58:07,679] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:07,713] INFO spindle_dev.index: Cluster 2: 449 SPDs, 28 blocks [2026-01-20 12:58:07,715] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:07,742] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 12:58:07,742] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:07,774] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:07,775] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:07,808] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:07,808] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:07,841] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:07,841] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:07,880] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:07,880] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:07,912] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 12:58:07,913] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:07,949] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:07,949] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:07,987] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:07,988] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:08,031] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 4 clusters. [2026-01-20 12:58:08,031] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:08,069] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:08,070] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:08,113] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 4 clusters. [2026-01-20 12:58:08,114] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:08,168] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 6 clusters. [2026-01-20 12:58:08,168] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:08,223] INFO spindle_dev.index: Finished block 12 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:08,224] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:08,264] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:08,264] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:08,305] INFO spindle_dev.index: Finished block 14 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:08,305] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:08,366] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:08,367] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:08,412] INFO spindle_dev.index: Finished block 16 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:08,413] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:08,452] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 3 clusters. [2026-01-20 12:58:08,453] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:08,512] INFO spindle_dev.index: Finished block 18 in 0.06 seconds, found 6 clusters. [2026-01-20 12:58:08,513] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:08,579] INFO spindle_dev.index: Finished block 19 in 0.07 seconds, found 5 clusters. [2026-01-20 12:58:08,580] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:08,629] INFO spindle_dev.index: Finished block 20 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:08,629] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:08,680] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 3 clusters. [2026-01-20 12:58:08,681] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:08,716] INFO spindle_dev.index: Finished block 22 in 0.04 seconds, found 2 clusters. [2026-01-20 12:58:08,716] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:08,777] INFO spindle_dev.index: Finished block 23 in 0.06 seconds, found 5 clusters. [2026-01-20 12:58:08,777] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:08,823] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:08,824] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:08,873] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:08,873] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:08,919] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 4 clusters. [2026-01-20 12:58:08,920] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:58:09,143] INFO spindle_dev.index: Finished block 27 in 0.22 seconds, found 10 clusters. [2026-01-20 12:58:09,143] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:09,144] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:09,145] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:09,145] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:09,146] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:09,156] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:09,157] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:09,158] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 12:58:09,158] INFO spindle_dev.index: Building SPD index with epsilon=7.138602425803477 [2026-01-20 12:58:09,159] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:09,169] INFO spindle_dev.index: Cluster 3: 117 SPDs, 25 blocks [2026-01-20 12:58:09,170] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:09,178] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 12:58:09,178] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:09,186] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 1 clusters. [2026-01-20 12:58:09,186] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:09,193] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 1 clusters. [2026-01-20 12:58:09,194] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:09,203] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 2 clusters. [2026-01-20 12:58:09,204] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:09,214] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,214] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:09,225] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,225] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:09,235] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,236] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:09,246] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,246] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:09,257] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,257] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:09,268] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,268] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:09,280] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:09,280] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:09,292] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:09,292] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:09,304] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:09,304] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:09,317] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:09,317] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:09,334] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 7 clusters. [2026-01-20 12:58:09,334] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:09,351] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 6 clusters. [2026-01-20 12:58:09,351] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:09,365] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 4 clusters. [2026-01-20 12:58:09,366] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:09,379] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:09,380] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:09,394] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:09,394] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:09,409] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 5 clusters. [2026-01-20 12:58:09,410] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:09,446] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 5 clusters. [2026-01-20 12:58:09,446] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:09,457] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,457] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:09,480] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 6 clusters. [2026-01-20 12:58:09,481] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:09,520] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 5 clusters. [2026-01-20 12:58:09,521] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:09,571] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 8 clusters. [2026-01-20 12:58:09,572] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:09,572] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:09,573] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:09,573] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:09,573] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:09,577] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:09,578] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:09,578] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 12:58:09,578] INFO spindle_dev.index: Building SPD index with epsilon=5.844685463123093 [2026-01-20 12:58:09,579] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:09,582] INFO spindle_dev.index: Cluster 4: 38 SPDs, 27 blocks [2026-01-20 12:58:09,583] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:09,587] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 1 clusters. [2026-01-20 12:58:09,587] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:09,590] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 1 clusters. [2026-01-20 12:58:09,590] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:09,593] INFO spindle_dev.index: Finished block 2 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:09,594] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:09,597] INFO spindle_dev.index: Finished block 3 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:09,598] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:09,601] INFO spindle_dev.index: Finished block 4 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:09,602] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:09,605] INFO spindle_dev.index: Finished block 5 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:09,606] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:09,609] INFO spindle_dev.index: Finished block 6 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:09,610] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:09,613] INFO spindle_dev.index: Finished block 7 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:09,613] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:09,617] INFO spindle_dev.index: Finished block 8 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:09,617] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:09,621] INFO spindle_dev.index: Finished block 9 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:09,621] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:09,625] INFO spindle_dev.index: Finished block 10 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:09,625] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:09,630] INFO spindle_dev.index: Finished block 11 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:09,630] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:09,633] INFO spindle_dev.index: Finished block 12 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:09,634] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:09,637] INFO spindle_dev.index: Finished block 13 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:09,638] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:09,642] INFO spindle_dev.index: Finished block 14 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:09,643] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:09,649] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 7 clusters. [2026-01-20 12:58:09,649] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:09,653] INFO spindle_dev.index: Finished block 16 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:09,653] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:09,659] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 6 clusters. [2026-01-20 12:58:09,659] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:09,666] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 10 clusters. [2026-01-20 12:58:09,667] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:09,673] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:09,674] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:09,681] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 10 clusters. [2026-01-20 12:58:09,681] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:09,689] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 12 clusters. [2026-01-20 12:58:09,690] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:09,697] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 10 clusters. [2026-01-20 12:58:09,698] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:09,708] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 15 clusters. [2026-01-20 12:58:09,708] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:09,719] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 14 clusters. [2026-01-20 12:58:09,719] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:09,733] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 13 clusters. [2026-01-20 12:58:09,733] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:09,748] INFO spindle_dev.index: Finished block 26 in 0.01 seconds, found 11 clusters. [2026-01-20 12:58:09,748] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:09,749] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:09,749] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:09,749] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:09,750] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:09,752] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:09,752] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:09,753] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 12:58:09,753] INFO spindle_dev.index: Building SPD index with epsilon=5.579999529314699 [2026-01-20 12:58:09,753] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:09,757] INFO spindle_dev.index: Cluster 5: 37 SPDs, 24 blocks [2026-01-20 12:58:09,758] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:09,762] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:09,762] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:09,767] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:09,767] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:09,773] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 7 clusters. [2026-01-20 12:58:09,773] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:09,778] INFO spindle_dev.index: Finished block 3 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:09,778] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:09,785] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:09,785] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:09,791] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 8 clusters. [2026-01-20 12:58:09,791] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:09,797] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 8 clusters. [2026-01-20 12:58:09,798] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:09,806] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 12 clusters. [2026-01-20 12:58:09,806] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:09,814] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 11 clusters. [2026-01-20 12:58:09,814] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:09,823] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 13 clusters. [2026-01-20 12:58:09,824] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:09,830] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:09,831] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:09,838] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:09,838] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:09,846] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 11 clusters. [2026-01-20 12:58:09,846] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:09,854] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 12 clusters. [2026-01-20 12:58:09,854] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:09,862] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 11 clusters. [2026-01-20 12:58:09,863] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:09,870] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 9 clusters. [2026-01-20 12:58:09,870] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:09,875] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 5 clusters. [2026-01-20 12:58:09,876] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:09,899] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 14 clusters. [2026-01-20 12:58:09,899] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:09,908] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 8 clusters. [2026-01-20 12:58:09,909] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:09,914] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 6 clusters. [2026-01-20 12:58:09,915] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:09,921] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 2 clusters. [2026-01-20 12:58:09,921] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:09,935] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 8 clusters. [2026-01-20 12:58:09,936] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:09,941] INFO spindle_dev.index: Finished block 22 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:09,941] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:09,950] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:09,950] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:09,950] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:09,951] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:09,951] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:09,952] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:09,954] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:09,954] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:09,955] INFO spindle_dev.index: Processing cluster 6 [2026-01-20 12:58:09,955] INFO spindle_dev.index: Building SPD index with epsilon=4.772250341169802 [2026-01-20 12:58:09,955] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 12:58:09,957] INFO spindle_dev.index: Cluster 6: 20 SPDs, 28 blocks [2026-01-20 12:58:09,958] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 12:58:09,961] INFO spindle_dev.index: Finished block 0 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:09,961] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 12:58:09,965] INFO spindle_dev.index: Finished block 1 in 0.00 seconds, found 9 clusters. [2026-01-20 12:58:09,966] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 12:58:09,970] INFO spindle_dev.index: Finished block 2 in 0.00 seconds, found 10 clusters. [2026-01-20 12:58:09,970] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 12:58:09,976] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 15 clusters. [2026-01-20 12:58:09,976] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 12:58:09,981] INFO spindle_dev.index: Finished block 4 in 0.00 seconds, found 12 clusters. [2026-01-20 12:58:09,981] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 12:58:09,987] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 14 clusters. [2026-01-20 12:58:09,987] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 12:58:09,992] INFO spindle_dev.index: Finished block 6 in 0.00 seconds, found 13 clusters. [2026-01-20 12:58:09,993] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 12:58:09,997] INFO spindle_dev.index: Finished block 7 in 0.00 seconds, found 13 clusters. [2026-01-20 12:58:09,998] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 12:58:10,001] INFO spindle_dev.index: Finished block 8 in 0.00 seconds, found 8 clusters. [2026-01-20 12:58:10,002] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 12:58:10,006] INFO spindle_dev.index: Finished block 9 in 0.00 seconds, found 10 clusters. [2026-01-20 12:58:10,006] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 12:58:10,011] INFO spindle_dev.index: Finished block 10 in 0.00 seconds, found 10 clusters. [2026-01-20 12:58:10,011] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 12:58:10,014] INFO spindle_dev.index: Finished block 11 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:10,014] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 12:58:10,017] INFO spindle_dev.index: Finished block 12 in 0.00 seconds, found 5 clusters. [2026-01-20 12:58:10,018] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 12:58:10,020] INFO spindle_dev.index: Finished block 13 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:10,020] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 12:58:10,023] INFO spindle_dev.index: Finished block 14 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:10,023] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 12:58:10,026] INFO spindle_dev.index: Finished block 15 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:10,026] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 12:58:10,029] INFO spindle_dev.index: Finished block 16 in 0.00 seconds, found 3 clusters. [2026-01-20 12:58:10,029] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 12:58:10,033] INFO spindle_dev.index: Finished block 17 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:10,033] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 12:58:10,036] INFO spindle_dev.index: Finished block 18 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:10,036] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 12:58:10,040] INFO spindle_dev.index: Finished block 19 in 0.00 seconds, found 8 clusters. [2026-01-20 12:58:10,040] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 12:58:10,043] INFO spindle_dev.index: Finished block 20 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:10,043] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 12:58:10,045] INFO spindle_dev.index: Finished block 21 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:10,046] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 12:58:10,048] INFO spindle_dev.index: Finished block 22 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:10,048] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 12:58:10,057] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 3 clusters. [2026-01-20 12:58:10,057] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 12:58:10,061] INFO spindle_dev.index: Finished block 24 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:10,061] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 12:58:10,063] INFO spindle_dev.index: Finished block 25 in 0.00 seconds, found 2 clusters. [2026-01-20 12:58:10,064] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 12:58:10,068] INFO spindle_dev.index: Finished block 26 in 0.00 seconds, found 7 clusters. [2026-01-20 12:58:10,068] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 12:58:10,073] INFO spindle_dev.index: Finished block 27 in 0.00 seconds, found 4 clusters. [2026-01-20 12:58:10,073] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 12:58:10,073] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 12:58:10,074] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 12:58:10,074] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 12:58:10,074] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 12:58:10,076] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 12:58:10,077] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 12:58:10,451] INFO spindle_dev.test: Built ground-truth paths for 570 SPDs in cluster 0 across 25 blocks. [2026-01-20 12:58:10,813] INFO spindle_dev.test: Built ground-truth paths for 546 SPDs in cluster 1 across 27 blocks. [2026-01-20 12:58:11,090] INFO spindle_dev.test: Built ground-truth paths for 449 SPDs in cluster 2 across 28 blocks. [2026-01-20 12:58:11,110] INFO spindle_dev.test: Built ground-truth paths for 117 SPDs in cluster 3 across 25 blocks. [2026-01-20 12:58:11,113] INFO spindle_dev.test: Built ground-truth paths for 38 SPDs in cluster 4 across 27 blocks. [2026-01-20 12:58:11,118] INFO spindle_dev.test: Built ground-truth paths for 37 SPDs in cluster 5 across 24 blocks. [2026-01-20 12:58:11,120] INFO spindle_dev.test: Built ground-truth paths for 20 SPDs in cluster 6 across 28 blocks.
Done with search xenium_human_lymph_node
[2026-01-20 12:58:17,915] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 12:58:17,915] INFO spindle_dev.index: Building ultrametric features from SPD matrices. [2026-01-20 12:59:38,975] INFO spindle_dev.index: Computing latent features from the tree representations. [2026-01-20 12:59:40,481] INFO spindle_dev.index: Reducing latent features to 30 dimensions using PCA. [2026-01-20 12:59:57,474] INFO spindle_dev.index: Explained variance ratios by PCA components: [0.04082877 0.02090289 0.01214787 0.00703324 0.00602298 0.00583663 0.00484961 0.00420947 0.00341713 0.00326079 0.00293997 0.00285414 0.00278242 0.00267546 0.00262346 0.00254401 0.00253857 0.00249984 0.00243455 0.00240164 0.00238939 0.00234241 0.0022555 0.0022111 0.00219762 0.0021745 0.00212202 0.0020705 0.00205612 0.00198888] [2026-01-20 12:59:57,477] INFO spindle_dev.index: Reducing latent features to 2 dimensions using UMAP. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism. warn( [2026-01-20 13:00:06,307] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 13:00:06,309] INFO spindle_dev.index: Clustering SPD matrices using Leiden clustering with resolution 0.50. [2026-01-20 13:00:06,761] INFO spindle_dev.index: Since clustering method is tree, I am going to find global order per cluster [2026-01-20 13:00:06,762] INFO spindle_dev.index: Finding consensus tree for cluster 0 [2026-01-20 13:00:07,151] INFO spindle_dev.index: Finding consensus tree for cluster 1 [2026-01-20 13:00:07,434] INFO spindle_dev.index: Finding consensus tree for cluster 2 [2026-01-20 13:00:07,664] INFO spindle_dev.index: Finding consensus tree for cluster 3 [2026-01-20 13:00:07,829] INFO spindle_dev.index: Finding consensus tree for cluster 4 [2026-01-20 13:00:07,973] INFO spindle_dev.index: Finding consensus tree for cluster 5 [2026-01-20 13:00:09,500] INFO spindle_dev.index: Computing mean correlation matrix for cluster 0 [2026-01-20 13:00:40,668] INFO spindle_dev.index: Computing mean correlation matrix for cluster 1 [2026-01-20 13:01:05,026] INFO spindle_dev.index: Computing mean correlation matrix for cluster 2 [2026-01-20 13:01:19,219] INFO spindle_dev.index: Computing mean correlation matrix for cluster 3 [2026-01-20 13:01:30,359] INFO spindle_dev.index: Computing mean correlation matrix for cluster 4 [2026-01-20 13:01:39,563] INFO spindle_dev.index: Computing mean correlation matrix for cluster 5 [2026-01-20 13:01:42,559] INFO spindle_dev.index: Finding adaptive block runs for cluster 0 [2026-01-20 13:01:43,278] INFO spindle_dev.index: Chose t=0.8953150000734291 resulting in 269 blocks instead of 234 blocks would have gotten by default [2026-01-20 13:01:43,373] INFO spindle_dev.index: Final block runs for cluster 0: 33 blocks. [2026-01-20 13:01:43,374] INFO spindle_dev.index: Finding adaptive block runs for cluster 1 [2026-01-20 13:01:44,061] INFO spindle_dev.index: Chose t=0.8974951970517207 resulting in 247 blocks instead of 219 blocks would have gotten by default [2026-01-20 13:01:44,143] INFO spindle_dev.index: Final block runs for cluster 1: 30 blocks. [2026-01-20 13:01:44,143] INFO spindle_dev.index: Finding adaptive block runs for cluster 2 [2026-01-20 13:01:44,834] INFO spindle_dev.index: Chose t=0.9153192440240208 resulting in 190 blocks instead of 182 blocks would have gotten by default [2026-01-20 13:01:44,889] INFO spindle_dev.index: Final block runs for cluster 2: 22 blocks. [2026-01-20 13:01:44,890] INFO spindle_dev.index: Finding adaptive block runs for cluster 3 [2026-01-20 13:01:45,578] INFO spindle_dev.index: Chose t=0.9106198620507007 resulting in 285 blocks instead of 267 blocks would have gotten by default [2026-01-20 13:01:45,689] INFO spindle_dev.index: Final block runs for cluster 3: 32 blocks. [2026-01-20 13:01:45,689] INFO spindle_dev.index: Finding adaptive block runs for cluster 4 [2026-01-20 13:01:46,381] INFO spindle_dev.index: Chose t=0.9374727137890102 resulting in 246 blocks instead of 291 blocks would have gotten by default [2026-01-20 13:01:46,465] INFO spindle_dev.index: Final block runs for cluster 4: 28 blocks. [2026-01-20 13:01:46,465] INFO spindle_dev.index: Finding adaptive block runs for cluster 5 [2026-01-20 13:01:47,163] INFO spindle_dev.index: Chose t=0.9281580392858046 resulting in 252 blocks instead of 271 blocks would have gotten by default [2026-01-20 13:01:47,250] INFO spindle_dev.index: Final block runs for cluster 5: 28 blocks. [2026-01-20 13:02:01,944] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 13:02:01,945] INFO spindle_dev.index: Building SPD index with epsilon=5.607331021354877 [2026-01-20 13:02:01,946] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:02,072] INFO spindle_dev.index: Cluster 0: 692 SPDs, 33 blocks [2026-01-20 13:02:02,072] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:02,223] INFO spindle_dev.index: Finished block 0 in 0.15 seconds, found 13 clusters. [2026-01-20 13:02:02,224] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:02,390] INFO spindle_dev.index: Finished block 1 in 0.17 seconds, found 15 clusters. [2026-01-20 13:02:02,390] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:02,556] INFO spindle_dev.index: Finished block 2 in 0.17 seconds, found 14 clusters. [2026-01-20 13:02:02,556] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:02,736] INFO spindle_dev.index: Finished block 3 in 0.18 seconds, found 16 clusters. [2026-01-20 13:02:02,737] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:02,896] INFO spindle_dev.index: Finished block 4 in 0.16 seconds, found 14 clusters. [2026-01-20 13:02:02,897] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:03,066] INFO spindle_dev.index: Finished block 5 in 0.17 seconds, found 15 clusters. [2026-01-20 13:02:03,066] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:03,248] INFO spindle_dev.index: Finished block 6 in 0.18 seconds, found 16 clusters. [2026-01-20 13:02:03,248] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:03,417] INFO spindle_dev.index: Finished block 7 in 0.17 seconds, found 14 clusters. [2026-01-20 13:02:03,418] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:03,579] INFO spindle_dev.index: Finished block 8 in 0.16 seconds, found 14 clusters. [2026-01-20 13:02:03,581] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:03,706] INFO spindle_dev.index: Finished block 9 in 0.13 seconds, found 10 clusters. [2026-01-20 13:02:03,707] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:03,858] INFO spindle_dev.index: Finished block 10 in 0.15 seconds, found 13 clusters. [2026-01-20 13:02:03,859] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:04,003] INFO spindle_dev.index: Finished block 11 in 0.14 seconds, found 12 clusters. [2026-01-20 13:02:04,004] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:04,134] INFO spindle_dev.index: Finished block 12 in 0.13 seconds, found 10 clusters. [2026-01-20 13:02:04,135] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:04,247] INFO spindle_dev.index: Finished block 13 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:04,248] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:04,357] INFO spindle_dev.index: Finished block 14 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:04,357] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:04,449] INFO spindle_dev.index: Finished block 15 in 0.09 seconds, found 6 clusters. [2026-01-20 13:02:04,450] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:04,507] INFO spindle_dev.index: Finished block 16 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:04,508] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:04,557] INFO spindle_dev.index: Finished block 17 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:04,557] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:04,619] INFO spindle_dev.index: Finished block 18 in 0.06 seconds, found 1 clusters. [2026-01-20 13:02:04,620] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:04,689] INFO spindle_dev.index: Finished block 19 in 0.07 seconds, found 2 clusters. [2026-01-20 13:02:04,689] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:04,760] INFO spindle_dev.index: Finished block 20 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:04,761] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:04,826] INFO spindle_dev.index: Finished block 21 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:04,827] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:04,880] INFO spindle_dev.index: Finished block 22 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:04,880] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:04,954] INFO spindle_dev.index: Finished block 23 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:04,955] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:05,006] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:05,007] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:05,063] INFO spindle_dev.index: Finished block 25 in 0.06 seconds, found 1 clusters. [2026-01-20 13:02:05,063] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:05,114] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:05,115] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:05,227] INFO spindle_dev.index: Finished block 27 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:05,228] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:02:05,292] INFO spindle_dev.index: Finished block 28 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:05,293] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:02:05,357] INFO spindle_dev.index: Finished block 29 in 0.06 seconds, found 3 clusters. [2026-01-20 13:02:05,358] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:02:05,496] INFO spindle_dev.index: Finished block 30 in 0.14 seconds, found 2 clusters. [2026-01-20 13:02:05,497] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:02:05,558] INFO spindle_dev.index: Finished block 31 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:05,559] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:02:05,645] INFO spindle_dev.index: Finished block 32 in 0.09 seconds, found 5 clusters. [2026-01-20 13:02:05,646] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:05,646] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:05,646] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:05,647] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:05,647] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:05,667] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:05,668] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:05,668] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 13:02:05,669] INFO spindle_dev.index: Building SPD index with epsilon=5.957970143297901 [2026-01-20 13:02:05,669] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:05,870] INFO spindle_dev.index: Cluster 1: 688 SPDs, 30 blocks [2026-01-20 13:02:05,871] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:05,968] INFO spindle_dev.index: Finished block 0 in 0.10 seconds, found 7 clusters. [2026-01-20 13:02:05,969] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:06,089] INFO spindle_dev.index: Finished block 1 in 0.12 seconds, found 10 clusters. [2026-01-20 13:02:06,089] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:06,202] INFO spindle_dev.index: Finished block 2 in 0.11 seconds, found 9 clusters. [2026-01-20 13:02:06,203] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:06,371] INFO spindle_dev.index: Finished block 3 in 0.17 seconds, found 15 clusters. [2026-01-20 13:02:06,372] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:06,508] INFO spindle_dev.index: Finished block 4 in 0.14 seconds, found 11 clusters. [2026-01-20 13:02:06,509] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:06,662] INFO spindle_dev.index: Finished block 5 in 0.15 seconds, found 13 clusters. [2026-01-20 13:02:06,663] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:06,805] INFO spindle_dev.index: Finished block 6 in 0.14 seconds, found 12 clusters. [2026-01-20 13:02:06,805] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:06,938] INFO spindle_dev.index: Finished block 7 in 0.13 seconds, found 11 clusters. [2026-01-20 13:02:06,939] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:07,072] INFO spindle_dev.index: Finished block 8 in 0.13 seconds, found 11 clusters. [2026-01-20 13:02:07,072] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:07,206] INFO spindle_dev.index: Finished block 9 in 0.13 seconds, found 11 clusters. [2026-01-20 13:02:07,207] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:07,346] INFO spindle_dev.index: Finished block 10 in 0.14 seconds, found 11 clusters. [2026-01-20 13:02:07,347] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:07,465] INFO spindle_dev.index: Finished block 11 in 0.12 seconds, found 9 clusters. [2026-01-20 13:02:07,465] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:07,589] INFO spindle_dev.index: Finished block 12 in 0.12 seconds, found 10 clusters. [2026-01-20 13:02:07,589] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:07,697] INFO spindle_dev.index: Finished block 13 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:07,697] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:07,795] INFO spindle_dev.index: Finished block 14 in 0.10 seconds, found 7 clusters. [2026-01-20 13:02:07,795] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:07,869] INFO spindle_dev.index: Finished block 15 in 0.07 seconds, found 4 clusters. [2026-01-20 13:02:07,869] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:07,927] INFO spindle_dev.index: Finished block 16 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:07,927] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:07,995] INFO spindle_dev.index: Finished block 17 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:07,995] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:08,075] INFO spindle_dev.index: Finished block 18 in 0.08 seconds, found 4 clusters. [2026-01-20 13:02:08,075] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:08,164] INFO spindle_dev.index: Finished block 19 in 0.09 seconds, found 5 clusters. [2026-01-20 13:02:08,165] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:08,246] INFO spindle_dev.index: Finished block 20 in 0.08 seconds, found 4 clusters. [2026-01-20 13:02:08,246] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:08,317] INFO spindle_dev.index: Finished block 21 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:08,317] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:08,405] INFO spindle_dev.index: Finished block 22 in 0.09 seconds, found 2 clusters. [2026-01-20 13:02:08,406] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:08,498] INFO spindle_dev.index: Finished block 23 in 0.09 seconds, found 1 clusters. [2026-01-20 13:02:08,499] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:08,549] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:08,550] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:08,661] INFO spindle_dev.index: Finished block 25 in 0.11 seconds, found 6 clusters. [2026-01-20 13:02:08,662] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:08,781] INFO spindle_dev.index: Finished block 26 in 0.12 seconds, found 9 clusters. [2026-01-20 13:02:08,782] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:08,869] INFO spindle_dev.index: Finished block 27 in 0.09 seconds, found 5 clusters. [2026-01-20 13:02:08,870] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:02:09,132] INFO spindle_dev.index: Finished block 28 in 0.26 seconds, found 7 clusters. [2026-01-20 13:02:09,132] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:02:09,249] INFO spindle_dev.index: Finished block 29 in 0.12 seconds, found 7 clusters. [2026-01-20 13:02:09,249] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:09,250] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:09,250] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:09,250] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:09,251] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:09,268] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:09,269] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:09,269] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 13:02:09,269] INFO spindle_dev.index: Building SPD index with epsilon=8.066044604859776 [2026-01-20 13:02:09,270] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:09,330] INFO spindle_dev.index: Cluster 2: 538 SPDs, 22 blocks [2026-01-20 13:02:09,331] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:09,375] INFO spindle_dev.index: Finished block 0 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,376] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:09,418] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,419] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:09,460] INFO spindle_dev.index: Finished block 2 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,460] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:09,503] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,503] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:09,547] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,548] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:09,592] INFO spindle_dev.index: Finished block 5 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,593] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:09,639] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:09,640] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:09,684] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,685] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:09,732] INFO spindle_dev.index: Finished block 8 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:09,733] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:09,779] INFO spindle_dev.index: Finished block 9 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:09,779] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:09,823] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:09,824] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:09,873] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:09,873] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:09,937] INFO spindle_dev.index: Finished block 12 in 0.06 seconds, found 4 clusters. [2026-01-20 13:02:09,937] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:09,988] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 3 clusters. [2026-01-20 13:02:09,988] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:10,040] INFO spindle_dev.index: Finished block 14 in 0.05 seconds, found 3 clusters. [2026-01-20 13:02:10,041] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:10,105] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 5 clusters. [2026-01-20 13:02:10,105] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:10,299] INFO spindle_dev.index: Finished block 16 in 0.19 seconds, found 14 clusters. [2026-01-20 13:02:10,299] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:10,569] INFO spindle_dev.index: Finished block 17 in 0.27 seconds, found 10 clusters. [2026-01-20 13:02:10,569] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:10,614] INFO spindle_dev.index: Finished block 18 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:10,614] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:10,904] INFO spindle_dev.index: Finished block 19 in 0.29 seconds, found 10 clusters. [2026-01-20 13:02:10,905] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:11,017] INFO spindle_dev.index: Finished block 20 in 0.11 seconds, found 5 clusters. [2026-01-20 13:02:11,017] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:11,170] INFO spindle_dev.index: Finished block 21 in 0.15 seconds, found 7 clusters. [2026-01-20 13:02:11,170] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:11,171] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:11,171] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:11,171] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:11,172] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:11,184] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:11,184] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:11,185] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 13:02:11,185] INFO spindle_dev.index: Building SPD index with epsilon=7.942401925250819 [2026-01-20 13:02:11,185] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:11,226] INFO spindle_dev.index: Cluster 3: 425 SPDs, 32 blocks [2026-01-20 13:02:11,227] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:11,252] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 13:02:11,253] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:11,279] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 1 clusters. [2026-01-20 13:02:11,280] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:11,313] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,313] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:11,340] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 1 clusters. [2026-01-20 13:02:11,341] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:11,372] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,372] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:11,406] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,407] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:11,439] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,440] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:11,477] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:11,478] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:11,510] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,510] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:11,543] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,544] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:11,577] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,577] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:11,610] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,610] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:11,648] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:11,648] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:11,686] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:11,687] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:11,720] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,720] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:11,755] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:11,755] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:11,792] INFO spindle_dev.index: Finished block 16 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:11,793] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:11,832] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:11,833] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:11,874] INFO spindle_dev.index: Finished block 18 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:11,874] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:11,909] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:11,910] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:11,958] INFO spindle_dev.index: Finished block 20 in 0.05 seconds, found 4 clusters. [2026-01-20 13:02:11,958] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:12,011] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 5 clusters. [2026-01-20 13:02:12,012] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:12,066] INFO spindle_dev.index: Finished block 22 in 0.05 seconds, found 4 clusters. [2026-01-20 13:02:12,067] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:12,120] INFO spindle_dev.index: Finished block 23 in 0.05 seconds, found 5 clusters. [2026-01-20 13:02:12,120] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:12,167] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 4 clusters. [2026-01-20 13:02:12,167] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:12,207] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:12,208] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:12,271] INFO spindle_dev.index: Finished block 26 in 0.06 seconds, found 7 clusters. [2026-01-20 13:02:12,271] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:12,332] INFO spindle_dev.index: Finished block 27 in 0.06 seconds, found 6 clusters. [2026-01-20 13:02:12,333] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:02:12,387] INFO spindle_dev.index: Finished block 28 in 0.05 seconds, found 5 clusters. [2026-01-20 13:02:12,387] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:02:12,439] INFO spindle_dev.index: Finished block 29 in 0.05 seconds, found 4 clusters. [2026-01-20 13:02:12,440] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:02:12,525] INFO spindle_dev.index: Finished block 30 in 0.09 seconds, found 8 clusters. [2026-01-20 13:02:12,525] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:02:12,675] INFO spindle_dev.index: Finished block 31 in 0.15 seconds, found 10 clusters. [2026-01-20 13:02:12,676] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:12,676] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:12,676] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:12,677] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:12,678] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:12,690] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:12,691] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:12,691] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 13:02:12,692] INFO spindle_dev.index: Building SPD index with epsilon=5.564286992269356 [2026-01-20 13:02:12,692] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:12,726] INFO spindle_dev.index: Cluster 4: 340 SPDs, 28 blocks [2026-01-20 13:02:12,727] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:12,792] INFO spindle_dev.index: Finished block 0 in 0.07 seconds, found 10 clusters. [2026-01-20 13:02:12,793] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:12,874] INFO spindle_dev.index: Finished block 1 in 0.08 seconds, found 14 clusters. [2026-01-20 13:02:12,874] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:12,951] INFO spindle_dev.index: Finished block 2 in 0.08 seconds, found 13 clusters. [2026-01-20 13:02:12,951] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:13,034] INFO spindle_dev.index: Finished block 3 in 0.08 seconds, found 15 clusters. [2026-01-20 13:02:13,035] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:13,113] INFO spindle_dev.index: Finished block 4 in 0.08 seconds, found 14 clusters. [2026-01-20 13:02:13,114] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:13,188] INFO spindle_dev.index: Finished block 5 in 0.07 seconds, found 13 clusters. [2026-01-20 13:02:13,188] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:13,271] INFO spindle_dev.index: Finished block 6 in 0.08 seconds, found 15 clusters. [2026-01-20 13:02:13,272] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:13,343] INFO spindle_dev.index: Finished block 7 in 0.07 seconds, found 12 clusters. [2026-01-20 13:02:13,343] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:13,410] INFO spindle_dev.index: Finished block 8 in 0.07 seconds, found 11 clusters. [2026-01-20 13:02:13,410] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:13,468] INFO spindle_dev.index: Finished block 9 in 0.06 seconds, found 9 clusters. [2026-01-20 13:02:13,469] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:13,542] INFO spindle_dev.index: Finished block 10 in 0.07 seconds, found 12 clusters. [2026-01-20 13:02:13,543] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:13,622] INFO spindle_dev.index: Finished block 11 in 0.08 seconds, found 13 clusters. [2026-01-20 13:02:13,623] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:13,668] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 5 clusters. [2026-01-20 13:02:13,668] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:13,723] INFO spindle_dev.index: Finished block 13 in 0.06 seconds, found 8 clusters. [2026-01-20 13:02:13,724] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:13,770] INFO spindle_dev.index: Finished block 14 in 0.05 seconds, found 6 clusters. [2026-01-20 13:02:13,770] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:13,815] INFO spindle_dev.index: Finished block 15 in 0.04 seconds, found 4 clusters. [2026-01-20 13:02:13,815] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:13,844] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:13,844] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:13,881] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 4 clusters. [2026-01-20 13:02:13,882] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:13,912] INFO spindle_dev.index: Finished block 18 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:13,913] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:13,952] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:13,952] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:13,996] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 4 clusters. [2026-01-20 13:02:13,997] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:14,032] INFO spindle_dev.index: Finished block 21 in 0.03 seconds, found 3 clusters. [2026-01-20 13:02:14,032] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:14,068] INFO spindle_dev.index: Finished block 22 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:14,069] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:14,103] INFO spindle_dev.index: Finished block 23 in 0.03 seconds, found 3 clusters. [2026-01-20 13:02:14,103] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:14,155] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:14,156] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:14,189] INFO spindle_dev.index: Finished block 25 in 0.03 seconds, found 3 clusters. [2026-01-20 13:02:14,190] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:14,285] INFO spindle_dev.index: Finished block 26 in 0.10 seconds, found 2 clusters. [2026-01-20 13:02:14,285] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:14,368] INFO spindle_dev.index: Finished block 27 in 0.08 seconds, found 2 clusters. [2026-01-20 13:02:14,369] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:14,369] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:14,370] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:14,370] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:14,370] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:14,382] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:14,383] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:14,384] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 13:02:14,384] INFO spindle_dev.index: Building SPD index with epsilon=4.676282904779068 [2026-01-20 13:02:14,385] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:14,394] INFO spindle_dev.index: Cluster 5: 89 SPDs, 28 blocks [2026-01-20 13:02:14,395] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:14,416] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 13 clusters. [2026-01-20 13:02:14,416] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:14,451] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 25 clusters. [2026-01-20 13:02:14,451] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:14,491] INFO spindle_dev.index: Finished block 2 in 0.04 seconds, found 29 clusters. [2026-01-20 13:02:14,491] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:14,526] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 26 clusters. [2026-01-20 13:02:14,526] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:14,563] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 28 clusters. [2026-01-20 13:02:14,564] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:14,598] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 26 clusters. [2026-01-20 13:02:14,599] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:14,631] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 24 clusters. [2026-01-20 13:02:14,631] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:14,660] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 21 clusters. [2026-01-20 13:02:14,661] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:14,683] INFO spindle_dev.index: Finished block 8 in 0.02 seconds, found 15 clusters. [2026-01-20 13:02:14,684] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:14,708] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 17 clusters. [2026-01-20 13:02:14,708] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:14,727] INFO spindle_dev.index: Finished block 10 in 0.02 seconds, found 12 clusters. [2026-01-20 13:02:14,728] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:14,745] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 11 clusters. [2026-01-20 13:02:14,746] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:14,765] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 12 clusters. [2026-01-20 13:02:14,765] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:14,784] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 12 clusters. [2026-01-20 13:02:14,785] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:14,801] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 9 clusters. [2026-01-20 13:02:14,801] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:14,812] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 5 clusters. [2026-01-20 13:02:14,813] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:14,830] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 10 clusters. [2026-01-20 13:02:14,830] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:14,845] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 8 clusters. [2026-01-20 13:02:14,846] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:14,862] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 9 clusters. [2026-01-20 13:02:14,862] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:14,875] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 5 clusters. [2026-01-20 13:02:14,875] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:14,889] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 7 clusters. [2026-01-20 13:02:14,890] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:14,914] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 6 clusters. [2026-01-20 13:02:14,914] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:14,932] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 4 clusters. [2026-01-20 13:02:14,932] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:14,939] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 1 clusters. [2026-01-20 13:02:14,939] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:14,950] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 3 clusters. [2026-01-20 13:02:14,951] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:14,959] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 2 clusters. [2026-01-20 13:02:14,960] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:15,004] INFO spindle_dev.index: Finished block 26 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:15,004] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:15,013] INFO spindle_dev.index: Finished block 27 in 0.01 seconds, found 2 clusters. [2026-01-20 13:02:15,014] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:15,014] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:15,014] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:15,015] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:15,015] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:15,020] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:15,021] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:15,024] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 13:02:15,024] INFO spindle_dev.index: Building SPD index with epsilon=5.607331021354877 [2026-01-20 13:02:15,025] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:15,077] INFO spindle_dev.index: Cluster 0: 692 SPDs, 33 blocks [2026-01-20 13:02:15,078] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:15,235] INFO spindle_dev.index: Finished block 0 in 0.16 seconds, found 13 clusters. [2026-01-20 13:02:15,235] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:15,404] INFO spindle_dev.index: Finished block 1 in 0.17 seconds, found 15 clusters. [2026-01-20 13:02:15,405] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:15,563] INFO spindle_dev.index: Finished block 2 in 0.16 seconds, found 14 clusters. [2026-01-20 13:02:15,564] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:15,739] INFO spindle_dev.index: Finished block 3 in 0.17 seconds, found 16 clusters. [2026-01-20 13:02:15,739] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:15,900] INFO spindle_dev.index: Finished block 4 in 0.16 seconds, found 14 clusters. [2026-01-20 13:02:15,900] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:16,075] INFO spindle_dev.index: Finished block 5 in 0.18 seconds, found 15 clusters. [2026-01-20 13:02:16,076] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:16,258] INFO spindle_dev.index: Finished block 6 in 0.18 seconds, found 16 clusters. [2026-01-20 13:02:16,260] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:16,417] INFO spindle_dev.index: Finished block 7 in 0.16 seconds, found 14 clusters. [2026-01-20 13:02:16,417] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:16,574] INFO spindle_dev.index: Finished block 8 in 0.16 seconds, found 14 clusters. [2026-01-20 13:02:16,575] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:16,703] INFO spindle_dev.index: Finished block 9 in 0.13 seconds, found 10 clusters. [2026-01-20 13:02:16,704] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:16,862] INFO spindle_dev.index: Finished block 10 in 0.16 seconds, found 13 clusters. [2026-01-20 13:02:16,863] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:17,008] INFO spindle_dev.index: Finished block 11 in 0.14 seconds, found 12 clusters. [2026-01-20 13:02:17,008] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:17,135] INFO spindle_dev.index: Finished block 12 in 0.13 seconds, found 10 clusters. [2026-01-20 13:02:17,135] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:17,244] INFO spindle_dev.index: Finished block 13 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:17,245] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:17,353] INFO spindle_dev.index: Finished block 14 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:17,353] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:17,447] INFO spindle_dev.index: Finished block 15 in 0.09 seconds, found 6 clusters. [2026-01-20 13:02:17,448] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:17,508] INFO spindle_dev.index: Finished block 16 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:17,509] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:17,562] INFO spindle_dev.index: Finished block 17 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:17,563] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:17,625] INFO spindle_dev.index: Finished block 18 in 0.06 seconds, found 1 clusters. [2026-01-20 13:02:17,626] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:17,694] INFO spindle_dev.index: Finished block 19 in 0.07 seconds, found 2 clusters. [2026-01-20 13:02:17,695] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:17,765] INFO spindle_dev.index: Finished block 20 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:17,766] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:17,827] INFO spindle_dev.index: Finished block 21 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:17,827] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:17,877] INFO spindle_dev.index: Finished block 22 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:17,878] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:17,948] INFO spindle_dev.index: Finished block 23 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:17,948] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:17,997] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:17,997] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:18,052] INFO spindle_dev.index: Finished block 25 in 0.06 seconds, found 1 clusters. [2026-01-20 13:02:18,053] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:18,101] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:18,101] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:18,213] INFO spindle_dev.index: Finished block 27 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:18,214] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:02:18,281] INFO spindle_dev.index: Finished block 28 in 0.07 seconds, found 2 clusters. [2026-01-20 13:02:18,281] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:02:18,350] INFO spindle_dev.index: Finished block 29 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:18,350] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:02:18,490] INFO spindle_dev.index: Finished block 30 in 0.14 seconds, found 2 clusters. [2026-01-20 13:02:18,490] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:02:18,550] INFO spindle_dev.index: Finished block 31 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:18,550] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:02:18,633] INFO spindle_dev.index: Finished block 32 in 0.08 seconds, found 5 clusters. [2026-01-20 13:02:18,633] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:18,634] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:18,634] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:18,634] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:18,635] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:18,656] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:18,657] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:18,657] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 13:02:18,658] INFO spindle_dev.index: Building SPD index with epsilon=5.957970143297901 [2026-01-20 13:02:18,658] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:18,706] INFO spindle_dev.index: Cluster 1: 688 SPDs, 30 blocks [2026-01-20 13:02:18,707] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:18,804] INFO spindle_dev.index: Finished block 0 in 0.10 seconds, found 7 clusters. [2026-01-20 13:02:18,804] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:18,925] INFO spindle_dev.index: Finished block 1 in 0.12 seconds, found 10 clusters. [2026-01-20 13:02:18,926] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:19,042] INFO spindle_dev.index: Finished block 2 in 0.12 seconds, found 9 clusters. [2026-01-20 13:02:19,043] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:19,215] INFO spindle_dev.index: Finished block 3 in 0.17 seconds, found 15 clusters. [2026-01-20 13:02:19,216] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:19,349] INFO spindle_dev.index: Finished block 4 in 0.13 seconds, found 11 clusters. [2026-01-20 13:02:19,349] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:19,497] INFO spindle_dev.index: Finished block 5 in 0.15 seconds, found 13 clusters. [2026-01-20 13:02:19,498] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:19,637] INFO spindle_dev.index: Finished block 6 in 0.14 seconds, found 12 clusters. [2026-01-20 13:02:19,637] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:19,769] INFO spindle_dev.index: Finished block 7 in 0.13 seconds, found 11 clusters. [2026-01-20 13:02:19,770] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:19,908] INFO spindle_dev.index: Finished block 8 in 0.14 seconds, found 11 clusters. [2026-01-20 13:02:19,908] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:20,045] INFO spindle_dev.index: Finished block 9 in 0.14 seconds, found 11 clusters. [2026-01-20 13:02:20,046] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:20,179] INFO spindle_dev.index: Finished block 10 in 0.13 seconds, found 11 clusters. [2026-01-20 13:02:20,180] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:20,294] INFO spindle_dev.index: Finished block 11 in 0.11 seconds, found 9 clusters. [2026-01-20 13:02:20,294] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:20,418] INFO spindle_dev.index: Finished block 12 in 0.12 seconds, found 10 clusters. [2026-01-20 13:02:20,418] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:20,525] INFO spindle_dev.index: Finished block 13 in 0.11 seconds, found 8 clusters. [2026-01-20 13:02:20,526] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:20,628] INFO spindle_dev.index: Finished block 14 in 0.10 seconds, found 7 clusters. [2026-01-20 13:02:20,628] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:20,706] INFO spindle_dev.index: Finished block 15 in 0.08 seconds, found 4 clusters. [2026-01-20 13:02:20,706] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:20,765] INFO spindle_dev.index: Finished block 16 in 0.06 seconds, found 2 clusters. [2026-01-20 13:02:20,765] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:20,831] INFO spindle_dev.index: Finished block 17 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:20,832] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:20,907] INFO spindle_dev.index: Finished block 18 in 0.08 seconds, found 4 clusters. [2026-01-20 13:02:20,908] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:20,992] INFO spindle_dev.index: Finished block 19 in 0.08 seconds, found 5 clusters. [2026-01-20 13:02:20,992] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:21,070] INFO spindle_dev.index: Finished block 20 in 0.08 seconds, found 4 clusters. [2026-01-20 13:02:21,070] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:21,141] INFO spindle_dev.index: Finished block 21 in 0.07 seconds, found 3 clusters. [2026-01-20 13:02:21,141] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:21,227] INFO spindle_dev.index: Finished block 22 in 0.09 seconds, found 2 clusters. [2026-01-20 13:02:21,228] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:21,319] INFO spindle_dev.index: Finished block 23 in 0.09 seconds, found 1 clusters. [2026-01-20 13:02:21,319] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:21,370] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 1 clusters. [2026-01-20 13:02:21,371] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:21,483] INFO spindle_dev.index: Finished block 25 in 0.11 seconds, found 6 clusters. [2026-01-20 13:02:21,484] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:21,602] INFO spindle_dev.index: Finished block 26 in 0.12 seconds, found 9 clusters. [2026-01-20 13:02:21,603] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:21,685] INFO spindle_dev.index: Finished block 27 in 0.08 seconds, found 5 clusters. [2026-01-20 13:02:21,686] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:02:21,941] INFO spindle_dev.index: Finished block 28 in 0.26 seconds, found 7 clusters. [2026-01-20 13:02:21,942] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:02:22,057] INFO spindle_dev.index: Finished block 29 in 0.11 seconds, found 7 clusters. [2026-01-20 13:02:22,057] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:22,057] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:22,058] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:22,058] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:22,059] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:22,077] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:22,078] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:22,078] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 13:02:22,078] INFO spindle_dev.index: Building SPD index with epsilon=8.066044604859776 [2026-01-20 13:02:22,079] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:22,121] INFO spindle_dev.index: Cluster 2: 538 SPDs, 22 blocks [2026-01-20 13:02:22,122] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:22,167] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:22,168] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:22,211] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,211] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:22,254] INFO spindle_dev.index: Finished block 2 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,255] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:22,298] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,299] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:22,342] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,342] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:22,385] INFO spindle_dev.index: Finished block 5 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,385] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:22,430] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,430] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:22,472] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,473] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:22,517] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,518] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:22,562] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,563] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:22,606] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:22,606] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:22,655] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:22,655] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:22,718] INFO spindle_dev.index: Finished block 12 in 0.06 seconds, found 4 clusters. [2026-01-20 13:02:22,719] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:22,769] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 3 clusters. [2026-01-20 13:02:22,770] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:22,822] INFO spindle_dev.index: Finished block 14 in 0.05 seconds, found 3 clusters. [2026-01-20 13:02:22,822] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:22,887] INFO spindle_dev.index: Finished block 15 in 0.07 seconds, found 5 clusters. [2026-01-20 13:02:22,888] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:23,088] INFO spindle_dev.index: Finished block 16 in 0.20 seconds, found 14 clusters. [2026-01-20 13:02:23,088] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:23,348] INFO spindle_dev.index: Finished block 17 in 0.26 seconds, found 10 clusters. [2026-01-20 13:02:23,348] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:23,393] INFO spindle_dev.index: Finished block 18 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:23,394] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:23,684] INFO spindle_dev.index: Finished block 19 in 0.29 seconds, found 10 clusters. [2026-01-20 13:02:23,685] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:23,800] INFO spindle_dev.index: Finished block 20 in 0.12 seconds, found 5 clusters. [2026-01-20 13:02:23,801] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:23,951] INFO spindle_dev.index: Finished block 21 in 0.15 seconds, found 7 clusters. [2026-01-20 13:02:23,952] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:23,953] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:23,953] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:23,954] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:23,954] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:23,965] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:23,966] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:23,966] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 13:02:23,967] INFO spindle_dev.index: Building SPD index with epsilon=7.942401925250819 [2026-01-20 13:02:23,967] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:23,998] INFO spindle_dev.index: Cluster 3: 425 SPDs, 32 blocks [2026-01-20 13:02:23,999] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:24,024] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 13:02:24,024] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:24,049] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 1 clusters. [2026-01-20 13:02:24,049] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:24,079] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,079] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:24,105] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 1 clusters. [2026-01-20 13:02:24,105] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:24,136] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,136] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:24,171] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,171] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:24,203] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,204] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:24,242] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:24,242] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:24,274] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,275] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:24,307] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,307] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:24,340] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,340] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:24,372] INFO spindle_dev.index: Finished block 11 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,372] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:24,410] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:24,410] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:24,450] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:24,450] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:24,486] INFO spindle_dev.index: Finished block 14 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:24,487] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:24,523] INFO spindle_dev.index: Finished block 15 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:24,523] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:24,562] INFO spindle_dev.index: Finished block 16 in 0.04 seconds, found 2 clusters. [2026-01-20 13:02:24,563] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:24,603] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:24,604] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:24,644] INFO spindle_dev.index: Finished block 18 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:24,645] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:24,680] INFO spindle_dev.index: Finished block 19 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:24,681] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:24,727] INFO spindle_dev.index: Finished block 20 in 0.05 seconds, found 4 clusters. [2026-01-20 13:02:24,727] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:24,778] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 5 clusters. [2026-01-20 13:02:24,778] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:24,828] INFO spindle_dev.index: Finished block 22 in 0.05 seconds, found 4 clusters. [2026-01-20 13:02:24,829] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:24,879] INFO spindle_dev.index: Finished block 23 in 0.05 seconds, found 5 clusters. [2026-01-20 13:02:24,879] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:24,923] INFO spindle_dev.index: Finished block 24 in 0.04 seconds, found 4 clusters. [2026-01-20 13:02:24,923] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:24,962] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:24,963] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:25,023] INFO spindle_dev.index: Finished block 26 in 0.06 seconds, found 7 clusters. [2026-01-20 13:02:25,023] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:25,086] INFO spindle_dev.index: Finished block 27 in 0.06 seconds, found 6 clusters. [2026-01-20 13:02:25,087] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:02:25,140] INFO spindle_dev.index: Finished block 28 in 0.05 seconds, found 5 clusters. [2026-01-20 13:02:25,141] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:02:25,191] INFO spindle_dev.index: Finished block 29 in 0.05 seconds, found 4 clusters. [2026-01-20 13:02:25,192] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:02:25,277] INFO spindle_dev.index: Finished block 30 in 0.09 seconds, found 8 clusters. [2026-01-20 13:02:25,278] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:02:25,430] INFO spindle_dev.index: Finished block 31 in 0.15 seconds, found 10 clusters. [2026-01-20 13:02:25,431] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:25,431] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:25,431] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:25,432] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:25,432] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:25,444] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:25,445] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:25,445] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 13:02:25,445] INFO spindle_dev.index: Building SPD index with epsilon=5.564286992269356 [2026-01-20 13:02:25,446] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:25,473] INFO spindle_dev.index: Cluster 4: 340 SPDs, 28 blocks [2026-01-20 13:02:25,474] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:25,536] INFO spindle_dev.index: Finished block 0 in 0.06 seconds, found 10 clusters. [2026-01-20 13:02:25,536] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:25,612] INFO spindle_dev.index: Finished block 1 in 0.08 seconds, found 14 clusters. [2026-01-20 13:02:25,613] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:25,688] INFO spindle_dev.index: Finished block 2 in 0.07 seconds, found 13 clusters. [2026-01-20 13:02:25,688] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:25,770] INFO spindle_dev.index: Finished block 3 in 0.08 seconds, found 15 clusters. [2026-01-20 13:02:25,770] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:25,850] INFO spindle_dev.index: Finished block 4 in 0.08 seconds, found 14 clusters. [2026-01-20 13:02:25,851] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:25,924] INFO spindle_dev.index: Finished block 5 in 0.07 seconds, found 13 clusters. [2026-01-20 13:02:25,924] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:26,007] INFO spindle_dev.index: Finished block 6 in 0.08 seconds, found 15 clusters. [2026-01-20 13:02:26,007] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:26,080] INFO spindle_dev.index: Finished block 7 in 0.07 seconds, found 12 clusters. [2026-01-20 13:02:26,081] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:26,149] INFO spindle_dev.index: Finished block 8 in 0.07 seconds, found 11 clusters. [2026-01-20 13:02:26,149] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:26,208] INFO spindle_dev.index: Finished block 9 in 0.06 seconds, found 9 clusters. [2026-01-20 13:02:26,209] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:26,280] INFO spindle_dev.index: Finished block 10 in 0.07 seconds, found 12 clusters. [2026-01-20 13:02:26,281] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:26,355] INFO spindle_dev.index: Finished block 11 in 0.07 seconds, found 13 clusters. [2026-01-20 13:02:26,356] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:26,397] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 5 clusters. [2026-01-20 13:02:26,397] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:26,451] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 8 clusters. [2026-01-20 13:02:26,451] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:26,495] INFO spindle_dev.index: Finished block 14 in 0.04 seconds, found 6 clusters. [2026-01-20 13:02:26,496] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:26,540] INFO spindle_dev.index: Finished block 15 in 0.04 seconds, found 4 clusters. [2026-01-20 13:02:26,540] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:26,568] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:26,569] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:26,606] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 4 clusters. [2026-01-20 13:02:26,606] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:26,637] INFO spindle_dev.index: Finished block 18 in 0.03 seconds, found 2 clusters. [2026-01-20 13:02:26,638] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:26,677] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:26,677] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:26,720] INFO spindle_dev.index: Finished block 20 in 0.04 seconds, found 4 clusters. [2026-01-20 13:02:26,721] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:26,754] INFO spindle_dev.index: Finished block 21 in 0.03 seconds, found 3 clusters. [2026-01-20 13:02:26,754] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:26,791] INFO spindle_dev.index: Finished block 22 in 0.04 seconds, found 3 clusters. [2026-01-20 13:02:26,792] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:26,827] INFO spindle_dev.index: Finished block 23 in 0.03 seconds, found 3 clusters. [2026-01-20 13:02:26,827] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:26,882] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 2 clusters. [2026-01-20 13:02:26,882] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:26,917] INFO spindle_dev.index: Finished block 25 in 0.03 seconds, found 3 clusters. [2026-01-20 13:02:26,917] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:27,014] INFO spindle_dev.index: Finished block 26 in 0.10 seconds, found 2 clusters. [2026-01-20 13:02:27,015] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:27,094] INFO spindle_dev.index: Finished block 27 in 0.08 seconds, found 2 clusters. [2026-01-20 13:02:27,095] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:27,095] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:27,096] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:27,096] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:27,097] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:27,106] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:27,106] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:27,107] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 13:02:27,107] INFO spindle_dev.index: Building SPD index with epsilon=4.676282904779068 [2026-01-20 13:02:27,108] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:02:27,115] INFO spindle_dev.index: Cluster 5: 89 SPDs, 28 blocks [2026-01-20 13:02:27,116] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:02:27,136] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 13 clusters. [2026-01-20 13:02:27,137] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:02:27,169] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 25 clusters. [2026-01-20 13:02:27,170] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:02:27,207] INFO spindle_dev.index: Finished block 2 in 0.04 seconds, found 29 clusters. [2026-01-20 13:02:27,208] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:02:27,243] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 26 clusters. [2026-01-20 13:02:27,243] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:02:27,279] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 28 clusters. [2026-01-20 13:02:27,280] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:02:27,316] INFO spindle_dev.index: Finished block 5 in 0.04 seconds, found 26 clusters. [2026-01-20 13:02:27,316] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:02:27,350] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 24 clusters. [2026-01-20 13:02:27,350] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:02:27,380] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 21 clusters. [2026-01-20 13:02:27,380] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:02:27,402] INFO spindle_dev.index: Finished block 8 in 0.02 seconds, found 15 clusters. [2026-01-20 13:02:27,402] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:02:27,426] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 17 clusters. [2026-01-20 13:02:27,426] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:02:27,445] INFO spindle_dev.index: Finished block 10 in 0.02 seconds, found 12 clusters. [2026-01-20 13:02:27,445] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:02:27,463] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 11 clusters. [2026-01-20 13:02:27,463] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:02:27,482] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 12 clusters. [2026-01-20 13:02:27,483] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:02:27,502] INFO spindle_dev.index: Finished block 13 in 0.02 seconds, found 12 clusters. [2026-01-20 13:02:27,502] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:02:27,518] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 9 clusters. [2026-01-20 13:02:27,519] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:02:27,530] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 5 clusters. [2026-01-20 13:02:27,530] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:02:27,547] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 10 clusters. [2026-01-20 13:02:27,548] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:02:27,564] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 8 clusters. [2026-01-20 13:02:27,565] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:02:27,582] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 9 clusters. [2026-01-20 13:02:27,582] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:02:27,595] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 5 clusters. [2026-01-20 13:02:27,595] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:02:27,610] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 7 clusters. [2026-01-20 13:02:27,611] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:02:27,635] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 6 clusters. [2026-01-20 13:02:27,636] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:02:27,654] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 4 clusters. [2026-01-20 13:02:27,655] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:02:27,662] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 1 clusters. [2026-01-20 13:02:27,663] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:02:27,675] INFO spindle_dev.index: Finished block 24 in 0.01 seconds, found 3 clusters. [2026-01-20 13:02:27,676] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:02:27,686] INFO spindle_dev.index: Finished block 25 in 0.01 seconds, found 2 clusters. [2026-01-20 13:02:27,687] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:02:27,733] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 3 clusters. [2026-01-20 13:02:27,733] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:02:27,743] INFO spindle_dev.index: Finished block 27 in 0.01 seconds, found 2 clusters. [2026-01-20 13:02:27,743] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:02:27,744] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:02:27,744] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:02:27,745] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:02:27,746] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:02:27,751] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:02:27,753] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:02:28,598] INFO spindle_dev.test: Built ground-truth paths for 692 SPDs in cluster 0 across 33 blocks. [2026-01-20 13:02:29,300] INFO spindle_dev.test: Built ground-truth paths for 688 SPDs in cluster 1 across 30 blocks. [2026-01-20 13:02:29,625] INFO spindle_dev.test: Built ground-truth paths for 538 SPDs in cluster 2 across 22 blocks. [2026-01-20 13:02:29,900] INFO spindle_dev.test: Built ground-truth paths for 425 SPDs in cluster 3 across 32 blocks. [2026-01-20 13:02:30,065] INFO spindle_dev.test: Built ground-truth paths for 340 SPDs in cluster 4 across 28 blocks. [2026-01-20 13:02:30,085] INFO spindle_dev.test: Built ground-truth paths for 89 SPDs in cluster 5 across 28 blocks.
Done with search xenium_human_pancreatic_cancer
[2026-01-20 13:02:39,271] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 13:02:39,272] INFO spindle_dev.index: Building ultrametric features from SPD matrices. [2026-01-20 13:05:38,285] INFO spindle_dev.index: Computing latent features from the tree representations. [2026-01-20 13:05:40,347] INFO spindle_dev.index: Reducing latent features to 30 dimensions using PCA. [2026-01-20 13:06:00,263] INFO spindle_dev.index: Explained variance ratios by PCA components: [0.0320497 0.02162234 0.01256116 0.01050905 0.00749142 0.00605011 0.00554716 0.00489446 0.00464791 0.00400857 0.00364074 0.00334745 0.00303675 0.00288334 0.00285155 0.00278616 0.00268314 0.00255294 0.00253779 0.0024637 0.00244129 0.00239347 0.00235185 0.00232927 0.00231797 0.00226505 0.00223933 0.00221084 0.00216073 0.0021491 ] [2026-01-20 13:06:00,265] INFO spindle_dev.index: Reducing latent features to 2 dimensions using UMAP. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism. warn( [2026-01-20 13:06:06,658] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 13:06:06,659] INFO spindle_dev.index: Clustering SPD matrices using Leiden clustering with resolution 0.50. [2026-01-20 13:06:06,972] INFO spindle_dev.index: Since clustering method is tree, I am going to find global order per cluster [2026-01-20 13:06:06,973] INFO spindle_dev.index: Finding consensus tree for cluster 0 [2026-01-20 13:06:09,144] INFO spindle_dev.index: Finding consensus tree for cluster 1 [2026-01-20 13:06:09,711] INFO spindle_dev.index: Finding consensus tree for cluster 2 [2026-01-20 13:06:10,118] INFO spindle_dev.index: Finding consensus tree for cluster 3 [2026-01-20 13:06:11,069] INFO spindle_dev.index: Computing mean correlation matrix for cluster 0 [2026-01-20 13:06:59,745] INFO spindle_dev.index: Computing mean correlation matrix for cluster 1 [2026-01-20 13:07:19,207] INFO spindle_dev.index: Computing mean correlation matrix for cluster 2 [2026-01-20 13:07:31,405] INFO spindle_dev.index: Computing mean correlation matrix for cluster 3 [2026-01-20 13:07:39,649] INFO spindle_dev.index: Finding adaptive block runs for cluster 0 [2026-01-20 13:07:40,694] INFO spindle_dev.index: Chose t=0.8293728472399398 resulting in 394 blocks instead of 207 blocks would have gotten by default [2026-01-20 13:07:40,884] INFO spindle_dev.index: Final block runs for cluster 0: 40 blocks. [2026-01-20 13:07:40,885] INFO spindle_dev.index: Finding adaptive block runs for cluster 1 [2026-01-20 13:07:41,958] INFO spindle_dev.index: Chose t=0.8590476075698847 resulting in 344 blocks instead of 187 blocks would have gotten by default [2026-01-20 13:07:42,104] INFO spindle_dev.index: Final block runs for cluster 1: 38 blocks. [2026-01-20 13:07:42,105] INFO spindle_dev.index: Finding adaptive block runs for cluster 2 [2026-01-20 13:07:43,161] INFO spindle_dev.index: Chose t=0.8391875451894203 resulting in 393 blocks instead of 219 blocks would have gotten by default [2026-01-20 13:07:43,349] INFO spindle_dev.index: Final block runs for cluster 2: 40 blocks. [2026-01-20 13:07:43,350] INFO spindle_dev.index: Finding adaptive block runs for cluster 3 [2026-01-20 13:07:44,402] INFO spindle_dev.index: Chose t=0.8906666765370457 resulting in 337 blocks instead of 226 blocks would have gotten by default [2026-01-20 13:07:44,540] INFO spindle_dev.index: Final block runs for cluster 3: 36 blocks. [2026-01-20 13:07:59,862] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 13:07:59,863] INFO spindle_dev.index: Building SPD index with epsilon=6.8219186476740195 [2026-01-20 13:07:59,864] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:07:59,982] INFO spindle_dev.index: Cluster 0: 932 SPDs, 40 blocks [2026-01-20 13:07:59,983] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:00,032] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 1 clusters. [2026-01-20 13:08:00,032] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:00,097] INFO spindle_dev.index: Finished block 1 in 0.06 seconds, found 2 clusters. [2026-01-20 13:08:00,097] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:00,170] INFO spindle_dev.index: Finished block 2 in 0.07 seconds, found 3 clusters. [2026-01-20 13:08:00,171] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:00,255] INFO spindle_dev.index: Finished block 3 in 0.08 seconds, found 4 clusters. [2026-01-20 13:08:00,255] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:00,339] INFO spindle_dev.index: Finished block 4 in 0.08 seconds, found 4 clusters. [2026-01-20 13:08:00,340] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:00,446] INFO spindle_dev.index: Finished block 5 in 0.11 seconds, found 6 clusters. [2026-01-20 13:08:00,447] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:00,542] INFO spindle_dev.index: Finished block 6 in 0.10 seconds, found 5 clusters. [2026-01-20 13:08:00,543] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:00,630] INFO spindle_dev.index: Finished block 7 in 0.09 seconds, found 4 clusters. [2026-01-20 13:08:00,631] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:00,761] INFO spindle_dev.index: Finished block 8 in 0.13 seconds, found 7 clusters. [2026-01-20 13:08:00,762] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:00,880] INFO spindle_dev.index: Finished block 9 in 0.12 seconds, found 7 clusters. [2026-01-20 13:08:00,881] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:01,000] INFO spindle_dev.index: Finished block 10 in 0.12 seconds, found 7 clusters. [2026-01-20 13:08:01,000] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:01,119] INFO spindle_dev.index: Finished block 11 in 0.12 seconds, found 7 clusters. [2026-01-20 13:08:01,120] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:01,260] INFO spindle_dev.index: Finished block 12 in 0.14 seconds, found 9 clusters. [2026-01-20 13:08:01,260] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:01,405] INFO spindle_dev.index: Finished block 13 in 0.14 seconds, found 9 clusters. [2026-01-20 13:08:01,405] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:01,558] INFO spindle_dev.index: Finished block 14 in 0.15 seconds, found 8 clusters. [2026-01-20 13:08:01,559] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:01,691] INFO spindle_dev.index: Finished block 15 in 0.13 seconds, found 8 clusters. [2026-01-20 13:08:01,692] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:01,803] INFO spindle_dev.index: Finished block 16 in 0.11 seconds, found 6 clusters. [2026-01-20 13:08:01,804] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:01,955] INFO spindle_dev.index: Finished block 17 in 0.15 seconds, found 10 clusters. [2026-01-20 13:08:01,956] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:02,087] INFO spindle_dev.index: Finished block 18 in 0.13 seconds, found 8 clusters. [2026-01-20 13:08:02,088] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:02,221] INFO spindle_dev.index: Finished block 19 in 0.13 seconds, found 8 clusters. [2026-01-20 13:08:02,222] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:02,386] INFO spindle_dev.index: Finished block 20 in 0.16 seconds, found 11 clusters. [2026-01-20 13:08:02,387] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:02,488] INFO spindle_dev.index: Finished block 21 in 0.10 seconds, found 5 clusters. [2026-01-20 13:08:02,488] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:02,589] INFO spindle_dev.index: Finished block 22 in 0.10 seconds, found 5 clusters. [2026-01-20 13:08:02,589] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:02,682] INFO spindle_dev.index: Finished block 23 in 0.09 seconds, found 4 clusters. [2026-01-20 13:08:02,683] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:02,822] INFO spindle_dev.index: Finished block 24 in 0.14 seconds, found 5 clusters. [2026-01-20 13:08:02,823] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:02,903] INFO spindle_dev.index: Finished block 25 in 0.08 seconds, found 3 clusters. [2026-01-20 13:08:02,904] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:03,003] INFO spindle_dev.index: Finished block 26 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:03,004] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:03,104] INFO spindle_dev.index: Finished block 27 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:03,105] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:03,216] INFO spindle_dev.index: Finished block 28 in 0.11 seconds, found 6 clusters. [2026-01-20 13:08:03,217] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:03,315] INFO spindle_dev.index: Finished block 29 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:03,316] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:03,392] INFO spindle_dev.index: Finished block 30 in 0.08 seconds, found 2 clusters. [2026-01-20 13:08:03,392] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:03,509] INFO spindle_dev.index: Finished block 31 in 0.12 seconds, found 6 clusters. [2026-01-20 13:08:03,509] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:03,606] INFO spindle_dev.index: Finished block 32 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:03,608] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:03,721] INFO spindle_dev.index: Finished block 33 in 0.11 seconds, found 4 clusters. [2026-01-20 13:08:03,722] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:03,819] INFO spindle_dev.index: Finished block 34 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:03,821] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:03,897] INFO spindle_dev.index: Finished block 35 in 0.08 seconds, found 2 clusters. [2026-01-20 13:08:03,898] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 13:08:03,961] INFO spindle_dev.index: Finished block 36 in 0.06 seconds, found 1 clusters. [2026-01-20 13:08:03,961] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 13:08:04,047] INFO spindle_dev.index: Finished block 37 in 0.09 seconds, found 3 clusters. [2026-01-20 13:08:04,047] INFO spindle_dev.index: Using epsilon-net clustering for block 38 [2026-01-20 13:08:04,122] INFO spindle_dev.index: Finished block 38 in 0.07 seconds, found 2 clusters. [2026-01-20 13:08:04,123] INFO spindle_dev.index: Using epsilon-net clustering for block 39 [2026-01-20 13:08:04,565] INFO spindle_dev.index: Finished block 39 in 0.44 seconds, found 9 clusters. [2026-01-20 13:08:04,565] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:04,566] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:04,567] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:04,567] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:04,568] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:04,594] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:04,595] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:04,596] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 13:08:04,597] INFO spindle_dev.index: Building SPD index with epsilon=6.7084806261957945 [2026-01-20 13:08:04,597] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:08:04,668] INFO spindle_dev.index: Cluster 1: 634 SPDs, 38 blocks [2026-01-20 13:08:04,669] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:04,705] INFO spindle_dev.index: Finished block 0 in 0.04 seconds, found 1 clusters. [2026-01-20 13:08:04,707] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:04,768] INFO spindle_dev.index: Finished block 1 in 0.06 seconds, found 4 clusters. [2026-01-20 13:08:04,769] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:04,821] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:04,821] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:04,898] INFO spindle_dev.index: Finished block 3 in 0.08 seconds, found 5 clusters. [2026-01-20 13:08:04,898] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:04,966] INFO spindle_dev.index: Finished block 4 in 0.07 seconds, found 5 clusters. [2026-01-20 13:08:04,966] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:05,043] INFO spindle_dev.index: Finished block 5 in 0.08 seconds, found 6 clusters. [2026-01-20 13:08:05,044] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:05,120] INFO spindle_dev.index: Finished block 6 in 0.08 seconds, found 6 clusters. [2026-01-20 13:08:05,120] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:05,193] INFO spindle_dev.index: Finished block 7 in 0.07 seconds, found 6 clusters. [2026-01-20 13:08:05,195] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:05,288] INFO spindle_dev.index: Finished block 8 in 0.09 seconds, found 8 clusters. [2026-01-20 13:08:05,289] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:05,388] INFO spindle_dev.index: Finished block 9 in 0.10 seconds, found 9 clusters. [2026-01-20 13:08:05,389] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:05,489] INFO spindle_dev.index: Finished block 10 in 0.10 seconds, found 9 clusters. [2026-01-20 13:08:05,490] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:05,576] INFO spindle_dev.index: Finished block 11 in 0.09 seconds, found 7 clusters. [2026-01-20 13:08:05,576] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:05,691] INFO spindle_dev.index: Finished block 12 in 0.12 seconds, found 11 clusters. [2026-01-20 13:08:05,692] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:05,799] INFO spindle_dev.index: Finished block 13 in 0.11 seconds, found 10 clusters. [2026-01-20 13:08:05,800] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:05,906] INFO spindle_dev.index: Finished block 14 in 0.11 seconds, found 10 clusters. [2026-01-20 13:08:05,906] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:06,025] INFO spindle_dev.index: Finished block 15 in 0.12 seconds, found 11 clusters. [2026-01-20 13:08:06,026] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:06,125] INFO spindle_dev.index: Finished block 16 in 0.10 seconds, found 9 clusters. [2026-01-20 13:08:06,126] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:06,244] INFO spindle_dev.index: Finished block 17 in 0.12 seconds, found 11 clusters. [2026-01-20 13:08:06,245] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:06,339] INFO spindle_dev.index: Finished block 18 in 0.09 seconds, found 8 clusters. [2026-01-20 13:08:06,340] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:06,450] INFO spindle_dev.index: Finished block 19 in 0.11 seconds, found 10 clusters. [2026-01-20 13:08:06,451] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:06,546] INFO spindle_dev.index: Finished block 20 in 0.10 seconds, found 8 clusters. [2026-01-20 13:08:06,547] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:06,638] INFO spindle_dev.index: Finished block 21 in 0.09 seconds, found 7 clusters. [2026-01-20 13:08:06,639] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:06,735] INFO spindle_dev.index: Finished block 22 in 0.10 seconds, found 8 clusters. [2026-01-20 13:08:06,738] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:06,813] INFO spindle_dev.index: Finished block 23 in 0.08 seconds, found 5 clusters. [2026-01-20 13:08:06,814] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:06,885] INFO spindle_dev.index: Finished block 24 in 0.07 seconds, found 3 clusters. [2026-01-20 13:08:06,885] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:06,954] INFO spindle_dev.index: Finished block 25 in 0.07 seconds, found 3 clusters. [2026-01-20 13:08:06,955] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:07,015] INFO spindle_dev.index: Finished block 26 in 0.06 seconds, found 2 clusters. [2026-01-20 13:08:07,015] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:07,119] INFO spindle_dev.index: Finished block 27 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:07,119] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:07,203] INFO spindle_dev.index: Finished block 28 in 0.08 seconds, found 3 clusters. [2026-01-20 13:08:07,204] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:07,256] INFO spindle_dev.index: Finished block 29 in 0.05 seconds, found 2 clusters. [2026-01-20 13:08:07,256] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:07,306] INFO spindle_dev.index: Finished block 30 in 0.05 seconds, found 2 clusters. [2026-01-20 13:08:07,307] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:07,349] INFO spindle_dev.index: Finished block 31 in 0.04 seconds, found 1 clusters. [2026-01-20 13:08:07,350] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:07,500] INFO spindle_dev.index: Finished block 32 in 0.15 seconds, found 3 clusters. [2026-01-20 13:08:07,501] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:07,682] INFO spindle_dev.index: Finished block 33 in 0.18 seconds, found 4 clusters. [2026-01-20 13:08:07,682] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:07,761] INFO spindle_dev.index: Finished block 34 in 0.08 seconds, found 5 clusters. [2026-01-20 13:08:07,762] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:07,842] INFO spindle_dev.index: Finished block 35 in 0.08 seconds, found 6 clusters. [2026-01-20 13:08:07,842] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 13:08:07,915] INFO spindle_dev.index: Finished block 36 in 0.07 seconds, found 5 clusters. [2026-01-20 13:08:07,915] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 13:08:07,973] INFO spindle_dev.index: Finished block 37 in 0.06 seconds, found 3 clusters. [2026-01-20 13:08:07,973] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:07,974] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:07,974] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:07,975] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:07,975] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:07,994] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:07,994] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:07,995] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 13:08:07,995] INFO spindle_dev.index: Building SPD index with epsilon=7.8265651514955294 [2026-01-20 13:08:07,996] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:08:08,128] INFO spindle_dev.index: Cluster 2: 460 SPDs, 40 blocks [2026-01-20 13:08:08,129] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:08,160] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 13:08:08,161] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:08,187] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 1 clusters. [2026-01-20 13:08:08,188] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:08,220] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:08,221] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:08,253] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:08,253] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:08,290] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:08,291] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:08,323] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:08,324] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:08,367] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 4 clusters. [2026-01-20 13:08:08,368] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:08,402] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:08,402] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:08,435] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:08,436] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:08,477] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:08,478] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:08,512] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:08,512] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:08,547] INFO spindle_dev.index: Finished block 11 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:08,548] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:08,587] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:08,588] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:08,641] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:08,642] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:08,676] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:08,676] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:08,728] INFO spindle_dev.index: Finished block 15 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:08,729] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:08,780] INFO spindle_dev.index: Finished block 16 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:08,781] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:08,822] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:08,823] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:08,877] INFO spindle_dev.index: Finished block 18 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:08,877] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:08,913] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:08,914] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:08,971] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 5 clusters. [2026-01-20 13:08:08,972] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:09,019] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:09,020] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:09,071] INFO spindle_dev.index: Finished block 22 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:09,071] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:09,124] INFO spindle_dev.index: Finished block 23 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:09,124] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:09,172] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:09,172] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:09,214] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:09,214] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:09,262] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:09,262] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:09,311] INFO spindle_dev.index: Finished block 27 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:09,312] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:09,361] INFO spindle_dev.index: Finished block 28 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:09,361] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:09,409] INFO spindle_dev.index: Finished block 29 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:09,409] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:09,451] INFO spindle_dev.index: Finished block 30 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:09,452] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:09,494] INFO spindle_dev.index: Finished block 31 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:09,495] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:09,533] INFO spindle_dev.index: Finished block 32 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:09,533] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:09,579] INFO spindle_dev.index: Finished block 33 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:09,579] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:09,627] INFO spindle_dev.index: Finished block 34 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:09,627] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:09,664] INFO spindle_dev.index: Finished block 35 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:09,665] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 13:08:09,715] INFO spindle_dev.index: Finished block 36 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:09,715] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 13:08:09,753] INFO spindle_dev.index: Finished block 37 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:09,754] INFO spindle_dev.index: Using epsilon-net clustering for block 38 [2026-01-20 13:08:09,924] INFO spindle_dev.index: Finished block 38 in 0.17 seconds, found 12 clusters. [2026-01-20 13:08:09,925] INFO spindle_dev.index: Using epsilon-net clustering for block 39 [2026-01-20 13:08:09,992] INFO spindle_dev.index: Finished block 39 in 0.07 seconds, found 4 clusters. [2026-01-20 13:08:09,993] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:09,993] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:09,994] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:09,994] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:09,995] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:10,009] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:10,010] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:10,010] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 13:08:10,011] INFO spindle_dev.index: Building SPD index with epsilon=5.784851314109413 [2026-01-20 13:08:10,011] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:08:10,051] INFO spindle_dev.index: Cluster 3: 325 SPDs, 36 blocks [2026-01-20 13:08:10,052] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:10,076] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 2 clusters. [2026-01-20 13:08:10,076] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:10,119] INFO spindle_dev.index: Finished block 1 in 0.04 seconds, found 7 clusters. [2026-01-20 13:08:10,119] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:10,165] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 8 clusters. [2026-01-20 13:08:10,165] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:10,227] INFO spindle_dev.index: Finished block 3 in 0.06 seconds, found 12 clusters. [2026-01-20 13:08:10,228] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:10,284] INFO spindle_dev.index: Finished block 4 in 0.06 seconds, found 10 clusters. [2026-01-20 13:08:10,284] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:10,344] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 11 clusters. [2026-01-20 13:08:10,344] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:10,411] INFO spindle_dev.index: Finished block 6 in 0.07 seconds, found 13 clusters. [2026-01-20 13:08:10,411] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:10,489] INFO spindle_dev.index: Finished block 7 in 0.08 seconds, found 16 clusters. [2026-01-20 13:08:10,490] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:10,582] INFO spindle_dev.index: Finished block 8 in 0.09 seconds, found 19 clusters. [2026-01-20 13:08:10,583] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:10,658] INFO spindle_dev.index: Finished block 9 in 0.07 seconds, found 15 clusters. [2026-01-20 13:08:10,658] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:10,745] INFO spindle_dev.index: Finished block 10 in 0.09 seconds, found 18 clusters. [2026-01-20 13:08:10,745] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:10,824] INFO spindle_dev.index: Finished block 11 in 0.08 seconds, found 16 clusters. [2026-01-20 13:08:10,825] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:10,904] INFO spindle_dev.index: Finished block 12 in 0.08 seconds, found 16 clusters. [2026-01-20 13:08:10,905] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:10,995] INFO spindle_dev.index: Finished block 13 in 0.09 seconds, found 19 clusters. [2026-01-20 13:08:10,995] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:11,066] INFO spindle_dev.index: Finished block 14 in 0.07 seconds, found 14 clusters. [2026-01-20 13:08:11,067] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:11,153] INFO spindle_dev.index: Finished block 15 in 0.09 seconds, found 18 clusters. [2026-01-20 13:08:11,154] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:11,247] INFO spindle_dev.index: Finished block 16 in 0.09 seconds, found 17 clusters. [2026-01-20 13:08:11,248] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:11,327] INFO spindle_dev.index: Finished block 17 in 0.08 seconds, found 16 clusters. [2026-01-20 13:08:11,328] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:11,415] INFO spindle_dev.index: Finished block 18 in 0.09 seconds, found 18 clusters. [2026-01-20 13:08:11,415] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:11,502] INFO spindle_dev.index: Finished block 19 in 0.09 seconds, found 17 clusters. [2026-01-20 13:08:11,502] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:11,559] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 10 clusters. [2026-01-20 13:08:11,560] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:11,601] INFO spindle_dev.index: Finished block 21 in 0.04 seconds, found 6 clusters. [2026-01-20 13:08:11,602] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:11,635] INFO spindle_dev.index: Finished block 22 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:11,635] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:11,679] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:11,680] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:11,713] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:11,714] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:11,760] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 2 clusters. [2026-01-20 13:08:11,761] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:11,808] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:11,808] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:11,838] INFO spindle_dev.index: Finished block 27 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:11,839] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:11,870] INFO spindle_dev.index: Finished block 28 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:11,870] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:11,900] INFO spindle_dev.index: Finished block 29 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:11,901] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:11,931] INFO spindle_dev.index: Finished block 30 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:11,932] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:11,955] INFO spindle_dev.index: Finished block 31 in 0.02 seconds, found 1 clusters. [2026-01-20 13:08:11,955] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:11,978] INFO spindle_dev.index: Finished block 32 in 0.02 seconds, found 1 clusters. [2026-01-20 13:08:11,978] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:12,000] INFO spindle_dev.index: Finished block 33 in 0.02 seconds, found 1 clusters. [2026-01-20 13:08:12,001] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:12,124] INFO spindle_dev.index: Finished block 34 in 0.12 seconds, found 2 clusters. [2026-01-20 13:08:12,124] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:12,182] INFO spindle_dev.index: Finished block 35 in 0.06 seconds, found 1 clusters. [2026-01-20 13:08:12,183] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:12,183] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:12,184] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:12,184] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:12,184] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:12,195] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:12,195] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:12,197] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 13:08:12,197] INFO spindle_dev.index: Building SPD index with epsilon=6.8219186476740195 [2026-01-20 13:08:12,198] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:08:12,379] INFO spindle_dev.index: Cluster 0: 932 SPDs, 40 blocks [2026-01-20 13:08:12,380] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:12,431] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 1 clusters. [2026-01-20 13:08:12,431] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:12,499] INFO spindle_dev.index: Finished block 1 in 0.07 seconds, found 2 clusters. [2026-01-20 13:08:12,499] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:12,575] INFO spindle_dev.index: Finished block 2 in 0.08 seconds, found 3 clusters. [2026-01-20 13:08:12,576] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:12,662] INFO spindle_dev.index: Finished block 3 in 0.09 seconds, found 4 clusters. [2026-01-20 13:08:12,663] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:12,749] INFO spindle_dev.index: Finished block 4 in 0.09 seconds, found 4 clusters. [2026-01-20 13:08:12,750] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:12,861] INFO spindle_dev.index: Finished block 5 in 0.11 seconds, found 6 clusters. [2026-01-20 13:08:12,862] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:12,959] INFO spindle_dev.index: Finished block 6 in 0.10 seconds, found 5 clusters. [2026-01-20 13:08:12,960] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:13,049] INFO spindle_dev.index: Finished block 7 in 0.09 seconds, found 4 clusters. [2026-01-20 13:08:13,050] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:13,176] INFO spindle_dev.index: Finished block 8 in 0.13 seconds, found 7 clusters. [2026-01-20 13:08:13,176] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:13,310] INFO spindle_dev.index: Finished block 9 in 0.13 seconds, found 7 clusters. [2026-01-20 13:08:13,311] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:13,437] INFO spindle_dev.index: Finished block 10 in 0.13 seconds, found 7 clusters. [2026-01-20 13:08:13,437] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:13,563] INFO spindle_dev.index: Finished block 11 in 0.13 seconds, found 7 clusters. [2026-01-20 13:08:13,563] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:13,713] INFO spindle_dev.index: Finished block 12 in 0.15 seconds, found 9 clusters. [2026-01-20 13:08:13,713] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:13,865] INFO spindle_dev.index: Finished block 13 in 0.15 seconds, found 9 clusters. [2026-01-20 13:08:13,866] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:14,027] INFO spindle_dev.index: Finished block 14 in 0.16 seconds, found 8 clusters. [2026-01-20 13:08:14,027] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:14,166] INFO spindle_dev.index: Finished block 15 in 0.14 seconds, found 8 clusters. [2026-01-20 13:08:14,167] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:14,285] INFO spindle_dev.index: Finished block 16 in 0.12 seconds, found 6 clusters. [2026-01-20 13:08:14,285] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:14,444] INFO spindle_dev.index: Finished block 17 in 0.16 seconds, found 10 clusters. [2026-01-20 13:08:14,445] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:14,584] INFO spindle_dev.index: Finished block 18 in 0.14 seconds, found 8 clusters. [2026-01-20 13:08:14,585] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:14,728] INFO spindle_dev.index: Finished block 19 in 0.14 seconds, found 8 clusters. [2026-01-20 13:08:14,729] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:14,903] INFO spindle_dev.index: Finished block 20 in 0.17 seconds, found 11 clusters. [2026-01-20 13:08:14,904] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:15,011] INFO spindle_dev.index: Finished block 21 in 0.11 seconds, found 5 clusters. [2026-01-20 13:08:15,012] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:15,118] INFO spindle_dev.index: Finished block 22 in 0.11 seconds, found 5 clusters. [2026-01-20 13:08:15,119] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:15,217] INFO spindle_dev.index: Finished block 23 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:15,218] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:15,360] INFO spindle_dev.index: Finished block 24 in 0.14 seconds, found 5 clusters. [2026-01-20 13:08:15,361] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:15,447] INFO spindle_dev.index: Finished block 25 in 0.09 seconds, found 3 clusters. [2026-01-20 13:08:15,447] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:15,555] INFO spindle_dev.index: Finished block 26 in 0.11 seconds, found 4 clusters. [2026-01-20 13:08:15,555] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:15,663] INFO spindle_dev.index: Finished block 27 in 0.11 seconds, found 4 clusters. [2026-01-20 13:08:15,664] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:15,784] INFO spindle_dev.index: Finished block 28 in 0.12 seconds, found 6 clusters. [2026-01-20 13:08:15,785] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:15,882] INFO spindle_dev.index: Finished block 29 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:15,883] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:15,958] INFO spindle_dev.index: Finished block 30 in 0.08 seconds, found 2 clusters. [2026-01-20 13:08:15,958] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:16,079] INFO spindle_dev.index: Finished block 31 in 0.12 seconds, found 6 clusters. [2026-01-20 13:08:16,079] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:16,174] INFO spindle_dev.index: Finished block 32 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:16,175] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:16,286] INFO spindle_dev.index: Finished block 33 in 0.11 seconds, found 4 clusters. [2026-01-20 13:08:16,286] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:16,384] INFO spindle_dev.index: Finished block 34 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:16,384] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:16,459] INFO spindle_dev.index: Finished block 35 in 0.08 seconds, found 2 clusters. [2026-01-20 13:08:16,460] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 13:08:16,523] INFO spindle_dev.index: Finished block 36 in 0.06 seconds, found 1 clusters. [2026-01-20 13:08:16,524] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 13:08:16,612] INFO spindle_dev.index: Finished block 37 in 0.09 seconds, found 3 clusters. [2026-01-20 13:08:16,613] INFO spindle_dev.index: Using epsilon-net clustering for block 38 [2026-01-20 13:08:16,688] INFO spindle_dev.index: Finished block 38 in 0.07 seconds, found 2 clusters. [2026-01-20 13:08:16,688] INFO spindle_dev.index: Using epsilon-net clustering for block 39 [2026-01-20 13:08:17,134] INFO spindle_dev.index: Finished block 39 in 0.45 seconds, found 9 clusters. [2026-01-20 13:08:17,135] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:17,135] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:17,136] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:17,136] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:17,136] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:17,163] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:17,164] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:17,165] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 13:08:17,165] INFO spindle_dev.index: Building SPD index with epsilon=6.7084806261957945 [2026-01-20 13:08:17,165] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:08:17,240] INFO spindle_dev.index: Cluster 1: 634 SPDs, 38 blocks [2026-01-20 13:08:17,242] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:17,288] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 1 clusters. [2026-01-20 13:08:17,289] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:17,349] INFO spindle_dev.index: Finished block 1 in 0.06 seconds, found 4 clusters. [2026-01-20 13:08:17,349] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:17,400] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:17,401] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:17,466] INFO spindle_dev.index: Finished block 3 in 0.07 seconds, found 5 clusters. [2026-01-20 13:08:17,467] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:17,534] INFO spindle_dev.index: Finished block 4 in 0.07 seconds, found 5 clusters. [2026-01-20 13:08:17,535] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:17,612] INFO spindle_dev.index: Finished block 5 in 0.08 seconds, found 6 clusters. [2026-01-20 13:08:17,612] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:17,690] INFO spindle_dev.index: Finished block 6 in 0.08 seconds, found 6 clusters. [2026-01-20 13:08:17,690] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:17,768] INFO spindle_dev.index: Finished block 7 in 0.08 seconds, found 6 clusters. [2026-01-20 13:08:17,768] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:17,862] INFO spindle_dev.index: Finished block 8 in 0.09 seconds, found 8 clusters. [2026-01-20 13:08:17,862] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:17,967] INFO spindle_dev.index: Finished block 9 in 0.10 seconds, found 9 clusters. [2026-01-20 13:08:17,967] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:18,074] INFO spindle_dev.index: Finished block 10 in 0.11 seconds, found 9 clusters. [2026-01-20 13:08:18,075] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:18,167] INFO spindle_dev.index: Finished block 11 in 0.09 seconds, found 7 clusters. [2026-01-20 13:08:18,167] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:18,288] INFO spindle_dev.index: Finished block 12 in 0.12 seconds, found 11 clusters. [2026-01-20 13:08:18,289] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:18,400] INFO spindle_dev.index: Finished block 13 in 0.11 seconds, found 10 clusters. [2026-01-20 13:08:18,401] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:18,512] INFO spindle_dev.index: Finished block 14 in 0.11 seconds, found 10 clusters. [2026-01-20 13:08:18,512] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:18,632] INFO spindle_dev.index: Finished block 15 in 0.12 seconds, found 11 clusters. [2026-01-20 13:08:18,633] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:18,738] INFO spindle_dev.index: Finished block 16 in 0.10 seconds, found 9 clusters. [2026-01-20 13:08:18,738] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:18,864] INFO spindle_dev.index: Finished block 17 in 0.13 seconds, found 11 clusters. [2026-01-20 13:08:18,865] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:18,965] INFO spindle_dev.index: Finished block 18 in 0.10 seconds, found 8 clusters. [2026-01-20 13:08:18,966] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:19,077] INFO spindle_dev.index: Finished block 19 in 0.11 seconds, found 10 clusters. [2026-01-20 13:08:19,078] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:19,173] INFO spindle_dev.index: Finished block 20 in 0.10 seconds, found 8 clusters. [2026-01-20 13:08:19,174] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:19,265] INFO spindle_dev.index: Finished block 21 in 0.09 seconds, found 7 clusters. [2026-01-20 13:08:19,266] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:19,369] INFO spindle_dev.index: Finished block 22 in 0.10 seconds, found 8 clusters. [2026-01-20 13:08:19,370] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:19,444] INFO spindle_dev.index: Finished block 23 in 0.07 seconds, found 5 clusters. [2026-01-20 13:08:19,445] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:19,517] INFO spindle_dev.index: Finished block 24 in 0.07 seconds, found 3 clusters. [2026-01-20 13:08:19,518] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:19,593] INFO spindle_dev.index: Finished block 25 in 0.08 seconds, found 3 clusters. [2026-01-20 13:08:19,594] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:19,648] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 2 clusters. [2026-01-20 13:08:19,649] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:19,754] INFO spindle_dev.index: Finished block 27 in 0.10 seconds, found 4 clusters. [2026-01-20 13:08:19,754] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:19,838] INFO spindle_dev.index: Finished block 28 in 0.08 seconds, found 3 clusters. [2026-01-20 13:08:19,839] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:19,891] INFO spindle_dev.index: Finished block 29 in 0.05 seconds, found 2 clusters. [2026-01-20 13:08:19,892] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:19,943] INFO spindle_dev.index: Finished block 30 in 0.05 seconds, found 2 clusters. [2026-01-20 13:08:19,944] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:19,987] INFO spindle_dev.index: Finished block 31 in 0.04 seconds, found 1 clusters. [2026-01-20 13:08:19,987] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:20,140] INFO spindle_dev.index: Finished block 32 in 0.15 seconds, found 3 clusters. [2026-01-20 13:08:20,140] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:20,329] INFO spindle_dev.index: Finished block 33 in 0.19 seconds, found 4 clusters. [2026-01-20 13:08:20,330] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:20,415] INFO spindle_dev.index: Finished block 34 in 0.08 seconds, found 5 clusters. [2026-01-20 13:08:20,416] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:20,501] INFO spindle_dev.index: Finished block 35 in 0.09 seconds, found 6 clusters. [2026-01-20 13:08:20,502] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 13:08:20,577] INFO spindle_dev.index: Finished block 36 in 0.08 seconds, found 5 clusters. [2026-01-20 13:08:20,578] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 13:08:20,638] INFO spindle_dev.index: Finished block 37 in 0.06 seconds, found 3 clusters. [2026-01-20 13:08:20,638] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:20,639] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:20,639] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:20,640] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:20,640] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:20,659] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:20,659] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:20,660] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 13:08:20,660] INFO spindle_dev.index: Building SPD index with epsilon=7.8265651514955294 [2026-01-20 13:08:20,661] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:08:20,713] INFO spindle_dev.index: Cluster 2: 460 SPDs, 40 blocks [2026-01-20 13:08:20,714] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:20,746] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 1 clusters. [2026-01-20 13:08:20,746] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:20,772] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 1 clusters. [2026-01-20 13:08:20,773] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:20,806] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:20,806] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:20,840] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:20,841] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:20,879] INFO spindle_dev.index: Finished block 4 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:20,880] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:20,912] INFO spindle_dev.index: Finished block 5 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:20,912] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:20,958] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:20,959] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:20,993] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:20,994] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:21,028] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:21,029] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:21,071] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:21,072] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:21,108] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:21,109] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:21,146] INFO spindle_dev.index: Finished block 11 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:21,147] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:21,190] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:21,190] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:21,248] INFO spindle_dev.index: Finished block 13 in 0.06 seconds, found 4 clusters. [2026-01-20 13:08:21,248] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:21,285] INFO spindle_dev.index: Finished block 14 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:21,286] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:21,344] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 5 clusters. [2026-01-20 13:08:21,345] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:21,398] INFO spindle_dev.index: Finished block 16 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:21,398] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:21,440] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:21,440] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:21,495] INFO spindle_dev.index: Finished block 18 in 0.06 seconds, found 5 clusters. [2026-01-20 13:08:21,496] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:21,532] INFO spindle_dev.index: Finished block 19 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:21,533] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:21,591] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 5 clusters. [2026-01-20 13:08:21,592] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:21,641] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:21,642] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:21,685] INFO spindle_dev.index: Finished block 22 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:21,685] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:21,740] INFO spindle_dev.index: Finished block 23 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:21,741] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:21,791] INFO spindle_dev.index: Finished block 24 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:21,791] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:21,836] INFO spindle_dev.index: Finished block 25 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:21,837] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:21,889] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:21,890] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:21,943] INFO spindle_dev.index: Finished block 27 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:21,944] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:21,996] INFO spindle_dev.index: Finished block 28 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:21,997] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:22,048] INFO spindle_dev.index: Finished block 29 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:22,049] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:22,094] INFO spindle_dev.index: Finished block 30 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:22,095] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:22,139] INFO spindle_dev.index: Finished block 31 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:22,139] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:22,179] INFO spindle_dev.index: Finished block 32 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:22,180] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:22,226] INFO spindle_dev.index: Finished block 33 in 0.05 seconds, found 3 clusters. [2026-01-20 13:08:22,227] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:22,276] INFO spindle_dev.index: Finished block 34 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:22,277] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:22,315] INFO spindle_dev.index: Finished block 35 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:22,316] INFO spindle_dev.index: Using epsilon-net clustering for block 36 [2026-01-20 13:08:22,366] INFO spindle_dev.index: Finished block 36 in 0.05 seconds, found 4 clusters. [2026-01-20 13:08:22,367] INFO spindle_dev.index: Using epsilon-net clustering for block 37 [2026-01-20 13:08:22,407] INFO spindle_dev.index: Finished block 37 in 0.04 seconds, found 2 clusters. [2026-01-20 13:08:22,407] INFO spindle_dev.index: Using epsilon-net clustering for block 38 [2026-01-20 13:08:22,583] INFO spindle_dev.index: Finished block 38 in 0.18 seconds, found 12 clusters. [2026-01-20 13:08:22,584] INFO spindle_dev.index: Using epsilon-net clustering for block 39 [2026-01-20 13:08:22,655] INFO spindle_dev.index: Finished block 39 in 0.07 seconds, found 4 clusters. [2026-01-20 13:08:22,656] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:22,657] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:22,657] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:22,658] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:22,658] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:22,673] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:22,673] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:22,674] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 13:08:22,675] INFO spindle_dev.index: Building SPD index with epsilon=5.784851314109413 [2026-01-20 13:08:22,675] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:08:22,723] INFO spindle_dev.index: Cluster 3: 325 SPDs, 36 blocks [2026-01-20 13:08:22,724] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:08:22,750] INFO spindle_dev.index: Finished block 0 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:22,750] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:08:22,796] INFO spindle_dev.index: Finished block 1 in 0.05 seconds, found 7 clusters. [2026-01-20 13:08:22,796] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:08:22,845] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 8 clusters. [2026-01-20 13:08:22,845] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:08:22,909] INFO spindle_dev.index: Finished block 3 in 0.06 seconds, found 12 clusters. [2026-01-20 13:08:22,909] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:08:22,967] INFO spindle_dev.index: Finished block 4 in 0.06 seconds, found 10 clusters. [2026-01-20 13:08:22,968] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:08:23,028] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 11 clusters. [2026-01-20 13:08:23,029] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:08:23,098] INFO spindle_dev.index: Finished block 6 in 0.07 seconds, found 13 clusters. [2026-01-20 13:08:23,098] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:08:23,179] INFO spindle_dev.index: Finished block 7 in 0.08 seconds, found 16 clusters. [2026-01-20 13:08:23,180] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:08:23,275] INFO spindle_dev.index: Finished block 8 in 0.10 seconds, found 19 clusters. [2026-01-20 13:08:23,276] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:08:23,362] INFO spindle_dev.index: Finished block 9 in 0.09 seconds, found 15 clusters. [2026-01-20 13:08:23,362] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:08:23,457] INFO spindle_dev.index: Finished block 10 in 0.09 seconds, found 18 clusters. [2026-01-20 13:08:23,457] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:08:23,542] INFO spindle_dev.index: Finished block 11 in 0.09 seconds, found 16 clusters. [2026-01-20 13:08:23,543] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:08:23,625] INFO spindle_dev.index: Finished block 12 in 0.08 seconds, found 16 clusters. [2026-01-20 13:08:23,625] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:08:23,718] INFO spindle_dev.index: Finished block 13 in 0.09 seconds, found 19 clusters. [2026-01-20 13:08:23,718] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:08:23,792] INFO spindle_dev.index: Finished block 14 in 0.07 seconds, found 14 clusters. [2026-01-20 13:08:23,792] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:08:23,880] INFO spindle_dev.index: Finished block 15 in 0.09 seconds, found 18 clusters. [2026-01-20 13:08:23,881] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:08:23,965] INFO spindle_dev.index: Finished block 16 in 0.08 seconds, found 17 clusters. [2026-01-20 13:08:23,966] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:08:24,047] INFO spindle_dev.index: Finished block 17 in 0.08 seconds, found 16 clusters. [2026-01-20 13:08:24,048] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:08:24,138] INFO spindle_dev.index: Finished block 18 in 0.09 seconds, found 18 clusters. [2026-01-20 13:08:24,138] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:08:24,228] INFO spindle_dev.index: Finished block 19 in 0.09 seconds, found 17 clusters. [2026-01-20 13:08:24,229] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:08:24,289] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 10 clusters. [2026-01-20 13:08:24,290] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:08:24,332] INFO spindle_dev.index: Finished block 21 in 0.04 seconds, found 6 clusters. [2026-01-20 13:08:24,333] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:08:24,367] INFO spindle_dev.index: Finished block 22 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:24,368] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:08:24,412] INFO spindle_dev.index: Finished block 23 in 0.04 seconds, found 3 clusters. [2026-01-20 13:08:24,412] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:08:24,446] INFO spindle_dev.index: Finished block 24 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:24,446] INFO spindle_dev.index: Using epsilon-net clustering for block 25 [2026-01-20 13:08:24,495] INFO spindle_dev.index: Finished block 25 in 0.05 seconds, found 2 clusters. [2026-01-20 13:08:24,495] INFO spindle_dev.index: Using epsilon-net clustering for block 26 [2026-01-20 13:08:24,543] INFO spindle_dev.index: Finished block 26 in 0.05 seconds, found 5 clusters. [2026-01-20 13:08:24,544] INFO spindle_dev.index: Using epsilon-net clustering for block 27 [2026-01-20 13:08:24,575] INFO spindle_dev.index: Finished block 27 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:24,576] INFO spindle_dev.index: Using epsilon-net clustering for block 28 [2026-01-20 13:08:24,607] INFO spindle_dev.index: Finished block 28 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:24,608] INFO spindle_dev.index: Using epsilon-net clustering for block 29 [2026-01-20 13:08:24,638] INFO spindle_dev.index: Finished block 29 in 0.03 seconds, found 2 clusters. [2026-01-20 13:08:24,638] INFO spindle_dev.index: Using epsilon-net clustering for block 30 [2026-01-20 13:08:24,669] INFO spindle_dev.index: Finished block 30 in 0.03 seconds, found 3 clusters. [2026-01-20 13:08:24,670] INFO spindle_dev.index: Using epsilon-net clustering for block 31 [2026-01-20 13:08:24,693] INFO spindle_dev.index: Finished block 31 in 0.02 seconds, found 1 clusters. [2026-01-20 13:08:24,693] INFO spindle_dev.index: Using epsilon-net clustering for block 32 [2026-01-20 13:08:24,717] INFO spindle_dev.index: Finished block 32 in 0.02 seconds, found 1 clusters. [2026-01-20 13:08:24,717] INFO spindle_dev.index: Using epsilon-net clustering for block 33 [2026-01-20 13:08:24,740] INFO spindle_dev.index: Finished block 33 in 0.02 seconds, found 1 clusters. [2026-01-20 13:08:24,740] INFO spindle_dev.index: Using epsilon-net clustering for block 34 [2026-01-20 13:08:24,865] INFO spindle_dev.index: Finished block 34 in 0.12 seconds, found 2 clusters. [2026-01-20 13:08:24,866] INFO spindle_dev.index: Using epsilon-net clustering for block 35 [2026-01-20 13:08:24,926] INFO spindle_dev.index: Finished block 35 in 0.06 seconds, found 1 clusters. [2026-01-20 13:08:24,927] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:08:24,928] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:08:24,928] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:08:24,928] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:08:24,929] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:08:24,940] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:08:24,941] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:08:26,654] INFO spindle_dev.test: Built ground-truth paths for 932 SPDs in cluster 0 across 40 blocks. [2026-01-20 13:08:27,350] INFO spindle_dev.test: Built ground-truth paths for 634 SPDs in cluster 1 across 38 blocks. [2026-01-20 13:08:27,761] INFO spindle_dev.test: Built ground-truth paths for 460 SPDs in cluster 2 across 40 blocks. [2026-01-20 13:08:27,974] INFO spindle_dev.test: Built ground-truth paths for 325 SPDs in cluster 3 across 36 blocks.
Done with search xenium_human_breast_cancer
[2026-01-20 13:08:34,255] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 13:08:34,257] INFO spindle_dev.index: Building ultrametric features from SPD matrices. [2026-01-20 13:09:37,705] INFO spindle_dev.index: Computing latent features from the tree representations. [2026-01-20 13:09:38,451] INFO spindle_dev.index: Reducing latent features to 30 dimensions using PCA. [2026-01-20 13:09:49,992] INFO spindle_dev.index: Explained variance ratios by PCA components: [0.08423994 0.05705022 0.02586921 0.01825469 0.01257789 0.00976704 0.00760607 0.00706846 0.00636611 0.00628477 0.00481051 0.00461066 0.00410269 0.00399039 0.00367698 0.00352124 0.00345466 0.0033279 0.00319359 0.00302569 0.00300604 0.0029441 0.00289233 0.00285734 0.00284254 0.00280568 0.00273195 0.00266459 0.00263317 0.00257663] [2026-01-20 13:09:49,994] INFO spindle_dev.index: Reducing latent features to 2 dimensions using UMAP. /panfs/accrepfs.vampire/home/sarkah1/miniforge3/envs/spatial/lib/python3.10/site-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism. warn( [2026-01-20 13:09:55,782] INFO spindle_dev.index: Clustering SPD-s using 'tree' distance. [2026-01-20 13:09:55,783] INFO spindle_dev.index: Clustering SPD matrices using Leiden clustering with resolution 0.50. [2026-01-20 13:09:56,033] INFO spindle_dev.index: Since clustering method is tree, I am going to find global order per cluster [2026-01-20 13:09:56,034] INFO spindle_dev.index: Finding consensus tree for cluster 0 [2026-01-20 13:09:56,171] INFO spindle_dev.index: Finding consensus tree for cluster 1 [2026-01-20 13:09:56,304] INFO spindle_dev.index: Finding consensus tree for cluster 2 [2026-01-20 13:09:56,421] INFO spindle_dev.index: Finding consensus tree for cluster 3 [2026-01-20 13:09:56,499] INFO spindle_dev.index: Finding consensus tree for cluster 4 [2026-01-20 13:09:56,537] INFO spindle_dev.index: Finding consensus tree for cluster 5 [2026-01-20 13:09:56,977] INFO spindle_dev.index: Computing mean correlation matrix for cluster 0 [2026-01-20 13:10:41,622] INFO spindle_dev.index: Computing mean correlation matrix for cluster 1 [2026-01-20 13:10:56,704] INFO spindle_dev.index: Computing mean correlation matrix for cluster 2 [2026-01-20 13:11:02,215] INFO spindle_dev.index: Computing mean correlation matrix for cluster 3 [2026-01-20 13:11:02,969] INFO spindle_dev.index: Computing mean correlation matrix for cluster 4 [2026-01-20 13:11:03,386] INFO spindle_dev.index: Computing mean correlation matrix for cluster 5 [2026-01-20 13:11:03,562] INFO spindle_dev.index: Finding adaptive block runs for cluster 0 [2026-01-20 13:11:04,074] INFO spindle_dev.index: Chose t=0.7633192389079517 resulting in 201 blocks instead of 61 blocks would have gotten by default [2026-01-20 13:11:04,129] INFO spindle_dev.index: Final block runs for cluster 0: 22 blocks. [2026-01-20 13:11:04,130] INFO spindle_dev.index: Finding adaptive block runs for cluster 1 [2026-01-20 13:11:04,593] INFO spindle_dev.index: Chose t=0.7607017560319018 resulting in 190 blocks instead of 40 blocks would have gotten by default [2026-01-20 13:11:04,642] INFO spindle_dev.index: Final block runs for cluster 1: 22 blocks. [2026-01-20 13:11:04,643] INFO spindle_dev.index: Finding adaptive block runs for cluster 2 [2026-01-20 13:11:05,118] INFO spindle_dev.index: Chose t=0.8321018670322848 resulting in 166 blocks instead of 31 blocks would have gotten by default [2026-01-20 13:11:05,157] INFO spindle_dev.index: Final block runs for cluster 2: 23 blocks. [2026-01-20 13:11:05,158] INFO spindle_dev.index: Finding adaptive block runs for cluster 3 [2026-01-20 13:11:05,636] INFO spindle_dev.index: Chose t=0.797225986946651 resulting in 225 blocks instead of 95 blocks would have gotten by default [2026-01-20 13:11:05,706] INFO spindle_dev.index: Final block runs for cluster 3: 24 blocks. [2026-01-20 13:11:05,707] INFO spindle_dev.index: Finding adaptive block runs for cluster 4 [2026-01-20 13:11:06,173] INFO spindle_dev.index: Chose t=0.8919052951715427 resulting in 124 blocks instead of 63 blocks would have gotten by default [2026-01-20 13:11:06,196] INFO spindle_dev.index: Final block runs for cluster 4: 19 blocks. [2026-01-20 13:11:06,197] INFO spindle_dev.index: Finding adaptive block runs for cluster 5 [2026-01-20 13:11:06,656] INFO spindle_dev.index: Chose t=0.9507238858598659 resulting in 198 blocks instead of 274 blocks would have gotten by default [2026-01-20 13:11:06,712] INFO spindle_dev.index: Final block runs for cluster 5: 25 blocks. [2026-01-20 13:11:15,586] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 13:11:15,589] INFO spindle_dev.index: Building SPD index with epsilon=7.293585178311536 [2026-01-20 13:11:15,589] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:15,637] INFO spindle_dev.index: Cluster 0: 760 SPDs, 22 blocks [2026-01-20 13:11:15,638] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:15,697] INFO spindle_dev.index: Finished block 0 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:15,698] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:15,800] INFO spindle_dev.index: Finished block 1 in 0.10 seconds, found 7 clusters. [2026-01-20 13:11:15,800] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:15,883] INFO spindle_dev.index: Finished block 2 in 0.08 seconds, found 5 clusters. [2026-01-20 13:11:15,884] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:15,993] INFO spindle_dev.index: Finished block 3 in 0.11 seconds, found 8 clusters. [2026-01-20 13:11:15,994] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:16,089] INFO spindle_dev.index: Finished block 4 in 0.10 seconds, found 6 clusters. [2026-01-20 13:11:16,090] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:16,178] INFO spindle_dev.index: Finished block 5 in 0.09 seconds, found 5 clusters. [2026-01-20 13:11:16,179] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:16,265] INFO spindle_dev.index: Finished block 6 in 0.09 seconds, found 5 clusters. [2026-01-20 13:11:16,266] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:16,324] INFO spindle_dev.index: Finished block 7 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:16,325] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:16,402] INFO spindle_dev.index: Finished block 8 in 0.08 seconds, found 2 clusters. [2026-01-20 13:11:16,402] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:16,504] INFO spindle_dev.index: Finished block 9 in 0.10 seconds, found 3 clusters. [2026-01-20 13:11:16,504] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:16,592] INFO spindle_dev.index: Finished block 10 in 0.09 seconds, found 3 clusters. [2026-01-20 13:11:16,593] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:16,671] INFO spindle_dev.index: Finished block 11 in 0.08 seconds, found 4 clusters. [2026-01-20 13:11:16,672] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:16,733] INFO spindle_dev.index: Finished block 12 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:16,733] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:16,785] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:16,785] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:16,838] INFO spindle_dev.index: Finished block 14 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:16,838] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:16,900] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:16,900] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:16,970] INFO spindle_dev.index: Finished block 16 in 0.07 seconds, found 2 clusters. [2026-01-20 13:11:16,971] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:17,305] INFO spindle_dev.index: Finished block 17 in 0.33 seconds, found 7 clusters. [2026-01-20 13:11:17,306] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:17,396] INFO spindle_dev.index: Finished block 18 in 0.09 seconds, found 2 clusters. [2026-01-20 13:11:17,397] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:17,500] INFO spindle_dev.index: Finished block 19 in 0.10 seconds, found 4 clusters. [2026-01-20 13:11:17,500] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:17,568] INFO spindle_dev.index: Finished block 20 in 0.07 seconds, found 1 clusters. [2026-01-20 13:11:17,569] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:17,620] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:17,621] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:17,621] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:17,622] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:17,622] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:17,622] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:17,637] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:17,638] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:17,638] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 13:11:17,639] INFO spindle_dev.index: Building SPD index with epsilon=6.4411489446707755 [2026-01-20 13:11:17,639] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:17,707] INFO spindle_dev.index: Cluster 1: 515 SPDs, 22 blocks [2026-01-20 13:11:17,708] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:17,793] INFO spindle_dev.index: Finished block 0 in 0.08 seconds, found 8 clusters. [2026-01-20 13:11:17,793] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:17,925] INFO spindle_dev.index: Finished block 1 in 0.13 seconds, found 16 clusters. [2026-01-20 13:11:17,926] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:18,052] INFO spindle_dev.index: Finished block 2 in 0.13 seconds, found 16 clusters. [2026-01-20 13:11:18,053] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:18,187] INFO spindle_dev.index: Finished block 3 in 0.13 seconds, found 17 clusters. [2026-01-20 13:11:18,188] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:18,276] INFO spindle_dev.index: Finished block 4 in 0.09 seconds, found 9 clusters. [2026-01-20 13:11:18,276] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:18,335] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 5 clusters. [2026-01-20 13:11:18,336] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:18,399] INFO spindle_dev.index: Finished block 6 in 0.06 seconds, found 4 clusters. [2026-01-20 13:11:18,400] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:18,448] INFO spindle_dev.index: Finished block 7 in 0.05 seconds, found 2 clusters. [2026-01-20 13:11:18,448] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:18,492] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:18,492] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:18,533] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:18,534] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:18,581] INFO spindle_dev.index: Finished block 10 in 0.05 seconds, found 2 clusters. [2026-01-20 13:11:18,581] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:18,631] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:18,631] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:18,670] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 1 clusters. [2026-01-20 13:11:18,671] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:18,709] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 1 clusters. [2026-01-20 13:11:18,709] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:18,744] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:18,745] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:18,780] INFO spindle_dev.index: Finished block 15 in 0.04 seconds, found 1 clusters. [2026-01-20 13:11:18,780] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:19,038] INFO spindle_dev.index: Finished block 16 in 0.26 seconds, found 12 clusters. [2026-01-20 13:11:19,039] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:19,109] INFO spindle_dev.index: Finished block 17 in 0.07 seconds, found 4 clusters. [2026-01-20 13:11:19,110] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:19,176] INFO spindle_dev.index: Finished block 18 in 0.07 seconds, found 6 clusters. [2026-01-20 13:11:19,177] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:19,269] INFO spindle_dev.index: Finished block 19 in 0.09 seconds, found 10 clusters. [2026-01-20 13:11:19,269] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:19,332] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 3 clusters. [2026-01-20 13:11:19,332] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:19,392] INFO spindle_dev.index: Finished block 21 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:19,393] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:19,393] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:19,394] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:19,394] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:19,394] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:19,405] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:19,405] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:19,406] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 13:11:19,406] INFO spindle_dev.index: Building SPD index with epsilon=7.1757370076675295 [2026-01-20 13:11:19,406] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:19,436] INFO spindle_dev.index: Cluster 2: 431 SPDs, 23 blocks [2026-01-20 13:11:19,438] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:19,489] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 5 clusters. [2026-01-20 13:11:19,489] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:19,559] INFO spindle_dev.index: Finished block 1 in 0.07 seconds, found 8 clusters. [2026-01-20 13:11:19,560] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:19,646] INFO spindle_dev.index: Finished block 2 in 0.09 seconds, found 11 clusters. [2026-01-20 13:11:19,647] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:19,720] INFO spindle_dev.index: Finished block 3 in 0.07 seconds, found 9 clusters. [2026-01-20 13:11:19,721] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:19,781] INFO spindle_dev.index: Finished block 4 in 0.06 seconds, found 7 clusters. [2026-01-20 13:11:19,782] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:19,838] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 6 clusters. [2026-01-20 13:11:19,839] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:19,885] INFO spindle_dev.index: Finished block 6 in 0.05 seconds, found 4 clusters. [2026-01-20 13:11:19,886] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:19,921] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 2 clusters. [2026-01-20 13:11:19,921] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:19,967] INFO spindle_dev.index: Finished block 8 in 0.05 seconds, found 4 clusters. [2026-01-20 13:11:19,968] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:20,011] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 3 clusters. [2026-01-20 13:11:20,012] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:20,042] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:20,042] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:20,152] INFO spindle_dev.index: Finished block 11 in 0.11 seconds, found 6 clusters. [2026-01-20 13:11:20,153] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:20,201] INFO spindle_dev.index: Finished block 12 in 0.05 seconds, found 2 clusters. [2026-01-20 13:11:20,202] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:20,245] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 13:11:20,246] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:20,326] INFO spindle_dev.index: Finished block 14 in 0.08 seconds, found 4 clusters. [2026-01-20 13:11:20,327] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:20,385] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 6 clusters. [2026-01-20 13:11:20,386] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:20,422] INFO spindle_dev.index: Finished block 16 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:20,422] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:20,469] INFO spindle_dev.index: Finished block 17 in 0.05 seconds, found 2 clusters. [2026-01-20 13:11:20,469] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:20,500] INFO spindle_dev.index: Finished block 18 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:20,500] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:20,531] INFO spindle_dev.index: Finished block 19 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:20,531] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:20,561] INFO spindle_dev.index: Finished block 20 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:20,561] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:20,616] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 3 clusters. [2026-01-20 13:11:20,616] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:11:20,788] INFO spindle_dev.index: Finished block 22 in 0.17 seconds, found 16 clusters. [2026-01-20 13:11:20,789] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:20,789] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:20,790] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:20,790] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:20,791] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:20,799] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:20,800] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:20,800] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 13:11:20,800] INFO spindle_dev.index: Building SPD index with epsilon=7.306294856673336 [2026-01-20 13:11:20,801] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:20,819] INFO spindle_dev.index: Cluster 3: 260 SPDs, 24 blocks [2026-01-20 13:11:20,820] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:20,840] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 2 clusters. [2026-01-20 13:11:20,840] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:20,866] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 4 clusters. [2026-01-20 13:11:20,866] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:20,893] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 4 clusters. [2026-01-20 13:11:20,893] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:20,927] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 6 clusters. [2026-01-20 13:11:20,927] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:20,959] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 6 clusters. [2026-01-20 13:11:20,960] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:20,999] INFO spindle_dev.index: Finished block 5 in 0.04 seconds, found 8 clusters. [2026-01-20 13:11:20,999] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:21,038] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 7 clusters. [2026-01-20 13:11:21,038] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:21,078] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 8 clusters. [2026-01-20 13:11:21,079] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:21,106] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 4 clusters. [2026-01-20 13:11:21,106] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:21,137] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 5 clusters. [2026-01-20 13:11:21,137] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:21,171] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 5 clusters. [2026-01-20 13:11:21,171] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:21,195] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:21,195] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:21,218] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:21,219] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:21,255] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:21,256] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:21,285] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 4 clusters. [2026-01-20 13:11:21,285] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:21,314] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 3 clusters. [2026-01-20 13:11:21,315] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:21,336] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 2 clusters. [2026-01-20 13:11:21,337] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:21,360] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:21,361] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:21,381] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 2 clusters. [2026-01-20 13:11:21,382] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:21,401] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:21,401] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:21,419] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:21,419] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:21,437] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:21,437] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:11:21,455] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:21,456] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:11:21,601] INFO spindle_dev.index: Finished block 23 in 0.14 seconds, found 9 clusters. [2026-01-20 13:11:21,601] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:21,602] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:21,602] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:21,602] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:21,602] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:21,608] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:21,609] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:21,609] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 13:11:21,610] INFO spindle_dev.index: Building SPD index with epsilon=5.581679702604097 [2026-01-20 13:11:21,610] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:21,620] INFO spindle_dev.index: Cluster 4: 156 SPDs, 19 blocks [2026-01-20 13:11:21,621] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:21,645] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 8 clusters. [2026-01-20 13:11:21,645] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:21,677] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 13 clusters. [2026-01-20 13:11:21,678] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:21,725] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 21 clusters. [2026-01-20 13:11:21,726] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:21,767] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 18 clusters. [2026-01-20 13:11:21,768] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:21,816] INFO spindle_dev.index: Finished block 4 in 0.05 seconds, found 20 clusters. [2026-01-20 13:11:21,817] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:21,877] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 23 clusters. [2026-01-20 13:11:21,878] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:21,910] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 10 clusters. [2026-01-20 13:11:21,911] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:21,932] INFO spindle_dev.index: Finished block 7 in 0.02 seconds, found 6 clusters. [2026-01-20 13:11:21,932] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:21,946] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 2 clusters. [2026-01-20 13:11:21,946] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:21,963] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:21,964] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:21,988] INFO spindle_dev.index: Finished block 10 in 0.02 seconds, found 8 clusters. [2026-01-20 13:11:21,989] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:22,009] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 6 clusters. [2026-01-20 13:11:22,009] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:22,048] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 6 clusters. [2026-01-20 13:11:22,048] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:22,097] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 4 clusters. [2026-01-20 13:11:22,097] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:22,119] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:22,119] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:22,142] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:22,143] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:22,161] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 5 clusters. [2026-01-20 13:11:22,162] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:22,177] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,177] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:22,218] INFO spindle_dev.index: Finished block 18 in 0.04 seconds, found 3 clusters. [2026-01-20 13:11:22,219] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:22,219] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:22,219] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:22,220] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:22,220] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:22,224] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:22,224] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:22,225] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 13:11:22,225] INFO spindle_dev.index: Building SPD index with epsilon=7.036156596265726 [2026-01-20 13:11:22,225] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:22,231] INFO spindle_dev.index: Cluster 5: 66 SPDs, 25 blocks [2026-01-20 13:11:22,232] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:22,237] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 13:11:22,237] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:22,242] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 13:11:22,243] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:22,248] INFO spindle_dev.index: Finished block 2 in 0.00 seconds, found 2 clusters. [2026-01-20 13:11:22,248] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:22,254] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,254] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:22,261] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:22,261] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:22,267] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,268] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:22,274] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:22,275] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:22,282] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,283] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:22,289] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,289] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:22,297] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,297] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:22,304] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:22,304] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:22,312] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,312] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:22,320] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,321] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:22,329] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,329] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:22,337] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 6 clusters. [2026-01-20 13:11:22,338] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:22,345] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:22,345] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:22,353] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,353] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:22,361] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,361] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:22,368] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:22,369] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:22,376] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,376] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:22,382] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,383] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:22,389] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,390] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:11:22,396] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:22,397] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:11:22,404] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:22,405] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:11:22,426] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:22,427] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:22,427] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:22,427] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:22,428] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:22,428] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:22,430] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:22,431] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:22,432] INFO spindle_dev.index: Processing cluster 0 [2026-01-20 13:11:22,433] INFO spindle_dev.index: Building SPD index with epsilon=7.293585178311536 [2026-01-20 13:11:22,433] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:22,484] INFO spindle_dev.index: Cluster 0: 760 SPDs, 22 blocks [2026-01-20 13:11:22,485] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:22,546] INFO spindle_dev.index: Finished block 0 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:22,547] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:22,649] INFO spindle_dev.index: Finished block 1 in 0.10 seconds, found 7 clusters. [2026-01-20 13:11:22,650] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:22,735] INFO spindle_dev.index: Finished block 2 in 0.08 seconds, found 5 clusters. [2026-01-20 13:11:22,735] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:22,847] INFO spindle_dev.index: Finished block 3 in 0.11 seconds, found 8 clusters. [2026-01-20 13:11:22,848] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:22,941] INFO spindle_dev.index: Finished block 4 in 0.09 seconds, found 6 clusters. [2026-01-20 13:11:22,942] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:23,025] INFO spindle_dev.index: Finished block 5 in 0.08 seconds, found 5 clusters. [2026-01-20 13:11:23,026] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:23,110] INFO spindle_dev.index: Finished block 6 in 0.08 seconds, found 5 clusters. [2026-01-20 13:11:23,111] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:23,168] INFO spindle_dev.index: Finished block 7 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:23,169] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:23,242] INFO spindle_dev.index: Finished block 8 in 0.07 seconds, found 2 clusters. [2026-01-20 13:11:23,242] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:23,341] INFO spindle_dev.index: Finished block 9 in 0.10 seconds, found 3 clusters. [2026-01-20 13:11:23,342] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:23,427] INFO spindle_dev.index: Finished block 10 in 0.09 seconds, found 3 clusters. [2026-01-20 13:11:23,428] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:23,502] INFO spindle_dev.index: Finished block 11 in 0.07 seconds, found 4 clusters. [2026-01-20 13:11:23,503] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:23,562] INFO spindle_dev.index: Finished block 12 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:23,563] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:23,613] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:23,614] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:23,663] INFO spindle_dev.index: Finished block 14 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:23,664] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:23,722] INFO spindle_dev.index: Finished block 15 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:23,722] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:23,789] INFO spindle_dev.index: Finished block 16 in 0.07 seconds, found 2 clusters. [2026-01-20 13:11:23,790] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:24,116] INFO spindle_dev.index: Finished block 17 in 0.33 seconds, found 7 clusters. [2026-01-20 13:11:24,117] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:24,205] INFO spindle_dev.index: Finished block 18 in 0.09 seconds, found 2 clusters. [2026-01-20 13:11:24,206] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:24,304] INFO spindle_dev.index: Finished block 19 in 0.10 seconds, found 4 clusters. [2026-01-20 13:11:24,305] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:24,369] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 1 clusters. [2026-01-20 13:11:24,370] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:24,419] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:24,419] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:24,420] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:24,420] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:24,420] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:24,421] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:24,432] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:24,432] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:24,433] INFO spindle_dev.index: Processing cluster 1 [2026-01-20 13:11:24,433] INFO spindle_dev.index: Building SPD index with epsilon=6.4411489446707755 [2026-01-20 13:11:24,434] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:24,467] INFO spindle_dev.index: Cluster 1: 515 SPDs, 22 blocks [2026-01-20 13:11:24,468] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:24,550] INFO spindle_dev.index: Finished block 0 in 0.08 seconds, found 8 clusters. [2026-01-20 13:11:24,551] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:24,674] INFO spindle_dev.index: Finished block 1 in 0.12 seconds, found 16 clusters. [2026-01-20 13:11:24,675] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:24,797] INFO spindle_dev.index: Finished block 2 in 0.12 seconds, found 16 clusters. [2026-01-20 13:11:24,798] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:24,927] INFO spindle_dev.index: Finished block 3 in 0.13 seconds, found 17 clusters. [2026-01-20 13:11:24,928] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:25,011] INFO spindle_dev.index: Finished block 4 in 0.08 seconds, found 9 clusters. [2026-01-20 13:11:25,012] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:25,069] INFO spindle_dev.index: Finished block 5 in 0.06 seconds, found 5 clusters. [2026-01-20 13:11:25,070] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:25,129] INFO spindle_dev.index: Finished block 6 in 0.06 seconds, found 4 clusters. [2026-01-20 13:11:25,130] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:25,176] INFO spindle_dev.index: Finished block 7 in 0.05 seconds, found 2 clusters. [2026-01-20 13:11:25,176] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:25,218] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:25,219] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:25,258] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:25,259] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:25,303] INFO spindle_dev.index: Finished block 10 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:25,303] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:25,350] INFO spindle_dev.index: Finished block 11 in 0.05 seconds, found 1 clusters. [2026-01-20 13:11:25,350] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:25,387] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 1 clusters. [2026-01-20 13:11:25,387] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:25,425] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 1 clusters. [2026-01-20 13:11:25,426] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:25,459] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:25,459] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:25,492] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:25,492] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:25,739] INFO spindle_dev.index: Finished block 16 in 0.25 seconds, found 12 clusters. [2026-01-20 13:11:25,740] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:25,808] INFO spindle_dev.index: Finished block 17 in 0.07 seconds, found 4 clusters. [2026-01-20 13:11:25,809] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:25,872] INFO spindle_dev.index: Finished block 18 in 0.06 seconds, found 6 clusters. [2026-01-20 13:11:25,872] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:25,959] INFO spindle_dev.index: Finished block 19 in 0.09 seconds, found 10 clusters. [2026-01-20 13:11:25,960] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:26,018] INFO spindle_dev.index: Finished block 20 in 0.06 seconds, found 3 clusters. [2026-01-20 13:11:26,019] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:26,076] INFO spindle_dev.index: Finished block 21 in 0.06 seconds, found 2 clusters. [2026-01-20 13:11:26,077] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:26,077] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:26,077] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:26,078] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:26,078] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:26,086] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:26,087] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:26,087] INFO spindle_dev.index: Processing cluster 2 [2026-01-20 13:11:26,087] INFO spindle_dev.index: Building SPD index with epsilon=7.1757370076675295 [2026-01-20 13:11:26,088] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:26,118] INFO spindle_dev.index: Cluster 2: 431 SPDs, 23 blocks [2026-01-20 13:11:26,119] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:26,166] INFO spindle_dev.index: Finished block 0 in 0.05 seconds, found 5 clusters. [2026-01-20 13:11:26,166] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:26,227] INFO spindle_dev.index: Finished block 1 in 0.06 seconds, found 8 clusters. [2026-01-20 13:11:26,227] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:26,305] INFO spindle_dev.index: Finished block 2 in 0.08 seconds, found 11 clusters. [2026-01-20 13:11:26,306] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:26,372] INFO spindle_dev.index: Finished block 3 in 0.07 seconds, found 9 clusters. [2026-01-20 13:11:26,372] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:26,430] INFO spindle_dev.index: Finished block 4 in 0.06 seconds, found 7 clusters. [2026-01-20 13:11:26,430] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:26,482] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 6 clusters. [2026-01-20 13:11:26,482] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:26,524] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 4 clusters. [2026-01-20 13:11:26,525] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:26,557] INFO spindle_dev.index: Finished block 7 in 0.03 seconds, found 2 clusters. [2026-01-20 13:11:26,558] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:26,600] INFO spindle_dev.index: Finished block 8 in 0.04 seconds, found 4 clusters. [2026-01-20 13:11:26,600] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:26,641] INFO spindle_dev.index: Finished block 9 in 0.04 seconds, found 3 clusters. [2026-01-20 13:11:26,641] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:26,671] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:26,671] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:26,773] INFO spindle_dev.index: Finished block 11 in 0.10 seconds, found 6 clusters. [2026-01-20 13:11:26,774] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:26,819] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:26,819] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:26,860] INFO spindle_dev.index: Finished block 13 in 0.04 seconds, found 3 clusters. [2026-01-20 13:11:26,860] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:26,936] INFO spindle_dev.index: Finished block 14 in 0.08 seconds, found 4 clusters. [2026-01-20 13:11:26,937] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:26,989] INFO spindle_dev.index: Finished block 15 in 0.05 seconds, found 6 clusters. [2026-01-20 13:11:26,990] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:27,023] INFO spindle_dev.index: Finished block 16 in 0.03 seconds, found 2 clusters. [2026-01-20 13:11:27,024] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:27,066] INFO spindle_dev.index: Finished block 17 in 0.04 seconds, found 2 clusters. [2026-01-20 13:11:27,067] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:27,094] INFO spindle_dev.index: Finished block 18 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:27,094] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:27,122] INFO spindle_dev.index: Finished block 19 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:27,122] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:27,150] INFO spindle_dev.index: Finished block 20 in 0.03 seconds, found 1 clusters. [2026-01-20 13:11:27,150] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:27,200] INFO spindle_dev.index: Finished block 21 in 0.05 seconds, found 3 clusters. [2026-01-20 13:11:27,201] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:11:27,362] INFO spindle_dev.index: Finished block 22 in 0.16 seconds, found 16 clusters. [2026-01-20 13:11:27,363] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:27,364] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:27,364] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:27,364] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:27,365] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:27,372] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:27,372] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:27,373] INFO spindle_dev.index: Processing cluster 3 [2026-01-20 13:11:27,373] INFO spindle_dev.index: Building SPD index with epsilon=7.306294856673336 [2026-01-20 13:11:27,373] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:27,393] INFO spindle_dev.index: Cluster 3: 260 SPDs, 24 blocks [2026-01-20 13:11:27,394] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:27,413] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 2 clusters. [2026-01-20 13:11:27,414] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:27,438] INFO spindle_dev.index: Finished block 1 in 0.02 seconds, found 4 clusters. [2026-01-20 13:11:27,439] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:27,464] INFO spindle_dev.index: Finished block 2 in 0.03 seconds, found 4 clusters. [2026-01-20 13:11:27,465] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:27,496] INFO spindle_dev.index: Finished block 3 in 0.03 seconds, found 6 clusters. [2026-01-20 13:11:27,497] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:27,529] INFO spindle_dev.index: Finished block 4 in 0.03 seconds, found 6 clusters. [2026-01-20 13:11:27,529] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:27,567] INFO spindle_dev.index: Finished block 5 in 0.04 seconds, found 8 clusters. [2026-01-20 13:11:27,568] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:27,605] INFO spindle_dev.index: Finished block 6 in 0.04 seconds, found 7 clusters. [2026-01-20 13:11:27,605] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:27,643] INFO spindle_dev.index: Finished block 7 in 0.04 seconds, found 8 clusters. [2026-01-20 13:11:27,644] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:27,670] INFO spindle_dev.index: Finished block 8 in 0.03 seconds, found 4 clusters. [2026-01-20 13:11:27,670] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:27,700] INFO spindle_dev.index: Finished block 9 in 0.03 seconds, found 5 clusters. [2026-01-20 13:11:27,700] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:27,734] INFO spindle_dev.index: Finished block 10 in 0.03 seconds, found 5 clusters. [2026-01-20 13:11:27,734] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:27,757] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:27,757] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:27,781] INFO spindle_dev.index: Finished block 12 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:27,781] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:27,816] INFO spindle_dev.index: Finished block 13 in 0.03 seconds, found 2 clusters. [2026-01-20 13:11:27,816] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:27,842] INFO spindle_dev.index: Finished block 14 in 0.03 seconds, found 4 clusters. [2026-01-20 13:11:27,843] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:27,869] INFO spindle_dev.index: Finished block 15 in 0.03 seconds, found 3 clusters. [2026-01-20 13:11:27,869] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:27,891] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 2 clusters. [2026-01-20 13:11:27,892] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:27,915] INFO spindle_dev.index: Finished block 17 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:27,916] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:27,936] INFO spindle_dev.index: Finished block 18 in 0.02 seconds, found 2 clusters. [2026-01-20 13:11:27,937] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:27,954] INFO spindle_dev.index: Finished block 19 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:27,955] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:27,973] INFO spindle_dev.index: Finished block 20 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:27,973] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:27,991] INFO spindle_dev.index: Finished block 21 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:27,992] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:11:28,009] INFO spindle_dev.index: Finished block 22 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:28,010] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:11:28,148] INFO spindle_dev.index: Finished block 23 in 0.14 seconds, found 9 clusters. [2026-01-20 13:11:28,149] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:28,149] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:28,150] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:28,150] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:28,151] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:28,156] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:28,157] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:28,157] INFO spindle_dev.index: Processing cluster 4 [2026-01-20 13:11:28,157] INFO spindle_dev.index: Building SPD index with epsilon=5.581679702604097 [2026-01-20 13:11:28,158] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:28,171] INFO spindle_dev.index: Cluster 4: 156 SPDs, 19 blocks [2026-01-20 13:11:28,171] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:28,195] INFO spindle_dev.index: Finished block 0 in 0.02 seconds, found 8 clusters. [2026-01-20 13:11:28,195] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:28,227] INFO spindle_dev.index: Finished block 1 in 0.03 seconds, found 13 clusters. [2026-01-20 13:11:28,227] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:28,274] INFO spindle_dev.index: Finished block 2 in 0.05 seconds, found 21 clusters. [2026-01-20 13:11:28,274] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:28,316] INFO spindle_dev.index: Finished block 3 in 0.04 seconds, found 18 clusters. [2026-01-20 13:11:28,316] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:28,362] INFO spindle_dev.index: Finished block 4 in 0.05 seconds, found 20 clusters. [2026-01-20 13:11:28,362] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:28,415] INFO spindle_dev.index: Finished block 5 in 0.05 seconds, found 23 clusters. [2026-01-20 13:11:28,416] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:28,446] INFO spindle_dev.index: Finished block 6 in 0.03 seconds, found 10 clusters. [2026-01-20 13:11:28,447] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:28,468] INFO spindle_dev.index: Finished block 7 in 0.02 seconds, found 6 clusters. [2026-01-20 13:11:28,468] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:28,481] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 2 clusters. [2026-01-20 13:11:28,482] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:28,504] INFO spindle_dev.index: Finished block 9 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:28,504] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:28,528] INFO spindle_dev.index: Finished block 10 in 0.02 seconds, found 8 clusters. [2026-01-20 13:11:28,529] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:28,548] INFO spindle_dev.index: Finished block 11 in 0.02 seconds, found 6 clusters. [2026-01-20 13:11:28,549] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:28,587] INFO spindle_dev.index: Finished block 12 in 0.04 seconds, found 6 clusters. [2026-01-20 13:11:28,588] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:28,635] INFO spindle_dev.index: Finished block 13 in 0.05 seconds, found 4 clusters. [2026-01-20 13:11:28,636] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:28,657] INFO spindle_dev.index: Finished block 14 in 0.02 seconds, found 1 clusters. [2026-01-20 13:11:28,657] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:28,679] INFO spindle_dev.index: Finished block 15 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:28,680] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:28,698] INFO spindle_dev.index: Finished block 16 in 0.02 seconds, found 5 clusters. [2026-01-20 13:11:28,698] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:28,713] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,713] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:28,753] INFO spindle_dev.index: Finished block 18 in 0.04 seconds, found 3 clusters. [2026-01-20 13:11:28,754] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:28,754] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:28,755] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:28,755] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:28,755] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:28,759] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:28,760] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:28,760] INFO spindle_dev.index: Processing cluster 5 [2026-01-20 13:11:28,761] INFO spindle_dev.index: Building SPD index with epsilon=7.036156596265726 [2026-01-20 13:11:28,761] INFO spindle_dev.index: Step 1: Cluster blocks within each class of SPD matrices. [2026-01-20 13:11:28,766] INFO spindle_dev.index: Cluster 5: 66 SPDs, 25 blocks [2026-01-20 13:11:28,767] INFO spindle_dev.index: Using epsilon-net clustering for block 0 [2026-01-20 13:11:28,772] INFO spindle_dev.index: Finished block 0 in 0.01 seconds, found 1 clusters. [2026-01-20 13:11:28,772] INFO spindle_dev.index: Using epsilon-net clustering for block 1 [2026-01-20 13:11:28,777] INFO spindle_dev.index: Finished block 1 in 0.01 seconds, found 2 clusters. [2026-01-20 13:11:28,778] INFO spindle_dev.index: Using epsilon-net clustering for block 2 [2026-01-20 13:11:28,783] INFO spindle_dev.index: Finished block 2 in 0.01 seconds, found 2 clusters. [2026-01-20 13:11:28,783] INFO spindle_dev.index: Using epsilon-net clustering for block 3 [2026-01-20 13:11:28,789] INFO spindle_dev.index: Finished block 3 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,790] INFO spindle_dev.index: Using epsilon-net clustering for block 4 [2026-01-20 13:11:28,797] INFO spindle_dev.index: Finished block 4 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:28,797] INFO spindle_dev.index: Using epsilon-net clustering for block 5 [2026-01-20 13:11:28,803] INFO spindle_dev.index: Finished block 5 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,803] INFO spindle_dev.index: Using epsilon-net clustering for block 6 [2026-01-20 13:11:28,810] INFO spindle_dev.index: Finished block 6 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:28,811] INFO spindle_dev.index: Using epsilon-net clustering for block 7 [2026-01-20 13:11:28,818] INFO spindle_dev.index: Finished block 7 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,819] INFO spindle_dev.index: Using epsilon-net clustering for block 8 [2026-01-20 13:11:28,825] INFO spindle_dev.index: Finished block 8 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,825] INFO spindle_dev.index: Using epsilon-net clustering for block 9 [2026-01-20 13:11:28,833] INFO spindle_dev.index: Finished block 9 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,833] INFO spindle_dev.index: Using epsilon-net clustering for block 10 [2026-01-20 13:11:28,840] INFO spindle_dev.index: Finished block 10 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:28,841] INFO spindle_dev.index: Using epsilon-net clustering for block 11 [2026-01-20 13:11:28,848] INFO spindle_dev.index: Finished block 11 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,849] INFO spindle_dev.index: Using epsilon-net clustering for block 12 [2026-01-20 13:11:28,856] INFO spindle_dev.index: Finished block 12 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,857] INFO spindle_dev.index: Using epsilon-net clustering for block 13 [2026-01-20 13:11:28,864] INFO spindle_dev.index: Finished block 13 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,865] INFO spindle_dev.index: Using epsilon-net clustering for block 14 [2026-01-20 13:11:28,874] INFO spindle_dev.index: Finished block 14 in 0.01 seconds, found 6 clusters. [2026-01-20 13:11:28,874] INFO spindle_dev.index: Using epsilon-net clustering for block 15 [2026-01-20 13:11:28,881] INFO spindle_dev.index: Finished block 15 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:28,881] INFO spindle_dev.index: Using epsilon-net clustering for block 16 [2026-01-20 13:11:28,890] INFO spindle_dev.index: Finished block 16 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,890] INFO spindle_dev.index: Using epsilon-net clustering for block 17 [2026-01-20 13:11:28,898] INFO spindle_dev.index: Finished block 17 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,898] INFO spindle_dev.index: Using epsilon-net clustering for block 18 [2026-01-20 13:11:28,905] INFO spindle_dev.index: Finished block 18 in 0.01 seconds, found 4 clusters. [2026-01-20 13:11:28,906] INFO spindle_dev.index: Using epsilon-net clustering for block 19 [2026-01-20 13:11:28,913] INFO spindle_dev.index: Finished block 19 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,913] INFO spindle_dev.index: Using epsilon-net clustering for block 20 [2026-01-20 13:11:28,920] INFO spindle_dev.index: Finished block 20 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,920] INFO spindle_dev.index: Using epsilon-net clustering for block 21 [2026-01-20 13:11:28,927] INFO spindle_dev.index: Finished block 21 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,927] INFO spindle_dev.index: Using epsilon-net clustering for block 22 [2026-01-20 13:11:28,934] INFO spindle_dev.index: Finished block 22 in 0.01 seconds, found 3 clusters. [2026-01-20 13:11:28,934] INFO spindle_dev.index: Using epsilon-net clustering for block 23 [2026-01-20 13:11:28,942] INFO spindle_dev.index: Finished block 23 in 0.01 seconds, found 5 clusters. [2026-01-20 13:11:28,943] INFO spindle_dev.index: Using epsilon-net clustering for block 24 [2026-01-20 13:11:28,963] INFO spindle_dev.index: Finished block 24 in 0.02 seconds, found 3 clusters. [2026-01-20 13:11:28,963] INFO spindle_dev.index: Step 2: Build DAG connections between block clusters. [2026-01-20 13:11:28,964] INFO spindle_dev.index: Step 2.1: For each layer order the block-clusters by [2026-01-20 13:11:28,964] INFO spindle_dev.index: Not implemented: ordering block-clusters ? How to order them? [2026-01-20 13:11:28,965] INFO spindle_dev.index: We will use triangle inequality to order clusters. [2026-01-20 13:11:28,965] INFO spindle_dev.index: Step 2.2: Connect block-clusters between layers based on co-occurrence in SPDs. [2026-01-20 13:11:28,968] INFO spindle_dev.index: Check if node global_node_id matches index in nodes list [2026-01-20 13:11:28,968] INFO spindle_dev.index: Step 2.3: Ordering block-clusters within each layer using log-Euclidean distances. [2026-01-20 13:11:29,588] INFO spindle_dev.test: Built ground-truth paths for 760 SPDs in cluster 0 across 22 blocks. [2026-01-20 13:11:29,853] INFO spindle_dev.test: Built ground-truth paths for 515 SPDs in cluster 1 across 22 blocks. [2026-01-20 13:11:30,058] INFO spindle_dev.test: Built ground-truth paths for 431 SPDs in cluster 2 across 23 blocks. [2026-01-20 13:11:30,140] INFO spindle_dev.test: Built ground-truth paths for 260 SPDs in cluster 3 across 24 blocks. [2026-01-20 13:11:30,167] INFO spindle_dev.test: Built ground-truth paths for 156 SPDs in cluster 4 across 19 blocks. [2026-01-20 13:11:30,175] INFO spindle_dev.test: Built ground-truth paths for 66 SPDs in cluster 5 across 25 blocks.
Done with search
In [9]:
# Merge all dataframes and save to CSV
merged_df = pd.concat(all_df, ignore_index=True)
# output_path = '/data/sarkar_lab/Projects/spindle_dev/results/cross_cluster_search_performance.csv'
# merged_df.to_csv(output_path, index=False)
# print(f"Saved results to {output_path}")
# print(f"Total rows: {len(merged_df)}")
merged_df.head()
Out[9]:
| True Cluster | Predicted Cluster | experiment_name | |
|---|---|---|---|
| 0 | 2 | 2 | xenium_human_skin_melanoma |
| 1 | 5 | 5 | xenium_human_skin_melanoma |
| 2 | 3 | 3 | xenium_human_skin_melanoma |
| 3 | 4 | 4 | xenium_human_skin_melanoma |
| 4 | 0 | 0 | xenium_human_skin_melanoma |
In [1]:
import pandas as pd
In [2]:
merged_result = pd.read_csv('/data/sarkar_lab/Projects/spindle_dev/results/search_results/cross_cluster_search_performance.csv')
In [4]:
# Find out group by accuracy
accuracy_df = merged_result.groupby('experiment_name').apply(lambda x: (x['True Cluster'] == x['Predicted Cluster']).mean()).reset_index()
accuracy_df.columns = ['experiment_name', 'accuracy']
accuracy_df = accuracy_df.sort_values(by='accuracy', ascending=False)
accuracy_df
/tmp/ipykernel_4169152/4153229215.py:2: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
accuracy_df = merged_result.groupby('experiment_name').apply(lambda x: (x['True Cluster'] == x['Predicted Cluster']).mean()).reset_index()
Out[4]:
| experiment_name | accuracy | |
|---|---|---|
| 1 | xenium_human_breast_cancer | 0.990 |
| 3 | xenium_human_lung_cancer | 0.960 |
| 0 | xenium_human_brain_cancer | 0.955 |
| 6 | xenium_human_skin_melanoma | 0.955 |
| 4 | xenium_human_lymph_node | 0.945 |
| 5 | xenium_human_pancreatic_cancer | 0.935 |
| 2 | xenium_human_kidney_nondiseased | 0.920 |
In [6]:
short_name_map = {
'xenium_human_skin_melanoma': 'Skin',
'xenium_human_kidney_nondiseased': 'Kidney',
'xenium_human_breast_cancer': 'Breast',
'xenium_human_pancreatic_cancer': 'Pancreas',
'xenium_human_lymph_node': 'Lymph',
'xenium_human_lung_cancer': 'Lung',
'xenium_human_brain_cancer': 'Brain'
}
In [8]:
accuracy_df['experiment_name'] = accuracy_df.experiment_name.map(short_name_map)
In [18]:
from pathlib import Path
Path('/data/sarkar_lab/Projects/spindle_dev/results/plots/').mkdir(parents=True, exist_ok=True)
In [20]:
# do barplot
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(5,5))
sns.barplot(data=accuracy_df, x='experiment_name', y='accuracy')
plt.ylim(0, 1)
# roate x labels
plt.xticks(rotation=45, ha='right')
plt.xlabel('Experiment Name',fontsize=12)
plt.ylabel('Accuracy',fontsize=12)
plt.title('')
sns.despine()
plt.savefig('/data/sarkar_lab/Projects/spindle_dev/results/plots/cross_cluster_search_performance_barplot.png', dpi=300, bbox_inches='tight')
plt.show()
In [ ]: