Files
biopython/Tests/test_SearchIO_write.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

223 lines
9.2 KiB
Python

# Copyright 2012 by Wibowo Arindrarto. 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 SearchIO writing."""
import os
import unittest
from search_tests_common import SearchTestBaseClass
from Bio import SearchIO
class WriteCases(SearchTestBaseClass):
def tearDown(self):
if os.path.exists(self.out):
os.remove(self.out)
def parse_write_and_compare(
self, source_file, source_format, out_file, out_format, **kwargs
):
"""Compare parsed QueryResults after they have been written to a file."""
source_qresults = list(SearchIO.parse(source_file, source_format, **kwargs))
SearchIO.write(source_qresults, out_file, out_format, **kwargs)
out_qresults = list(SearchIO.parse(out_file, out_format, **kwargs))
for source, out in zip(source_qresults, out_qresults):
self.compare_search_obj(source, out)
def read_write_and_compare(
self, source_file, source_format, out_file, out_format, **kwargs
):
"""Compare read QueryResults after it has been written to a file."""
source_qresult = SearchIO.read(source_file, source_format, **kwargs)
SearchIO.write(source_qresult, out_file, out_format, **kwargs)
out_qresult = SearchIO.read(out_file, out_format, **kwargs)
self.compare_search_obj(source_qresult, out_qresult)
class BlastXmlWriteCases(WriteCases):
fmt = "blast-xml"
out = os.path.join("Blast", "test_write.xml")
def test_write_single_from_blastxml(self):
"""Test blast-xml writing from blast-xml, BLAST 2.2.26+, single query (xml_2226_blastp_004.xml)."""
source = os.path.join("Blast", "xml_2226_blastp_004.xml")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt)
def test_write_multiple_from_blastxml(self):
"""Test blast-xml writing from blast-xml, BLAST 2.2.26+, multiple queries (xml_2226_blastp_001.xml)."""
source = os.path.join("Blast", "xml_2226_blastp_001.xml")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
class BlastTabWriteCases(WriteCases):
fmt = "blast-tab"
out = os.path.join("Blast", "test_write.txt")
def test_write_single_from_blasttab(self):
"""Test blast-tab writing from blast-tab, BLAST 2.2.26+, single query (tab_2226_tblastn_004.txt)."""
source = os.path.join("Blast", "tab_2226_tblastn_004.txt")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt)
def test_write_multiple_from_blasttab(self):
"""Test blast-tab writing from blast-tab, BLAST 2.2.26+, multiple queries (tab_2226_tblastn_001.txt)."""
source = os.path.join("Blast", "tab_2226_tblastn_001.txt")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
def test_write_single_from_blasttabc(self):
"""Test blast-tabc writing from blast-tabc, BLAST 2.2.26+, single query (tab_2226_tblastn_008.txt)."""
source = os.path.join("Blast", "tab_2226_tblastn_008.txt")
self.parse_write_and_compare(
source, self.fmt, self.out, self.fmt, comments=True
)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt, comments=True)
def test_write_multiple_from_blasttabc(self):
"""Test blast-tabc writing from blast-tabc, BLAST 2.2.26+, multiple queries (tab_2226_tblastn_005.txt)."""
source = os.path.join("Blast", "tab_2226_tblastn_005.txt")
self.parse_write_and_compare(
source, self.fmt, self.out, self.fmt, comments=True
)
def test_write_multiple_from_blasttabc_allfields(self):
"""Test blast-tabc writing from blast-tabc, BLAST 2.2.28+, multiple queries (tab_2228_tblastx_001.txt)."""
source = os.path.join("Blast", "tab_2228_tblastx_001.txt")
fields = [
"qseqid",
"qgi",
"qacc",
"qaccver",
"qlen",
"sseqid",
"sallseqid",
"sgi",
"sallgi",
"sacc",
"saccver",
"sallacc",
"slen",
"qstart",
"qend",
"sstart",
"send",
"qseq",
"sseq",
"evalue",
"bitscore",
"score",
"length",
"pident",
"nident",
"mismatch",
"positive",
"gapopen",
"gaps",
"ppos",
"frames",
"qframe",
"sframe",
"btop",
"staxids",
"sscinames",
"scomnames",
"sblastnames",
"sskingdoms",
"stitle",
"salltitles",
"sstrand",
"qcovs",
"qcovhsp",
]
self.parse_write_and_compare(
source, self.fmt, self.out, self.fmt, comments=True, fields=fields
)
class HmmerTabWriteCases(WriteCases):
fmt = "hmmer3-tab"
out = os.path.join("Hmmer", "test_write.txt")
def test_write_single_from_hmmertab(self):
"""Test hmmer3-tab writing from hmmer3-tab, HMMER 3.0, single query (tab_30_hmmscan_004.out)."""
source = os.path.join("Hmmer", "tab_30_hmmscan_004.out")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt)
def test_write_multiple_from_hmmertab(self):
"""Test hmmer3-tab writing from hmmer3-tab, HMMER 3.0, multiple queries (tab_30_hmmscan_001.out)."""
source = os.path.join("Hmmer", "tab_30_hmmscan_001.out")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
class HmmerDomtabWriteCases(WriteCases):
out = os.path.join("Hmmer", "test_write.txt")
def test_write_single_from_hmmscandomtab(self):
"""Test hmmscan-domtab writing from hmmscan-domtab, HMMER 3.0, single query (tab_30_hmmscan_004.out)."""
source = os.path.join("Hmmer", "domtab_30_hmmscan_004.out")
fmt = "hmmscan3-domtab"
self.parse_write_and_compare(source, fmt, self.out, fmt)
self.read_write_and_compare(source, fmt, self.out, fmt)
def test_write_multiple_from_hmmscandomtab(self):
"""Test hmmscan-domtab writing from hmmscan-domtab, HMMER 3.0, multiple queries (tab_30_hmmscan_001.out)."""
source = os.path.join("Hmmer", "domtab_30_hmmscan_001.out")
fmt = "hmmscan3-domtab"
self.parse_write_and_compare(source, fmt, self.out, fmt)
def test_write_single_from_hmmsearchdomtab(self):
"""Test hmmsearch-domtab writing from hmmsearch-domtab, HMMER 3.0, single query (tab_30_hmmscan_004.out)."""
source = os.path.join("Hmmer", "domtab_30_hmmsearch_001.out")
fmt = "hmmsearch3-domtab"
self.parse_write_and_compare(source, fmt, self.out, fmt)
self.read_write_and_compare(source, fmt, self.out, fmt)
class BlatPslWriteCases(WriteCases):
fmt = "blat-psl"
out = os.path.join("Blat", "test_write.txt")
def test_write_single_from_blatpsl(self):
"""Test blat-psl writing from blat-psl, single query (psl_34_004.psl)."""
source = os.path.join("Blat", "psl_34_004.psl")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt)
def test_write_single_from_blatpsl_protein_query(self):
"""Test blat-psl writing from blat-psl, single query (psl_35_002.psl)."""
source = os.path.join("Blat", "psl_35_002.psl")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt)
def test_write_multiple_from_blatpsl(self):
"""Test blat-psl writing from blat-psl, multiple queries (psl_34_001.psl)."""
source = os.path.join("Blat", "psl_34_001.psl")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt)
def test_write_single_from_blatpslx(self):
"""Test blat-pslx writing from blat-pslx, single query (pslx_34_004.pslx)."""
source = os.path.join("Blat", "pslx_34_004.pslx")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt, pslx=True)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt, pslx=True)
def test_write_single_from_blatpslx_protein_query(self):
"""Test blat-pslx writing from blat-pslx, single query (pslx_35_002.pslx)."""
source = os.path.join("Blat", "pslx_35_002.pslx")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt, pslx=True)
self.read_write_and_compare(source, self.fmt, self.out, self.fmt, pslx=True)
def test_write_multiple_from_blatpslx(self):
"""Test blat-pslx writing from blat-pslx, multiple queries (pslx_34_001.pslx)."""
source = os.path.join("Blat", "pslx_34_001.pslx")
self.parse_write_and_compare(source, self.fmt, self.out, self.fmt, pslx=True)
if __name__ == "__main__":
runner = unittest.TextTestRunner(verbosity=2)
unittest.main(testRunner=runner)