feat: implement partition-based merge command for k-mer indices

Implements a new `merge` command that aggregates k-mer counts and presence/absence matrices from multiple source indices using a parallelized, partition-based algorithm. Adds CLI progress bars and execution timing across the bootstrap, spectrum rebuild, and merge phases. Updates logging to report the aggregate genome count and introduces a bounds check in the perfect hash layer to safely return `None` for unknown k-mers, preventing out-of-bounds access in downstream operations.
This commit is contained in:
Eric Coissac
2026-05-21 11:16:00 +02:00
parent 11182005a2
commit 9e1d6f2f25
4 changed files with 64 additions and 20 deletions
-14
View File
@@ -9,20 +9,6 @@
## commandes à ajouter
- merge : pour construire un index à partir d'index existants
- deux modes : count et presence/absence. count exige que tous les index mergés soient déjà en mode count. mode presence/absence par defaut. Si passage de mode count à mode presence/absence, par defaut presence = count >= 1. Possibilité de spécifier un seuil personnalisé.
- le merge doit se faire en parallèle sur chaque partition
- en entrée : une liste de chemins vers les index à fusionner
- en sortie : un nouvel index fusionné (option -o <output_index>)
- j'imagine comme algo:
- on copie le premier index dans le nouvel index
- on ajoute a chaque partition une matrice de count ou de presence s'il n'y en avait pas déjà.
- si besoin, on cree la colone 0 de la matrice de count ou de presence pour le genome courant
- on parcourt les partitions et les index à fusionner en parallèle
- pour chaque partition, on ajoute les kmer présents dans les index à fusionner au nouvel index
- si le kmer est déjà présent dans le nouvel index on ajoute le compte ou la presence du kmer dans la matrice de count ou de presence
- sinon, on ajoute le kmer dans une nouvelle layer
- filter : produit un nouvel index filtré à partir d'un index existant en verifiant que les kmer présents dans le nouvel index respectent les critères de filtrage spécifiés
- quorum de presence en fraction-(min/max) du nombre de génomes, en nombre-(min/max) de génomes, si mode count la présence peut être défini par un seuil personnalisé minimum et maximum