pyCSAMT v2 is a full-lifecycle toolkit for controlled-source and natural-source electromagnetic (EM) geophysics — CSAMT, AMT, MT, and TDEM. One coherent, scikit-learn-inspired API takes a survey from raw field files through quality control, corrections, and inversion to interpreted, publication-ready results.
✨ Highlights
- 📥 Data I/O & QC — EDI, Zonge AVG, Jones J, TDEM, and MARE2DEM files in one site model; frequency audits and noisy-station flagging.
- 📡 IoT-enabled field acquisition — station telemetry with edge QC (powerline harmonics, SNR, contact resistance, frequency coverage), clock-synchronisation audit, power monitoring, pluggable transports (file/HTTP built in; MQTT/serial/WebSocket optional), acquisition provenance, a field-network simulator, and dashboards — feeding directly into the processing pipeline.
- 🎚️ Processing & corrections — a catalogue of 25 methods in six categories: notch filtering, static-shift removal, tensor rotation, phase-tensor analysis, and more.
- 🧱 Forward modelling — synthetic layered-earth and 2-D models, forward responses, realistic noise, and datasets for survey design or training.
- 🧠 Inversion, classical & AI — Occam2D, ModEM, and MARE2DEM end to end, plus physics-informed neural networks (PINN 1-D/2-D/3-D) and hybrid deep-learning inverters.
- 🗺️ Interpretation & mapping — resistivity classification, pseudostratigraphic logs, station maps, pseudosections, and 3-D quick looks.
- 🤖 Pipelines, agents & apps — reproducible YAML/JSON/Python workflows, LLM-driven agents (Anthropic, OpenAI, Gemini), a web dashboard, and a desktop GUI.
🚀 Installation
pip install pycsamt # core, minimal dependencies
pip install "pycsamt[full]" # + ML backends, apps, geospatial, docs
Requires Python 3.9+.
Optional extras & source install
| Extra | Installs |
|---|---|
torch |
PyTorch backend for PINN / hybrid inverters |
tensorflow |
TensorFlow / Keras backend |
geo |
pyproj, xarray, contextily for maps and reprojection |
agents |
Anthropic, OpenAI/DeepSeek, and Gemini SDKs for AI agents |
app |
Desktop GUI (PySide6) + Dash web dashboard |
docs |
Sphinx, PyData theme, numpydoc |
full |
All of the above (prefers the PyTorch backend) |
Track the active development branch:
git clone https://github.com/earthai-tech/pycsamt.git
cd pycsamt && git checkout v2
pip install -e ".[full]"
⚡ Quick start
Chain named processing steps into a repeatable pipeline — the result carries per-step outputs, a log, and an exportable manifest:
from pycsamt.pipeline import Pipeline, Step
pipe = Pipeline([
("notch", Step("NR001", mains_hz=50)),
("band", Step("FREQ001")),
("static_shift", Step("SS001")),
("rotate", Step("TZ001")),
])
result = pipe.run(sites, outdir="outputs/run01/")
print(result.summary())
Or hand the whole job to an AI agent in plain language:
from pycsamt.agents import AgentMaster
master = AgentMaster(provider="anthropic")
report = master.run(
"Load data/edi/, flag stations with RMS > 2, build an Occam2D input "
"for profile L22, launch inversion, and produce a PDF report."
)
More examples — inversion results, PINN, IoT, CLI
Load a MARE2DEM run directory and plot responses or the resistivity section:
from pycsamt.models.mare2dem import InversionResult, PlotResponse, PlotModel
result = InversionResult("runs/demo_mt/")
PlotResponse(result).plot(max_rx=6, savefig="response.pdf")
PlotModel(result).plot(cmap="turbo_r", savefig="section.pdf")
Physics-informed inversion from site data and a forward operator:
from pycsamt.ai.inversion import PINN2D
inv = PINN2D(n_layers=64, epochs=3000, backend="torch")
model = inv.fit(sites, frequencies=freqs)
model.plot_section()
Ingest IoT field telemetry, quality-control it at the edge, and hand it straight to processing — with a reproducible provenance manifest:
from pycsamt.iot import FieldSession, simulate_iot_network, plot_field_dashboard
# real edge telemetry, or a simulated network for demos/tests
packets = simulate_iot_network(n_stations=24, profiles=["L1", "L3"])
session = FieldSession("SSL2026")
session.add_packets(packets)
session.assess() # stream QC -> MonitoringStatus
session.to_pipeline_input() # hand-off for processing
session.export_manifest("field_manifest.json") # reproducible provenance
plot_field_dashboard(session, output_path="dashboard.png")
The full workflow is also scriptable from the terminal:
pycsamt survey set data/edi/
pycsamt invert build data/edi/ --solver occam2d --workdir runs/occam2d/
pycsamt pipe run --config pipeline.yaml --survey data/edi/ --out outputs/run01/
🖥️ Interfaces
| Python API | CLI | Web dashboard | Desktop GUI |
|---|---|---|---|
import pycsamt |
pycsamt --help |
pycsamt-web |
pycsamt-desktop |
The same engine drives all four — script it, automate it, or point and click.
📖 Citation
If pyCSAMT contributes to published research, please cite Kouadio et al. (2022), J. Applied Geophysics.
BibTeX
@article{Kouadio2022,
author = {Kouadio, K. L. and Liu, R. and Mi, B. and Liu, C.},
title = {pyCSAMT: An alternative Python toolbox for groundwater exploration
using controlled-source audio-frequency magnetotelluric},
journal = {Journal of Applied Geophysics},
year = {2022},
doi = {10.1016/j.jappgeo.2022.104647}
}
@article{Kouadio2023,
author = {Kouadio, K. L. and Liu, R. and Malory, A. O. and Liu, W. and Liu, C.},
title = {A novel approach for water reservoir mapping using
controlled-source audio-frequency magnetotelluric in Xingning area,
Hunan Province, China},
journal = {Geophysical Prospecting},
year = {2023},
doi = {10.1111/1365-2478.13385}
}
🤝 Contributing & license
Bug reports and feature requests are welcome on the
issue tracker; see the
developer guide
before opening a pull request. Participation is governed by our
Code of Conduct. Distributed under the
LGPL-3.0 or later — see
LICENSE.md.
Developed by earthai-tech — Lead developer: Laurent Kouadio 🌐
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 pycsamt-2.2.1.tar.gz.
File metadata
- Download URL: pycsamt-2.2.1.tar.gz
- Upload date:
- Size: 7.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42300320f4aaa71dacc29290bbac2c9a7ad03f4b193eb721ac13a3b26535503b
|
|
| MD5 |
c7d5116072b8a4dd6435a80cb74276fd
|
|
| BLAKE2b-256 |
9be14add1f9bc05b9b22343a8ee86f0e83c8056ced57cc4a8de90a132e7ba5a5
|
File details
Details for the file pycsamt-2.2.1-py3-none-any.whl.
File metadata
- Download URL: pycsamt-2.2.1-py3-none-any.whl
- Upload date:
- Size: 7.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd2e03502825833f7b0c924b51d617c7aa708ac20c07663f8cf7ad1f315d6a00
|
|
| MD5 |
69587d65bf57398438fa7f397792098e
|
|
| BLAKE2b-256 |
9fd0955f91ce97a49583158c385fa2c17f88fd521783abb79ae585a6200573df
|