seqtree 0.5.0__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {seqtree-0.5.0 → seqtree-0.6.0}/CHANGELOG.md +27 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/PKG-INFO +1 -1
- {seqtree-0.5.0 → seqtree-0.6.0}/SOURCES.md +7 -1
- {seqtree-0.5.0 → seqtree-0.6.0}/pyproject.toml +1 -1
- {seqtree-0.5.0 → seqtree-0.6.0}/src/structural.inc +4 -4
- {seqtree-0.5.0 → seqtree-0.6.0}/.gitattributes +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/.gitignore +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/CMakeLists.txt +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/LICENSE +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/README.md +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/ROADMAP.md +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/.gitignore +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/.latexmkrc +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/Makefile +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/epitope_detection.pdf +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/evalue.pdf +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/evalue.tex +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/evalue_matrix.pdf +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/mhc1_rocpr.pdf +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/mhc2_rocpr.pdf +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/appendix/refs.bib +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/examples/01_gapped_search.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/examples/02_sequence_dendrogram.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/examples/03_indel_positions.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/examples/04_island_profile.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/include/seqtree/kmer_index.hpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/include/seqtree/seqtree.hpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/include/seqtree/types.hpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/__init__.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/control.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/data/control_human_trb_aa.txt.gz +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/distance.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/evalue.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/gapblock.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/layout.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/pairwise.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/pmhc.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/pmhc_evalue.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/py.typed +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/python/seqtree/seeds.py +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/skills/seqtree/SKILL.md +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/_bindings.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/atomic_write.hpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/blosum45.inc +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/blosum62.inc +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/blosum80.inc +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/codec.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/distance.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/engine_seqtm.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/engine_seqtrie.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/engines.hpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/gapblock.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/index.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/kmer_index.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/pairwise.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/pam100.inc +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/pam250.inc +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/positional_matrix.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/searcher.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/substitution_matrix.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/trie.cpp +0 -0
- {seqtree-0.5.0 → seqtree-0.6.0}/src/trie.hpp +0 -0
|
@@ -3,6 +3,33 @@
|
|
|
3
3
|
All notable changes to `seqtree`. Dates are release dates; the project is pre-1.0, so a **minor**
|
|
4
4
|
bump may carry breaking changes.
|
|
5
5
|
|
|
6
|
+
## [0.6.0] — 2026-07-17
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- **`structural` scored A–N contacts as if they did not interact, because the source table is
|
|
11
|
+
corrupted there.** The Miyazawa–Jernigan A–N contact energy was transcribed as `0.00` — the
|
|
12
|
+
generator's comment excused it as a pair the source left unlisted. It is not unlisted. In
|
|
13
|
+
`MJ_Keskin_potentials.csv` the lower triangle runs `A-A`, `R-A`, `R-R`, `[N-A]`, `N-R`, …, and
|
|
14
|
+
the `N-A` slot reads `V,1` (mirrored `1,V`), where `1` is a mangled residue symbol. The true
|
|
15
|
+
value is **0.15**. It is not a stray duplicate of `V-N` either — the V row separately lists
|
|
16
|
+
`N = 0.12`.
|
|
17
|
+
|
|
18
|
+
Substituting `0.00` for `0.15` understated A's interaction strength and overstated N's
|
|
19
|
+
(`q(A)` −0.04100 → −0.03350, `q(N)` +0.04350 → +0.05100). Since `structural` is rank-1 by
|
|
20
|
+
construction — every cell is a function of the 20 per-residue strengths — this moved the
|
|
21
|
+
strong→weak ordering that the matrix exists to encode, swapping N and P:
|
|
22
|
+
`FWCLYMIVHGAT`**`NP`**`RSQDEK` → `FWCLYMIVHGAT`**`PN`**`RSQDEK`.
|
|
23
|
+
|
|
24
|
+
Four cells of the 24×24 grid change: `A-W`/`W-A` 6 → 5, and `B-C`/`C-B` 4 → 3 (`B` is
|
|
25
|
+
`mean(N, D)`, so N's shift carries into it). **Scores from `structural()` change for sequences
|
|
26
|
+
containing A, W, or B**; all other matrices are untouched. N and P were near-tied, which is why
|
|
27
|
+
a real correction to the ordering moves so few cells.
|
|
28
|
+
|
|
29
|
+
- **The same comment claimed the source is "near- but not perfectly symmetric".** It is perfectly
|
|
30
|
+
symmetric — 0 asymmetric directed pairs across all 400. The symmetrisation in
|
|
31
|
+
`structural_grid()` is a no-op guard, not a repair, and is now documented as such.
|
|
32
|
+
|
|
6
33
|
## [0.5.0] — 2026-07-16
|
|
7
34
|
|
|
8
35
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: seqtree
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Fast fuzzy search over biological sequences (C++ core, Python bindings)
|
|
5
5
|
Keywords: sequence-search,fuzzy-matching,CDR3,immunology,bioinformatics,trie
|
|
6
6
|
Author-Email: ISALGO laboratory <mikhail.shugay@gmail.com>
|
|
@@ -32,12 +32,18 @@ possible; and out-of-frame junctions escape thymic selection, making them a samp
|
|
|
32
32
|
| | |
|
|
33
33
|
|---|---|
|
|
34
34
|
| provenance | **derived** (published log-odds / interaction-strength matrices) |
|
|
35
|
-
| origin | BLOSUM62 (NCBI); EMBOSS EPAM250, EPAM100; Miyazawa–Jernigan interaction strengths |
|
|
35
|
+
| origin | BLOSUM62 (NCBI); EMBOSS EPAM250, EPAM100; Miyazawa–Jernigan interaction strengths, transcribed into `MJ_CONTACT` in `bench/gen_matrices.py` from the `MJ` rows of `tcren-ms/src/tcren/data/MJ_Keskin_potentials.csv` (Miyazawa & Jernigan, J Mol Biol 1996, as tabulated by Keskin et al., Protein Sci 1998) |
|
|
36
36
|
| regenerate | `python bench/gen_matrices.py` |
|
|
37
37
|
|
|
38
38
|
Stored as non-negative penalties via the Gram transform `pen[a][b] = s[a][a] + s[b][b] − 2·s[a][b]`,
|
|
39
39
|
clamped at zero, so `penalty(a, a) == 0` and the score defines a ball.
|
|
40
40
|
|
|
41
|
+
**Known corruption in the MJ source.** `MJ_Keskin_potentials.csv` has no `A,N` row: the lower-triangle
|
|
42
|
+
slot where `N-A` belongs is mangled to `V,1` (mirrored `1,V`) for *both* the `MJ` and `Keskin`
|
|
43
|
+
potentials. `MJ_CONTACT` carries the correct `A-N = 0.15` from that row, so the constant will not
|
|
44
|
+
diff cleanly against the CSV at that pair. The `Keskin` rows are unused here. Fix not yet upstreamed
|
|
45
|
+
to `tcren-ms`.
|
|
46
|
+
|
|
41
47
|
## Downloaded on demand
|
|
42
48
|
|
|
43
49
|
### `load_control(name)` → `~/.cache/seqtree/control_*.sqtree`
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
static const int32_t kStructuralSize = 24;
|
|
5
5
|
static const int32_t kStructural[24 * 24] = {
|
|
6
6
|
// A R N D C Q E G H I L K M F P S T W Y V B Z X *
|
|
7
|
-
10, 9, 9, 7, 6, 8, 7, 10, 9, 6, 6, 5, 6, 5, 9, 8, 9,
|
|
7
|
+
10, 9, 9, 7, 6, 8, 7, 10, 9, 6, 6, 5, 6, 5, 9, 8, 9, 5, 6, 7, 8, 7, 7, 0,
|
|
8
8
|
9, 10, 10, 8, 4, 9, 8, 8, 8, 5, 4, 6, 5, 4, 10, 10, 9, 4, 5, 6, 9, 9, 7, 0,
|
|
9
9
|
9, 10, 10, 8, 4, 9, 8, 8, 8, 5, 4, 6, 5, 4, 10, 10, 9, 4, 5, 6, 9, 9, 7, 0,
|
|
10
10
|
7, 8, 8, 10, 3, 9, 10, 7, 6, 3, 3, 8, 3, 2, 8, 9, 8, 3, 3, 4, 9, 9, 6, 0,
|
|
11
|
-
6, 4, 4, 3, 10, 4, 2, 6, 7, 9, 10, 1, 9, 9, 4, 4, 5, 10, 10, 8,
|
|
11
|
+
6, 4, 4, 3, 10, 4, 2, 6, 7, 9, 10, 1, 9, 9, 4, 4, 5, 10, 10, 8, 3, 3, 6, 0,
|
|
12
12
|
8, 9, 9, 9, 4, 10, 9, 8, 7, 4, 4, 7, 4, 3, 9, 10, 9, 3, 4, 5, 9, 9, 7, 0,
|
|
13
13
|
7, 8, 8, 10, 2, 9, 10, 6, 6, 3, 2, 8, 3, 2, 8, 8, 7, 2, 3, 4, 9, 9, 6, 0,
|
|
14
14
|
10, 8, 8, 7, 6, 8, 6, 10, 9, 7, 6, 5, 6, 5, 8, 8, 9, 6, 6, 8, 8, 7, 7, 0,
|
|
@@ -21,10 +21,10 @@ static const int32_t kStructural[24 * 24] = {
|
|
|
21
21
|
9, 10, 10, 8, 4, 9, 8, 8, 8, 5, 4, 6, 5, 4, 10, 10, 9, 4, 5, 6, 9, 9, 7, 0,
|
|
22
22
|
8, 10, 10, 9, 4, 10, 8, 8, 7, 5, 4, 6, 5, 4, 10, 10, 9, 4, 4, 6, 9, 9, 7, 0,
|
|
23
23
|
9, 9, 9, 8, 5, 9, 7, 9, 8, 6, 5, 6, 5, 4, 9, 9, 10, 5, 5, 7, 9, 8, 7, 0,
|
|
24
|
-
|
|
24
|
+
5, 4, 4, 3, 10, 3, 2, 6, 6, 9, 10, 0, 9, 10, 4, 4, 5, 10, 9, 8, 3, 3, 6, 0,
|
|
25
25
|
6, 5, 5, 3, 10, 4, 3, 6, 7, 10, 10, 1, 10, 9, 5, 4, 5, 9, 10, 9, 4, 3, 6, 0,
|
|
26
26
|
7, 6, 6, 4, 8, 5, 4, 8, 8, 9, 8, 2, 9, 8, 6, 6, 7, 8, 9, 10, 5, 5, 7, 0,
|
|
27
|
-
8, 9, 9, 9,
|
|
27
|
+
8, 9, 9, 9, 3, 9, 9, 8, 7, 4, 4, 7, 4, 3, 9, 9, 9, 3, 4, 5, 9, 9, 7, 0,
|
|
28
28
|
7, 9, 9, 9, 3, 9, 9, 7, 6, 4, 3, 8, 4, 2, 9, 9, 8, 3, 3, 5, 9, 9, 6, 0,
|
|
29
29
|
7, 7, 7, 6, 6, 7, 6, 7, 7, 7, 6, 4, 7, 6, 7, 7, 7, 6, 6, 7, 7, 6, 7, 0,
|
|
30
30
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|