seqtree 0.6.0__tar.gz → 0.6.1__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.6.0 → seqtree-0.6.1}/CHANGELOG.md +11 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/PKG-INFO +5 -2
- {seqtree-0.6.0 → seqtree-0.6.1}/README.md +4 -1
- {seqtree-0.6.0 → seqtree-0.6.1}/pyproject.toml +1 -1
- {seqtree-0.6.0 → seqtree-0.6.1}/skills/seqtree/SKILL.md +1 -1
- {seqtree-0.6.0 → seqtree-0.6.1}/src/gapblock.cpp +5 -5
- {seqtree-0.6.0 → seqtree-0.6.1}/.gitattributes +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/.gitignore +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/CMakeLists.txt +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/LICENSE +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/ROADMAP.md +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/SOURCES.md +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/.gitignore +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/.latexmkrc +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/Makefile +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/epitope_detection.pdf +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/evalue.pdf +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/evalue.tex +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/evalue_matrix.pdf +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/mhc1_rocpr.pdf +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/mhc2_rocpr.pdf +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/appendix/refs.bib +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/examples/01_gapped_search.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/examples/02_sequence_dendrogram.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/examples/03_indel_positions.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/examples/04_island_profile.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/include/seqtree/kmer_index.hpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/include/seqtree/seqtree.hpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/include/seqtree/types.hpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/__init__.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/control.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/data/control_human_trb_aa.txt.gz +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/distance.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/evalue.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/gapblock.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/layout.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/pairwise.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/pmhc.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/pmhc_evalue.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/py.typed +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/python/seqtree/seeds.py +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/_bindings.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/atomic_write.hpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/blosum45.inc +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/blosum62.inc +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/blosum80.inc +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/codec.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/distance.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/engine_seqtm.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/engine_seqtrie.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/engines.hpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/index.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/kmer_index.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/pairwise.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/pam100.inc +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/pam250.inc +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/positional_matrix.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/searcher.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/structural.inc +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/substitution_matrix.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/trie.cpp +0 -0
- {seqtree-0.6.0 → seqtree-0.6.1}/src/trie.hpp +0 -0
|
@@ -3,6 +3,17 @@
|
|
|
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.1] — 2026-07-30
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- **`gapblock_matrix`'s out-of-alphabet error named only the bad symbol**, not which sequence it
|
|
11
|
+
came from (`"symbol '_' is not in the alphabet"`) — unhelpful when a single malformed row (e.g.
|
|
12
|
+
a `junction_aa` containing a legacy out-of-frame marker) is buried in a batch of hundreds of
|
|
13
|
+
thousands. The message now names the side, index, and offending string:
|
|
14
|
+
`"queries[42] ('CASSIRS_YEQYF'): symbol '_' is not in the alphabet"`. No change to which symbols
|
|
15
|
+
are accepted (still the standard 20 + B/Z/X/* for `alphabet="aa"`).
|
|
16
|
+
|
|
6
17
|
## [0.6.0] — 2026-07-17
|
|
7
18
|
|
|
8
19
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: seqtree
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.1
|
|
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>
|
|
@@ -114,8 +114,11 @@ needs a C++17 compiler and CMake (pulled in automatically by the build).
|
|
|
114
114
|
|
|
115
115
|
## Build from source
|
|
116
116
|
|
|
117
|
+
Needs [uv](https://docs.astral.sh/uv/) (`brew install uv`); `setup.sh` uses it for the venv and
|
|
118
|
+
the editable install.
|
|
119
|
+
|
|
117
120
|
```fish
|
|
118
|
-
bash setup.sh #
|
|
121
|
+
bash setup.sh # uv-managed .venv + editable install
|
|
119
122
|
bash setup.sh --tests # + pytest
|
|
120
123
|
bash setup.sh --bench # + benchmark deps (huggingface_hub, psutil)
|
|
121
124
|
```
|
|
@@ -80,8 +80,11 @@ needs a C++17 compiler and CMake (pulled in automatically by the build).
|
|
|
80
80
|
|
|
81
81
|
## Build from source
|
|
82
82
|
|
|
83
|
+
Needs [uv](https://docs.astral.sh/uv/) (`brew install uv`); `setup.sh` uses it for the venv and
|
|
84
|
+
the editable install.
|
|
85
|
+
|
|
83
86
|
```fish
|
|
84
|
-
bash setup.sh #
|
|
87
|
+
bash setup.sh # uv-managed .venv + editable install
|
|
85
88
|
bash setup.sh --tests # + pytest
|
|
86
89
|
bash setup.sh --bench # + benchmark deps (huggingface_hub, psutil)
|
|
87
90
|
```
|
|
@@ -237,7 +237,7 @@ Count it in the control.
|
|
|
237
237
|
4. OLGA generates from `P_gen`, which is **not** the post-selection background `P_0`. Do not use
|
|
238
238
|
an OLGA sample as the null for an operational cutoff.
|
|
239
239
|
5. Rebuild after pulling: a stale `_core.so` has silently shadowed new Python-visible C++ methods
|
|
240
|
-
more than once (`pip install -e .`).
|
|
240
|
+
more than once (`bash setup.sh`, or `uv pip install -e .`).
|
|
241
241
|
|
|
242
242
|
## Layering
|
|
243
243
|
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
namespace seqtree {
|
|
10
10
|
namespace {
|
|
11
11
|
|
|
12
|
-
std::vector<uint8_t> encode(const Codec& c, const std::string& s) {
|
|
12
|
+
std::vector<uint8_t> encode(const Codec& c, const std::string& s, const char* label, size_t idx) {
|
|
13
13
|
std::vector<uint8_t> out(s.size());
|
|
14
14
|
for (size_t i = 0; i < s.size(); ++i) {
|
|
15
15
|
uint8_t v = c.encode(s[i]);
|
|
16
16
|
if (v == Codec::kInvalid)
|
|
17
|
-
throw std::invalid_argument(std::string("
|
|
18
|
-
"' is not in the alphabet");
|
|
17
|
+
throw std::invalid_argument(label + std::string("[") + std::to_string(idx) + "] ('" + s +
|
|
18
|
+
"'): symbol '" + s[i] + "' is not in the alphabet");
|
|
19
19
|
out[i] = v;
|
|
20
20
|
}
|
|
21
21
|
return out;
|
|
@@ -85,11 +85,11 @@ std::vector<int32_t> gapblock_matrix(const std::vector<std::string>& queries,
|
|
|
85
85
|
std::vector<std::vector<uint8_t>> qc(N), rc(K);
|
|
86
86
|
uint32_t longest = 0;
|
|
87
87
|
for (size_t i = 0; i < N; ++i) {
|
|
88
|
-
qc[i] = encode(codec, queries[i]);
|
|
88
|
+
qc[i] = encode(codec, queries[i], "queries", i);
|
|
89
89
|
longest = std::max<uint32_t>(longest, uint32_t(qc[i].size()));
|
|
90
90
|
}
|
|
91
91
|
for (size_t k = 0; k < K; ++k) {
|
|
92
|
-
rc[k] = encode(codec, refs[k]);
|
|
92
|
+
rc[k] = encode(codec, refs[k], "refs", k);
|
|
93
93
|
longest = std::max<uint32_t>(longest, uint32_t(rc[k].size()));
|
|
94
94
|
}
|
|
95
95
|
|
|
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
|