Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4
Expand All @@ -23,7 +23,7 @@ jobs:
run: uv python install ${{ matrix.python-version }}

- name: Install dependencies
run: uv sync --dev
run: uv sync --group dev --all-extras

- name: Run tests
run: uv run pytest tests/ -v --tb=short
Expand All @@ -40,7 +40,7 @@ jobs:
run: uv python install 3.12

- name: Install dependencies
run: uv sync --dev
run: uv sync --group dev --all-extras

- name: Run ruff check
run: uv run ruff check .
Expand All @@ -65,6 +65,14 @@ jobs:
- name: Check build artifacts
run: uvx twine check dist/*

- name: Smoke test the core wheel
run: |
uv venv /tmp/tablint-smoke
uv pip install --python /tmp/tablint-smoke/bin/python dist/*.whl
status=0
/tmp/tablint-smoke/bin/tablint scan datasets/train.csv --target Survived --preset gate --fail-on critical --json || status=$?
test "$status" -eq 2

web-check:
runs-on: ubuntu-latest
steps:
Expand Down
13 changes: 11 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,14 @@ jobs:
- name: Build package
run: uv build

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/*

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
# with:
# repository-url: https://upload.pypi.org/legacy/ # Optional: defaults to PyPI

github-release:
runs-on: ubuntu-latest
Expand All @@ -37,6 +41,11 @@ jobs:
contents: write
steps:
- uses: actions/checkout@v4
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ build/
dist/

hashprep-dev.json
tablecheck-dev.json
datalint-dev.json
tablint-dev.json
todo.md
test.json

Expand Down
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.0b1] - 2026-10-23

Project renamed from `hashprep` to `tablint`. This beta ships the training-gate behaviour previously developed as hashprep 0.2.0.

### Changed
- Distribution name, import package, and CLI are `tablint`.
- `HashPrepConfig` is now `TablintConfig`.
- Report filenames use the `_tablint_report` suffix.

## [0.2.0] - 2026-10-20

### Breaking
- `critical` means a training blocker. Non-normality is always a warning. Drift is critical only when the shift is large, not merely when the p-value is small.
- `DatasetAnalyzer` and `tablint scan` / `details` default to the `gate` preset. `tablint report` defaults to `profile`. Pass `preset="profile"` or `--preset profile` for the previous full catalogue.
- Sampling is off unless `--sample-size` or `auto_sample=True` is set.
- `scan --json` now uses `schema_version`, `critical_count`, `warning_count`, `total_issues`, `issues`, and `sampling_info`. `details --json` prints the same object.
- F-statistic leakage thresholds are ignored. Leakage uses correlation, bias-corrected Cramér's V, or correlation ratio.
- Plots, HTML, and PDF require `pip install "tablint[reports]"`. Parquet requires `pip install "tablint[parquet]"`.

### Added
- Column roles (`target`, `identifier`, `boolean`, `categorical`, `numeric`, `datetime`, `text`) shared by every check.
- `--preset`, `--fail-on`, and Parquet input.
- `statistic` and `effect_size` on each issue.
- Generated code escapes column names. Sklearn steps with the same transformation are grouped. Outlier clipping is a real pre-pipeline function.

## [0.1.0] - 2026-05-22

### Added
Expand Down
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributing to HashPrep
# Contributing to Tablint

First off – thank you for considering contributing to HashPrep 💜
First off – thank you for considering contributing to Tablint 💜
Your contributions help make this platform more useful for the ML community!

## How to Contribute
Expand All @@ -12,8 +12,8 @@ For new contributors, we suggest starting with Easy tasks.

### Fork and clone the repository
```bash
git clone https://github.com/cachevector/hashprep.git
cd hashprep
git clone https://github.com/cachevector/tablint.git
cd tablint
```

### Create a virtual environment
Expand All @@ -26,13 +26,13 @@ source .venv/bin/activate
### Install in development mode

```bash
uv sync --extra dev
uv sync --group dev --all-extras
```

<!-- To keep your fork updated:

```bash
git remote add upstream https://github.com/cachevector/hashprep.git
git remote add upstream https://github.com/cachevector/tablint.git
git fetch upstream
git branch --set-upstream-to=upstream/main main
```
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 HashPrep
Copyright (c) 2025 Tablint

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
include README.md LICENSE
recursive-include hashprep *.py
recursive-include tablint *.py

prune datasets
prune examples
Expand Down
Loading
Loading