Code · Python · R

GitHub Projects

I build reproducible pipelines and custom algorithms for subsurface logs and land-surface topography when existing tools fall short.

A person with a large yellow pack hiking up a snowy ridge toward a summit.

Cores, well logs, and basins

Stratigraphy and subsurface

Python

pyCoreRelator

A Python toolkit for pairwise stratigraphic correlation analysis among sediment cores and well-log data.

  • PyPI version
  • conda-forge version
Flowchart of the pyCoreRelator correlation workflow.

Lai, L.S.-H., Sylvester, Z., Covault, J.A., Gomberg, J.S., Nieminski, N.M. (Accepted 2026) Reproducible event-bed correlation with uncertainty: pyCoreRelator. Sedimentology.

Python · Rust

SubsurfiX

SubsurfiX takes you from a folder of well logs to a 3D property model you can simulate on: log clean-up, gap filling, well correlation, faulted grids, property modeling, and flow, heat and CO₂ storage simulation in one Rust engine, run from Python or the command line, with every filled value traceable.

  • PyPI version
3D porosity model built from 60 Kansas wells.

Lai, L.S.-H. (2026) SubsurfiX. Zenodo, https://doi.org/10.5281/zenodo.23832007

Python · R

pyBasinSubs

pyBasinSubs reconstructs how a sedimentary basin sank and filled through time by backstripping its layers.

  • PyPI version
Geohistory of North Sea well 30/4-1.

Lai, L.S.-H. (2026) pyBasinSubs. Zenodo, https://doi.org/10.5281/zenodo.23832018

Python

pyLogCrafter

Basin-scale well-log quality control, spatial normalization, gap filling, and electrofacies tools.

Electrofacies (sandstone, siltstone, carbonate) from 10,438 ML-processed wells in the Delaware Mountain Group, Permian Basin.

Python

pyLogDigitizer

pyLogDigitizer turns scanned paper well logs (TIFF) into LAS files, with a local browser app to check and fix every step. Nothing leaves your machine.

  • PyPI version
A scanned paper log traced into a LAS curve.

Lai, L.S.-H. (2026) pyLogDigitizer. Zenodo, https://doi.org/10.5281/zenodo.23832013

Topography and bathymetry

Landscapes and seafloor

Python

pyTopoComplexity

A Python package for multiscale topographic complexity analysis.

  • PyPI version
  • conda-forge version
Wavelet curvature of a digital elevation model.

Lai, L. S.-H., Booth, A. M., Duvall, A. R., and Herzig, E. (2025) Short Communication: Multiscale topographic complexity analysis with pyTopoComplexity. Earth Surface Dynamics, 13(3), 417–435, https://doi.org/10.5194/esurf-13-417-2025

Python · Rust

pyGeoMapper

pyGeoMapper maps surface change and geology from satellite images and DEMs, all the way to 3D block diagrams you can open in a browser. Python with a Rust core.

  • PyPI version
DEM of Difference and spectral change maps.

Lai, L.S.-H. (2026) pyGeoMapper. Zenodo, https://doi.org/10.5281/zenodo.23832020

Python

pyValleyWidth

Measure valley width from a DTM with an elevation-threshold method, built on pytopotoolbox.

  • PyPI version
Congo Canyon width along the channel.Congo Canyon long profile with channel steepness, canyon width and canyon-top depth.

Lai, L.S.-H. (2026) pyValleyWidth. Zenodo, https://doi.org/10.5281/zenodo.23656980

Thin sections and core photos

Rock images

Python

pyPetrograph

ML-applied toolkits for rock thin-section petrographic analysis.

  • PyPI version
pyPetrograph browser app Outputs step: knolling sheet and export buttons.

Lai, L.S.-H. (2026) pyPetrograph. Zenodo, https://doi.org/10.5281/zenodo.23659316

Python

pyRockImageLab

Interactive tools to crop, orthorectify, stitch and mosaic geological core and outcrop photographs.

  • PyPI version
pyRockImageLab browser app Mark core sections step.

Lai, L.S.-H. (2026) pyRockImageLab. Zenodo, https://doi.org/10.5281/zenodo.23656974