Skip to main content

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_BP with 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: ProvenanceTracker class exists and is unit-tested but is not wired into the RPC pipelinemain.py doesn'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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

isomap_desktop-0.3.0.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

isomap_desktop-0.3.0-py3-none-any.whl (52.4 kB view details)

Uploaded Python 3

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

Hashes for isomap_desktop-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e5e383b8d51b87474e93f514ba9fba626fdab645914075e396cbf80a11566b7d
MD5 e32d61c6a7e44cc44e4a8e6e6754984e
BLAKE2b-256 4974566e606fe433f0cf8ecbdce1f06df66ab23a2c4cdc5ce071f46380143cef

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomap_desktop-0.3.0.tar.gz:

Publisher: release.yml on mabo-du/IsoMap

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for isomap_desktop-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f8580cedd73c99bc6e65a9d3523ce7b801701fe5ed91c7025740d4907afa9901
MD5 1653c0f476a8fd6d3ba72bdfc5a4695f
BLAKE2b-256 ea48afd27366b0b5b5f42801d458385d0192c6f451eae763f15ab6b59822e7bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomap_desktop-0.3.0-py3-none-any.whl:

Publisher: release.yml on mabo-du/IsoMap

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page