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 intersections

  • build_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

cp

Functions

build_gpu_split_events(...)

renode_gpu_atomic_edges(...)

Split second-order crossings until the atomic relation is planar.

build_gpu_atomic_edges(...)

Build a planar exact atomic-edge carrier from source split events.

noded_boundary_segments_from_split_events_gpu(...)

Return one directed boundary atom for every adjacent split-event pair.

renode_grouped_boundary_segments_gpu(...)

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.