Files
biopython/Tests/test_PopGen_GenePop.py
Peter Cock 57056bbfc4 ruff format v0.3.1, black v24.2.0
Reverted unwanted changes (mostly arrays in tests, but also
some whitespace in doctests).

Remaining changes are standardising spacing between module
docstring and imports, and lower-case \x<hex> in strings.
2024-03-14 11:05:43 +00:00

110 lines
3.8 KiB
Python

# Copyright 2009 by Tiago Antao <tiagoantao@gmail.com>. 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.
"""Test GenePop."""
import os
import unittest
import warnings
from Bio import BiopythonDeprecationWarning
from Bio import MissingExternalDependencyError
with warnings.catch_warnings():
warnings.simplefilter("ignore", category=BiopythonDeprecationWarning)
from Bio.PopGen.GenePop.Controller import GenePopController
# Tests genepop related code. Note: this case requires genepop
# test_PopGen_GenePop_nodepend tests code that does not require genepop
found = False
for path in os.environ["PATH"].split(os.pathsep):
try:
for filename in os.listdir(path):
if filename.startswith("Genepop"):
found = True
except OSError:
pass # Path doesn't exist - correct to pass
if not found:
raise MissingExternalDependencyError(
"Install GenePop if you want to use Bio.PopGen.GenePop."
)
class AppTest(unittest.TestCase):
"""Tests genepop execution via biopython."""
def test_allele_genotype_frequencies(self):
"""Test genepop execution on basic allele and genotype frequencies."""
ctrl = GenePopController()
path = os.path.join("PopGen", "big.gen")
pop_iter, locus_iter = ctrl.calc_allele_genotype_freqs(path)
# print("%s %s" % (pop, loci))
# for popc in pop_iter:
# pop_name, loci_content = popc
# print(pop_name)
# for locus in loci_content:
# geno_list, hets, freq_fis = loci_content[locus]
# print(locus)
# print(hets)
# print(freq_fis)
# print(geno_list)
# print("")
def test_calc_diversities_fis_with_identity(self):
"""Test calculations of diversities."""
ctrl = GenePopController()
path = os.path.join("PopGen", "big.gen")
iter, avg_fis, avg_Qintra = ctrl.calc_diversities_fis_with_identity(path)
liter = list(iter)
self.assertEqual(len(liter), 37)
self.assertEqual(liter[0][0], "Locus1")
self.assertEqual(len(avg_fis), 10)
self.assertEqual(len(avg_Qintra), 10)
def test_estimate_nm(self):
"""Test Nm estimation."""
ctrl = GenePopController()
path = os.path.join("PopGen", "big.gen")
(
mean_sample_size,
mean_priv_alleles,
mig10,
mig25,
mig50,
mig_corrected,
) = ctrl.estimate_nm(path)
self.assertAlmostEqual(mean_sample_size, 28.0)
self.assertAlmostEqual(mean_priv_alleles, 0.016129)
self.assertAlmostEqual(mig10, 52.5578)
self.assertAlmostEqual(mig25, 15.3006)
self.assertAlmostEqual(mig50, 8.94583)
self.assertAlmostEqual(mig_corrected, 13.6612)
def test_fst_all(self):
"""Test genepop execution on all fst."""
ctrl = GenePopController()
path = os.path.join("PopGen", "c2line.gen")
(allFis, allFst, allFit), itr = ctrl.calc_fst_all(path)
results = list(itr)
self.assertEqual(len(results), 3)
self.assertEqual(results[0][0], "136255903")
self.assertAlmostEqual(results[1][3], 0.335846)
def test_haploidy(self):
"""Test haploidy."""
ctrl = GenePopController()
path = os.path.join("PopGen", "haplo.gen")
(allFis, allFst, allFit), itr = ctrl.calc_fst_all(path)
litr = list(itr)
self.assertNotIsInstance(allFst, int)
self.assertEqual(len(litr), 37)
self.assertEqual(litr[36][0], "Locus37")
if __name__ == "__main__":
runner = unittest.TextTestRunner(verbosity=2)
unittest.main(testRunner=runner)