Skip to content
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
- **How it affects the project**

## Testing
<!-- List exact validation commands and their results, e.g. `make check` passed -->
<!-- List exact validation commands and their results, e.g. `make check`: passed -->
- **Commands run and results**
- **Unit tests added/updated**
- **Integration tests added/updated**
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,21 +114,21 @@ uv run pre-commit install --install-hooks

Hooks are split across two stages so that committing stays cheap while the checks that most often break CI still run before anything leaves your machine.

On every **commit**fast, auto-fixing:
On every **commit**, fast and auto-fixing:

- `ruff`: fixes lint issues where possible.
- `ruff-format`: formats Python files.
- `cargo-fmt`: runs `cargo fmt --check --manifest-path rust/Cargo.toml`.
- `uv-lock-check`: runs `uv lock --check` when `pyproject.toml` or `uv.lock` changes, so a dependency edit that was never relocked fails here instead of as an opaque CI sync error.

On every **push** the whole-repo gates:
On every **push**, the whole-repo gates:

- `pyright`: the same type check CI runs.
- `cargo-clippy`: all targets, warnings denied.

The ruff hooks cover the **whole tree**, matching CI's `ruff check .`. They used to be scoped to `src/` and `tests/`, which meant `examples/` could only ever fail in CI.

The full pytest suite and `cargo test` are deliberately in neither stage they rebuild the Rust extension, and CI shards them across four runners far faster than a local serial run. Use `make check` when you want everything locally.
The full pytest suite and `cargo test` are deliberately in neither stage; they rebuild the Rust extension, and CI shards them across four runners far faster than a local serial run. Use `make check` when you want everything locally.

## Running subsets

Expand Down
44 changes: 22 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
[![License](https://img.shields.io/pypi/l/tablassert.svg)](https://github.com/SkyeAv/Tablassert/blob/main/LICENSE)
[![Docs](https://img.shields.io/github/deployments/SkyeAv/Tablassert/github-pages?label=docs)](https://skyeav.github.io/Tablassert/)

> Extract knowledge assertions from tabular data into NCATS Translator-compliant KGX NDJSON
> Extract knowledge assertions from tabular data into NCATS Translator-compliant KGX NDJSON,
> declaratively, with entity resolution built in and optional quality control.

Tablassert turns biomedical spreadsheets (Excel, CSV, TSV) into knowledge graphs ready for NCATS
Translator. Declare how your columns map to subjectpredicateobject statements in YAML; Tablassert
Translator. Declare how your columns map to subject-predicate-object statements in YAML; Tablassert
resolves free text to standard CURIEs, attaches provenance and statistical annotations, and emits
KGX-compliant nodes and edges.

**[Full Documentation](https://skyeav.github.io/Tablassert/)** installation guides, tutorial,
**[Full Documentation](https://skyeav.github.io/Tablassert/)**: installation guides, tutorial,
configuration reference, and API docs.

## Quick Start
Expand All @@ -23,7 +23,7 @@ configuration reference, and API docs.
pip install tablassert
```

Given a CSV of genedisease associations with p-values and sample sizes, declare the mapping in a
Given a CSV of gene-disease associations with p-values and sample sizes, declare the mapping in a
table config (`table.yaml`):

```yaml
Expand Down Expand Up @@ -77,7 +77,7 @@ Build the knowledge graph:
tablassert build-kg graph.yaml
```

Output is one JSON object per linenodes with Biolink categories, edges with annotations:
Output is one JSON object per line: nodes with Biolink categories, edges with annotations.

```json
{"id":"HGNC:11998","name":"TP53","category":["biolink:Gene"],"taxon":"NCBITaxon:9606"}
Expand All @@ -92,15 +92,15 @@ See the [Tutorial](https://skyeav.github.io/Tablassert/tutorial/) for the full w

## Key Features

- **Declarative YAML configuration** define data transformations without writing code
- **Built-in entity resolution** map free text to genes, diseases, and chemicals with standard
- **Declarative YAML configuration**: define data transformations without writing code
- **Built-in entity resolution**: map free text to genes, diseases, and chemicals with standard
CURIEs, taxonomic filtering, and provenance, backed by an embedded redb database
- **Optional quality control** a four-stage audit (exact → fuzzy → abbreviation → SapBERT embeddings) flags
- **Optional quality control**: a four-stage audit (exact → fuzzy → abbreviation → SapBERT embeddings) flags
low-confidence mappings
- **KGX compliance** emits NCATS Translator-compatible node/edge NDJSON with Biolink categories
- **KGX compliance**: emits NCATS Translator-compatible node/edge NDJSON with Biolink categories
and predicates
- **Autonomous agent** `tablassert agent` derives, builds, and refines configs for whole papers
- **Performance & reproducibility** lazy Polars pipelines and a deterministic UV-based
- **Autonomous agent**: `tablassert agent` derives, builds, and refines configs for whole papers
- **Performance & reproducibility**: lazy Polars pipelines and a deterministic UV-based
development environment

## Installation
Expand Down Expand Up @@ -142,19 +142,19 @@ results = resolve_many(
# [{"original_gene": "TP53", "gene": "HGNC:11998", "gene_name": "TP53", ...}, ...]
```

Point `resolve_many()` at a fullmap database to resolve any iterable of entity strings to CURIEs
Point `resolve_many()` at a fullmap database to resolve any iterable of entity strings to CURIEs,
no LazyFrame setup or NLP preprocessing required. See the
[Batch Resolution API](https://skyeav.github.io/Tablassert/api/lib/) for the full reference.

## Documentation

- **[Installation](https://skyeav.github.io/Tablassert/installation/)** install methods, extras, and development setup
- **[Tutorial](https://skyeav.github.io/Tablassert/tutorial/)** step-by-step example with synthetic data
- **[CLI Reference](https://skyeav.github.io/Tablassert/cli/)** complete command-line flag reference
- **[Use Case Gallery](https://skyeav.github.io/Tablassert/examples/)** real-world configuration patterns
- **[Configuration](https://skyeav.github.io/Tablassert/configuration/graph/)** graph and table configuration reference
- **[Agent](https://skyeav.github.io/Tablassert/agent/)** the autonomous agent pipeline
- **[API Reference](https://skyeav.github.io/Tablassert/api/fullmap/)** core functions documentation
- **[Installation](https://skyeav.github.io/Tablassert/installation/)**: install methods, extras, and development setup
- **[Tutorial](https://skyeav.github.io/Tablassert/tutorial/)**: step-by-step example with synthetic data
- **[CLI Reference](https://skyeav.github.io/Tablassert/cli/)**: complete command-line flag reference
- **[Use Case Gallery](https://skyeav.github.io/Tablassert/examples/)**: real-world configuration patterns
- **[Configuration](https://skyeav.github.io/Tablassert/configuration/graph/)**: graph and table configuration reference
- **[Agent](https://skyeav.github.io/Tablassert/agent/)**: the autonomous agent pipeline
- **[API Reference](https://skyeav.github.io/Tablassert/api/fullmap/)**: core functions documentation

## Developing

Expand Down Expand Up @@ -182,6 +182,6 @@ described in:

## Contributors

- [Skye Lane Goetz](mailto:[email protected]) Institute for Systems Biology
- [Gwênlyn Glusman](mailto:[email protected]) Institute for Systems Biology
- Jared C. Roach Institute for Systems Biology
- [Skye Lane Goetz](mailto:[email protected]), Institute for Systems Biology
- [Gwênlyn Glusman](mailto:[email protected]), Institute for Systems Biology
- Jared C. Roach, Institute for Systems Biology
Loading
Loading