Isotopic and paleoecological data standardisation middleware
Project description
IsoMap
Isotopic and paleoecological data standardisation middleware.
IsoMap is an open-source desktop application that automates the standardisation, validation, and export of legacy isotopic and paleoecological datasets for submission to centralised repositories (Neotoma, IsoArcH, PANGAEA, NOAA NCEI, LiPD).
📖 User Guide — full walkthrough with screenshots, workflow steps, and troubleshooting. 📋 Changelog — version history and release notes.
Features
IsoMap provides a 6-tab wizard interface backed by 8 processing engines.
Implementation status is marked next to each engine — several engines
are partial stubs; see CHANGELOG.md for the full list of known
limitations.
- Import Engine ✅: CSV and Excel spreadsheets with automatic encoding detection and type inference.
- Column Mapping Engine ✅: 6-stage fallback pipeline (exact → preferences → fuzzy → semantic embeddings → Valentine ensemble → distribution profiling) to map source columns to 5 target repository schemas. Valentine is now correctly wired against the ≥1.0 API; the semantic stage requires the optional
[ml]extras (SciBERT ONNX, ~400 MB). - Chronology Engine ✅: Auto-detects and normalises uncalibrated/calibrated dates to
cal_BPwith 1950 CE anchor. Note: this is format normalisation only — no radiocarbon calibration (IntCal20 etc.) is performed. - Spatial Verification Engine ✅: Cleans coordinates, displays on interactive Leaflet map, exports bounding box. EPSG:4326 only — no UTM/other CRS transformation yet.
- Validation Engine ✅: Pandera constraint checking with row-level error tracking against schema definitions. Required-field presence is enforced.
- Export Engine ⚠️ partial: CSV, Excel, GeoJSON, JSON, PANGAEA, NOAA, RO-Crate, LaTeX data paper all produce output. LiPD export is non-conformant (missing required LiPD v1.3 fields;
pylipd.load()rejects it). PANGAEA and NOAA exports are template stubs with[INSERT_*]placeholders, not submission-ready files. - Provenance Engine ⚠️ partial:
ProvenanceTrackerclass exists and is unit-tested but is not wired into the RPC pipeline —main.pydoesn't instantiate it. Produces a JSON audit log, not PROV-O RDF as the original scope doc describes. - Automated Data Papers ✅: Jinja2 ESSD-compliant LaTeX manuscript generation.
Technology Stack
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| Frontend | React 19, Vite 7, TypeScript, Leaflet |
| Backend (sidecar) | Python 3.12+, Pandas, Pandera, GeoPandas |
| ML/NLP | SciBERT ONNX (Optimum), RapidFuzz, Valentine |
| Testing | Pytest (backend), Playwright (E2E) |
Getting Started
Prerequisites
- Rust 1.70+ — rustup.rs
- Python 3.12+ —
pip install -e ".[dev]" - Node.js 20+ with npm
Development
cd ui && npm install # Frontend dependencies
npm run tauri dev # Full desktop app with hot-reload
npm run dev # Vite frontend only (no Tauri)
cd src-tauri && cargo build # Rust backend only
Testing
pytest tests/ # Python backend (36 tests)
cd ui && npx playwright test # E2E browser tests (6 tests)
Production Build
./scripts/build-sidecar.sh # PyInstaller standalone binary
cd ui && npm run tauri build # Full desktop app bundle
Bundles output to ui/src-tauri/target/release/bundle/.
Supported Repositories
| Schema | Repository | Fields | Required Fields |
|---|---|---|---|
neotoma_v2 |
Neotoma | 11 | SiteName, Latitude, Longitude, TaxonName, Value |
isoarch_v1 |
IsoArcH | 10 | site_name, latitude, longitude, sample_id, material, d13c |
pangaea |
PANGAEA | 20 | Event, Latitude, Longitude, Parameter, Value, Unit |
noaa |
NOAA NCEI | 24 | SiteName, Latitude, Longitude, Proxy, Proxy_Value, Proxy_Unit |
lipd |
LiPD v1.3 | 24 | dataSetName, SiteName, Latitude, Longitude, PaleoData_VariableName, PaleoData_Value, PaleoData_Unit |
Add custom schemas in data/schemas/ following the JSON Schema format.
Architecture
React invoke() → Rust Tauri commands → sidecar_rpc() → shell wrapper → Python JSON-RPC
The Rust layer (ui/src-tauri/src/lib.rs) exposes 9 Tauri commands that serialise
parameters to JSON-RPC and forward them to the Python sidecar (src/isomap/main.py)
via stdin/stdout. The sidecar processes the request and returns a JSON-RPC response.
Key Files
| File | Purpose |
|---|---|
ui/src-tauri/src/lib.rs |
9 Tauri commands + sidecar_rpc() JSON-RPC helper |
ui/src-tauri/tauri.conf.json |
App config, window, sidecar external binary |
ui/src-tauri/binaries/isomap-sidecar* |
Platform-specific sidecar wrappers |
src/isomap/main.py |
Python JSON-RPC server (stdin/stdout or CLI mode) |
ui/src/api/sidecar.ts |
Frontend API layer (invoke() calls) |
ui/src/App.tsx |
Main React app with shared wizard state |
data/schemas/*.json |
Repository schema definitions |
scripts/build-sidecar.sh |
PyInstaller sidecar binary builder |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file isomap_desktop-0.3.0.tar.gz.
File metadata
- Download URL: isomap_desktop-0.3.0.tar.gz
- Upload date:
- Size: 2.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5e383b8d51b87474e93f514ba9fba626fdab645914075e396cbf80a11566b7d
|
|
| MD5 |
e32d61c6a7e44cc44e4a8e6e6754984e
|
|
| BLAKE2b-256 |
4974566e606fe433f0cf8ecbdce1f06df66ab23a2c4cdc5ce071f46380143cef
|
Provenance
The following attestation bundles were made for isomap_desktop-0.3.0.tar.gz:
Publisher:
release.yml on mabo-du/IsoMap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
isomap_desktop-0.3.0.tar.gz -
Subject digest:
e5e383b8d51b87474e93f514ba9fba626fdab645914075e396cbf80a11566b7d - Sigstore transparency entry: 2002928273
- Sigstore integration time:
-
Permalink:
mabo-du/IsoMap@d3d5476b0d9324c5f6cabda12544b07ed504aeae -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/mabo-du
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d3d5476b0d9324c5f6cabda12544b07ed504aeae -
Trigger Event:
push
-
Statement type:
File details
Details for the file isomap_desktop-0.3.0-py3-none-any.whl.
File metadata
- Download URL: isomap_desktop-0.3.0-py3-none-any.whl
- Upload date:
- Size: 52.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8580cedd73c99bc6e65a9d3523ce7b801701fe5ed91c7025740d4907afa9901
|
|
| MD5 |
1653c0f476a8fd6d3ba72bdfc5a4695f
|
|
| BLAKE2b-256 |
ea48afd27366b0b5b5f42801d458385d0192c6f451eae763f15ab6b59822e7bb
|
Provenance
The following attestation bundles were made for isomap_desktop-0.3.0-py3-none-any.whl:
Publisher:
release.yml on mabo-du/IsoMap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
isomap_desktop-0.3.0-py3-none-any.whl -
Subject digest:
f8580cedd73c99bc6e65a9d3523ce7b801701fe5ed91c7025740d4907afa9901 - Sigstore transparency entry: 2002928351
- Sigstore integration time:
-
Permalink:
mabo-du/IsoMap@d3d5476b0d9324c5f6cabda12544b07ed504aeae -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/mabo-du
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d3d5476b0d9324c5f6cabda12544b07ed504aeae -
Trigger Event:
push
-
Statement type: