From 4fbb23590ac233ee0e2dd3d171cf94ff23aa5ea3 Mon Sep 17 00:00:00 2001
From: DIALLO <mamadou.diallo4.etu@univ-lille.fr>
Date: Fri, 21 Mar 2025 16:24:09 +0100
Subject: [PATCH] =?UTF-8?q?description=20de=20la=20classe=20structure=20(d?=
 =?UTF-8?q?octests)=20et=20reponse=20=C3=A0=20la=20question=204?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Readme.md            | 47 +++++++++++++++++++++++++++++---------------
 querykmers_tpmiso.py | 32 ++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 16 deletions(-)

diff --git a/Readme.md b/Readme.md
index c75d3f2..b867f70 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,16 +1,31 @@
-Vous commencez votre premier job de bioinformaticien.ne. La personne précédente vous a laissé un code quasi sans commentaire et sans test, et votre chef est biologiste et n'y comprend rien. Il sait seulement que ce code était très pratique pour rechercher des k-mer dans des jeux de données. 
-Vous allez améliorer la situation pour que l'équipe puisse se servir du code de manière pérenne.
-
-1. Décrivez à quoi sert `class SimpleBloomFilter`. Ecrivez les doctests pour cette classe.
-
-2. Décrivez à quoi sert `class StructureNode`. 
-
-3. Décrivez à quoi sert `class Structure`. Ecrivez les doctests pour cette classe.
-
-4. Cette structure mélange donc deux structures de données que nous avons vues. Quelles sont elles ?
-
-4. D'après vous, que peut-on dire sur la complexité de la requête de cette structure ? 
-
-5. Quelles sont les différences avec la table basée sur une MPHF que nous avons vu ? 
-
-6. Bonus : Pouvez-vous retracer de quel papier de bioinformatique vient cette idée ?
+Vous commencez votre premier job de bioinformaticien.ne. La personne précédente vous a laissé un code quasi sans commentaire et sans test, et votre chef est biologiste et n'y comprend rien. Il sait seulement que ce code était très pratique pour rechercher des k-mer dans des jeux de données. 
+Vous allez améliorer la situation pour que l'équipe puisse se servir du code de manière pérenne.
+
+1. Décrivez à quoi sert `class SimpleBloomFilter`. Ecrivez les doctests pour cette classe.
+
+2. Décrivez à quoi sert `class StructureNode`. 
+
+3. Décrivez à quoi sert `class Structure`. Ecrivez les doctests pour cette classe.
+
+4. Cette structure mélange donc deux structures de données que nous avons vues. Quelles sont elles ?
+
+-----
+### La stucture Structure mélange deux structures de données principales:
+
+*** 1-Filtre de Bloom:
+Utilisé pour représenter les k-mers de chaque jeu de données. Le filtre de Bloom permet de tester
+rapidement si un k-mer est potentiellement présent dans un jeu de donnnées, avec un certain taux de
+faux positifs.
+
+
+*** 2-Arbre binaire:
+La structure est organisée sous forme d'arbre binaire, où chaque noeud interne présente l'union
+des filtres de Bloom de ses enfants. Les feuilles de l'arbre correspondent aux jeux de données
+individuels.
+-----
+
+5.D'après vous, que peut-on dire sur la complexité de la requête de cette structure ? 
+
+6.Quelles sont les différences avec la table basée sur une MPHF que nous avons vu ? 
+
+7.Bonus : Pouvez-vous retracer de quel papier de bioinformatique vient cette idée ?
diff --git a/querykmers_tpmiso.py b/querykmers_tpmiso.py
index c989f6c..ddd066a 100644
--- a/querykmers_tpmiso.py
+++ b/querykmers_tpmiso.py
@@ -35,6 +35,38 @@ class StructureNode:
 		self.datasets = []  # list of dataset names at leaf nodes
 
 class Structure:
+	"""
+	Une structure arborescente qui organise des jeux de données (datasets) en
+	utilisant des filtres de Bloom pour permettre des requetes efficaces de k-mers.
+
+	Exemples d'utilisation:
+	>>> datasets = ["Dataset1", "Dataset2", "Dataset3", "Dataset4"]
+    >>> kmers_dict = {
+    ...     "Dataset1": ["ACGT", "TGCA", "GCTA"],  # k-mers du Dataset1
+    ...     "Dataset2": ["CGTA", "GCTA", "TACC"],  # k-mers du Dataset2
+    ...     "Dataset3": ["AAGT", "TCCA", "CGGT"],  # k-mers du Dataset3
+    ...     "Dataset4": ["TGGC", "GGCA", "CCAA"]   # k-mers du Dataset4
+    ... }
+    >>> structure= Structure(datasets, kmers_dict, bloom_size=100, num_hashes=1)
+
+    >>> structure.query("TCCA") #Recherche du k-mer "GCTA"
+    ['Dataset1', 'Dataset2'] #"GCTA" est présent dans Dataset1 et Dataset2
+
+     >>> structure.query("TCCA")  # Recherche du k-mer "TCCA"
+    ['Dataset3']  # "TCCA" est présent dans Dataset3
+
+    >>> structure.query("ACGT")  # Recherche du k-mer "ACGT"
+    ['Dataset1']  # "ACGT" est présent dans Dataset1
+
+    >>> structure.query("GGGG")  # Recherche du k-mer "GGGG"
+    []  # "GGGG" n'est présent dans aucun dataset
+
+    >>> structure.query("TGGC")  # Recherche du k-mer "TGGC"
+    ['Dataset4']  # "TGGC" est présent dans Dataset4
+
+    >>> structure.query("CGGT")  # Recherche du k-mer "CGGT"
+    ['Dataset3']  # "CGGT" est présent dans Dataset3
+	"""
 	def __init__(self, datasets, kmers_dict, bloom_size=10000, num_hashes=3):
 		self.leaves = {}  # maps dataset names to their Bloom filter nodes
 		self.root = self._build_tree(datasets, kmers_dict, bloom_size, num_hashes)
-- 
GitLab