{ "cells": [ { "cell_type": "markdown", "id": "2f7c66e5", "metadata": {}, "source": [ "# QPE with Linear Combination of Unitaries" ] }, { "cell_type": "markdown", "id": "6d3b9039", "metadata": {}, "source": [ "In this notebook, we introduce advanced techniques for encoding the Hamiltonian into a unitary: Linear Combination of Unitaries and Qubitization. These techniques were first introduced in the context of Hamiltonian simulation and later applied to phase estimation.\n", "\n", "We mainly take inspiration from [Lin Lin's lecture notes on Quantum Algorithms for Scientific Computation](https://math.berkeley.edu/~linlin/qasc/) and from the paper [Encoding Electronic Spectra in Quantum Circuits with Linear T Complexity, Babbush *et al.*, PRX **8**, 041015 (2018)](https://journals.aps.org/prx/abstract/10.1103/PhysRevX.8.041015). The interested reader can read these works and references therein for the original papers where the techniques were developed." ] }, { "cell_type": "code", "execution_count": 1, "id": "449e3041", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:26.406765Z", "iopub.status.busy": "2026-04-03T03:52:26.406607Z", "iopub.status.idle": "2026-04-03T03:52:28.394509Z", "shell.execute_reply": "2026-04-03T03:52:28.393721Z" } }, "outputs": [], "source": [ "import time\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import quimb.tensor as qtn\n", "from IPython.display import display\n", "from pyscf import gto\n", "from tqdm import notebook as tqdm\n", "\n", "import qpe_toolbox.estimation as qpe\n", "from qpe_toolbox.hamiltonian import (\n", " chemistry_hamiltonian,\n", " do_dmrg,\n", " heisenberg_hamiltonian,\n", ")\n", "from qpe_toolbox.tensor import apply_gate_from_mpo, kron_mps\n", "\n", "cutoff = 1e-10\n", "plt.rcParams.update({\"font.size\": 12})" ] }, { "cell_type": "markdown", "id": "a0bf4603", "metadata": {}, "source": [ "- Initialization: the Linear Combination of Unitaries approach begins by rewriting the Hamiltonian into a sum of unitaries:\n", "\n", "$$ H = \\sum_{\\ell=0}^{L-1} w_\\ell H_\\ell \\qquad \\mathrm{s.t.} \\qquad w_\\ell \\geq 0, \\qquad H_\\ell^2 = \\mathbb{1}, $$\n", "\n", "where $H_\\ell^2 = \\mathbb{1}$ expresses the condition that $H_\\ell$ is hermitian and unitary.\n", "\n", "Spin-$1/2$ Hamiltonians are natively written in this form since Pauli matrices are hermitian and unitary. For fermionic Hamiltonians, this decomposition can be done e.g. via the Jordan-Wigner transformation.\n", "\n", "The weights $w_\\ell$ are defined to be positive (if needed the phase of $w_\\ell$ can always be absorbed by a re-definition of the unitary $H_\\ell$.)\n", "\n", "We define the sum of weights, often referred to as the \"1-norm\" of the LCU:\n", "\n", "$$ \\lambda \\equiv \\sum_{\\ell=0}^{L-1} w_\\ell $$\n", "\n", "Note that the cost of Quantum Phase Estimation scales with the 1-norm $\\lambda$. There is a lot of research activity devoted to compressing the Hamiltonian and reducing $\\lambda$, see e.g. [this work](https://pubs.acs.org/doi/10.1021/acs.jctc.3c00912) and [this more recent work](https://journals.aps.org/prx/abstract/10.1103/pb2g-j9cw) and references therein. These advanced LCU techniques are beyond the scope of this simple introduction, where we consider a naive LCU based on the Pauli decomposition of $H$.\n", "\n", "We then introduce an empty ancilla register of size $m_L$\n", "\n", "$$ m_L \\equiv \\lceil{ \\mathrm{log}_2 (L) \\rceil}$$\n", "\n", "In the case where $L < 2^{m_L}$ we complete the weights up to $2^{m_L}$ by setting\n", "\n", "$$ w_\\ell = 0,~H_\\ell = \\mathbb{1} \\qquad \\mathrm{for}~ L \\leq \\ell < 2^{m_L}.$$\n", "\n", "We consider the 1D Heisenberg model with 4 spins" ] }, { "cell_type": "code", "execution_count": 2, "id": "ca226309", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:28.396414Z", "iopub.status.busy": "2026-04-03T03:52:28.396068Z", "iopub.status.idle": "2026-04-03T03:52:28.448075Z", "shell.execute_reply": "2026-04-03T03:52:28.447177Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LCU decomposition with 9 terms\n", "Auxiliary register with 4 qubits\n", "1-norm of LCU coefficients: lambda = 2.250\n", "DMRG energy: E0 = -1.616\n" ] } ], "source": [ "n_qubits = 4\n", "H = heisenberg_hamiltonian(n_qubits)\n", "\n", "weights, λ, L, m_L = qpe.get_lcu_weights(H)\n", "print(f\"LCU decomposition with {L} terms\")\n", "print(f\"Auxiliary register with {m_L} qubits\")\n", "print(f\"1-norm of LCU coefficients: lambda = {λ:.3f}\")\n", "\n", "# DMRG E0 and psi0\n", "E0_dmrg, psi0_mps = do_dmrg(H)\n", "print(f\"DMRG energy: E0 = {E0_dmrg:.3f}\")" ] }, { "cell_type": "markdown", "id": "4b7051a4", "metadata": {}, "source": [ "The LCU scheme involves two oracles: PREPARE and SELECT, that we introduce in the following." ] }, { "cell_type": "markdown", "id": "82eba7aa", "metadata": {}, "source": [ "## l-register and PREPARE oracle\n", "The PREPARE oracle acts on the $m_L$ qubits of the auxiliary $\\ell$-register to prepare a superposition state related to the LCU decomposition:\n", "\n", "$$ \\mathrm{PREPARE} \\equiv \\sum_{\\ell=0}^{L-1} \\sqrt{\\frac{w_\\ell}{\\lambda}} \\ket{\\ell}\\bra{0} $$\n", "\n", "The quantum circuit implementation of the PREPARE oracle relies on complicated subroutines like unary iteration and QROM (see [this paper](https://journals.aps.org/prx/abstract/10.1103/PhysRevX.8.041015) cited in introduction), that are beyond the scope of this introduction. Here, we consider a simple implementation of PREPARE as a MPO. It will be sufficient to introduce the general ideas of LCU-based qubitization." ] }, { "cell_type": "code", "execution_count": 3, "id": "7c0c6aa2", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:28.449555Z", "iopub.status.busy": "2026-04-03T03:52:28.449401Z", "iopub.status.idle": "2026-04-03T03:52:28.465902Z", "shell.execute_reply": "2026-04-03T03:52:28.465152Z" } }, "outputs": [], "source": [ "prepare_mpo = qpe.build_lcu_prepare_mpo(H)" ] }, { "cell_type": "markdown", "id": "0ea3a22a", "metadata": {}, "source": [ "The state prepared by the action of the PREPARE oracle is called the $\\ket{\\mathcal{L}}$ state:\n", "\n", "$$ \\mathrm{PREPARE} \\ket{0}^{\\otimes m_L} \\mapsto \\sum_{\\ell=0}^{L-1} \\sqrt{\\frac{w_\\ell}{\\lambda}} \\ket{\\ell} \\equiv \\ket{\\mathcal{L}} $$" ] }, { "cell_type": "code", "execution_count": 4, "id": "60189416", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:28.467275Z", "iopub.status.busy": "2026-04-03T03:52:28.467094Z", "iopub.status.idle": "2026-04-03T03:52:28.471043Z", "shell.execute_reply": "2026-04-03T03:52:28.470328Z" } }, "outputs": [], "source": [ "zero_mps = qtn.MPS_computational_state(\"0\" * m_L)\n", "L_mps = prepare_mpo.apply(zero_mps)" ] }, { "cell_type": "markdown", "id": "2128cf39", "metadata": {}, "source": [ "Alernatively, the $\\ket{\\mathcal{L}}$ state can be directly build calling the `build_lcu_prepare_state_mps` function" ] }, { "cell_type": "code", "execution_count": 5, "id": "a1ec1a42", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:28.472430Z", "iopub.status.busy": "2026-04-03T03:52:28.472269Z", "iopub.status.idle": "2026-04-03T03:52:36.491570Z", "shell.execute_reply": "2026-04-03T03:52:36.490889Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "overlap (should be 1) = 1.000\n" ] } ], "source": [ "print(\n", " f\"overlap (should be 1) = {L_mps.overlap(qpe.build_lcu_prepare_state_mps(H)):.3f}\"\n", ")" ] }, { "cell_type": "markdown", "id": "49378d82", "metadata": {}, "source": [ "## SELECT oracle gate\n", "\n", "Let us then introduce the second LCU oracle, the SELECT oracle. It is a unitary operation acting on both the auxiliary $\\ell$-register and the physical register following\n", "\n", " $$ \\mathrm{SELECT}~:~ \\ket{\\ell}\\ket{\\psi} \\mapsto \\ket{\\ell} H_\\ell \\ket{\\psi},$$\n", "\n", "$$ \\mathrm{SELECT} \\equiv \\sum_{\\ell=0}^{L-1} |\\ell\\rangle \\langle \\ell| \\otimes H_\\ell, $$\n", "\n", "Note that for any $\\ket{\\psi}$ we have:\n", "\n", "$$ \\bra{\\psi}\\bra{\\mathcal{L}} \\mathrm{SELECT} \\ket{\\mathcal{L}}\\ket{\\psi} = \\bra{\\psi}\\frac{H}{\\lambda}\\ket{\\psi} $$\n", "i.e. the combination of SELECT and PREPARE gives an encoding of the Hamiltonian. This property allows to construct a unitary operator: $\\mathcal{W}$, the walk operator, that gives an exact encoding of the spectrum of $H$ via a technique called qubitization." ] }, { "cell_type": "code", "execution_count": 6, "id": "c5f2dc1c", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.493212Z", "iopub.status.busy": "2026-04-03T03:52:36.493008Z", "iopub.status.idle": "2026-04-03T03:52:36.495830Z", "shell.execute_reply": "2026-04-03T03:52:36.495190Z" }, "lines_to_next_cell": 2 }, "outputs": [], "source": [ "select_gates = qpe.lcu_select_gates(H)" ] }, { "cell_type": "markdown", "id": "60c92532", "metadata": {}, "source": [ "In our simple example of a spin Hamiltonian, the unitaries $H_\\ell$ are Pauli strings ($XX, YY, ZZ$). Note that for LCU of chemistry Hamiltonians, more advanced schemes like Single Factorization, Double Factorization, Tensor Hyper Contraction... are introduced where the unitaries $H_\\ell$ do not coincide anymore with Pauli strings (see e.g. [this work](https://journals.aps.org/prxquantum/abstract/10.1103/PRXQuantum.2.030305) on Tensor Hyper Contraction for a discussion)." ] }, { "cell_type": "code", "execution_count": 7, "id": "ba1c2fbc", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.497226Z", "iopub.status.busy": "2026-04-03T03:52:36.497048Z", "iopub.status.idle": "2026-04-03T03:52:36.500130Z", "shell.execute_reply": "2026-04-03T03:52:36.499418Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] } ], "source": [ "print(*select_gates[:10], sep=\"\\n\")" ] }, { "cell_type": "markdown", "id": "f67c306f", "metadata": {}, "source": [ "The first gates correspond to $\\ket{0}\\bra{0} \\otimes X_0 X_1$ in \"Hamiltonian\" notation, where $X_i$ represents the $X$ Pauli matrix acting on the $i-$th spin of the Heisenberg model, or $i$-th physical qubit.\n", "Since the physical register indexing is shifted by $m_L=4$ to avoid confusion with the auxiliary $\\ell$-register, the first and second qubits of the physical register (index $0$ and $1$ in the physical register \"local\" indexing) correspond to qubit $4$ and $5$ in the total register.\n", "\n", "We start by projecting $\\ket{0}^{\\otimes m_L}$ onto $\\ket{1}^{\\otimes m_L}$ (apply $X$ on qubits $0$ to $3$), then apply a controlled-$X$ on qubit $4$ and $5$, then apply the reversed projection $\\ket{0}^{\\otimes m_L} \\bra{1}^{\\otimes m_L}$.\n", "\n", "Note that qubits in the $\\ell$-register are indexed from $0$ to $m_L-1$. Qubits in the physical register are indexed from $m_L$ to $m_L + n - 1$." ] }, { "cell_type": "markdown", "id": "ddab33d9", "metadata": {}, "source": [ "Applying the SELECT oracle on $\\ket{\\mathcal{L}}\\ket{\\psi_0}$, and projecting onto the same state, we get a measure of the ground state energy:\n", "\n", "$$ \\bra{\\psi_0} \\bra{\\mathcal{L}} \\mathrm{SELECT} \\ket{\\mathcal{L}} \\ket{\\psi_0} = \\frac{E_0}{\\lambda}. $$" ] }, { "cell_type": "code", "execution_count": 8, "id": "d3dc9748", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.501465Z", "iopub.status.busy": "2026-04-03T03:52:36.501327Z", "iopub.status.idle": "2026-04-03T03:52:36.582466Z", "shell.execute_reply": "2026-04-03T03:52:36.581637Z" } }, "outputs": [], "source": [ "Lpsi_mps = kron_mps(L_mps, psi0_mps)\n", "\n", "circ = qtn.CircuitMPS(psi0=Lpsi_mps)\n", "for gate in select_gates:\n", " circ.apply_gate(gate)\n", "\n", "assert np.isclose(Lpsi_mps.H @ circ.psi, E0_dmrg / λ)" ] }, { "cell_type": "markdown", "id": "ddc5ab98", "metadata": {}, "source": [ "*Proof:*\n", "\n", "$$ \\mathrm{SELECT} \\ket{\\mathcal{L}} \\ket{\\psi_0} = \\sum_\\ell \\sqrt{\\frac{w_\\ell}{\\lambda}} \\ket{\\ell}H_\\ell \\ket{\\psi_0} $$\n", "$$ \\bra{\\psi_0} \\bra{\\mathcal{L}} \\mathrm{SELECT} \\ket{\\mathcal{L}} \\ket{\\psi_0} = \\sum_\\ell \\frac{w_\\ell}{\\lambda} \\bra{\\psi_0} H_\\ell \\ket{\\psi_0} = \\frac{1}{\\lambda} \\bra{\\psi_0} H \\ket{\\psi_0} = \\frac{E_0}{\\lambda}$$" ] }, { "cell_type": "markdown", "id": "436b6636", "metadata": {}, "source": [ "## Walk operator\n", "We are now ready to build the Walk operator, defined by\n", "\n", "$$ \\mathcal{W} = \\mathcal{R}_L \\cdot \\mathrm{SELECT}, \\qquad \\mathcal{R}_L \\equiv \\left(2 \\ket{\\mathcal{L}} \\bra{\\mathcal{L}} \\otimes \\mathbb{1} - \\mathbb{1} \\right) $$\n", "\n", "First we define $\\mathcal{R}_L$ as a MPO. Since we simulate quantum circuits as tensor networks we can always replace any part of the circuit by a MPO. In a real QPU one would need to build a Householder reflection circuit that involves a $\\mathrm{PREPARE}$ and $\\mathrm{PREPARE}^\\dagger$; circuits with non trivial subroutines that are beyond the scope of this introduction.\n", "\n", "### Reflection as a MPO\n", "\n", "The PREPARE oracle is key to build a reflection operator:\n", "\n", "$$\\mathcal{R}_{L} = 2 \\ket{\\mathcal{L}}\\bra{\\mathcal{L}}\\otimes\\mathbb{1} - \\mathbb{1} $$\n", "\n", "that will enter in the definition of the Walk operator.\n", "\n", "Here, we build this reflection as a MPO." ] }, { "cell_type": "code", "execution_count": 9, "id": "74101f88", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.583972Z", "iopub.status.busy": "2026-04-03T03:52:36.583827Z", "iopub.status.idle": "2026-04-03T03:52:36.608272Z", "shell.execute_reply": "2026-04-03T03:52:36.607565Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "data": { "text/html": [ "
MatrixProductOperator(tensors=8, indices=23, L=8, max_bond=5)
Tensor(shape=(4, 2, 2), inds=[_04cbeaAAAMM, k0, b0], tags={I0}),backend=numpy, dtype=float64, data=array([[[ 1.04515342e+01, -1.93349009e-17],\n", " [ 4.75020052e-16, 1.04515342e+01]],\n", "\n", " [[ 3.49796120e+00, 9.99417487e-01],\n", " [ 9.99417487e-01, -3.49796120e+00]],\n", "\n", " [[-2.19781582e-01, -6.88641291e-01],\n", " [ 2.22711236e+00, 2.19781582e-01]],\n", "\n", " [[-4.00509566e-01, 2.20180052e+00],\n", " [ 6.01766449e-01, 4.00509566e-01]]])
Tensor(shape=(4, 5, 2, 2), inds=[_04cbeaAAAMM, _04cbeaAAAMN, k1, b1], tags={I1}),backend=numpy, dtype=float64, data=array([[[[ 0.67451694, -0.06166299],\n", " [-0.06166299, 0.69468154]],\n", "\n", " [[ 0.04665332, 0.15785471],\n", " [ 0.15785471, 0.04140364]],\n", "\n", " [[ 0.00669729, -0.00669729],\n", " [-0.00669729, -0.00669729]],\n", "\n", " [[-0.01206215, 0.01206215],\n", " [ 0.01206215, 0.01206215]],\n", "\n", " [[-0.01282738, -0.00472332],\n", " [-0.00472332, 0.01192642]]],\n", "\n", "\n", " [[[-0.13789783, -0.18196886],\n", " [-0.18196886, -0.17033734]],\n", "\n", " [[ 0.49156396, 0.47106109],\n", " [ 0.47106109, 0.43605654]],\n", "\n", " [[-0.01850055, 0.03593764],\n", " [-0.03593764, -0.01850055]],\n", "\n", " [[ 0.03332039, 0.01995372],\n", " [-0.01995372, 0.03332039]],\n", "\n", " [[ 0.05878383, -0.01132176],\n", " [-0.01132176, -0.01304765]]],\n", "\n", "\n", " [[[-0.05121922, -0.0728255 ],\n", " [ 0.08957485, 0.05121922]],\n", "\n", " [[ 0.13111908, 0.24218817],\n", " [-0.24654872, -0.13111908]],\n", "\n", " [[ 0.65474678, 0.58612095],\n", " [ 0.06306285, 0.00556298]],\n", "\n", " [[ 0.00306774, -0.15256852],\n", " [ 0.16565547, -0.0100192 ]],\n", "\n", " [[-0.00392334, 0.02232919],\n", " [-0.0017679 , 0.00392334]]],\n", "\n", "\n", " [[[-0.09333715, 0.05982023],\n", " [-0.02929776, 0.09333715]],\n", "\n", " [[ 0.23893924, -0.13807151],\n", " [ 0.13012525, -0.23893924]],\n", "\n", " [[ 0.00343435, 0.1670044 ],\n", " [-0.17370752, 0.01013746]],\n", "\n", " [[-0.65497768, -0.05677494],\n", " [-0.57994467, -0.01825807]],\n", "\n", " [[-0.00714952, 0.01212279],\n", " [ 0.02534619, 0.00714952]]]])
Tensor(shape=(5, 4, 2, 2), inds=[_04cbeaAAAMN, _04cbeaAAAMO, k2, b2], tags={I2}),backend=numpy, dtype=float64, data=array([[[[-6.89339542e-01, 6.20104652e-02],\n", " [ 6.20104652e-02, -7.08073302e-01]],\n", "\n", " [[ 6.20231399e-02, 6.13025990e-02],\n", " [ 6.13025990e-02, 6.33637224e-02]],\n", "\n", " [[-1.11266573e-02, 9.52356129e-03],\n", " [ 9.52356129e-03, 7.92046530e-03]],\n", "\n", " [[ 3.91342395e-17, 1.84636758e-03],\n", " [-1.84636758e-03, 4.06538362e-17]]],\n", "\n", "\n", " [[[ 1.29913331e-01, 4.01616694e-01],\n", " [ 4.01616694e-01, 8.52402242e-02]],\n", "\n", " [[ 4.35656780e-01, 4.02465411e-01],\n", " [ 4.02465411e-01, 3.66914958e-01]],\n", "\n", " [[ 9.43633455e-03, 1.82140176e-02],\n", " [ 1.82140176e-02, 4.58643698e-02]],\n", "\n", " [[ 6.64315954e-19, -3.18463237e-02],\n", " [ 3.18463237e-02, 6.41666445e-18]]],\n", "\n", "\n", " [[[ 1.48486040e-01, 2.33821377e-01],\n", " [-2.70942887e-01, -1.48486040e-01]],\n", "\n", " [[ 1.47339413e-01, 2.79435179e-01],\n", " [-2.84039535e-01, -1.47339413e-01]],\n", "\n", " [[-2.80865756e-01, -3.50353220e-01],\n", " [ 8.79048909e-02, -1.84174266e-02]],\n", "\n", " [[-5.04764264e-01, -3.82307417e-01],\n", " [-1.22456847e-01, 1.77775106e-17]]],\n", "\n", "\n", " [[[-2.67430640e-01, 1.73559458e-01],\n", " [-1.06701797e-01, 2.67430640e-01]],\n", "\n", " [[-2.65365508e-01, 1.60575923e-01],\n", " [-1.52283251e-01, 2.65365508e-01]],\n", "\n", " [[ 5.05852999e-01, 1.14673699e-01],\n", " [ 3.58008612e-01, 3.31706885e-02]],\n", "\n", " [[-2.80261255e-01, 9.38711827e-02],\n", " [-3.74132438e-01, -1.18111405e-18]]],\n", "\n", "\n", " [[[-2.84662848e-01, -7.96313779e-03],\n", " [-7.96313779e-03, 2.53901002e-01]],\n", "\n", " [[ 2.29543206e-01, 3.01290390e-02],\n", " [ 3.01290390e-02, -3.12147121e-01]],\n", "\n", " [[ 5.71447972e-01, -3.05233181e-01],\n", " [-3.05233181e-01, -3.90183901e-02]],\n", "\n", " [[ 2.08021574e-15, -3.06613180e-01],\n", " [ 3.06613180e-01, -1.75837019e-17]]]])
Tensor(shape=(4, 1, 2, 2), inds=[_04cbeaAAAMO, _04cbeaAAAMP, k3, b3], tags={I3}),backend=numpy, dtype=float64, data=array([[[[-7.07106781e-01, 1.11022302e-16],\n", " [-8.84708973e-17, -7.07106781e-01]]],\n", "\n", "\n", " [[[-8.77058019e-02, -7.01646415e-01],\n", " [-7.01646415e-01, 8.77058019e-02]]],\n", "\n", "\n", " [[[ 7.01646415e-01, -8.77058019e-02],\n", " [-8.77058019e-02, -7.01646415e-01]]],\n", "\n", "\n", " [[[-0.00000000e+00, 7.07106781e-01],\n", " [-7.07106781e-01, -2.22044605e-16]]]])
Tensor(shape=(1, 1, 2, 2), inds=[_04cbeaAAAMP, _04cbeaAAAMQ, k4, b4], tags={I4}),backend=numpy, dtype=float64, data=array([[[[0.70710678, 0. ],\n", " [0. , 0.70710678]]]])
Tensor(shape=(1, 1, 2, 2), inds=[_04cbeaAAAMQ, _04cbeaAAAMR, k5, b5], tags={I5}),backend=numpy, dtype=float64, data=array([[[[0.70710678, 0. ],\n", " [0. , 0.70710678]]]])
Tensor(shape=(1, 1, 2, 2), inds=[_04cbeaAAAMR, _04cbeaAAAMS, k6, b6], tags={I6}),backend=numpy, dtype=float64, data=array([[[[0.70710678, 0. ],\n", " [0. , 0.70710678]]]])
Tensor(shape=(1, 2, 2), inds=[_04cbeaAAAMS, k7, b7], tags={I7}),backend=numpy, dtype=float64, data=array([[[-0.70710678, 0. ],\n", " [ 0. , -0.70710678]]])
" ], "text/plain": [ "MatrixProductOperator(tensors=8, indices=23, L=8, max_bond=5)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "R_L = qpe.build_lcu_reflection_mpo(H)\n", "display(R_L)" ] }, { "cell_type": "markdown", "id": "9a9a5c0d", "metadata": {}, "source": [ "### Walk operator" ] }, { "cell_type": "markdown", "id": "9c3606b8", "metadata": {}, "source": [ "Let us apply SELECT on the $\\ket{\\mathcal{L}}\\ket{\\psi}$ state" ] }, { "cell_type": "code", "execution_count": 10, "id": "fb8ba008", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.609658Z", "iopub.status.busy": "2026-04-03T03:52:36.609516Z", "iopub.status.idle": "2026-04-03T03:52:36.685980Z", "shell.execute_reply": "2026-04-03T03:52:36.685285Z" } }, "outputs": [], "source": [ "circ = qtn.CircuitMPS(psi0=Lpsi_mps)\n", "\n", "select_gates = qpe.lcu_select_gates(H)\n", "for gate in select_gates:\n", " circ.apply_gate(gate)\n", "\n", "select_Lpsi = circ.psi" ] }, { "cell_type": "markdown", "id": "97214443", "metadata": {}, "source": [ "For an eigenstate $\\ket{\\psi_k}$ with eigenvalue $E_k$, the action of $\\mathcal{W}$ on $\\ket{\\mathcal{L}}\\ket{\\psi_k}$ spans a two-dimensional space defined by $\\ket{\\psi_k}$ and an orthogonal state $\\ket{\\phi_k}$\n", "\n", "$$ \\mathrm{SELECT} \\ket{\\mathcal{L}}\\ket{\\psi_k} = \\frac{E_k}{\\lambda} \\ket{\\mathcal{L}}\\ket{\\psi} + \\sqrt{1-(\\frac{E_k}{\\lambda})^2} \\ket{\\phi_k}, $$\n", "\n", "where $\\ket{\\phi_k}$ is:\n", "\n", "$$ \\ket{\\phi_k} = \\frac{(\\mathbb{1} - \\ket{\\mathcal{L}}\\ket{\\psi_k}\\bra{\\psi_k}\\bra{\\mathcal{L}}) \\cdot \\mathrm{SELECT} \\ket{\\mathcal{L}}\\ket{\\psi_k}}{||(\\mathbb{1} - \\ket{\\mathcal{L}}\\ket{\\psi_k}\\bra{\\psi_k}\\bra{\\mathcal{L}}) \\cdot \\mathrm{SELECT} \\ket{\\mathcal{L}}\\ket{\\psi_k}||}. $$\n", "\n", "By definition of $\\ket{\\phi_k}$, we have $\\bra{\\psi_k}\\bra{\\mathcal{L}} \\ket{\\phi_k} = 0.$" ] }, { "cell_type": "code", "execution_count": 11, "id": "50354ebe", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.687430Z", "iopub.status.busy": "2026-04-03T03:52:36.687271Z", "iopub.status.idle": "2026-04-03T03:52:36.692798Z", "shell.execute_reply": "2026-04-03T03:52:36.692090Z" } }, "outputs": [], "source": [ "phi = (select_Lpsi - E0_dmrg / λ * Lpsi_mps) / np.sqrt(1 - (E0_dmrg / λ) ** 2)\n", "assert np.isclose(abs(phi.H @ Lpsi_mps) ** 2, 0)" ] }, { "cell_type": "markdown", "id": "471aaa7a", "metadata": {}, "source": [ "Now let us apply the reflection $\\mathcal{R}_L$ to get $\\mathcal{W}$.\n", "\n", "$\\mathcal{W}$ has the following matrix elements:\n", "\n", "$$ \\bra{\\psi_k}\\bra{\\mathcal{L}} \\mathcal{W} \\ket{\\mathcal{L}}\\ket{\\psi_k} = \\frac{E_k}{\\lambda} $$\n", "and\n", "\n", "$$ \\bra{\\phi_k} \\mathcal{W} \\ket{\\mathcal{L}}\\ket{\\psi_k} = - \\sqrt{1 - (\\frac{E_k}{\\lambda})^2} $$" ] }, { "cell_type": "code", "execution_count": 12, "id": "ce583c55", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.694104Z", "iopub.status.busy": "2026-04-03T03:52:36.693962Z", "iopub.status.idle": "2026-04-03T03:52:36.701709Z", "shell.execute_reply": "2026-04-03T03:52:36.700825Z" } }, "outputs": [], "source": [ "circ_final = apply_gate_from_mpo(circ=circ, mpo=R_L)\n", "psi_final = circ_final.psi.copy()\n", "\n", "assert np.isclose(Lpsi_mps.H @ psi_final, E0_dmrg / λ)\n", "assert np.isclose(phi.H @ psi_final, -np.sqrt(1 - (E0_dmrg / λ) ** 2))" ] }, { "cell_type": "markdown", "id": "199fc1ef", "metadata": {}, "source": [ "In the basis $\\{ \\ket{\\mathcal{L}}\\ket{\\psi_k}, \\ket{\\phi_k} \\}$, the Walk operator reads\n", "\n", "$$ \\mathcal{W} = e^{i \\arccos\\left({E_k/\\lambda}\\right) Y} $$\n", "where we have introduced the $Y$ Pauli matrix.\n", "\n", "*Proof:* let us define\n", "\n", "$$ \\ket{\\pm} = \\frac{1}{\\sqrt{2}} \\left( \\ket{\\mathcal{L}}\\ket{\\psi_k} \\pm i \\ket{\\phi_k} \\right). $$" ] }, { "cell_type": "code", "execution_count": 13, "id": "92b31071", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.703012Z", "iopub.status.busy": "2026-04-03T03:52:36.702872Z", "iopub.status.idle": "2026-04-03T03:52:36.707815Z", "shell.execute_reply": "2026-04-03T03:52:36.707252Z" } }, "outputs": [], "source": [ "plus_state = 1 / np.sqrt(2) * (Lpsi_mps + 1j * phi)\n", "minus_state = 1 / np.sqrt(2) * (Lpsi_mps - 1j * phi)" ] }, { "cell_type": "markdown", "id": "3bc316e5", "metadata": {}, "source": [ "and check that\n", "\n", "$$ \\bra{\\pm} \\mathcal{W} \\ket{\\mathcal{L}}\\ket{\\psi_k} = \\frac{\\mathrm{e}^{ \\pm i \\arccos\\left({E_k/\\lambda}\\right) }}{\\sqrt{2}} $$" ] }, { "cell_type": "code", "execution_count": 14, "id": "64ff9567", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.709403Z", "iopub.status.busy": "2026-04-03T03:52:36.709263Z", "iopub.status.idle": "2026-04-03T03:52:36.714031Z", "shell.execute_reply": "2026-04-03T03:52:36.713370Z" } }, "outputs": [], "source": [ "assert np.isclose(\n", " plus_state.H @ psi_final, np.exp(1j * np.arccos(E0_dmrg / λ)) / np.sqrt(2)\n", ")\n", "assert np.isclose(\n", " minus_state.H @ psi_final, np.exp(-1j * np.arccos(E0_dmrg / λ)) / np.sqrt(2)\n", ")" ] }, { "cell_type": "markdown", "id": "f6de22d9", "metadata": {}, "source": [ "Thus, the action of $\\mathcal{W}$ on $\\ket{\\mathcal{L}}\\ket{\\psi_k}$ spans a two-dimensional space in which its eigenphases are exact functions of the energy $E_k$. We can therefore apply the QPE algorithm on $\\mathcal{W}$ to find $E_k$." ] }, { "cell_type": "markdown", "id": "a3ea7d86", "metadata": {}, "source": [ "## QPE on Walk operator" ] }, { "cell_type": "markdown", "id": "4055fcdd", "metadata": {}, "source": [ "The `run_qpe_lcu_walk_operator` function from the `estimation` module builds the Walk operator using the different functions we have previously introduced and runs the \"textbook\" QPE circuit on $\\mathcal{W}$." ] }, { "cell_type": "code", "execution_count": 15, "id": "3d670e49", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:36.715459Z", "iopub.status.busy": "2026-04-03T03:52:36.715321Z", "iopub.status.idle": "2026-04-03T03:52:42.037938Z", "shell.execute_reply": "2026-04-03T03:52:42.037313Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "binary \t ket \t phase \t prob\n", "0110 \t |6> \t 0.3750 \t 0.4974\n", "1010 \t |10> \t 0.6250 \t 0.4974\n", "0111 \t |7> \t 0.4375 \t 0.0010\n" ] } ], "source": [ "n_phase_qubits = 4\n", "traces, theta = qpe.run_qpe_lcu_walk_operator(H, psi0_mps, n_phase_qubits, verbosity=1)" ] }, { "cell_type": "markdown", "id": "6f8ed91c", "metadata": {}, "source": [ "Now we compute the energy from the eigenphase of $\\mathcal{W}$:\n", "\n", "$$ 2 \\pi \\theta = \\pm \\arccos(E_0/\\lambda) \\implies E_0 = \\cos(2 \\pi \\theta) * \\lambda $$" ] }, { "cell_type": "code", "execution_count": 16, "id": "a9f89d4f", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:42.039740Z", "iopub.status.busy": "2026-04-03T03:52:42.039573Z", "iopub.status.idle": "2026-04-03T03:52:42.042744Z", "shell.execute_reply": "2026-04-03T03:52:42.041964Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "energy = -1.5910\n" ] } ], "source": [ "energy = qpe.get_energy_from_lcu_walk_phase(theta, λ)\n", "print(f\"energy = {energy:.4f}\")" ] }, { "cell_type": "markdown", "id": "c91a290d", "metadata": {}, "source": [ "The QPE circuit returns a measure of $\\theta$ with precision of order $\\Delta\\theta = 1/2^{m}$ where $m$ is the number of phase qubits (in reality you need a little bit more than $m$ phase qubits to reach this precision with guarantees, see the tutorial on [Texbook QPE](./textbook_qpe.ipynb).)\n", "The precision on $E$ is then\n", "\n", "$$ \\Delta E = \\lambda \\frac{2\\pi}{2^m} \\sqrt{1 - \\left(\\frac{E_0}{\\lambda}\\right)^2} $$" ] }, { "cell_type": "code", "execution_count": 17, "id": "5bb6ff5f", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:42.044126Z", "iopub.status.busy": "2026-04-03T03:52:42.043971Z", "iopub.status.idle": "2026-04-03T03:52:42.046936Z", "shell.execute_reply": "2026-04-03T03:52:42.046267Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "error = 0.0250\n", "error bound = 0.6148\n" ] } ], "source": [ "print(f\"error = {abs(E0_dmrg - energy):.4f}\")\n", "delta_e = qpe.estimate_lcu_error(n_phase_qubits, E0_dmrg, λ)\n", "print(f\"error bound = {delta_e:.4f}\")" ] }, { "cell_type": "markdown", "id": "d7775b54", "metadata": {}, "source": [ "Let us now vary the number of phase qubits" ] }, { "cell_type": "code", "execution_count": 18, "id": "ddec2209", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:42.048266Z", "iopub.status.busy": "2026-04-03T03:52:42.048095Z", "iopub.status.idle": "2026-04-03T03:52:52.887074Z", "shell.execute_reply": "2026-04-03T03:52:52.886313Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "27ffc9b86bf84d638b430ca0ca2ff3ea", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/4 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "delta_es = [qpe.estimate_lcu_error(m_ph, E0_dmrg, λ) for m_ph in n_phase_bits_list]\n", "\n", "plt.plot(n_phase_bits_list, energies, \"-o\", label=\"QPE\")\n", "plt.axhline(y=E0_dmrg, color=\"k\", linestyle=\":\", label=\"DMRG\")\n", "plt.fill_between(\n", " n_phase_bits_list,\n", " [E0_dmrg + delta_e for delta_e in delta_es],\n", " [E0_dmrg - delta_e for delta_e in delta_es],\n", " alpha=0.2,\n", " label=\"error bound\",\n", ")\n", "plt.legend()\n", "plt.title(f\"Heisenberg {H.n_qubits} spins - LCU\")\n", "plt.ylabel(\"energy\")\n", "plt.xlabel(\"number of phase qubits\");" ] }, { "cell_type": "code", "execution_count": 20, "id": "ba167b2f", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:53.014026Z", "iopub.status.busy": "2026-04-03T03:52:53.013873Z", "iopub.status.idle": "2026-04-03T03:52:53.093772Z", "shell.execute_reply": "2026-04-03T03:52:53.093047Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(n_phase_bits_list, durations, \"-o\")\n", "plt.ylabel(\"duration (seconds)\")\n", "plt.xlabel(\"number of phase qubits\");" ] }, { "cell_type": "markdown", "id": "ca47dc9a", "metadata": {}, "source": [ "## Compare with second order Trotter\n", "Let's compare with QPE applied on a Trotter approximation of the time-evolution operator." ] }, { "cell_type": "code", "execution_count": 21, "id": "1bf8df54", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:52:53.095174Z", "iopub.status.busy": "2026-04-03T03:52:53.095027Z", "iopub.status.idle": "2026-04-03T03:54:17.083850Z", "shell.execute_reply": "2026-04-03T03:54:17.083038Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "58a66de28ac3400f96df1824ad6d2f29", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/4 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(n_phase_bits_list, res_ttr[\"energies\"], \"-s\")\n", "plt.axhline(y=E0_dmrg, color=\"k\", linestyle=\":\", label=\"DMRG\")\n", "plt.fill_between(\n", " n_phase_bits_list,\n", " [E0_dmrg + size_interval / 2**m_ph for m_ph in n_phase_bits_list],\n", " [E0_dmrg - size_interval / 2**m_ph for m_ph in n_phase_bits_list],\n", " alpha=0.2,\n", " label=\"error bound\",\n", ")\n", "plt.legend()\n", "plt.title(f\"Heisenberg {H.n_qubits} spins - 2nd order Trotter {n_steps} steps\")\n", "plt.ylabel(\"energy\")\n", "plt.xlabel(\"number of phase qubits\");" ] }, { "cell_type": "markdown", "id": "c73b2567", "metadata": {}, "source": [ "The computation is much longer, although the comparison is not completely fair.\n", "Indeed, in the LCU-based QPE we apply the REFLECT oracle as a MPO, which translates into much less gates to apply and less operations in the simulation (here the simulation time is mainly due to the number of operations, since we work with small systems the bond dimension remains small)." ] }, { "cell_type": "code", "execution_count": 23, "id": "20eb78c7", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:54:17.198258Z", "iopub.status.busy": "2026-04-03T03:54:17.198083Z", "iopub.status.idle": "2026-04-03T03:54:17.273533Z", "shell.execute_reply": "2026-04-03T03:54:17.272800Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(n_phase_bits_list, res_ttr[\"durations\"], \"-s\")\n", "plt.ylabel(\"duration (seconds)\")\n", "plt.xlabel(\"number of phase qubits\");" ] }, { "cell_type": "markdown", "id": "fa006ac1", "metadata": {}, "source": [ "## Quantum chemistry example: diatomic Hydrogen" ] }, { "cell_type": "markdown", "id": "ac9d9ac4", "metadata": {}, "source": [ "As an illustration of the use of QPE in quantum chemistry, we apply LCU to the molecular Hamiltonian describing H$_2$ in the minimal atomic orbital basis:" ] }, { "cell_type": "code", "execution_count": 24, "id": "81aea985", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:54:17.274994Z", "iopub.status.busy": "2026-04-03T03:54:17.274848Z", "iopub.status.idle": "2026-04-03T03:54:17.380578Z", "shell.execute_reply": "2026-04-03T03:54:17.379924Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "converged SCF energy = -1.116998996754\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "nOrb : 2\n", "nElec : 2\n", "E_HF : -1.1169989968\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "E_CI : -1.1373060358\n" ] } ], "source": [ "mol = gto.M(\n", " atom=[(\"H\", (0.0, 0.0, 0.0)), (\"H\", (0.0, 0.0, 0.735))],\n", " basis=\"STO-3G\",\n", ")\n", "\n", "H_H2 = chemistry_hamiltonian(\n", " mol, hf_mode=\"rhf\", encoding=\"original\", do_fci=True, do_ccsd=False\n", ")" ] }, { "cell_type": "code", "execution_count": 25, "id": "25968edb", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:54:17.382648Z", "iopub.status.busy": "2026-04-03T03:54:17.382473Z", "iopub.status.idle": "2026-04-03T03:54:17.401198Z", "shell.execute_reply": "2026-04-03T03:54:17.400433Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "E_DMRG : -1.1373060358\n", "L=14 terms in the LCU decomposition \n", "LCU 1-norm λ = 1.8945\n" ] } ], "source": [ "# LCU weights and related figures\n", "weights_H2, λ_H2, L_H2, mL_H2 = qpe.get_lcu_weights(H_H2)\n", "# DMRG energy and state\n", "E0_H2, psi0_H2 = do_dmrg(H_H2)\n", "\n", "print(f\"E_DMRG : {E0_H2 + H_H2.e_const:.10f}\")\n", "print(f\"L={L_H2} terms in the LCU decomposition \\nLCU 1-norm λ = {λ_H2:.4f}\")" ] }, { "cell_type": "code", "execution_count": 26, "id": "58c65af8", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:54:17.402608Z", "iopub.status.busy": "2026-04-03T03:54:17.402466Z", "iopub.status.idle": "2026-04-03T03:54:21.963061Z", "shell.execute_reply": "2026-04-03T03:54:21.962344Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "binary \t ket \t phase \t prob\n", "0101 \t |5> \t 0.3125 \t 0.2134\n", "1011 \t |11> \t 0.6875 \t 0.2134\n", "0110 \t |6> \t 0.3750 \t 0.1990\n", "\n", "energy = -0.7250, error=0.3217\n", "error bound = 0.6201\n" ] } ], "source": [ "m_ph = 4 # number of phase qubits\n", "\n", "# QPE on Walk operator\n", "traces, theta = qpe.run_qpe_lcu_walk_operator(H_H2, psi0_H2, m_ph, verbosity=1)\n", "# Get the energy\n", "energy = qpe.get_energy_from_lcu_walk_phase(theta, λ_H2)\n", "print(f\"\\nenergy = {energy:.4f}, error={abs(E0_H2 - energy):.4f}\")\n", "# Check error bound\n", "delta_e = qpe.estimate_lcu_error(m_ph, E0_H2, λ_H2)\n", "print(f\"error bound = {delta_e:.4f}\")" ] }, { "cell_type": "markdown", "id": "851e846d", "metadata": {}, "source": [ "Let us plot the energy for growing number of phase qubits" ] }, { "cell_type": "code", "execution_count": 27, "id": "5fc21dce", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:54:21.964719Z", "iopub.status.busy": "2026-04-03T03:54:21.964405Z", "iopub.status.idle": "2026-04-03T03:54:39.011511Z", "shell.execute_reply": "2026-04-03T03:54:39.010841Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "88247ab434294406b4623c09f2b2d54c", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/4 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "delta_es = [qpe.estimate_lcu_error(m_ph, E0_H2, λ_H2) for m_ph in n_phase_bits_list]\n", "\n", "plt.plot(n_phase_bits_list, energies, \"-o\", label=\"QPE\")\n", "plt.axhline(y=E0_H2, color=\"k\", linestyle=\":\", label=\"DMRG\")\n", "plt.fill_between(\n", " n_phase_bits_list,\n", " [E0_H2 + delta_e for delta_e in delta_es],\n", " [E0_H2 - delta_e for delta_e in delta_es],\n", " alpha=0.2,\n", " label=\"error bound\",\n", ")\n", "plt.legend()\n", "plt.title(f\"H2 STO-3 basis ({H_H2.n_qubits} qubits) - LCU\")\n", "plt.ylabel(\"energy\")\n", "plt.xlabel(\"number of phase qubits\");" ] }, { "cell_type": "code", "execution_count": 29, "id": "3ae3a180", "metadata": { "execution": { "iopub.execute_input": "2026-04-03T03:54:39.126389Z", "iopub.status.busy": "2026-04-03T03:54:39.126224Z", "iopub.status.idle": "2026-04-03T03:54:39.200572Z", "shell.execute_reply": "2026-04-03T03:54:39.199889Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(n_phase_bits_list, durations, \"-o\")\n", "plt.ylabel(\"duration (seconds)\")\n", "plt.xlabel(\"number of phase qubits\");" ] }, { "cell_type": "code", "execution_count": null, "id": "a0f0554e", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.12" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "10a004fe94f041e5a142aa1f14213793": { "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 } }, "135d5c61ef18484695484107f658eea6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "1a71903321dc47bb87280dd6ab7a992f": { "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 } }, "1e1c8cacbc674115b6b1a99f05550bbd": { "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 } }, "27ffc9b86bf84d638b430ca0ca2ff3ea": { "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_32b8ebe1fb1d4144ba11c0e56fb6aba3", "IPY_MODEL_8ca3f3ae30ce429c909d1d4d8c22bba0", "IPY_MODEL_d8b7e220e0de4366ba61deda93b2973f" ], "layout": "IPY_MODEL_84d1c7a68d3c43fa86a9150cab5c6306", "tabbable": null, "tooltip": null } }, "3000dd477489422f9845c7239efaee7a": { "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 } }, "32b8ebe1fb1d4144ba11c0e56fb6aba3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_76cff1a954544908946fdfb6721fffa6", "placeholder": "​", "style": "IPY_MODEL_a0eeffd243514c4b9fb67a2ebff1381c", "tabbable": null, "tooltip": null, "value": "100%" } }, "5101c30c397b455cb9e6316677125520": { "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 } }, "54eae82acc7f4fd882e9ed72bed315e4": { "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 } }, "58a66de28ac3400f96df1824ad6d2f29": { "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_f500255006d94338aeb82470bb4daa39", "IPY_MODEL_b17c7d0e40e14373b6e994263fb46ad0", "IPY_MODEL_a8b45a4e7b844856a2116ed4550ee7f9" ], "layout": "IPY_MODEL_842b951ba28948ff8daa828e728cbaae", "tabbable": null, "tooltip": null } }, "59fade5c36eb4e73857a88daaab8ec33": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_54eae82acc7f4fd882e9ed72bed315e4", "placeholder": "​", "style": "IPY_MODEL_c287711fa60342deb5b6529e16c5a543", "tabbable": null, "tooltip": null, "value": " 4/4 [00:17<00:00,  5.53s/it]" } }, "662d16d9f7094340a948df770257aa52": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "68286237de68406e9a624e90b4181692": { "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 } }, "76cff1a954544908946fdfb6721fffa6": { "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 } }, "842b951ba28948ff8daa828e728cbaae": { "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 } }, "84d1c7a68d3c43fa86a9150cab5c6306": { "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 } }, "88247ab434294406b4623c09f2b2d54c": { "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_b643920f1e3040729d781008767c4791", "IPY_MODEL_b746d94de3b146babe483607bd931819", "IPY_MODEL_59fade5c36eb4e73857a88daaab8ec33" ], "layout": "IPY_MODEL_5101c30c397b455cb9e6316677125520", "tabbable": null, "tooltip": null } }, "8ca3f3ae30ce429c909d1d4d8c22bba0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_fe9f54582c3f41ee8b836e49c2ca3f3f", "max": 4.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_662d16d9f7094340a948df770257aa52", "tabbable": null, "tooltip": null, "value": 4.0 } }, "9be3bc7977644e47ad8d016abf959a93": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "9e98b665c39d497986e4d31f80eaf5a5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "a0eeffd243514c4b9fb67a2ebff1381c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "a8b45a4e7b844856a2116ed4550ee7f9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_1e1c8cacbc674115b6b1a99f05550bbd", "placeholder": "​", "style": "IPY_MODEL_fa51be2af88c4378b398291840a5e10f", "tabbable": null, "tooltip": null, "value": " 4/4 [01:23<00:00, 27.36s/it]" } }, "b17c7d0e40e14373b6e994263fb46ad0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_1a71903321dc47bb87280dd6ab7a992f", "max": 4.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_9be3bc7977644e47ad8d016abf959a93", "tabbable": null, "tooltip": null, "value": 4.0 } }, "b643920f1e3040729d781008767c4791": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_10a004fe94f041e5a142aa1f14213793", "placeholder": "​", "style": "IPY_MODEL_bf9b7b52cd6d41e78b3d4eeb453627cd", "tabbable": null, "tooltip": null, "value": "100%" } }, "b746d94de3b146babe483607bd931819": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_68286237de68406e9a624e90b4181692", "max": 4.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_c4bb9d0e5af64249a4254cd0a6e7cf0f", "tabbable": null, "tooltip": null, "value": 4.0 } }, "bf9b7b52cd6d41e78b3d4eeb453627cd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "c287711fa60342deb5b6529e16c5a543": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "c4bb9d0e5af64249a4254cd0a6e7cf0f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "d8b7e220e0de4366ba61deda93b2973f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_3000dd477489422f9845c7239efaee7a", "placeholder": "​", "style": "IPY_MODEL_135d5c61ef18484695484107f658eea6", "tabbable": null, "tooltip": null, "value": " 4/4 [00:10<00:00,  3.51s/it]" } }, "e8eb9542528747e0b9bd9745501bff67": { "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 } }, "f500255006d94338aeb82470bb4daa39": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_e8eb9542528747e0b9bd9745501bff67", "placeholder": "​", "style": "IPY_MODEL_9e98b665c39d497986e4d31f80eaf5a5", "tabbable": null, "tooltip": null, "value": "100%" } }, "fa51be2af88c4378b398291840a5e10f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "fe9f54582c3f41ee8b836e49c2ca3f3f": { "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 }