vibespatial.kernels.constructive

Submodules

Functions

clip_by_rect_kernel(...)

make_valid_kernel(...)

linestring_linestring_intersection(...)

LineString-LineString intersection: find intersection points.

linestring_polygon_difference(...)

LineString-Polygon difference: clip line to outside of polygon.

linestring_polygon_intersection(...)

LineString-Polygon intersection: clip line to inside of polygon.

multipoint_polygon_difference(...)

MultiPoint-Polygon difference: keep points outside polygon.

multipoint_polygon_intersection(...)

MultiPoint-Polygon intersection: keep points inside polygon.

point_linestring_difference(...)

Point-LineString difference: keep points that do NOT lie on the linestring.

point_linestring_intersection(...)

Point-LineString intersection: keep points that lie on the linestring.

point_point_difference(...)

Point-Point difference: keep rows where coordinates differ.

point_point_intersection(...)

Point-Point intersection: keep rows where coordinates match.

point_point_symmetric_difference(...)

Point-Point symmetric_difference: keep if only one side has a point.

point_point_union(...)

Point-Point union: keep all unique coordinates.

polygon_difference(...)

Element-wise polygon difference: left - right.

polygon_intersection(...)

Element-wise polygon intersection of two OwnedGeometryArrays.

segmented_union_all(...)

Union all geometries within each group. Returns one geometry per group.

offset_curve_kernel(...)

point_buffer_kernel(...)

Package Contents

vibespatial.kernels.constructive.clip_by_rect_kernel(values: ClipInput, xmin: float, ymin: float, xmax: float, ymax: float, *, dispatch_mode: vibespatial.runtime.ExecutionMode | str = ExecutionMode.AUTO, precision: vibespatial.runtime.precision.PrecisionMode | str = PrecisionMode.AUTO) vibespatial.constructive.clip_rect.RectClipResult
vibespatial.kernels.constructive.make_valid_kernel(values: MakeValidInput, *, method: str = 'linework', keep_collapsed: bool = True) vibespatial.constructive.make_valid_pipeline.MakeValidResult
vibespatial.kernels.constructive.linestring_linestring_intersection(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

LineString-LineString intersection: find intersection points.

Returns a Point or MultiPoint per row depending on intersection count. Uses two-pass count-scatter NVRTC kernels (Tier 1).

vibespatial.kernels.constructive.linestring_polygon_difference(linestrings: vibespatial.geometry.owned.OwnedGeometryArray, polygons: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

LineString-Polygon difference: clip line to outside of polygon.

vibespatial.kernels.constructive.linestring_polygon_intersection(linestrings: vibespatial.geometry.owned.OwnedGeometryArray, polygons: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

LineString-Polygon intersection: clip line to inside of polygon.

vibespatial.kernels.constructive.multipoint_polygon_difference(multipoints: vibespatial.geometry.owned.OwnedGeometryArray, polygons: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

MultiPoint-Polygon difference: keep points outside polygon.

All validity/offset reads are bulk D2H transfers (no per-element .get() in loops).

vibespatial.kernels.constructive.multipoint_polygon_intersection(multipoints: vibespatial.geometry.owned.OwnedGeometryArray, polygons: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

MultiPoint-Polygon intersection: keep points inside polygon.

Uses the PIP kernel on exploded points, then compacts and rebuilds MultiPoint offsets. All validity/offset reads are bulk D2H transfers (no per-element .get() in loops).

vibespatial.kernels.constructive.point_linestring_difference(points: vibespatial.geometry.owned.OwnedGeometryArray, linestrings: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

Point-LineString difference: keep points that do NOT lie on the linestring.

vibespatial.kernels.constructive.point_linestring_intersection(points: vibespatial.geometry.owned.OwnedGeometryArray, linestrings: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

Point-LineString intersection: keep points that lie on the linestring.

vibespatial.kernels.constructive.point_point_difference(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

Point-Point difference: keep rows where coordinates differ.

difference(a, b) = a where a != b, NULL where a == b. If right is NULL, keep left. If left is NULL, result is NULL.

vibespatial.kernels.constructive.point_point_intersection(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

Point-Point intersection: keep rows where coordinates match.

Uses CuPy element-wise comparison (Tier 2). Returns device-resident OwnedGeometryArray.

vibespatial.kernels.constructive.point_point_symmetric_difference(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

Point-Point symmetric_difference: keep if only one side has a point.

If coordinates match, result is NULL (empty). If coordinates differ, result is MultiPoint with both. If only one valid, result is that point.

vibespatial.kernels.constructive.point_point_union(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

Point-Point union: keep all unique coordinates.

For element-wise union of two Point arrays, the result per row is: - If both are the same point -> the point (as Point) - If both are different -> MultiPoint with both - If only one is valid -> that point - If neither is valid -> NULL

For simplicity and to maintain consistent output type per row, we output MultiPoints. Rows with a single point get a MultiPoint with 1 point. Rows with matching points get a MultiPoint with 1 point.

vibespatial.kernels.constructive.polygon_difference(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray, *, dispatch_mode: vibespatial.runtime.ExecutionMode | str = ExecutionMode.AUTO, precision: vibespatial.runtime.precision.PrecisionMode | str = PrecisionMode.AUTO) vibespatial.geometry.owned.OwnedGeometryArray

Element-wise polygon difference: left - right.

Computes the geometric difference of aligned polygon/multipolygon arrays. When both inputs are polygonal and GPU is available, executes the full overlay topology pipeline on GPU. Falls back to Shapely for non-polygonal inputs or when GPU is unavailable.

Parameters

leftOwnedGeometryArray

Left geometry array (the “base” polygons).

rightOwnedGeometryArray

Right geometry array (the polygons to subtract).

dispatch_modeExecutionMode or str, default AUTO

Execution mode hint.

precisionPrecisionMode or str, default AUTO

Precision mode. CONSTRUCTIVE kernels stay fp64 per ADR-0002; the plan is computed for observability only.

Returns

OwnedGeometryArray

Result geometries. May contain MultiPolygon when the difference splits a polygon. Empty geometry when left is fully inside right. Original left geometry when there is no overlap.

Raises

ValueError

If row counts do not match.

vibespatial.kernels.constructive.polygon_intersection(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray, *, dispatch_mode: vibespatial.runtime.ExecutionMode | str = ExecutionMode.AUTO, precision: vibespatial.runtime.precision.PrecisionMode | str = PrecisionMode.AUTO) vibespatial.geometry.owned.OwnedGeometryArray

Element-wise polygon intersection of two OwnedGeometryArrays.

Parameters

left, rightOwnedGeometryArray

Input polygon arrays of equal length.

dispatch_modeExecutionMode or str, default AUTO

Execution mode hint (GPU/CPU/AUTO).

precisionPrecisionMode or str, default AUTO

Precision mode. CONSTRUCTIVE kernels stay fp64 per ADR-0002.

Returns

OwnedGeometryArray

Device-resident result when GPU path is taken; host-resident when CPU fallback is used.

vibespatial.kernels.constructive.segmented_union_all(geometries: vibespatial.geometry.owned.OwnedGeometryArray, group_offsets: numpy.ndarray, *, dispatch_mode: vibespatial.runtime.ExecutionMode | str = ExecutionMode.AUTO, precision: vibespatial.runtime.precision.PrecisionMode | str = PrecisionMode.AUTO) vibespatial.geometry.owned.OwnedGeometryArray

Union all geometries within each group. Returns one geometry per group.

Parameters

geometriesOwnedGeometryArray

Input polygons (device- or host-resident).

group_offsetsarray-like

CSR-style int32/int64 offsets. Group i contains geometries[group_offsets[i]:group_offsets[i+1]]. Length is n_groups + 1.

dispatch_modeExecutionMode or str

Execution mode hint (AUTO, GPU, CPU).

precisionPrecisionMode or str

Precision mode. CONSTRUCTIVE kernels stay fp64 per ADR-0002.

Returns

OwnedGeometryArray

One geometry per group. May contain MultiPolygon when union produces disconnected regions. Empty groups produce empty Polygon.

vibespatial.kernels.constructive.offset_curve_kernel(values: StrokeInput, distance, *, quad_segs: int = 8, join_style: str = 'round', mitre_limit: float = 5.0) vibespatial.constructive.stroke.OffsetCurveKernelResult
vibespatial.kernels.constructive.point_buffer_kernel(values: StrokeInput, distance, *, quad_segs: int = 16) vibespatial.constructive.stroke.BufferKernelResult