FastSAR
FastSAR forms synthetic aperture radar (SAR) images on x86 CPUs, Nvidia GPUs and Google Cloud TPUs from Python. It reads frequency-domain CPHD files, forms spotlight, stripmap and sliding spotlight images by factorized backprojection, and provides autofocus, interferometry, geolocation, map GeoTIFFs and SICD output.
Panama Canal, Pacific entrance (Umbra open data, 2023-07-18): 12,207 by 8,808 pixels in 3.8 s on an Nvidia L4 (warm former, transfers included; float32, -59.9 dB against float64 exact backprojection), downsampled. A c4d-highmem-16 CPU instance (16 vCPUs, 8 cores) takes 11.3 s. ISCE3, the fastest open-source code that forms this collection, would take an estimated 4.8 h on that CPU and 27 min on the L4.
Cost per 1000 Panama images (October 2026 prices) against error over the lock, port and ship regions, relative to the float64 reference (performance, comparison).
Install
pip install fastsar # CPU (and JAX on whatever device it has)
pip install "fastsar[io]" # io: sarpy for CPHD and SICD
pip install "fastsar[cuda]" # cuda: CuPy for Nvidia GPUs
pip install "fastsar[tpu]" # tpu: jax[tpu] for Cloud TPUs
pip install "fastsar[geo]" # geo: rasterio for GeoTIFFs and DEMs
pip install "fastsar[cuda,io,geo]" # extras combine
From a clone: pip install -e ".[cuda,io]" or uv sync. The CPU kernels need g++ with OpenMP and compile on
first use; the float16 CUDA kernel needs nvcc. On the CPU set
OMP_NUM_THREADS=<physical cores> OMP_PLACES=cores OMP_PROC_BIND=close.
Quickstart
import fastsar
from fastsar import products
out = fastsar.form_cphd('scene_CPHD.cphd') # mode, grid and window from the file
img = out['image'] # complex64 [nx, ny] on a ground plane at the scene height
lat, lon, h = products.geolocate(out, 100, 200) # pixel (100, 200) on the ground
products.write_geotiff('amp.tif', **products.geocode_image(out)) # amplitude on a north-up UTM grid
products.write_sicd('scene.nitf', out) # complex image with its geometry
examples/chain.py runs this chain from the command line (--simulate needs no data);
form_umbra.py and form_capella_stripmap.py form
vendor grids.
Supported data, modes and devices
| Data | Modes | Status |
|---|---|---|
| Capella CPHD | stripmap, spotlight, sliding spotlight | checked against vendor SICDs; a 2022 dynamic stripmap is correct near the center only |
| Umbra CPHD | spotlight | three open-data collections on the vendor's grid |
| ICEYE CPHD | dwell spotlight | formed (28 GB history); not compared with the vendor image |
| TOA-domain CPHD, raw Level-0 | not supported | |
| Simulated echoes | stripmap, ScanSAR, TOPS, any track | fastsar.stripmap, burst, patches |
CPU (cpu) |
Nvidia GPU (cuda) |
Cloud TPU (tpu) |
Any JAX device (jax) |
|
|---|---|---|---|---|
| Factorized backprojection | C++/OpenMP, AVX-512 or AVX2 | CUDA via CuPy | Pallas | reference program |
| Precision | float32 | float32, float16 | three-pass (default), single-pass | float32, float16 |
Exact backprojection (ExactFormer) |
C++/OpenMP, float32 with float64 tile centers | CUDA, the same | falls back to jax |
float32, float64 block centers |
Polar format (algorithm='pfa') runs as a JAX program on any device.
Documentation
docs/README.md lists every page; start with the processing chain. Measurement records are in sar-accel-study. A citation file will come with the preprint.
Contributing and license
CONTRIBUTING.md explains how to run the tests. MIT license (LICENSE).
Metadata
Release files for fastsar 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fastsar-0.1.0.tar.gz | 211.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fastsar-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 375.3 kB
Release files / fastsar-0.1.0.tar.gz
| Download URL | fastsar-0.1.0.tar.gz |
|---|---|
| Size | 211.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
91d41ac6deaac8d53b9f5ad69968d24a4f65a3c3c2bca8acc5b9185b89b5cd7c
|
|
BLAKE2b-256 checksum How to use checksums |
9e42957e09766a1eedd926745f45a2c44bd2e31027ee2ee887e2d4ac8e9606fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / fastsar-0.1.0-py3-none-any.whl
| Download URL | fastsar-0.1.0-py3-none-any.whl |
|---|---|
| Size | 164.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
285e3b79fbce549c0ba485ae06ddbcf061fcea98fb842ef1f25726aa1b7b62d9
|
|
BLAKE2b-256 checksum How to use checksums |
6a1c4c89ef355679c072c1b9d2a58d3ac446c26fdcfeba3aa5e1cfd1a3233008
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|