Subsurface data ingestion + structure layer: surfaces, wells, points, polygons — loading, interpolation, statistics.
Project description
petekIO
The subsurface data layer — a Rust library (with optional PyO3 bindings) that turns raw subsurface files into clean, validated, interpreted data: surfaces, wells (trajectories / tops / logs), points, and polygons, with loading, mnemonic and unit normalisation, validation, petrophysical interpretation, interpolation, and statistics.
The pipeline is the point:
ingest → normalize → validate → interpret → characterise
Why build on it
Subsurface data is the unglamorous, error-prone groundwork under every reservoir application: vendor LAS mnemonics, mismatched units, out-of-range samples, cutoffs, gridding that has to honour its control points, uncertainty. petekIO does that work once and behind a stable API, so the application on top stays thin and stays in its own domain:
- The whole path, not just parsing. Files in; normalized, validated, interpreted domain objects out — no re-implementing LAS aliasing, unit harmonisation, petrophysical cutoffs (net pay included), or surface gridding/resampling further up the stack.
- Values know what they are. Results come back in canonical units, each carrying an uncertainty distribution and a provenance flag (measured / interpolated / defaulted) — so downstream code propagates uncertainty rather than re-deriving it.
- A substrate, not a grab-bag. Load a project once into a
GeoDataand operations broadcast across the whole collection. Immutable, strictly layered, fluent. - Rust core, thin Python. Fast and embeddable, with PyO3 bindings that mirror the Rust API.
Install
Rust:
[dependencies]
petekio = "0.2"
Python (PyO3 wheel):
pip install petekio
Quickstart (Python)
Load a project once, then read interpreted results — no parsing or interpolation in your own code:
import petekio
geo = petekio.GeoData(unit="m")
# A surface (IRAP classic) — sample, stats, volumetrics, resample.
top = geo.load_surface("top_res", "surfaces/top_res.irap")
top.stats.mean
top.area_below(2400)
# A multi-bore well: a Petrel export tree (one bore per .wellpath) + logs.
# head/kb are optional — the .wellpath header fills them.
geo.load_well("15/9-A1", files="wells/15_9-A1/")
geo.load_well_tops("WellTops.tops") # Horizon picks → matching well + bore
w = geo.well("15/9-A1")
w.bores() # e.g. ["", "A", "B", "ST2"]
bore = w.sidetrack("A")
bore.log_stats("PHIE").mean # whole-bore curve stats
# Per-zone stats, returned in lithostratigraphic order:
bore.zone_stats("PHIE") # [(zone, Stats), ...]
bore.zone_stats("PHIE", "Top A").mean # one zone directly (None if absent)
geo.strat_order # the field's lithostratigraphic column
Lithostratigraphic ordering
Zones come back in true stratigraphic order, not just measured-depth order.
load_well_tops reads every well in the tops file and merges their relative
orderings into one field-wide column — so a marker that pinches out (zero
thickness) in one well is ordered correctly by a well that develops it.
Geometry is untouched; only the order zones are presented in follows the
column.
Capabilities
| Domain | What you get |
|---|---|
| Surfaces | IRAP-classic load, sample/resample (bilinear), arithmetic, stats, area_below volumetrics, gridding from scattered points (minimum-curvature) |
| Wells | Positioned .wellpath trajectories (MD preserved; minimum-curvature interpolation), multi-bore (sidetracks), LAS logs with mnemonic aliasing, Petrel well-tops, per-zone stats, field-wide lithostratigraphic ordering |
| Points / polygons | IRAP / GeoJSON / CSV load, clip, point-to-surface gridding |
| Project | GeoData substrate — load once, broadcast across the collection; views are read-only filtered subsets |
Built in gates
petekIO grows in gated phases against a locked contract: every public
signature is specified in API.md (a change needs sign-off), and the
design + build roadmap live in SPEC.md.
Status: early development. The public API is locked and the core data path (ingest → normalize → validate → interpret → characterise) is in place; surfaces, multi-bore wells (trajectories / tops / logs), per-zone stats, and lithostratigraphic ordering are landed. Breadth is still filling in — more ingest formats, fluid contacts, richer interpretation.
Documentation
- API.md — the locked public API contract (Rust, mirrored in Python).
- SPEC.md — design constitution + architecture.
- Guides + API reference: the
docs/site (MkDocs Material; published on Read the Docs).
Design at a glance
- Strictly layered, one-way deps:
foundation → algorithms → io → core → analysis → manager → py. - A manager substrate (
GeoData): load once, operations broadcast across the collection — no per-item loops. - Domain objects carry their operations (arithmetic, filters, interpolation, stats) — fluent and chainable; immutable (ops return new objects).
- Algorithms are isolated, QC-able kernels grouped by discipline (e.g. the minimum-curvature survey, the cross-well stratigraphic merge) — pure and type-light.
- Rust core + thin PyO3; the Python API mirrors the Rust API.
Built on
- petekAlgorithms — standalone numerics / geostatistics kernels (gridding, interpolation) that petekIO builds on.
License
MIT — see 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 Distributions
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 petekio-0.2.4.tar.gz.
File metadata
- Download URL: petekio-0.2.4.tar.gz
- Upload date:
- Size: 122.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11f0bb84bf433159daf4a14a233b58e426b241b0fdee8728a45232cf18617c1a
|
|
| MD5 |
e368a693134c2b0dae02c1ca5ffaba75
|
|
| BLAKE2b-256 |
0e7357345f2c64801e4f975d43f52456fae9aeb3123b8f2b9418fc92022038a0
|
Provenance
The following attestation bundles were made for petekio-0.2.4.tar.gz:
Publisher:
release.yml on kkollsga/petekio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
petekio-0.2.4.tar.gz -
Subject digest:
11f0bb84bf433159daf4a14a233b58e426b241b0fdee8728a45232cf18617c1a - Sigstore transparency entry: 2019752550
- Sigstore integration time:
-
Permalink:
kkollsga/petekio@1d8a790733ad8594062526f2b56860574116b489 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/kkollsga
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1d8a790733ad8594062526f2b56860574116b489 -
Trigger Event:
push
-
Statement type:
File details
Details for the file petekio-0.2.4-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: petekio-0.2.4-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1daf8e71bace06db385fdc3ec363bd661f5cc07122196250eb86529b7922e7f0
|
|
| MD5 |
88dbec52bd70d43995d0a23b934a57bb
|
|
| BLAKE2b-256 |
0196600a86879ad4ad9e906def28b364c77bd2402e87e94ac6208adfdcdb9559
|
Provenance
The following attestation bundles were made for petekio-0.2.4-cp310-abi3-win_amd64.whl:
Publisher:
release.yml on kkollsga/petekio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
petekio-0.2.4-cp310-abi3-win_amd64.whl -
Subject digest:
1daf8e71bace06db385fdc3ec363bd661f5cc07122196250eb86529b7922e7f0 - Sigstore transparency entry: 2019753123
- Sigstore integration time:
-
Permalink:
kkollsga/petekio@1d8a790733ad8594062526f2b56860574116b489 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/kkollsga
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1d8a790733ad8594062526f2b56860574116b489 -
Trigger Event:
push
-
Statement type:
File details
Details for the file petekio-0.2.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: petekio-0.2.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7cc516a1858c04d0c749aa87c51f24d2034fce42a959a8693a7189ebeb17aa1
|
|
| MD5 |
665c871d3f7d5247fea0817da6092c51
|
|
| BLAKE2b-256 |
be4ee649d7e1a42ec436aa3123a8617ef22610c54feb3b65c379ae7b6b7a741a
|
Provenance
The following attestation bundles were made for petekio-0.2.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on kkollsga/petekio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
petekio-0.2.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
c7cc516a1858c04d0c749aa87c51f24d2034fce42a959a8693a7189ebeb17aa1 - Sigstore transparency entry: 2019752872
- Sigstore integration time:
-
Permalink:
kkollsga/petekio@1d8a790733ad8594062526f2b56860574116b489 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/kkollsga
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1d8a790733ad8594062526f2b56860574116b489 -
Trigger Event:
push
-
Statement type:
File details
Details for the file petekio-0.2.4-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: petekio-0.2.4-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cfb53dece6aa251675d016b2d371661356c2b121ee0d0be0051443f41a3f86e
|
|
| MD5 |
9f5e41263adf4f5efca95f2e2da1ccbf
|
|
| BLAKE2b-256 |
da629a5784f3a79561ba7fef5ad7eb66d213ac8b3285954de1b85a712dfb6345
|
Provenance
The following attestation bundles were made for petekio-0.2.4-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on kkollsga/petekio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
petekio-0.2.4-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
4cfb53dece6aa251675d016b2d371661356c2b121ee0d0be0051443f41a3f86e - Sigstore transparency entry: 2019752722
- Sigstore integration time:
-
Permalink:
kkollsga/petekio@1d8a790733ad8594062526f2b56860574116b489 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/kkollsga
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1d8a790733ad8594062526f2b56860574116b489 -
Trigger Event:
push
-
Statement type:
File details
Details for the file petekio-0.2.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: petekio-0.2.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.0 MB
- Tags: CPython 3.10+, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42ef6d22bcd17bae907bbc88d6a85e0e9864491d55e76a34c2de13b19236a81e
|
|
| MD5 |
e978bacb622c370ff48e2b2564f32416
|
|
| BLAKE2b-256 |
94f666507b6cb586ea6e44cbe9b85834b075519ec2b21e67d8fa8cdceaa12aa5
|
Provenance
The following attestation bundles were made for petekio-0.2.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
release.yml on kkollsga/petekio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
petekio-0.2.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
42ef6d22bcd17bae907bbc88d6a85e0e9864491d55e76a34c2de13b19236a81e - Sigstore transparency entry: 2019752990
- Sigstore integration time:
-
Permalink:
kkollsga/petekio@1d8a790733ad8594062526f2b56860574116b489 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/kkollsga
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1d8a790733ad8594062526f2b56860574116b489 -
Trigger Event:
push
-
Statement type: