From fe999f1cabdba774c5b89a67d3c42dc1e8f4ec34 Mon Sep 17 00:00:00 2001 From: Harrison Deng Date: Thu, 6 Feb 2025 18:01:50 +0000 Subject: [PATCH] Added a unit test for multithreaded alignments --- src/autobigs/engine/analysis/aligners.py | 5 ++--- tests/autobigs/engine/analysis/test_aligners.py | 17 ++++++++++++++++- .../fdaargos_1560_hinfluenza_adk.fasta | 11 +++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 tests/resources/fdaargos_1560_hinfluenza_adk.fasta diff --git a/src/autobigs/engine/analysis/aligners.py b/src/autobigs/engine/analysis/aligners.py index 85b9b9f..8909902 100644 --- a/src/autobigs/engine/analysis/aligners.py +++ b/src/autobigs/engine/analysis/aligners.py @@ -7,7 +7,6 @@ from queue import Queue from autobigs.engine.structures.alignment import AlignmentStats, PairwiseAlignment - class AsyncBiopythonPairwiseAlignmentEngine(AbstractContextManager): def __enter__(self): self._thread_pool = ThreadPoolExecutor(self._max_threads, thread_name_prefix="async-pairwise-alignment") @@ -52,8 +51,8 @@ class AsyncBiopythonPairwiseAlignmentEngine(AbstractContextManager): async def next_completed(self) -> Union[tuple[PairwiseAlignment, dict[str, Any]], None]: if self._work_complete.empty() and len(self._work_left): return None - future_now = await asyncio.wrap_future(self._work_complete.get()) - return future_now + completed_alignment = await asyncio.wrap_future(self._work_complete.get()) + return completed_alignment def __exit__(self, exc_type, exc_value, traceback): self.shutdown() diff --git a/tests/autobigs/engine/analysis/test_aligners.py b/tests/autobigs/engine/analysis/test_aligners.py index 159dfa5..6285b98 100644 --- a/tests/autobigs/engine/analysis/test_aligners.py +++ b/tests/autobigs/engine/analysis/test_aligners.py @@ -13,6 +13,15 @@ def tohamaI_bpertussis_adk(): def tohamaI_bpertussis_genome(): return str(SeqIO.read("tests/resources/tohama_I_bpertussis.fasta", format="fasta").seq) +@fixture +def fdaargos_1560_hinfluenza_adk(): + return str(SeqIO.read("tests/resources/fdaargos_1560_hinfluenza_adk.fasta", format="fasta").seq) + +@fixture +def fdaargos_1560_hinfluenza_genome(): + return str(SeqIO.read("tests/resources/fdaargos_1560_hinfluenza.fasta", format="fasta").seq) + + @fixture(params=[1, 2]) def dummy_engine(request): aligner = PairwiseAligner("blastn") @@ -21,7 +30,13 @@ def dummy_engine(request): yield engine class TestAsyncPairwiseAlignmentEngine: - async def test_single_alignment_no_errors(self, tohamaI_bpertussis_genome, tohamaI_bpertussis_adk: str, dummy_engine: AsyncBiopythonPairwiseAlignmentEngine): + async def test_single_alignment_no_errors_single_alignment(self, tohamaI_bpertussis_genome, tohamaI_bpertussis_adk: str, dummy_engine: AsyncBiopythonPairwiseAlignmentEngine): dummy_engine.align(tohamaI_bpertussis_genome, tohamaI_bpertussis_adk) + async for alignment, additional_information in dummy_engine: + assert isinstance(alignment, PairwiseAlignment) + + async def test_single_alignment_no_errors_multiple(self, tohamaI_bpertussis_genome, tohamaI_bpertussis_adk, fdaargos_1560_hinfluenza_genome, fdaargos_1560_hinfluenza_adk, dummy_engine: AsyncBiopythonPairwiseAlignmentEngine): + dummy_engine.align(tohamaI_bpertussis_genome, tohamaI_bpertussis_adk) + dummy_engine.align(fdaargos_1560_hinfluenza_genome, fdaargos_1560_hinfluenza_adk) async for alignment, additional_information in dummy_engine: assert isinstance(alignment, PairwiseAlignment) \ No newline at end of file diff --git a/tests/resources/fdaargos_1560_hinfluenza_adk.fasta b/tests/resources/fdaargos_1560_hinfluenza_adk.fasta new file mode 100644 index 0000000..49f92bc --- /dev/null +++ b/tests/resources/fdaargos_1560_hinfluenza_adk.fasta @@ -0,0 +1,11 @@ +>lcl|CP085952.1_gene_371 [gene=adk] [locus_tag=LK401_01855] [location=complement(365128..365772)] [gbkey=Gene] +ATGAAAATTATTCTTTTAGGTGCACCGGGTGCAGGTAAAGGCACTCAAGCACAATTTATTATGAACAAAT +TTGGTATCCCGCAAATTTCAACTGGTGATATGTTCCGTGCTGCAATCAAAGCGGGGACTGAACTTGGCAA +ACAAGCTAAAGCATTAATGGATGAAGGTAAATTAGTGCCAGATGAATTAACCGTTGCCCTTGTAAAAGAT +CGTATTGCTCAAGCTGACTGCACAAATGGTTTCTTGTTAGATGGTTTCCCTCGTACTATTCCACAAGCGG +ATGCACTGAAAGATTCAGGTGTTAAAATTGACTTTGTTTTAGAATTTGATGTGCCAGACGAAGTGATTGT +TGAACGTATGAGTGGCCGTCGCGTACACCAAGCGTCTGGCCGTTCTTACCACATCGTTTATAATCCACCA +AAAGTGGAAGGTAAAGATGATGTAACAGGCGAAGATTTAATTATTCGTGCAGACGATAAACCAGAAACTG +TATTAGATCGTTTAGCCGTATATCATAAACAAACTAGCCCATTAATTGATTATTACCAAGCAGAAGCGAA +AGCGGGGAATACTCAATATTTCCGTTTAGACGGTACACAAAAAGTAGAAGAAGTTAGCCAAGAGTTAGAT +AAAATCTTAGGCTAA \ No newline at end of file