Skip to main content

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

Documentation

The canonical docs for the whole petek family live on the petekSuite site — petekIO's pages there:

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 GeoData and 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.3"

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

# A tidy per-zone×bore table (pandas; pip install petekio[pandas]):
w.zone_table("PHIE", stats=("mean", "p50"))  # DataFrame, zone in lithostrat order

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

  • petekTools — standalone numerics / geostatistics kernels (gridding, interpolation) that petekIO builds on.

License

Apache-2.0 — see LICENSE and NOTICE.

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

petekio-0.3.0.tar.gz (207.9 kB view details)

Uploaded Source

Built Distributions

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

petekio-0.3.0-cp310-abi3-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

petekio-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

petekio-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

petekio-0.3.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (4.3 MB view details)

Uploaded CPython 3.10+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file petekio-0.3.0.tar.gz.

File metadata

  • Download URL: petekio-0.3.0.tar.gz
  • Upload date:
  • Size: 207.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for petekio-0.3.0.tar.gz
Algorithm Hash digest
SHA256 986b41cc1ec8c3187dc035c3db8a80180f275ab1c11b9797175db02db58c14c3
MD5 ad02e9be166247909f8156a522a1e84c
BLAKE2b-256 70ead071c1119b4c4e63047e3f27779c029721a898f6edb84f9d4c8d7c09cfee

See more details on using hashes here.

Provenance

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

Publisher: release.yml on kkollsga/petekio

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

File details

Details for the file petekio-0.3.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: petekio-0.3.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.9 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

Hashes for petekio-0.3.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 455f76e2f3d8b34f95b5f71414b8c7cdb67084c48bc77288f68d0dc488241d65
MD5 9c6ba8ae2a0b64146d4c8d200e29e575
BLAKE2b-256 b8d3b296bf38d689ee784a797c8eeb7eb8e6eb1690c6b151d3ef3db439f6e28a

See more details on using hashes here.

Provenance

The following attestation bundles were made for petekio-0.3.0-cp310-abi3-win_amd64.whl:

Publisher: release.yml on kkollsga/petekio

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

File details

Details for the file petekio-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for petekio-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f4145271a35f8c94fb93f2c9aa07b84b64f199b7eb46eaaa355bb65b04e1b41
MD5 2291b32d9f2fb697427dcfac2f26d5e4
BLAKE2b-256 0d7a4eddb4b99c64ae818a5a3db1a1e9c72871f6420265243061e457614a6732

See more details on using hashes here.

Provenance

The following attestation bundles were made for petekio-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on kkollsga/petekio

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

File details

Details for the file petekio-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for petekio-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 341cb23b03e0e2ada02bce6261c18d145b7936b377c3fb879920a436b4174962
MD5 145bee5b9c90574b6a58183574bb37de
BLAKE2b-256 c68d8f9c5d6e61e5d49257a8451f78d41072534a8df0e21e0e3b7523da375be4

See more details on using hashes here.

Provenance

The following attestation bundles were made for petekio-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on kkollsga/petekio

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

File details

Details for the file petekio-0.3.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for petekio-0.3.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 7a6c7b8199b327fd07123bdcab3fb6f2ffd6afe1cdb61621f076d69a68bbb355
MD5 db4f18469f7df195da14ca0328807441
BLAKE2b-256 ec589b36b40e7df734247b21856d7a0d47778db349501826e2c2b6b3d5a42b72

See more details on using hashes here.

Provenance

The following attestation bundles were made for petekio-0.3.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on kkollsga/petekio

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