fb4962c4fe
Introduces `TempCompactIntVec` and `TempBitVec` as temporary, file-backed intermediates to replace eager in-memory vectors, enabling OS-level paging under memory pressure. Updates the `MatrixGroupOps` trait to return `io::Result` types, allowing proper error propagation and supporting chunked accumulation for large column groups. Includes builder patterns with `.freeze()` finalization, automatic `TempDir` cleanup on drop, and necessary test updates to handle the new fallible signatures. Also fixes `Cargo.toml` section ordering.
45 lines
2.6 KiB
Markdown
45 lines
2.6 KiB
Markdown
# La crate obicompactvector
|
|
|
|
Le code actuelle est ce qu'il est. Ce n'est pad la vrérité absolue, c'est un premier effort d'implémentation rien de plus. Ci-dessous je vais décrire les objectif et la structure qui devrait être. LA VERITE A ATTEINDRE.
|
|
|
|
La crate fournie des représentations les plus compact possible en mémoire de matrice de comptage ou de présence de k-mer dans des génomes. Chaque colonne représente un génome chaque ligne un kmer. une matrice est une collection de vecteur ou chacun des vecteur est un colonne de la matrice.
|
|
|
|
Les matrices comme les colonnes ont vocation à être persistante. Les données sont stockées dans des fichiers binaires. Les données sont mappées en mémoire via `mmap`
|
|
|
|
Les structure sont par essence immutables. Il existe des représentations mutables des colonnes qui permettent leur construction. À la fin de leur construction, les colonnes sont fermée ce qui les rends immutable.
|
|
|
|
Les matrices peuvent êtres représenté de deux façons:
|
|
- via un répertoire contenant une collection de fichier colonnes
|
|
- via un fichier matrix qui est la concatenation de plusieurs fichiers colonnes.
|
|
|
|
|
|
## Les matrices de comptage
|
|
|
|
Ce sont des matrice d'entiers positif la plus part du temps de petites valeurs (inferieurs à 255). On assume que toutes les valeurs sont représentables sur un `u32`
|
|
|
|
## Les matrices de presence
|
|
|
|
Ce sont des matrices de boolean représenté comme des champs de bits
|
|
|
|
Il existe une forme implicite des vecteur de présence, qui n'est représenté par aucun fichier pour lequel toutes les valeurs sont vraies
|
|
|
|
## représentation légère des colonnes
|
|
|
|
Les colonnes qu'elles soient de unitiaire (fichier colonne) ou partie d'un fichier composite matrice peuvent être représenté par un objet léger donnant acces à ces valeurs ainsi qu'à la longeur du vecteurs. Toutes les méthodes de calcules doivent uniquement travailler à partir de ces représentations légère unifiées des colonnes.
|
|
|
|
### Représentation légère d'un vecteur de présence
|
|
|
|
Le vecteur est représenté par
|
|
- un champs de bits encodé comme un [u64]
|
|
- un usize encodant la longeur du champs de bits
|
|
|
|
### Représentation légère d'un vecteur de présence
|
|
|
|
Le vecteur est représenté par
|
|
- un vecteur [u8] encodant directement les valeur faibe du vecteur [0,255[
|
|
La valeur 255 est une valeur sentinelle indiquant que la valeure vraie est >=255
|
|
et se trouvent dans une structure d'overflow
|
|
- un iterateur de (usize,u32) listant les valeurs d'overflow coorespondant aux valeurs
|
|
sentinels (255) du [u8]
|
|
- un usize encodant la longeur du champs de bits
|