tablassert 18.0.0__tar.gz → 19.0.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.
Files changed (49) hide show
  1. {tablassert-18.0.0 → tablassert-19.0.0}/PKG-INFO +11 -10
  2. {tablassert-18.0.0 → tablassert-19.0.0}/README.md +7 -7
  3. {tablassert-18.0.0 → tablassert-19.0.0}/pyproject.toml +7 -4
  4. {tablassert-18.0.0 → tablassert-19.0.0}/rust/Cargo.lock +11 -0
  5. {tablassert-18.0.0 → tablassert-19.0.0}/rust/Cargo.toml +5 -0
  6. {tablassert-18.0.0 → tablassert-19.0.0}/rust/src/fullmap.rs +392 -45
  7. {tablassert-18.0.0 → tablassert-19.0.0}/rust/src/lib.rs +15 -2
  8. tablassert-19.0.0/rust/src/nlp.rs +331 -0
  9. {tablassert-18.0.0 → tablassert-19.0.0}/rust/tests/build_golden.rs +136 -19
  10. {tablassert-18.0.0 → tablassert-19.0.0}/rust/tests/common/mod.rs +39 -3
  11. {tablassert-18.0.0 → tablassert-19.0.0}/rust/tests/extract_prebuilt.rs +149 -9
  12. tablassert-19.0.0/rust/tests/fixtures/nlp_golden.tsv +10 -0
  13. tablassert-19.0.0/rust/tests/nlp_golden.rs +32 -0
  14. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/agent.py +536 -36
  15. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/biolink.py +72 -6
  16. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/cli.py +660 -72
  17. tablassert-19.0.0/src/tablassert/cli_entry.py +13 -0
  18. tablassert-19.0.0/src/tablassert/data/experimental_taxa.yaml +512 -0
  19. tablassert-19.0.0/src/tablassert/distill.py +343 -0
  20. tablassert-19.0.0/src/tablassert/distill_reward.py +1417 -0
  21. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/errors.py +163 -1
  22. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/extras.py +11 -8
  23. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/fullmap.py +42 -10
  24. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/graph_target.py +1 -2
  25. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/lib.py +81 -2
  26. tablassert-19.0.0/src/tablassert/log.py +70 -0
  27. tablassert-19.0.0/src/tablassert/net.py +693 -0
  28. tablassert-19.0.0/src/tablassert/nlp.py +97 -0
  29. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/progress.py +0 -21
  30. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/rs.pyi +11 -2
  31. tablassert-19.0.0/src/tablassert/runcache.py +802 -0
  32. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/study.py +38 -3
  33. tablassert-18.0.0/src/tablassert/distill.py +0 -108
  34. tablassert-18.0.0/src/tablassert/log.py +0 -126
  35. tablassert-18.0.0/src/tablassert/nlp.py +0 -50
  36. {tablassert-18.0.0 → tablassert-19.0.0}/LICENSE +0 -0
  37. {tablassert-18.0.0 → tablassert-19.0.0}/rust/examples/count_tables.rs +0 -0
  38. {tablassert-18.0.0 → tablassert-19.0.0}/rust/src/json.rs +0 -0
  39. {tablassert-18.0.0 → tablassert-19.0.0}/rust/src/ndjson.rs +0 -0
  40. {tablassert-18.0.0 → tablassert-19.0.0}/rust/src/uuid.rs +0 -0
  41. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/__init__.py +0 -0
  42. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/_lazy.py +0 -0
  43. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/coerce.py +0 -0
  44. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/enums.py +0 -0
  45. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/ingests.py +0 -0
  46. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/models.py +0 -0
  47. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/qc.py +0 -0
  48. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/rig.py +0 -0
  49. {tablassert-18.0.0 → tablassert-19.0.0}/src/tablassert/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tablassert
3
- Version: 18.0.0
3
+ Version: 19.0.0
4
4
  Classifier: License :: OSI Approved :: Apache Software License
5
5
  Classifier: Development Status :: 5 - Production/Stable
6
6
  Classifier: Intended Audience :: Science/Research
@@ -27,12 +27,12 @@ Requires-Dist: polars>=1.39.0
27
27
  Requires-Dist: rapidfuzz>=3.14.3
28
28
  Requires-Dist: pydantic>=2.12.5
29
29
  Requires-Dist: pyyaml>=6.0.3
30
- Requires-Dist: cyclopts>=1.0.0
31
- Requires-Dist: rich>=13.0.0
32
30
  Requires-Dist: fastexcel>=0.20.2
33
31
  Requires-Dist: smolagents>=1.26.0 ; extra == 'agent'
34
32
  Requires-Dist: litellm>=1.93.0 ; extra == 'agent'
35
33
  Requires-Dist: aria2==0.0.1b0 ; extra == 'aria2'
34
+ Requires-Dist: cyclopts>=1.0.0 ; extra == 'cli'
35
+ Requires-Dist: rich>=13.0.0 ; extra == 'cli'
36
36
  Requires-Dist: datasets>=3.0.0 ; extra == 'distill'
37
37
  Requires-Dist: loguru>=0.7.3 ; extra == 'log'
38
38
  Requires-Dist: dspy>=3.2.1 ; extra == 'optimize'
@@ -41,6 +41,7 @@ Requires-Dist: sentence-transformers>=5.3.0 ; extra == 'qc'
41
41
  Requires-Dist: polars[rtcompat]>=1.40.1 ; extra == 'rt'
42
42
  Provides-Extra: agent
43
43
  Provides-Extra: aria2
44
+ Provides-Extra: cli
44
45
  Provides-Extra: distill
45
46
  Provides-Extra: log
46
47
  Provides-Extra: optimize
@@ -60,7 +61,6 @@ Project-URL: Source, https://github.com/SkyeAv/Tablassert
60
61
  # Tablassert
61
62
 
62
63
  [![PyPI](https://img.shields.io/pypi/v/tablassert.svg)](https://pypi.org/project/tablassert/)
63
- [![Downloads](https://img.shields.io/pypi/dm/tablassert.svg)](https://pypi.org/project/tablassert/)
64
64
  [![Python](https://img.shields.io/pypi/pyversions/tablassert.svg)](https://pypi.org/project/tablassert/)
65
65
  [![CI](https://github.com/SkyeAv/Tablassert/actions/workflows/ci.yml/badge.svg)](https://github.com/SkyeAv/Tablassert/actions/workflows/ci.yml)
66
66
  [![License](https://img.shields.io/pypi/l/tablassert.svg)](https://github.com/SkyeAv/Tablassert/blob/main/LICENSE)
@@ -170,23 +170,24 @@ See the [Tutorial](https://skyeav.github.io/Tablassert/tutorial/) for the full w
170
170
  pip install tablassert
171
171
  ```
172
172
 
173
- Or with uv: `uv tool install tablassert`. The base install builds knowledge graphs from
174
- CSV/TSV/Excel sources; optional extras add runtime and pipeline capabilities:
173
+ Or with uv: `uv tool install "tablassert[cli]"`. The base install provides the Python API;
174
+ install `[cli]` to use the `tablassert` command and optional extras for additional runtime and pipeline capabilities:
175
175
 
176
176
  | Extra | Adds | Install |
177
177
  | ----- | ---- | ------- |
178
+ | `cli` | `tablassert` command and rich terminal progress | `pip install "tablassert[cli]"` |
178
179
  | `rt` | CPU-compatible Polars runtime | `pip install "tablassert[rt]"` |
179
- | `aria2` | bundled aria2c downloader for `build-fullmap --aria2c` (Linux/Windows wheels only) | `pip install "tablassert[aria2]"` |
180
+ | `aria2` | bundled aria2c downloader, used automatically by `build-fullmap` when installed (Linux/Windows wheels only) | `pip install "tablassert[aria2]"` |
180
181
  | `qc` | four-stage QC audit (exact → fuzzy → abbreviation → SapBERT embeddings) | `pip install "tablassert[qc]"` |
181
182
  | `agent` | autonomous agent (smolagents, litellm, article/table context) | `pip install "tablassert[agent]"` |
182
183
  | `optimize` | GEPA prompt optimization for `agent --optimize` (dspy) | `pip install "tablassert[optimize]"` |
183
184
  | `distill` | distillation dataset export (`tablassert distill-export`, HF `datasets`) | `pip install "tablassert[distill]"` |
184
185
  | `log` | loguru-backed file/progress logging (rotation, enqueue) | `pip install "tablassert[log]"` |
185
186
 
186
- QC is opt-in at build time (`build-kg --qc`). Reaching a feature whose extra is not installed never
187
+ The `tablassert` command requires `[cli]`; without it, the console launcher reports the exact install command. QC is opt-in at build time (`build-kg --qc`). Reaching a feature whose extra is not installed never
187
188
  produces a bare `ModuleNotFoundError`: the failure names the missing package and the exact install
188
189
  command, and for `build-kg --qc` and `tablassert agent` it arrives before the run starts rather than
189
- partway through. Logging is the exception: without the `log` extra it degrades to a stdlib fallback
190
+ partway through. Logging is the exception: without the `log` extra Tablassert produces no logs
190
191
  instead of failing. See the
191
192
  [Installation guide](https://skyeav.github.io/Tablassert/installation/) for the full matrix and the
192
193
  [CLI Reference](https://skyeav.github.io/Tablassert/cli/) for every flag.
@@ -226,7 +227,7 @@ no LazyFrame setup or NLP preprocessing required. See the
226
227
  ## Developing
227
228
 
228
229
  ```bash
229
- uv sync --group dev --extra qc --extra log
230
+ uv sync --group dev --extra cli --extra qc --extra log
230
231
  uv run maturin develop --manifest-path rust/Cargo.toml
231
232
  make check
232
233
  ```
@@ -1,7 +1,6 @@
1
1
  # Tablassert
2
2
 
3
3
  [![PyPI](https://img.shields.io/pypi/v/tablassert.svg)](https://pypi.org/project/tablassert/)
4
- [![Downloads](https://img.shields.io/pypi/dm/tablassert.svg)](https://pypi.org/project/tablassert/)
5
4
  [![Python](https://img.shields.io/pypi/pyversions/tablassert.svg)](https://pypi.org/project/tablassert/)
6
5
  [![CI](https://github.com/SkyeAv/Tablassert/actions/workflows/ci.yml/badge.svg)](https://github.com/SkyeAv/Tablassert/actions/workflows/ci.yml)
7
6
  [![License](https://img.shields.io/pypi/l/tablassert.svg)](https://github.com/SkyeAv/Tablassert/blob/main/LICENSE)
@@ -111,23 +110,24 @@ See the [Tutorial](https://skyeav.github.io/Tablassert/tutorial/) for the full w
111
110
  pip install tablassert
112
111
  ```
113
112
 
114
- Or with uv: `uv tool install tablassert`. The base install builds knowledge graphs from
115
- CSV/TSV/Excel sources; optional extras add runtime and pipeline capabilities:
113
+ Or with uv: `uv tool install "tablassert[cli]"`. The base install provides the Python API;
114
+ install `[cli]` to use the `tablassert` command and optional extras for additional runtime and pipeline capabilities:
116
115
 
117
116
  | Extra | Adds | Install |
118
117
  | ----- | ---- | ------- |
118
+ | `cli` | `tablassert` command and rich terminal progress | `pip install "tablassert[cli]"` |
119
119
  | `rt` | CPU-compatible Polars runtime | `pip install "tablassert[rt]"` |
120
- | `aria2` | bundled aria2c downloader for `build-fullmap --aria2c` (Linux/Windows wheels only) | `pip install "tablassert[aria2]"` |
120
+ | `aria2` | bundled aria2c downloader, used automatically by `build-fullmap` when installed (Linux/Windows wheels only) | `pip install "tablassert[aria2]"` |
121
121
  | `qc` | four-stage QC audit (exact → fuzzy → abbreviation → SapBERT embeddings) | `pip install "tablassert[qc]"` |
122
122
  | `agent` | autonomous agent (smolagents, litellm, article/table context) | `pip install "tablassert[agent]"` |
123
123
  | `optimize` | GEPA prompt optimization for `agent --optimize` (dspy) | `pip install "tablassert[optimize]"` |
124
124
  | `distill` | distillation dataset export (`tablassert distill-export`, HF `datasets`) | `pip install "tablassert[distill]"` |
125
125
  | `log` | loguru-backed file/progress logging (rotation, enqueue) | `pip install "tablassert[log]"` |
126
126
 
127
- QC is opt-in at build time (`build-kg --qc`). Reaching a feature whose extra is not installed never
127
+ The `tablassert` command requires `[cli]`; without it, the console launcher reports the exact install command. QC is opt-in at build time (`build-kg --qc`). Reaching a feature whose extra is not installed never
128
128
  produces a bare `ModuleNotFoundError`: the failure names the missing package and the exact install
129
129
  command, and for `build-kg --qc` and `tablassert agent` it arrives before the run starts rather than
130
- partway through. Logging is the exception: without the `log` extra it degrades to a stdlib fallback
130
+ partway through. Logging is the exception: without the `log` extra Tablassert produces no logs
131
131
  instead of failing. See the
132
132
  [Installation guide](https://skyeav.github.io/Tablassert/installation/) for the full matrix and the
133
133
  [CLI Reference](https://skyeav.github.io/Tablassert/cli/) for every flag.
@@ -167,7 +167,7 @@ no LazyFrame setup or NLP preprocessing required. See the
167
167
  ## Developing
168
168
 
169
169
  ```bash
170
- uv sync --group dev --extra qc --extra log
170
+ uv sync --group dev --extra cli --extra qc --extra log
171
171
  uv run maturin develop --manifest-path rust/Cargo.toml
172
172
  make check
173
173
  ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tablassert"
3
- version = "18.0.0"
3
+ version = "19.0.0"
4
4
  description = "Extract knowledge assertions from tabular data into NCATS Translator-compliant KGX NDJSON — declaratively, with entity resolution and quality control built in."
5
5
  authors = [
6
6
  { name = "Skye Lane Goetz", email = "sgoetz@isbscience.org" }
@@ -52,8 +52,6 @@ dependencies = [
52
52
  "rapidfuzz>=3.14.3",
53
53
  "pydantic>=2.12.5",
54
54
  "pyyaml>=6.0.3",
55
- "cyclopts>=1.0.0",
56
- "rich>=13.0.0",
57
55
  "fastexcel>=0.20.2",
58
56
  ]
59
57
 
@@ -72,11 +70,16 @@ module-name = "tablassert.rs"
72
70
  bindings = "pyo3"
73
71
  manifest-path = "rust/Cargo.toml"
74
72
  features = ["extension-module"]
73
+ include = ["src/tablassert/data/experimental_taxa.yaml"]
75
74
 
76
75
  [project.scripts]
77
- tablassert = "tablassert.cli:APP"
76
+ tablassert = "tablassert.cli_entry:main"
78
77
 
79
78
  [project.optional-dependencies]
79
+ cli = [
80
+ "cyclopts>=1.0.0",
81
+ "rich>=13.0.0",
82
+ ]
80
83
  rt = [
81
84
  "polars[rtcompat]>=1.40.1",
82
85
  ]
@@ -456,6 +456,16 @@ dependencies = [
456
456
  "libc",
457
457
  ]
458
458
 
459
+ [[package]]
460
+ name = "rust-stemmers"
461
+ version = "1.2.0"
462
+ source = "registry+https://github.com/rust-lang/crates.io-index"
463
+ checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54"
464
+ dependencies = [
465
+ "serde",
466
+ "serde_derive",
467
+ ]
468
+
459
469
  [[package]]
460
470
  name = "rustc-hash"
461
471
  version = "1.1.0"
@@ -566,6 +576,7 @@ dependencies = [
566
576
  "rayon",
567
577
  "redb",
568
578
  "rlimit",
579
+ "rust-stemmers",
569
580
  "rustc-hash",
570
581
  "serde",
571
582
  "serde_json",
@@ -35,6 +35,11 @@ rayon = "1"
35
35
  redb = { git = "https://github.com/cberner/redb.git", rev = "a35e7cc86f191d08a444d5973469b34673d586fc", features = ["experimental_cursor"] }
36
36
  rlimit = "0.10"
37
37
  rustc-hash = "1"
38
+ # English (Porter2) stemmer for `nlp::normalize_l1` term normalization: pure
39
+ # Rust (no dictionaries, no C deps) and fast enough for the per-token hot path;
40
+ # it requires already-lowercased input, which the pipeline guarantees by
41
+ # lowercasing the whole term before splitting/stemming.
42
+ rust-stemmers = "1"
38
43
  serde = { version = "1", features = ["derive"] }
39
44
  serde_json = { version = "1", features = ["preserve_order"] }
40
45
  tar = "0.4"