{ "cells": [ { "cell_type": "markdown", "id": "8fbda109", "metadata": {}, "source": [ "# MACE-OFF23 in xnn: organic chemistry with a pretrained foundation model\n", "\n", "`MACE.from_foundation()` turns any published MACE foundation checkpoint into\n", "an ordinary xnn model (verified to float64 round-off in\n", "`examples/fidelity_checks/mace_foundation_verification.ipynb`). This\n", "notebook puts the **MACE-OFF23** organic force field (Kovacs *et al.*,\n", "arXiv:2312.15211; H C N O F P S Cl Br I) to work on three tasks that show\n", "what \"an ordinary xnn model\" buys:\n", "\n", "1. **conformational energetics**, side by side with the classical OPLS-AA\n", " force field on the butane torsion (the system OPLS was fit to, and a\n", " nontrivial test for an ML potential trained on equilibrium-ish data);\n", "2. **hydrogen bonding**: the water dimer binding energy and geometry\n", " against the CCSD(T)/CBS benchmark;\n", "3. **fine-tuning**: the same `Trainer` that fits every xnn model from\n", " scratch adapts the foundation model to a new reference (rMD17\n", " malonaldehyde, a *different* DFT functional), cutting its force errors\n", " by an order of magnitude with 200 structures.\n", "\n", "MACE-OFF23 is distributed under the Academic Software License (ASL, no\n", "commercial use); loading it through `from_foundation` prints that notice.\n" ] }, { "cell_type": "markdown", "id": "b868cd45", "metadata": {}, "source": [ "## 0. Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "eba47ad9", "metadata": { "execution": { "iopub.execute_input": "2026-09-21T17:07:31.761721Z", "iopub.status.busy": "2026-09-21T17:07:31.761504Z", "iopub.status.idle": "2026-09-21T17:07:34.197302Z", "shell.execute_reply": "2026-09-21T17:07:34.196326Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "xnn: 0.1.0 | device: cuda\n" ] } ], "source": [ "import warnings\n", "warnings.filterwarnings(\"ignore\")\n", "import io\n", "import contextlib\n", "import numpy as np\n", "import torch\n", "import matplotlib.pyplot as plt\n", "\n", "torch.manual_seed(0)\n", "rng = np.random.default_rng(0)\n", "DEVICE = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "\n", "from ase import Atoms\n", "from ase.constraints import FixInternals\n", "from ase.optimize import BFGS\n", "from scipy.spatial.transform import Rotation\n", "\n", "import xnn\n", "from xnn.common.deploy import XNNCalculator\n", "from xnn.common.models import ForceStressOutput\n", "from xnn.gnn.models import MACE\n", "\n", "EV_TO_KCAL = 23.060548\n", "print(\"xnn:\", xnn.__version__, \"| device:\", DEVICE)" ] }, { "cell_type": "markdown", "id": "48b10cc6", "metadata": {}, "source": [ "## 1. Load the foundation model\n", "\n", "One call: the checkpoint is downloaded (or read from the cache), unpickled\n", "with `mace-torch`, and converted weight-for-weight into the xnn `MACE`.\n", "Everything downstream (ASE calculator, autograd forces, TorchScript,\n", "training) is the standard xnn machinery. Float64 keeps the geometry\n", "optimizations below crisp.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "dd2077fc", "metadata": { "execution": { "iopub.execute_input": "2026-09-21T17:07:34.199166Z", "iopub.status.busy": "2026-09-21T17:07:34.198973Z", "iopub.status.idle": "2026-09-21T17:07:36.402471Z", "shell.execute_reply": "2026-09-21T17:07:36.401272Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "mace-off23-small is distributed under the Academic Software License (https://github.com/gabor1/ASL); by using it you accept its terms (no commercial use).\n", "cuequivariance or cuequivariance_torch is not available. Cuequivariance acceleration will be disabled.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "elements: [1, 6, 7, 8, 9, 15, 16, 17, 35, 53]\n", "r_max = 4.5 A | interaction-energy scale = 1.0757 eV\n" ] } ], "source": [ "torch.set_default_dtype(torch.float64)\n", "off = MACE.from_foundation(\"mace-off23-small\", dtype=torch.float64).to(DEVICE)\n", "print(\"elements:\", off.species)\n", "print(f\"r_max = {off.cutoff} A | interaction-energy scale = \"\n", " f\"{float(off.scale_shift.scale):.4f} eV\")\n", "\n", "def off_calc():\n", " return XNNCalculator(ForceStressOutput(off), cutoff=off.cutoff,\n", " device=DEVICE)" ] }, { "cell_type": "markdown", "id": "42306b50", "metadata": {}, "source": [ "## 2. Butane torsion: foundation model vs classical force field\n", "\n", "The relaxed dihedral driver (constrain the C-C-C-C dihedral, relax\n", "everything else) is run with two calculators through the identical ASE\n", "code path: MACE-OFF23 and the built-in OPLS-AA of the `ffnn` family --\n", "the force field whose alkane torsions were *fit* to reproduce exactly this\n", "profile at the RHF/6-31G* level (Jorgensen *et al.*, JACS 1996, Table 1).\n", "Each scan point continues from the previous one, and a tiny rattle breaks\n", "the eclipsed-methyl saddle symmetry that would otherwise trap the\n", "optimizer.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "0796fca2", "metadata": { "execution": { "iopub.execute_input": "2026-09-21T17:07:36.404557Z", "iopub.status.busy": "2026-09-21T17:07:36.404320Z", "iopub.status.idle": "2026-09-21T17:08:07.930313Z", "shell.execute_reply": "2026-09-21T17:08:07.929279Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "gauche-trans: OFF 0.70 vs OPLS 1.18 kcal/mol\n", "cis barrier: OFF 4.90 vs OPLS 6.03 kcal/mol\n" ] } ], "source": [ "from xnn.ffnn.models import OPLS\n", "\n", "butane_pos = np.array(\n", " [[0.0, 0.0, 0.0], [1.53, 0.0, 0.0], [2.05, 1.44, 0.0], [3.58, 1.44, 0.0],\n", " [-0.4, -0.5, 0.9], [-0.4, -0.5, -0.9], [-0.4, 1.0, 0.0],\n", " [1.93, -0.52, 0.88], [1.93, -0.52, -0.88],\n", " [1.65, 1.96, -0.88], [1.65, 1.96, 0.88],\n", " [3.98, 0.44, 0.0], [3.98, 1.96, 0.88], [3.98, 1.96, -0.88]])\n", "butane_z = [6, 6, 6, 6] + [1] * 10\n", "\n", "# OPLS-AA with the paper's 1996 alkane torsions, typed automatically\n", "opls = OPLS.from_atoms(Atoms(numbers=butane_z, positions=butane_pos),\n", " \"oplsaa-1996\", cutoff=25.0)\n", "opls_calc = lambda: XNNCalculator(ForceStressOutput(opls), cutoff=opls.cutoff)\n", "\n", "\n", "def torsion_scan(calc_factory, angles, fmax=8e-4):\n", " \"\"\"Relaxed C-C-C-C scan with continuation between the points.\"\"\"\n", " ref = Atoms(numbers=butane_z,\n", " positions=butane_pos + 0.03 * rng.standard_normal((14, 3)))\n", " ref.calc = calc_factory()\n", " assert BFGS(ref, logfile=None).run(fmax=fmax, steps=800)\n", " energies, current = {}, ref\n", " for a in angles:\n", " w = current.copy()\n", " w.calc = calc_factory()\n", " w.set_dihedral(0, 1, 2, 3, a, indices=[3, 11, 12, 13])\n", " w.rattle(0.003, seed=2) # break saddle symmetry\n", " w.set_constraint(FixInternals(dihedrals_deg=[[a, [0, 1, 2, 3]]]))\n", " assert BFGS(w, logfile=None).run(fmax=fmax, steps=800)\n", " w.set_constraint()\n", " energies[a] = w.get_potential_energy() * EV_TO_KCAL\n", " current = w\n", " e0 = min(energies.values())\n", " return {a: e - e0 for a, e in energies.items()}\n", "\n", "\n", "angles = list(range(180, -1, -15))\n", "prof_off = torsion_scan(off_calc, angles)\n", "prof_opls = torsion_scan(opls_calc, angles)\n", "table1 = {0: 6.04, 60: 1.18, 120: 3.68, 180: 0.00} # Jorgensen 1996 (RHF/6-31G*)\n", "\n", "fig, ax = plt.subplots(figsize=(6.4, 4.2))\n", "ax.plot(angles, [prof_off[a] for a in angles], \"o-\", label=\"MACE-OFF23 small\")\n", "ax.plot(angles, [prof_opls[a] for a in angles], \"s--\", label=\"OPLS-AA (1996)\")\n", "ax.plot(list(table1), list(table1.values()), \"k*\", ms=14,\n", " label=\"RHF/6-31G* (Jorgensen 1996)\")\n", "ax.set_xlabel(\"C-C-C-C dihedral (deg)\")\n", "ax.set_ylabel(\"relative energy (kcal/mol)\")\n", "ax.set_title(\"Relaxed butane torsion profile\")\n", "ax.legend()\n", "fig.tight_layout()\n", "fig.savefig(\"mace_off_butane_torsion.png\", dpi=150)\n", "plt.show()\n", "print(f\"gauche-trans: OFF {prof_off[60]:.2f} vs OPLS {prof_opls[60]:.2f} kcal/mol\")\n", "print(f\"cis barrier: OFF {prof_off[0]:.2f} vs OPLS {prof_opls[0]:.2f} kcal/mol\")\n", "assert 0.3 < prof_off[60] < 1.2 and 3.5 < prof_off[0] < 7.0" ] }, { "cell_type": "markdown", "id": "a7d111ff", "metadata": {}, "source": [ "The two potentials, built from entirely different philosophies (a\n", "transferable ML model trained on wB97M-D3 data vs a hand-parameterized\n", "classical force field fit to HF-level scans), agree on the qualitative\n", "profile; the quantitative differences (gauche well, cis barrier) reflect\n", "their different quantum-chemistry references as much as their functional\n", "forms.\n", "\n", "## 3. Hydrogen bonding: the water dimer\n", "\n", "Binding energy and geometry of the H-bonded water dimer, relaxed from a\n", "handful of acceptor orientations (the H-bond minimum competes with\n", "repulsive arrangements, so a small orientation search is more robust than\n", "one lucky starting guess). Reference: CCSD(T)/CBS gives\n", "De = 4.99 kcal/mol at R(O-O) = 2.91 A.\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "e4a25d53", "metadata": { "execution": { "iopub.execute_input": "2026-09-21T17:08:07.932236Z", "iopub.status.busy": "2026-09-21T17:08:07.932103Z", "iopub.status.idle": "2026-09-21T17:08:26.227666Z", "shell.execute_reply": "2026-09-21T17:08:26.226794Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MACE-OFF23 small: De = -4.82 kcal/mol at R(O-O) = 2.928 A\n", "CCSD(T)/CBS: De = -4.99 kcal/mol at R(O-O) = 2.912 A\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "water = Atoms(numbers=[8, 1, 1],\n", " positions=[[0, 0, 0], [0.9572, 0, 0], [-0.24, 0.9266, 0]])\n", "water.calc = off_calc()\n", "BFGS(water, logfile=None).run(fmax=1e-4, steps=300)\n", "e_mono = water.get_potential_energy()\n", "mono = water.get_positions() - water.get_positions()[0]\n", "\n", "best = None\n", "for axis, ang in [(\"z\", 120), (\"z\", -60), (\"y\", 120), (\"y\", -120), (\"x\", 90)]:\n", " acc = mono @ Rotation.from_euler(axis, ang, degrees=True).as_matrix().T \\\n", " + np.array([2.95, 0.0, 0.0])\n", " dimer = Atoms(numbers=[8, 1, 1] * 2, positions=np.vstack([mono, acc]))\n", " dimer.calc = off_calc()\n", " BFGS(dimer, logfile=None).run(fmax=1e-4, steps=500)\n", " e = dimer.get_potential_energy()\n", " if best is None or e < best[0]:\n", " best = (e, dimer.copy())\n", "e_dim, dimer = best\n", "de = (e_dim - 2 * e_mono) * EV_TO_KCAL\n", "roo = np.linalg.norm(dimer.get_positions()[3] - dimer.get_positions()[0])\n", "print(f\"MACE-OFF23 small: De = {de:.2f} kcal/mol at R(O-O) = {roo:.3f} A\")\n", "print(\"CCSD(T)/CBS: De = -4.99 kcal/mol at R(O-O) = 2.912 A\")\n", "assert -6.0 < de < -3.5 and 2.8 < roo < 3.05\n", "\n", "# the dissociation curve: rigid displacement of the acceptor along O-O\n", "axis_vec = (dimer.get_positions()[3] - dimer.get_positions()[0])\n", "axis_vec /= np.linalg.norm(axis_vec)\n", "curve = {}\n", "for dr in np.arange(-0.4, 2.61, 0.1):\n", " w = dimer.copy()\n", " p = w.get_positions()\n", " p[3:] += dr * axis_vec\n", " w.set_positions(p)\n", " w.calc = off_calc()\n", " curve[roo + dr] = (w.get_potential_energy() - 2 * e_mono) * EV_TO_KCAL\n", "\n", "fig, ax = plt.subplots(figsize=(6.0, 4.0))\n", "ax.plot(list(curve), list(curve.values()), \"o-\")\n", "ax.axhline(0.0, color=\"gray\", lw=0.8)\n", "ax.plot([2.912], [-4.99], \"k*\", ms=14, label=\"CCSD(T)/CBS minimum\")\n", "ax.set_xlabel(\"R(O-O) (A)\")\n", "ax.set_ylabel(\"interaction energy (kcal/mol)\")\n", "ax.set_title(\"Water dimer dissociation, MACE-OFF23 small\")\n", "ax.legend()\n", "fig.tight_layout()\n", "fig.savefig(\"mace_off_water_dimer.png\", dpi=150)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "38bec637", "metadata": {}, "source": [ "A sub-10 MB foundation model reproduces the coupled-cluster H-bond to a\n", "couple of tenths of a kcal/mol, without a single water-specific parameter.\n", "\n", "## 4. Fine-tuning the foundation model to a new reference\n", "\n", "The rMD17 malonaldehyde set (`load_dataset(\"rmd17\", ...)`) is labeled at\n", "the PBE level; MACE-OFF23 was trained on wB97M-D3(BJ). Zero-shot, the\n", "foundation model already has qualitatively right forces, and adapting it is\n", "exactly the same `from_dict -> Trainer -> fit` pipeline used everywhere in\n", "xnn: `model: {foundation: mace-off23-small, ...}` loads the pretrained\n", "weights, and every parameter (including the transplanted ones) is\n", "trainable.\n", "\n", "Two practical notes, both visible in the numbers below. First, absolute\n", "energies of different functionals differ by a large per-element constant\n", "(~18.6 eV here for C3H4O2), so the per-element references `atom_ref` are\n", "aligned on the training set before fitting -- otherwise the energy loss\n", "starts astronomically far from the minimum. Second, this is a *naive* full\n", "fine-tune on one molecule: it adapts the model to malonaldehyde at the\n", "price of some transferability (the multi-head replay strategies used to\n", "avoid that live in the upstream training pipeline, not in the model).\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "dc874c39", "metadata": { "execution": { "iopub.execute_input": "2026-09-21T17:08:26.230268Z", "iopub.status.busy": "2026-09-21T17:08:26.230070Z", "iopub.status.idle": "2026-09-21T17:09:41.288949Z", "shell.execute_reply": "2026-09-21T17:09:41.287677Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0b2980dfef72487786bbdccac923605a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "rmd17:malonaldehyde train: 0%| | 0/1000 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "losses = [float(line.split(\"train loss\")[1].split(\"|\")[0])\n", " for line in log.getvalue().splitlines() if \"train loss\" in line]\n", "fig, ax = plt.subplots(1, 2, figsize=(10.4, 3.8))\n", "ax[0].semilogy(losses)\n", "ax[0].set_xlabel(\"epoch\")\n", "ax[0].set_ylabel(\"training loss\")\n", "ax[0].set_title(\"Fine-tuning convergence\")\n", "\n", "batch = collate([test_set[i] for i in range(100)]).to(DEVICE)\n", "out = trainer.module(batch)\n", "f_ref = batch.forces.cpu().numpy().ravel()\n", "f_pred = out[\"forces\"].detach().cpu().numpy().ravel()\n", "ax[1].plot(f_ref, f_pred, \".\", ms=2, alpha=0.4)\n", "lim = [f_ref.min(), f_ref.max()]\n", "ax[1].plot(lim, lim, \"k-\", lw=0.8)\n", "ax[1].set_xlabel(\"PBE force component (eV/A)\")\n", "ax[1].set_ylabel(\"fine-tuned MACE-OFF (eV/A)\")\n", "ax[1].set_title(\"Force parity, rMD17 test split\")\n", "fig.tight_layout()\n", "fig.savefig(\"mace_off_finetune.png\", dpi=150)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "026df4db", "metadata": {}, "source": [ "## Summary\n", "\n", "* `MACE.from_foundation(\"mace-off23-small\")` gives a working, deployable\n", " organic potential in one line; through `XNNCalculator` it drives the same\n", " ASE workflows as every other xnn model.\n", "* On butane it produces a physically sensible torsion profile alongside\n", " OPLS-AA; on the water dimer it reproduces the CCSD(T)/CBS hydrogen bond\n", " to a few tenths of a kcal/mol.\n", "* Fine-tuning is the stock xnn `Trainer` with\n", " `model: {foundation: ...}` in the config: 60 epochs on 200 PBE\n", " structures cut the malonaldehyde force MAE by well over 4x after\n", " aligning the per-element energy references.\n", "\n", "The materials-side foundation models (MACE-MP-0 through OMAT-0) get the\n", "same treatment in `mace_foundation_materials.ipynb`.\n" ] } ], "metadata": { "kernelspec": { "display_name": "xnn (3.13.12)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.12" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "007af40489a04b3784de73cb80ee704c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "0b2980dfef72487786bbdccac923605a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_98ff9efc56bc49ec996243af9fcdf25b", "IPY_MODEL_435c3d0ea5ca4284bddebe7461474e38", "IPY_MODEL_dd114a370aca41a1b0ef1c86fbb9592e" ], "layout": "IPY_MODEL_bdcbccae694c43ce85318e0a117af02b", "tabbable": null, "tooltip": null } }, "1485f06627f8434d8ef0caa0e006c865": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "19d86dfa9e694c0889915b06735364ee": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_de822405305c467eaf5d0d226f46844d", "placeholder": "​", "style": "IPY_MODEL_ab064290af914c2aa56e0494659c1b1b", "tabbable": null, "tooltip": null, "value": " 0/1000 [00:00<?, ? struct/s]" } }, "1acb674514a64c719df4652a92f0cbfc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_ff355dc766d1443997e1f64562c7ac39", "placeholder": "​", "style": "IPY_MODEL_69189284d38349cd809024e3a9f13ac6", "tabbable": null, "tooltip": null, "value": "rmd17:malonaldehyde train:   0%" } }, "2918ee1286e34138858e0a103fa3263d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "2a94f2770ba1481e9c49d1d507c01f67": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "2d91a979c819469d80ac2ccee08b507c": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "31f8c3aa2bfc49ffbd622605632fe771": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "3352f678d85044a6ac84b859d819e7e8": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "351a46a7ba1f4a879131964e46826d17": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "3cc7c8549fe245a4ac85a15985b17efe": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "3d5c9a73dfd8430eab656dbbe5f0abb9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_bf5bffcdf0ae4e1097669d0270827b18", "placeholder": "​", "style": "IPY_MODEL_bcc3727976784cf38e8cd7340b3f753b", "tabbable": null, "tooltip": null, "value": "rmd17:malonaldehyde test:   0%" } }, "435c3d0ea5ca4284bddebe7461474e38": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_2918ee1286e34138858e0a103fa3263d", "max": 1000.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_2a94f2770ba1481e9c49d1d507c01f67", "tabbable": null, "tooltip": null, "value": 1000.0 } }, "4db5f6c9411d4770b7bbd57dc6dedc77": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_5ab1696bb89f46e1a78c1a52a0b1d30b", "IPY_MODEL_c00d5e4f4c8a42b6b1c4733d265571a4", "IPY_MODEL_b3df3285c16f424cb1b84dfc83816896" ], "layout": "IPY_MODEL_b33a76d0ffd74131b9c514323187f36e", "tabbable": null, "tooltip": null } }, "54cb0c6d865046e5aea6a9f233149f51": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "5ab1696bb89f46e1a78c1a52a0b1d30b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_31f8c3aa2bfc49ffbd622605632fe771", "placeholder": "​", "style": "IPY_MODEL_ca2b3fe22db242ea80a14fd23332a72d", "tabbable": null, "tooltip": null, "value": "rmd17:malonaldehyde test:   0%" } }, "688979d00e2c4b76ae29abf97c7e9155": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "688fc416a814421489f9711171daf650": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "69189284d38349cd809024e3a9f13ac6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "6a4848d0f52147b586355ebeeab70342": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "79e0c685e3114e2d8c476c5673b06765": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "98ff9efc56bc49ec996243af9fcdf25b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_54cb0c6d865046e5aea6a9f233149f51", "placeholder": "​", "style": "IPY_MODEL_6a4848d0f52147b586355ebeeab70342", "tabbable": null, "tooltip": null, "value": "rmd17:malonaldehyde train:   0%" } }, "ab064290af914c2aa56e0494659c1b1b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "ace6f204a4524220b63a0bba85d5da2a": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b33a76d0ffd74131b9c514323187f36e": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "b3df3285c16f424cb1b84dfc83816896": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_688979d00e2c4b76ae29abf97c7e9155", "placeholder": "​", "style": "IPY_MODEL_ee5f27b5059e4194954ee78129317ac2", "tabbable": null, "tooltip": null, "value": " 0/1000 [00:00<?, ? struct/s]" } }, "bcc3727976784cf38e8cd7340b3f753b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "bdcbccae694c43ce85318e0a117af02b": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "bf5bffcdf0ae4e1097669d0270827b18": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c00d5e4f4c8a42b6b1c4733d265571a4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_ace6f204a4524220b63a0bba85d5da2a", "max": 1000.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_351a46a7ba1f4a879131964e46826d17", "tabbable": null, "tooltip": null, "value": 1000.0 } }, "c346d2b6aa88440baa93cf7b0359d11b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_d5fcba7d4f0f4cf4a531516b8903c1f9", "placeholder": "​", "style": "IPY_MODEL_007af40489a04b3784de73cb80ee704c", "tabbable": null, "tooltip": null, "value": " 0/1000 [00:00<?, ? struct/s]" } }, "ca2b3fe22db242ea80a14fd23332a72d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "cd3c7fa94f684e32932584a7f308ba53": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d5fcba7d4f0f4cf4a531516b8903c1f9": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "dd114a370aca41a1b0ef1c86fbb9592e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_cd3c7fa94f684e32932584a7f308ba53", "placeholder": "​", "style": "IPY_MODEL_688fc416a814421489f9711171daf650", "tabbable": null, "tooltip": null, "value": " 0/1000 [00:00<?, ? struct/s]" } }, "de822405305c467eaf5d0d226f46844d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "deec5f0d96474c48871842f192ff2301": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "e0f8b1a2c97f4a449dae0104c43a3513": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_3352f678d85044a6ac84b859d819e7e8", "max": 1000.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_deec5f0d96474c48871842f192ff2301", "tabbable": null, "tooltip": null, "value": 1000.0 } }, "ee5f27b5059e4194954ee78129317ac2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "efb557e6407a46059363bdbacb567b25": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_3d5c9a73dfd8430eab656dbbe5f0abb9", "IPY_MODEL_e0f8b1a2c97f4a449dae0104c43a3513", "IPY_MODEL_19d86dfa9e694c0889915b06735364ee" ], "layout": "IPY_MODEL_79e0c685e3114e2d8c476c5673b06765", "tabbable": null, "tooltip": null } }, "f632d04ad16a464d8f49485430032761": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_1acb674514a64c719df4652a92f0cbfc", "IPY_MODEL_f9393333fdcb419b8968a1d8d96f4ca9", "IPY_MODEL_c346d2b6aa88440baa93cf7b0359d11b" ], "layout": "IPY_MODEL_3cc7c8549fe245a4ac85a15985b17efe", "tabbable": null, "tooltip": null } }, "f9393333fdcb419b8968a1d8d96f4ca9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_2d91a979c819469d80ac2ccee08b507c", "max": 1000.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_1485f06627f8434d8ef0caa0e006c865", "tabbable": null, "tooltip": null, "value": 1000.0 } }, "ff355dc766d1443997e1f64562c7ac39": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }