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

cp

Functions

is_valid_owned(→ numpy.ndarray)

Check OGC validity of each geometry in an OwnedGeometryArray.

is_simple_owned(→ numpy.ndarray)

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.