TODO (Prioritised)
✅ σ=0 ACHIEVED — Solver works!
The solver now finds Id∘KroneckerSelfSimilar at depth 1 and achieves σ=0 on all 6 pairs of ARC task 007bbfb7.
What was wrong
- Wrong target — the repo's example1 target had 4 incorrect cells (row 7). Discovered by cross-referencing against the real ARC dataset (
data/training/007bbfb7.json). Fixed. - Limited transform library — the beam only had vanilla tile, fill_enclosed, rotate90, reflect_h. None could express the Kronecker self-similar pattern. Fixed: added 19 new transforms.
- Beam only tried resized input — shape-changing transforms (Kronecker: 3×3→9×9) need the original input, not the tiled 9×9 intermediate. The beam now uses a dual-strategy: each transform is tried on both the resized field AND the original input.
The actual transformation (ARC task 007bbfb7)
output = np.kron((input != 0).astype(int), input) — a Kronecker product where the input's own nonzero mask determines the meta-layout for placing copies of itself.
Immediate (blockers) — ALL RESOLVED
Add candidate snapshot to beam logs✅ Done.Ensure gate values are booleans✅ Done.Make tile transform nontrivial✅ Done —ShiftedTilewired in + 19 new transforms includingKroneckerSelfSimilar.Implement robust fill_enclosed✅ Done — BFS insolver_core.py.Fix σ=98 flatline✅ Done — σ=0 on all 6 pairs.
Short term
Add CLI entrypoint with✅ Done —--use_wandbflagscripts/entrypoint.py.Add unit tests for transforms✅ Done —tests/test_transforms.py(40 tests, all pass).- Add small visualization notebook for
phi_best, diff maps, and Layer‑1 masks.
Medium term
Improve Layer‑1 mask generation✅ Done.- Add a toggle to include/exclude
candidate_arrayin logs to control log size. Create a reproducible benchmark harness✅ Done —experiment_driver.sweep()+results.csv.- Expand to more ARC tasks — test on other 3×3→9×9 tasks and different task families.
- Benchmark the enriched library — run sweep across multiple ARC tasks, measure solve rate.
Long term
Integrate a safe external W&B uploader✅ Done.- Build task loader for full ARC dataset — load any task from
fchollet/ARC-AGIby ID. - Add more transform families — connected components, object extraction, voronoi fill (see Icecuber DSL: arxiv:2402.03507).
- Automated evaluation harness — run solver on all 400 ARC training tasks, report solve rate.
- Document reproducibility steps and expected outputs for each example task.
Code hygiene (completed)
Duplicate✅ Fixed.Transformclass intransforms.pyDuplicate imports/paste blocks in✅ Fixed.solver_core.pyLambda closure bug in✅ Fixed.default_atomic_factory✅ Fixed.wandb_runner.pyint(generate_id(), 36)crash✅ Fixed.minimal_runner.pyTARGET was all‑zerosREADME.md referenced non‑existent paths✅ Fixed.Committed✅ Fixed..pycfiles✅ Fixed.itt_solver/README.md.mddouble extensionWrong target in example1 (4 cells off)✅ Fixed — corrected in entrypoint.py, experiments_analysis.py, fix_and_inspect_logs.py, minimal_runner.py.Beam search only applied transforms to resized field✅ Fixed — dual-strategy (resized + original).
New transforms added (19 total)
| Transform | Description |
|---|---|
KroneckerSelfSimilar |
kron((I≠0), I) — self-similar meta-layout |
KroneckerSelfSimilarInv |
kron(I, (I≠0)) — mirror variant |
MirrorTileH |
[abc|cba] horizontal mirror |
MirrorTileV |
Vertical mirror stack |
MirrorTile4Way |
Full kaleidoscope (D4) |
Upscale(2) / Upscale(3) |
Pixel-repeat zoom |
Downscale(2) |
Subsample (inverse of upscale) |
StackH(3) / StackV(3) |
Tile horizontally/vertically |
RetainColor(c) |
Keep only color c |
RemoveColor(c) |
Zero out color c |
InvertColors |
Swap black ↔ top color |
GravityDown / GravityUp |
Pixels fall/rise in columns |
OverlayTransparent(bg) |
Transparent overlay on background |
CropToContent |
Crop to non-zero bounding box |
Transpose |
Matrix transpose |
ShiftedTile |
Tile with roll offset |