{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "35fe8b53",
   "metadata": {},
   "source": [
    "```{try_on_binder}\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e2cd1f37",
   "metadata": {
    "load": "myst_code_init.py",
    "tags": [
     "remove-cell"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The pymor.discretizers.builtin.gui.jupyter extension is already loaded. To reload it, use:\n",
      "  %reload_ext pymor.discretizers.builtin.gui.jupyter\n"
     ]
    }
   ],
   "source": [
    "from IPython import get_ipython\n",
    "ip = get_ipython()\n",
    "if ip is not None:\n",
    "    ip.run_line_magic('load_ext', 'pymor.discretizers.builtin.gui.jupyter')\n",
    "    ip.run_line_magic('matplotlib', 'inline')\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\", category=UserWarning, module='torch')\n",
    "import pymor.tools.random\n",
    "pymor.tools.random._default_random_state = None\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a33f7820",
   "metadata": {},
   "source": [
    "# Tutorial: Model order reduction for unstable LTI systems\n",
    "\n",
    "In {doc}`tutorial_lti_systems` we introduced LTI systems of the form\n",
    "\n",
    "```{math}\n",
    "\\begin{align}\n",
    "    E \\dot{x}(t) & = A x(t) + B u(t), \\\\\n",
    "    y(t) & = C x(t) + D u(t).\n",
    "\\end{align}\n",
    "```\n",
    "\n",
    "If the system is asymptotically stable, i.e., all eigenvalues of the\n",
    "matrix pair {math}`(A, E)` lie in the open left half plane, methods like\n",
    "balanced truncation (see {doc}`tutorial_bt`) can be used for model\n",
    "order reduction. Asymptotic stability of the LTI system is a crucial\n",
    "assumption for balanced truncation because the observability and\n",
    "controllability Gramians are not defined if the matrix pair {math}`(A, E)` has\n",
    "eigenvalues with a positive real part (in this case we call the LTI system\n",
    "unstable). Additionally, commonly used system norms like the\n",
    "{math}`\\mathcal{H}_2` norm, the {math}`\\mathcal{H}_\\infty` norm, and\n",
    "the Hankel (semi)norm are not defined for unstable LTI systems.\n",
    "\n",
    "In this tutorial we show how unstable LTI systems with an invertible\n",
    "{math}`E` matrix can be reduced using pyMOR.\n",
    "\n",
    "## An unstable model\n",
    "\n",
    "We consider the following one-dimensional heat equation over {math}`(0, 1)` with\n",
    "one input {math}`u(t)` and one output {math}`y(t)`:\n",
    "\n",
    "```{math}\n",
    "\\begin{align}\n",
    "    \\partial_t T(\\xi, t) & = \\partial_{\\xi \\xi} T(\\xi, t) + \\lambda T(\\xi, t),\n",
    "    & 0 < \\xi < 1,\\ t > 0, \\\\\n",
    "    -\\partial_\\xi T(0, t) & = -T(0, t) + u(t),\n",
    "    & t > 0, \\\\\n",
    "    \\partial_\\xi T(1, t) & = -T(1, t),\n",
    "    & t > 0, \\\\\n",
    "    y(t) & = T(1, t),\n",
    "    & t > 0.\n",
    "\\end{align}\n",
    "```\n",
    "\n",
    "Depending on the choice of the parameter {math}`\\lambda` the discretization of\n",
    "the above partial differential equation is an unstable LTI system. In order to\n",
    "build the {{ LTIModel }} we follow the lines of {doc}`tutorial_lti_systems`.\n",
    "\n",
    "First, we do the necessary imports and some matplotlib style choices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "147b467e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import scipy.sparse as sps\n",
    "from pymor.models.iosys import LTIModel\n",
    "\n",
    "plt.rcParams['axes.grid'] = True"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "40bcd421",
   "metadata": {},
   "source": [
    "Next, we can assemble the matrices based on a centered finite difference\n",
    "approximation using standard methods of NumPy and SciPy. Here we use\n",
    "{math}`\\lambda = 50`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9f4cd039",
   "metadata": {
    "load": "unstable_heat_equation.py"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy.sparse as sps\n",
    "\n",
    "k = 50\n",
    "n = 2 * k + 1\n",
    "l = 50\n",
    "\n",
    "E = sps.eye(n, format='lil')\n",
    "E[0, 0] = E[-1, -1] = 0.5\n",
    "E = E.tocsc()\n",
    "\n",
    "d0 = n * [-2 * (n - 1)**2 + l]\n",
    "d1 = (n - 1) * [(n - 1)**2]\n",
    "A = sps.diags([d1, d0, d1], [-1, 0, 1], format='lil')\n",
    "A[0, 0] = A[-1, -1] = -n * (n - 1) + l / 2\n",
    "A = A.tocsc()\n",
    "\n",
    "B = np.zeros((n, 1))\n",
    "B[0, 0] = n - 1\n",
    "\n",
    "C = np.zeros((1, n))\n",
    "C[0, -1] = 1\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0150f99",
   "metadata": {},
   "source": [
    "Then, we can create an {{ LTIModel }} from NumPy and SciPy matrices `A`, `B`, `C`,\n",
    "`E`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3a6c4f2b",
   "metadata": {},
   "outputs": [],
   "source": [
    "fom = LTIModel.from_matrices(A, B, C, E=E)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3433b19c",
   "metadata": {},
   "source": [
    "First, let's check whether our system is indeed unstable. For this, we can use the\n",
    "method {meth}`~pymor.models.iosys.LTIModel.get_ast_spectrum`, which will\n",
    "compute the subset of system poles with a positive real part and the corresponding\n",
    "eigenvectors as well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fbd34d8d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 6.65573911+0.j 36.50842397+0.j 48.29293004+0.j]\n"
     ]
    }
   ],
   "source": [
    "ast_spectrum = fom.get_ast_spectrum()\n",
    "print(ast_spectrum[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b566ce5",
   "metadata": {},
   "source": [
    "In the code snippet above, all eigenvalues of the matrix pair {math}`(A, E)` are\n",
    "computed using dense methods. This works well for systems with a small state space\n",
    "dimension. For large-scale systems it is wiser to rely on iterative methods for\n",
    "computing eigenvalues. The code below computes 10 system poles which are\n",
    "close to 0 using pyMOR's iterative eigensolver and filters the result for\n",
    "values with a positive real part."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ab1fe3d8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6d9be79707fd473aba5160d395ecbabf",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Accordion(children=(HTML(value='', layout=Layout(height='16em', overflow_y='auto', width='100%')),), selected_…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 6.65573911+0.j 36.50842397+0.j 48.29293004+0.j]\n"
     ]
    }
   ],
   "source": [
    "ast_spectrum = fom.get_ast_spectrum(ast_pole_data={'k': 10, 'sigma': 0})\n",
    "print(ast_spectrum[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04afdd1c",
   "metadata": {},
   "source": [
    "## Frequency domain balanced truncation\n",
    "\n",
    "The observability and controllability Gramians (defined in the time-domain)\n",
    "introduced in {doc}`tutorial_lti_systems` do not exist for unstable systems.\n",
    "However, the frequency domain representations of these Gramians are defined for\n",
    "systems with no poles on the imaginary axis. Hence, for most unstable systems we\n",
    "can follow a similar approach to the one from {doc}`tutorial_bt` but using the\n",
    "frequency domain representations of the controllability and observability Gramians\n",
    "\n",
    "```{math}\n",
    "\\begin{align*}\n",
    "    P & =\n",
    "    \\frac{1}{2 \\pi} \\int_{-\\infty}^\\infty\n",
    "    (\\imath \\omega E - A)^{-1}\n",
    "    B B^{\\operatorname{T}}\n",
    "    (-\\imath \\omega E^{\\operatorname{T}} - A^{\\operatorname{T}})^{-1}\n",
    "    \\operatorname{d}\\!\\omega, \\text{ and} \\\\\n",
    "    E^{\\operatorname{T}} Q E & =\n",
    "    \\frac{1}{2 \\pi} E^{\\operatorname{T}} \\int_{-\\infty}^\\infty\n",
    "    (-\\imath \\omega E^{\\operatorname{T}} - A^{\\operatorname{T}})^{-1}\n",
    "    C^{\\operatorname{T}} C\n",
    "    (\\imath \\omega E - A)^{-1}\n",
    "    \\operatorname{d}\\!\\omega\\, E.\n",
    "\\end{align*}\n",
    "```\n",
    "\n",
    "Again, two Lyapunov equations have to be solved in order to obtain these Gramians.\n",
    "Additionally, it is necessary to perform a Bernoulli stabilization of the system\n",
    "matrices before solving the matrix equations. Both of these steps are done internally\n",
    "by the {class}`~pymor.reductors.bt.FDBTReductor`.\n",
    "\n",
    "Let us start with initializing a reductor object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5d378a82",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pymor.reductors.bt import FDBTReductor\n",
    "fdbt = FDBTReductor(fom, ast_pole_data={'k': 10, 'sigma': 0})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e52e401",
   "metadata": {},
   "source": [
    "In order to perform a Bernoulli stabilization, knowledge about the anti-stable\n",
    "subset of system poles is required. With the `ast_pole_data` argument we can provide\n",
    "information about the system poles to the reductor (i.e. list of anti-stable\n",
    "eigenvalues with or without corresponding eigenvectors) or specify how eigenvalues\n",
    "should be computed (i.e. `None` for computing all eigenvalues using dense methods\n",
    "or arguments for pyMOR's iterative eigensolver like in the code above).\n",
    "\n",
    "Before we use the {meth}`~pymor.reductors.bt.FDBTReductor.reduce` method to\n",
    "obtain a reduced-order model, we take a look at some a priori error bounds for\n",
    "the reductor. In particular, we get a {math}`\\mathcal{L}_\\infty` rather than the\n",
    "{math}`\\mathcal{H}_\\infty` error bound from classic balanced truncation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "14997f61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e35d4ab3d78a4ef18923a51f58d2f5fe",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Accordion(children=(HTML(value='', layout=Layout(height='16em', overflow_y='auto', width='100%')),), selected_…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAHHCAYAAABHp6kXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABMk0lEQVR4nO3deXxV5bn28WtnTiAJQ0IGSQiiIiAGZIipoqEEEHtQwIGKfY1otRai2BwH0LeAb0VorUqrVKotoq1WQBlsVQSDQBFkDoIMAgZBSEIikJAEQsh+3j8wW3Z2Ahl29pTf9/Px1DVkrTvPsXL1Wfd6lsUYYwQAAODl/NxdAAAAgDMQagAAgE8g1AAAAJ9AqAEAAD6BUAMAAHwCoQYAAPgEQg0AAPAJhBoAAOATCDUAAMAnEGoAAIBPINQAaBGmTp0qi8WioqIid5fSKNX1A6gboQYAAPgEQg3ggyorKzVnzhyNHDlSt912mw4ePOjukgCg2RFqAB/z3XffacCAAWrfvr3efPNNHTp0SNOmTXN3WZKksrKyRh1zxvUB+D5CDeBDzpw5o//5n/9RWlqabr31Vn3yySfauHGj0/+wP3z4sO677z7FxMQoODhYPXr00Jw5c+zOqe4B2blzp8aMGaO2bdvq+uuvv+gxSdq6dauGDRumiIgItW7dWoMGDdIXX3xR7+tfSFFRke68805FRESoffv2mjBhgk6fPm13Tn3uL0n33nuvkpKSHPbX7H+p3t63b5/uvfdetWnTRpGRkRo7dqzKy8sdfn7NmjXq16+fQkJC1KVLF/31r391OOfkyZN69NFHlZSUpODgYHXo0EGDBw/Wli1bLjoGgK8KcHcBAJznb3/7m7Zt26Z//OMfkqRrr71Wjz/+uB5++GGn3aOgoEDXXnutLBaLMjMzFR0drY8//lj333+/SkpK9Oijj9qdf8cdd+jyyy/Xc889J2PMRY999dVXGjBggCIiIvTEE08oMDBQf/3rX5WWlqZVq1YpJSWl3tevzZ133qmkpCRNnz5dX3zxhf785z/r+PHjeuuttxp1/4a488471blzZ02fPl1btmzR3/72N3Xo0EG///3vbeds375dQ4YMUXR0tKZOnaqzZ89qypQpiomJsbvWQw89pPfee0+ZmZnq3r27vv/+e61Zs0a7du3SNddc0+gaAa9mAPiMfv36mTZt2hir1dps97j//vtNXFycKSoqstv/85//3ERGRpry8nJjjDFTpkwxksxdd93lcI0LHRsxYoQJCgoy+/fvt+07cuSICQ8PNzfccEO9rlGb6vNvueUWu/3jxo0zksy2bdsadH9jjMnIyDCdOnWq8141t++77z6780aOHGnat2/v8PuHhISYb7/91rZv586dxt/f3+6akZGRZvz48fX63YGWgsdPgI84fvy4Nm3aZJtFaQ7GGL3//vsaPny4jDEqKiqy/TV06FAVFxc7PP546KGH6rxezWNVVVVatmyZRowYoUsvvdS2Py4uTmPGjNGaNWtUUlJS7+vXZvz48Xbb1bNYH330UaPu3xA1ax0wYIC+//572zWrqqr0ySefaMSIEUpMTLSd161bNw0dOtTuZ9u0aaP169fryJEjja4H8DWEGsBHfP755zLG6MYbb2y2exQWFurEiRN67bXXFB0dbffX2LFjJUlHjx61+5nOnTvXeb2axwoLC1VeXq6uXbs6nNutWzdZrVYdOnSo3tevzeWXX2633aVLF/n5+enAgQONun9DnB9UJKlt27aSzgVS6dzvf+rUKYcaJTnU9Ic//EE7duxQQkKC+vfvr6lTp+qbb75pdG2AL6CnBvARa9askSQNHDiw2e5htVolSb/4xS+UkZFR6zlXX3213XZoaGid17vQsfpq6jWaMqtV189WVVXVut/f37/W/aYevUA13XnnnRowYIAWLVqkZcuW6fnnn9fvf/97LVy4UMOGDWvw9QBfQKgBfMSaNWsUHR2tPn36NNs9oqOjFR4erqqqKqWnpzfL9cPCwrRnzx6HY7t375afn58SEhKadI+9e/faze7s27dPVqtVSUlJDb5/27ZtdeLECYdzv/3220bVFh0drdDQUO3du9fhWG01xcXFady4cRo3bpyOHj2qa665RtOmTSPUoMXi8RPgAyoqKrRp0yb98pe/VEBA7f9bZePGjZLOvb10yy23KD09XQcOHND8+fOVkpKiSZMmXfQ+/v7+uu222/T+++9rx44dDscLCwub9Hv4+/tryJAhWrJkiQ4cOGDbX1BQoHfeeUfXX3+9IiIimnSPWbNm2W2//PLLkqRhw4Y1+P5dunRRcXGxvvzyS9u+vLw8LVq0qFG1+fv7a+jQoVq8eLHdgom7du3SJ598YtuuqqpScXGx3c926NBB8fHxqqioaNS9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vO7agC9jpgaAJCk4OFixsbFKSEjQiBEjlJ6eruXLl9uOW61WTZ8+XZ07d1ZoaKiSk5P13nvv2V3jo48+0hVXXKHQ0FANHDhQBw4csDte22OgmTNnKikpyW7fnDlz1KNHDwUHBysuLk6ZmZm2YydOnNAvf/lLRUdHKyIiQj/96U+1bds2u5+fMWOGYmJiFB4ervvvv79eM06rVq1S//79bfecOHGizp49azuelpamzMxMPfroo4qKitLQoUPr9TtL0po1azRgwACFhoYqISFBjzzyiMrKymzHk5KS9Lvf/U733HOPIiIi9OCDD160XgCOCDUAHOzYsUNr1661my2YPn263nrrLc2ePVtfffWVfvOb3+gXv/iFVq1aJUk6dOiQRo0apeHDhysnJ0e//OUvNXHixAbf+9VXX9X48eP14IMPavv27frggw902WWX2Y7fcccdOnr0qD7++GNt3rxZ11xzjQYNGqRjx45JkubPn6+pU6fqueee06ZNmxQXF6e//OUvF7zn4cOHdfPNN6tfv37atm2bXn31Vf3973/Xs88+a3fem2++qaCgIH3++eeaPXt2vX7n/fv366abbtJtt92mL7/8UvPmzdOaNWvsgpok/fGPf1RycrK2bt2q3/72tw0eNwCSmuXb3wC8SkZGhvH39zetWrUywcHBRpLx8/Mz7733njHGmNOnT5uwsDCzdu1au5+7//77zV133WWMMWbSpEmme/fudseffPJJI8kcP37cGGPMlClTTHJyst05L730kunUqZNtOz4+3jz99NO11vnf//7XREREmNOnT9vt79Kli/nrX/9qjDEmNTXVjBs3zu54SkqKw33P99RTT5muXbsaq9Vq2zdr1izTunVrU1VVZYwx5sYbbzS9e/e2+7n6/M7333+/efDBBx1+Dz8/P3Pq1CljjDGdOnUyI0aMqLM+APVDTw0ASdLAgQP16quvqqysTC+99JICAgJ02223SZL27dun8vJyDR482O5nzpw5o969e0uSdu3apZSUFLvjqampDarh6NGjOnLkiAYNGlTr8W3btqm0tFTt27e323/q1Cnt37/fVsdDDz3kUMdnn31W53137dql1NRUWSwW277rrrtOpaWl+u6775SYmChJ6tOnj8PPXex33rZtm7788ku9/fbbtn3GGFmtVuXm5qpbt26SpL59+9ZZH4D6IdQAkCS1atXK9phnzpw5Sk5O1t///nfdf//9Ki0tlSR9+OGHuuSSS+x+Ljg4uN738PPzkzHGbl9lZaXt70NDQy/486WlpYqLi9PKlSsdjrVp06bedTRWq1atGvwzpaWl+tWvfqVHHnnE4Vh1WGrstQHYI9QAcODn56ennnpKWVlZGjNmjLp3767g4GAdPHhQN954Y60/061bN33wwQd2+7744gu77ejoaOXn58sYY5sVycnJsR0PDw9XUlKSsrOzNXDgQId7XHPNNcrPz1dAQIBDc/H5daxfv1733HNPnXXU9jPvv/++XV2ff/65wsPD1bFjxwv+3MV+52uuuUY7d+606wsC0DxoFAZQqzvuuEP+/v6aNWuWwsPD9dhjj+k3v/mN3nzzTe3fv19btmzRyy+/rDfffFOS9NBDD2nv3r16/PHHtWfPHr3zzjuaO3eu3TXT0tJUWFioP/zhD9q/f79mzZqljz/+2O6cqVOn6oUXXtCf//xn7d2713YfSUpPT1dqaqpGjBihZcuW6cCBA1q7dq2efvppbdq0SZI0YcIEzZkzR2+88Ya+/vprTZkyRV999dUFf9dx48bp0KFDevjhh7V7924tWbJEU6ZMUVZWlvz86v7XZH1+5yeffFJr165VZmamcnJytHfvXi1ZssShURiAE7i3pQeAJ8jIyDC33nqrw/7p06eb6OhoU1paaqxWq5k5c6bp2rWrCQwMNNHR0Wbo0KFm1apVtvP//e9/m8suu8wEBwebAQMGmDlz5tg1zRpjzKuvvmoSEhJMq1atzD333GOmTZtm1yhsjDGzZ8+23ScuLs48/PDDtmMlJSXm4YcfNvHx8SYwMNAkJCSYu+++2xw8eNB2zrRp00xUVJRp3bq1ycjIME888cQFG4WNMWblypWmX79+JigoyMTGxponn3zSVFZW2o7feOONZsKECQ4/V5/fecOGDWbw4MGmdevWplWrVubqq68206ZNsx3v1KmTeemlly5YH4CLsxhT4wE3AACAF+LxEwAA8AmEGgAA4BMINQAAwCcQagAAgE8g1AAAAJ9AqAEAAD6BUAMAAHwCoQYAAPgEQg0AAPAJhBoAAOATCDUAAMAn/H97fnX3r+qqvgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "error_bounds = fdbt.error_bounds()\n",
    "fig, ax = plt.subplots()\n",
    "ax.semilogy(range(1, len(error_bounds) + 1), error_bounds, '.-')\n",
    "ax.set_xlabel('Reduced order')\n",
    "_ = ax.set_title(r'$\\mathcal{L}_\\infty$ error bounds')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d499dd74",
   "metadata": {},
   "source": [
    "To get a reduced-order model of order 10, we call the `reduce` method with the\n",
    "appropriate argument:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "0563a85b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "616b5a876e964518b9c8f14cdb4e050f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Accordion(children=(HTML(value='', layout=Layout(height='16em', overflow_y='auto', width='100%')),), selected_…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rom = fdbt.reduce(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ece3d3e1",
   "metadata": {},
   "source": [
    "Alternatively, we can specify a desired error tolerance rather than the order\n",
    "of the reduced model.\n",
    "\n",
    "Finally, we can compute the relative {math}`\\mathcal{L}_\\infty` error to check\n",
    "the quality of the reduced-order model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "345fdced",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Linf error:   2.982e-09\n"
     ]
    }
   ],
   "source": [
    "err = fom - rom\n",
    "print(f'Relative Linf error:   {err.linf_norm() / fom.linf_norm():.3e}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3c30095d",
   "metadata": {},
   "source": [
    "Clearly, this result is in accordance with our previously computed\n",
    "{math}`\\mathcal{L}_\\infty` error bound:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "39cc0aa3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Linf error:   8.502e-10\n",
      "Linf upper bound:   1.624e-09\n"
     ]
    }
   ],
   "source": [
    "print(f'Linf error:   {err.linf_norm():.3e}')\n",
    "print(f'Linf upper bound:   {error_bounds[9]:.3e}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9e7cb923",
   "metadata": {},
   "source": [
    "## Gap-IRKA\n",
    "\n",
    "The {class}`~pymor.reductors.h2.IRKAReductor` is specifically designed to find\n",
    "{math}`\\mathcal{H}_2`-optimal reduced-order models (see e.g. {cite}`GAB08`).\n",
    "Since we cannot compute {math}`\\mathcal{H}_2`-norms for unstable systems,\n",
    "we can not expect the IRKA to yield high-quality approximations for unstable\n",
    "full-order models.\n",
    "In {cite}`BBG19` the authors introduce a variant of the IRKA (the Gap-IRKA) which\n",
    "is based on the {math}`\\mathcal{H}_2`-gap-norm.\n",
    "As desired, this norm is defined for most unstable systems which makes the\n",
    "Gap-IRKA a suitable algorithm for finding reduced-order models for unstable systems.\n",
    "\n",
    "One major advantage of the {class}`~pymor.reductors.h2.GapIRKAReductor` over the\n",
    "{class}`~pymor.reductors.bt.FDBTReductor` is that\n",
    "no a priori information about the system poles is required. However, we do not\n",
    "obtain an a priori {math}`\\mathcal{L}_\\infty` error bound. Let us compute a\n",
    "reduced-order model of order 10 using the {class}`~pymor.reductors.h2.GapIRKAReductor`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "35dcf819",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7f649e9a66694812a37b8aee43a37a98",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Accordion(children=(HTML(value='', layout=Layout(height='16em', overflow_y='auto', width='100%')),), selected_…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymor.reductors.h2 import GapIRKAReductor\n",
    "gapirka = GapIRKAReductor(fom)\n",
    "rom = gapirka.reduce(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2acf541",
   "metadata": {},
   "source": [
    "Beside the desired order of the reduced model, the `reduce` method has a few\n",
    "other arguments as well: `conv_crit` allows for choosing the stopping criterion\n",
    "of the algorithm. By specifying `conv_crit='sigma'` the relative change in\n",
    "interpolation points, `conv_crit='htwogap'` the relative change in\n",
    "{math}`\\mathcal{H}_2`-gap distance of the reduced-order models and `conv_crit='ltwo'` the\n",
    "relative change of {math}`\\mathcal{L}_2` distances of the reduced-order models are\n",
    "used as a stopping criterion. The `tol` argument sets the tolerance for\n",
    "any of the chosen stopping criterion.\n",
    "\n",
    "Again, we can compute the relative {math}`\\mathcal{L}_\\infty` error."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "76db6bb4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Linf error:   2.849e-09\n"
     ]
    }
   ],
   "source": [
    "err = fom - rom\n",
    "print(f'Relative Linf error:   {err.linf_norm() / fom.linf_norm():.3e}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4306363",
   "metadata": {},
   "source": [
    "Download the code:\n",
    "{download}`tutorial_unstable_lti_systems.md`,\n",
    "{nb-download}`tutorial_unstable_lti_systems.ipynb`."
   ]
  }
 ],
 "metadata": {
  "jupyter": {
   "jupytext": {
    "cell_metadata_filter": "-all",
    "formats": "ipynb,myst",
    "main_language": "python",
    "text_representation": {
     "extension": ".md",
     "format_name": "myst",
     "format_version": "1.3",
     "jupytext_version": "1.11.2"
    }
   }
  },
  "jupytext": {
   "text_representation": {
    "format_name": "myst"
   }
  },
  "kernelspec": {
   "display_name": "Python 3",
   "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.9.12"
  },
  "source_map": [
   18,
   23,
   26,
   77,
   84,
   90,
   92,
   97,
   99,
   106,
   109,
   118,
   121,
   156,
   159,
   173,
   179,
   184,
   186,
   194,
   197,
   202,
   205,
   225,
   229,
   242,
   245
  ],
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "03d432b7c3c845028d4eb622f039870a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_d4be0f0015d448fc833e5af1e4f0e0e3",
       "placeholder": "​",
       "style": "IPY_MODEL_a2aea755ac784e32b630db0da5a6f18d",
       "value": ""
      }
     },
     "04dfdcc4ed6c491ebe362b5a8e6a59dc": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "08695a96282b452aa773fedd8df1c51f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "0e9da552c5824705a9aa5455fc68a3b1": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "1747bb1510944024b189a174cc8c48de": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "205a00c4b6ca465b827ef04c409ef86c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "212a0638c3864f2eb5745baa20bfc8c4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_04dfdcc4ed6c491ebe362b5a8e6a59dc",
       "placeholder": "​",
       "style": "IPY_MODEL_9c9eae99887c4d14a141469e7d1138aa",
       "value": "<p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Generating initial interpolation data</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Starting gap IRKA</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 1: 1.647171e+04</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 2: 9.112820e-01</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 3: 5.301505e-01</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 4: 9.167618e-02</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 5: 2.126237e-02</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 6: 4.797222e-03</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 7: 1.089198e-03</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 8: 2.469658e-04</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p><p style=\"line-height:120%\">00:03 <bold>GapIRKAReductor</bold>: Convergence criterion in iteration 9: 5.600619e-05</p>"
      }
     },
     "216d791352664785ac9d0bc0012675c5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_e92a90cdde4445cb80cd57d08c62a6f9",
       "placeholder": "​",
       "style": "IPY_MODEL_a59339eed66b4457b0674a7b216e4c62",
       "value": ""
      }
     },
     "2a027247a3a544a3afdc8e70bb5e0fea": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_08695a96282b452aa773fedd8df1c51f",
       "placeholder": "​",
       "style": "IPY_MODEL_44acc4446bce421bba9c02903ee121ee",
       "value": ""
      }
     },
     "2a81952905184294a7441974d553cbd8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "2db471738b474321ba90684f1d302a3e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_eabfb78eb49748cfb75958ada41017ab",
       "placeholder": "​",
       "style": "IPY_MODEL_c7760538376c48acac03b14a33e49bcb",
       "value": "<p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 10 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 11 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 12 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 13 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 14 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 15 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 1.02869e-05</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 2: 1.89242e-10</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 3: 1.20707e-15</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 2.81680e-29</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 5.24844e-27</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 3.34271e-29</p>"
      }
     },
     "30b1004f61fc4cbf81f9bcf26879a9c0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "3a1ff9635aab4955ad8bd826f0c29021": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_d08a796714754a8882006e03dfd8bfbc"
       ],
       "layout": "IPY_MODEL_e30fc3b47baa46b7aa84feae42f3dfb7",
       "selected_index": null
      }
     },
     "3afa254e20e64c6181bdd83ad890c151": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "44172f583b4a440d97856d234a5247ee": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "44acc4446bce421bba9c02903ee121ee": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "4987747174be438e9b1111f3b1b1af09": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_54ee1c63287348da9ab8e733227525e5"
       ],
       "layout": "IPY_MODEL_30b1004f61fc4cbf81f9bcf26879a9c0",
       "selected_index": null
      }
     },
     "499f93cff9454a00915f1020877abcb1": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_7e20c6c2df3b41d19cf96018abf48c6e"
       ],
       "layout": "IPY_MODEL_7d1ae543cfc84e98ad6da3259cf2cb66",
       "selected_index": null
      }
     },
     "4f8fbfbd011849da8d6dbef9f34248e3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "54ee1c63287348da9ab8e733227525e5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_87b7509bf987447d80e51ea9f5e22416",
       "placeholder": "​",
       "style": "IPY_MODEL_a9ec98ef2b7a412f8be3518affaf4389",
       "value": ""
      }
     },
     "5773baea07db4d9e8fc4ec0b5db1962f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_d897ec0d718543bca464d1c5a3f5c926"
       ],
       "layout": "IPY_MODEL_44172f583b4a440d97856d234a5247ee",
       "selected_index": null
      }
     },
     "5dd2072dbc5f43dc98691d43b9621900": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_c86732dff819487a9db94c61749f5e27",
       "placeholder": "​",
       "style": "IPY_MODEL_3afa254e20e64c6181bdd83ad890c151",
       "value": "<p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 10 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 11 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 12 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 13 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 14 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 15 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 1.02869e-05</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:03 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 2: 1.89242e-10</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:03 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 3: 1.20707e-15</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 2.81680e-29</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 5.24844e-27</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 3.34271e-29</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 0: 2.35087e+01</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 1: 4.88678e-01</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 2: 2.77956e-02</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 3: 1.53979e-04</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 4: 4.81367e-09</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 5: 1.30001e-16</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 6: 1.30001e-16</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 7: 1.30001e-16</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 0: 2.35087e+01</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 1: 4.88678e-01</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 2: 2.77956e-02</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 3: 1.53979e-04</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 4: 4.81367e-09</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 5: 1.30001e-16</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 6: 1.30001e-16</p><p style=\"line-height:120%\">00:03 <bold>solve_bernoulli</bold>: Relative change of iterates at step 7: 1.30001e-16</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:03 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Operator projection ...</p><p style=\"line-height:120%\">00:03 <bold>LTIPGReductor</bold>: Building ROM ...</p>"
      }
     },
     "616b5a876e964518b9c8f14cdb4e050f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_5dd2072dbc5f43dc98691d43b9621900"
       ],
       "layout": "IPY_MODEL_932d325626854aa89269c19eda9fa742",
       "selected_index": null
      }
     },
     "62769df133eb44528408819efebfef19": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "63775c4bc0c24778ad972dfb3b3cf6c5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "6d9be79707fd473aba5160d395ecbabf": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_2db471738b474321ba90684f1d302a3e"
       ],
       "layout": "IPY_MODEL_d42d9dbf66fd4239898f204bc6c777e7",
       "selected_index": null
      }
     },
     "6dca46e1246f4fdd9e04c28734bb5d98": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_ee3f294ac33e4207b4a6a8c99a215186"
       ],
       "layout": "IPY_MODEL_a4f3fe42a8a84442b2976dcafaf94603",
       "selected_index": null
      }
     },
     "7241633951d142bf8e280bf7c13ae70f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_03d432b7c3c845028d4eb622f039870a"
       ],
       "layout": "IPY_MODEL_62769df133eb44528408819efebfef19",
       "selected_index": null
      }
     },
     "761a2b5e0d884ac4a038889a0782d970": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_ff625544b4404e1fb44d12fc009c3921",
       "placeholder": "​",
       "style": "IPY_MODEL_1747bb1510944024b189a174cc8c48de",
       "value": "<p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 4 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 5 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 6 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 7 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 8 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 9 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 10 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 11 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 12 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 13 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 14 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 15 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 1.02869e-05</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 2: 1.89242e-10</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 16 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 17 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 18 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 19 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 20 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 21 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 3: 1.20707e-15</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 2.81680e-29</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 5.24844e-27</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 1 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 2 again</p><p style=\"line-height:120%\">00:02 <bold>gram_schmidt</bold>: Orthonormalizing vector 3 again</p><p style=\"line-height:120%\">00:02 <bold>eigs</bold>: Maximum of relative Ritz estimates at step 1: 3.34271e-29</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 0: 2.35087e+01</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 1: 4.88678e-01</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 2: 2.77956e-02</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 3: 1.53979e-04</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 4: 4.81367e-09</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 5: 1.30001e-16</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 6: 1.30001e-16</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 7: 1.30001e-16</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 0: 2.35087e+01</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 1: 4.88678e-01</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 2: 2.77956e-02</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 3: 1.53979e-04</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 4: 4.81367e-09</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 5: 1.30001e-16</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 6: 1.30001e-16</p><p style=\"line-height:120%\">00:02 <bold>solve_bernoulli</bold>: Relative change of iterates at step 7: 1.30001e-16</p>"
      }
     },
     "7cf8e402bd2545d0a2b73d65075c5aeb": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "7d1ae543cfc84e98ad6da3259cf2cb66": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "7e20c6c2df3b41d19cf96018abf48c6e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_fcd150ab7f0448a3bbd95a5fae8c5e59",
       "placeholder": "​",
       "style": "IPY_MODEL_0e9da552c5824705a9aa5455fc68a3b1",
       "value": ""
      }
     },
     "7f649e9a66694812a37b8aee43a37a98": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_212a0638c3864f2eb5745baa20bfc8c4"
       ],
       "layout": "IPY_MODEL_e94b66cd424443dc88ef8a5994464594",
       "selected_index": null
      }
     },
     "87b7509bf987447d80e51ea9f5e22416": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "8e5341d01a854048b9f40431a0d57f6e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "932d325626854aa89269c19eda9fa742": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "9b92edc3285549369e4e33bca33262d7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "9c9eae99887c4d14a141469e7d1138aa": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "a2aea755ac784e32b630db0da5a6f18d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "a37ac711760f40bebaea6ddda967f148": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_7cf8e402bd2545d0a2b73d65075c5aeb",
       "placeholder": "​",
       "style": "IPY_MODEL_63775c4bc0c24778ad972dfb3b3cf6c5",
       "value": ""
      }
     },
     "a4f3fe42a8a84442b2976dcafaf94603": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "a59339eed66b4457b0674a7b216e4c62": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "a9ec98ef2b7a412f8be3518affaf4389": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "abfb2cdcd4e643f995fa90a4992b9022": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_a37ac711760f40bebaea6ddda967f148"
       ],
       "layout": "IPY_MODEL_9b92edc3285549369e4e33bca33262d7",
       "selected_index": null
      }
     },
     "ac68a8004abe413a99e3d92aa517e28e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ad4748ac050846bab15fc9e6b4931b94": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_2a027247a3a544a3afdc8e70bb5e0fea"
       ],
       "layout": "IPY_MODEL_afc78350537242fdb77a056551bf4f62",
       "selected_index": null
      }
     },
     "afc78350537242fdb77a056551bf4f62": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "b35706c765194ceca97e77f087044a67": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "bf26b91225884270b0538b2227b23606": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "c7760538376c48acac03b14a33e49bcb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "c86732dff819487a9db94c61749f5e27": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "d08a796714754a8882006e03dfd8bfbc": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_2a81952905184294a7441974d553cbd8",
       "placeholder": "​",
       "style": "IPY_MODEL_8e5341d01a854048b9f40431a0d57f6e",
       "value": ""
      }
     },
     "d42d9dbf66fd4239898f204bc6c777e7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "d4be0f0015d448fc833e5af1e4f0e0e3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "d897ec0d718543bca464d1c5a3f5c926": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_bf26b91225884270b0538b2227b23606",
       "placeholder": "​",
       "style": "IPY_MODEL_b35706c765194ceca97e77f087044a67",
       "value": ""
      }
     },
     "da534f268f4b44b998b2a6bec5ae954b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_216d791352664785ac9d0bc0012675c5"
       ],
       "layout": "IPY_MODEL_ac68a8004abe413a99e3d92aa517e28e",
       "selected_index": null
      }
     },
     "dce78a4bbdc34a2fa3642242fdd0813c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "e30fc3b47baa46b7aa84feae42f3dfb7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "e35d4ab3d78a4ef18923a51f58d2f5fe": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "AccordionModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "AccordionModel",
       "_titles": {
        "0": "Log Output"
       },
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "AccordionView",
       "box_style": "",
       "children": [
        "IPY_MODEL_761a2b5e0d884ac4a038889a0782d970"
       ],
       "layout": "IPY_MODEL_4f8fbfbd011849da8d6dbef9f34248e3",
       "selected_index": null
      }
     },
     "e92a90cdde4445cb80cd57d08c62a6f9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "e94b66cd424443dc88ef8a5994464594": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "eabfb78eb49748cfb75958ada41017ab": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "ee3f294ac33e4207b4a6a8c99a215186": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_dce78a4bbdc34a2fa3642242fdd0813c",
       "placeholder": "​",
       "style": "IPY_MODEL_205a00c4b6ca465b827ef04c409ef86c",
       "value": ""
      }
     },
     "fcd150ab7f0448a3bbd95a5fae8c5e59": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "ff625544b4404e1fb44d12fc009c3921": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": 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": "16em",
       "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,
       "overflow_x": null,
       "overflow_y": "auto",
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}