{ "cells": [ { "cell_type": "markdown", "id": "46306919", "metadata": { "cq.autogen": "title_cell" }, "source": [ "# List Functions" ] }, { "cell_type": "code", "execution_count": 1, "id": "47761dec", "metadata": { "cq.autogen": "top_imports" }, "outputs": [], "source": [ "from qualtran import Bloq, CompositeBloq, BloqBuilder, Signature, Register\n", "from qualtran import QBit, QInt, QUInt, QAny\n", "from qualtran.drawing import show_bloq, show_call_graph, show_counts_sigma\n", "from typing import *\n", "import numpy as np\n", "import sympy\n", "import cirq" ] }, { "cell_type": "markdown", "id": "19f11879", "metadata": { "cq.autogen": "SortInPlace.bloq_doc.md" }, "source": [ "## `SortInPlace`\n", "Sort a list of $\\ell$ numbers in place using $\\ell \\log \\ell$ ancilla bits.\n", "\n", "Applies the map:\n", "$$\n", " |x_1, x_2, \\ldots, x_l\\rangle\n", " |0^{\\ell \\log \\ell}\\rangle\n", " \\mapsto\n", " |x_{\\pi_1}, x_{\\pi_2}, \\ldots, x_{\\pi_\\ell})\\rangle\n", " |\\pi_1, \\pi_2, \\ldots, \\pi_\\ell\\rangle\n", "$$\n", "where $x_{\\pi_1} \\le x_{\\pi_2} \\ldots \\le x_{\\pi_\\ell}$ is the sorted list,\n", "and the ancilla are entangled.\n", "\n", "To apply this, we first use any sorting algorithm to output the sorted list\n", "in a clean register. And then use the following algorithm from Lemma 4.12 of Ref [1]\n", "that applies the map:\n", "\n", "$$\n", " |x_1, ..., x_l\\rangle|x_{\\pi(1)}, ..., x_{\\pi(l)})\\rangle\n", " \\mapsto\n", " |x_l, ..., x_l\\rangle|\\pi(1), ..., \\pi(l))\\rangle\n", "$$\n", "\n", "where $x_i \\in [n]$ and $\\pi(i) \\in [l]$.\n", "This second algorithm (Lemma 4.12) has two steps, each with $l^2$ comparisons:\n", "1. compute `pi(1) ... pi(l)` given `x_1 ... x_l` and `x_{pi(1)} ... x{pi(l)}`.\n", "1. (un)compute `x_{pi(1)} ... x{pi(l)}` using `pi(1) ... pi(l)` given `x_1 ... x_l`.\n", "\n", "#### Parameters\n", " - `l`: number of elements in the list\n", " - `dtype`: type of each element to store `[n]`. \n", "\n", "#### Registers\n", " - `input`: the entire input as a single register\n", " - `ancilla`: the generated (entangled) register storing `pi`. \n", "\n", "#### References\n", " - [Quartic quantum speedups for planted inference](https://arxiv.org/abs/2406.19378v1). Lemma 4.12. Eq. 122.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "ce69b6e8", "metadata": { "cq.autogen": "SortInPlace.bloq_doc.py" }, "outputs": [], "source": [ "from qualtran.bloqs.arithmetic.lists import SortInPlace" ] }, { "cell_type": "markdown", "id": "e84df89b", "metadata": { "cq.autogen": "SymmetricDifference.bloq_doc.md" }, "source": [ "## `SymmetricDifference`\n", "Given two sorted sets $S, T$ of unique elements, compute their symmetric difference.\n", "\n", "This accepts an integer `n_diff`, and marks a flag qubit if the symmetric difference\n", "set is of size exactly `n_diff`. If the flag is marked (1), then the output of `n_diff`\n", "numbers is the symmetric difference, otherwise it may be arbitrary.\n", "\n", "#### Parameters\n", " - `n_lhs`: number of elements in $S$\n", " - `n_rhs`: number of elements in $T$\n", " - `n_diff`: expected number of elements in the difference $S \\Delta T$.\n", " - `dtype`: type of each element. \n", "\n", "#### Registers\n", " - `S`: list of `n_lhs` numbers.\n", " - `T`: list of `n_rhs` numbers.\n", " - `diff`: output register of `n_diff` numbers.\n", " - `flag`: 1 if there are duplicates, 0 if all are unique. \n", "\n", "#### References\n", " - [Quartic quantum speedups for planted inference](https://arxiv.org/abs/2406.19378v1). Theorem 4.17, proof para 3, page 38.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "d3a9d9ea", "metadata": { "cq.autogen": "SymmetricDifference.bloq_doc.py" }, "outputs": [], "source": [ "from qualtran.bloqs.arithmetic.lists import SymmetricDifference" ] }, { "cell_type": "markdown", "id": "f58e0eba", "metadata": { "cq.autogen": "SymmetricDifference.example_instances.md" }, "source": [ "### Example Instances" ] }, { "cell_type": "code", "execution_count": 4, "id": "29fc34f0", "metadata": { "cq.autogen": "SymmetricDifference.symm_diff" }, "outputs": [], "source": [ "dtype = QUInt(4)\n", "symm_diff = SymmetricDifference(n_lhs=4, n_rhs=2, n_diff=4, dtype=dtype)" ] }, { "cell_type": "markdown", "id": "70608811", "metadata": { "cq.autogen": "SymmetricDifference.graphical_signature.md" }, "source": [ "#### Graphical Signature" ] }, { "cell_type": "code", "execution_count": 5, "id": "9df9334c", "metadata": { "cq.autogen": "SymmetricDifference.graphical_signature.py" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1f731c1502294b56b206b3c03e95ab95", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(Output(outputs=({'output_type': 'display_data', 'data': {'text/plain': '\n", "\n", "counts\n", "\n", "\n", "\n", "b0\n", "\n", "SymmetricDifference\n", "\n", "\n", "\n", "b1\n", "\n", "Xor\n", "\n", "\n", "\n", "b0->b1\n", "\n", "\n", "4\n", "\n", "\n", "\n", "b2\n", "\n", "CNOT\n", "\n", "\n", "\n", "b0->b2\n", "\n", "\n", "1\n", "\n", "\n", "\n", "b3\n", "\n", "BitonicMerge\n", "\n", "\n", "\n", "b0->b3\n", "\n", "\n", "1\n", "\n", "\n", "\n", "b4\n", "\n", "BitonicMerge†\n", "\n", "\n", "\n", "b0->b4\n", "\n", "\n", "1\n", "\n", "\n", "\n", "b5\n", "\n", "Equals\n", "\n", "\n", "\n", "b0->b5\n", "\n", "\n", "5\n", "\n", "\n", "\n", "b6\n", "\n", "Equals†\n", "\n", "\n", "\n", "b0->b6\n", "\n", "\n", "5\n", "\n", "\n", "\n", "b7\n", "\n", "HammingWeightCompute\n", "\n", "\n", "\n", "b0->b7\n", "\n", "\n", "1\n", "\n", "\n", "\n", "b8\n", "\n", "HammingWeightCompute†\n", "\n", "\n", "\n", "b0->b8\n", "\n", "\n", "1\n", "\n", "\n", "\n", "b9\n", "\n", "EqualsAConstant\n", "\n", "\n", "\n", "b0->b9\n", "\n", "\n", "1\n", "\n", "\n", "\n", "b10\n", "\n", "EqualsAConstant†\n", "\n", "\n", "\n", "b0->b10\n", "\n", "\n", "1\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "#### Counts totals:\n", " - `BitonicMerge`: 1\n", " - `BitonicMerge†`: 1\n", " - `CNOT`: 1\n", " - `EqualsAConstant`: 1\n", " - `EqualsAConstant†`: 1\n", " - `Equals`: 5\n", " - `Equals†`: 5\n", " - `HammingWeightCompute`: 1\n", " - `HammingWeightCompute†`: 1\n", " - `Xor`: 4" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from qualtran.resource_counting.generalizers import ignore_split_join\n", "symm_diff_g, symm_diff_sigma = symm_diff.call_graph(max_depth=1, generalizer=ignore_split_join)\n", "show_call_graph(symm_diff_g)\n", "show_counts_sigma(symm_diff_sigma)" ] }, { "cell_type": "markdown", "id": "15e88a40", "metadata": { "cq.autogen": "HasDuplicates.bloq_doc.md" }, "source": [ "## `HasDuplicates`\n", "Given a sorted list of `l` numbers, check if it contains any duplicates.\n", "\n", "Produces a single qubit which is `1` if there are duplicates, and `0` if all are disjoint.\n", "It compares every adjacent pair, and therefore uses `l - 1` comparisons.\n", "It then uses a single MCX on `l - 1` bits gate to compute the flag.\n", "\n", "#### Parameters\n", " - `l`: number of elements in the list\n", " - `dtype`: type of each element to store `[n]`. \n", "\n", "#### Registers\n", " - `xs`: a list of `l` registers of `dtype`.\n", " - `flag`: single qubit. Value is flipped if the input list has duplicates, otherwise stays same. \n", "\n", "#### References\n", " - [Quartic quantum speedups for planted inference](https://arxiv.org/abs/2406.19378v1). Lemma 4.12. Eq. 122.\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "101f6899", "metadata": { "cq.autogen": "HasDuplicates.bloq_doc.py" }, "outputs": [], "source": [ "from qualtran.bloqs.arithmetic.lists import HasDuplicates" ] }, { "cell_type": "markdown", "id": "6ceded7e", "metadata": { "cq.autogen": "HasDuplicates.example_instances.md" }, "source": [ "### Example Instances" ] }, { "cell_type": "code", "execution_count": 8, "id": "d5f5efa7", "metadata": { "cq.autogen": "HasDuplicates.has_duplicates_symb" }, "outputs": [], "source": [ "import sympy\n", "\n", "n = sympy.Symbol(\"n\")\n", "has_duplicates_symb = HasDuplicates(4, QUInt(n))" ] }, { "cell_type": "code", "execution_count": 9, "id": "a5412e0d", "metadata": { "cq.autogen": "HasDuplicates.has_duplicates" }, "outputs": [], "source": [ "has_duplicates = HasDuplicates(4, QUInt(3))" ] }, { "cell_type": "markdown", "id": "7c1c62b4", "metadata": { "cq.autogen": "HasDuplicates.graphical_signature.md" }, "source": [ "#### Graphical Signature" ] }, { "cell_type": "code", "execution_count": 10, "id": "1198bb5d", "metadata": { "cq.autogen": "HasDuplicates.graphical_signature.py" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "af5c9706baa249cf8511860d6cb88d7c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(Output(outputs=({'output_type': 'display_data', 'data': {'text/plain': '\n", "\n", "counts\n", "\n", "\n", "\n", "b0\n", "\n", "HasDuplicates\n", "\n", "\n", "\n", "b1\n", "\n", "LinearDepthHalfLessThan\n", "\n", "\n", "\n", "b0->b1\n", "\n", "\n", "3\n", "\n", "\n", "\n", "b2\n", "\n", "LinearDepthHalfLessThan\n", "\n", "\n", "\n", "b0->b2\n", "\n", "\n", "3\n", "\n", "\n", "\n", "b3\n", "\n", "C^3X\n", "\n", "\n", "\n", "b0->b3\n", "\n", "\n", "1\n", "\n", "\n", "\n", "b4\n", "\n", "X\n", "\n", "\n", "\n", "b0->b4\n", "\n", "\n", "1\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "#### Counts totals:\n", " - `C^3X`: 1\n", " - `LinearDepthHalfLessThan`: 3\n", " - `LinearDepthHalfLessThan`: 3\n", " - `X`: 1" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from qualtran.resource_counting.generalizers import ignore_split_join\n", "has_duplicates_symb_g, has_duplicates_symb_sigma = has_duplicates_symb.call_graph(max_depth=1, generalizer=ignore_split_join)\n", "show_call_graph(has_duplicates_symb_g)\n", "show_counts_sigma(has_duplicates_symb_sigma)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.8" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "1f731c1502294b56b206b3c03e95ab95": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_a81480b06508463c80a5869a4d8c5eb5" ], "layout": "IPY_MODEL_3d3e17ffdbd244098507e6aa8fe4db6c", "tabbable": null, "tooltip": null } }, "30c47e01daf24632824d5759a59766d5": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_643da0a3dddb44dd8f6546f3b8de02c2", "msg_id": "", "outputs": [ { "data": { "text/markdown": "`has_duplicates`", "text/plain": "" }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": "\n\nmy_graph\n\n\n\nxs_G4\nxs[0]\n\n\n\nHasDuplicates\n\nHasDuplicates\n\nxs[0]\n\nxs[1]\n\nxs[2]\n\nxs[3]\n\nflag\n\n\n\nxs_G4:e->HasDuplicates:w\n\n\n3\n\n\n\nxs_G7\nxs[1]\n\n\n\nxs_G7:e->HasDuplicates:w\n\n\n3\n\n\n\nxs_G5\nxs[2]\n\n\n\nxs_G5:e->HasDuplicates:w\n\n\n3\n\n\n\nxs_G0\nxs[3]\n\n\n\nxs_G0:e->HasDuplicates:w\n\n\n3\n\n\n\nflag_G14\nflag\n\n\n\nflag_G14:e->HasDuplicates:w\n\n\n1\n\n\n\nxs_G8\nxs[0]\n\n\n\nHasDuplicates:e->xs_G8:w\n\n\n3\n\n\n\nxs_G6\nxs[1]\n\n\n\nHasDuplicates:e->xs_G6:w\n\n\n3\n\n\n\nxs_G13\nxs[2]\n\n\n\nHasDuplicates:e->xs_G13:w\n\n\n3\n\n\n\nxs_G3\nxs[3]\n\n\n\nHasDuplicates:e->xs_G3:w\n\n\n3\n\n\n\nflag_G2\nflag\n\n\n\nHasDuplicates:e->flag_G2:w\n\n\n1\n\n\n", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "3d3e17ffdbd244098507e6aa8fe4db6c": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4c016335f1234473b7372cff682ac5f8": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "643da0a3dddb44dd8f6546f3b8de02c2": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7a30578392114849b76db59b189f258d": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_4c016335f1234473b7372cff682ac5f8", "msg_id": "", "outputs": [ { "data": { "text/markdown": "`has_duplicates_symb`", "text/plain": "" }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": "\n\nmy_graph\n\n\n\nxs_G11\nxs[0]\n\n\n\nHasDuplicates\n\nHasDuplicates\n\nxs[0]\n\nxs[1]\n\nxs[2]\n\nxs[3]\n\nflag\n\n\n\nxs_G11:e->HasDuplicates:w\n\n\nn\n\n\n\nxs_G9\nxs[1]\n\n\n\nxs_G9:e->HasDuplicates:w\n\n\nn\n\n\n\nxs_G12\nxs[2]\n\n\n\nxs_G12:e->HasDuplicates:w\n\n\nn\n\n\n\nxs_G5\nxs[3]\n\n\n\nxs_G5:e->HasDuplicates:w\n\n\nn\n\n\n\nflag_G14\nflag\n\n\n\nflag_G14:e->HasDuplicates:w\n\n\n1\n\n\n\nxs_G4\nxs[0]\n\n\n\nHasDuplicates:e->xs_G4:w\n\n\nn\n\n\n\nxs_G1\nxs[1]\n\n\n\nHasDuplicates:e->xs_G1:w\n\n\nn\n\n\n\nxs_G8\nxs[2]\n\n\n\nHasDuplicates:e->xs_G8:w\n\n\nn\n\n\n\nxs_G0\nxs[3]\n\n\n\nHasDuplicates:e->xs_G0:w\n\n\nn\n\n\n\nflag_G2\nflag\n\n\n\nHasDuplicates:e->flag_G2:w\n\n\n1\n\n\n", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "a47e39539e9d4c919fe3c55f8ddf2f8c": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a81480b06508463c80a5869a4d8c5eb5": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_f45030d93716488d817ef1158ce528a4", "msg_id": "", "outputs": [ { "data": { "text/markdown": "`symm_diff`", "text/plain": "" }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": "\n\nmy_graph\n\n\n\nS_G28\nS[0]\n\n\n\nSymmetricDifference\n\nSymmetricDifference\n\nS[0]\n\nS[1]\n\nS[2]\n\nS[3]\n\nT[0]\n\nT[1]\n\ndiff[0]\n\ndiff[1]\n\ndiff[2]\n\ndiff[3]\n\nflag\n\n\n\nS_G28:e->SymmetricDifference:w\n\n\n4\n\n\n\nS_G11\nS[1]\n\n\n\nS_G11:e->SymmetricDifference:w\n\n\n4\n\n\n\nS_G15\nS[2]\n\n\n\nS_G15:e->SymmetricDifference:w\n\n\n4\n\n\n\nS_G19\nS[3]\n\n\n\nS_G19:e->SymmetricDifference:w\n\n\n4\n\n\n\nT_G6\nT[0]\n\n\n\nT_G6:e->SymmetricDifference:w\n\n\n4\n\n\n\nT_G25\nT[1]\n\n\n\nT_G25:e->SymmetricDifference:w\n\n\n4\n\n\n\ndiff_G32\ndiff[0]\n\n\n\ndiff_G32:e->SymmetricDifference:w\n\n\n4\n\n\n\ndiff_G16\ndiff[1]\n\n\n\ndiff_G16:e->SymmetricDifference:w\n\n\n4\n\n\n\ndiff_G20\ndiff[2]\n\n\n\ndiff_G20:e->SymmetricDifference:w\n\n\n4\n\n\n\ndiff_G24\ndiff[3]\n\n\n\ndiff_G24:e->SymmetricDifference:w\n\n\n4\n\n\n\nflag_G9\nflag\n\n\n\nflag_G9:e->SymmetricDifference:w\n\n\n1\n\n\n\nS_G17\nS[0]\n\n\n\nSymmetricDifference:e->S_G17:w\n\n\n4\n\n\n\nS_G30\nS[1]\n\n\n\nSymmetricDifference:e->S_G30:w\n\n\n4\n\n\n\nS_G0\nS[2]\n\n\n\nSymmetricDifference:e->S_G0:w\n\n\n4\n\n\n\nS_G7\nS[3]\n\n\n\nSymmetricDifference:e->S_G7:w\n\n\n4\n\n\n\nT_G26\nT[0]\n\n\n\nSymmetricDifference:e->T_G26:w\n\n\n4\n\n\n\nT_G4\nT[1]\n\n\n\nSymmetricDifference:e->T_G4:w\n\n\n4\n\n\n\ndiff_G22\ndiff[0]\n\n\n\nSymmetricDifference:e->diff_G22:w\n\n\n4\n\n\n\ndiff_G1\ndiff[1]\n\n\n\nSymmetricDifference:e->diff_G1:w\n\n\n4\n\n\n\ndiff_G3\ndiff[2]\n\n\n\nSymmetricDifference:e->diff_G3:w\n\n\n4\n\n\n\ndiff_G10\ndiff[3]\n\n\n\nSymmetricDifference:e->diff_G10:w\n\n\n4\n\n\n\nflag_G21\nflag\n\n\n\nSymmetricDifference:e->flag_G21:w\n\n\n1\n\n\n", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "af5c9706baa249cf8511860d6cb88d7c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_7a30578392114849b76db59b189f258d", "IPY_MODEL_30c47e01daf24632824d5759a59766d5" ], "layout": "IPY_MODEL_a47e39539e9d4c919fe3c55f8ddf2f8c", "tabbable": null, "tooltip": null } }, "f45030d93716488d817ef1158ce528a4": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }