vibespatial.kernels.constructive.nonpolygon_binary¶
GPU kernels for non-polygon binary constructive operations.
Handles family combinations that do not involve Polygon-Polygon pairs: - Point-Point: coordinate comparison with tolerance - MultiPoint-Polygon: batch PIP with compaction - Point-LineString: point-to-segment minimum distance - LineString-Polygon: segment clipping against polygon boundary - LineString-LineString: segment-segment intersection
All kernels return device-resident OwnedGeometryArray instances.
- ADR-0033: Mixed tiers.
Point-Point: Tier 2 (CuPy element-wise)
MultiPoint-Polygon: Tier 2 over Tier 1 PIP kernel
Point-LineString: Tier 1 (custom NVRTC, geometry-specific inner loop)
LineString-Polygon: Tier 1 (custom NVRTC, segment-ring traversal)
LineString-LineString: Tier 1 (custom NVRTC, segment-segment intersection)
ADR-0002: CONSTRUCTIVE class – stays fp64 on all devices per policy. ADR-0034: NVRTC precompilation via request_nvrtc_warmup at module scope.
Attributes¶
Functions¶
Point-Point intersection: keep rows where coordinates match. |
|
Point-Point difference: keep rows where coordinates differ. |
|
|
Point-Point union: keep all unique coordinates. |
Point-Point symmetric_difference: keep if only one side has a point. |
|
MultiPoint-Polygon intersection: keep points inside polygon. |
|
MultiPoint-Polygon difference: keep points outside polygon. |
|
Point-LineString intersection: keep points that lie on the linestring. |
|
Point-LineString difference: keep points that do NOT lie on the linestring. |
|
LineString-Polygon intersection: clip line to inside of polygon. |
|
LineString-Polygon difference: clip line to outside of polygon. |
|
LineString-LineString intersection: find intersection points. |
Module Contents¶
- vibespatial.kernels.constructive.nonpolygon_binary.logger¶
- vibespatial.kernels.constructive.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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.nonpolygon_binary.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).