def test_empty_table(self): table = biom.Table(np.array([[]]), [], []) core_features(self.output_dir, table) self.assertBasicVizValidity(self.output_dir, exp_sample_count=0, exp_feature_count=0, exp_no_core=True) self.assertFalse(glob.glob(os.path.join(self.output_dir, '*.tsv')))
def test_defaults(self): core_features(self.output_dir, self.table) self.assertBasicVizValidity(self.output_dir) core_50_fp = os.path.join(self.output_dir, 'core-features-0.500.tsv') self.assertCoreFeaturesPresent(core_50_fp, ['O1', 'O2'], []) core_100_fp = os.path.join(self.output_dir, 'core-features-1.000.tsv') self.assertCoreFeaturesPresent(core_100_fp, ['O2'], ['O1'])
def test_equal_min_max_fractions(self): core_features(self.output_dir, self.table, min_fraction=0.55, max_fraction=0.55) self.assertBasicVizValidity(self.output_dir, exp_no_plot=True) core_55_fp = os.path.join(self.output_dir, 'core-features-0.550.tsv') tsv_files = glob.glob(os.path.join(self.output_dir, '*.tsv')) self.assertEqual(tsv_files, [core_55_fp]) self.assertCoreFeaturesPresent(core_55_fp, ['O1', 'O2'], [])
def test_minimum_number_of_steps(self): core_features(self.output_dir, self.table, min_fraction=0.55, max_fraction=0.95, steps=2) self.assertBasicVizValidity(self.output_dir) core_55_fp = os.path.join(self.output_dir, 'core-features-0.550.tsv') core_95_fp = os.path.join(self.output_dir, 'core-features-0.950.tsv') tsv_files = sorted(glob.glob(os.path.join(self.output_dir, '*.tsv'))) self.assertEqual(tsv_files, [core_55_fp, core_95_fp]) self.assertCoreFeaturesPresent(core_55_fp, ['O1', 'O2'], []) self.assertCoreFeaturesPresent(core_95_fp, ['O2'], ['O1'])
def test_no_core_features(self): table = biom.Table(np.array([[0, 11, 11], [11, 11, 0]]), ['O1', 'O2'], ['S1', 'S2', 'S3']) core_features(self.output_dir, table) self.assertBasicVizValidity(self.output_dir, exp_no_core=True) core_50_fp = os.path.join(self.output_dir, 'core-features-0.500.tsv') self.assertCoreFeaturesPresent(core_50_fp, ['O1', 'O2'], []) # No core features exist at fraction=1.0 core_100_fp = os.path.join(self.output_dir, 'core-features-1.000.tsv') self.assertFalse(os.path.exists(core_100_fp))
def test_fraction_range(self): core_features(self.output_dir, self.table, min_fraction=0.55, max_fraction=0.95, steps=9) self.assertBasicVizValidity(self.output_dir) core_50_fp = os.path.join(self.output_dir, 'core-features-0.500.tsv') self.assertFalse(os.path.exists(core_50_fp)) core_55_fp = os.path.join(self.output_dir, 'core-features-0.550.tsv') self.assertCoreFeaturesPresent(core_55_fp, ['O1', 'O2'], []) core_95_fp = os.path.join(self.output_dir, 'core-features-0.950.tsv') self.assertCoreFeaturesPresent(core_95_fp, ['O2'], ['O1']) core_100_fp = os.path.join(self.output_dir, 'core-features-1.000.tsv') self.assertFalse(os.path.exists(core_100_fp))
def test_tiny_steps_precision(self): # Bug in a previous iteration of the code used a fixed number of digits # in the "feature list" TSV filenames, causing files to be overwritten # with the wrong data if a small enough step size was used. core_features(self.output_dir, self.table, min_fraction=0.1, max_fraction=0.11, steps=101) self.assertBasicVizValidity(self.output_dir) fp = os.path.join(self.output_dir, 'core-features-0.1000.tsv') self.assertTrue(os.path.exists(fp)) fp = os.path.join(self.output_dir, 'core-features-0.1001.tsv') self.assertTrue(os.path.exists(fp)) fp = os.path.join(self.output_dir, 'core-features-0.1099.tsv') self.assertTrue(os.path.exists(fp)) fp = os.path.join(self.output_dir, 'core-features-0.1100.tsv') self.assertTrue(os.path.exists(fp))
def test_invalid_parameters(self): with self.assertRaisesRegex(ValueError, 'fraction'): core_features(self.output_dir, self.table, min_fraction=0.75, max_fraction=0.5)