jigsawR / tests /debug_archive /debug_dedup_keys.R
pjt222's picture
Upload folder using huggingface_hub
e232e39 verified
devtools::load_all()
cat("Checking deduplication key matching for fused edges\n")
cat("===================================================\n\n")
# Generate the exact puzzle
result <- generate_puzzle(
type = "concentric",
seed = 42,
grid = c(3),
size = c(300),
tabsize = 7,
jitter = 2,
offset = 50,
fusion_groups = list(c(1, 2), c(5, 6, 7)),
fusion_style = "dashed",
fusion_opacity = 0.3,
fill_color = "none",
save_files = FALSE
)
cat("=== FUSED EDGE ENDPOINT KEYS ===\n\n")
# Track keys like the renderer does
all_fused_keys <- list()
for (i in seq_along(result$pieces)) {
piece <- result$pieces[[i]]
if (is.null(piece$fused_edges)) next
edge_paths <- get_piece_edge_paths(piece)
edge_names <- get_piece_edge_names(piece)
for (edge_name in edge_names) {
if (!isTRUE(piece$fused_edges[[edge_name]])) next
edge_path <- edge_paths[[edge_name]]
if (is.null(edge_path) || !nzchar(edge_path)) next
segs <- parse_svg_path(edge_path)
if (length(segs) < 2) next
start_x <- segs[[1]]$x
start_y <- segs[[1]]$y
end_seg <- NULL
for (j in length(segs):2) {
if (segs[[j]]$type != "Z") {
end_seg <- segs[[j]]
break
}
}
if (!is.null(end_seg)) {
end_x <- end_seg$x
end_y <- end_seg$y
# Create key like renderer does
p1 <- sprintf("%.1f,%.1f", start_x, start_y)
p2 <- sprintf("%.1f,%.1f", end_x, end_y)
edge_key <- if (p1 < p2) paste(p1, p2, sep = "|") else paste(p2, p1, sep = "|")
cat(sprintf("Piece %2d, %s: (%7.2f, %7.2f) -> (%7.2f, %7.2f)\n",
i, edge_name, start_x, start_y, end_x, end_y))
cat(sprintf(" Key: %s\n\n", edge_key))
all_fused_keys[[length(all_fused_keys) + 1]] <- list(
piece = i,
edge = edge_name,
key = edge_key,
start = c(start_x, start_y),
end = c(end_x, end_y)
)
}
}
}
cat("=== KEY MATCHING ANALYSIS ===\n\n")
# Find matching keys
keys_only <- sapply(all_fused_keys, function(x) x$key)
unique_keys <- unique(keys_only)
cat(sprintf("Total fused edges: %d\n", length(keys_only)))
cat(sprintf("Unique keys: %d\n", length(unique_keys)))
cat(sprintf("Expected after dedup: %d\n\n", length(unique_keys)))
for (key in unique_keys) {
matches <- which(keys_only == key)
if (length(matches) > 1) {
cat(sprintf("KEY MATCHES (should dedup):\n"))
for (m in matches) {
cat(sprintf(" - Piece %d, edge %s\n", all_fused_keys[[m]]$piece, all_fused_keys[[m]]$edge))
}
cat("\n")
} else {
cat(sprintf("NO MATCH for piece %d, edge %s (key: %s)\n",
all_fused_keys[[matches[1]]]$piece,
all_fused_keys[[matches[1]]]$edge,
key))
}
}
cat("\n=== EXPECTED FUSED EDGE PAIRS ===\n")
cat("Fusion group 1: pieces 1,2\n")
cat(" - Piece 1 edge '1' should match Piece 2 edge 'INNER'\n")
cat("Fusion group 2: pieces 5,6,7\n")
cat(" - Piece 5 edge 'RIGHT' should match Piece 6 edge 'LEFT'\n")
cat(" - Piece 6 edge 'RIGHT' should match Piece 7 edge 'LEFT'\n")