def test_construction(self): strings = refinement.HMMResult("dummy_hit", "1", "5", "3E-10", "53.5") correct = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) for result in [strings, correct]: assert result.hit_id == "dummy_hit" assert result.query_start == 1 assert result.query_end == 5 assert result.evalue == 3e-10 assert result.bitscore == 53.5
def test_merge(self): first = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) second = refinement.HMMResult("dummy_hit", 15, 25, 3e-20, 73.5) for merged in [first.merge(second), second.merge(first)]: assert merged.hit_id == "dummy_hit" assert merged.query_start == 1 assert merged.query_end == 25 assert merged.evalue == 3e-20 assert merged.bitscore == 73.5
def test_equality(self): first = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) second = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) assert first == second and first is not second second._hit_id = "dummy" assert first != second second._hit_id = first._hit_id second._evalue /= 10 assert first != second
def test_hashability(self): first = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) second = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) different = refinement.HMMResult("dummy_hit", 1, 5, 3e-1, 53.5) assert hash(first) == hash(second) and first is not second assert hash(first) != hash(different) used = {} used[first] = 1 used[second] = 2 used[different] = 3 assert used == {first: 2, different: 3}
def test_json_conversion(self): result = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) assert result.to_json() == { 'bitscore': 53.5, 'evalue': 3e-10, 'hit_id': 'dummy_hit', 'query_end': 5, 'query_start': 1 }
def test_overlaps(self): first = refinement.HMMResult("dummy_hit", 1, 10, 3e-10, 53.5) second = refinement.HMMResult("dummy_hit", 10, 20, 3e-20, 73.5) results = [first, second] assert len(refinement._remove_overlapping(results, {"dummy_hit": 20})) == 2 assert len(refinement._remove_overlapping(results, {"dummy_hit": 100})) == 2 first.query_end = 16 assert len(refinement._remove_overlapping(results, {"dummy_hit": 20})) == 1 assert len(refinement._remove_overlapping(results, {"dummy_hit": 100})) == 2 first.query_end = 13 assert len(refinement._remove_overlapping(results, {"dummy_hit": 10})) == 1 assert len(refinement._remove_overlapping(results, {"dummy_hit": 100})) == 2
def from_json(json, _record) -> "SMCOGResults": if json.get("schema_version") != SMCOGResults.schema_version: return None results = SMCOGResults(json["record_id"]) for hit, parts in json["best_hits"].items(): results.best_hits[hit] = hmmscan_refinement.HMMResult(*parts) if json.get("image_dir"): results.relative_tree_path = json["image_dir"] results.tree_images = json["tree_paths"] return results
def from_json(json: Dict[str, Any], record: Record) -> "SMCOGResults": if json.get("schema_version") != SMCOGResults.schema_version: logging.debug("Schema version mismatch, discarding SMCOGs results") return None if record.id != json.get("record_id"): logging.debug("Record ID mismatch, discarding SMCOGs results") return None results = SMCOGResults(json["record_id"]) for hit, parts in json["best_hits"].items(): results.best_hits[hit] = hmmscan_refinement.HMMResult(*parts) if json.get("image_dir"): results.relative_tree_path = json["image_dir"] results.tree_images = json["tree_paths"] return results
def test_json_conversion(self): result = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) json = result.to_json() assert json == { 'bitscore': 53.5, 'evalue': 3e-10, 'hit_id': 'dummy_hit', 'query_end': 5, 'query_start': 1 } regenerated = refinement.HMMResult.from_json(json) assert regenerated.hit_id == "dummy_hit" assert regenerated.query_start == 1 assert regenerated.query_end == 5 assert regenerated.evalue == 3e-10 assert regenerated.bitscore == 53.5
def test_incomplete_regulator(self): results = refinement.gather_by_query(self.results)[self.gene_id] results = sorted(list(results), key=lambda result: result.query_start) assert len(results) == 5 regulator_id = "DUMMY:some_regulator_desc" regulator_result = refinement.HMMResult(regulator_id, 1, 2, 1e-10, 1) results.append(regulator_result) new_lengths = dict(self.hmm_lengths) new_lengths[regulator_id] = len(regulator_result) * 100 # always big # set the thresholds to be unreachable new = refinement._remove_incomplete(results, new_lengths, threshold=2., fallback=2.) # ensure the tiny, but present, regulator is still in the list assert len(new) == 1 assert new[0].hit_id == regulator_id
def test_str_conversion(self): result = refinement.HMMResult("dummy_hit", 1, 5, 3e-10, 53.5) assert str( result ) == "HMMResult(dummy_hit, 1, 5, evalue=3e-10, bitscore=53.5)"