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 also zooms.
  • 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.0.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.0-py3-none-any.whl (150.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cpt_anywidget-0.2.0.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.0.tar.gz
Algorithm Hash digest
SHA256 e1fb632c3b7af541118d2523da6968a93a72e3d286dcc1a4cf4df300d9bde13f
MD5 dac7b12b0aad5ab3d9e32c05b42a4b6b
BLAKE2b-256 e13267a68b0be6c174fdc86f82cfe8987d4ae96686740aa229da7a9ee8874d85

See more details on using hashes here.

Provenance

The following attestation bundles were made for cpt_anywidget-0.2.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: cpt_anywidget-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 150.3 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fad6f6a0edf1ce31617e35c3cac1b7934b48c22b5e88160fe05b9f33e7ed6d5f
MD5 c388240c911e8a54ec267c8da109be2e
BLAKE2b-256 e47561a47c9365f8a76f4a1a1186d6da933c4603cee42484ab097d266fd9d8e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cpt_anywidget-0.2.0-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

0.2.1

2 files

This release

0.2.0 This release

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