vibespatial.kernels.constructive

Submodules

Functions

multipoint_polygon_difference(...)

MultiPoint-Polygon difference with device-resident point selection.

multipoint_polygon_intersection(...)

MultiPoint-Polygon intersection with device-resident point selection.

clip_by_rect_kernel(...)

make_valid_kernel(...)

linestring_linestring_intersection_native(left, right, *)

Classify aligned segment relations and assemble exact mixed results.

linestring_polygon_difference(...)

Subtract aligned polygonal rows through shared split topology.

linestring_polygon_intersection(linestrings, polygons, *)

Intersect aligned lineal and polygonal rows through shared topology.

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.

polygon_rect_intersection(...)

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.multipoint_polygon_difference(multipoints: vibespatial.geometry.owned.OwnedGeometryArray, polygons: vibespatial.geometry.owned.OwnedGeometryArray) vibespatial.geometry.owned.OwnedGeometryArray

MultiPoint-Polygon difference with device-resident point selection.

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

MultiPoint-Polygon intersection with device-resident point selection.

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_native(left: vibespatial.geometry.owned.OwnedGeometryArray, right: vibespatial.geometry.owned.OwnedGeometryArray, *, crs=None)

Classify aligned segment relations and assemble exact mixed results.

Physical shape: same-row segment candidate pages become point and overlap capacities. Points are deduplicated by output row, overlap spans are noded and deduplicated as atomic lines, and points covered by those lines are removed. Mixed rows remain a native geometry composition until export.

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

Subtract aligned polygonal rows through shared split topology.

vibespatial.kernels.constructive.linestring_polygon_intersection(linestrings: vibespatial.geometry.owned.OwnedGeometryArray, polygons: vibespatial.geometry.owned.OwnedGeometryArray, *, crs=None)

Intersect aligned lineal and polygonal rows through shared topology.

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.polygon_rect_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
vibespatial.kernels.constructive.segmented_union_all(geometries: vibespatial.geometry.owned.OwnedGeometryArray, group_offsets: Any, *, 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