vibespatial.constructive.validity¶
GPU-accelerated geometry validity and simplicity checks.
OGC validity checks (is_valid) and geometric simplicity checks (is_simple) computed directly from OwnedGeometryArray coordinate buffers without Shapely materialization.
is_valid checks (matching GEOS/Shapely semantics): - Ring closure (first coord == last coord for polygon rings) - Minimum coordinate counts (LineString >= 2, Polygon ring >= 4) - Ring self-intersection (no non-adjacent segments cross within a ring) - Hole-in-shell containment (each hole’s first vertex inside exterior ring) - Ring-pair interaction: no proper crossing, collinear overlap, or
multi-touch (2+ distinct contact points) between distinct rings
Null/empty geometries return True (matching Shapely behavior)
Note: orientation (CCW/CW) is NOT checked by is_valid — GEOS does not enforce winding order as a validity rule. Use orient.py for that.
is_simple checks: - Points/MultiPoints: always True - LineStrings: no self-intersection (brute-force O(n^2) segment test) - Null/empty geometries return True
- ADR-0033: Tier 1 NVRTC for is_valid_rings, is_simple_segments,
holes_in_shell, and ring_pair_interaction kernels. Tier 2 CuPy for LineString validity (offset arithmetic) and per-ring-to-per-geometry reduction.
- ADR-0002: PREDICATE class. Constructive-style ring checks stay fp64 on
all devices (orientation/closure are exact comparisons, not distance metrics). Precision preamble wired for observability.
Attributes¶
Functions¶
|
Check OGC validity of each geometry in an OwnedGeometryArray. |
|
Check geometric simplicity of each geometry in an OwnedGeometryArray. |
Module Contents¶
- vibespatial.constructive.validity.cp = None¶
- vibespatial.constructive.validity.is_valid_owned(owned: vibespatial.geometry.owned.OwnedGeometryArray, *, dispatch_mode: vibespatial.runtime.ExecutionMode | str = ExecutionMode.AUTO, precision: vibespatial.runtime.precision.PrecisionMode | str = PrecisionMode.AUTO) numpy.ndarray¶
Check OGC validity of each geometry in an OwnedGeometryArray.
Checks performed per family: - Ring closure (first coord == last coord for polygon rings) - Minimum coordinate counts (LineString >= 2, Polygon ring >= 4) - Ring self-intersection (no non-adjacent segments cross within a ring) - Hole-in-shell containment (each hole’s first vertex inside exterior) - Ring-pair interaction: no proper crossing, collinear overlap, or
multi-touch (2+ distinct contact points) between distinct rings
Null and empty geometries return True, matching Shapely semantics.
Parameters¶
- ownedOwnedGeometryArray
The geometry array to validate.
- dispatch_modeExecutionMode or str
GPU/CPU/AUTO execution mode.
- precisionPrecisionMode or str
Precision dispatch mode (ADR-0002). PREDICATE class defaults to fp64.
Returns¶
- np.ndarray of bool
Per-geometry validity flags.
- vibespatial.constructive.validity.is_simple_owned(owned: vibespatial.geometry.owned.OwnedGeometryArray, *, dispatch_mode: vibespatial.runtime.ExecutionMode | str = ExecutionMode.AUTO, precision: vibespatial.runtime.precision.PrecisionMode | str = PrecisionMode.AUTO) numpy.ndarray¶
Check geometric simplicity of each geometry in an OwnedGeometryArray.
A geometry is simple if it has no self-intersections (no two non-adjacent segments properly cross).
Points / MultiPoints: always simple.
LineStrings: brute-force O(n^2) segment intersection test.
Polygons: each ring checked for self-intersection.
Null and empty geometries return True, matching Shapely semantics.
Parameters¶
- ownedOwnedGeometryArray
The geometry array to check.
- dispatch_modeExecutionMode or str
GPU/CPU/AUTO execution mode.
- precisionPrecisionMode or str
Precision dispatch mode (ADR-0002). PREDICATE class defaults to fp64.
Returns¶
- np.ndarray of bool
Per-geometry simplicity flags.