Skip to main content
pyCSAMT v2
Scientific Python for electromagnetic geophysics — processing, inversion, AI agents, and apps.

PyPI Release Netlify Status CI Coverage License Semver
Python Backends Platform Code style: ruff
Downloads Last commit Issues PRs welcome Stars Code size

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 🌐

Metadata

Release files for pycsamt 2.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pycsamt 2.5.0
File Size Uploaded
pycsamt-2.5.0.tar.gz 7.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for pycsamt 2.5.0
File Interpreter ABI Platform
pycsamt-2.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 16.2 MB

Release files / pycsamt-2.5.0.tar.gz

Download URL pycsamt-2.5.0.tar.gz
Size 7.7 MB
Tags Source
SHA-256 checksum
How to use checksums
b7a13e337baf6f1459f385b32a0d35d7cef5e5eac998b0eb7a9dc471d701790a
BLAKE2b-256 checksum
How to use checksums
b33b843ba61012efba14db58e1016fe63b05a0402220af17d269bd792ee6219e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pycsamt-2.5.0-py3-none-any.whl

Download URL pycsamt-2.5.0-py3-none-any.whl
Size 8.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
a5fb8b267c04f232f0c0d07095ff38e879ed0fcaf9111a21c0600ecb0b84efc8
BLAKE2b-256 checksum
How to use checksums
d6fe859cbc02b7c6249330b8ec0763d7157aa0de88e0c20c8529f6ce33d8ed0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

2.6.4

2 release files

2.6.3

2 release files

2.6.2

2 release files

2.6.1

2 release files

2.6.0

2 release files

This release

2.5.0 This release

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.2.1

2 release files

1.1.2

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.7

2 release files

1.0.3

2 release 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