Skip to main content

SWEEP

SWEEP

Docs License: MIT PyTorch

English | 中文

Seismic Wave Equation Exploration Platform — a differentiable framework for seismic wave-equation modeling, migration, and full-waveform inversion. One API, 20+ equations (acoustic / elastic / VTI / TTI / DAS), PyTorch and JAX backends, eager and compiled CUDA paths.

📖 Documentation: https://sweepx.deepwave.group/solver/

Install

pip install torch --index-url https://download.pytorch.org/whl/cu126   # match your driver, see below
pip install sweepx

Install a torch built for your driver first: PyPI's default torch is CUDA 13 and needs driver >= 580, so on an older driver (or a V100) use cu126 as above. The install selector gives the exact command for your GPU and driver.

The wheel ships prebuilt CUDA cores, so the compiled backend (impl='c') works right after install with any PyTorch version: no nvcc, no compiler, no build step. It needs an NVIDIA GPU and driver; the core for your torch's CUDA version is picked automatically (CUDA 12: V100 and newer; CUDA 13: T4 and newer, driver >= 580). The eager PyTorch and JAX backends are pure Python.

From source: a clone has no prebuilt core, so the CUDA core is compiled locally once (with an nvcc matching your torch's CUDA version) and cached:

pip install .
python -m sweep.build   # optional: compile it now instead of on the first impl='c' call

sweepx (Python >= 3.10) is the PyPI name and also installs the sweep-agent companion; you import sweep. pip install sweep-solver installs the solver alone (Python >= 3.9). GPU coverage, custom cores and developer builds are covered in Building the CUDA core.

Hello SWEEP

One shot, one receiver, one .backward() — read off the velocity-model gradient for a single trace:

import numpy as np
import torch
from sweep.equations import Acoustic
from sweep.propagator.torch import PropTorch
from sweep.signal import ricker

shape = (96, 128)
dh, dt, nt = 10.0, 0.002, 800
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

vp_true = np.full(shape, 1500.0, dtype=np.float32)
vp_true[shape[0] // 2:, :] = 2500.0
vp_init = np.full(shape, 1500.0, dtype=np.float32)

solver = PropTorch(Acoustic(device=device), shape=shape, dh=dh, dt=dt,
                   device=device, use_ckpt=False)

t = np.arange(nt) * dt
wavelet = ricker(t - 0.14, f=10.0).astype(np.float32)
sources   = np.array([[shape[1] // 4, shape[0] // 2]], dtype=np.int64)
receivers = np.array([[[3 * shape[1] // 4, shape[0] // 2]]], dtype=np.int64)

with torch.no_grad():
    obs = solver(wavelet, sources, receivers, models=[torch.tensor(vp_true, device=device)])

vp_t = torch.tensor(vp_init, device=device, requires_grad=True)
pred = solver(wavelet, sources, receivers, models=[vp_t])
(0.5 * (pred - obs).pow(2).sum()).backward()

print("vp gradient shape:", tuple(vp_t.grad.shape))

Swap Acoustic for Elastic, AcousticVTI, ElasticTTI, ... — the surrounding code is unchanged.

Notebooks & examples

Citing

@misc{wang2026sweep,
  title  = {{SWEEP} ({S}eismic {W}ave {E}quation {E}xploration {P}latform):
            A Unified Solver Framework for Differentiable Wave Physics},
  author = {Wang, Shaowen and Alkhalifah, Tariq},
  year   = {2026},
  eprint = {2604.14189},
  archivePrefix = {arXiv},
  url    = {https://arxiv.org/abs/2604.14189},
}

License

MIT — see LICENSE.

Metadata

Release files for sweep-solver 0.3.2

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

Source distribution (sdist)

Source distribution for sweep-solver 0.3.2
File Size Uploaded
sweep_solver-0.3.2.tar.gz 1.8 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for sweep-solver 0.3.2
File Interpreter ABI Platform
sweep_solver-0.3.2-py3-none-manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.28+ x86-64 Details

Total release size: 81.5 MB

Release files / sweep_solver-0.3.2.tar.gz

Download URL sweep_solver-0.3.2.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
ac34940f9182a690226c9d90a25a0299d79164daf68c983e86840f5ab608f074
BLAKE2b-256 checksum
How to use checksums
96a432a5975e49a9293a0dba8d8eeb7e980acdcd7ce33488bc74bdad6ea3a0f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.5

Release files / sweep_solver-0.3.2-py3-none-manylinux_2_28_x86_64.whl

Download URL sweep_solver-0.3.2-py3-none-manylinux_2_28_x86_64.whl
Size 79.6 MB
Tags Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
f304ee59563cf9e061d54d2153e22e486a04d71419957715eafa123c5dff8823
BLAKE2b-256 checksum
How to use checksums
87a56cf6c987ec86381760cf85c52411885f3b27b383b8836b5ec922792092df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.5

Release history Release notifications | RSS feed

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

This release

0.3.2 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

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