vibespatial.overlay.split¶
Split event generation and atomic edge construction.
Extracted from overlay/gpu.py (Phase 30 modularisation).
Public API¶
build_gpu_split_events— create split events from segment intersectionsbuild_gpu_atomic_edges— build atomic edges from split events
Internal helpers¶
_segment_metadata— host-side segment metadata extraction_segment_metadata_gpu— GPU-side segment metadata extraction_free_split_event_device_state— release split event GPU buffers_free_atomic_edge_excess— release unneeded atomic edge GPU buffers
Attributes¶
Functions¶
Split second-order crossings until the atomic relation is planar. |
|
Build a planar exact atomic-edge carrier from source split events. |
|
Return one directed boundary atom for every adjacent split-event pair. |
|
Reach a planar fixed point for grouped boundary atoms on the device. |
Module Contents¶
- vibespatial.overlay.split.cp = None¶
- vibespatial.overlay.split.build_gpu_split_events(left, right, *, intersection_result: vibespatial.spatial.segment_primitives.SegmentIntersectionResult | vibespatial.spatial.segment_primitives.PagedSegmentIntersectionResult | None = None, dispatch_mode: vibespatial.runtime.ExecutionMode | str = ExecutionMode.GPU, _cached_left_segments: vibespatial.spatial.segment_primitives.DeviceSegmentTable | None = None, _cached_right_segments: vibespatial.spatial.segment_primitives.DeviceSegmentTable | None = None, right_segment_broadcast: vibespatial.spatial.segment_primitives.DeviceBroadcastSegmentRelation | None = None, require_same_row: bool = False, use_same_row_fast_path: bool | None = None, same_row_single_group: bool = False, same_row_span_summary: tuple[int, int, int] | None = None, right_geometry_source_rows: cupy.ndarray | numpy.ndarray | None = None, include_same_side_splits: bool = False) vibespatial.overlay.types.SplitEventTable¶
- vibespatial.overlay.split.renode_gpu_atomic_edges(atomic_edges: vibespatial.overlay.types.AtomicEdgeTable, *, isolate_rows: bool, preserve_source_orientation: bool = False) vibespatial.overlay.types.AtomicEdgeTable¶
Split second-order crossings until the atomic relation is planar.
Refined intersection coordinates can create a new crossing a few ULPs from a source endpoint. A planar overlay graph therefore needs a fixed- point noding stage after the first source-segment split. Each pass is shaped by forward atomic segments and returns immediately when the merged event carrier contains only the two existing endpoints per segment.
- vibespatial.overlay.split.build_gpu_atomic_edges(split_events: vibespatial.overlay.types.SplitEventTable, *, isolate_rows: bool = False, preserve_source_orientation: bool = False) vibespatial.overlay.types.AtomicEdgeTable¶
Build a planar exact atomic-edge carrier from source split events.
Pairwise refined intersection coordinates can introduce second-order crossings after the first source-segment split. Atomic topology therefore includes fixed-point re-noding as part of its contract; consumers never receive a merely once-split graph and do not need operation-specific planarity repair.
- vibespatial.overlay.split.noded_boundary_segments_from_split_events_gpu(split_events: vibespatial.overlay.types.SplitEventTable) tuple[cupy.ndarray, cupy.ndarray, cupy.ndarray, cupy.ndarray, cupy.ndarray]¶
Return one directed boundary atom for every adjacent split-event pair.
Unlike
build_gpu_atomic_edges(), this carrier intentionally preserves source multiplicity. Coverage union needs that multiplicity so coincident atoms can be removed by group-local odd parity after every partial overlap has been noded. The returned arrays own their gathered storage and remain valid after the split-event state is released.
- vibespatial.overlay.split.renode_grouped_boundary_segments_gpu(start_x, start_y, end_x, end_y, row_indices, *, placeholder_owned) tuple[cupy.ndarray, cupy.ndarray, cupy.ndarray, cupy.ndarray, cupy.ndarray]¶
Reach a planar fixed point for grouped boundary atoms on the device.
Intersection coordinates can induce a crossing between newly split atoms even when every original source pair was classified exactly. Reclassify the segment relation itself in bounded pages and preserve one output atom per source occurrence; collective coverage depends on that multiplicity.