tiny.smg.graph
Defined in tiny.smg.
API (29)
Actions
Public operations.
SuffixIterator.nextSuffixIterator.nextNodeaddEdgeaddEdgeTrackedaddNodeappendSuffixMatchesbuildSuffixIndexclonedeinitedgeKeyedgeKeyIntoedgeKeyLengetNodeincomingEdgesinitisScanoutgoingEdgesremoveEdgeremoveNodesreserveAdjacencyreserveEdgesreserveNodessuffixIndexReadysuffixIterator
Types and contracts
Public types and contracts.
Values and defaults
Public values and defaults.
Source
Source: tools/smg/src/graph.zig
zig
const std = @import("std");const alloc_phase = @import("alloc_phase");const model = @import("model.zig");pub const edge_key_separator: u8 = 0x1f;pub const Error = error{ NodeNotFound, EdgeNotFound, AmbiguousName, CapacityOverflow,};const SuffixEntry = struct { hash: u64, node: u32, start: u32,};pub const SuffixIndex = struct { pub const Limits = struct { entries: usize, nodes: usize, max_name_bytes: usize, }; pub const Capacity = struct { entries: usize, nodes: usize, max_name_bytes: usize, bytes: usize, pub fn derive(limits: Limits) error{CapacityOverflow}!Capacity { if (limits.nodes > std.math.maxInt(u32)) return error.CapacityOverflow; if (limits.max_name_bytes > std.math.maxInt(u32)) return error.CapacityOverflow; return .{ .entries = limits.entries, .nodes = limits.nodes, .max_name_bytes = limits.max_name_bytes, .bytes = std.math.mul(usize, limits.entries, @sizeOf(SuffixEntry)) catch return error.CapacityOverflow, }; } }; pub const InitError = std.mem.Allocator.Error || error{CapacityOverflow}; pub const claim: alloc_phase.capacity.Declaration = .{ .source = .{ .id = "smg.suffix_index", .kind = .phase_static, .limit_source = .caller, .storage = .{ .covered = &.{ .{ .id = "one_compact_hash_node_and_suffix_start_record_per_d_8a2d437489ef", .lifetime = .steady, .detail = "one compact hash, node, and suffix-start record per dotted-name suffix", }, }, .excluded = &.{ "graph nodes and decoded name storage referenced by index records", "caller-owned resolution result arrays", "linear fallback after graph mutation invalidates the snapshot", }, }, .capacity = .{ .inputs = &.{ alloc_phase.capacity.bindInput(Limits, "entries", "entries"), alloc_phase.capacity.bindInput(Limits, "max_name_bytes", "max_name_bytes"), alloc_phase.capacity.bindInput(Limits, "nodes", "nodes"), }, .type_selectors = &.{}, .nodes = &.{ .{ .input = 0 }, .{ .input = 1 }, .{ .input = 2 }, .{ .add = .{ .left = 0, .right = 1 } }, .{ .add = .{ .left = 3, .right = 2 } }, }, .assertions = &.{.{ .scope = .closure_total, .measure = .retained, .relation = .upper_bound, .expression = 4, }}, }, .overload = .{ .kind = .reject_before_seal, .detail = "checked entry and byte counts plus u32 node and name bounds reject overflow or OOM before activation", }, .risks = .{ .transitive = .{ .status = .open, .detail = "standard hash and sort helpers are allocation-free in the witness but lack a transitive allocation-closure certificate", }, .foreign = .{ .status = .excluded, .detail = "the index is process-local caller-owned memory with no operating-system or callback edge", }, }, .obligations = &.{ .{ .key = "smg_suffix_index_capacity_capacity_model", .role = .capacity_model }, .{ .key = "smg_suffix_index_capacity_overload", .role = .overload }, .{ .key = "smg_suffix_index_oom", .role = .overload }, .{ .key = "smg_suffix_index_sealed_transitive_risk", .role = .transitive_risk }, .{ .key = "smg_suffix_index_sealed_foreign_risk", .role = .foreign_risk }, .{ .key = "smg_suffix_index_invalidation", .role = .custom }, }, }, .bindings = .{ .owner = @This(), .seal = .{ .family = alloc_phase.capacity.selector(@This().activate), .premise = .{ .class = .checked_semantic_fact, .authority = .checker, }, }, .teardown = .{ .family = alloc_phase.capacity.selector(@This().deinit), .premise = .{ .class = .checked_semantic_fact, .authority = .checker, }, }, }, }; phase: alloc_phase.capacity.Phase, capacity: Capacity, entries: []SuffixEntry, pub fn init(allocator: std.mem.Allocator, limits: Limits) InitError!SuffixIndex { const capacity = try Capacity.derive(limits); const entries = if (capacity.entries == 0) @constCast((&[_]SuffixEntry{})[0..]) else try allocator.alloc(SuffixEntry, capacity.entries); return .{ .phase = .initialization, .capacity = capacity, .entries = entries, }; } pub fn fill(self: *SuffixIndex, nodes: []const model.Node) void { std.debug.assert(self.phase == .initialization); std.debug.assert(nodes.len == self.capacity.nodes); var filled: usize = 0; for (nodes, 0..) |node, node_index| { std.debug.assert(node.name.len <= self.capacity.max_name_bytes); var start: usize = 0; while (start < node.name.len) { std.debug.assert(filled < self.entries.len); self.entries[filled] = .{ .hash = std.hash_map.hashString(node.name[start..]), .node = @intCast(node_index), .start = @intCast(start), }; filled += 1; const dot = std.mem.indexOfScalar(u8, node.name[start..], '.') orelse break; start += dot + 1; } } std.debug.assert(filled == self.entries.len); std.mem.sort(SuffixEntry, self.entries, {}, suffixEntryLess); } pub fn activate(self: *SuffixIndex) void { std.debug.assert(self.phase == .initialization); self.phase = .steady; } pub fn deinit(self: *SuffixIndex, allocator: std.mem.Allocator) void { std.debug.assert(self.phase != .teardown); self.phase = .teardown; if (self.entries.len != 0) allocator.free(self.entries); self.* = undefined; } pub fn hashMatches(self: *const SuffixIndex, hash: u64) []const SuffixEntry { std.debug.assert(self.phase == .steady); const start = suffixHashLowerBound(self.entries, hash); const end = suffixHashUpperBound(self.entries[start..], hash) + start; return self.entries[start..end]; }};comptime { alloc_phase.capacity.requireAllocatorExactOwnerShape(SuffixIndex);}pub const Graph = struct { allocator: std.mem.Allocator, nodes: std.ArrayList(model.Node) = .empty, edges: std.ArrayList(model.Edge) = .empty, node_index: std.StringHashMap(usize), suffix_index: ?SuffixIndex = null, edge_index: std.StringHashMap(usize), incoming_index: std.ArrayList(std.ArrayList(usize)) = .empty, outgoing_index: std.ArrayList(std.ArrayList(usize)) = .empty,};pub fn init(allocator: std.mem.Allocator) Graph { return .{ .allocator = allocator, .node_index = std.StringHashMap(usize).init(allocator), .edge_index = std.StringHashMap(usize).init(allocator), };}pub fn clone(allocator: std.mem.Allocator, scratch: std.mem.Allocator, source: Graph) !Graph { var graph = init(allocator); errdefer { for (graph.nodes.items) |*node| model.deinitNode(node, allocator); for (graph.edges.items) |*edge| model.deinitEdge(edge, allocator); deinit(&graph); } try reserveNodes(&graph, source.nodes.items.len); for (source.nodes.items) |node| { var cloned = try model.cloneNode(allocator, node); errdefer model.deinitNode(&cloned, allocator); try addNode(&graph, cloned); } try reserveEdges(&graph, source.edges.items.len); const incoming = try scratch.alloc(usize, source.nodes.items.len); defer scratch.free(incoming); const outgoing = try scratch.alloc(usize, source.nodes.items.len); defer scratch.free(outgoing); for (source.nodes.items, 0..) |_, index| { incoming[index] = source.incoming_index.items[index].items.len; outgoing[index] = source.outgoing_index.items[index].items.len; } try reserveAdjacency(&graph, incoming, outgoing); for (source.edges.items) |edge| { var cloned = try model.cloneEdge(allocator, edge); errdefer model.deinitEdge(&cloned, allocator); try addEdge(&graph, cloned); } return graph;}pub fn deinit(graph: *Graph) void { graph.nodes.deinit(graph.allocator); graph.edges.deinit(graph.allocator); graph.node_index.deinit(); if (graph.suffix_index) |*index| index.deinit(graph.allocator); var edge_it = graph.edge_index.iterator(); while (edge_it.next()) |entry| graph.allocator.free(entry.key_ptr.*); graph.edge_index.deinit(); for (graph.incoming_index.items) |*list| list.deinit(graph.allocator); graph.incoming_index.deinit(graph.allocator); for (graph.outgoing_index.items) |*list| list.deinit(graph.allocator); graph.outgoing_index.deinit(graph.allocator); graph.* = undefined;}pub fn incomingEdges(graph: *const Graph, name: []const u8) []const usize { const index = graph.node_index.get(name) orelse return &.{}; return graph.incoming_index.items[index].items;}pub fn outgoingEdges(graph: *const Graph, name: []const u8) []const usize { const index = graph.node_index.get(name) orelse return &.{}; return graph.outgoing_index.items[index].items;}pub fn reserveNodes(graph: *Graph, count: usize) !void { const map_count = std.math.cast(u32, count) orelse return Error.CapacityOverflow; try graph.nodes.ensureTotalCapacityPrecise(graph.allocator, count); try graph.node_index.ensureTotalCapacity(map_count); try graph.incoming_index.ensureTotalCapacityPrecise(graph.allocator, count); try graph.outgoing_index.ensureTotalCapacityPrecise(graph.allocator, count);}pub fn reserveEdges(graph: *Graph, count: usize) !void { const map_count = std.math.cast(u32, count) orelse return Error.CapacityOverflow; try graph.edges.ensureTotalCapacityPrecise(graph.allocator, count); try graph.edge_index.ensureTotalCapacity(map_count);}pub fn reserveAdjacency(graph: *Graph, incoming: []const usize, outgoing: []const usize) !void { std.debug.assert(incoming.len == graph.incoming_index.items.len); std.debug.assert(outgoing.len == graph.outgoing_index.items.len); for (graph.incoming_index.items, incoming) |*list, count| { try list.ensureTotalCapacityPrecise(graph.allocator, count); } for (graph.outgoing_index.items, outgoing) |*list, count| { try list.ensureTotalCapacityPrecise(graph.allocator, count); }}pub fn addNode(graph: *Graph, node: model.Node) !void { if (graph.node_index.get(node.name)) |index| { var existing = &graph.nodes.items[index]; existing.type = node.type; if (node.file != null) existing.file = node.file; if (node.line != null) existing.line = node.line; if (node.end_line != null) existing.end_line = node.end_line; if (node.docstring != null) existing.docstring = node.docstring; if (node.metadata.len != 0) existing.metadata = try model.mergePairs(graph.allocator, existing.metadata, node.metadata); return; } try graph.nodes.append(graph.allocator, node); errdefer _ = graph.nodes.pop(); try graph.node_index.put(node.name, graph.nodes.items.len - 1); errdefer _ = graph.node_index.remove(node.name); try graph.incoming_index.append(graph.allocator, .empty); errdefer _ = graph.incoming_index.pop(); try graph.outgoing_index.append(graph.allocator, .empty); errdefer _ = graph.outgoing_index.pop(); invalidateSuffixIndex(graph);}pub fn buildSuffixIndex(graph: *Graph) !void { if (graph.suffix_index != null) return; const limits = try suffixIndexLimits(graph.nodes.items); var index = try SuffixIndex.init(graph.allocator, limits); errdefer index.deinit(graph.allocator); index.fill(graph.nodes.items); index.activate(); graph.suffix_index = index;}pub fn suffixIndexReady(graph: Graph) bool { return graph.suffix_index != null;}pub const SuffixIterator = struct { graph: *const Graph, raw: []const u8, entries: ?[]const SuffixEntry, position: usize = 0, pub fn nextNode(self: *SuffixIterator) ?*const model.Node { if (self.entries) |entries| { while (self.position < entries.len) { const entry = entries[self.position]; self.position += 1; if (!suffixEntryMatches(self.graph.nodes.items, entry, self.raw)) continue; return &self.graph.nodes.items[entry.node]; } return null; } while (self.position < self.graph.nodes.items.len) { const node = &self.graph.nodes.items[self.position]; self.position += 1; if (matchesDottedSuffix(node.name, self.raw)) return node; } return null; } pub fn next(self: *SuffixIterator) ?[]const u8 { const node = self.nextNode() orelse return null; return node.name; }};pub fn suffixIterator(graph: *const Graph, raw: []const u8) SuffixIterator { return .{ .graph = graph, .raw = raw, .entries = if (graph.suffix_index) |*index| index.hashMatches(std.hash_map.hashString(raw)) else null, };}pub fn appendSuffixMatches(graph: Graph, allocator: std.mem.Allocator, raw: []const u8, out: *std.ArrayList([]const u8)) !void { var iterator = suffixIterator(&graph, raw); while (iterator.next()) |name| try out.append(allocator, name);}fn suffixEntryMatches(nodes: []const model.Node, entry: SuffixEntry, raw: []const u8) bool { const node = nodes[entry.node]; return std.mem.eql(u8, node.name[entry.start..], raw);}fn matchesDottedSuffix(name: []const u8, suffix: []const u8) bool { if (!std.mem.endsWith(u8, name, suffix)) return false; if (name.len == suffix.len) return true; return name[name.len - suffix.len - 1] == '.';}fn suffixMatchCount(graph: Graph, raw: []const u8) usize { var count: usize = 0; var iterator = suffixIterator(&graph, raw); while (iterator.next() != null) count += 1; return count;}pub fn addEdge(graph: *Graph, edge: model.Edge) !void { _ = try addEdgeTracked(graph, edge);}pub fn addEdgeTracked(graph: *Graph, edge: model.Edge) !bool { if (!graph.node_index.contains(edge.source) or !graph.node_index.contains(edge.target)) return Error.NodeNotFound; var stack: [4096]u8 = undefined; const key_len = edgeKeyLen(edge.source, edge.rel, edge.target); const lookup_key = if (key_len <= stack.len) edgeKeyInto(stack[0..key_len], edge.source, edge.rel, edge.target) else try edgeKey(graph.allocator, edge.source, edge.rel, edge.target); var lookup_key_owned = key_len > stack.len; errdefer if (lookup_key_owned) graph.allocator.free(lookup_key); if (graph.edge_index.get(lookup_key)) |index| { defer if (lookup_key_owned) graph.allocator.free(lookup_key); if (edge.metadata.len != 0) graph.edges.items[index].metadata = try model.mergePairs(graph.allocator, graph.edges.items[index].metadata, edge.metadata); return false; } const key = if (lookup_key_owned) key: { lookup_key_owned = false; break :key lookup_key; } else try graph.allocator.dupe(u8, lookup_key); var key_owned = true; errdefer if (key_owned) graph.allocator.free(key); try graph.edges.append(graph.allocator, edge); errdefer _ = graph.edges.pop(); const edge_position = graph.edges.items.len - 1; const source_index = graph.node_index.get(edge.source).?; const target_index = graph.node_index.get(edge.target).?; try graph.outgoing_index.items[source_index].append(graph.allocator, edge_position); errdefer _ = graph.outgoing_index.items[source_index].pop(); try graph.incoming_index.items[target_index].append(graph.allocator, edge_position); errdefer _ = graph.incoming_index.items[target_index].pop(); try graph.edge_index.put(key, edge_position); key_owned = false; return true;}pub fn getNode(graph: *const Graph, name: []const u8) ?model.Node { const index = graph.node_index.get(name) orelse return null; return graph.nodes.items[index];}const dead_position = std.math.maxInt(usize);pub fn removeNodes(graph: *Graph, names: []const []const u8) !void { if (names.len == 0) return; var removed = std.StringHashMap(void).init(graph.allocator); defer removed.deinit(); try removed.ensureTotalCapacity(@intCast(names.len)); for (names) |name| { if (!graph.node_index.contains(name)) return Error.NodeNotFound; removed.putAssumeCapacity(name, {}); } const node_map = try graph.allocator.alloc(usize, graph.nodes.items.len); defer graph.allocator.free(node_map); const edge_map = try graph.allocator.alloc(usize, graph.edges.items.len); defer graph.allocator.free(edge_map); const key_buffer = try graph.allocator.alloc(u8, maxRetiredEdgeKeyLen(graph.*, removed)); defer graph.allocator.free(key_buffer); const kept_nodes = planNodeRemoval(graph.*, removed, node_map); const kept_edges = planEdgeRemoval(graph.*, removed, edge_map); std.debug.assert(kept_nodes < graph.nodes.items.len); invalidateSuffixIndex(graph); pruneEdgeIndex(graph, edge_map, key_buffer); pruneNodeIndex(graph, names, node_map); compactAdjacency(graph, node_map, edge_map, kept_nodes); compactEdges(graph, edge_map, kept_edges); compactNodes(graph, node_map, kept_nodes); std.debug.assert(graph.nodes.items.len == kept_nodes); std.debug.assert(graph.edges.items.len == kept_edges); std.debug.assert(graph.node_index.count() == kept_nodes); std.debug.assert(graph.edge_index.count() == kept_edges);}pub fn removeEdge(graph: *Graph, source: []const u8, rel: []const u8, target: []const u8) !void { var stack: [4096]u8 = undefined; const key_len = edgeKeyLen(source, rel, target); const lookup_key = if (key_len <= stack.len) edgeKeyInto(stack[0..key_len], source, rel, target) else try edgeKey(graph.allocator, source, rel, target); defer if (key_len > stack.len) graph.allocator.free(lookup_key); const entry = graph.edge_index.fetchRemove(lookup_key) orelse return Error.EdgeNotFound; graph.allocator.free(entry.key); const position = entry.value; std.debug.assert(position < graph.edges.items.len); _ = graph.edges.orderedRemove(position); var index_it = graph.edge_index.valueIterator(); while (index_it.next()) |value| { std.debug.assert(value.* != position); if (value.* > position) value.* -= 1; } for (graph.incoming_index.items) |*list| dropEdgeReference(list, position); for (graph.outgoing_index.items) |*list| dropEdgeReference(list, position);}fn dropEdgeReference(list: *std.ArrayList(usize), position: usize) void { var write: usize = 0; for (list.items) |reference| { if (reference == position) continue; list.items[write] = if (reference > position) reference - 1 else reference; write += 1; } list.shrinkRetainingCapacity(write);}fn maxRetiredEdgeKeyLen(graph: Graph, removed: std.StringHashMap(void)) usize { var max_len: usize = 0; for (graph.edges.items) |edge| { if (!removed.contains(edge.source) and !removed.contains(edge.target)) continue; max_len = @max(max_len, edgeKeyLen(edge.source, edge.rel, edge.target)); } return max_len;}fn planNodeRemoval(graph: Graph, removed: std.StringHashMap(void), node_map: []usize) usize { var kept: usize = 0; for (graph.nodes.items, 0..) |node, index| { if (removed.contains(node.name)) { node_map[index] = dead_position; } else { node_map[index] = kept; kept += 1; } } return kept;}fn planEdgeRemoval(graph: Graph, removed: std.StringHashMap(void), edge_map: []usize) usize { var kept: usize = 0; for (graph.edges.items, 0..) |edge, index| { if (removed.contains(edge.source) or removed.contains(edge.target)) { edge_map[index] = dead_position; } else { edge_map[index] = kept; kept += 1; } } return kept;}fn pruneEdgeIndex(graph: *Graph, edge_map: []const usize, key_buffer: []u8) void { for (graph.edges.items, 0..) |edge, index| { if (edge_map[index] != dead_position) continue; const key_len = edgeKeyLen(edge.source, edge.rel, edge.target); std.debug.assert(key_len <= key_buffer.len); const key = edgeKeyInto(key_buffer[0..key_len], edge.source, edge.rel, edge.target); const entry = graph.edge_index.fetchRemove(key) orelse unreachable; graph.allocator.free(entry.key); } var values = graph.edge_index.valueIterator(); while (values.next()) |value| { std.debug.assert(edge_map[value.*] != dead_position); value.* = edge_map[value.*]; }}fn pruneNodeIndex(graph: *Graph, names: []const []const u8, node_map: []const usize) void { for (names) |name| _ = graph.node_index.remove(name); var values = graph.node_index.valueIterator(); while (values.next()) |value| { std.debug.assert(node_map[value.*] != dead_position); value.* = node_map[value.*]; }}fn compactAdjacency(graph: *Graph, node_map: []const usize, edge_map: []const usize, kept_nodes: usize) void { remapAdjacencyLists(graph, graph.incoming_index.items, node_map, edge_map); remapAdjacencyLists(graph, graph.outgoing_index.items, node_map, edge_map); graph.incoming_index.shrinkRetainingCapacity(kept_nodes); graph.outgoing_index.shrinkRetainingCapacity(kept_nodes);}fn remapAdjacencyLists(graph: *Graph, lists: []std.ArrayList(usize), node_map: []const usize, edge_map: []const usize) void { for (lists, 0..) |*list, index| { if (node_map[index] == dead_position) { list.deinit(graph.allocator); continue; } var write: usize = 0; for (list.items) |reference| { if (edge_map[reference] == dead_position) continue; list.items[write] = edge_map[reference]; write += 1; } list.shrinkRetainingCapacity(write); std.debug.assert(node_map[index] <= index); lists[node_map[index]] = list.*; }}fn compactEdges(graph: *Graph, edge_map: []const usize, kept_edges: usize) void { for (graph.edges.items, 0..) |edge, index| { if (edge_map[index] == dead_position) continue; std.debug.assert(edge_map[index] <= index); graph.edges.items[edge_map[index]] = edge; } graph.edges.shrinkRetainingCapacity(kept_edges);}fn compactNodes(graph: *Graph, node_map: []const usize, kept_nodes: usize) void { for (graph.nodes.items, 0..) |node, index| { if (node_map[index] == dead_position) continue; graph.nodes.items[node_map[index]] = node; } graph.nodes.shrinkRetainingCapacity(kept_nodes);}fn suffixIndexLimits(nodes: []const model.Node) error{CapacityOverflow}!SuffixIndex.Limits { if (nodes.len > std.math.maxInt(u32)) return error.CapacityOverflow; var entries: usize = 0; var max_name_bytes: usize = 0; for (nodes) |node| { if (node.name.len > std.math.maxInt(u32)) return error.CapacityOverflow; max_name_bytes = @max(max_name_bytes, node.name.len); var suffixes = if (node.name.len == 0) 0 else std.math.add(usize, std.mem.countScalar(u8, node.name, '.'), 1) catch return error.CapacityOverflow; if (node.name.len != 0 and node.name[node.name.len - 1] == '.') suffixes -= 1; entries = std.math.add(usize, entries, suffixes) catch return error.CapacityOverflow; } const limits = SuffixIndex.Limits{ .entries = entries, .nodes = nodes.len, .max_name_bytes = max_name_bytes, }; _ = try SuffixIndex.Capacity.derive(limits); return limits;}fn invalidateSuffixIndex(graph: *Graph) void { if (graph.suffix_index) |*index| index.deinit(graph.allocator); graph.suffix_index = null;}fn suffixEntryLess(_: void, left: SuffixEntry, right: SuffixEntry) bool { return left.hash < right.hash;}fn suffixHashLowerBound(entries: []const SuffixEntry, hash: u64) usize { var lower: usize = 0; var upper = entries.len; while (lower < upper) { const middle = lower + (upper - lower) / 2; if (entries[middle].hash < hash) { lower = middle + 1; } else { upper = middle; } } return lower;}fn suffixHashUpperBound(entries: []const SuffixEntry, hash: u64) usize { var lower: usize = 0; var upper = entries.len; while (lower < upper) { const middle = lower + (upper - lower) / 2; if (entries[middle].hash <= hash) { lower = middle + 1; } else { upper = middle; } } return lower;}pub fn edgeKey(allocator: std.mem.Allocator, source: []const u8, rel: []const u8, target: []const u8) ![]const u8 { const out = try allocator.alloc(u8, edgeKeyLen(source, rel, target)); return edgeKeyInto(out, source, rel, target);}pub fn edgeKeyLen(source: []const u8, rel: []const u8, target: []const u8) usize { return source.len + 1 + rel.len + 1 + target.len;}pub fn edgeKeyInto(out: []u8, source: []const u8, rel: []const u8, target: []const u8) []const u8 { var index: usize = 0; @memcpy(out[index..][0..source.len], source); index += source.len; out[index] = edge_key_separator; index += 1; @memcpy(out[index..][0..rel.len], rel); index += rel.len; out[index] = edge_key_separator; index += 1; @memcpy(out[index..][0..target.len], target); return out;}pub fn isScan(pairs: []const model.Pair) bool { const source = model.pairValue(pairs, "source") orelse return false; return std.mem.eql(u8, source, "scan");}test "graph clone owns payload independently" { var source_arena = std.heap.ArenaAllocator.init(std.testing.allocator); var source_live = true; defer if (source_live) source_arena.deinit(); const source_allocator = source_arena.allocator(); var source = init(source_allocator); const metadata = try model.sourcePair(source_allocator, "scan"); const parent = try source_allocator.dupe(u8, "app"); const child = try source_allocator.dupe(u8, "app.main"); try addNode(&source, .{ .name = parent, .type = try source_allocator.dupe(u8, model.NodeType.module), .file = try source_allocator.dupe(u8, "app.zig"), .metadata = metadata, }); try addNode(&source, .{ .name = child, .type = try source_allocator.dupe(u8, model.NodeType.function), .docstring = try source_allocator.dupe(u8, "entrypoint"), .metadata = metadata, }); try addEdge(&source, .{ .source = try source_allocator.dupe(u8, parent), .rel = try source_allocator.dupe(u8, model.RelType.contains), .target = try source_allocator.dupe(u8, child), .metadata = metadata, }); var cloned_arena = std.heap.ArenaAllocator.init(std.testing.allocator); defer cloned_arena.deinit(); const cloned = try clone(cloned_arena.allocator(), std.testing.allocator, source); try std.testing.expect(source.nodes.items[0].name.ptr != cloned.nodes.items[0].name.ptr); try std.testing.expect(source.edges.items[0].source.ptr != cloned.edges.items[0].source.ptr); source_arena.deinit(); source_live = false; try std.testing.expectEqualStrings("app.zig", getNode(&cloned, "app").?.file.?); try std.testing.expectEqualStrings("entrypoint", getNode(&cloned, "app.main").?.docstring.?); try std.testing.expectEqualStrings("scan", model.pairValue(cloned.edges.items[0].metadata, "source").?); try std.testing.expectEqual(@as(usize, 1), outgoingEdges(&cloned, "app").len); try std.testing.expectEqual(@as(usize, 1), incomingEdges(&cloned, "app.main").len);}fn checkGraphCloneAllocationFailures(allocator: std.mem.Allocator) !void { var source = init(std.testing.allocator); defer deinit(&source); try addNode(&source, .{ .name = "app", .type = model.NodeType.module, .file = "app.zig" }); try addNode(&source, .{ .name = "app.main", .type = model.NodeType.function, .docstring = "entrypoint" }); try addEdge(&source, .{ .source = "app", .rel = model.RelType.contains, .target = "app.main" }); var cloned = try clone(allocator, allocator, source); defer { for (cloned.nodes.items) |*node| model.deinitNode(node, allocator); for (cloned.edges.items) |*edge| model.deinitEdge(edge, allocator); deinit(&cloned); } try std.testing.expectEqual(@as(usize, 2), cloned.nodes.items.len); try std.testing.expectEqual(@as(usize, 1), cloned.edges.items.len);}test "graph clone cleans every allocation failure" { try std.testing.checkAllAllocationFailures( std.testing.allocator, checkGraphCloneAllocationFailures, .{}, );}test "graph operations clean up allocation failures" { try std.testing.checkAllAllocationFailures( std.testing.allocator, checkGraphAllocationFailures, .{}, );}fn checkGraphAllocationFailures(allocator: std.mem.Allocator) !void { const source = &(@as([4100]u8, @splat('s'))); const target = &(@as([4100]u8, @splat('t'))); var graph = init(allocator); defer deinit(&graph); try buildSuffixIndex(&graph); try addNode(&graph, .{ .name = source, .type = model.NodeType.module }); try addNode(&graph, .{ .name = target, .type = model.NodeType.function }); removeEdge(&graph, source, model.RelType.calls, target) catch |err| switch (err) { error.OutOfMemory => return err, Error.EdgeNotFound => {}, else => return err, }; try std.testing.expect(try addEdgeTracked(&graph, .{ .source = source, .rel = model.RelType.calls, .target = target })); try std.testing.expect(!try addEdgeTracked(&graph, .{ .source = source, .rel = model.RelType.calls, .target = target })); try removeEdge(&graph, source, model.RelType.calls, target); try removeNodes(&graph, &.{target});}fn modelSuffixIndexBytes(nodes: []const model.Node) ?usize { if (nodes.len > std.math.maxInt(u32)) return null; var entries: usize = 0; for (nodes) |node| { if (node.name.len > std.math.maxInt(u32)) return null; var suffixes: usize = 0; for (node.name) |byte| { if (byte != '.') continue; if (suffixes == std.math.maxInt(usize)) return null; suffixes += 1; } if (node.name.len != 0) { if (suffixes == std.math.maxInt(usize)) return null; suffixes += 1; } if (node.name.len != 0 and node.name[node.name.len - 1] == '.') suffixes -= 1; if (entries > std.math.maxInt(usize) - suffixes) return null; entries += suffixes; } if (entries > std.math.maxInt(usize) / @sizeOf(SuffixEntry)) return null; return entries * @sizeOf(SuffixEntry);}test "suffix index capacity matches an independent dotted-name model" { comptime { @stardustClaim( @import("alloc_phase").capacity.witness(SuffixIndex, "smg_suffix_index_capacity_capacity_model"), null, null, null, null, null, null, ); } comptime { @stardustClaim( @import("alloc_phase").capacity.witness(SuffixIndex, "smg_suffix_index_capacity_overload"), null, null, null, null, null, null, ); } const nodes = [_]model.Node{ .{ .name = "", .type = model.NodeType.module }, .{ .name = "app", .type = model.NodeType.module }, .{ .name = "app.main", .type = model.NodeType.function }, .{ .name = "lib.util.main", .type = model.NodeType.function }, .{ .name = "trailing.", .type = model.NodeType.module }, }; const limits = try suffixIndexLimits(&nodes); const capacity = try SuffixIndex.Capacity.derive(limits); try std.testing.expectEqual(modelSuffixIndexBytes(&nodes).?, capacity.bytes); try std.testing.expectEqual(@as(usize, 7), capacity.entries); const overflow = SuffixIndex.Limits{ .entries = std.math.maxInt(usize), .nodes = 0, .max_name_bytes = 0, }; try std.testing.expectError(error.CapacityOverflow, SuffixIndex.Capacity.derive(overflow));}fn checkSuffixIndexInitAllocationFailures(allocator: std.mem.Allocator) !void { var index = try SuffixIndex.init(allocator, .{ .entries = 8, .nodes = 3, .max_name_bytes = 32 }); index.deinit(allocator);}test "suffix index initialization cleans allocation failure and retries" { comptime { @stardustClaim( @import("alloc_phase").capacity.witness(SuffixIndex, "smg_suffix_index_oom"), null, null, null, null, null, null, ); } try std.testing.checkAllAllocationFailures( std.testing.allocator, checkSuffixIndexInitAllocationFailures, .{}, ); const nodes = [_]model.Node{.{ .name = "node", .type = model.NodeType.module }}; var index = try SuffixIndex.init(std.testing.allocator, try suffixIndexLimits(&nodes)); defer index.deinit(std.testing.allocator); index.fill(&nodes); index.activate(); try std.testing.expectEqual(alloc_phase.capacity.Phase.steady, index.phase);}test "suffix index fills sorts and resolves while sealed" { comptime { @stardustClaim( @import("alloc_phase").capacity.witness(SuffixIndex, "smg_suffix_index_sealed_transitive_risk"), null, null, null, null, null, null, ); } comptime { @stardustClaim( @import("alloc_phase").capacity.witness(SuffixIndex, "smg_suffix_index_sealed_foreign_risk"), null, null, null, null, null, null, ); } const nodes = [_]model.Node{ .{ .name = "app.main", .type = model.NodeType.function }, .{ .name = "lib.main", .type = model.NodeType.function }, .{ .name = "lib.other", .type = model.NodeType.function }, }; var phase_allocator = try alloc_phase.SealedPhaseAllocator.init(std.testing.allocator); var index = try SuffixIndex.init( phase_allocator.initializationAllocator(), try suffixIndexLimits(&nodes), ); defer { if (phase_allocator.phase() == .initialization) phase_allocator.abortInitialization(); if (phase_allocator.phase() == .steady) phase_allocator.beginTeardown(); index.deinit(phase_allocator.teardownAllocator()); phase_allocator.deinit(); } const entries_pointer = index.entries.ptr; phase_allocator.seal(); index.fill(&nodes); const main_hash = std.hash_map.hashString("main"); for (index.entries) |*entry| { if (suffixEntryMatches(&nodes, entry.*, "other")) entry.hash = main_hash; } std.mem.sort(SuffixEntry, index.entries, {}, suffixEntryLess); index.activate(); var main_count: usize = 0; const candidates = index.hashMatches(main_hash); for (candidates) |entry| { if (suffixEntryMatches(&nodes, entry, "main")) main_count += 1; } try std.testing.expectEqual(@as(usize, 3), candidates.len); try std.testing.expectEqual(@as(usize, 2), main_count); try std.testing.expectEqual(entries_pointer, index.entries.ptr); try std.testing.expectEqual(@as(u64, 0), phase_allocator.violations().total());}test "suffix lookup preserves linear semantics across snapshot invalidation" { comptime { @stardustClaim( @import("alloc_phase").capacity.witness(SuffixIndex, "smg_suffix_index_invalidation"), null, null, null, null, null, null, ); } var graph = init(std.testing.allocator); defer deinit(&graph); try addNode(&graph, .{ .name = "app.main", .type = model.NodeType.function }); try addNode(&graph, .{ .name = "lib.util.main", .type = model.NodeType.function }); try std.testing.expect(!suffixIndexReady(graph)); try std.testing.expectEqual(@as(usize, 2), suffixMatchCount(graph, "main")); try buildSuffixIndex(&graph); try std.testing.expect(suffixIndexReady(graph)); try std.testing.expectEqual(@as(usize, 2), suffixMatchCount(graph, "main")); try std.testing.expectEqual(@as(usize, 1), suffixMatchCount(graph, "util.main")); var indexed = suffixIterator(&graph, "util.main"); const indexed_node = indexed.nextNode().?; try std.testing.expect(indexed_node == &graph.nodes.items[graph.node_index.get("lib.util.main").?]); try std.testing.expect(indexed.nextNode() == null); try addNode(&graph, .{ .name = "pkg.helper", .type = model.NodeType.function }); try std.testing.expect(!suffixIndexReady(graph)); try std.testing.expectEqual(@as(usize, 1), suffixMatchCount(graph, "helper")); try buildSuffixIndex(&graph); try std.testing.expectEqual(@as(usize, 1), suffixMatchCount(graph, "helper")); try removeNodes(&graph, &.{"app.main"}); try std.testing.expect(!suffixIndexReady(graph)); try std.testing.expectEqual(@as(usize, 1), suffixMatchCount(graph, "main")); try buildSuffixIndex(&graph); try std.testing.expectEqual(@as(usize, 1), suffixMatchCount(graph, "main")); var deferred = init(std.testing.allocator); defer deinit(&deferred); try addNode(&deferred, .{ .name = "app.main", .type = model.NodeType.function }); try addNode(&deferred, .{ .name = "app", .type = model.NodeType.module }); try addEdge(&deferred, .{ .source = "app", .rel = model.RelType.contains, .target = "app.main" }); try removeNodes(&deferred, &.{"app.main"}); try std.testing.expect(!suffixIndexReady(deferred));}test "node removal compacts storage in place" { var graph = init(std.testing.allocator); defer deinit(&graph); for ([_][]const u8{ "app", "app.first", "app.second", "keep" }) |name| { try addNode(&graph, .{ .name = name, .type = model.NodeType.function }); } try addEdge(&graph, .{ .source = "app", .rel = model.RelType.contains, .target = "app.first" }); try addEdge(&graph, .{ .source = "keep", .rel = model.RelType.calls, .target = "app.second" }); try addEdge(&graph, .{ .source = "app", .rel = model.RelType.calls, .target = "keep" }); try buildSuffixIndex(&graph); const nodes_ptr = graph.nodes.items.ptr; const edges_ptr = graph.edges.items.ptr; const nodes_capacity = graph.nodes.capacity; const edges_capacity = graph.edges.capacity; try removeNodes(&graph, &.{ "app.first", "app.second" }); try std.testing.expectEqual(nodes_ptr, graph.nodes.items.ptr); try std.testing.expectEqual(edges_ptr, graph.edges.items.ptr); try std.testing.expectEqual(nodes_capacity, graph.nodes.capacity); try std.testing.expectEqual(edges_capacity, graph.edges.capacity); try std.testing.expectEqual(@as(usize, 2), graph.nodes.items.len); try std.testing.expectEqual(@as(usize, 1), graph.edges.items.len); try std.testing.expectEqual(@as(usize, 1), outgoingEdges(&graph, "app").len); try std.testing.expectEqual(@as(usize, 1), incomingEdges(&graph, "keep").len); try std.testing.expectEqualStrings("keep", graph.edges.items[graph.edge_index.get("app\x1fcalls\x1fkeep").?].target); try removeEdge(&graph, "app", model.RelType.calls, "keep"); try std.testing.expectEqual(@as(usize, 0), graph.edges.items.len); try std.testing.expectEqual(@as(usize, 0), outgoingEdges(&graph, "app").len); try std.testing.expectEqual(@as(usize, 0), incomingEdges(&graph, "keep").len); try std.testing.expectEqual(edges_ptr, graph.edges.items.ptr);}test "batch node removal rebuilds graph indexes once" { var graph = init(std.testing.allocator); defer deinit(&graph); for ([_][]const u8{ "app", "app.first", "app.second", "keep" }) |name| { try addNode(&graph, .{ .name = name, .type = model.NodeType.function }); } try addEdge(&graph, .{ .source = "app", .rel = model.RelType.contains, .target = "app.first" }); try addEdge(&graph, .{ .source = "app", .rel = model.RelType.contains, .target = "app.second" }); try addEdge(&graph, .{ .source = "keep", .rel = model.RelType.calls, .target = "app.first" }); try addEdge(&graph, .{ .source = "app", .rel = model.RelType.calls, .target = "keep" }); try buildSuffixIndex(&graph); try removeNodes(&graph, &.{ "app.first", "app.second" }); try std.testing.expectEqual(@as(usize, 2), graph.nodes.items.len); try std.testing.expectEqual(@as(usize, 1), graph.edges.items.len); try std.testing.expect(graph.node_index.contains("app")); try std.testing.expect(graph.node_index.contains("keep")); try std.testing.expect(!graph.node_index.contains("app.first")); try std.testing.expect(!suffixIndexReady(graph)); try buildSuffixIndex(&graph); try std.testing.expectEqual(@as(usize, 0), suffixMatchCount(graph, "first")); try std.testing.expectEqual(@as(usize, 0), incomingEdges(&graph, "app").len); try std.testing.expectEqual(@as(usize, 1), incomingEdges(&graph, "keep").len); try std.testing.expectEqual(@as(usize, 1), outgoingEdges(&graph, "app").len); try std.testing.expectEqual(@as(usize, 0), outgoingEdges(&graph, "keep").len);}Source: tools/smg/src/root.zig:23
zig
pub const graph = @import("graph.zig");Complete caller list for graph.addEdge
8 direct callers.
tools.smg.src.graph.checkGraphCloneAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:735in nearest public ownertiny.smg.graphtiny.smg.graph.clone[function] attools/smg/src/graph.zig:212tools.smg.src.graph.test_batch_node_removal_rebuilds_graph_indexes_once[function] — test; no exact target attools/smg/src/graph.zig:1030in nearest public ownertiny.smg.graphtools.smg.src.graph.test_graph_clone_owns_payload_independently[function] — test; no exact target attools/smg/src/graph.zig:692in nearest public ownertiny.smg.graphtools.smg.src.graph.test_node_removal_compacts_storage_in_place[function] — test; no exact target attools/smg/src/graph.zig:995in nearest public ownertiny.smg.graphtools.smg.src.graph.test_suffix_lookup_preserves_linear_semantics_across_snapshot_invalidation[function] — test; no exact target attools/smg/src/graph.zig:945in nearest public ownertiny.smg.graphtools.smg.src.test.test_persisted_clean_rescan_preserves_edges_to_surviving_symbols[function] — test; no exact target attools/smg/src/test.zig:109in nearest public ownertools.smg.src.testtools.smg.src.test.test_persisted_ordinary_scan_retires_deleted_source_nodes[function] — test; no exact target attools/smg/src/test.zig:70in nearest public ownertools.smg.src.test
Complete caller list for graph.addNode
12 direct callers.
lib.choir.src.egraph.pattern.addTestBinary[function] — private source atlib/choir/src/egraph/pattern.zig:298in nearest public ownertiny.choir.egraph.patternlib.choir.src.egraph.pattern.addTestConstant[function] — private source atlib/choir/src/egraph/pattern.zig:281in nearest public ownertiny.choir.egraph.patterntiny.choir.egraph.pattern.instantiate[function] atlib/choir/src/egraph/pattern.zig:193tools.smg.src.graph.checkGraphAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:767in nearest public ownertiny.smg.graphtools.smg.src.graph.checkGraphCloneAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:735in nearest public ownertiny.smg.graphtiny.smg.graph.clone[function] attools/smg/src/graph.zig:212tools.smg.src.graph.test_batch_node_removal_rebuilds_graph_indexes_once[function] — test; no exact target attools/smg/src/graph.zig:1030in nearest public ownertiny.smg.graphtools.smg.src.graph.test_graph_clone_owns_payload_independently[function] — test; no exact target attools/smg/src/graph.zig:692in nearest public ownertiny.smg.graphtools.smg.src.graph.test_node_removal_compacts_storage_in_place[function] — test; no exact target attools/smg/src/graph.zig:995in nearest public ownertiny.smg.graphtools.smg.src.graph.test_suffix_lookup_preserves_linear_semantics_across_snapshot_invalidation[function] — test; no exact target attools/smg/src/graph.zig:945in nearest public ownertiny.smg.graphtools.smg.src.test.test_persisted_clean_rescan_preserves_edges_to_surviving_symbols[function] — test; no exact target attools/smg/src/test.zig:109in nearest public ownertools.smg.src.testtools.smg.src.test.test_persisted_ordinary_scan_retires_deleted_source_nodes[function] — test; no exact target attools/smg/src/test.zig:70in nearest public ownertools.smg.src.test
Complete call list for graph.clone
11 direct calls.
tiny.smg.graph.addEdge[function] attools/smg/src/graph.zig:393tiny.smg.graph.addNode[function] attools/smg/src/graph.zig:293tiny.smg.graph.deinit[function] attools/smg/src/graph.zig:243tiny.smg.graph.init[function] attools/smg/src/graph.zig:204tiny.smg.graph.reserveAdjacency[function] attools/smg/src/graph.zig:282tiny.smg.graph.reserveEdges[function] attools/smg/src/graph.zig:276tiny.smg.graph.reserveNodes[function] attools/smg/src/graph.zig:268tiny.smg.model.cloneEdge[function] attools/smg/src/model.zig:92tiny.smg.model.cloneNode[function] attools/smg/src/model.zig:77tiny.smg.model.deinitEdge[function] attools/smg/src/model.zig:69tiny.smg.model.deinitNode[function] attools/smg/src/model.zig:60
Complete caller list for graph.deinit
261 direct callers.
fun.sdfii.src.backend.accy.frame.runCpuGraph[function] — private; no exact target atfun/sdfii/src/backend/accy/frame.zig:376in nearest public ownerfun.sdfii.src.backend.accy.framefun.sdfii.src.backend.accy.lower.expectKernelMatchesCpuAtPoints[function] — private; no exact target atfun/sdfii/src/backend/accy/lower.zig:2191in nearest public ownerfun.sdfii.src.backend.accy.lowerfun.sdfii.src.backend.accy.march.expectMarchMatchesCpu[function] — private; no exact target atfun/sdfii/src/backend/accy/march.zig:375in nearest public ownerfun.sdfii.src.backend.accy.marchfun.sdfii.src.backend.accy.march.test_node_lowering_matches_the_cpu_evaluator_distances_and_materials[function] — test; no exact target atfun/sdfii/src/backend/accy/march.zig:522in nearest public ownerfun.sdfii.src.backend.accy.marchfun.sdfii.src.backend.accy.test.test_march_kernel_serves_frame_rays_on_a_live_cuda_device[function] — test; no exact target atfun/sdfii/src/backend/accy/test.zig:156in nearest public ownerfun.sdfii.src.backend.accy.testfun.sdfii.src.backend.cpu.buildPipelinePlan[function] — private; no exact target atfun/sdfii/src/backend/cpu.zig:200in nearest public ownerfun.sdfii.src.backend.cpufun.sdfii.src.backend.graph.test_render_graph_resolves_pass_resources_in_dependency_order[function] — test; no exact target atfun/sdfii/src/backend/graph.zig:446in nearest public ownerfun.sdfii.src.backend.graphfun.sdfii.src.backend.upload.test_upload_planner_derives_incremental_dirty_uploads_from_resource_usage[function] — test; no exact target atfun/sdfii/src/backend/upload.zig:340in nearest public ownerfun.sdfii.src.backend.uploadfun.sdfii.src.backend.upload.test_upload_planner_skips_resources_not_consumed_as_external_graph_inputs[function] — test; no exact target atfun/sdfii/src/backend/upload.zig:391in nearest public ownerfun.sdfii.src.backend.uploadfun.sdfii.src.engine.backend.test_backend_render_graph_validates_resources_and_executes_in_dependency_order[function] — test; no exact target atfun/sdfii/src/engine/backend.zig:88in nearest public ownertiny.sdfii.backendfun.sdfii.src.profiling.field.march.run.benchmarkFrameMarchWithConfig[function] — private; no exact target atfun/sdfii/src/profiling/field/march/run.zig:50in nearest public ownerfun.sdfii.src.profiling.field.march.runtiny.accy.executable.LoadedFragment.createLaunchGraphPlan[method] atlib/accy/src/executable/fragment.zig:302lib.accy.src.executable.fragment.LoadedFragment.launchAllWithOptions[method] — private source atlib/accy/src/executable/fragment.zig:600in nearest public ownertiny.accy.executable.fragmentlib.accy.src.executable.fragment.runKernelCallNativeCpuRuntimeScalarFragment[function] — private source atlib/accy/src/executable/fragment.zig:1512in nearest public ownertiny.accy.executable.fragmentlib.accy.src.executable.fragment.test_Choir_executable_fragment_explicit_launch_tuning_overrides_cached_records[function] — test source atlib/accy/src/executable/fragment.zig:3453in nearest public ownertiny.accy.executable.fragmentlib.accy.src.executable.fragment.test_Choir_executable_fragment_imports_launch_tuning_artifact_at_creation[function] — test source atlib/accy/src/executable/fragment.zig:3287in nearest public ownertiny.accy.executable.fragmentlib.accy.src.executable.fragment.test_Choir_executable_fragment_launches_prepared_graph_with_runtime_scalars[function] — test source atlib/accy/src/executable/fragment.zig:1900in nearest public ownertiny.accy.executable.fragmentlib.accy.src.executable.fragment.test_Choir_executable_fragment_measures_and_records_launch_candidates[function] — test source atlib/accy/src/executable/fragment.zig:2932in nearest public ownertiny.accy.executable.fragmentlib.accy.src.executable.fragment.test_Choir_executable_fragment_records_launch_candidate_records_and_applies_artifact_at_creation[function] — test source atlib/accy/src/executable/fragment.zig:3117in nearest public ownertiny.accy.executable.fragmentlib.accy.src.executable.loaded.LoadedKernels.launchAllWithOptions[method] — private source atlib/accy/src/executable/loaded.zig:349in nearest public ownerlib.accy.src.executable.loadedtiny.accy.executable.CompiledFragment.createLaunchGraphPlan[method] atlib/accy/src/executable/plan.zig:358lib.accy.src.executable.plan.test_executable_dataflow_launch_graph_links_repeated_in-place_slot_updates[function] — test source atlib/accy/src/executable/plan.zig:894in nearest public ownertiny.accy.executable.planlib.accy.src.executable.plan.test_executable_dataflow_launch_graph_orders_producers_before_consumers[function] — test source atlib/accy/src/executable/plan.zig:924in nearest public ownertiny.accy.executable.planlib.accy.src.executable.plan.test_executable_dataflow_launch_graph_records_slot_dependencies[function] — test source atlib/accy/src/executable/plan.zig:869in nearest public ownertiny.accy.executable.planlib.accy.src.executable.plan.test_executable_launch_graph_rejects_invalid_loop_ranges_and_carries[function] — test source atlib/accy/src/executable/plan.zig:1041in nearest public ownertiny.accy.executable.planlib.accy.src.executable.plan.test_executable_launch_graph_validates_loop_carry_body_slots[function] — test source atlib/accy/src/executable/plan.zig:1006in nearest public ownertiny.accy.executable.planlib.accy.src.executable.test.test_Choir_executable_dependency_event_lowering_requires_producer_streams[function] — test source atlib/accy/src/executable/test.zig:316in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_graph_automatically_lowers_cross-stream_dependencies[function] — test source atlib/accy/src/executable/test.zig:261in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_graph_host_loops_remap_carry_slots[function] — test source atlib/accy/src/executable/test.zig:132in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_graph_lowers_dependencies_to_backend_events[function] — test source atlib/accy/src/executable/test.zig:206in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_graph_persists_measured_tuning_selections[function] — test source atlib/accy/src/executable/test.zig:636in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_graph_rejects_invalid_measured_tuning_selection[function] — test source atlib/accy/src/executable/test.zig:1123in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_tuning_artifact_round-trips_records[function] — test source atlib/accy/src/executable/test.zig:887in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_tuning_cache_applies_measured_graph_selections[function] — test source atlib/accy/src/executable/test.zig:710in nearest public ownerlib.accy.src.executable.testlib.accy.src.executable.test.test_Choir_executable_launch_tuning_cache_exports_and_imports_records[function] — test source atlib/accy/src/executable/test.zig:797in nearest public ownerlib.accy.src.executable.testlib.accy.src.integration.test.test_linalg_batched_cholesky_factors_and_solves_compose_on_live_CUDA[function] — test source atlib/accy/src/integration/test.zig:4170in nearest public ownerlib.accy.src.integration.testlib.accy.src.integration.test.test_scatter_add_f32_family_kernel_accumulates_within_tolerance_on_live_CUDA[function] — test source atlib/accy/src/integration/test.zig:2760in nearest public ownerlib.accy.src.integration.testlib.accy.src.integration.test.test_scatter_add_family_kernel_accumulates_exactly_on_live_CUDA[function] — test source atlib/accy/src/integration/test.zig:2691in nearest public ownerlib.accy.src.integration.testlib.accy.src.integration.test.test_scatter_add_shared_bins_variant_accumulates_exactly_on_live_CUDA[function] — test source atlib/accy/src/integration/test.zig:2847in nearest public ownerlib.accy.src.integration.testlib.accy.src.integration.test.test_sort_radix_digit_pass_partitions_stably_on_live_CUDA[function] — test source atlib/accy/src/integration/test.zig:3470in nearest public ownerlib.accy.src.integration.testlib.accy.src.integration.test.test_sort_radix_split_kernels_partition_stably_on_live_CUDA[function] — test source atlib/accy/src/integration/test.zig:3122in nearest public ownerlib.accy.src.integration.testlib.accy.src.integration.test.test_spatial_uniform_grid_builds_on_live_CUDA_through_composed_pipelines[function] — test source atlib/accy/src/integration/test.zig:3855in nearest public ownerlib.accy.src.integration.testlib.accy.src.integration.test.test_warp_ballot_rank_counts_same-predicate_lower_lanes_on_live_CUDA[function] — test source atlib/accy/src/integration/test.zig:3380in nearest public ownerlib.accy.src.integration.testlib.accy.src.kernel.dsl.program.execute.compileFragment[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:103in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.createCheckedPlan[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:97in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.createKernelArtifact[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:115in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.createKernelCallArtifact[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:127in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.createPlan[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:91in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.launch[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:79in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.runCpu[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:139in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.runCpuWithDiagnostic[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:145in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.scheduleSnapshot[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:85in nearest public ownerlib.accy.src.kernel.dsl.program.executelib.accy.src.kernel.dsl.program.execute.verify[function] — private source atlib/accy/src/kernel/dsl/program/execute.zig:157in nearest public ownerlib.accy.src.kernel.dsl.program.executetiny.accy.kernel.Family[function] atlib/accy/src/kernel/dsl/program/root.zig:12lib.accy.src.kernel.dsl.test.test_kernel_Family_builds_checked_graphs_from_runtime_instances[function] — test source atlib/accy/src/kernel/dsl/test.zig:29in nearest public ownerlib.accy.src.kernel.dsl.testlib.accy.src.kernel.dsl.test.test_kernel_Program_builds_named_typed_arguments_into_a_checked_graph[function] — test source atlib/accy/src/kernel/dsl/test.zig:84in nearest public ownerlib.accy.src.kernel.dsl.testlib.accy.src.kernel.dsl.test.test_kernel_Program_still_accepts_positional_parameters[function] — test source atlib/accy/src/kernel/dsl/test.zig:1490in nearest public ownerlib.accy.src.kernel.dsl.testlib.accy.src.kernel.dsl.test.test_kernel_Program_transform_can_validate_a_whole_build_in_finish[function] — test source atlib/accy/src/kernel/dsl/test.zig:1458in nearest public ownerlib.accy.src.kernel.dsl.testlib.accy.src.kernel.dsl.test.test_kernel_Program_transform_returns_another_composable_Program[function] — test source atlib/accy/src/kernel/dsl/test.zig:1279in nearest public ownerlib.accy.src.kernel.dsl.testtiny.accy.kernel.library.compaction.createFilterFamilyArtifact[function] atlib/accy/src/kernel/library/compaction.zig:463lib.accy.src.kernel.library.compaction.test_compaction_filter_entry_compacts_one_block_on_CPU[function] — test source atlib/accy/src/kernel/library/compaction.zig:640in nearest public ownertiny.accy.kernel.library.compactionlib.accy.src.kernel.library.compaction.test_compaction_filter_greater_runtime_family_filters_i32_data[function] — test source atlib/accy/src/kernel/library/compaction.zig:779in nearest public ownertiny.accy.kernel.library.compactionlib.accy.src.kernel.library.compaction.test_compaction_filter_greater_runtime_family_keeps_survivors_above_the_threshold[function] — test source atlib/accy/src/kernel/library/compaction.zig:735in nearest public ownertiny.accy.kernel.library.compactionlib.accy.src.kernel.library.compaction.test_compaction_filter_runtime_family_compacts_i32_data[function] — test source atlib/accy/src/kernel/library/compaction.zig:701in nearest public ownertiny.accy.kernel.library.compactionlib.accy.src.kernel.library.compaction.test_compaction_filter_runtime_family_compacts_segments_with_tail[function] — test source atlib/accy/src/kernel/library/compaction.zig:661in nearest public ownertiny.accy.kernel.library.compactiontiny.accy.kernel.library.factor.createBatchedCholeskyFamilyArtifact[function] atlib/accy/src/kernel/library/factor.zig:904tiny.accy.kernel.library.factor.createBatchedCholeskySolveFamilyArtifact[function] atlib/accy/src/kernel/library/factor.zig:1057tiny.accy.kernel.library.factor.createBatchedInverseFamilyArtifact[function] atlib/accy/src/kernel/library/factor.zig:1201lib.accy.src.kernel.library.factor.expectBatchedCholeskyMatchesHost[function] — private source atlib/accy/src/kernel/library/factor.zig:208in nearest public ownertiny.accy.kernel.library.factorlib.accy.src.kernel.library.factor.expectBatchedCholeskySolveMatchesHost[function] — private source atlib/accy/src/kernel/library/factor.zig:442in nearest public ownertiny.accy.kernel.library.factorlib.accy.src.kernel.library.factor.expectBatchedInverseResidual[function] — private source atlib/accy/src/kernel/library/factor.zig:635in nearest public ownertiny.accy.kernel.library.factorlib.accy.src.kernel.library.factor.test_linalg_batched_cholesky_interleaved_layout_matches_the_row-major_results[function] — test source atlib/accy/src/kernel/library/factor.zig:1358in nearest public ownertiny.accy.kernel.library.factorlib.accy.src.kernel.library.factor.test_linalg_batched_cholesky_propagates_NaN_for_non-SPD_tiles_in_band[function] — test source atlib/accy/src/kernel/library/factor.zig:251in nearest public ownertiny.accy.kernel.library.factorlib.accy.src.kernel.library.factor.test_linalg_batched_cholesky_solve_interleaved_layout_matches_the_row-major_results[function] — test source atlib/accy/src/kernel/library/factor.zig:1401in nearest public ownertiny.accy.kernel.library.factorlib.accy.src.kernel.library.factor.test_linalg_batched_inverse_interleaved_layout_matches_residual_contract[function] — test source atlib/accy/src/kernel/library/factor.zig:685in nearest public ownertiny.accy.kernel.library.factortiny.accy.kernel.library.histogram.createHistogramFamilyArtifact[function] atlib/accy/src/kernel/library/histogram/family/runtime/artifact.zig:13lib.accy.src.kernel.library.histogram.family.runtime.body.test_histogram_binning_policy_drops_closed_upper_edge[function] — test source atlib/accy/src/kernel/library/histogram/family/runtime/body.zig:199in nearest public ownerlib.accy.src.kernel.library.histogram.family.runtime.bodylib.accy.src.kernel.library.histogram.family.runtime.body.test_histogram_runtime_family_bins_values_exactly_on_the_oracle[function] — test source atlib/accy/src/kernel/library/histogram/family/runtime/body.zig:165in nearest public ownerlib.accy.src.kernel.library.histogram.family.runtime.bodytiny.accy.kernel.library.image.createBlurPassFamilyArtifact[function] atlib/accy/src/kernel/library/image.zig:669tiny.accy.kernel.library.image.createResizeFamilyArtifact[function] atlib/accy/src/kernel/library/image.zig:704lib.accy.src.kernel.library.image.test_blur_pass_family_matches_the_reference_on_the_interpreter[function] — test source atlib/accy/src/kernel/library/image.zig:853in nearest public ownertiny.accy.kernel.library.imagelib.accy.src.kernel.library.image.test_resize_bilinear_family_matches_the_reference_on_the_interpreter[function] — test source atlib/accy/src/kernel/library/image.zig:894in nearest public ownertiny.accy.kernel.library.imagetiny.accy.kernel.library.indexing.createGatherFamilyArtifact[function] atlib/accy/src/kernel/library/indexing.zig:290tiny.accy.kernel.library.indexing.createScatterAddFamilyArtifact[function] atlib/accy/src/kernel/library/indexing.zig:1719tiny.accy.kernel.library.indexing.createScatterFamilyArtifact[function] atlib/accy/src/kernel/library/indexing.zig:921lib.accy.src.kernel.library.indexing.test_indexing_gather_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/indexing.zig:502in nearest public ownertiny.accy.kernel.library.indexinglib.accy.src.kernel.library.indexing.test_indexing_scatter_add_f32_runtime_family_accumulates_exactly_on_the_sequential_oracle[function] — test source atlib/accy/src/kernel/library/indexing.zig:1896in nearest public ownertiny.accy.kernel.library.indexinglib.accy.src.kernel.library.indexing.test_indexing_scatter_add_runtime_family_accumulates_on_the_oracle[function] — test source atlib/accy/src/kernel/library/indexing.zig:1758in nearest public ownertiny.accy.kernel.library.indexinglib.accy.src.kernel.library.indexing.test_indexing_scatter_add_runtime_family_accumulates_shaped_updates_on_the_oracle[function] — test source atlib/accy/src/kernel/library/indexing.zig:1789in nearest public ownertiny.accy.kernel.library.indexinglib.accy.src.kernel.library.indexing.test_indexing_scatter_add_shared_bins_variant_matches_the_direct_arm_on_the_oracle[function] — test source atlib/accy/src/kernel/library/indexing.zig:1927in nearest public ownertiny.accy.kernel.library.indexinglib.accy.src.kernel.library.indexing.test_indexing_scatter_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/indexing.zig:1144in nearest public ownertiny.accy.kernel.library.indexingtiny.accy.kernel.library.linalg.createBatchedMatrixProductFamilyArtifact[function] atlib/accy/src/kernel/library/linalg.zig:1268tiny.accy.kernel.library.linalg.createMatrixProductFamilyArtifact[function] atlib/accy/src/kernel/library/linalg.zig:1230tiny.accy.kernel.library.linalg.createMatrixVectorProductFamilyArtifact[function] atlib/accy/src/kernel/library/linalg.zig:1302tiny.accy.kernel.library.linalg.createOuterProductFamilyArtifact[function] atlib/accy/src/kernel/library/linalg.zig:1336lib.accy.src.kernel.library.linalg.test_linalg_batched_matrix_product_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/linalg.zig:2269in nearest public ownertiny.accy.kernel.library.linalglib.accy.src.kernel.library.linalg.test_linalg_matrix_product_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/linalg.zig:2880in nearest public ownertiny.accy.kernel.library.linalglib.accy.src.kernel.library.linalg.test_linalg_matrix_vector_product_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/linalg.zig:3411in nearest public ownertiny.accy.kernel.library.linalglib.accy.src.kernel.library.linalg.test_linalg_outer_product_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/linalg.zig:3705in nearest public ownertiny.accy.kernel.library.linalgtiny.accy.kernel.library.loss.createRowSparseCrossEntropyFamilyArtifact[function] atlib/accy/src/kernel/library/loss.zig:270lib.accy.src.kernel.library.loss.test_loss_row_sparse_cross_entropy_runtime_family_matches_the_host_oracle[function] — test source atlib/accy/src/kernel/library/loss.zig:330in nearest public ownertiny.accy.kernel.library.losstiny.accy.kernel.library.random.createFeistelFamilyArtifact[function] atlib/accy/src/kernel/library/random/feistel/artifact.zig:21tiny.accy.kernel.library.random.createPhiloxFoldFamilyArtifact[function] atlib/accy/src/kernel/library/random/fold/philox/family.zig:106tiny.accy.kernel.library.random.createSquaresFoldFamilyArtifact[function] atlib/accy/src/kernel/library/random/fold/squares/family.zig:111tiny.accy.kernel.library.random.createThreefryFoldFamilyArtifact[function] atlib/accy/src/kernel/library/random/fold/threefry/family.zig:106tiny.accy.kernel.library.random.createPhiloxKeyCounterUniformFamilyArtifact[function] atlib/accy/src/kernel/library/random/key/artifact.zig:103tiny.accy.kernel.library.random.createPhiloxKeySplitFamilyArtifact[function] atlib/accy/src/kernel/library/random/key/artifact.zig:31tiny.accy.kernel.library.random.createPhiloxKeyUniformFamilyArtifact[function] atlib/accy/src/kernel/library/random/key/artifact.zig:65tiny.accy.kernel.library.random.createPhiloxFamilyArtifact[function] atlib/accy/src/kernel/library/random/philox/artifact.zig:24tiny.accy.kernel.library.random.createSquaresFamilyArtifact[function] atlib/accy/src/kernel/library/random/squares/artifact.zig:21lib.accy.src.kernel.library.random.test.test_random_feistel_runtime_family_emits_permutation_stream_on_CPU[function] — test source atlib/accy/src/kernel/library/random/test.zig:341in nearest public ownerlib.accy.src.kernel.library.random.testlib.accy.src.kernel.library.random.test.test_random_philox_fold_family_accumulates_uniform_samples_on_CPU[function] — test source atlib/accy/src/kernel/library/random/test.zig:569in nearest public ownerlib.accy.src.kernel.library.random.testlib.accy.src.kernel.library.random.test.test_random_philox_key_counter_uniform_samples_from_scalar_key_and_counter_on_CPU[function] — test source atlib/accy/src/kernel/library/random/test.zig:534in nearest public ownerlib.accy.src.kernel.library.random.testlib.accy.src.kernel.library.random.test.test_random_philox_runtime_family_emits_raw_bits_with_tail_guard[function] — test source atlib/accy/src/kernel/library/random/test.zig:190in nearest public ownerlib.accy.src.kernel.library.random.testlib.accy.src.kernel.library.random.test.test_random_squares_fold_family_accumulates_uniform_samples_on_CPU[function] — test source atlib/accy/src/kernel/library/random/test.zig:749in nearest public ownerlib.accy.src.kernel.library.random.testlib.accy.src.kernel.library.random.test.test_random_squares_runtime_family_emits_raw_bits_with_tail_guard_on_CPU[function] — test source atlib/accy/src/kernel/library/random/test.zig:720in nearest public ownerlib.accy.src.kernel.library.random.testlib.accy.src.kernel.library.random.test.test_random_threefry_fold_family_xors_raw_words_on_CPU[function] — test source atlib/accy/src/kernel/library/random/test.zig:606in nearest public ownerlib.accy.src.kernel.library.random.testlib.accy.src.kernel.library.random.test.test_random_threefry_runtime_family_emits_raw_bits_with_tail_guard[function] — test source atlib/accy/src/kernel/library/random/test.zig:281in nearest public ownerlib.accy.src.kernel.library.random.testtiny.accy.kernel.library.random.createThreefryFamilyArtifact[function] atlib/accy/src/kernel/library/random/threefry/artifact.zig:24tiny.accy.kernel.library.scan.createDeviceScanAddBaseFamilyArtifact[function] atlib/accy/src/kernel/library/scan.zig:771tiny.accy.kernel.library.scan.createDeviceScanBlockScanFamilyArtifact[function] atlib/accy/src/kernel/library/scan.zig:731tiny.accy.kernel.library.scan.createPrefixSumFamilyArtifact[function] atlib/accy/src/kernel/library/scan.zig:903lib.accy.src.kernel.library.scan.expectPrefixSumModeMatchesOracle[function] — private source atlib/accy/src/kernel/library/scan.zig:1088in nearest public ownertiny.accy.kernel.library.scanlib.accy.src.kernel.library.scan.expectPrefixSumU32ModeMatchesOracle[function] — private source atlib/accy/src/kernel/library/scan.zig:1179in nearest public ownertiny.accy.kernel.library.scanlib.accy.src.kernel.library.scan.test_scan_prefix_sum_entry_runs_on_CPU[function] — test source atlib/accy/src/kernel/library/scan.zig:1066in nearest public ownertiny.accy.kernel.library.scanlib.accy.src.kernel.library.scan.test_scan_prefix_sum_f16_runtime_family_matches_oracle_through_f32_accumulation[function] — test source atlib/accy/src/kernel/library/scan.zig:1146in nearest public ownertiny.accy.kernel.library.scanlib.accy.src.kernel.library.sdf.test_2d_grid_sample_with_gradient_matches_the_reference_on_the_interpreter[function] — test source atlib/accy/src/kernel/library/sdf.zig:401in nearest public ownertiny.accy.kernel.library.sdflib.accy.src.kernel.library.sdf.test_3d_grid_sample_matches_the_reference_on_the_interpreter[function] — test source atlib/accy/src/kernel/library/sdf.zig:482in nearest public ownertiny.accy.kernel.library.sdftiny.accy.kernel.library.segmented.createSegmentSumFamilyArtifact[function] atlib/accy/src/kernel/library/segmented.zig:381lib.accy.src.kernel.library.segmented.test_segmented_segment_sum_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/segmented.zig:606in nearest public ownertiny.accy.kernel.library.segmentedlib.accy.src.kernel.library.segmented.test_segmented_segment_sum_warp_runtime_family_matches_the_thread_oracle[function] — test source atlib/accy/src/kernel/library/segmented.zig:640in nearest public ownertiny.accy.kernel.library.segmentedtiny.accy.kernel.library.sort.createBitonicBlockFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1099tiny.accy.kernel.library.sort.createRadixDigitHistogramFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1612tiny.accy.kernel.library.sort.createRadixDigitRankScatterFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1647tiny.accy.kernel.library.sort.createRadixDigitRankScatterPairsFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1844tiny.accy.kernel.library.sort.createRadixSplitFlagsFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1540tiny.accy.kernel.library.sort.createRadixSplitScatterFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1575tiny.accy.kernel.library.sort.createTopKBlockFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1134tiny.accy.kernel.library.sort.createTopKBlockPairsFamilyArtifact[function] atlib/accy/src/kernel/library/sort.zig:1169lib.accy.src.kernel.library.sort.test_sort_bitonic_block_sorts_a_bounded_tile_on_the_oracle[function] — test source atlib/accy/src/kernel/library/sort.zig:2421in nearest public ownertiny.accy.kernel.library.sortlib.accy.src.kernel.library.sort.test_sort_radix_digit_histogram_counts_per_block_in_column-major_order[function] — test source atlib/accy/src/kernel/library/sort.zig:2706in nearest public ownertiny.accy.kernel.library.sortlib.accy.src.kernel.library.sort.test_sort_radix_split_flags_discriminate_runtime_bits_on_one_compiled_kernel[function] — test source atlib/accy/src/kernel/library/sort.zig:2275in nearest public ownertiny.accy.kernel.library.sortlib.accy.src.kernel.library.sort.test_sort_top-k_block_pairs_selects_key_payload_prefixes_on_the_oracle[function] — test source atlib/accy/src/kernel/library/sort.zig:2605in nearest public ownertiny.accy.kernel.library.sortlib.accy.src.kernel.library.sort.test_sort_top-k_block_selects_the_smallest_sorted_prefix_on_the_oracle[function] — test source atlib/accy/src/kernel/library/sort.zig:2519in nearest public ownertiny.accy.kernel.library.sorttiny.accy.kernel.library.sparse.createSpmmCsrFamilyArtifact[function] atlib/accy/src/kernel/library/sparse.zig:1992tiny.accy.kernel.library.sparse.createSpmvCooFamilyArtifact[function] atlib/accy/src/kernel/library/sparse.zig:956tiny.accy.kernel.library.sparse.createSpmvCsrFamilyArtifact[function] atlib/accy/src/kernel/library/sparse.zig:587tiny.accy.kernel.library.sparse.createSpmvEllFamilyArtifact[function] atlib/accy/src/kernel/library/sparse.zig:1310tiny.accy.kernel.library.sparse.createSpmvSellFamilyArtifact[function] atlib/accy/src/kernel/library/sparse.zig:1621lib.accy.src.kernel.library.sparse.expectSpmmCsrMatchesDense[function] — private source atlib/accy/src/kernel/library/sparse.zig:2426in nearest public ownertiny.accy.kernel.library.sparselib.accy.src.kernel.library.sparse.expectSpmvCooMatchesDense[function] — private source atlib/accy/src/kernel/library/sparse.zig:2150in nearest public ownertiny.accy.kernel.library.sparselib.accy.src.kernel.library.sparse.expectSpmvCsrMatchesDense[function] — private source atlib/accy/src/kernel/library/sparse.zig:2062in nearest public ownertiny.accy.kernel.library.sparselib.accy.src.kernel.library.sparse.expectSpmvEllMatchesDense[function] — private source atlib/accy/src/kernel/library/sparse.zig:2237in nearest public ownertiny.accy.kernel.library.sparselib.accy.src.kernel.library.sparse.expectSpmvSellMatchesDense[function] — private source atlib/accy/src/kernel/library/sparse.zig:2317in nearest public ownertiny.accy.kernel.library.sparsetiny.accy.kernel.library.spatial.createGridCellsFamilyArtifact[function] atlib/accy/src/kernel/library/spatial.zig:1037tiny.accy.kernel.library.spatial.createGridCountFamilyArtifact[function] atlib/accy/src/kernel/library/spatial.zig:1163tiny.accy.kernel.library.spatial.createGridNeighborCountFamilyArtifact[function] atlib/accy/src/kernel/library/spatial.zig:1328lib.accy.src.kernel.library.spatial.test_spatial_grid_cells_matches_the_host_reference_with_boundary_clamping[function] — test source atlib/accy/src/kernel/library/spatial.zig:178in nearest public ownertiny.accy.kernel.library.spatiallib.accy.src.kernel.library.spatial.test_spatial_grid_count_clamps_runtime_cell_totals_to_the_compiled_shared_cap[function] — test source atlib/accy/src/kernel/library/spatial.zig:436in nearest public ownertiny.accy.kernel.library.spatiallib.accy.src.kernel.library.spatial.test_spatial_grid_count_tallies_precomputed_ids_per_block_in_column-major_order[function] — test source atlib/accy/src/kernel/library/spatial.zig:395in nearest public ownertiny.accy.kernel.library.spatiallib.accy.src.kernel.library.spatial.test_spatial_grid_neighbor_count_matches_the_quadratic_host_reference[function] — test source atlib/accy/src/kernel/library/spatial.zig:791in nearest public ownertiny.accy.kernel.library.spatialtiny.accy.kernel.library.stencil.createWindowFamilyArtifact[function] atlib/accy/src/kernel/library/stencil.zig:335lib.accy.src.kernel.library.stencil.test_stencil_window_runtime_family_executes_explicit_runtime_extents[function] — test source atlib/accy/src/kernel/library/stencil.zig:592in nearest public ownertiny.accy.kernel.library.stencillib.accy.src.kernel.logical.program.RuntimeSurface[function] — private source atlib/accy/src/kernel/logical/program.zig:238in nearest public ownerlib.accy.src.kernel.logical.programlib.accy.src.kernel.logical.test.test_logical_Program_compiles_to_a_checked_scheduled_kernel_graph[function] — test source atlib/accy/src/kernel/logical/test.zig:196in nearest public ownerlib.accy.src.kernel.logical.testlib.accy.src.kernel.test.test_kernel_Program_creates_executable_fragment_through_BackendHandle[function] — test source atlib/accy/src/kernel/test.zig:199in nearest public ownerlib.accy.src.kernel.testlib.accy.src.preparation.cache.BackendPreparationCache.replace[method] — private source atlib/accy/src/preparation/cache.zig:131in nearest public ownertiny.accy.preparation.cachelib.accy.src.preparation.test.test_Accy_publication_Contract_through_Target_consumes_each_newly_sealed_predecessor[function] — test source atlib/accy/src/preparation/test.zig:2610in nearest public ownerlib.accy.src.preparation.testlib.accy.src.preparation.test.test_Accy_retained_preparation_owns_exact_metadata_after_its_source_chain_is_released[function] — test source atlib/accy/src/preparation/test.zig:2666in nearest public ownerlib.accy.src.preparation.testlib.accy.src.profiling.reaction.device.init[function] — private source atlib/accy/src/profiling/reaction/device.zig:66in nearest public ownerlib.accy.src.profiling.reaction.devicelib.accy.src.profiling.reaction.kernel.test_buildStepGraph_verifies[function] — test source atlib/accy/src/profiling/reaction/kernel.zig:215in nearest public ownerlib.accy.src.profiling.reaction.kernellib.accy.src.profiling.scan.root.runBenchmark[function] — private source atlib/accy/src/profiling/scan/root.zig:164in nearest public ownerlib.accy.src.profiling.scan.rootlib.accy.src.profiling.sph.device.State.neighborEvidence[method] — private source atlib/accy/src/profiling/sph/device.zig:141in nearest public ownerlib.accy.src.profiling.sph.devicelib.accy.src.profiling.sph.kernel.test_graphs_verify[function] — test source atlib/accy/src/profiling/sph/kernel.zig:539in nearest public ownerlib.accy.src.profiling.sph.kernellib.accy.src.profiling.versus.runner.runOne[function] — private source atlib/accy/src/profiling/versus/runner.zig:1120in nearest public ownerlib.accy.src.profiling.versus.runnerlib.accy.src.profiling.wos.render.run[function] — private source atlib/accy/src/profiling/wos/render.zig:271in nearest public ownerlib.accy.src.profiling.wos.renderlib.accy.src.profiling.wos.render.test_buildBunnyGraph_verifies[function] — test source atlib/accy/src/profiling/wos/render.zig:509in nearest public ownerlib.accy.src.profiling.wos.renderlib.accy.src.profiling.wos.suite.runSweep[function] — private source atlib/accy/src/profiling/wos/suite.zig:80in nearest public ownerlib.accy.src.profiling.wos.suitelib.accy.src.profiling.wos.workload.test_fold_and_while_walk_kernels_agree_exactly_on_the_oracle[function] — test source atlib/accy/src/profiling/wos/workload.zig:300in nearest public ownerlib.accy.src.profiling.wos.workloadlib.accy.src.profiling.wos.workload.test_oracle_walks_match_the_host_mirror_exactly[function] — test source atlib/accy/src/profiling/wos/workload.zig:337in nearest public ownerlib.accy.src.profiling.wos.workloadlib.accy.src.target.nvptx.test.qualifyLoops[function] — private source atlib/accy/src/target/nvptx/test.zig:471in nearest public ownerlib.accy.src.target.nvptx.testlib.accy.src.target.nvptx.test.test_CUDA_64-bit_scalar_parameters_compile_from_a_sealed_source_graph[function] — test source atlib/accy/src/target/nvptx/test.zig:58in nearest public ownerlib.accy.src.target.nvptx.testlib.accy.src.target.nvptx.test.test_CUDA_64-bit_scalar_parameters_preserve_every_bit_on_the_device[function] — test source atlib/accy/src/target/nvptx/test.zig:110in nearest public ownerlib.accy.src.target.nvptx.testlib.accy.src.target.nvptx.test.test_CUDA_narrow_arithmetic_wraps_and_sign_extends_before_widening[function] — test source atlib/accy/src/target/nvptx/test.zig:179in nearest public ownerlib.accy.src.target.nvptx.testlib.accy.src.target.nvptx.test.test_CUDA_structured_loops_preserve_source_graphs_and_counter_widths[function] — test source atlib/accy/src/target/nvptx/test.zig:439in nearest public ownerlib.accy.src.target.nvptx.testlib.accy.src.target.nvptx.test.test_cuda_prefix_sum_scan_uses_safe_shared_base_index[function] — test source atlib/accy/src/target/nvptx/test.zig:1355in nearest public ownerlib.accy.src.target.nvptx.testlib.accy.src.target.nvptx.test.test_cuda_segment_sum_clamps_signed_offsets_before_index_cast[function] — test source atlib/accy/src/target/nvptx/test.zig:1377in nearest public ownerlib.accy.src.target.nvptx.testlib.accy.src.tensor.execute.test_tensor_cpu_executor_launches_one_program_repeatedly[function] — test source atlib/accy/src/tensor/execute.zig:65in nearest public ownertiny.accy.tensor.executelib.accy.src.tensor.execute.test_tensor_runCpu_runs_a_program_once[function] — test source atlib/accy/src/tensor/execute.zig:96in nearest public ownertiny.accy.tensor.executelib.accy.src.tensor.execute.test_tensor_runCpu_serves_constant-only_outputs[function] — test source atlib/accy/src/tensor/execute.zig:121in nearest public ownertiny.accy.tensor.executetiny.accy.tensor.lower.ModuleLower.finish[method] atlib/accy/src/tensor/lower.zig:467lib.accy.src.tensor.test.test_accy_tensor_contract_batches_shared_axes_like_a_per-slice_matmul[function] — test source atlib/accy/src/tensor/test.zig:1265in nearest public ownerlib.accy.src.tensor.testlib.accy.src.tensor.test.test_accy_tensor_named_attention_verifies_and_matches_the_host_softmax_reference[function] — test source atlib/accy/src/tensor/test.zig:1207in nearest public ownerlib.accy.src.tensor.testlib.accy.src.tensor.test.test_accy_tensor_scan_with_zero_length_yields_its_carry_inits[function] — test source atlib/accy/src/tensor/test.zig:839in nearest public ownerlib.accy.src.tensor.testlib.accy.src.tensor.test.test_accy_tensor_scatter_add_accumulates_duplicate_indices_on_cpu[function] — test source atlib/accy/src/tensor/test.zig:308in nearest public ownerlib.accy.src.tensor.testlib.accy.src.tensor.test.test_accy_tensor_scheduled_scatter_add_matches_the_expanded_lowering_on_live_CUDA[function] — test source atlib/accy/src/tensor/test.zig:346in nearest public ownerlib.accy.src.tensor.testlib.accy.src.tensor.test.test_accy_tensor_scheduled_sparse_cross_entropy_matches_the_expanded_lowering_on_live_CUDA[function] — test source atlib/accy/src/tensor/test.zig:720in nearest public ownerlib.accy.src.tensor.testlib.accy.src.tensor.test.test_accy_tensor_sparse_cross_entropy_losses_match_the_host_reference_on_cpu[function] — test source atlib/accy/src/tensor/test.zig:599in nearest public ownerlib.accy.src.tensor.testlib.accy.src.validation.conformance.cases.BatchedCholeskyFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4204in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.BatchedCholeskyInterleavedFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4305in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.BatchedCholeskySolveFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:4350in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.BatchedInverseFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:4509in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.BatchedMatrixProductFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:1485in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.BitonicBlockFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:2401in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.DeviceScanAddBaseFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2717in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.DeviceScanBlockScanFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2616in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.FeistelPermutationFamilyI32.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:5080in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.FilterFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2185in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.GatherFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:1652in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.GridCellsFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:3769in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.GridNeighborCountFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4724in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.HistogramFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:5104in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.ImageBlurPassFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:3841in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.ImageResizeFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:3905in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.MatrixProductFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:1409in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.MatrixVectorProductFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:1559in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.OuterProductFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:1627in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.PhiloxFillFamilyI32.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4786in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.PrefixSumFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2002in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.ScatterAddFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:1875in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.ScatterFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:1760in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SdfGridSample3DFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4114in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SdfGridSampleGradient2DCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:3927in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SegmentSumFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2087in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SpmmCsrFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:3554in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SpmvCooFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2998in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SpmvCsrFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2837in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SpmvEllFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:3159in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SpmvSellFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:3339in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.SquaresFillFamilyI32.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4935in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.ThreefryFillFamilyI32.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4860in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.TopKBlockFamilyCase.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:2478in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.TopKBlockPairsFamilyCase[function] — private source atlib/accy/src/validation/conformance/cases.zig:2502in nearest public ownerlib.accy.src.validation.conformance.caseslib.accy.src.validation.conformance.cases.WhileTriangularI32.buildArtifact[function] — private source atlib/accy/src/validation/conformance/cases.zig:4989in nearest public ownerlib.accy.src.validation.conformance.caseslib.choir.src.product.incremental.test_exact_product_graph_refresh_selections_and_materialization_stay_descriptive[function] — test source atlib/choir/src/product/incremental.zig:1556in nearest public ownertiny.choir.product.incrementaltiny.gui.paint.accy.createRecordingArtifact[function] atlib/gui/src/paint/accy.zig:1283tiny.gui.paint.accy.createTileCountRecordingArtifact[function] atlib/gui/src/paint/accy.zig:1309tiny.gui.paint.accy.createTileIndexRecordingArtifact[function] atlib/gui/src/paint/accy.zig:1322tiny.gui.paint.accy.createTileRangeRecordingArtifact[function] atlib/gui/src/paint/accy.zig:1296tiny.gui.paint.accy.createTileSortRecordingArtifact[function] atlib/gui/src/paint/accy.zig:1335tiny.gui.paint.accy.renderCommandsCpuRegionWithImages[function] atlib/gui/src/paint/accy.zig:648lib.gui.src.paint.accy.runPaintFrameLifecycle[function] — private source atlib/gui/src/paint/accy.zig:2919in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.scanTileOffsetCountsPrefixCpu[function] — private source atlib/gui/src/paint/accy.zig:923in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_failed_frame_acquisition_leaves_the_graph_reusable[function] — test source atlib/gui/src/paint/accy.zig:2896in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_steady_frames_make_no_allocator_calls_at_a_fixed_surface_epoch[function] — test source atlib/gui/src/paint/accy.zig:2830in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_surface_epochs_stay_allocation-free_after_one_full-block_frame[function] — test source atlib/gui/src/paint/accy.zig:2859in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_tile_count_graph_matches_host_range_counts[function] — test source atlib/gui/src/paint/accy.zig:2420in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_tile_count_scan_covers_multi-block_CSR_offsets[function] — test source atlib/gui/src/paint/accy.zig:2532in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_tile_count_scan_matches_host_CSR_offsets[function] — test source atlib/gui/src/paint/accy.zig:2482in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_tile_range_graph_matches_host_command_ranges[function] — test source atlib/gui/src/paint/accy.zig:2360in nearest public ownertiny.gui.paint.accylib.gui.src.paint.accy.test_Accy_zero-size_regions_render_without_allocator_use[function] — test source atlib/gui/src/paint/accy.zig:2943in nearest public ownertiny.gui.paint.accytiny.gui.paint.Executor.init[function] atlib/gui/src/paint/executor.zig:305lib.gui.src.paint.executor.loadGraphKernel[function] — private source atlib/gui/src/paint/executor.zig:1677in nearest public ownertiny.gui.paint.executorlib.gui.src.profiling.test.renderAccyCpuFramePacked[function] — private source atlib/gui/src/profiling/test.zig:1182in nearest public ownerlib.gui.src.profiling.testlib.gui.src.profiling.test.renderAccyCpuPacked[function] — private source atlib/gui/src/profiling/test.zig:1104in nearest public ownerlib.gui.src.profiling.testtools.smg.src.graph.checkGraphAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:767in nearest public ownertiny.smg.graphtools.smg.src.graph.checkGraphCloneAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:735in nearest public ownertiny.smg.graphtiny.smg.graph.clone[function] attools/smg/src/graph.zig:212tools.smg.src.graph.test_batch_node_removal_rebuilds_graph_indexes_once[function] — test; no exact target attools/smg/src/graph.zig:1030in nearest public ownertiny.smg.graphtools.smg.src.graph.test_node_removal_compacts_storage_in_place[function] — test; no exact target attools/smg/src/graph.zig:995in nearest public ownertiny.smg.graphtools.smg.src.graph.test_suffix_lookup_preserves_linear_semantics_across_snapshot_invalidation[function] — test; no exact target attools/smg/src/graph.zig:945in nearest public ownertiny.smg.graph
Complete caller list for graph.init
9 direct callers.
tools.smg.src.graph.checkGraphAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:767in nearest public ownertiny.smg.graphtools.smg.src.graph.checkGraphCloneAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:735in nearest public ownertiny.smg.graphtiny.smg.graph.clone[function] attools/smg/src/graph.zig:212tools.smg.src.graph.test_batch_node_removal_rebuilds_graph_indexes_once[function] — test; no exact target attools/smg/src/graph.zig:1030in nearest public ownertiny.smg.graphtools.smg.src.graph.test_graph_clone_owns_payload_independently[function] — test; no exact target attools/smg/src/graph.zig:692in nearest public ownertiny.smg.graphtools.smg.src.graph.test_node_removal_compacts_storage_in_place[function] — test; no exact target attools/smg/src/graph.zig:995in nearest public ownertiny.smg.graphtools.smg.src.graph.test_suffix_lookup_preserves_linear_semantics_across_snapshot_invalidation[function] — test; no exact target attools/smg/src/graph.zig:945in nearest public ownertiny.smg.graphtools.smg.src.test.test_persisted_clean_rescan_preserves_edges_to_surviving_symbols[function] — test; no exact target attools/smg/src/test.zig:109in nearest public ownertools.smg.src.testtools.smg.src.test.test_persisted_ordinary_scan_retires_deleted_source_nodes[function] — test; no exact target attools/smg/src/test.zig:70in nearest public ownertools.smg.src.test
Complete call list for graph.removeNodes
9 direct calls.
tools.smg.src.graph.compactAdjacency[function] — private; no exact target attools/smg/src/graph.zig:562in nearest public ownertiny.smg.graphtools.smg.src.graph.compactEdges[function] — private; no exact target attools/smg/src/graph.zig:587in nearest public ownertiny.smg.graphtools.smg.src.graph.compactNodes[function] — private; no exact target attools/smg/src/graph.zig:596in nearest public ownertiny.smg.graphtools.smg.src.graph.invalidateSuffixIndex[function] — private; no exact target attools/smg/src/graph.zig:627in nearest public ownertiny.smg.graphtools.smg.src.graph.maxRetiredEdgeKeyLen[function] — private; no exact target attools/smg/src/graph.zig:502in nearest public ownertiny.smg.graphtools.smg.src.graph.planEdgeRemoval[function] — private; no exact target attools/smg/src/graph.zig:524in nearest public ownertiny.smg.graphtools.smg.src.graph.planNodeRemoval[function] — private; no exact target attools/smg/src/graph.zig:511in nearest public ownertiny.smg.graphtools.smg.src.graph.pruneEdgeIndex[function] — private; no exact target attools/smg/src/graph.zig:537in nearest public ownertiny.smg.graphtools.smg.src.graph.pruneNodeIndex[function] — private; no exact target attools/smg/src/graph.zig:553in nearest public ownertiny.smg.graph
Audit
| Definitions | 28 |
|---|---|
| Public names | 28 |
| Members | 8 |
| Version | 26.7.0 |
| Revision | daab053ee433 |