Files
biopython/Tests/test_EmbossPrimer.py
ruff-isort de0bb21fb3 Apply isort (forcing single lines, not sorting by type) via ruff
$ ruff check --fix --select=I \
  --config=lint.isort.force-single-line=true \
  --config=lint.isort.order-by-type=false \
  BioSQL/ Bio/ Tests/ Scripts/ Doc/ setup.py

Using ruff version 0.4.10
2024-06-26 15:31:39 +09:00

198 lines
9.1 KiB
Python

# Copyright 2001 by Brad Chapman. All rights reserved.
# Revisions copyright 2008-2009 by Michiel de Hoon. All rights reserved.
# Revisions copyright 2010-2011 by Peter Cock. All rights reserved.
# This code is part of the Biopython distribution and governed by its
# license. Please see the LICENSE file that should have been included
# as part of this package.
"""Tests for Primer-based programs in the Emboss suite."""
# standard library
import os
import unittest
from Bio.Emboss import Primer3
# local stuff
from Bio.Emboss import PrimerSearch
class Primer3ParseTest(unittest.TestCase):
def setUp(self):
self.test_files = [
os.path.join("Emboss", "bac_find.primer3"),
os.path.join("Emboss", "cds_forward.primer3"),
os.path.join("Emboss", "cds_reverse.primer3"),
os.path.join("Emboss", "short.primer3"),
os.path.join("Emboss", "internal_oligo.primer3"),
os.path.join("Emboss", "no_oligo.primer3"),
]
def test_simple_parse(self):
"""Make sure that we can use all single target primer3 files."""
for file in self.test_files:
# First using read...
with open(file) as handle:
Primer3.read(handle)
# Now using parse...
with open(file) as handle:
self.assertEqual(1, len(list(Primer3.parse(handle))))
def test_indepth_regular_parse(self):
"""Make sure we get the data from normal primer3 files okay."""
regular_file = self.test_files[0]
with open(regular_file) as handle:
primer_info = Primer3.read(handle)
self.assertEqual(len(primer_info.primers), 5)
self.assertEqual(primer_info.comments, "# PRIMER3 RESULTS FOR AC074298\n")
self.assertEqual(primer_info.primers[1].forward_seq, "CCGGTTTCTCTGGTTGAAAA")
self.assertEqual(primer_info.primers[2].reverse_seq, "TCACATTCCCAAATGTAGATCG")
self.assertEqual(primer_info.primers[0].size, 218)
self.assertEqual(len(primer_info.primers[0]), 218)
self.assertEqual(primer_info.primers[3].forward_start, 112)
self.assertEqual(primer_info.primers[3].forward_length, 20)
self.assertEqual(primer_info.primers[3].forward_tm, 59.57)
self.assertEqual(primer_info.primers[3].forward_gc, 45.00)
self.assertEqual(primer_info.primers[4].reverse_start, 304)
self.assertEqual(primer_info.primers[4].reverse_length, 22)
self.assertEqual(primer_info.primers[4].reverse_tm, 59.61)
self.assertEqual(primer_info.primers[4].reverse_gc, 40.91)
def test_in_depth_single_parse(self):
"""Make sure we get info right from a single primer find."""
file = self.test_files[1]
with open(file) as handle:
primer_info = Primer3.read(handle)
self.assertEqual(len(primer_info.primers), 5)
self.assertEqual(primer_info.comments, "# PRIMER3 RESULTS FOR 26964-28647#\n")
self.assertEqual(primer_info.primers[1].reverse_seq, "")
self.assertEqual(primer_info.primers[1].internal_seq, "")
self.assertEqual(primer_info.primers[3].forward_seq, "TGTGATTGCTTGAGCTGGAC")
self.assertEqual(primer_info.primers[3].internal_seq, "")
self.assertEqual(primer_info.primers[3].forward_start, 253)
def test_internal_oligo_single_parse(self):
"""Make sure we can parse an internal oligo file correctly."""
# these files are generated when designing hybridization probes.
file = self.test_files[4]
with open(file) as handle:
primer_info = Primer3.read(handle)
self.assertEqual(len(primer_info.primers), 5)
self.assertEqual(primer_info.comments, "# EPRIMER3 RESULTS FOR YNL138W-A\n")
self.assertEqual(primer_info.primers[0].internal_length, 22)
self.assertEqual(primer_info.primers[1].internal_seq, "TTGCGCTTTAGTTTGAATTGAA")
self.assertEqual(primer_info.primers[2].internal_tm, 58.62)
self.assertEqual(primer_info.primers[3].internal_start, 16)
self.assertEqual(primer_info.primers[4].internal_gc, 35.00)
def test_multi_record_fwd(self):
"""Test parsing multiple primer sets (NirK forward)."""
with open(os.path.join("Emboss", "NirK.primer3")) as handle:
targets = list(Primer3.parse(handle))
self.assertEqual(len(targets), 16)
for target in targets:
self.assertEqual(len(target.primers), 5)
self.assertEqual(targets[0].primers[0].forward_seq, "GCAAACTGAAAAGCGGACTC")
self.assertEqual(targets[0].primers[1].forward_seq, "GGGACGTACTTTCGCACAAT")
self.assertEqual(targets[0].primers[2].forward_seq, "GTCTTATGCGTGGTGGAGGT")
self.assertEqual(targets[0].primers[3].forward_seq, "GTACATCAACATCCGCAACG")
self.assertEqual(targets[0].primers[4].forward_seq, "CGTACATCAACATCCGCAAC")
self.assertEqual(targets[1].primers[0].forward_seq, "GGAAGTGCTTCTCGTTTTCG")
self.assertEqual(targets[1].primers[1].forward_seq, "TACAGAGCGTCACGGATGAG")
self.assertEqual(targets[1].primers[2].forward_seq, "TTGTCATCGTGCTCTTCGTC")
self.assertEqual(targets[1].primers[3].forward_seq, "GACTCCAACCTCAGCTTTCG")
self.assertEqual(targets[1].primers[4].forward_seq, "GGCACGAAGAAGGACAGAAG")
self.assertEqual(targets[15].primers[0].forward_seq, "TGCTTGAAAATGACGCACTC")
self.assertEqual(targets[15].primers[1].forward_seq, "CTCGCTGGCTAGGTCATAGG")
self.assertEqual(targets[15].primers[2].forward_seq, "TATCGCACCAAACACGGTAA")
self.assertEqual(targets[15].primers[3].forward_seq, "CGATTACCCTCACCGTCACT")
self.assertEqual(targets[15].primers[4].forward_seq, "TATCGCAACCACTGAGCAAG")
def test_multi_record_full(self):
"""Test parsing multiple primer sets (NirK full)."""
with open(os.path.join("Emboss", "NirK_full.primer3")) as handle:
targets = list(Primer3.parse(handle))
self.assertEqual(len(targets), 16)
for target in targets:
self.assertEqual(len(target.primers), 5)
self.assertEqual(targets[15].primers[0].forward_seq, "ACTCACTTCGGCTGAATGCT")
self.assertEqual(targets[15].primers[1].forward_seq, "GGCGATTAGCGCTGTCTATC")
self.assertEqual(targets[15].primers[2].forward_seq, "ACTCACTTCGGCTGAATGCT")
self.assertEqual(targets[15].primers[3].forward_seq, "TAGGCGTATAGACCGGGTTG")
self.assertEqual(targets[15].primers[4].forward_seq, "AGCAAGCTGACCACTGGTTT")
self.assertEqual(targets[15].primers[0].reverse_seq, "CATTTAATCCGGATGCCAAC")
self.assertEqual(targets[15].primers[1].reverse_seq, "TGGCCTTTCTCTCCTCTTCA")
self.assertEqual(targets[15].primers[2].reverse_seq, "ATTTAATCCGGATGCCAACA")
self.assertEqual(targets[15].primers[3].reverse_seq, "CACACATTATTGGCGGTCAC")
self.assertEqual(targets[15].primers[4].reverse_seq, "TCTGAAACCACCAAGGAAGC")
self.assertEqual(targets[15].primers[0].internal_seq, "CCCACCAATATTTGGCTAGC")
self.assertEqual(targets[15].primers[1].internal_seq, "AATCTTCTGTGCACCTTGCC")
self.assertEqual(targets[15].primers[2].internal_seq, "CCCACCAATATTTGGCTAGC")
self.assertEqual(targets[15].primers[3].internal_seq, "TGAGCCTGTGTTCCACACAT")
self.assertEqual(targets[15].primers[4].internal_seq, "CTATGCCCTTCTGCCACAAT")
class PrimersearchParseTest(unittest.TestCase):
def setUp(self):
self.test_files = [os.path.join("Emboss", "bac_find.psearch")]
def test_simple_parse(self):
"""Make sure that we can parse all primersearch files."""
for file in self.test_files:
with open(file) as handle:
PrimerSearch.read(handle)
def test_in_depth_normal_parse(self):
"""Make sure the output from a simple primersearch file is correct."""
file = self.test_files[0]
with open(file) as handle:
amp_info = PrimerSearch.read(handle)
self.assertEqual(len(amp_info.amplifiers), 1)
self.assertIn("Test", amp_info.amplifiers)
self.assertEqual(len(amp_info.amplifiers["Test"]), 1)
self.assertEqual(amp_info.amplifiers["Test"][0].length, 218)
self.assertEqual(
amp_info.amplifiers["Test"][0].hit_info,
"AC074298 AC074298 \n"
"\tTelomere associated sequence for Arabidopsis thaliana "
"TEL1N from chromosome I, complete sequence.\n"
"\tCCGGTTTCTCTGGTTGAAAA hits forward strand at 114 "
"with 0 mismatches\n"
"\tTCACATTCCCAAATGTAGATCG hits reverse strand at "
"[114] with 0 mismatches",
)
class PrimerSearchInputTest(unittest.TestCase):
"""Test creating input files for primersearch."""
def setUp(self):
pass
def test_primer_representation(self):
"""Make sure we can output primer information correctly."""
p_info = PrimerSearch.InputRecord()
p_info.add_primer_set("Test", "GATC", "CATG")
p_info.add_primer_set("Test2", "AATA", "TTAT")
output = str(p_info)
self.assertEqual(output, "Test GATC CATG\nTest2 AATA TTAT\n")
if __name__ == "__main__":
runner = unittest.TextTestRunner(verbosity=2)
unittest.main(testRunner=runner)