vibeSpatial

vibeSpatial

GPU-accelerated spatial analytics for Python. Drop-in GeoDataFrame with CUDA kernels for predicates, overlay, dissolve, buffer, and I/O.

GPU-First Design

Every operation is designed for GPU dispatch first. NVRTC kernels for predicates, overlay, dissolve, buffer, and clip. CPU fallback is explicit and observable.

GeoPandas Compatible

GeoDataFrame and GeoSeries with the same API you know. Import vibespatial, use the same methods. 98% of the upstream GeoPandas test suite passes natively.

Device-Resident Geometry

OwnedGeometryArray keeps geometry on the GPU. No Shapely round-trips for GPU consumers. Lazy materialization when host access is needed.

Precision Control

Dual-precision dispatch (fp32/fp64) via PrecisionPlan. Every kernel respects ADR-0002. Consumer GPUs get fp32 fast paths; datacenter GPUs get full fp64.

Adaptive Runtime

Automatic GPU/CPU dispatch based on input size, device capability, and kernel support. Observable dispatch events for profiling and debugging.

Native I/O

GeoParquet, GeoArrow, Shapefile, and GeoJSON with GPU-accelerated WKB decode. Zero-copy Arrow paths when available.

Quick Example

import vibespatial
from shapely.geometry import Point, box

# Build a GeoDataFrame
gdf = vibespatial.GeoDataFrame(
    {"name": ["a", "b", "c"]},
    geometry=[Point(0, 0), Point(1, 1), Point(2, 2)],
)

# GPU-accelerated operations
buffered = gdf.geometry.buffer(0.5)
result = vibespatial.sjoin(gdf, other_gdf, predicate="intersects")
dissolved = gdf.dissolve(by="name")