vibeProj
Fast coordinate transforms on NVIDIA GPUs, with a NumPy fallback for CPU-only environments. vibeProj supports 24 projection families, datum shifts, and preallocated device buffers through a small pyproj-style API.
- Fused CuPy CUDA kernels keep coordinates on the GPU.
- Helmert 7/15-parameter and SVD-compressed datum corrections are built in.
- Hardware-aware transcendental strategies preserve native fallbacks.
- GeoPandas, Rasterio, Shapely, and vibeSpatial workflows are supported.
Performance
One million fp64 coordinates on an RTX 4090 and i9-13900K, measured with pyproj 3.7.2 in August 2026. GPU measurements use preallocated device inputs and outputs; results are the median of three runs with ten timed calls per run.
| Projection | vibeProj GPU | vibeProj NumPy | pyproj |
|---|---|---|---|
| Transverse Mercator / UTM | 0.47 ms (186x faster) | 123.9 ms (1.43x slower) | 86.7 ms |
| Lambert Conformal Conic | 0.48 ms (150x faster) | 48.1 ms (1.50x faster) | 72.1 ms |
| Albers Equal Area | 0.28 ms (173x faster) | 34.5 ms (1.39x faster) | 48.0 ms |
| Web Mercator | 0.19 ms (295x faster) | 17.1 ms (3.22x faster) | 54.9 ms |
| Equal Earth | 0.45 ms (148x faster) | 56.4 ms (1.18x faster) | 66.4 ms |
| Plate Carrée | 0.07 ms (391x faster) | 9.2 ms (2.86x faster) | 26.2 ms |
| Oblique Mercator | 0.77 ms (129x faster) | 79.3 ms (1.25x faster) | 99.5 ms |
| Krovak | 1.95 ms (206x faster) | 360.4 ms (1.11x faster) | 401.3 ms |
Parenthetical comparisons use pyproj as the baseline.
Run the same suite with:
uv run python benchmarks/bench_projections.py run --n 1000000
Install
pip install vibeproj # NumPy
pip install vibeproj[cu12] # CUDA 12
pip install vibeproj[cu13] # CUDA 13
Quick start
from vibeproj import Transformer
transformer = Transformer.from_crs("EPSG:4326", "EPSG:32631")
easting, northing = transformer.transform(2.0, 49.0)
Inputs may be scalars, lists, NumPy arrays, or CuPy arrays. Geographic
coordinates default to longitude/latitude order; pass always_xy=False for
native CRS axis order.
For caller-owned GPU buffers:
transformer.transform_buffers(
x_gpu,
y_gpu,
out_x=easting_gpu,
out_y=northing_gpu,
)
Defaults choose a safe compute precision and transcendental implementation.
Advanced callers can select precision= and transcendentals= explicitly,
then inspect the decision with transformer.explain_strategy().
Documentation
- Quickstart and API
- Supported projections
- Precision and transcendental strategies
- Integration recipes for GeoPandas, Rasterio, Shapely, and vibeSpatial
Development
uv sync
uv run pytest
CUDA development environments can use uv sync --extra cu12 or
uv sync --extra cu13.
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 vibeproj-1.0.6.tar.gz.
File metadata
- Download URL: vibeproj-1.0.6.tar.gz
- Upload date:
- Size: 501.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5270cd3b18f4f209f303f3bf2ccf6e686d206161521a6017678b4943ded6f1d9
|
|
| MD5 |
241a7b0a8ee427b6a72048649a975cbc
|
|
| BLAKE2b-256 |
c665af2a9720f6a5a31791b67fe21a44631a872ada82195e301127b4fd5a3551
|
Provenance
The following attestation bundles were made for vibeproj-1.0.6.tar.gz:
Publisher:
release.yml on jarmak-personal/vibeProj
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibeproj-1.0.6.tar.gz -
Subject digest:
5270cd3b18f4f209f303f3bf2ccf6e686d206161521a6017678b4943ded6f1d9 - Sigstore transparency entry: 2372717021
- Sigstore integration time:
-
Permalink:
jarmak-personal/vibeProj@c0dab2ce1c03c37ae84dad66473c6752f6fdff29 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/jarmak-personal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c0dab2ce1c03c37ae84dad66473c6752f6fdff29 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file vibeproj-1.0.6-py3-none-any.whl.
File metadata
- Download URL: vibeproj-1.0.6-py3-none-any.whl
- Upload date:
- Size: 200.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72cdcd4fc1524cffdb8b490ece2c41634c72658f152748614edadc717604033a
|
|
| MD5 |
3d2781cadf145a86ff13f19c4c7cded2
|
|
| BLAKE2b-256 |
c600455c9de3c503f1560405b4a6319a11f8ad1e07f4e8bce18c72bab60afda9
|
Provenance
The following attestation bundles were made for vibeproj-1.0.6-py3-none-any.whl:
Publisher:
release.yml on jarmak-personal/vibeProj
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibeproj-1.0.6-py3-none-any.whl -
Subject digest:
72cdcd4fc1524cffdb8b490ece2c41634c72658f152748614edadc717604033a - Sigstore transparency entry: 2372717061
- Sigstore integration time:
-
Permalink:
jarmak-personal/vibeProj@c0dab2ce1c03c37ae84dad66473c6752f6fdff29 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/jarmak-personal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c0dab2ce1c03c37ae84dad66473c6752f6fdff29 -
Trigger Event:
workflow_dispatch
-
Statement type: