Skip to main content

cpt-anywidget

anywidget viewers for cone penetration tests (CPT) and geotechnical boreholes, rendered with plain D3. Built for notebook use (marimo, Jupyter). Every viewer shares a zoomable vertical axis in depth below surface or elevation, so soundings, borehole logs, and interpretations line up.

Full documentation: bedrock.engineer/docs/cpt-anywidget

Viewers

  • CPTViewer — one CPT: measurement channels (qc, fs, Rf, u1/u2, inclination, …) against the vertical axis, plus optional layer columns: a nearby borehole log, read-only interpretation columns (e.g. Robertson, Lengkeek), and an editable layer column synced back to Python.
  • BoreholeViewer — a single borehole log with proportional soil-composition bands and hatch patterns; its layers trait takes plain dicts from any source, and layers_from_bhrgt (brodata BHR-GT) and layers_from_bore (pygef GEF/BRO XML) convert boreholes already in the Dutch BRO soil vocabulary.
  • ProfileViewer — multiple CPTs side by side along a chainage axis (a cross-section); chainage computes along-profile distances from map coordinates.

Install

From PyPI, with uv (recommended):

uv add cpt-anywidget

or with pip: pip install cpt-anywidget.

Usage

import polars as pl
from cpt_anywidget import CPTViewer, Channel

df = pl.DataFrame({
    "depth": [0.0, 0.02, 0.04],        # or "nap" for elevation
    "coneResistance": [0.1, 0.4, 0.9],  # MPa
    "localFriction": [0.01, 0.02, 0.02],
})

CPTViewer(df, vertical="depth", channels=["coneResistance", "localFriction"])

data is tidy columns — a polars or pandas DataFrame or a dict of columns (lists, tuples, numpy arrays) — one row per depth sample. The widget never parses file formats or converts units: loaders (e.g. brodata) normalize upstream. The Dutch BRO column names get built-in display defaults; any other column can be bound with Channel(key, label=…, unit=…, color=…, side=…). Custom vertical datums work the same way via Vertical(key, label=…, up=…).

Annotations, overlays, and axis limits are plain traits and track the zoom. See Interactions for the pointer and keyboard gestures.

Interactions

Zoom and pan — all viewers

  • To zoom the vertical axis, hold the Ctrl key (Cmd on macOS) and turn the mouse wheel. Pinching on a trackpad or touch device zooms too, without keys.
  • To pan a zoomed axis, drag in the plot area.
  • To zoom to a range, hold the Shift key and drag along the axis.
  • To reset the zoom, double-click in the plot area.
  • Move the pointer across the plot to read the values at that depth.
  • The mouse wheel without a modifier key scrolls the notebook, not the chart.

Edit layers — the CPTViewer edit column

  • To move a boundary, drag it. A boundary stops at the minimum layer thickness.
  • To split a layer, click in the lane beside the column. A dashed line previews where the new boundary goes.
  • To merge two layers, move the pointer near their boundary in the lane and click the × it offers. The upper layer keeps its class.
  • To set the class of a layer, click the layer. A pie menu opens. Click a wedge, or walk the wedges with the arrow keys and push Enter.
  • As a fast path, press the layer, drag toward a wedge, and release.
  • To close the pie menu, push the Escape key or click outside the menu.
  • Each edit goes back to Python through the editedLayers trait.

Select a strip — ProfileViewer

  • To select a CPT strip, click it. The name shows in the selected trait in Python.
  • To deselect the strip, click it again.

Development

Front end (TypeScript, js/) builds into src/cpt_anywidget/static/:

npm install
npm run build     # or: npm run dev (watch mode)

Set ANYWIDGET_HMR=1 so JS edits hot-reload in the browser. Sample files (BRO XML, GEF, AGS) live in examples/.

Download files

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

Source Distribution

cpt_anywidget-0.2.1.tar.gz (1.8 MB view details)

Uploaded Source

Built Distribution

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

cpt_anywidget-0.2.1-py3-none-any.whl (150.4 kB view details)

Uploaded Python 3

File details

Details for the file cpt_anywidget-0.2.1.tar.gz.

File metadata

  • Download URL: cpt_anywidget-0.2.1.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cpt_anywidget-0.2.1.tar.gz
Algorithm Hash digest
SHA256 8ae251105eff5d7ed4f27328431576a821dc54600583e61af959b669da496a28
MD5 383d4faca6e160624329503944bc0bb2
BLAKE2b-256 8efaa8695f5f7df3d9712798ff4deaa6cdfdc5eba86dd9ef189c5d93ca7d88e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cpt_anywidget-0.2.1.tar.gz:

Publisher: release.yml on bedrock-engineer/cpt-anywidget

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

File details

Details for the file cpt_anywidget-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: cpt_anywidget-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 150.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cpt_anywidget-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1b9c8a30359200d925e9db92ddbd33d13d13d76a9a4aa068ef03289bd3dd9899
MD5 a922eade9591c3ee99e64373e04fe2e7
BLAKE2b-256 06ff299bd089d1e00be843461a1222ef02a7942f49f2c0d3dbbfbf28a3e88820

See more details on using hashes here.

Provenance

The following attestation bundles were made for cpt_anywidget-0.2.1-py3-none-any.whl:

Publisher: release.yml on bedrock-engineer/cpt-anywidget

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

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page