{ "cells": [ { "cell_type": "markdown", "id": "7fb27b941602401d91542211134fc71a", "metadata": {}, "source": [ "# Visualizing ARC Tasks\n", "\n", "JaxARC offers two complementary visualization methods:\n", "\n", "1. **SVG Visualization** - High-quality vector graphics ideal for:\n", " - Jupyter notebooks and IPython\n", " - Documentation and presentations\n", " - Publication-quality figures\n", "\n", "2. **Rich Terminal Output** - Colored console output perfect for:\n", " - Interactive development\n", " - Quick debugging\n", " - Terminal-based workflows\n", "\n", "Both methods work with the same data structures and produce beautiful, color-accurate representations of ARC grids." ] }, { "cell_type": "code", "execution_count": 1, "id": "acae54e37e7d407bbb7b55eff062a284", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m2025-11-18 22:47:39.486\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mjaxarc.parsers.arc_agi\u001b[0m:\u001b[36m_scan_available_tasks\u001b[0m:\u001b[36m110\u001b[0m - \u001b[1mFound 1000 tasks in /Users/aadam/workspace/JaxARC/data/ARC-AGI-2/data/training (lazy loading - tasks loaded on-demand)\u001b[0m\n" ] } ], "source": [ "# Import required libraries\n", "from __future__ import annotations\n", "\n", "import jax\n", "\n", "from jaxarc.configs import DatasetConfig\n", "from jaxarc.parsers.arc_agi import ArcAgiParser\n", "from jaxarc.utils.core import get_config\n", "\n", "# Load configuration\n", "cfg = get_config()\n", "dataset_config = DatasetConfig.from_hydra(cfg.dataset)\n", "\n", "# Initialize parser\n", "parser = ArcAgiParser(dataset_config)" ] }, { "cell_type": "markdown", "id": "9a63283cbaf04dbcab1f6479b197f3a8", "metadata": {}, "source": [ "## Setup: Loading a Task\n", "\n", "First, let's load a random ARC task using the parser. We'll use this task throughout the tutorial to demonstrate different visualization techniques." ] }, { "cell_type": "code", "execution_count": 2, "id": "8dd0d8092fe74a7c96281538738b07e2", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m2025-11-18 22:47:39.570\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.parsers.arc_agi\u001b[0m:\u001b[36m_load_task_from_disk\u001b[0m:\u001b[36m312\u001b[0m - \u001b[34m\u001b[1mLoaded task 'e40b9e2f' from disk\u001b[0m\n", "\u001b[32m2025-11-18 22:47:39.769\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.parsers.base_parser\u001b[0m:\u001b[36m_log_parsing_stats\u001b[0m:\u001b[36m479\u001b[0m - \u001b[34m\u001b[1mTask e40b9e2f: 3 train pairs, 1 test pairs, max grid size: 10x10\u001b[0m\n", "\u001b[32m2025-11-18 22:47:39.770\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.task_manager\u001b[0m:\u001b[36mget_global_task_manager\u001b[0m:\u001b[36m236\u001b[0m - \u001b[34m\u001b[1mCreated global task ID manager\u001b[0m\n", "\u001b[32m2025-11-18 22:47:39.770\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.task_manager\u001b[0m:\u001b[36mregister_task\u001b[0m:\u001b[36m72\u001b[0m - \u001b[34m\u001b[1mRegistered task 'e40b9e2f' with index 0\u001b[0m\n", "\u001b[32m2025-11-18 22:47:39.769\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.parsers.base_parser\u001b[0m:\u001b[36m_log_parsing_stats\u001b[0m:\u001b[36m479\u001b[0m - \u001b[34m\u001b[1mTask e40b9e2f: 3 train pairs, 1 test pairs, max grid size: 10x10\u001b[0m\n", "\u001b[32m2025-11-18 22:47:39.770\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.task_manager\u001b[0m:\u001b[36mget_global_task_manager\u001b[0m:\u001b[36m236\u001b[0m - \u001b[34m\u001b[1mCreated global task ID manager\u001b[0m\n", "\u001b[32m2025-11-18 22:47:39.770\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.task_manager\u001b[0m:\u001b[36mregister_task\u001b[0m:\u001b[36m72\u001b[0m - \u001b[34m\u001b[1mRegistered task 'e40b9e2f' with index 0\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Task Index: 0\n", "Training Pairs: 3\n", "Test Pairs: 1\n" ] } ], "source": [ "# Get a random task (using seed 123 for reproducibility)\n", "key = jax.random.PRNGKey(123)\n", "task = parser.get_random_task(key)\n", "\n", "# Display task information\n", "print(f\"Task Index: {task.task_index}\")\n", "print(f\"Training Pairs: {task.num_train_pairs}\")\n", "print(f\"Test Pairs: {task.num_test_pairs}\")" ] }, { "cell_type": "markdown", "id": "72eea5119410473aa328ad9291626812", "metadata": {}, "source": [ "## Method 1: Single Grid Visualization\n", "\n", "Let's start by visualizing individual grids. This is useful when you want to inspect a specific input or output grid in detail." ] }, { "cell_type": "code", "execution_count": 3, "id": "8edb47106e1a46a883d545849b8ab81b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input grid shape: (10, 10)\n", "Output grid shape: (10, 10)\n", "\n", "SVG Visualization (Input):\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Input\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Import visualization functions\n", "from IPython.display import display\n", "\n", "from jaxarc.utils.visualization import draw_grid_svg, visualize_grid_rich\n", "\n", "# Get the first training pair\n", "task_pair = task.get_train_pair(0)\n", "input_grid = task_pair.input_grid\n", "output_grid = task_pair.output_grid\n", "\n", "print(f\"Input grid shape: {input_grid.shape}\")\n", "print(f\"Output grid shape: {output_grid.shape}\")\n", "print()\n", "\n", "# SVG visualization - high quality for notebooks\n", "print(\"SVG Visualization (Input):\")\n", "input_svg = draw_grid_svg(input_grid, label=\"Training Input\")\n", "display(input_svg)" ] }, { "cell_type": "code", "execution_count": 4, "id": "10185d26023b46108eb7d9f57d49d2b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "SVG Visualization (Output):\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Output\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"\\nSVG Visualization (Output):\")\n", "output_svg = draw_grid_svg(output_grid, label=\"Training Output\")\n", "display(output_svg)" ] }, { "cell_type": "code", "execution_count": 5, "id": "8763a12b2bbd4a93a75aff182afb95dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Rich Terminal Output (Input):\n" ] }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Training Input (Rich) (10x10) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n",
       "
\n" ], "text/plain": [ "\u001b[34m┏━\u001b[0m\u001b[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;34m Training Input (Rich) (10x10) \u001b[0m\u001b[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[34m━┓\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Rich terminal visualization - great for quick debugging\n", "print(\"\\nRich Terminal Output (Input):\")\n", "display(visualize_grid_rich(input_grid, title=\"Training Input (Rich)\"))" ] }, { "cell_type": "code", "execution_count": 6, "id": "7623eae2785240b9bd12b16a66d81610", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Rich Terminal Output (Output):\n" ] }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Training Output (Rich) (10x10) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n",
       "
\n" ], "text/plain": [ "\u001b[34m┏━\u001b[0m\u001b[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;34m Training Output (Rich) (10x10) \u001b[0m\u001b[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[34m━┓\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m┃\u001b[0m\n", "\u001b[34m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"\\nRich Terminal Output (Output):\")\n", "display(visualize_grid_rich(output_grid, title=\"Training Output (Rich)\"))" ] }, { "cell_type": "markdown", "id": "7cdc8c89c7104fffa095e18ddfef8986", "metadata": {}, "source": [ "## Method 2: Input/Output Pair Visualization\n", "\n", "Now let's visualize the transformation from input to output. This side-by-side view makes it easy to see the pattern or rule that transforms the input into the output. **Arrow indicator** shows the transformation direction" ] }, { "cell_type": "code", "execution_count": 7, "id": "b118ea5561624da68c537baed56e602f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "🎨 SVG Pair Visualization:\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Pair 1 Input\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Pair 1 Output\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Import pair visualization functions\n", "from jaxarc.utils.visualization import draw_task_pair_svg, visualize_task_pair_rich\n", "\n", "# SVG pair visualization - shows transformation clearly\n", "print(\"🎨 SVG Pair Visualization:\")\n", "pair_svg = draw_task_pair_svg(\n", " input_grid=input_grid,\n", " output_grid=output_grid,\n", " label=\"Training Pair 1\",\n", ")\n", "display(pair_svg)" ] }, { "cell_type": "code", "execution_count": 8, "id": "938c804e27f84196a10c8828c723f798", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "💻 Rich Terminal Pair Output:\n" ] }, { "data": { "text/html": [ "
╭──────────────────────────────────── Training Pair 1 (Rich) - Input (10x10) ─────────────────────────────────────╮\n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\u001b[34m╭─\u001b[0m\u001b[34m───────────────────────────────────\u001b[0m\u001b[1;34m Training Pair 1 (Rich) - Input (10x10) \u001b[0m\u001b[34m────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\u001b[1m↓\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Training Pair 1 (Rich) - Output (10x10) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "████████████████████                                                                                             \n",
       "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n",
       "
\n" ], "text/plain": [ "\u001b[32m┏━\u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;32m Training Pair 1 (Rich) - Output (10x10) \u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[32m━┓\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m\n", "\u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Rich terminal pair visualization\n", "print(\"\\n💻 Rich Terminal Pair Output:\")\n", "visualize_task_pair_rich(\n", " input_grid=input_grid,\n", " output_grid=output_grid,\n", " title=\"Training Pair 1 (Rich)\",\n", ")" ] }, { "cell_type": "markdown", "id": "504fb2a444614c0babb325280ed9130a", "metadata": {}, "source": [ "## Method 3: Complete Task Visualization\n", "\n", "For understanding the full task, we can visualize all training examples together. This comprehensive view helps identify patterns across multiple examples.\n", "\n", "### Visualization Options\n", "\n", "- `include_test=False` - Show only training pairs (outputs known)\n", "- `include_test=True` - Include test inputs with \"?\" for unknown outputs\n", "- `include_test=\"all\"` - Show everything including test outputs (if available)" ] }, { "cell_type": "code", "execution_count": 9, "id": "59bbdb311c014d738909a11f9e486628", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "🎨 Complete Task - Training Only:\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "In #1\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "In #2\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "In #3\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Out #1\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Out #2\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Out #3\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Task: e40b9e2f\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Import complete task visualization functions\n", "from jaxarc.utils.visualization import (\n", " draw_parsed_task_data_svg,\n", " visualize_parsed_task_data_rich,\n", ")\n", "\n", "# Option 1: Training examples only\n", "print(\"🎨 Complete Task - Training Only:\")\n", "task_svg = draw_parsed_task_data_svg(\n", " task_data=task,\n", " include_test=False, # Show only training pairs\n", ")\n", "display(task_svg)" ] }, { "cell_type": "code", "execution_count": 10, "id": "b43b363d81ae4b689946ece5c682cd59", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "🎨 Complete Task - With Test Input:\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "In #1\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "In #2\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "In #3\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "In #1\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Out #1\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Out #2\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Out #3\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "?\n", "\n", "Train\n", "\n", "Test\n", "Task: e40b9e2f\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Option 2: Include test inputs (outputs unknown)\n", "print(\"\\n🎨 Complete Task - With Test Input:\")\n", "task_svg_with_test = draw_parsed_task_data_svg(\n", " task_data=task,\n", " include_test=True, # Show test inputs with \"?\" for outputs\n", ")\n", "display(task_svg_with_test)" ] }, { "cell_type": "code", "execution_count": 11, "id": "8a65eabff63a45729fe45fb5ade58bdc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "💻 Rich Terminal - Complete Task:\n" ] }, { "data": { "text/html": [ "
╭─ Task: e40b9e2f ────────────────────────────────────────────────────────────────────────────────────────────────╮\n",
       "                                     Training Examples: 3  Test Examples: 1                                      \n",
       "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\u001b[94m╭─\u001b[0m\u001b[94m Task: e40b9e2f \u001b[0m\u001b[94m───────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[94m─╮\u001b[0m\n", "\u001b[94m│\u001b[0m \u001b[1mTraining Examples: \u001b[0m3 \u001b[1mTest Examples: \u001b[0m1 \u001b[94m│\u001b[0m\n", "\u001b[94m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
╭─ Training Examples (3) ─────────────────────────────────────────────────────────────────────────────────────────╮\n",
       "                                                                                                                 \n",
       " ╭────────────────────────────────────────────── Input 1 (10x10) ──────────────────────────────────────────────╮ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "  \n",
       "                                                                                                                 \n",
       " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Output 1 (10x10) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \n",
       " ─────────────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
       " ╭────────────────────────────────────────────── Input 2 (10x10) ──────────────────────────────────────────────╮ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "  \n",
       "                                                                                                                 \n",
       " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Output 2 (10x10) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \n",
       " ─────────────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
       " ╭────────────────────────────────────────────── Input 3 (10x10) ──────────────────────────────────────────────╮ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "  \n",
       "                                                                                                                 \n",
       " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Output 3 (10x10) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \n",
       "                                                                                                                 \n",
       "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\u001b[34m╭─\u001b[0m\u001b[34m Training Examples (3) \u001b[0m\u001b[34m────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m╭─\u001b[0m\u001b[34m─────────────────────────────────────────────\u001b[0m\u001b[1;34m Input 1 (10x10) \u001b[0m\u001b[34m─────────────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m ↓ \u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┏━\u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;32m Output 1 (10x10) \u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[32m━┓\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[2m───────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m╭─\u001b[0m\u001b[34m─────────────────────────────────────────────\u001b[0m\u001b[1;34m Input 2 (10x10) \u001b[0m\u001b[34m─────────────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m ↓ \u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┏━\u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;32m Output 2 (10x10) \u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[32m━┓\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;135;30m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[2m───────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m╭─\u001b[0m\u001b[34m─────────────────────────────────────────────\u001b[0m\u001b[1;34m Input 3 (10x10) \u001b[0m\u001b[34m─────────────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;141;29;44m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m ↓ \u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┏━\u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;32m Output 3 (10x10) \u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[32m━┓\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;141;29;44m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;141;29;44m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;141;29;44m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;141;29;44m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
╭─ Test Examples (1) ─────────────────────────────────────────────────────────────────────────────────────────────╮\n",
       "                                                                                                                 \n",
       " ╭─────────────────────────────────────────── Test Input 1 (10x10) ────────────────────────────────────────────╮ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "  \n",
       "                                                                                                                 \n",
       " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Test Output 1 (10x10) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ████████████████████                                                                                          \n",
       " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \n",
       "                                                                                                                 \n",
       "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\u001b[31m╭─\u001b[0m\u001b[31m Test Examples (1) \u001b[0m\u001b[31m────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[31m─╮\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m╭─\u001b[0m\u001b[34m──────────────────────────────────────────\u001b[0m\u001b[1;34m Test Input 1 (10x10) \u001b[0m\u001b[34m───────────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m│\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[34m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[1m ↓ \u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┏━\u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;32m Test Output 1 (10x10) \u001b[0m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[32m━┓\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;55;212;73m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┃\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m\u001b[38;2;37;37;37m██\u001b[0m \u001b[32m┃\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m│\u001b[0m \u001b[31m│\u001b[0m\n", "\u001b[31m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Rich terminal version - compact overview\n", "print(\"\\n💻 Rich Terminal - Complete Task:\")\n", "visualize_parsed_task_data_rich(\n", " task_data=task,\n", " show_test=True,\n", " show_coordinates=False,\n", " show_numbers=False,\n", " double_width=True,\n", ")" ] }, { "cell_type": "markdown", "id": "c3933fab20d04ec698c2621248eb3be0", "metadata": {}, "source": [ "### Customization Options\n", "\n", "All visualization functions support customization:\n", "\n", "```python\n", "# Grid customization\n", "draw_grid_svg(grid, max_width=15.0, max_height=10.0, label=\"Custom\")\n", "\n", "# Show coordinates in terminal\n", "visualize_grid_rich(grid, show_coordinates=True, show_numbers=True)\n", "\n", "# Custom task layout\n", "draw_parsed_task_data_svg(task, width=40.0, border_colors=[\"#0066cc\", \"#00cc66\"])\n", "```" ] }, { "cell_type": "markdown", "id": "4dd4641cc4064e0191573fe9c69df29b", "metadata": {}, "source": [ "## Iterating Through Training Examples\n", "\n", "When analyzing a task, you often want to examine each training example individually. This loop demonstrates how to visualize multiple pairs programmatically.\n", "\n", "### Practical Use Cases\n", "\n", "- **Pattern recognition** - Study how the transformation rule applies across examples\n", "- **Edge case detection** - Identify examples that behave differently\n", "- **Agent debugging** - Compare your agent's output with expected results for each example" ] }, { "cell_type": "code", "execution_count": 12, "id": "8309879909854d7188b41380fd92a7c3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "============================================================\n", "Training Pair 1 / 3\n", "============================================================\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Pair 1 Input\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Pair 1 Output\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "============================================================\n", "Training Pair 2 / 3\n", "============================================================\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Pair 2 Input\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Training Pair 2 Output\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "============================================================\n", "Test Input (Output Unknown)\n", "============================================================\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "10x10\n", "Test Input\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Iterate through training pairs (showing first 2 for documentation brevity)\n", "from IPython.display import display\n", "\n", "num_pairs_to_show = min(2, task.num_train_pairs)\n", "\n", "for i in range(num_pairs_to_show):\n", " pair = task.get_train_pair(i)\n", "\n", " print(f\"\\n{'=' * 60}\")\n", " print(f\"Training Pair {i + 1} / {task.num_train_pairs}\")\n", " print(f\"{'=' * 60}\")\n", "\n", " # Visualize this pair\n", " pair_svg = draw_task_pair_svg(\n", " input_grid=pair.input_grid,\n", " output_grid=pair.output_grid,\n", " label=f\"Training Pair {i + 1}\",\n", " )\n", " display(pair_svg)\n", "\n", "# Show test input if available\n", "if task.num_test_pairs > 0:\n", " print(f\"\\n{'=' * 60}\")\n", " print(\"Test Input (Output Unknown)\")\n", " print(f\"{'=' * 60}\")\n", " test_input = task.get_test_input_grid(0)\n", " display(draw_grid_svg(test_input, label=\"Test Input\"))" ] }, { "cell_type": "markdown", "id": "024aec28", "metadata": {}, "source": [ "## Method 4: Environment Rendering\n", "\n", "When interacting with the environment (RL agents or interactive scripts), you can use the unified `env.render()` API.\n", "\n", "### Standard Render Modes\n", "\n", "The environment supports three standard modes:\n", "- `rgb_array`: Returns a numpy array (H, W, 3)\n", "- `ansi`: Returns a string for terminal display\n", "- `svg`: Returns an SVG string of the current grid\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "ea696509", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m2025-11-18 22:47:44.316\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.dataset_manager\u001b[0m:\u001b[36mvalidate_dataset\u001b[0m:\u001b[36m212\u001b[0m - \u001b[34m\u001b[1mDataset validation passed: /Users/aadam/workspace/JaxARC/data/MiniARC\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.317\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.dataset_manager\u001b[0m:\u001b[36mensure_dataset_available\u001b[0m:\u001b[36m81\u001b[0m - \u001b[34m\u001b[1mDataset 'MiniARC' found at /Users/aadam/workspace/JaxARC/data/MiniARC\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.318\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mjaxarc.parsers.mini_arc\u001b[0m:\u001b[36m_validate_grid_constraints\u001b[0m:\u001b[36m104\u001b[0m - \u001b[1mMiniARC parser configured with optimal 5x5 grid constraints\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.320\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mjaxarc.parsers.mini_arc\u001b[0m:\u001b[36m_scan_available_tasks\u001b[0m:\u001b[36m131\u001b[0m - \u001b[1mFound 149 tasks in MiniARC dataset (lazy loading - tasks loaded on-demand, optimized for 5x5 grids)\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.321\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.parsers.mini_arc\u001b[0m:\u001b[36m_load_task_from_disk\u001b[0m:\u001b[36m171\u001b[0m - \u001b[34m\u001b[1mLoaded MiniARC task 'Most_Common_color_l6ab0lf3xztbyxsu3p' from disk\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.317\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.dataset_manager\u001b[0m:\u001b[36mensure_dataset_available\u001b[0m:\u001b[36m81\u001b[0m - \u001b[34m\u001b[1mDataset 'MiniARC' found at /Users/aadam/workspace/JaxARC/data/MiniARC\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.318\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mjaxarc.parsers.mini_arc\u001b[0m:\u001b[36m_validate_grid_constraints\u001b[0m:\u001b[36m104\u001b[0m - \u001b[1mMiniARC parser configured with optimal 5x5 grid constraints\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.320\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mjaxarc.parsers.mini_arc\u001b[0m:\u001b[36m_scan_available_tasks\u001b[0m:\u001b[36m131\u001b[0m - \u001b[1mFound 149 tasks in MiniARC dataset (lazy loading - tasks loaded on-demand, optimized for 5x5 grids)\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.321\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.parsers.mini_arc\u001b[0m:\u001b[36m_load_task_from_disk\u001b[0m:\u001b[36m171\u001b[0m - \u001b[34m\u001b[1mLoaded MiniARC task 'Most_Common_color_l6ab0lf3xztbyxsu3p' from disk\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.694\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.parsers.base_parser\u001b[0m:\u001b[36m_log_parsing_stats\u001b[0m:\u001b[36m479\u001b[0m - \u001b[34m\u001b[1mTask Most_Common_color_l6ab0lf3xztbyxsu3p: 3 train pairs, 1 test pairs, max grid size: 5x5\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.694\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.task_manager\u001b[0m:\u001b[36mregister_task\u001b[0m:\u001b[36m72\u001b[0m - \u001b[34m\u001b[1mRegistered task 'Most_Common_color_l6ab0lf3xztbyxsu3p' with index 1\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.694\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.parsers.base_parser\u001b[0m:\u001b[36m_log_parsing_stats\u001b[0m:\u001b[36m479\u001b[0m - \u001b[34m\u001b[1mTask Most_Common_color_l6ab0lf3xztbyxsu3p: 3 train pairs, 1 test pairs, max grid size: 5x5\u001b[0m\n", "\u001b[32m2025-11-18 22:47:44.694\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mjaxarc.utils.task_manager\u001b[0m:\u001b[36mregister_task\u001b[0m:\u001b[36m72\u001b[0m - \u001b[34m\u001b[1mRegistered task 'Most_Common_color_l6ab0lf3xztbyxsu3p' with index 1\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ANSI Render:\n" ] }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[34m┏━\u001b[0m\u001b[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[1;34m Grid (5x5) \u001b[0m\u001b[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[34m━┓\u001b[0m\n",
      "\u001b[34m┃\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \u001b[34m┃\u001b[0m\n",
      "\u001b[34m┃\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \u001b[34m┃\u001b[0m\n",
      "\u001b[34m┃\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \u001b[34m┃\u001b[0m\n",
      "\u001b[34m┃\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;240;18;190m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m\u001b[38;2;84;210;235m██\u001b[0m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \u001b[34m┃\u001b[0m\n",
      "\u001b[34m┃\u001b[0m\u001b[38;2;255;220;0m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m\u001b[38;2;255;65;54m██\u001b[0m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \u001b[34m┃\u001b[0m\n",
      "\u001b[34m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\n",
      "\n",
      "\n",
      "SVG Render:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "5x5\n",
       "Step 0\n",
       ""
      ],
      "text/plain": [
       ""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import jax.random as jr\n",
    "\n",
    "from jaxarc.configs import JaxArcConfig\n",
    "from jaxarc.registration import make\n",
    "from jaxarc.utils.core import get_config\n",
    "\n",
    "# Create an environment\n",
    "config = JaxArcConfig.from_hydra(get_config(overrides=[\"dataset=mini_arc\"]))\n",
    "env, env_params = make(\"Mini-Most_Common_color_l6ab0lf3xztbyxsu3p\", config=config)\n",
    "\n",
    "# Reset\n",
    "key = jr.PRNGKey(42)\n",
    "state, _ = env.reset(key, env_params)\n",
    "\n",
    "# 1. ANSI Render (for terminal)\n",
    "print(\"ANSI Render:\")\n",
    "print(env.render(state, mode=\"ansi\"))\n",
    "\n",
    "# 2. SVG Render (for notebooks)\n",
    "print(\"\\nSVG Render:\")\n",
    "from IPython.display import HTML, display\n",
    "\n",
    "display(HTML(env.render(state, mode=\"svg\")))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6653d433",
   "metadata": {},
   "source": [
    "### Advanced: Step Visualization Wrapper\n",
    "\n",
    "For detailed analysis of agent actions, use the `StepVisualizationWrapper`. It enables `mode=\"detailed\"` which produces a rich SVG showing:\n",
    "- Before/After states\n",
    "- Action taken\n",
    "- Changed cells highlighted\n",
    "- Reward received\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ec7c3c2e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detailed Step Visualization:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "Step 1 - Op 0: Fill 0\n",
       "Task: e40b9e2f\n",
       "Reward: -0.005\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "Before State\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "After State\n",
       "\n",
       "\n",
       ""
      ],
      "text/plain": [
       ""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import jax.numpy as jnp\n",
    "\n",
    "from jaxarc.wrappers import StepVisualizationWrapper\n",
    "\n",
    "# Wrap the environment\n",
    "viz_env = StepVisualizationWrapper(env)\n",
    "\n",
    "# Take a dummy action to generate a transition\n",
    "# (Selecting top-left corner and filling with color 2)\n",
    "h, w = state.working_grid.shape\n",
    "selection = jnp.zeros((h, w), dtype=bool)\n",
    "selection = selection.at[:2, :2].set(True)\n",
    "\n",
    "action = {\n",
    "    \"operation\": 0,  # FILL\n",
    "    \"selection\": selection,\n",
    "    \"color\": 2,\n",
    "}\n",
    "\n",
    "# Step\n",
    "next_state, timestep = viz_env.step(state, action, env_params)\n",
    "\n",
    "# Render detailed view\n",
    "print(\"Detailed Step Visualization:\")\n",
    "display(HTML(viz_env.render(next_state, mode=\"detailed\")))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dev",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}