{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "71e87499",
   "metadata": {
    "lines_to_next_cell": 2
   },
   "source": [
    "# Tensor Puzzles\n",
    "- by [Sasha Rush](http://rush-nlp.com) - [srush_nlp](https://twitter.com/srush_nlp) (with Marcos Treviso)\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "When learning a tensor programming language like PyTorch or Numpy it\n",
    "is tempting to rely on the standard library (or more honestly\n",
    "StackOverflow) to find a magic function for everything.  But in\n",
    "practice, the tensor language is extremely expressive, and you can\n",
    "do most things from first principles and clever use of broadcasting.\n",
    "\n",
    "\n",
    "\n",
    "This is a collection of 21 tensor puzzles. Like chess puzzles these are\n",
    "not meant to simulate the complexity of a real program, but to practice\n",
    "in a simplified environment. Each puzzle asks you to reimplement one\n",
    "function in the NumPy standard library without magic. \n",
    "\n",
    "\n",
    "I recommend running in Colab. Click here and copy the notebook to get start.\n",
    "\n",
    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/srush/Tensor-Puzzles/blob/main/Tensor%20Puzzlers.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a80d8a77",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:04.415840Z",
     "iopub.status.busy": "2022-07-13T00:15:04.415474Z",
     "iopub.status.idle": "2022-07-13T00:15:15.033050Z",
     "shell.execute_reply": "2022-07-13T00:15:15.032260Z"
    }
   },
   "outputs": [],
   "source": [
    "!pip install -qqq torchtyping hypothesis pytest git+https://github.com/chalk-diagrams/chalk\n",
    "!wget -q https://github.com/srush/Tensor-Puzzles/raw/main/lib.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "bf221907",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:15.036937Z",
     "iopub.status.busy": "2022-07-13T00:15:15.036583Z",
     "iopub.status.idle": "2022-07-13T00:15:16.650907Z",
     "shell.execute_reply": "2022-07-13T00:15:16.650254Z"
    }
   },
   "outputs": [],
   "source": [
    "from lib import draw_examples, make_test, run_test\n",
    "import torch\n",
    "import numpy as np\n",
    "from torchtyping import TensorType as TT\n",
    "tensor = torch.tensor"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b4f584e",
   "metadata": {},
   "source": [
    "## Rules\n",
    "\n",
    "1. These puzzles are about *broadcasting*. Know this rule."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e2fdc64",
   "metadata": {
    "lines_to_next_cell": 2
   },
   "source": [
    "![](https://pbs.twimg.com/media/FQywor0WYAssn7Y?format=png&name=large)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7015885",
   "metadata": {},
   "source": [
    "2. Each puzzle needs to be solved in 1 line (<80 columns) of code.\n",
    "3. You are allowed @, arithmetic, comparison, `shape`, any indexing (e.g. `a[:j], a[:, None], a[arange(10)]`), and previous puzzle functions.\n",
    "4. You are *not allowed* anything else. No `view`, `sum`, `take`, `squeeze`, `tensor`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc2cbfb3",
   "metadata": {},
   "source": [
    "5. You can start with these two functions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1e917499",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:16.654641Z",
     "iopub.status.busy": "2022-07-13T00:15:16.654307Z",
     "iopub.status.idle": "2022-07-13T00:15:16.697912Z",
     "shell.execute_reply": "2022-07-13T00:15:16.697280Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n",
       "<svg baseProfile=\"full\" height=\"180.01199999999997\" version=\"1.1\" width=\"1200\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\" /></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 600.003, 90.00599999999999)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -1.1102230246251565e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"3.6002399999999994\" style=\"vector-effect: non-scaling-stroke;\" width=\"24.000120000000003\" x=\"-12.000060000000001\" y=\"-1.8001199999999997\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.881784197001252e-16, -1.2001199999999999)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.75px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">arange</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.00015)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -10.0, -0.0)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -4.0, -0.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.76;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.8200000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.88;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g></g></g></g><g /></g></g></g></g><g /></g></g></g></g></svg>"
      ],
      "text/plain": [
       "Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205692b0>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color white>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=24.000120000000003, height=3.6002399999999994, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, -8.881784197001252e-16,\n",
       "       0.0, 1.0, -1.2001199999999999), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205e4af0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205e4970>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205e44f0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205e2f10>, diagram1=Primitive(shape=Spacer(width=0, height=1), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='arange', font_size=0.75), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0001), diagram=Primitive(shape=Spacer(width=0, height=1), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.00015), diagram=ApplyTransform(transform=Affine(1.0, 0.0, -10.0,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205e2910>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205e2730>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205e2130>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205dddc0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205dd8e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205dd580>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205d8730>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a9e20>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a99a0>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205d8a90>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -2.0,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c0610>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205bbfa0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205bbcd0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205bb760>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205bb310>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205b2eb0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205b2a00>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205b2580>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 4.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.64, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 6.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 8.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205d8ca0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -1.0,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c48e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c44c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c4100>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c0b50>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 10.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 15.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205dd370>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -4.0,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205d8460>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205d4e50>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205d4af0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64dc35ad90>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205d42e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205cfcd0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205cf970>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205cf3a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205caf10>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205caa30>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205ca6d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205ca100>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c7c70>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c7850>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c73a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205c4e80>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 4.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.64, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 4.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.7, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 6.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.76, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 6.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.8200000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 8.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.88, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty())))))), diagram2=Empty())))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def arange(i: int):\n",
    "    \"Use this function to replace a for-loop.\"\n",
    "    return torch.tensor(range(i))\n",
    "\n",
    "draw_examples(\"arange\", [{\"\" : arange(i)} for i in [5, 3, 9]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "aa922d9d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:16.701951Z",
     "iopub.status.busy": "2022-07-13T00:15:16.701616Z",
     "iopub.status.idle": "2022-07-13T00:15:16.795294Z",
     "shell.execute_reply": "2022-07-13T00:15:16.794635Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n",
       "<svg baseProfile=\"full\" height=\"1020.0060000000001\" version=\"1.1\" width=\"480\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\" /></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 240.0, 509.9966250421872)\"><g transform=\"matrix(47.618452388392775, 0.0, 0.0, 47.618452388392775, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"20.40012\" style=\"vector-effect: non-scaling-stroke;\" width=\"9.600119999999999\" x=\"-4.800059999999999\" y=\"-10.20006\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -9.60006)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.75px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">broadcast</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 9.0001)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -4.0, -6.0)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -1.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 5.0)\"><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">b</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -2.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 8.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 11.0)\"><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">ret</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.76;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.76;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.8200000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -1.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g></g><g /></g></g></g></g></g></g></g></g><g /></g></g></g></g><g /></g></g></g></g></svg>"
      ],
      "text/plain": [
       "Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204eba60>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color white>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=9.600119999999999, height=20.40012, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -9.60006), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204eb220>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e7d90>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e7b20>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e76a0>, diagram1=Primitive(shape=Spacer(width=0, height=1), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='broadcast', font_size=0.75), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0001), diagram=Primitive(shape=Spacer(width=0, height=1), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 9.0001), diagram=ApplyTransform(transform=Affine(1.0, 0.0, -4.0,\n",
       "       0.0, 1.0, -6.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420562f70>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420562c40>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205628b0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420562550>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420555a30>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420555700>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420555220>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420552e80>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420552040>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205964f0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64dc330070>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='a', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420552790>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -1.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205833a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420535e80>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205359a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420535580>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420535100>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420596ca0>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420552940>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420589580>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420589280>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420583c70>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205834c0>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 5.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642055c370>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642055c0a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420559b20>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205597c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420555dc0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420590310>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420589e50>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='b', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205590d0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -2.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642057e9a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642057e400>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642057e160>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420581700>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205811f0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420581f70>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420590e20>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205906a0>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 3.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 3.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 4.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.64, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205593a0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642057a3d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642057ef40>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 8.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 11.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420560eb0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420560b50>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420560670>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420560310>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642055c700>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420579130>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642057ac70>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='ret', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642055c880>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -1.5,\n",
       "       0.0, 1.0, -2.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420543f40>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420543af0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642053bc70>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642053b6d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642052f760>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642052f2e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642059d1c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a2f10>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420598fa0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420598a30>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205985e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205981c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420579cd0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420579850>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a2df0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a2880>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a2430>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a3f40>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a3b20>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205a36a0>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.64, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642052f190>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420528be0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420528790>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420528370>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642059de80>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642059da00>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.64, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.7, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 3.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642053b5b0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420539fa0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420539bb0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420539790>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205392e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642052fe20>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.64, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.7, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.76, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 3.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 4.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205439d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420543460>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205430a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642053fbb0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642053f700>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642053f280>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.64, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.7, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.76, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 3.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.8200000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642055c8b0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642054ee50>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642054eb80>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420549ca0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205499d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205469d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420546550>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420549700>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420549280>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 2.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642054e8b0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642054e430>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.52, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.5800000000000001, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))))), diagram2=Empty())))))))), diagram2=Empty())))"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Example of broadcasting.\n",
    "examples = [(arange(4), arange(5)[:, None]) ,\n",
    "            (arange(3)[:, None], arange(2))]\n",
    "draw_examples(\"broadcast\", [{\"a\": a, \"b\":b, \"ret\": a + b} for a, b in examples])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0554b7e3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:16.799098Z",
     "iopub.status.busy": "2022-07-13T00:15:16.798780Z",
     "iopub.status.idle": "2022-07-13T00:15:16.910897Z",
     "shell.execute_reply": "2022-07-13T00:15:16.910310Z"
    },
    "lines_to_end_of_cell_marker": 0,
    "lines_to_next_cell": 1
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n",
       "<svg baseProfile=\"full\" height=\"720.012\" version=\"1.1\" width=\"840\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\" /></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 420.0029999999999, 360.0059999999999)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"14.400239999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"16.80012\" x=\"-8.40006\" y=\"-7.200119999999999\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -6.6001199999999995)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.75px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">where</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 6.50015)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -4.00005)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">q</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5000499999999999, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.5)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.5)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5000499999999999, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.5)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.5)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 5.50005)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">b</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5000499999999999, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 6.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 8.0001)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;&#10;                      font-family:sans-serif; font-weight: bold;&#10;                      font-size:0.5px;&#10;                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">ret</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g></g><g /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5000499999999999, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.0)\"><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.5)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g></g><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.5, -0.5)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g /></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\" /></g></g></g></g></g></g><g /></g></g></g></g></g></g></g></g><g /></g></g></g></g><g /></g></g></g></g></svg>"
      ],
      "text/plain": [
       "Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7cfb20>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color white>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=16.80012, height=14.400239999999998, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -6.6001199999999995), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7cf0d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c9eb0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c9be0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c9760>, diagram1=Primitive(shape=Spacer(width=0, height=1), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='where', font_size=0.75), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0001), diagram=Primitive(shape=Spacer(width=0, height=1), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 6.50015), diagram=ApplyTransform(transform=Affine(1.0, 0.0, -7.0,\n",
       "       0.0, 1.0, -4.00005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c8fd0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c8c10>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c89d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c8370>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c5fa0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c5b50>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bd2b0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c2fd0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c2c40>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c2790>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c2160>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c7f40>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c7850>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c74c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c70a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c8c40>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204be8e0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f4160>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204b13d0>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='q', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5000499999999999,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204beaf0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 4.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bee80>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420510130>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f4b80>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c8190>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420510c10>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420510790>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 8.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 10.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c83d0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.5), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f88b0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f85e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420511790>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205112b0>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f8310>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420511eb0>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 11.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 13.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204c8760>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.5), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205264c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205261c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420518340>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f8e80>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420518d30>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420518a30>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.5), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 3.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204ddd60>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204ddb80>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204dd790>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204dd2e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bac70>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204baac0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204ba4c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204ba190>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bcc70>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bc910>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bd6a0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642051c1f0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420526cd0>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='a', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5000499999999999,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bd8b0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 4.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bdc40>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205161f0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f642051ca60>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bde50>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 8.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 10.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bc160>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 11.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 13.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204bc4f0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -0.5), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420517160>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420516970>, diagram1=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 4.5), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 5.50005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b4910>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b46d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b42e0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e4df0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e47c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e4610>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e4160>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e0ca0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e07c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e0460>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204de1f0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205210d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420517af0>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='b', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5000499999999999,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204de400>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 4.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204de790>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420521d60>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420521880>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204dea60>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420522850>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420522400>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 8.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 10.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204ded30>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64205073d0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420522f40>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 11.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 13.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204e0040>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fd0a0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f6420507a90>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 6.5001), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 8.0001), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c5460>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7c5220>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bfdf0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bf940>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bf310>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bdf40>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bdb20>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bd7f0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bd310>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7bd070>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b4d00>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -5e-05,\n",
       "       0.0, 1.0, -0.25005), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fdcd0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fd850>, diagram1=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.25), diagram=ApplyStyle(style=Style(line_width=(<WidthType.NORMALIZED: 2>, 0.0), line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color black>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Text(text='ret', font_size=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5001), diagram=Primitive(shape=Spacer(width=0, height=0.5), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))), diagram2=Empty()), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.5000499999999999,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b4ee0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.0,\n",
       "       0.0, 1.0, -0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 2.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 4.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b82e0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204ffd00>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204ff760>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 5.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 7.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b85b0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fe850>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fe3d0>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 8.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 10.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b87f0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.5), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fa7c0>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fa490>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f5550>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f5070>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fa160>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204f5ca0>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=0.46, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 11.50005,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Spacer(width=1.0, height=0), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 13.00005,\n",
       "       0.0, 1.0, 0.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f641e7b8ac0>, diagram1=ApplyTransform(transform=Affine(1.0, 0.0, -0.5,\n",
       "       0.0, 1.0, -0.5), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204be460>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204a7430>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204a7280>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204fadc0>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color blue>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.5), diagram=ApplyTransform(transform=Affine(0.0, 1.0, 0.0,\n",
       "       -1.0, 0.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 1.0), diagram=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204a7e20>, diagram1=Compose(envelope=<chalk.envelope.Envelope object at 0x7f64204a7970>, diagram1=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=1.0, dashing=None, output_size=None), diagram=ApplyStyle(style=Style(line_width=None, line_color=None, fill_color=<Color orange>, fill_opacity=None, dashing=None, output_size=None), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0)))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 0.5,\n",
       "       0.0, 1.0, 0.0), diagram=ApplyTransform(transform=Affine(1.0, 0.0, 0.0,\n",
       "       -0.0, 1.0, 0.0), diagram=Empty()))), diagram2=ApplyTransform(transform=Affine(1.0, 0.0, 1.0,\n",
       "       0.0, 1.0, 0.0), diagram=Primitive(shape=Rectangle(width=1, height=1, radius=None), style=Style(line_width=None, line_color=None, fill_color=None, fill_opacity=None, dashing=None, output_size=None), transform=Affine(1.0, 0.0, 0.0,\n",
       "       0.0, 1.0, 0.0))))))), diagram2=Empty())))))))), diagram2=Empty())))"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def where(q, a, b):\n",
    "    \"Use this function to replace an if-statement.\"\n",
    "    return (q * a) + (~q) * b\n",
    "\n",
    "# In diagrams, orange is positive/True, white is zero/False, and blue is negative.\n",
    "\n",
    "examples = [(tensor([False]), tensor([10]), tensor([0])),\n",
    "            (tensor([False, True]), tensor([1, 1]), tensor([-10, 0])),\n",
    "            (tensor([False, True]), tensor([1]), tensor([-10, 0])),\n",
    "            (tensor([[False, True], [True, False]]), tensor([1]), tensor([-10, 0])),\n",
    "            (tensor([[False, True], [True, False]]), tensor([[0], [10]]), tensor([-10, 0])),\n",
    "           ]\n",
    "draw_examples(\"where\", [{\"q\": q, \"a\":a, \"b\":b, \"ret\": where(q, a, b)} for q, a, b in examples])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06ef7f29",
   "metadata": {},
   "source": [
    "## Puzzle 1 - ones\n",
    "\n",
    "Compute [ones](https://numpy.org/doc/stable/reference/generated/numpy.ones.html) - the vector of all ones."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e46e4ada",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:16.915061Z",
     "iopub.status.busy": "2022-07-13T00:15:16.914716Z",
     "iopub.status.idle": "2022-07-13T00:15:17.727959Z",
     "shell.execute_reply": "2022-07-13T00:15:17.727364Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"180.01199999999997\" version=\"1.1\" width=\"840\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 420.0029999999999, 90.00599999999999)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -1.1102230246251565e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"3.6002399999999994\" style=\"vector-effect: non-scaling-stroke;\" width=\"16.80012\" x=\"-8.40006\" y=\"-1.8001199999999997\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -1.2001199999999999)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">one</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.00015)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -0.0)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def ones_spec(out):\n",
    "    for i in range(len(out)):\n",
    "        out[i] = 1\n",
    "        \n",
    "def ones(i: int) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_ones = make_test(\"one\", ones, ones_spec, add_sizes=[\"i\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "65dadb3d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:17.731092Z",
     "iopub.status.busy": "2022-07-13T00:15:17.730771Z",
     "iopub.status.idle": "2022-07-13T00:15:17.734462Z",
     "shell.execute_reply": "2022-07-13T00:15:17.733881Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_ones)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d281e56c",
   "metadata": {},
   "source": [
    "## Puzzle 2 - sum\n",
    "\n",
    "Compute [sum](https://numpy.org/doc/stable/reference/generated/numpy.sum.html) - the sum of a vector."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "eb9f236f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:17.737503Z",
     "iopub.status.busy": "2022-07-13T00:15:17.737190Z",
     "iopub.status.idle": "2022-07-13T00:15:18.496977Z",
     "shell.execute_reply": "2022-07-13T00:15:18.496351Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300.0179999999999\" version=\"1.1\" width=\"720\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 360.0029999999999, 150.00899999999996)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, 2.220446049250313e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"6.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"14.40012\" x=\"-7.20006\" y=\"-3.0001799999999994\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -2.4001799999999998)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">sum</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -6.0, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def sum_spec(a, out):\n",
    "    out[0] = 0\n",
    "    for i in range(len(a)):\n",
    "        out[0] += a[i]\n",
    "        \n",
    "def sum(a: TT[\"i\"]) -> TT[1]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_sum = make_test(\"sum\", sum, sum_spec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "3f7e2b46",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:18.500120Z",
     "iopub.status.busy": "2022-07-13T00:15:18.499809Z",
     "iopub.status.idle": "2022-07-13T00:15:18.503156Z",
     "shell.execute_reply": "2022-07-13T00:15:18.502577Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_sum)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b2d68c4",
   "metadata": {},
   "source": [
    "## Puzzle 3 - outer\n",
    "\n",
    "Compute [outer](https://numpy.org/doc/stable/reference/generated/numpy.outer.html) - the outer product of two vectors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "33e8b424",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:18.506196Z",
     "iopub.status.busy": "2022-07-13T00:15:18.505868Z",
     "iopub.status.idle": "2022-07-13T00:15:20.019439Z",
     "shell.execute_reply": "2022-07-13T00:15:20.018755Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"660.0179999999999\" version=\"1.1\" width=\"1080\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 540.0029999999999, 330.0089999999999)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"13.200359999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"21.600120000000004\" x=\"-10.800060000000002\" y=\"-6.600179999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.881784197001252e-16, -6.000179999999999)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">outer</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 6.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -9.0, -4.00005)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">b</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 6.00015)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -1.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -1.5)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.6;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.6;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.6;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.6;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 1.12;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.12;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.12;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.76;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.12;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def outer_spec(a, b, out):\n",
    "    for i in range(len(out)):\n",
    "        for j in range(len(out[0])):\n",
    "            out[i][j] = a[i] * b[j]\n",
    "            \n",
    "def outer(a: TT[\"i\"], b: TT[\"j\"]) -> TT[\"i\", \"j\"]:\n",
    "    raise NotImplementedError\n",
    "    \n",
    "test_outer = make_test(\"outer\", outer, outer_spec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "15c04a58",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:20.022830Z",
     "iopub.status.busy": "2022-07-13T00:15:20.022513Z",
     "iopub.status.idle": "2022-07-13T00:15:20.026801Z",
     "shell.execute_reply": "2022-07-13T00:15:20.026186Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_outer)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ebb1a810",
   "metadata": {},
   "source": [
    "## Puzzle 4 - diag\n",
    "\n",
    "Compute [diag](https://numpy.org/doc/stable/reference/generated/numpy.diag.html) - the diagonal vector of a square matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "09ea72c6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:20.030049Z",
     "iopub.status.busy": "2022-07-13T00:15:20.029731Z",
     "iopub.status.idle": "2022-07-13T00:15:21.274448Z",
     "shell.execute_reply": "2022-07-13T00:15:21.273836Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"480.01199999999994\" version=\"1.1\" width=\"840\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 420.0029999999998, 240.00599999999991)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"9.60024\" style=\"vector-effect: non-scaling-stroke;\" width=\"16.80012\" x=\"-8.40006\" y=\"-4.80012\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -4.20012)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">diag</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.50015)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -1.5)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -1.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -1.5)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.50005)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def diag_spec(a, out):\n",
    "    for i in range(len(a)):\n",
    "        out[i] = a[i][i]\n",
    "        \n",
    "def diag(a: TT[\"i\", \"i\"]) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_diag = make_test(\"diag\", diag, diag_spec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5d4c3641",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:21.277837Z",
     "iopub.status.busy": "2022-07-13T00:15:21.277486Z",
     "iopub.status.idle": "2022-07-13T00:15:21.281005Z",
     "shell.execute_reply": "2022-07-13T00:15:21.280409Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_diag)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ffdce80",
   "metadata": {},
   "source": [
    "## Puzzle 5 - eye\n",
    "\n",
    "Compute [eye](https://numpy.org/doc/stable/reference/generated/numpy.eye.html) - the identity matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "4fda43df",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:21.283997Z",
     "iopub.status.busy": "2022-07-13T00:15:21.283689Z",
     "iopub.status.idle": "2022-07-13T00:15:22.155854Z",
     "shell.execute_reply": "2022-07-13T00:15:22.155222Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"420.006\" version=\"1.1\" width=\"900\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 450.0029999999999, 210.00299999999993)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"8.40012\" style=\"vector-effect: non-scaling-stroke;\" width=\"18.00012\" x=\"-9.00006\" y=\"-4.20006\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -3.60006)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">eye</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0001)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.5, -0.0)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -1.5)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -1.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def eye_spec(out):\n",
    "    for i in range(len(out)):\n",
    "        out[i][i] = 1\n",
    "        \n",
    "def eye(j: int) -> TT[\"j\", \"j\"]:\n",
    "    raise NotImplementedError\n",
    "    \n",
    "test_eye = make_test(\"eye\", eye, eye_spec, add_sizes=[\"j\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "1c2ec691",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:22.159088Z",
     "iopub.status.busy": "2022-07-13T00:15:22.158772Z",
     "iopub.status.idle": "2022-07-13T00:15:22.162208Z",
     "shell.execute_reply": "2022-07-13T00:15:22.161597Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_eye)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ceb0fdd",
   "metadata": {},
   "source": [
    "## Puzzle 6 - triu\n",
    "\n",
    "Compute [triu](https://numpy.org/doc/stable/reference/generated/numpy.triu.html) - the upper triangular matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "4658f7e5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:22.165226Z",
     "iopub.status.busy": "2022-07-13T00:15:22.164922Z",
     "iopub.status.idle": "2022-07-13T00:15:23.160949Z",
     "shell.execute_reply": "2022-07-13T00:15:23.160294Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"420.006\" version=\"1.1\" width=\"1020\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 510.00299999999993, 210.00299999999993)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"8.40012\" style=\"vector-effect: non-scaling-stroke;\" width=\"20.40012\" x=\"-10.20006\" y=\"-4.20006\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.7763568394002505e-15, -3.60006)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">triu</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0001)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.5, -0.0)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -1.5)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def triu_spec(out):\n",
    "    for i in range(len(out)):\n",
    "        for j in range(len(out)):\n",
    "            if i <= j:\n",
    "                out[i][j] = 1\n",
    "            else:\n",
    "                out[i][j] = 0\n",
    "                \n",
    "def triu(j: int) -> TT[\"j\", \"j\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_triu = make_test(\"triu\", triu, triu_spec, add_sizes=[\"j\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "b00e3f88",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:23.164309Z",
     "iopub.status.busy": "2022-07-13T00:15:23.163987Z",
     "iopub.status.idle": "2022-07-13T00:15:23.167373Z",
     "shell.execute_reply": "2022-07-13T00:15:23.166786Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_triu)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3209ef8",
   "metadata": {},
   "source": [
    "## Puzzle 7 - cumsum\n",
    "\n",
    "Compute [cumsum](https://numpy.org/doc/stable/reference/generated/numpy.cumsum.html) - the cumulative sum."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "997ee763",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:23.170337Z",
     "iopub.status.busy": "2022-07-13T00:15:23.170024Z",
     "iopub.status.idle": "2022-07-13T00:15:24.239732Z",
     "shell.execute_reply": "2022-07-13T00:15:24.239081Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300.0179999999999\" version=\"1.1\" width=\"840\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 420.0029999999998, 150.00899999999996)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, 2.220446049250313e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"6.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"16.80012\" x=\"-8.40006\" y=\"-3.0001799999999994\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -2.4001799999999998)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">cumsum</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.8200000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 1.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def cumsum_spec(a, out):\n",
    "    total = 0\n",
    "    for i in range(len(out)):\n",
    "        out[i] = total + a[i]\n",
    "        total += a[i]\n",
    "\n",
    "def cumsum(a: TT[\"i\"]) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_cumsum = make_test(\"cumsum\", cumsum, cumsum_spec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "9145d1cc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:24.243017Z",
     "iopub.status.busy": "2022-07-13T00:15:24.242709Z",
     "iopub.status.idle": "2022-07-13T00:15:24.246110Z",
     "shell.execute_reply": "2022-07-13T00:15:24.245551Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_cumsum)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15c09fb6",
   "metadata": {},
   "source": [
    "## Puzzle 8 - diff\n",
    "\n",
    "Compute [diff](https://numpy.org/doc/stable/reference/generated/numpy.diff.html) - the running difference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "47d86d1f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:24.249200Z",
     "iopub.status.busy": "2022-07-13T00:15:24.248891Z",
     "iopub.status.idle": "2022-07-13T00:15:25.183613Z",
     "shell.execute_reply": "2022-07-13T00:15:25.182987Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300.0179999999999\" version=\"1.1\" width=\"780\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 390.0029999999999, 150.00899999999996)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, 2.220446049250313e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"6.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"15.600119999999999\" x=\"-7.800059999999999\" y=\"-3.0001799999999994\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -2.4001799999999998)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">diff</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -6.5, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def diff_spec(a, out):\n",
    "    out[0] = a[0]\n",
    "    for i in range(1, len(out)):\n",
    "        out[i] = a[i] - a[i - 1]\n",
    "\n",
    "def diff(a: TT[\"i\"], i: int) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_diff = make_test(\"diff\", diff, diff_spec, add_sizes=[\"i\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "bb4eeff6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:25.186875Z",
     "iopub.status.busy": "2022-07-13T00:15:25.186557Z",
     "iopub.status.idle": "2022-07-13T00:15:25.190034Z",
     "shell.execute_reply": "2022-07-13T00:15:25.189482Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_diff)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74c616c6",
   "metadata": {},
   "source": [
    "## Puzzle 9 - vstack\n",
    "\n",
    "Compute [vstack](https://numpy.org/doc/stable/reference/generated/numpy.vstack.html) - the matrix of two vectors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "20a69840",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:25.193149Z",
     "iopub.status.busy": "2022-07-13T00:15:25.192804Z",
     "iopub.status.idle": "2022-07-13T00:15:26.641528Z",
     "shell.execute_reply": "2022-07-13T00:15:26.640905Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"480.0179999999999\" version=\"1.1\" width=\"840\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 420.0029999999998, 240.00899999999987)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"9.600359999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"16.80012\" x=\"-8.40006\" y=\"-4.800179999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -4.20018)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">vstack</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.5001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -2.50005)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">b</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.50015)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.5)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.5)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.5)\"><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def vstack_spec(a, b, out):\n",
    "    for i in range(len(out[0])):\n",
    "        out[0][i] = a[i]\n",
    "        out[1][i] = b[i]\n",
    "\n",
    "def vstack(a: TT[\"i\"], b: TT[\"i\"]) -> TT[2, \"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_vstack = make_test(\"vstack\", vstack, vstack_spec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "e6cb449b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:26.644713Z",
     "iopub.status.busy": "2022-07-13T00:15:26.644397Z",
     "iopub.status.idle": "2022-07-13T00:15:26.647729Z",
     "shell.execute_reply": "2022-07-13T00:15:26.647154Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_vstack)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3f8a5ae",
   "metadata": {},
   "source": [
    "## Puzzle 10 - roll\n",
    "\n",
    "Compute [roll](https://numpy.org/doc/stable/reference/generated/numpy.roll.html) - the vector shifted 1 circular position."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "7962491f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:26.650696Z",
     "iopub.status.busy": "2022-07-13T00:15:26.650381Z",
     "iopub.status.idle": "2022-07-13T00:15:27.752738Z",
     "shell.execute_reply": "2022-07-13T00:15:27.752117Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300.0179999999999\" version=\"1.1\" width=\"840\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 420.0029999999998, 150.00899999999996)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, 2.220446049250313e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"6.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"16.80012\" x=\"-8.40006\" y=\"-3.0001799999999994\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -2.4001799999999998)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">roll</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def roll_spec(a, out):\n",
    "    for i in range(len(out)):\n",
    "        if i + 1 < len(out):\n",
    "            out[i] = a[i + 1]\n",
    "        else:\n",
    "            out[i] = a[i + 1 - len(out)]\n",
    "            \n",
    "def roll(a: TT[\"i\"], i: int) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_roll = make_test(\"roll\", roll, roll_spec, add_sizes=[\"i\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "09103327",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:27.755891Z",
     "iopub.status.busy": "2022-07-13T00:15:27.755582Z",
     "iopub.status.idle": "2022-07-13T00:15:27.758982Z",
     "shell.execute_reply": "2022-07-13T00:15:27.758408Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_roll)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adc7dcdd",
   "metadata": {},
   "source": [
    "## Puzzle 11 - flip\n",
    "\n",
    "Compute [flip](https://numpy.org/doc/stable/reference/generated/numpy.flip.html) - the reversed vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "1f2d83bb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:27.762023Z",
     "iopub.status.busy": "2022-07-13T00:15:27.761718Z",
     "iopub.status.idle": "2022-07-13T00:15:28.745412Z",
     "shell.execute_reply": "2022-07-13T00:15:28.744797Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300.0179999999999\" version=\"1.1\" width=\"900\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 450.0029999999999, 150.00899999999996)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, 2.220446049250313e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"6.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"18.00012\" x=\"-9.00006\" y=\"-3.0001799999999994\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -2.4001799999999998)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">flip</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.5, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def flip_spec(a, out):\n",
    "    for i in range(len(out)):\n",
    "        out[i] = a[len(out) - i - 1]\n",
    "        \n",
    "def flip(a: TT[\"i\"], i: int) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_flip = make_test(\"flip\", flip, flip_spec, add_sizes=[\"i\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "e5168678",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:28.748580Z",
     "iopub.status.busy": "2022-07-13T00:15:28.748257Z",
     "iopub.status.idle": "2022-07-13T00:15:28.751662Z",
     "shell.execute_reply": "2022-07-13T00:15:28.751071Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_flip)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa4469eb",
   "metadata": {},
   "source": [
    "## Puzzle 12 - compress\n",
    "\n",
    "\n",
    "Compute [compress](https://numpy.org/doc/stable/reference/generated/numpy.compress.html) - keep only masked entries (left-aligned)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "f49b8303",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:28.754592Z",
     "iopub.status.busy": "2022-07-13T00:15:28.754290Z",
     "iopub.status.idle": "2022-07-13T00:15:30.055478Z",
     "shell.execute_reply": "2022-07-13T00:15:30.054841Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"420.0239999999999\" version=\"1.1\" width=\"780\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 390.00299999999993, 210.01199999999992)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"8.400479999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"15.600119999999999\" x=\"-7.800059999999999\" y=\"-4.200239999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -3.6002399999999994)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">compress</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.000249999999999)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -6.5, -2.0000999999999998)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">g</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">v</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0001999999999995)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def compress_spec(g, v, out):\n",
    "    j = 0\n",
    "    for i in range(len(g)):\n",
    "        if g[i]:\n",
    "            out[j] = v[i]\n",
    "            j += 1\n",
    "            \n",
    "def compress(g: TT[\"i\", bool], v: TT[\"i\"], i:int) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_compress = make_test(\"compress\", compress, compress_spec, add_sizes=[\"i\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "9e98d290",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:30.058645Z",
     "iopub.status.busy": "2022-07-13T00:15:30.058336Z",
     "iopub.status.idle": "2022-07-13T00:15:30.061763Z",
     "shell.execute_reply": "2022-07-13T00:15:30.061166Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_compress)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e944d79",
   "metadata": {
    "lines_to_next_cell": 2
   },
   "source": [
    "## Puzzle 13 - pad_to\n",
    "\n",
    "\n",
    "Compute pad_to - eliminate or add 0s to change size of vector."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "52988720",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:30.064726Z",
     "iopub.status.busy": "2022-07-13T00:15:30.064418Z",
     "iopub.status.idle": "2022-07-13T00:15:31.162878Z",
     "shell.execute_reply": "2022-07-13T00:15:31.162268Z"
    },
    "id": "-DsZHgOTroVN"
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300.0179999999999\" version=\"1.1\" width=\"1020\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 510.00299999999993, 150.00899999999996)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, 2.220446049250313e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"6.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"20.40012\" x=\"-10.20006\" y=\"-3.0001799999999994\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.7763568394002505e-15, -2.4001799999999998)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">pad_to</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.5, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def pad_to_spec(a, out):\n",
    "    for i in range(min(len(out), len(a))):\n",
    "        out[i] = a[i]\n",
    "\n",
    "\n",
    "def pad_to(a: TT[\"i\"], i: int, j: int) -> TT[\"j\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "test_pad_to = make_test(\"pad_to\", pad_to, pad_to_spec, add_sizes=[\"i\", \"j\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "f8e5aee3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:31.166060Z",
     "iopub.status.busy": "2022-07-13T00:15:31.165749Z",
     "iopub.status.idle": "2022-07-13T00:15:31.169131Z",
     "shell.execute_reply": "2022-07-13T00:15:31.168580Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_pad_to)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aee589be",
   "metadata": {},
   "source": [
    "## Puzzle 14 - sequence_mask\n",
    "\n",
    "\n",
    "Compute [sequence_mask](https://www.tensorflow.org/api_docs/python/tf/sequence_mask) - pad out to length per batch."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "6aca6d50",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:31.172146Z",
     "iopub.status.busy": "2022-07-13T00:15:31.171799Z",
     "iopub.status.idle": "2022-07-13T00:15:33.292198Z",
     "shell.execute_reply": "2022-07-13T00:15:33.291558Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"900.012\" version=\"1.1\" width=\"1020\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 510.003, 450.006)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -8.881784197001252e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"18.000239999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"20.40012\" x=\"-10.20006\" y=\"-9.000119999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.7763568394002505e-15, -8.40012)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">sequence_mask</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 8.00015)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.5, -4.00005)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">values</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -1.0)\"><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.00005)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">length</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 5.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 8.0001)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -1.0)\"><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def sequence_mask_spec(values, length, out):\n",
    "    for i in range(len(out)):\n",
    "        for j in range(len(out[0])):\n",
    "            if j < length[i]:\n",
    "                out[i][j] = values[i][j]\n",
    "            else:\n",
    "                out[i][j] = 0\n",
    "    \n",
    "def sequence_mask(values: TT[\"i\", \"j\"], length: TT[\"i\", int]) -> TT[\"i\", \"j\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "def constraint_set_length(d):\n",
    "    d[\"length\"] = d[\"length\"] % d[\"values\"].shape[1]\n",
    "    return d\n",
    "\n",
    "\n",
    "test_sequence = make_test(\"sequence_mask\",\n",
    "    sequence_mask, sequence_mask_spec, constraint=constraint_set_length\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "f5646e37",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:33.295923Z",
     "iopub.status.busy": "2022-07-13T00:15:33.295590Z",
     "iopub.status.idle": "2022-07-13T00:15:33.299068Z",
     "shell.execute_reply": "2022-07-13T00:15:33.298467Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_sequence)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "342fedba",
   "metadata": {
    "lines_to_next_cell": 2
   },
   "source": [
    "## Puzzle 15 - bincount\n",
    "\n",
    "Compute [bincount](https://numpy.org/doc/stable/reference/generated/numpy.bincount.html) - count number of times an entry was seen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "b8a0a10c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:33.302153Z",
     "iopub.status.busy": "2022-07-13T00:15:33.301837Z",
     "iopub.status.idle": "2022-07-13T00:15:34.370952Z",
     "shell.execute_reply": "2022-07-13T00:15:34.370349Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300.0179999999999\" version=\"1.1\" width=\"960\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 480.0029999999998, 150.00899999999996)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, 2.220446049250313e-16)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"6.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"19.20012\" x=\"-9.60006\" y=\"-3.0001799999999994\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.881784197001252e-16, -2.4001799999999998)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">bincount</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.0, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def bincount_spec(a, out):\n",
    "    for i in range(len(a)):\n",
    "        out[a[i]] += 1\n",
    "        \n",
    "def bincount(a: TT[\"i\"], j: int) -> TT[\"j\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "def constraint_set_max(d):\n",
    "    d[\"a\"] = d[\"a\"] % d[\"return\"].shape[0]\n",
    "    return d\n",
    "\n",
    "\n",
    "test_bincount = make_test(\"bincount\",\n",
    "    bincount, bincount_spec, add_sizes=[\"j\"], constraint=constraint_set_max\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "0d766aec",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:34.374345Z",
     "iopub.status.busy": "2022-07-13T00:15:34.373778Z",
     "iopub.status.idle": "2022-07-13T00:15:34.377216Z",
     "shell.execute_reply": "2022-07-13T00:15:34.376611Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_bincount)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ff7e77c",
   "metadata": {
    "lines_to_next_cell": 2
   },
   "source": [
    "## Puzzle 16 - scatter_add\n",
    "\n",
    "Compute [scatter_add](https://pytorch-scatter.readthedocs.io/en/1.3.0/functions/add.html) - add together values that link to the same location."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "405a800e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:34.380250Z",
     "iopub.status.busy": "2022-07-13T00:15:34.379949Z",
     "iopub.status.idle": "2022-07-13T00:15:35.637090Z",
     "shell.execute_reply": "2022-07-13T00:15:35.636472Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"420.0239999999999\" version=\"1.1\" width=\"1080\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 540.003, 210.01199999999992)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"8.400479999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"21.600120000000004\" x=\"-10.800060000000002\" y=\"-4.200239999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.881784197001252e-16, -3.6002399999999994)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">scatter_add</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.000249999999999)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -9.0, -2.0000999999999998)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">values</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">link</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0001999999999995)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.8200000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def scatter_add_spec(values, link, out):\n",
    "    for j in range(len(values)):\n",
    "        out[link[j]] += values[j]\n",
    "        \n",
    "def scatter_add(values: TT[\"i\"], link: TT[\"i\"], j: int) -> TT[\"j\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "\n",
    "def constraint_set_max(d):\n",
    "    d[\"link\"] = d[\"link\"] % d[\"return\"].shape[0]\n",
    "    return d\n",
    "\n",
    "\n",
    "test_scatter_add = make_test(\"scatter_add\",\n",
    "    scatter_add, scatter_add_spec, add_sizes=[\"j\"], constraint=constraint_set_max\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "a9ea0110",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:35.640245Z",
     "iopub.status.busy": "2022-07-13T00:15:35.639897Z",
     "iopub.status.idle": "2022-07-13T00:15:35.643383Z",
     "shell.execute_reply": "2022-07-13T00:15:35.642753Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_scatter_add)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9020b21b",
   "metadata": {},
   "source": [
    "## Puzzle 17 - flatten\n",
    "\n",
    "Compute [flatten](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.flatten.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "56c917be",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:35.646407Z",
     "iopub.status.busy": "2022-07-13T00:15:35.646100Z",
     "iopub.status.idle": "2022-07-13T00:15:37.321766Z",
     "shell.execute_reply": "2022-07-13T00:15:37.321136Z"
    },
    "lines_to_next_cell": 1
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"540.012\" version=\"1.1\" width=\"2700\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1350.0029999999997, 270.0059999999999)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"10.800239999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"54.00012\" x=\"-27.00006\" y=\"-5.400119999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -4.80012)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">flatten</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 5.00015)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -22.5, -1.0000499999999999)\"><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -1.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 16.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 23.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -1.0)\"><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 29.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 37.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -2.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.00005)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -0.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 16.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 23.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5.5, -0.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 29.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 37.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -0.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 11.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def flatten_spec(a, out):\n",
    "    k = 0\n",
    "    for i in range(len(a)):\n",
    "        for j in range(len(a[0])):\n",
    "            out[k] = a[i][j]\n",
    "            k += 1\n",
    "\n",
    "def flatten(a: TT[\"i\", \"j\"], i:int, j:int) -> TT[\"i * j\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_flatten = make_test(\"flatten\", flatten, flatten_spec, add_sizes=[\"i\", \"j\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "a129e213",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:37.325238Z",
     "iopub.status.busy": "2022-07-13T00:15:37.324893Z",
     "iopub.status.idle": "2022-07-13T00:15:37.328344Z",
     "shell.execute_reply": "2022-07-13T00:15:37.327760Z"
    }
   },
   "outputs": [],
   "source": [
    "# run_test(test_flatten)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc61b4eb",
   "metadata": {},
   "source": [
    "## Puzzle 18 - linspace\n",
    "\n",
    "Compute [linspace](https://numpy.org/doc/stable/reference/generated/numpy.linspace.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "115ef19c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:37.331326Z",
     "iopub.status.busy": "2022-07-13T00:15:37.330999Z",
     "iopub.status.idle": "2022-07-13T00:15:38.652685Z",
     "shell.execute_reply": "2022-07-13T00:15:38.652037Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"420.0239999999999\" version=\"1.1\" width=\"840\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 420.0029999999999, 210.01199999999992)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"8.400479999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"16.80012\" x=\"-8.40006\" y=\"-4.200239999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -3.6002399999999994)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">linspace</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.000249999999999)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.0, -2.0000999999999998)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">i</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">j</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0001999999999995)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 7.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.55;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.48000000238418583;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5600000047683716;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def linspace_spec(i, j, out):\n",
    "    for k in range(len(out)):\n",
    "        out[k] = float(i + (j - i) * k / max(1, len(out) - 1))\n",
    "\n",
    "def linspace(i: TT[1], j: TT[1], n: int) -> TT[\"n\", float]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_linspace = make_test(\"linspace\", linspace, linspace_spec, add_sizes=[\"n\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "812a6235",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:38.655950Z",
     "iopub.status.busy": "2022-07-13T00:15:38.655631Z",
     "iopub.status.idle": "2022-07-13T00:15:38.659029Z",
     "shell.execute_reply": "2022-07-13T00:15:38.658438Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_linspace)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d107267",
   "metadata": {},
   "source": [
    "## Puzzle 19 - heaviside\n",
    "\n",
    "Compute [heaviside](https://numpy.org/doc/stable/reference/generated/numpy.heaviside.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "3becb5f1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:38.662023Z",
     "iopub.status.busy": "2022-07-13T00:15:38.661722Z",
     "iopub.status.idle": "2022-07-13T00:15:39.902909Z",
     "shell.execute_reply": "2022-07-13T00:15:39.902243Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"420.0239999999999\" version=\"1.1\" width=\"900\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 450.00299999999993, 210.01199999999992)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"8.400479999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"18.00012\" x=\"-9.00006\" y=\"-4.200239999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -3.6002399999999994)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">heaviside</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.000249999999999)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -7.5, -2.0000999999999998)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">b</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0001999999999995)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 5.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 8.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 10.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 13.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def heaviside_spec(a, b, out):\n",
    "    for k in range(len(out)):\n",
    "        if a[k] == 0:\n",
    "            out[k] = b[k]\n",
    "        else:\n",
    "            out[k] = int(a[k] > 0)\n",
    "\n",
    "def heaviside(a: TT[\"i\"], b: TT[\"i\"]) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_heaviside = make_test(\"heaviside\", heaviside, heaviside_spec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "357974e8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:39.906141Z",
     "iopub.status.busy": "2022-07-13T00:15:39.905812Z",
     "iopub.status.idle": "2022-07-13T00:15:39.909230Z",
     "shell.execute_reply": "2022-07-13T00:15:39.908641Z"
    },
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "# run_test(test_heaviside)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2d00053",
   "metadata": {},
   "source": [
    "## Puzzle 20 - repeat (1d)\n",
    "\n",
    "Compute [repeat](https://pytorch.org/docs/stable/generated/torch.Tensor.repeat.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "f763b7ce",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:39.912233Z",
     "iopub.status.busy": "2022-07-13T00:15:39.911925Z",
     "iopub.status.idle": "2022-07-13T00:15:41.190253Z",
     "shell.execute_reply": "2022-07-13T00:15:41.189625Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"600.0179999999999\" version=\"1.1\" width=\"960\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 480.0029999999998, 300.0089999999999)\"><g transform=\"matrix(47.61904761904761, 0.0, 0.0, 47.61904761904761, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"12.000359999999999\" style=\"vector-effect: non-scaling-stroke;\" width=\"19.20012\" x=\"-9.60006\" y=\"-6.000179999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.881784197001252e-16, -5.40018)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">repeat</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 5.5001999999999995)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.0, -3.50005)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">a</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">d</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 5.50015)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -1.5)\"><g><g><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -1.0)\"><g><g><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 14.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -1.5)\"><g><g><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.5)\"><g transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def repeat_spec(a, d, out):\n",
    "    for i in range(d[0]):\n",
    "        for k in range(len(a)):\n",
    "            out[i][k] = a[k]\n",
    "\n",
    "def constraint_set(d):\n",
    "    d[\"d\"][0] = d[\"return\"].shape[0]\n",
    "    return d\n",
    "\n",
    "            \n",
    "def repeat(a: TT[\"i\"], d: TT[1]) -> TT[\"d\", \"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_repeat = make_test(\"repeat\", repeat, repeat_spec, constraint=constraint_set)\n",
    "\n",
    "\n",
    "# ## Puzzle 21 - bucketize\n",
    "#\n",
    "# Compute [bucketize](https://pytorch.org/docs/stable/generated/torch.bucketize.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "7832fda9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:41.193726Z",
     "iopub.status.busy": "2022-07-13T00:15:41.193384Z",
     "iopub.status.idle": "2022-07-13T00:15:42.586710Z",
     "shell.execute_reply": "2022-07-13T00:15:42.586092Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"420.0239999999999\" version=\"1.1\" width=\"1020\"><defs><marker id=\"arrow\" markerHeight=\"3.5\" markerWidth=\"5\" orient=\"auto\" refX=\"5.0\" refY=\"1.7\"><polygon points=\"0,0 5,1.75 0,3.5\"/></marker></defs><g style=\"fill:white;\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 510.003, 210.01199999999992)\"><g transform=\"matrix(47.61904761904762, 0.0, 0.0, 47.61904761904762, 0.0, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -0.0, -0.0)\"><g><g style=\"fill: #ffffff;stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"8.400479999999998\" style=\"vector-effect: non-scaling-stroke;\" width=\"20.40012\" x=\"-10.20006\" y=\"-4.200239999999999\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.7763568394002505e-15, -3.6002399999999994)\"><g><g><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.75px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">bucketize</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.000249999999999)\"><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -8.5, -2.0000999999999998)\"><g><g><g><g><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">v</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #0000ff;stroke: black;stroke-width: 1.5;fill-opacity: 0.64;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 1.0000499999999999)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 2.0000999999999998)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">boundaries</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.7;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.8200000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.5800000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.5, -0.0)\"><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.76;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.8200000000000001;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 3.0001499999999997)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(0.0, -1.0, 1.0, 0.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 4.0001999999999995)\"><g><g><g><g><g><g><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -5e-05, -0.25005)\"><g><g><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.25)\"><g style=\"fill: #000000;stroke: black;stroke-width: 0.0;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><text style=\"text-align:center; text-anchor:middle; dominant-baseline:middle;\n",
       "                      font-family:sans-serif; font-weight: bold;\n",
       "                      font-size:0.5px;\n",
       "                      vector-effect: non-scaling-stroke;\" transform=\"translate(-5e-05, 0)\">target</text></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.5001)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g></g><g/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 6.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 9.50005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -2.0, -0.0)\"><g><g><g><g><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 3.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 4.0, 0.0)\"><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.46;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 12.50005, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 15.00005, 0.0)\"><g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, -1.0, -0.0)\"><g><g><g><g><g style=\"fill: #ffa500;stroke: black;stroke-width: 1.5;fill-opacity: 0.52;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 1.5, 0.0)\"><g transform=\"matrix(1.0, -0.0, 0.0, 1.0, 0.0, 0.0)\"><g/></g></g></g><g transform=\"matrix(1.0, 0.0, 0.0, 1.0, 2.0, 0.0)\"><g style=\"stroke: black;stroke-width: 1.5;\" transform=\"matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)\"><rect height=\"1\" style=\"vector-effect: non-scaling-stroke;\" width=\"1\" x=\"-0.5\" y=\"-0.5\"/></g></g></g></g><g/></g></g></g></g></g></g></g></g><g/></g></g></g></g><g/></g></g></g></g></svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def bucketize_spec(v, boundaries, out):\n",
    "    for i, val in enumerate(v):\n",
    "        out[i] = 0\n",
    "        for j in range(len(boundaries)-1):\n",
    "            if val >= boundaries[j]:\n",
    "                out[i] = j + 1\n",
    "        if val >= boundaries[-1]:\n",
    "            out[i] = len(boundaries)\n",
    "\n",
    "\n",
    "def constraint_set(d):\n",
    "    d[\"boundaries\"] = np.abs(d[\"boundaries\"]).cumsum()\n",
    "    return d\n",
    "\n",
    "            \n",
    "def bucketize(v: TT[\"i\"], boundaries: TT[\"j\"]) -> TT[\"i\"]:\n",
    "    raise NotImplementedError\n",
    "\n",
    "test_bucketize = make_test(\"bucketize\", bucketize, bucketize_spec,\n",
    "                           constraint=constraint_set)\n",
    "\n",
    "\n",
    "#\n",
    "# # Speed Run Mode!\n",
    "#\n",
    "# What is the smallest you can make each of these?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "dbf265d8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-13T00:15:42.589966Z",
     "iopub.status.busy": "2022-07-13T00:15:42.589646Z",
     "iopub.status.idle": "2022-07-13T00:15:42.599516Z",
     "shell.execute_reply": "2022-07-13T00:15:42.598869Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ones 29\n",
      "sum 29\n",
      "outer 29\n",
      "diag 29\n",
      "eye 29\n",
      "triu 29\n",
      "cumsum 29\n",
      "diff 29\n",
      "vstack 29\n",
      "roll 29\n",
      "flip 29\n",
      "compress 29\n",
      "pad_to 29\n",
      "sequence_mask 29\n",
      "bincount 29\n",
      "scatter_add 29\n"
     ]
    }
   ],
   "source": [
    "import inspect\n",
    "fns = (ones, sum, outer, diag, eye, triu, cumsum, diff, vstack, roll, flip,\n",
    "       compress, pad_to, sequence_mask, bincount, scatter_add)\n",
    "\n",
    "for fn in fns:\n",
    "    lines = [l for l in inspect.getsource(fn).split(\"\\n\") if not l.strip().startswith(\"#\")]\n",
    "    \n",
    "    if len(lines) > 3:\n",
    "        print(fn.__name__, len(lines[2]), \"(more than 1 line)\")\n",
    "    else:\n",
    "        print(fn.__name__, len(lines[1]))"
   ]
  }
 ],
 "metadata": {
  "jupytext": {
   "cell_metadata_filter": "id,-all"
  },
  "kernelspec": {
   "display_name": "tensor_puzzles",
   "language": "python",
   "name": "tensor_puzzles"
  },
  "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.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
