File: test_nodegraph.py

package info (click to toggle)
sourmash 4.9.4-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,688 kB
  • sloc: python: 59,380; ansic: 332; makefile: 277; sh: 6
file content (109 lines) | stat: -rw-r--r-- 2,780 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from tempfile import NamedTemporaryFile

import pytest

from sourmash.nodegraph import (
    Nodegraph,
    extract_nodegraph_info,
    calc_expected_collisions,
)

import sourmash_tst_utils as utils


def test_nodegraph_to_khmer_basic():
    pytest.importorskip("khmer")

    ng_file = utils.get_test_data(".sbt.v3/internal.0")

    sourmash_ng = Nodegraph.load(ng_file)
    khmer_sm_ng = sourmash_ng.to_khmer_nodegraph()

    assert sourmash_ng.ksize() == khmer_sm_ng.ksize()


def test_nodegraph_khmer_compare():
    khmer = pytest.importorskip("khmer")

    khmer_ng = khmer.Nodegraph(3, 23, 6)
    khmer_ng.count("ACG")
    khmer_ng.count("TTA")
    khmer_ng.count("CGA")

    sm_ng = Nodegraph(3, 23, 6)
    sm_ng.count("ACG")
    sm_ng.count("TTA")
    sm_ng.count("CGA")

    assert sm_ng.ksize() == khmer_ng.ksize()
    assert sm_ng.hashsizes() == khmer_ng.hashsizes()
    assert sm_ng.get("ACG")
    assert sm_ng.get("TTA")
    assert sm_ng.get("CGA")

    assert khmer_ng.get("ACG")
    assert khmer_ng.get("TTA")
    assert khmer_ng.get("CGA")


def test_nodegraph_same_file():
    khmer = pytest.importorskip("khmer")
    try:
        load_nodegraph = khmer.load_nodegraph
    except AttributeError:
        load_nodegraph = khmer.Nodegraph.load

    ng_file = utils.get_test_data(".sbt.v3/internal.0")
    with open(ng_file, "rb") as f:
        ng_data = f.read()

    sourmash_ng = Nodegraph.load(ng_file)
    khmer_sm_ng = sourmash_ng.to_khmer_nodegraph()

    khmer_ng = load_nodegraph(ng_file)

    with (
        NamedTemporaryFile() as f1,
        NamedTemporaryFile() as f2,
        NamedTemporaryFile() as f3,
    ):
        sourmash_ng.save(f1.name)
        khmer_sm_ng.save(f2.name)
        khmer_ng.save(f3.name)

        f1.seek(0)
        sm_data = f1.read()

        f2.seek(0)
        kh_sm_data = f2.read()

        f3.seek(0)
        kh_data = f3.read()

        assert extract_nodegraph_info(f1.name) == extract_nodegraph_info(f2.name)
        assert extract_nodegraph_info(f3.name) == extract_nodegraph_info(f2.name)
        assert extract_nodegraph_info(f1.name) == extract_nodegraph_info(f3.name)

        assert sm_data == kh_data
        assert sm_data == kh_sm_data

        assert ng_data == sm_data
        assert ng_data == kh_data
        assert ng_data == kh_sm_data


def test_nodegraph_expected_collisions():
    ng_file = utils.get_test_data(".sbt.v3/internal.0")

    sourmash_ng = Nodegraph.load(ng_file)

    assert calc_expected_collisions(sourmash_ng) == 3.412442571740036e-07


def test_nodegraph_expected_collisions_error():
    ng_file = utils.get_test_data(".sbt.v3/internal.0")

    sourmash_ng = Nodegraph.load(ng_file)

    with pytest.raises(SystemExit):
        calc_expected_collisions(sourmash_ng, max_false_pos=1e-8)