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
Пример #7
0
    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
Пример #8
0
    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
Пример #9
0
 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)"