diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ab421c6..0c4eae7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -62,6 +62,50 @@ jobs: # failing assertion. run: pytest tests/test_contracts.py -q -s -k "rate or audit" + calculators: + # The torch-backed potentials get a job of their own: matgl and orb-models + # pull torch, which nothing else in this matrix needs, and making all three + # main legs carry it to cover one job's worth of tests is a bad trade. + # + # GPAW is deliberately NOT installed here. It ships no wheel, and its 26.x + # sources include C++ headers from files the build compiles as C, so on a + # stock runner it stops at "fatal error: algorithm: No such file or + # directory" whether or not libxc, BLAS and build-essential are present — + # three attempts, same error. It builds on machines whose compiler puts the + # C++ headers on the default include path, which is where the real-DFT + # numbers in the notes were measured: a silicon lattice constant of 5.479 A + # and a bulk modulus of 88.7 GPa. TestRealDFT skips here, and says so + # rather than pretending to cover it. + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -e ".[dev,plot,potentials]" + + - name: Show what is actually installed + run: | + python -c " + import matverse as mv + for name, meta in sorted(mv.calc.available().items()): + state = meta.get('unavailable', meta.get('method')) + print(f'{name:16s} {state}') + " + + - name: Test the levels of theory + # MatglStress is the one that matters here: it fails on the version + # that leaves matgl's stress in GPa, which is a 160x error nothing + # else would catch. + run: | + pytest tests/test_pipeline.py -q \ + -k "LevelsOfTheory or MatglStress" --durations=5 + anharmonic: # A job of its own, because hiphive reaches numba through trainstation and # numba caps numpy below 2.5. Installing it alongside the others would diff --git a/matverse/calc.py b/matverse/calc.py index 9d225c2..b23c37e 100644 --- a/matverse/calc.py +++ b/matverse/calc.py @@ -47,7 +47,9 @@ _CALCULATORS: dict[str, tuple] = {} #: Levels matverse knows how to build, if their backend happens to be installed. -BUILTIN_LEVELS = ("emt", "lj", "mace-mpa", "mace-omat", "sevennet", "chgnet") +BUILTIN_LEVELS = ("emt", "lj", "mace-mpa", "mace-omat", "sevennet", "chgnet", + "m3gnet", "m3gnet-r2scan", "tensornet", "orb", + "gpaw-pbe", "gpaw-pbe-fast") @register_function( @@ -122,6 +124,86 @@ def _builtin(name: str): "surrogate": True, "license": "BSD-3-Clause", "uncertainty": None, "note": "Superseded on Matbench Discovery by OMat24-trained models; " "kept because a great deal of published work used it."}) + if name in ("m3gnet", "m3gnet-r2scan", "tensornet"): + import matgl + from matgl.ext.ase import PESCalculator + checkpoint, functional = { + "m3gnet": ("M3GNet-PES-MatPES-PBE-2025.2", "PBE"), + "m3gnet-r2scan": ("M3GNet-PES-MatPES-r2SCAN-2025.2", "r2SCAN"), + "tensornet": ("TensorNet-PES-MatPES-PBE-2025.2", "PBE"), + }[name] + # stress_unit is not optional. matgl returns stress in GPa by + # default while ASE's contract is eV/A^3, so leaving it alone makes + # every stress-derived quantity - elastic constants, bulk modulus, + # pressure - exactly 160.2x too large, with no error anywhere. + return (lambda: PESCalculator(matgl.load_model(checkpoint), + stress_unit="eV/A3"), + {"kind": "mlip", "method": checkpoint, + "reference": f"{functional} (MatPES)", "surrogate": True, + "license": "BSD-3-Clause", "uncertainty": None, + "note": "MatPES-trained, so it reproduces plain " + f"{functional} rather than the PBE+U of the MP-" + "trained generation. Which functional a surrogate " + "was fitted to is not a detail: mixing a PBE+U " + "surrogate with a PBE one is the same class of error " + "as mixing PBE with HSE06, and it is why " + "reference= is recorded on every level."}) + if name == "orb": + from orb_models.forcefield import pretrained + from orb_models.forcefield.calculator import ORBCalculator + return (lambda: ORBCalculator( + pretrained.orb_v3_conservative_inf_omat(device="cpu"), + device="cpu"), + {"kind": "mlip", "method": "ORB v3 conservative", + "reference": "PBE+U (OMat24)", "surrogate": True, + "license": "Apache-2.0", "uncertainty": None, + "note": "Conservative variant: forces are the energy gradient, " + "which is what a phonon or a relaxation needs. The " + "'direct' variants predict forces independently and are " + "faster and not usable for either."}) + if name in ("gpaw-pbe", "gpaw-pbe-fast"): + from gpaw import GPAW, PW + # Not a surrogate. This is the one level here that solves the + # Kohn-Sham equations rather than reproducing something that did, and + # kind/surrogate say so — every downstream record inherits it. + cutoff, mesh = ((500.0, (8, 8, 8)) if name == "gpaw-pbe" + else (400.0, (6, 6, 6))) + return (lambda: GPAW(mode=PW(cutoff), xc="PBE", kpts=mesh, + txt=None, symmetry={"point_group": False}), + {"kind": "dft", "method": f"GPAW PBE, PW({cutoff:g} eV)", + "reference": "PBE", "surrogate": False, + "license": "GPL-3.0", "uncertainty": None, + "plane_wave_cutoff_eV": cutoff, + "kpoint_mesh": list(mesh), + "note": "Real plane-wave DFT, not a model of it. The cutoff " + "and the k-point mesh are the two settings that " + "decide whether a number is converged, so they are " + "recorded on the level rather than left implicit.\n\n" + "The mesh is **fixed** rather than set by a k-point " + "density, and that is not a stylistic choice. A " + "density-based mesh changes discretely as a cell " + "changes size, which puts a step in E(V) and " + "destroys anything fitted to it. Silicon, same " + "calculator, only the k-points varying:\n\n" + " density 2.0 -> -879 GPa (125 -> 64 k-points)\n" + " density 2.5 -> 319 GPa (216 -> 125)\n" + " density 3.0 -> 125 GPa (343 -> 216)\n" + " density 4.0 -> 85.7 GPa (729 -> 512)\n" + " fixed 8x8x8 -> 88.7 GPa (unchanged)\n\n" + "against a PBE literature 88-89. A negative bulk " + "modulus is not a soft crystal, it is a " + "discontinuity. Raising the density only shrinks the " + "relative size of the jump; it never removes it. The " + "plane-wave cutoff, by contrast, was already " + "converged - PW(400) and PW(600) differ by 0.1 GPa - " + "so the whole error was the mesh.\n\n" + "A fixed mesh suits small cells. Register your own " + "level for anything large, where 8x8x8 is wasteful, " + "and keep it fixed across any volume scan.\n\n" + "point_group symmetry is off because matverse hands " + "in displaced and strained cells whose symmetry is " + "lower than the analyser infers from a rounded " + "geometry."}) raise KeyError( f"unknown level {name!r}. Runnable here: " f"{sorted(available(check_imports=False))}. Register your own with " diff --git a/matverse/pl.py b/matverse/pl.py index 684f7dc..ba5f1b5 100644 --- a/matverse/pl.py +++ b/matverse/pl.py @@ -17,6 +17,7 @@ from __future__ import annotations import numpy as np +import pandas as pd from anndata import AnnData from ._core import grid_of, structures @@ -1162,3 +1163,99 @@ def distribution(md: AnnData, column: str, by: str | None = None, ax.spines[spine].set_visible(False) ax._matverse_dropped = dropped return ax + + +@register_function( + aliases=["space group distribution", "symmetry distribution", + "spacegroup bar", "which space groups", "crystal system " + "distribution", "how symmetric is this set"], + category="pl", + description="Distribution of space groups across a dataset, grouped by " + "crystal system — what symmetry a generated or screened set " + "actually has.", + requires={"obs": ["{column}"]}, + examples=["mv.pl.spacegroups(built)", + "mv.pl.spacegroups(md, column='spacegroup_number')", + "mv.pl.spacegroups(built, column='requested_space_group')"], + related=["mv.gen.from_symmetry", "mv.pp.describe", "mv.pl.distribution"], + notes="A generated set has a symmetry distribution, and it is rarely the " + "one that was asked for. mv.gen.from_symmetry records both the " + "requested group and the one the structure actually has, and " + "plotting the two side by side is how the difference becomes " + "visible rather than a column nobody reads.\\n\\n" + "Bars are grouped and coloured by crystal system rather than " + "plotted as 230 flat categories, because the number itself carries " + "no order a reader can use — 62 is not 'between' 61 and 63 in any " + "sense that matters, but Pnma being orthorhombic does.", +) +def spacegroups(md: AnnData, column: str = "spacegroup_number", + compare: str | None = None, top: int = 20, ax=None): + """Space-group distribution grouped by crystal system. Returns the axis.""" + if column not in md.obs: + raise ValueError( + f"obs[{column!r}] absent; run mv.pp.symmetry(md) for " + f"'spacegroup_number', or point column= at " + f"mv.gen.from_symmetry's 'space_group' — this object has " + f"{sorted(md.obs.columns)[:8]}...") + if compare is not None and compare not in md.obs: + raise ValueError(f"obs[{compare!r}] absent") + + numbers = pd.to_numeric(md.obs[column], errors="coerce").dropna() + if numbers.empty: + raise ValueError(f"obs[{column!r}] holds no usable space-group number") + + counts = numbers.astype(int).value_counts().sort_values(ascending=False) + keep = counts.head(int(top)) + order = sorted(keep.index) + + ax = _axis(ax) + systems = [_crystal_system(n) for n in order] + palette = {"triclinic": "#8e44ad", "monoclinic": "#4c72b0", + "orthorhombic": "#2a9d8f", "tetragonal": "#e9c46a", + "trigonal": "#e76f51", "hexagonal": "#d35400", + "cubic": "#c1121f"} + positions = np.arange(len(order)) + width = 0.4 if compare is not None else 0.7 + ax.bar(positions - (width / 2 if compare is not None else 0), + [keep[n] for n in order], width=width, + color=[palette[s] for s in systems], + label=column if compare is not None else None) + + if compare is not None: + other = pd.to_numeric(md.obs[compare], errors="coerce").dropna() + other = other.astype(int).value_counts() + ax.bar(positions + width / 2, [int(other.get(n, 0)) for n in order], + width=width, facecolor="none", edgecolor="#333333", + linewidth=0.9, label=compare) + ax.legend(frameon=False, fontsize=8) + + ax.set_xticks(positions) + ax.set_xticklabels([str(n) for n in order], rotation=90, fontsize=7) + ax.set_xlabel("space group number") + ax.set_ylabel("materials") + for spine in ("top", "right"): + ax.spines[spine].set_visible(False) + + seen = list(dict.fromkeys(systems)) + handles = [_plt().Line2D([], [], color=palette[s], linewidth=6, label=s) + for s in seen] + ax.add_artist(ax.legend(handles=handles, frameon=False, fontsize=7, + loc="upper right", title="crystal system", + title_fontsize=7)) + ax._matverse_n_groups = len(order) + ax._matverse_dropped = int(len(counts) - len(keep)) + return ax + + +#: Space-group number ranges, in the international convention. +_CRYSTAL_SYSTEMS = ((2, "triclinic"), (15, "monoclinic"), (74, "orthorhombic"), + (142, "tetragonal"), (167, "trigonal"), (194, "hexagonal"), + (230, "cubic")) + + +def _crystal_system(number: int) -> str: + """The crystal system a space-group number belongs to.""" + for limit, name in _CRYSTAL_SYSTEMS: + if number <= limit: + return name + return "cubic" diff --git a/matverse/pp.py b/matverse/pp.py index 40d5a2e..7ea2119 100644 --- a/matverse/pp.py +++ b/matverse/pp.py @@ -919,6 +919,7 @@ def prototype(md: AnnData, source: str = "input") -> None: "which Wyckoff positions the atoms occupy.", requires={"structures": ["{source}"]}, produces={"obs": ["crystal_system", "point_group", + "spacegroup_number", "spacegroup_symbol", "n_symmetry_operations", "n_wyckoff", "wyckoff", "min_site_symmetry", "max_site_symmetry"]}, examples=["mv.pp.symmetry(md)", @@ -957,6 +958,8 @@ def symmetry(md: AnnData, source: str = "input", symprec: float = 0.01) -> None: systems = np.empty(md.n_obs, dtype=object) points = np.empty(md.n_obs, dtype=object) orders = np.full(md.n_obs, np.nan) + numbers = np.full(md.n_obs, np.nan) + group_symbols = np.empty(md.n_obs, dtype=object) wyckoff_count = np.full(md.n_obs, np.nan) wyckoff = np.empty(md.n_obs, dtype=object) lowest = np.full(md.n_obs, np.nan) @@ -968,12 +971,19 @@ def symmetry(md: AnnData, source: str = "input", symprec: float = 0.01) -> None: systems[i] = "" points[i] = "" wyckoff[i] = "" + group_symbols[i] = "" try: with warnings.catch_warnings(): warnings.simplefilter("ignore") analyzer = SpacegroupAnalyzer(structure, symprec=symprec) systems[i] = str(analyzer.get_crystal_system()) points[i] = str(analyzer.get_point_group_symbol()) + # The analyser is already built, so the space group costs + # nothing extra - and a symmetry report that gives the crystal + # system and the point group but not the group itself is + # missing the one label everybody actually cites. + numbers[i] = float(analyzer.get_space_group_number()) + group_symbols[i] = str(analyzer.get_space_group_symbol()) symbols = list( analyzer.get_symmetrized_structure().wyckoff_symbols) wyckoff[i] = ", ".join(str(w) for w in symbols) @@ -993,6 +1003,8 @@ def symmetry(md: AnnData, source: str = "input", symprec: float = 0.01) -> None: md.obs["crystal_system"] = systems.astype(str) md.obs["point_group"] = points.astype(str) + md.obs["spacegroup_number"] = numbers + md.obs["spacegroup_symbol"] = group_symbols.astype(str) md.obs["n_symmetry_operations"] = orders md.obs["n_wyckoff"] = wyckoff_count md.obs["wyckoff"] = wyckoff.astype(str) diff --git a/matverse/prop.py b/matverse/prop.py index f118725..a4a177e 100644 --- a/matverse/prop.py +++ b/matverse/prop.py @@ -229,7 +229,22 @@ def elastic(md: AnnData, level: str = "emt", source: str = "input", "absolute volume: materials of different size have no common volume " "axis, and the strain series they were computed on is common by " "construction. obs['eos_residual'] is the RMS misfit in eV/atom; a " - "value far above a meV is a fit that should not be read.", + "value far above a meV is a fit that should not be read.\n\n" + "**With a plane-wave DFT calculator, hold the k-point mesh fixed " + "across the scan.** A mesh set by a k-point *density* changes " + "discretely as the cell grows, and each change puts a step in E(V) " + "that the fit reads as curvature. On silicon with GPAW, varying " + "nothing but the k-points, the bulk modulus went -879, 319, 125 and " + "85.7 GPa at densities of 2.0, 2.5, 3.0 and 4.0, against 88.7 GPa " + "from the same calculator at a fixed 8x8x8 and a PBE literature " + "88-89. A negative bulk modulus is not a soft crystal; it is a " + "discontinuity. Raising the density only shrinks the jump.\n\n" + "obs['eos_residual'] catches it before the modulus does, and by a " + "wide margin: 9.5 meV/atom for the density-2.0 fit against 0.002 " + "for the fixed mesh, a factor of nearly five thousand. The existing " + "advice above — a residual far above a meV is a fit that should not " + "be read — was already enough to reject it. The built-in gpaw-pbe " + "levels use a fixed mesh so the situation does not arise.", ) def eos(md: AnnData, level: str = "emt", source: str = "input", scales=None, model: str = "birch_murnaghan", diff --git a/matverse_guide/docs/_scripts/nb_chemical_space.py b/matverse_guide/docs/_scripts/nb_chemical_space.py index 36b234a..01fccdc 100644 --- a/matverse_guide/docs/_scripts/nb_chemical_space.py +++ b/matverse_guide/docs/_scripts/nb_chemical_space.py @@ -456,6 +456,27 @@ def mass_and_volume(structures): and everything else work on it unchanged. The funnel is now complete: elements → compositions → structures → energies. +`mv.pl.spacegroups` shows the distribution, and putting the requested and the +achieved group side by side is how the difference stops being a column nobody +reads. Bars are grouped and coloured by crystal system rather than plotted as +230 flat categories, because the number itself carries no order a reader can +use — 62 is not "between" 61 and 63 in any sense that matters, but Pnma being +orthorhombic does."""), + + ("code", """\ +try: + ax = mv.pl.spacegroups(many, column="space_group", + compare="requested_space_group") + ax.set_title("requested (hollow) vs achieved (filled)") +except (ImportError, NameError, ValueError) as exc: + print("needs PyXtal and matplotlib:", exc)"""), + + ("markdown", """\ +It also works on any dataset that has been through `mv.pp.symmetry`, which now +records `spacegroup_number` and `spacegroup_symbol` alongside the crystal system +and point group — the analyser was already being built, so the group itself cost +nothing to report and is the one label everybody actually cites. + ```{seealso} [Beyond one number](beyond_one_number.ipynb) covers the results that are not a single number per material: curves, per-atom values and measurements. diff --git a/matverse_guide/docs/api/user.md b/matverse_guide/docs/api/user.md index d28de4d..5c3be8a 100644 --- a/matverse_guide/docs/api/user.md +++ b/matverse_guide/docs/api/user.md @@ -12,7 +12,7 @@ agent. Every entry names the state it reads and the state it writes, and each of those claims is verified by execution in `tests/test_contracts.py` rather than asserted. -Public registry entries listed here: 213 +Public registry entries listed here: 214 Look a function up by intent rather than by name: @@ -422,6 +422,7 @@ Publication defaults; every function draws onto an axis and returns it. pl.rank_elements_groups pl.scatter pl.set_style + pl.spacegroups pl.spectra pl.structure ``` @@ -586,7 +587,7 @@ arguments — `obs['energy_{level}']` becomes `obs['energy_emt']` when you pass | `mv.pp.standardize` | `obsm['structures']['primitive']`, `obsm['structures']['conventional']`, `obs['spacegroup']`, `obs['spacegroup_number']`, `obs['crystal_system']`, `obs['nsites_primitive']` | | `mv.pp.strain` | `obsm['structures']['{name}']` | | `mv.pp.supercell` | `obsm['structures']['{name}']` | -| `mv.pp.symmetry` | `obs['crystal_system']`, `obs['point_group']`, `obs['n_symmetry_operations']`, `obs['n_wyckoff']`, `obs['wyckoff']`, `obs['min_site_symmetry']`, `obs['max_site_symmetry']` | +| `mv.pp.symmetry` | `obs['crystal_system']`, `obs['point_group']`, `obs['spacegroup_number']`, `obs['spacegroup_symbol']`, `obs['n_symmetry_operations']`, `obs['n_wyckoff']`, `obs['wyckoff']`, `obs['min_site_symmetry']`, `obs['max_site_symmetry']` | | `mv.feat.element_stats` | `obsm['X_element_stats']`, `uns['features']['X_element_stats']` | | `mv.feat.embed` | `obsm['X_{model}']`, `uns['features']['X_{model}']` | | `mv.feat.matminer` | `obsm['X_matminer']`, `uns['features']['X_matminer']` | diff --git a/matverse_guide/docs/tutorials/beyond_one_number.ipynb b/matverse_guide/docs/tutorials/beyond_one_number.ipynb index c25425b..622c0b4 100644 --- a/matverse_guide/docs/tutorials/beyond_one_number.ipynb +++ b/matverse_guide/docs/tutorials/beyond_one_number.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2b196877", + "id": "4ac8ef0d", "metadata": {}, "source": [ "# Beyond one number per material\n", @@ -19,13 +19,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "f6a09cab", + "id": "b6dc6942", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:36.697928Z", - "iopub.status.busy": "2026-08-03T06:21:36.697851Z", - "iopub.status.idle": "2026-08-03T06:21:39.798749Z", - "shell.execute_reply": "2026-08-03T06:21:39.798328Z" + "iopub.execute_input": "2026-08-04T13:19:55.873566Z", + "iopub.status.busy": "2026-08-04T13:19:55.873463Z", + "iopub.status.idle": "2026-08-04T13:20:00.801933Z", + "shell.execute_reply": "2026-08-04T13:20:00.801273Z" } }, "outputs": [ @@ -33,20 +33,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -56,7 +62,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -72,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "dcf0b579", + "id": "f994d5bd", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -85,13 +91,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "83807438", + "id": "68062a4c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:39.800075Z", - "iopub.status.busy": "2026-08-03T06:21:39.799787Z", - "iopub.status.idle": "2026-08-03T06:21:39.857087Z", - "shell.execute_reply": "2026-08-03T06:21:39.856677Z" + "iopub.execute_input": "2026-08-04T13:20:00.803466Z", + "iopub.status.busy": "2026-08-04T13:20:00.803063Z", + "iopub.status.idle": "2026-08-04T13:20:00.830558Z", + "shell.execute_reply": "2026-08-04T13:20:00.830041Z" } }, "outputs": [ @@ -205,7 +211,7 @@ }, { "cell_type": "markdown", - "id": "4125e673", + "id": "5629365f", "metadata": {}, "source": [ "## Curves live in `obsm` on a shared grid\n", @@ -219,13 +225,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "84c1d71a", + "id": "834982e6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:39.857911Z", - "iopub.status.busy": "2026-08-03T06:21:39.857813Z", - "iopub.status.idle": "2026-08-03T06:21:40.134791Z", - "shell.execute_reply": "2026-08-03T06:21:40.134422Z" + "iopub.execute_input": "2026-08-04T13:20:00.831628Z", + "iopub.status.busy": "2026-08-04T13:20:00.831487Z", + "iopub.status.idle": "2026-08-04T13:20:00.918594Z", + "shell.execute_reply": "2026-08-04T13:20:00.917873Z" } }, "outputs": [ @@ -248,7 +254,7 @@ }, { "cell_type": "markdown", - "id": "679dc3a6", + "id": "e5f1db4e", "metadata": {}, "source": [ "The block is named `'_'`, exactly like a scalar:\n", @@ -274,13 +280,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "a1b5af10", + "id": "faacda57", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.136034Z", - "iopub.status.busy": "2026-08-03T06:21:40.135770Z", - "iopub.status.idle": "2026-08-03T06:21:40.138423Z", - "shell.execute_reply": "2026-08-03T06:21:40.138079Z" + "iopub.execute_input": "2026-08-04T13:20:00.919811Z", + "iopub.status.busy": "2026-08-04T13:20:00.919679Z", + "iopub.status.idle": "2026-08-04T13:20:00.922972Z", + "shell.execute_reply": "2026-08-04T13:20:00.922151Z" } }, "outputs": [ @@ -306,13 +312,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "35517dee", + "id": "ebcebf9a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.139187Z", - "iopub.status.busy": "2026-08-03T06:21:40.139099Z", - "iopub.status.idle": "2026-08-03T06:21:40.398810Z", - "shell.execute_reply": "2026-08-03T06:21:40.398386Z" + "iopub.execute_input": "2026-08-04T13:20:00.924004Z", + "iopub.status.busy": "2026-08-04T13:20:00.923885Z", + "iopub.status.idle": "2026-08-04T13:20:01.283910Z", + "shell.execute_reply": "2026-08-04T13:20:01.282488Z" } }, "outputs": [ @@ -349,7 +355,7 @@ }, { "cell_type": "markdown", - "id": "0246f520", + "id": "d7ec89fb", "metadata": {}, "source": [ "`mv.prop.rdf` is the other curve that ships, and it earns its place by doing\n", @@ -359,13 +365,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "878f9593", + "id": "682e5edc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.399820Z", - "iopub.status.busy": "2026-08-03T06:21:40.399670Z", - "iopub.status.idle": "2026-08-03T06:21:40.560097Z", - "shell.execute_reply": "2026-08-03T06:21:40.559663Z" + "iopub.execute_input": "2026-08-04T13:20:01.285901Z", + "iopub.status.busy": "2026-08-04T13:20:01.285761Z", + "iopub.status.idle": "2026-08-04T13:20:01.456085Z", + "shell.execute_reply": "2026-08-04T13:20:01.455353Z" } }, "outputs": [ @@ -404,7 +410,7 @@ }, { "cell_type": "markdown", - "id": "1cb9b551", + "id": "4a125fa7", "metadata": {}, "source": [ "Two polymorphs have the same composition, so `X` cannot tell them apart and\n", @@ -425,13 +431,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "f5f8eb43", + "id": "c67fbd1b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.560978Z", - "iopub.status.busy": "2026-08-03T06:21:40.560887Z", - "iopub.status.idle": "2026-08-03T06:21:40.565150Z", - "shell.execute_reply": "2026-08-03T06:21:40.564813Z" + "iopub.execute_input": "2026-08-04T13:20:01.457179Z", + "iopub.status.busy": "2026-08-04T13:20:01.457048Z", + "iopub.status.idle": "2026-08-04T13:20:01.462775Z", + "shell.execute_reply": "2026-08-04T13:20:01.462318Z" } }, "outputs": [ @@ -454,13 +460,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "818aa229", + "id": "1e975c97", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.565877Z", - "iopub.status.busy": "2026-08-03T06:21:40.565793Z", - "iopub.status.idle": "2026-08-03T06:21:40.572355Z", - "shell.execute_reply": "2026-08-03T06:21:40.572005Z" + "iopub.execute_input": "2026-08-04T13:20:01.463825Z", + "iopub.status.busy": "2026-08-04T13:20:01.463697Z", + "iopub.status.idle": "2026-08-04T13:20:01.473067Z", + "shell.execute_reply": "2026-08-04T13:20:01.472426Z" } }, "outputs": [ @@ -488,13 +494,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "4997179d", + "id": "5cea1aef", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.573075Z", - "iopub.status.busy": "2026-08-03T06:21:40.572987Z", - "iopub.status.idle": "2026-08-03T06:21:40.577609Z", - "shell.execute_reply": "2026-08-03T06:21:40.577247Z" + "iopub.execute_input": "2026-08-04T13:20:01.474162Z", + "iopub.status.busy": "2026-08-04T13:20:01.474021Z", + "iopub.status.idle": "2026-08-04T13:20:01.480080Z", + "shell.execute_reply": "2026-08-04T13:20:01.479668Z" } }, "outputs": [ @@ -609,7 +615,7 @@ }, { "cell_type": "markdown", - "id": "f0ccc44b", + "id": "8b0d113b", "metadata": {}, "source": [ "One row per atom, with `obs['material']` pointing back at the parent. Per-atom\n", @@ -619,13 +625,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "9fbf58ec", + "id": "b22e1ec6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.578404Z", - "iopub.status.busy": "2026-08-03T06:21:40.578317Z", - "iopub.status.idle": "2026-08-03T06:21:40.629901Z", - "shell.execute_reply": "2026-08-03T06:21:40.629518Z" + "iopub.execute_input": "2026-08-04T13:20:01.481220Z", + "iopub.status.busy": "2026-08-04T13:20:01.481090Z", + "iopub.status.idle": "2026-08-04T13:20:01.507778Z", + "shell.execute_reply": "2026-08-04T13:20:01.506849Z" } }, "outputs": [ @@ -649,13 +655,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "00ce283b", + "id": "eb04e3db", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.630723Z", - "iopub.status.busy": "2026-08-03T06:21:40.630632Z", - "iopub.status.idle": "2026-08-03T06:21:40.635683Z", - "shell.execute_reply": "2026-08-03T06:21:40.635320Z" + "iopub.execute_input": "2026-08-04T13:20:01.508979Z", + "iopub.status.busy": "2026-08-04T13:20:01.508840Z", + "iopub.status.idle": "2026-08-04T13:20:01.515670Z", + "shell.execute_reply": "2026-08-04T13:20:01.515248Z" } }, "outputs": [ @@ -762,13 +768,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "ce7c8b1c", + "id": "5e0a4da2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.636434Z", - "iopub.status.busy": "2026-08-03T06:21:40.636349Z", - "iopub.status.idle": "2026-08-03T06:21:40.729966Z", - "shell.execute_reply": "2026-08-03T06:21:40.729588Z" + "iopub.execute_input": "2026-08-04T13:20:01.516843Z", + "iopub.status.busy": "2026-08-04T13:20:01.516705Z", + "iopub.status.idle": "2026-08-04T13:20:01.618130Z", + "shell.execute_reply": "2026-08-04T13:20:01.617398Z" } }, "outputs": [ @@ -808,7 +814,7 @@ }, { "cell_type": "markdown", - "id": "49a0304e", + "id": "a3c8d8a2", "metadata": {}, "source": [ "One point per atom says which atoms are unrelaxed. The other question is what\n", @@ -820,13 +826,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "9d8fbeb4", + "id": "1c1dd78b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.730842Z", - "iopub.status.busy": "2026-08-03T06:21:40.730755Z", - "iopub.status.idle": "2026-08-03T06:21:40.916314Z", - "shell.execute_reply": "2026-08-03T06:21:40.915815Z" + "iopub.execute_input": "2026-08-04T13:20:01.619313Z", + "iopub.status.busy": "2026-08-04T13:20:01.619180Z", + "iopub.status.idle": "2026-08-04T13:20:01.818818Z", + "shell.execute_reply": "2026-08-04T13:20:01.818332Z" } }, "outputs": [ @@ -864,7 +870,7 @@ }, { "cell_type": "markdown", - "id": "d7c40195", + "id": "8af8ec8b", "metadata": {}, "source": [ "Shared bins across the elements, which is the only way the two are being\n", @@ -875,7 +881,7 @@ }, { "cell_type": "markdown", - "id": "b68bdc8e", + "id": "1263201a", "metadata": {}, "source": [ "Twenty-six points where the material axis has room for seven — which is the\n", @@ -900,13 +906,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "22fe53c5", + "id": "951d71b0", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.917213Z", - "iopub.status.busy": "2026-08-03T06:21:40.917125Z", - "iopub.status.idle": "2026-08-03T06:21:40.922270Z", - "shell.execute_reply": "2026-08-03T06:21:40.921904Z" + "iopub.execute_input": "2026-08-04T13:20:01.820204Z", + "iopub.status.busy": "2026-08-04T13:20:01.820072Z", + "iopub.status.idle": "2026-08-04T13:20:01.827534Z", + "shell.execute_reply": "2026-08-04T13:20:01.826949Z" } }, "outputs": [ @@ -999,7 +1005,7 @@ }, { "cell_type": "markdown", - "id": "be61886b", + "id": "c648d8ac", "metadata": {}, "source": [ "The largest force in each cell, on the material axis, where a screen can reach\n", @@ -1010,13 +1016,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "669c27f2", + "id": "787bc731", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.922995Z", - "iopub.status.busy": "2026-08-03T06:21:40.922911Z", - "iopub.status.idle": "2026-08-03T06:21:40.927846Z", - "shell.execute_reply": "2026-08-03T06:21:40.927497Z" + "iopub.execute_input": "2026-08-04T13:20:01.828531Z", + "iopub.status.busy": "2026-08-04T13:20:01.828408Z", + "iopub.status.idle": "2026-08-04T13:20:01.835211Z", + "shell.execute_reply": "2026-08-04T13:20:01.834711Z" } }, "outputs": [ @@ -1116,7 +1122,7 @@ }, { "cell_type": "markdown", - "id": "e4117bf0", + "id": "dda55af4", "metadata": {}, "source": [ "The detail stays on the sites object where it can still be inspected; the\n", @@ -1132,13 +1138,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "8d31192c", + "id": "513b8ce8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.928544Z", - "iopub.status.busy": "2026-08-03T06:21:40.928465Z", - "iopub.status.idle": "2026-08-03T06:21:40.939346Z", - "shell.execute_reply": "2026-08-03T06:21:40.938964Z" + "iopub.execute_input": "2026-08-04T13:20:01.836158Z", + "iopub.status.busy": "2026-08-04T13:20:01.836035Z", + "iopub.status.idle": "2026-08-04T13:20:01.848335Z", + "shell.execute_reply": "2026-08-04T13:20:01.847800Z" } }, "outputs": [ @@ -1222,7 +1228,7 @@ }, { "cell_type": "markdown", - "id": "4275099a", + "id": "c9b775d0", "metadata": {}, "source": [ "That is `rank_genes_groups` answering \"which elements sit in the highest-force\n", @@ -1234,13 +1240,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "e23cc32e", + "id": "fb7b70e1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.940086Z", - "iopub.status.busy": "2026-08-03T06:21:40.940001Z", - "iopub.status.idle": "2026-08-03T06:21:40.967985Z", - "shell.execute_reply": "2026-08-03T06:21:40.967599Z" + "iopub.execute_input": "2026-08-04T13:20:01.849494Z", + "iopub.status.busy": "2026-08-04T13:20:01.849362Z", + "iopub.status.idle": "2026-08-04T13:20:01.880606Z", + "shell.execute_reply": "2026-08-04T13:20:01.880074Z" } }, "outputs": [ @@ -1295,7 +1301,7 @@ }, { "cell_type": "markdown", - "id": "6833a9a0", + "id": "4ada43a0", "metadata": {}, "source": [ "Optional throughout. matverse's operations take `AnnData`, and the sites object\n", @@ -1306,13 +1312,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "c36ac53e", + "id": "db849c37", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:40.968820Z", - "iopub.status.busy": "2026-08-03T06:21:40.968734Z", - "iopub.status.idle": "2026-08-03T06:21:41.269609Z", - "shell.execute_reply": "2026-08-03T06:21:41.269200Z" + "iopub.execute_input": "2026-08-04T13:20:01.881596Z", + "iopub.status.busy": "2026-08-04T13:20:01.881485Z", + "iopub.status.idle": "2026-08-04T13:20:02.188409Z", + "shell.execute_reply": "2026-08-04T13:20:02.185625Z" } }, "outputs": [ @@ -1421,7 +1427,7 @@ }, { "cell_type": "markdown", - "id": "651b9ce3", + "id": "606d258c", "metadata": {}, "source": [ "A TEM pattern is spots on a plane, and a plane of spots does not compare across\n", @@ -1445,7 +1451,7 @@ }, { "cell_type": "markdown", - "id": "69ff8b73", + "id": "b0e905f5", "metadata": {}, "source": [ "## A result computed somewhere else\n", @@ -1474,13 +1480,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "82236dc4", + "id": "b32d8efa", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.270527Z", - "iopub.status.busy": "2026-08-03T06:21:41.270439Z", - "iopub.status.idle": "2026-08-03T06:21:41.284111Z", - "shell.execute_reply": "2026-08-03T06:21:41.283724Z" + "iopub.execute_input": "2026-08-04T13:20:02.189803Z", + "iopub.status.busy": "2026-08-04T13:20:02.189660Z", + "iopub.status.idle": "2026-08-04T13:20:02.206451Z", + "shell.execute_reply": "2026-08-04T13:20:02.205686Z" } }, "outputs": [ @@ -1589,7 +1595,7 @@ }, { "cell_type": "markdown", - "id": "bb1fd0e1", + "id": "79f66561", "metadata": {}, "source": [ "`sigma_iso` is 30, the trace over three. `zeta` is 30, which is\n", @@ -1611,13 +1617,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "d19d487a", + "id": "7bc45c80", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.284964Z", - "iopub.status.busy": "2026-08-03T06:21:41.284878Z", - "iopub.status.idle": "2026-08-03T06:21:41.301805Z", - "shell.execute_reply": "2026-08-03T06:21:41.301414Z" + "iopub.execute_input": "2026-08-04T13:20:02.207491Z", + "iopub.status.busy": "2026-08-04T13:20:02.207377Z", + "iopub.status.idle": "2026-08-04T13:20:02.227083Z", + "shell.execute_reply": "2026-08-04T13:20:02.226657Z" } }, "outputs": [ @@ -1712,7 +1718,7 @@ }, { "cell_type": "markdown", - "id": "e9f02708", + "id": "347fc872", "metadata": {}, "source": [ "The coupling constant is the only one of the three that needs to know which\n", @@ -1729,13 +1735,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "496c0e12", + "id": "76c94c26", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.302650Z", - "iopub.status.busy": "2026-08-03T06:21:41.302553Z", - "iopub.status.idle": "2026-08-03T06:21:41.330557Z", - "shell.execute_reply": "2026-08-03T06:21:41.330154Z" + "iopub.execute_input": "2026-08-04T13:20:02.228530Z", + "iopub.status.busy": "2026-08-04T13:20:02.228403Z", + "iopub.status.idle": "2026-08-04T13:20:02.259439Z", + "shell.execute_reply": "2026-08-04T13:20:02.258986Z" } }, "outputs": [ @@ -1806,7 +1812,7 @@ }, { "cell_type": "markdown", - "id": "4b13ee38", + "id": "0a959b6f", "metadata": {}, "source": [ "**2.30 pC/N**, recovered from the tensor without being told where to look. For\n", @@ -1823,13 +1829,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "82026e0c", + "id": "13f5ddbf", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.331344Z", - "iopub.status.busy": "2026-08-03T06:21:41.331255Z", - "iopub.status.idle": "2026-08-03T06:21:41.392179Z", - "shell.execute_reply": "2026-08-03T06:21:41.391776Z" + "iopub.execute_input": "2026-08-04T13:20:02.260605Z", + "iopub.status.busy": "2026-08-04T13:20:02.260411Z", + "iopub.status.idle": "2026-08-04T13:20:02.325518Z", + "shell.execute_reply": "2026-08-04T13:20:02.324934Z" } }, "outputs": [ @@ -1854,7 +1860,7 @@ }, { "cell_type": "markdown", - "id": "13824ba3", + "id": "9d39f944", "metadata": {}, "source": [ "`False` — and a non-zero piezoelectric tensor on an fcc metal is an error in the\n", @@ -1872,13 +1878,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "79fa7cfd", + "id": "3685b4a8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.393050Z", - "iopub.status.busy": "2026-08-03T06:21:41.392956Z", - "iopub.status.idle": "2026-08-03T06:21:41.397135Z", - "shell.execute_reply": "2026-08-03T06:21:41.396783Z" + "iopub.execute_input": "2026-08-04T13:20:02.326565Z", + "iopub.status.busy": "2026-08-04T13:20:02.326428Z", + "iopub.status.idle": "2026-08-04T13:20:02.331588Z", + "shell.execute_reply": "2026-08-04T13:20:02.331042Z" } }, "outputs": [ @@ -1912,13 +1918,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "2bd23610", + "id": "565e91e9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.397868Z", - "iopub.status.busy": "2026-08-03T06:21:41.397783Z", - "iopub.status.idle": "2026-08-03T06:21:41.546729Z", - "shell.execute_reply": "2026-08-03T06:21:41.546332Z" + "iopub.execute_input": "2026-08-04T13:20:02.332583Z", + "iopub.status.busy": "2026-08-04T13:20:02.332453Z", + "iopub.status.idle": "2026-08-04T13:20:02.486929Z", + "shell.execute_reply": "2026-08-04T13:20:02.486496Z" } }, "outputs": [ @@ -2019,7 +2025,7 @@ }, { "cell_type": "markdown", - "id": "0a2f24c5", + "id": "0c485975", "metadata": {}, "source": [ "Read the first three rows against the last four.\n", @@ -2050,13 +2056,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "b3dd6c2b", + "id": "faa9e890", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.547582Z", - "iopub.status.busy": "2026-08-03T06:21:41.547487Z", - "iopub.status.idle": "2026-08-03T06:21:41.650863Z", - "shell.execute_reply": "2026-08-03T06:21:41.650402Z" + "iopub.execute_input": "2026-08-04T13:20:02.488192Z", + "iopub.status.busy": "2026-08-04T13:20:02.488039Z", + "iopub.status.idle": "2026-08-04T13:20:02.592728Z", + "shell.execute_reply": "2026-08-04T13:20:02.592184Z" } }, "outputs": [ @@ -2131,7 +2137,7 @@ }, { "cell_type": "markdown", - "id": "a1db34fa", + "id": "4f738492", "metadata": {}, "source": [ "That is the penalty silicon pays, and the reason a direct-gap absorber a tenth\n", @@ -2147,13 +2153,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "d22efb94", + "id": "3289962a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.651722Z", - "iopub.status.busy": "2026-08-03T06:21:41.651634Z", - "iopub.status.idle": "2026-08-03T06:21:41.677996Z", - "shell.execute_reply": "2026-08-03T06:21:41.677608Z" + "iopub.execute_input": "2026-08-04T13:20:02.593845Z", + "iopub.status.busy": "2026-08-04T13:20:02.593714Z", + "iopub.status.idle": "2026-08-04T13:20:02.620659Z", + "shell.execute_reply": "2026-08-04T13:20:02.620118Z" } }, "outputs": [ @@ -2260,7 +2266,7 @@ }, { "cell_type": "markdown", - "id": "55172e56", + "id": "2ff9f6c4", "metadata": {}, "source": [ "Three numbers, three levels, one table, and nobody had to decide which one is\n", @@ -2271,13 +2277,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "db29737d", + "id": "f4821463", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.678819Z", - "iopub.status.busy": "2026-08-03T06:21:41.678734Z", - "iopub.status.idle": "2026-08-03T06:21:41.680922Z", - "shell.execute_reply": "2026-08-03T06:21:41.680614Z" + "iopub.execute_input": "2026-08-04T13:20:02.621666Z", + "iopub.status.busy": "2026-08-04T13:20:02.621532Z", + "iopub.status.idle": "2026-08-04T13:20:02.624732Z", + "shell.execute_reply": "2026-08-04T13:20:02.624163Z" } }, "outputs": [ @@ -2305,13 +2311,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "7f7c359b", + "id": "a6e9f155", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.681608Z", - "iopub.status.busy": "2026-08-03T06:21:41.681528Z", - "iopub.status.idle": "2026-08-03T06:21:41.782447Z", - "shell.execute_reply": "2026-08-03T06:21:41.782035Z" + "iopub.execute_input": "2026-08-04T13:20:02.626034Z", + "iopub.status.busy": "2026-08-04T13:20:02.625928Z", + "iopub.status.idle": "2026-08-04T13:20:02.729837Z", + "shell.execute_reply": "2026-08-04T13:20:02.729310Z" } }, "outputs": [ @@ -2337,7 +2343,7 @@ }, { "cell_type": "markdown", - "id": "67727ccb", + "id": "4b706d90", "metadata": {}, "source": [ "`mv.pl.parity` annotates the error and — the useful bit — prints a warning on\n", @@ -2354,13 +2360,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "6fd2ec70", + "id": "34a142c8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.783253Z", - "iopub.status.busy": "2026-08-03T06:21:41.783159Z", - "iopub.status.idle": "2026-08-03T06:21:41.789800Z", - "shell.execute_reply": "2026-08-03T06:21:41.789424Z" + "iopub.execute_input": "2026-08-04T13:20:02.730913Z", + "iopub.status.busy": "2026-08-04T13:20:02.730783Z", + "iopub.status.idle": "2026-08-04T13:20:02.738524Z", + "shell.execute_reply": "2026-08-04T13:20:02.737952Z" } }, "outputs": [ @@ -2467,20 +2473,20 @@ { "cell_type": "code", "execution_count": 30, - "id": "6a9f2563", + "id": "a898a873", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.790579Z", - "iopub.status.busy": "2026-08-03T06:21:41.790493Z", - "iopub.status.idle": "2026-08-03T06:21:41.937219Z", - "shell.execute_reply": "2026-08-03T06:21:41.936813Z" + "iopub.execute_input": "2026-08-04T13:20:02.739523Z", + "iopub.status.busy": "2026-08-04T13:20:02.739394Z", + "iopub.status.idle": "2026-08-04T13:20:02.897619Z", + "shell.execute_reply": "2026-08-04T13:20:02.897083Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 30, @@ -2516,7 +2522,7 @@ }, { "cell_type": "markdown", - "id": "f4fd1183", + "id": "ba4e025c", "metadata": {}, "source": [ "Both patterns are baseline-shifted and unit-normalised before the dot product,\n", @@ -2527,13 +2533,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "e2c4bb4a", + "id": "1618cabd", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.938082Z", - "iopub.status.busy": "2026-08-03T06:21:41.937991Z", - "iopub.status.idle": "2026-08-03T06:21:41.940248Z", - "shell.execute_reply": "2026-08-03T06:21:41.939939Z" + "iopub.execute_input": "2026-08-04T13:20:02.899014Z", + "iopub.status.busy": "2026-08-04T13:20:02.898904Z", + "iopub.status.idle": "2026-08-04T13:20:02.902021Z", + "shell.execute_reply": "2026-08-04T13:20:02.901184Z" } }, "outputs": [ @@ -2554,7 +2560,7 @@ }, { "cell_type": "markdown", - "id": "1e3359be", + "id": "e3e2b9b9", "metadata": {}, "source": [ "```{warning}\n", @@ -2573,13 +2579,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "34ad4de3", + "id": "6714f897", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.940932Z", - "iopub.status.busy": "2026-08-03T06:21:41.940851Z", - "iopub.status.idle": "2026-08-03T06:21:41.947655Z", - "shell.execute_reply": "2026-08-03T06:21:41.947333Z" + "iopub.execute_input": "2026-08-04T13:20:02.903287Z", + "iopub.status.busy": "2026-08-04T13:20:02.903084Z", + "iopub.status.idle": "2026-08-04T13:20:02.910879Z", + "shell.execute_reply": "2026-08-04T13:20:02.910444Z" } }, "outputs": [ @@ -2688,7 +2694,7 @@ }, { "cell_type": "markdown", - "id": "0664949d", + "id": "7ce8bebc", "metadata": {}, "source": [ "Measurements are resampled onto the existing grid, because two curves on\n", @@ -2719,13 +2725,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "672b6ab4", + "id": "68d10fbb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:41.948377Z", - "iopub.status.busy": "2026-08-03T06:21:41.948295Z", - "iopub.status.idle": "2026-08-03T06:21:42.005252Z", - "shell.execute_reply": "2026-08-03T06:21:42.004894Z" + "iopub.execute_input": "2026-08-04T13:20:02.911990Z", + "iopub.status.busy": "2026-08-04T13:20:02.911886Z", + "iopub.status.idle": "2026-08-04T13:20:02.973226Z", + "shell.execute_reply": "2026-08-04T13:20:02.972629Z" } }, "outputs": [ @@ -2888,13 +2894,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "19a6281f", + "id": "9348abe1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.006001Z", - "iopub.status.busy": "2026-08-03T06:21:42.005916Z", - "iopub.status.idle": "2026-08-03T06:21:42.009764Z", - "shell.execute_reply": "2026-08-03T06:21:42.009433Z" + "iopub.execute_input": "2026-08-04T13:20:02.974262Z", + "iopub.status.busy": "2026-08-04T13:20:02.974127Z", + "iopub.status.idle": "2026-08-04T13:20:02.978902Z", + "shell.execute_reply": "2026-08-04T13:20:02.978468Z" } }, "outputs": [ @@ -2922,7 +2928,7 @@ }, { "cell_type": "markdown", - "id": "484ff9a2", + "id": "d08c728c", "metadata": {}, "source": [ "The fitted offsets should recover the ones put in — 0.10, −0.06 and 0.03:" @@ -2931,13 +2937,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "0082f717", + "id": "361f0e4e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.010502Z", - "iopub.status.busy": "2026-08-03T06:21:42.010417Z", - "iopub.status.idle": "2026-08-03T06:21:42.013168Z", - "shell.execute_reply": "2026-08-03T06:21:42.012867Z" + "iopub.execute_input": "2026-08-04T13:20:02.980012Z", + "iopub.status.busy": "2026-08-04T13:20:02.979870Z", + "iopub.status.idle": "2026-08-04T13:20:02.983505Z", + "shell.execute_reply": "2026-08-04T13:20:02.982983Z" } }, "outputs": [ @@ -2964,13 +2970,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "e20b2122", + "id": "8046df1c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.013872Z", - "iopub.status.busy": "2026-08-03T06:21:42.013789Z", - "iopub.status.idle": "2026-08-03T06:21:42.183983Z", - "shell.execute_reply": "2026-08-03T06:21:42.183613Z" + "iopub.execute_input": "2026-08-04T13:20:02.984481Z", + "iopub.status.busy": "2026-08-04T13:20:02.984364Z", + "iopub.status.idle": "2026-08-04T13:20:03.166615Z", + "shell.execute_reply": "2026-08-04T13:20:03.166089Z" } }, "outputs": [ @@ -3007,7 +3013,7 @@ }, { "cell_type": "markdown", - "id": "e22ec7ee", + "id": "067a2f53", "metadata": {}, "source": [ "Same materials, two databases, plotted against each other. Before, they scatter\n", @@ -3036,13 +3042,13 @@ { "cell_type": "code", "execution_count": 37, - "id": "9d00eebb", + "id": "e533daee", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.184763Z", - "iopub.status.busy": "2026-08-03T06:21:42.184675Z", - "iopub.status.idle": "2026-08-03T06:21:42.201654Z", - "shell.execute_reply": "2026-08-03T06:21:42.201263Z" + "iopub.execute_input": "2026-08-04T13:20:03.167768Z", + "iopub.status.busy": "2026-08-04T13:20:03.167563Z", + "iopub.status.idle": "2026-08-04T13:20:03.184359Z", + "shell.execute_reply": "2026-08-04T13:20:03.183838Z" } }, "outputs": [ @@ -3152,13 +3158,13 @@ { "cell_type": "code", "execution_count": 38, - "id": "fd374598", + "id": "b5b5edce", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.202450Z", - "iopub.status.busy": "2026-08-03T06:21:42.202363Z", - "iopub.status.idle": "2026-08-03T06:21:42.208127Z", - "shell.execute_reply": "2026-08-03T06:21:42.207781Z" + "iopub.execute_input": "2026-08-04T13:20:03.185529Z", + "iopub.status.busy": "2026-08-04T13:20:03.185397Z", + "iopub.status.idle": "2026-08-04T13:20:03.191846Z", + "shell.execute_reply": "2026-08-04T13:20:03.191397Z" } }, "outputs": [ @@ -3186,7 +3192,7 @@ }, { "cell_type": "markdown", - "id": "2c8e5c9c", + "id": "d0f6882f", "metadata": {}, "source": [ "Validity, uniqueness, novelty and stability use LeMat-GenBench's definitions\n", @@ -3196,13 +3202,13 @@ { "cell_type": "code", "execution_count": 39, - "id": "a2f36052", + "id": "15dd28b1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.208852Z", - "iopub.status.busy": "2026-08-03T06:21:42.208764Z", - "iopub.status.idle": "2026-08-03T06:21:42.210873Z", - "shell.execute_reply": "2026-08-03T06:21:42.210573Z" + "iopub.execute_input": "2026-08-04T13:20:03.192922Z", + "iopub.status.busy": "2026-08-04T13:20:03.192791Z", + "iopub.status.idle": "2026-08-04T13:20:03.195448Z", + "shell.execute_reply": "2026-08-04T13:20:03.195040Z" } }, "outputs": [ @@ -3233,7 +3239,7 @@ }, { "cell_type": "markdown", - "id": "f91909d3", + "id": "dea36c30", "metadata": {}, "source": [ "That matters more than it looks. Until those definitions were pinned, the same\n", @@ -3251,13 +3257,13 @@ { "cell_type": "code", "execution_count": 40, - "id": "915f39e8", + "id": "8cce0bb3", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.211560Z", - "iopub.status.busy": "2026-08-03T06:21:42.211482Z", - "iopub.status.idle": "2026-08-03T06:21:42.213391Z", - "shell.execute_reply": "2026-08-03T06:21:42.213073Z" + "iopub.execute_input": "2026-08-04T13:20:03.196630Z", + "iopub.status.busy": "2026-08-04T13:20:03.196492Z", + "iopub.status.idle": "2026-08-04T13:20:03.199137Z", + "shell.execute_reply": "2026-08-04T13:20:03.198648Z" } }, "outputs": [ @@ -3278,7 +3284,7 @@ }, { "cell_type": "markdown", - "id": "33fb17b1", + "id": "ff680d46", "metadata": {}, "source": [ "Novelty means \"absent from the reference set you named\", which is a weaker claim\n", @@ -3302,13 +3308,13 @@ { "cell_type": "code", "execution_count": 41, - "id": "bf15d9d0", + "id": "2aa80a90", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:42.214078Z", - "iopub.status.busy": "2026-08-03T06:21:42.214006Z", - "iopub.status.idle": "2026-08-03T06:21:44.135086Z", - "shell.execute_reply": "2026-08-03T06:21:44.134449Z" + "iopub.execute_input": "2026-08-04T13:20:03.200226Z", + "iopub.status.busy": "2026-08-04T13:20:03.200090Z", + "iopub.status.idle": "2026-08-04T13:20:04.827297Z", + "shell.execute_reply": "2026-08-04T13:20:04.826790Z" } }, "outputs": [ @@ -3422,7 +3428,7 @@ }, { "cell_type": "markdown", - "id": "7169f3e5", + "id": "9cfb7870", "metadata": {}, "source": [ "From LiFePO₄ it reaches **LiVPO₄** and **LiTiPO₄** — both real olivine\n", @@ -3439,13 +3445,13 @@ { "cell_type": "code", "execution_count": 42, - "id": "2e2f0390", + "id": "3df1c523", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:44.136303Z", - "iopub.status.busy": "2026-08-03T06:21:44.136161Z", - "iopub.status.idle": "2026-08-03T06:21:44.806528Z", - "shell.execute_reply": "2026-08-03T06:21:44.806108Z" + "iopub.execute_input": "2026-08-04T13:20:04.828806Z", + "iopub.status.busy": "2026-08-04T13:20:04.828668Z", + "iopub.status.idle": "2026-08-04T13:20:05.735660Z", + "shell.execute_reply": "2026-08-04T13:20:05.735167Z" } }, "outputs": [ @@ -3508,7 +3514,7 @@ }, { "cell_type": "markdown", - "id": "bd4f2c13", + "id": "68780d82", "metadata": {}, "source": [ "Fluorine comes out as the n-type choice, which is the doping strategy LiFePO₄ is\n", @@ -3525,13 +3531,13 @@ { "cell_type": "code", "execution_count": 43, - "id": "fd2bd3dd", + "id": "381ff2f7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:44.807405Z", - "iopub.status.busy": "2026-08-03T06:21:44.807318Z", - "iopub.status.idle": "2026-08-03T06:21:44.919058Z", - "shell.execute_reply": "2026-08-03T06:21:44.918686Z" + "iopub.execute_input": "2026-08-04T13:20:05.736841Z", + "iopub.status.busy": "2026-08-04T13:20:05.736701Z", + "iopub.status.idle": "2026-08-04T13:20:05.857902Z", + "shell.execute_reply": "2026-08-04T13:20:05.857366Z" } }, "outputs": [ @@ -3639,7 +3645,7 @@ }, { "cell_type": "markdown", - "id": "68b3ef36", + "id": "153f1ced", "metadata": {}, "source": [ "No calculator involved — the prediction comes from tabulated bond lengths — and\n", @@ -3657,13 +3663,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "9a65bf43", + "id": "664aec1f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:44.919899Z", - "iopub.status.busy": "2026-08-03T06:21:44.919815Z", - "iopub.status.idle": "2026-08-03T06:21:45.868631Z", - "shell.execute_reply": "2026-08-03T06:21:45.868219Z" + "iopub.execute_input": "2026-08-04T13:20:05.858901Z", + "iopub.status.busy": "2026-08-04T13:20:05.858784Z", + "iopub.status.idle": "2026-08-04T13:20:06.671309Z", + "shell.execute_reply": "2026-08-04T13:20:06.670636Z" } }, "outputs": [ @@ -3725,7 +3731,7 @@ }, { "cell_type": "markdown", - "id": "d982e246", + "id": "c44a783d", "metadata": {}, "source": [ "From LiFePO₄ alone it builds **NaMnPO₄** — a real sodium-ion cathode — because\n", @@ -3750,7 +3756,7 @@ }, { "cell_type": "markdown", - "id": "7336f438", + "id": "ef612763", "metadata": {}, "source": [ "## Why a material is piezoelectric, not just how much\n", @@ -3768,13 +3774,13 @@ { "cell_type": "code", "execution_count": 45, - "id": "4e07bbb7", + "id": "614a2540", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:45.869511Z", - "iopub.status.busy": "2026-08-03T06:21:45.869424Z", - "iopub.status.idle": "2026-08-03T06:21:45.957889Z", - "shell.execute_reply": "2026-08-03T06:21:45.957492Z" + "iopub.execute_input": "2026-08-04T13:20:06.672479Z", + "iopub.status.busy": "2026-08-04T13:20:06.672340Z", + "iopub.status.idle": "2026-08-04T13:20:06.726168Z", + "shell.execute_reply": "2026-08-04T13:20:06.725636Z" } }, "outputs": [ @@ -3857,7 +3863,7 @@ }, { "cell_type": "markdown", - "id": "d02ce201", + "id": "56b5dc98", "metadata": {}, "source": [ "Doubling the Born charges doubles the response. Doubling the force constants\n", @@ -3881,7 +3887,7 @@ }, { "cell_type": "markdown", - "id": "3c4ceb22", + "id": "885f70ff", "metadata": {}, "source": [ "## The polarization that is not a number\n", @@ -3903,13 +3909,13 @@ { "cell_type": "code", "execution_count": 46, - "id": "681157d0", + "id": "218c602b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:45.958736Z", - "iopub.status.busy": "2026-08-03T06:21:45.958649Z", - "iopub.status.idle": "2026-08-03T06:21:45.966591Z", - "shell.execute_reply": "2026-08-03T06:21:45.966228Z" + "iopub.execute_input": "2026-08-04T13:20:06.727267Z", + "iopub.status.busy": "2026-08-04T13:20:06.727065Z", + "iopub.status.idle": "2026-08-04T13:20:06.736095Z", + "shell.execute_reply": "2026-08-04T13:20:06.735598Z" } }, "outputs": [ @@ -3943,7 +3949,7 @@ }, { "cell_type": "markdown", - "id": "10388288", + "id": "ac7f4f9c", "metadata": {}, "source": [ "Nothing about that sequence looks like a smooth ferroelectric switching path.\n", @@ -3957,13 +3963,13 @@ { "cell_type": "code", "execution_count": 47, - "id": "7a7a5e80", + "id": "6135ef58", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:45.967325Z", - "iopub.status.busy": "2026-08-03T06:21:45.967237Z", - "iopub.status.idle": "2026-08-03T06:21:45.975393Z", - "shell.execute_reply": "2026-08-03T06:21:45.975032Z" + "iopub.execute_input": "2026-08-04T13:20:06.737164Z", + "iopub.status.busy": "2026-08-04T13:20:06.737013Z", + "iopub.status.idle": "2026-08-04T13:20:06.747089Z", + "shell.execute_reply": "2026-08-04T13:20:06.746644Z" } }, "outputs": [ @@ -4000,7 +4006,7 @@ }, { "cell_type": "markdown", - "id": "7e57fcb7", + "id": "56d14307", "metadata": {}, "source": [ "The smooth path, recovered exactly, and a spontaneous polarization of\n", @@ -4023,7 +4029,7 @@ }, { "cell_type": "markdown", - "id": "12283185", + "id": "002a62df", "metadata": {}, "source": [ "## Corrections of your own\n", @@ -4041,13 +4047,13 @@ { "cell_type": "code", "execution_count": 48, - "id": "66db258c", + "id": "7f692ddb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:45.976129Z", - "iopub.status.busy": "2026-08-03T06:21:45.976044Z", - "iopub.status.idle": "2026-08-03T06:21:46.021683Z", - "shell.execute_reply": "2026-08-03T06:21:46.021350Z" + "iopub.execute_input": "2026-08-04T13:20:06.748395Z", + "iopub.status.busy": "2026-08-04T13:20:06.748251Z", + "iopub.status.idle": "2026-08-04T13:20:06.804653Z", + "shell.execute_reply": "2026-08-04T13:20:06.804124Z" } }, "outputs": [ @@ -4092,7 +4098,7 @@ }, { "cell_type": "markdown", - "id": "98e00adc", + "id": "51c57b7b", "metadata": {}, "source": [ "**−0.45 eV per oxygen, recovered to four decimals**, with an error bar beside\n", @@ -4103,13 +4109,13 @@ { "cell_type": "code", "execution_count": 49, - "id": "5420a279", + "id": "586550e1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:46.022514Z", - "iopub.status.busy": "2026-08-03T06:21:46.022425Z", - "iopub.status.idle": "2026-08-03T06:21:46.027295Z", - "shell.execute_reply": "2026-08-03T06:21:46.026976Z" + "iopub.execute_input": "2026-08-04T13:20:06.806584Z", + "iopub.status.busy": "2026-08-04T13:20:06.806421Z", + "iopub.status.idle": "2026-08-04T13:20:06.812165Z", + "shell.execute_reply": "2026-08-04T13:20:06.811683Z" } }, "outputs": [ @@ -4181,7 +4187,7 @@ }, { "cell_type": "markdown", - "id": "6898547b", + "id": "914a6793", "metadata": {}, "source": [ "```{warning}\n", @@ -4204,7 +4210,7 @@ }, { "cell_type": "markdown", - "id": "3de6a824", + "id": "2119ccd1", "metadata": {}, "source": [ "## A hull the laboratory built\n", @@ -4221,13 +4227,13 @@ { "cell_type": "code", "execution_count": 50, - "id": "df786bf1", + "id": "21e821d8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:46.028152Z", - "iopub.status.busy": "2026-08-03T06:21:46.028068Z", - "iopub.status.idle": "2026-08-03T06:21:46.042476Z", - "shell.execute_reply": "2026-08-03T06:21:46.042106Z" + "iopub.execute_input": "2026-08-04T13:20:06.813234Z", + "iopub.status.busy": "2026-08-04T13:20:06.813099Z", + "iopub.status.idle": "2026-08-04T13:20:06.832796Z", + "shell.execute_reply": "2026-08-04T13:20:06.832236Z" } }, "outputs": [ @@ -4328,7 +4334,7 @@ }, { "cell_type": "markdown", - "id": "01a8f683", + "id": "3f4944ac", "metadata": {}, "source": [ "Hematite and magnetite sit on the hull. **Wüstite sits 0.039 eV/atom above it**\n", @@ -4357,13 +4363,13 @@ { "cell_type": "code", "execution_count": 51, - "id": "2bfe6e7e", + "id": "102b6c9a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:46.043206Z", - "iopub.status.busy": "2026-08-03T06:21:46.043121Z", - "iopub.status.idle": "2026-08-03T06:21:46.045185Z", - "shell.execute_reply": "2026-08-03T06:21:46.044878Z" + "iopub.execute_input": "2026-08-04T13:20:06.834045Z", + "iopub.status.busy": "2026-08-04T13:20:06.833914Z", + "iopub.status.idle": "2026-08-04T13:20:06.836981Z", + "shell.execute_reply": "2026-08-04T13:20:06.836557Z" } }, "outputs": [ @@ -4384,7 +4390,7 @@ }, { "cell_type": "markdown", - "id": "666220de", + "id": "69c9b604", "metadata": {}, "source": [ "Now the comparison this was for. Run `mv.thermo.hull` at a computed level on the\n", diff --git a/matverse_guide/docs/tutorials/chemical_space.ipynb b/matverse_guide/docs/tutorials/chemical_space.ipynb index d2b1561..ce0bc32 100644 --- a/matverse_guide/docs/tutorials/chemical_space.ipynb +++ b/matverse_guide/docs/tutorials/chemical_space.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "306e5fc6", + "id": "480656d5", "metadata": {}, "source": [ "# Chemical space\n", @@ -19,13 +19,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "2bcdd49a", + "id": "c78c0cd7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:28.926020Z", - "iopub.status.busy": "2026-08-03T06:21:28.925942Z", - "iopub.status.idle": "2026-08-03T06:21:32.182751Z", - "shell.execute_reply": "2026-08-03T06:21:32.182318Z" + "iopub.execute_input": "2026-08-04T13:19:43.149979Z", + "iopub.status.busy": "2026-08-04T13:19:43.149882Z", + "iopub.status.idle": "2026-08-04T13:19:48.103181Z", + "shell.execute_reply": "2026-08-04T13:19:48.102260Z" } }, "outputs": [ @@ -33,20 +33,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -56,7 +62,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -72,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "f2a8988d", + "id": "79d11598", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -85,13 +91,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "a246cba6", + "id": "fd626ee7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:32.183999Z", - "iopub.status.busy": "2026-08-03T06:21:32.183752Z", - "iopub.status.idle": "2026-08-03T06:21:33.331206Z", - "shell.execute_reply": "2026-08-03T06:21:33.330767Z" + "iopub.execute_input": "2026-08-04T13:19:48.106177Z", + "iopub.status.busy": "2026-08-04T13:19:48.105404Z", + "iopub.status.idle": "2026-08-04T13:19:49.927702Z", + "shell.execute_reply": "2026-08-04T13:19:49.927277Z" } }, "outputs": [ @@ -217,7 +223,7 @@ }, { "cell_type": "markdown", - "id": "416b1b66", + "id": "b68f502c", "metadata": {}, "source": [ "## Why elements are the right axis\n", @@ -230,13 +236,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "ad0e8c09", + "id": "55af9155", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.332116Z", - "iopub.status.busy": "2026-08-03T06:21:33.332010Z", - "iopub.status.idle": "2026-08-03T06:21:33.337208Z", - "shell.execute_reply": "2026-08-03T06:21:33.336719Z" + "iopub.execute_input": "2026-08-04T13:19:49.929260Z", + "iopub.status.busy": "2026-08-04T13:19:49.929076Z", + "iopub.status.idle": "2026-08-04T13:19:49.935999Z", + "shell.execute_reply": "2026-08-04T13:19:49.935726Z" } }, "outputs": [ @@ -342,7 +348,7 @@ }, { "cell_type": "markdown", - "id": "8af64ad6", + "id": "c7255948", "metadata": {}, "source": [ "Counts come from the **reduced** formula, so a supercell and its primitive cell\n", @@ -356,13 +362,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "8b713bfd", + "id": "9df2a62b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.338134Z", - "iopub.status.busy": "2026-08-03T06:21:33.337968Z", - "iopub.status.idle": "2026-08-03T06:21:33.342871Z", - "shell.execute_reply": "2026-08-03T06:21:33.342504Z" + "iopub.execute_input": "2026-08-04T13:19:49.937892Z", + "iopub.status.busy": "2026-08-04T13:19:49.937452Z", + "iopub.status.idle": "2026-08-04T13:19:49.947268Z", + "shell.execute_reply": "2026-08-04T13:19:49.944511Z" } }, "outputs": [ @@ -445,7 +451,7 @@ }, { "cell_type": "markdown", - "id": "144847e4", + "id": "d7c38138", "metadata": {}, "source": [ "```{note}\n", @@ -459,13 +465,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "47eb400d", + "id": "85a1a79c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.343622Z", - "iopub.status.busy": "2026-08-03T06:21:33.343535Z", - "iopub.status.idle": "2026-08-03T06:21:33.347954Z", - "shell.execute_reply": "2026-08-03T06:21:33.347616Z" + "iopub.execute_input": "2026-08-04T13:19:49.948518Z", + "iopub.status.busy": "2026-08-04T13:19:49.948376Z", + "iopub.status.idle": "2026-08-04T13:19:49.954983Z", + "shell.execute_reply": "2026-08-04T13:19:49.954258Z" } }, "outputs": [ @@ -536,7 +542,7 @@ }, { "cell_type": "markdown", - "id": "89d97a59", + "id": "29d8e2cf", "metadata": {}, "source": [ "## The dividend inside the library\n", @@ -550,13 +556,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "39380cb6", + "id": "a639ace8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.348712Z", - "iopub.status.busy": "2026-08-03T06:21:33.348627Z", - "iopub.status.idle": "2026-08-03T06:21:33.352010Z", - "shell.execute_reply": "2026-08-03T06:21:33.351668Z" + "iopub.execute_input": "2026-08-04T13:19:49.956443Z", + "iopub.status.busy": "2026-08-04T13:19:49.956009Z", + "iopub.status.idle": "2026-08-04T13:19:49.961874Z", + "shell.execute_reply": "2026-08-04T13:19:49.961609Z" } }, "outputs": [ @@ -578,7 +584,7 @@ }, { "cell_type": "markdown", - "id": "5a1e471f", + "id": "72096ce5", "metadata": {}, "source": [ "Check one by hand. For Al₃Cu the weighted mean electronegativity should be\n", @@ -588,13 +594,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "8f59fdcc", + "id": "74cb4d55", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.352715Z", - "iopub.status.busy": "2026-08-03T06:21:33.352630Z", - "iopub.status.idle": "2026-08-03T06:21:33.355024Z", - "shell.execute_reply": "2026-08-03T06:21:33.354705Z" + "iopub.execute_input": "2026-08-04T13:19:49.963671Z", + "iopub.status.busy": "2026-08-04T13:19:49.963219Z", + "iopub.status.idle": "2026-08-04T13:19:49.967376Z", + "shell.execute_reply": "2026-08-04T13:19:49.966988Z" } }, "outputs": [ @@ -619,7 +625,7 @@ }, { "cell_type": "markdown", - "id": "be6a28e5", + "id": "cb3067e2", "metadata": {}, "source": [ "Those descriptors are also a distance, which makes the library a matrix you can\n", @@ -629,20 +635,20 @@ { "cell_type": "code", "execution_count": 8, - "id": "6cfa899d", + "id": "92f5a82d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.355695Z", - "iopub.status.busy": "2026-08-03T06:21:33.355618Z", - "iopub.status.idle": "2026-08-03T06:21:33.513375Z", - "shell.execute_reply": "2026-08-03T06:21:33.512956Z" + "iopub.execute_input": "2026-08-04T13:19:49.968811Z", + "iopub.status.busy": "2026-08-04T13:19:49.968656Z", + "iopub.status.idle": "2026-08-04T13:19:50.154267Z", + "shell.execute_reply": "2026-08-04T13:19:50.153692Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 8, @@ -681,7 +687,7 @@ }, { "cell_type": "markdown", - "id": "c6e84956", + "id": "7551925d", "metadata": {}, "source": [ "The two Al–Cu orderings sit next to each other and the elementals separate,\n", @@ -699,13 +705,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "d209965f", + "id": "24bdf0bf", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.514211Z", - "iopub.status.busy": "2026-08-03T06:21:33.514122Z", - "iopub.status.idle": "2026-08-03T06:21:33.516710Z", - "shell.execute_reply": "2026-08-03T06:21:33.516377Z" + "iopub.execute_input": "2026-08-04T13:19:50.155822Z", + "iopub.status.busy": "2026-08-04T13:19:50.155669Z", + "iopub.status.idle": "2026-08-04T13:19:50.159651Z", + "shell.execute_reply": "2026-08-04T13:19:50.159219Z" } }, "outputs": [ @@ -731,7 +737,7 @@ }, { "cell_type": "markdown", - "id": "b9be5941", + "id": "f0b893af", "metadata": {}, "source": [ "A site-averaged SOAP vector per structure, which separates two polymorphs of\n", @@ -754,13 +760,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "03262d8f", + "id": "f4ad9629", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.517404Z", - "iopub.status.busy": "2026-08-03T06:21:33.517322Z", - "iopub.status.idle": "2026-08-03T06:21:33.523012Z", - "shell.execute_reply": "2026-08-03T06:21:33.522671Z" + "iopub.execute_input": "2026-08-04T13:19:50.160740Z", + "iopub.status.busy": "2026-08-04T13:19:50.160615Z", + "iopub.status.idle": "2026-08-04T13:19:50.168292Z", + "shell.execute_reply": "2026-08-04T13:19:50.167551Z" } }, "outputs": [ @@ -873,13 +879,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "b0049144", + "id": "31f5d7c7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.523724Z", - "iopub.status.busy": "2026-08-03T06:21:33.523641Z", - "iopub.status.idle": "2026-08-03T06:21:33.525704Z", - "shell.execute_reply": "2026-08-03T06:21:33.525386Z" + "iopub.execute_input": "2026-08-04T13:19:50.169462Z", + "iopub.status.busy": "2026-08-04T13:19:50.169336Z", + "iopub.status.idle": "2026-08-04T13:19:50.172836Z", + "shell.execute_reply": "2026-08-04T13:19:50.172398Z" } }, "outputs": [ @@ -902,7 +908,7 @@ }, { "cell_type": "markdown", - "id": "72e5ece0", + "id": "f6e55621", "metadata": {}, "source": [ "Which model produced the block, and under what licence, is recorded next to it\n", @@ -924,13 +930,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "a14b9169", + "id": "d85b4d72", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.526404Z", - "iopub.status.busy": "2026-08-03T06:21:33.526326Z", - "iopub.status.idle": "2026-08-03T06:21:33.850930Z", - "shell.execute_reply": "2026-08-03T06:21:33.850525Z" + "iopub.execute_input": "2026-08-04T13:19:50.173956Z", + "iopub.status.busy": "2026-08-04T13:19:50.173824Z", + "iopub.status.idle": "2026-08-04T13:19:51.105168Z", + "shell.execute_reply": "2026-08-04T13:19:51.104650Z" } }, "outputs": [ @@ -1026,7 +1032,7 @@ }, { "cell_type": "markdown", - "id": "0be6a7b7", + "id": "d1adaf65", "metadata": {}, "source": [ "`normalize_composition` writes atomic fractions to a **layer** rather than\n", @@ -1042,13 +1048,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "bf9f4152", + "id": "d6fae5d1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.852011Z", - "iopub.status.busy": "2026-08-03T06:21:33.851916Z", - "iopub.status.idle": "2026-08-03T06:21:33.978147Z", - "shell.execute_reply": "2026-08-03T06:21:33.977731Z" + "iopub.execute_input": "2026-08-04T13:19:51.106582Z", + "iopub.status.busy": "2026-08-04T13:19:51.106409Z", + "iopub.status.idle": "2026-08-04T13:19:51.242523Z", + "shell.execute_reply": "2026-08-04T13:19:51.241973Z" } }, "outputs": [ @@ -1085,7 +1091,7 @@ }, { "cell_type": "markdown", - "id": "705998f6", + "id": "08cf0bc6", "metadata": {}, "source": [ "## The question that follows every screen\n", @@ -1096,13 +1102,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "b6c05211", + "id": "0726ec68", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.979005Z", - "iopub.status.busy": "2026-08-03T06:21:33.978915Z", - "iopub.status.idle": "2026-08-03T06:21:33.990554Z", - "shell.execute_reply": "2026-08-03T06:21:33.990165Z" + "iopub.execute_input": "2026-08-04T13:19:51.243545Z", + "iopub.status.busy": "2026-08-04T13:19:51.243410Z", + "iopub.status.idle": "2026-08-04T13:19:51.257906Z", + "shell.execute_reply": "2026-08-04T13:19:51.257279Z" } }, "outputs": [ @@ -1208,7 +1214,7 @@ }, { "cell_type": "markdown", - "id": "1ed15c8d", + "id": "c2a05124", "metadata": {}, "source": [ "This is `rank_genes_groups` with the nouns changed, and it is the operation that\n", @@ -1223,13 +1229,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "4d09c380", + "id": "74ea808f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:33.991345Z", - "iopub.status.busy": "2026-08-03T06:21:33.991256Z", - "iopub.status.idle": "2026-08-03T06:21:34.000900Z", - "shell.execute_reply": "2026-08-03T06:21:34.000515Z" + "iopub.execute_input": "2026-08-04T13:19:51.258944Z", + "iopub.status.busy": "2026-08-04T13:19:51.258818Z", + "iopub.status.idle": "2026-08-04T13:19:51.271833Z", + "shell.execute_reply": "2026-08-04T13:19:51.271213Z" } }, "outputs": [ @@ -1315,7 +1321,7 @@ }, { "cell_type": "markdown", - "id": "b86ff493", + "id": "53d88d49", "metadata": {}, "source": [ "Both report an uncorrected p-value and a Benjamini–Hochberg q-value. With seven\n", @@ -1329,13 +1335,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "6e3f9b21", + "id": "8612746f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.001651Z", - "iopub.status.busy": "2026-08-03T06:21:34.001566Z", - "iopub.status.idle": "2026-08-03T06:21:34.075581Z", - "shell.execute_reply": "2026-08-03T06:21:34.075172Z" + "iopub.execute_input": "2026-08-04T13:19:51.273338Z", + "iopub.status.busy": "2026-08-04T13:19:51.273189Z", + "iopub.status.idle": "2026-08-04T13:19:51.353233Z", + "shell.execute_reply": "2026-08-04T13:19:51.352796Z" } }, "outputs": [ @@ -1373,7 +1379,7 @@ }, { "cell_type": "markdown", - "id": "535a9c08", + "id": "4a0c4d09", "metadata": {}, "source": [ "The bar chart when you want the numbers; the periodic table when you want the\n", @@ -1383,13 +1389,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "94f7a90c", + "id": "99a951ce", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.076431Z", - "iopub.status.busy": "2026-08-03T06:21:34.076342Z", - "iopub.status.idle": "2026-08-03T06:21:34.503020Z", - "shell.execute_reply": "2026-08-03T06:21:34.502621Z" + "iopub.execute_input": "2026-08-04T13:19:51.354578Z", + "iopub.status.busy": "2026-08-04T13:19:51.354470Z", + "iopub.status.idle": "2026-08-04T13:19:51.700144Z", + "shell.execute_reply": "2026-08-04T13:19:51.699609Z" } }, "outputs": [ @@ -1419,7 +1425,7 @@ }, { "cell_type": "markdown", - "id": "acec417b", + "id": "da35017c", "metadata": {}, "source": [ "Aluminium comes out grey rather than dark. Its odds ratio is infinite — it is in\n", @@ -1442,13 +1448,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "86541a53", + "id": "61d5778e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.503988Z", - "iopub.status.busy": "2026-08-03T06:21:34.503896Z", - "iopub.status.idle": "2026-08-03T06:21:34.513518Z", - "shell.execute_reply": "2026-08-03T06:21:34.513042Z" + "iopub.execute_input": "2026-08-04T13:19:51.702192Z", + "iopub.status.busy": "2026-08-04T13:19:51.701987Z", + "iopub.status.idle": "2026-08-04T13:19:51.713411Z", + "shell.execute_reply": "2026-08-04T13:19:51.712863Z" } }, "outputs": [ @@ -1470,7 +1476,7 @@ }, { "cell_type": "markdown", - "id": "d649a860", + "id": "c1e9f23b", "metadata": {}, "source": [ "## Is this candidate actually new?\n", @@ -1482,13 +1488,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "d4b34e36", + "id": "4226f2ba", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.514398Z", - "iopub.status.busy": "2026-08-03T06:21:34.514309Z", - "iopub.status.idle": "2026-08-03T06:21:34.525918Z", - "shell.execute_reply": "2026-08-03T06:21:34.525555Z" + "iopub.execute_input": "2026-08-04T13:19:51.714495Z", + "iopub.status.busy": "2026-08-04T13:19:51.714363Z", + "iopub.status.idle": "2026-08-04T13:19:51.727135Z", + "shell.execute_reply": "2026-08-04T13:19:51.726678Z" } }, "outputs": [ @@ -1592,13 +1598,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "421fe7e0", + "id": "a50aee99", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.526699Z", - "iopub.status.busy": "2026-08-03T06:21:34.526612Z", - "iopub.status.idle": "2026-08-03T06:21:34.638805Z", - "shell.execute_reply": "2026-08-03T06:21:34.638391Z" + "iopub.execute_input": "2026-08-04T13:19:51.728380Z", + "iopub.status.busy": "2026-08-04T13:19:51.728248Z", + "iopub.status.idle": "2026-08-04T13:19:51.853405Z", + "shell.execute_reply": "2026-08-04T13:19:51.852897Z" } }, "outputs": [ @@ -1636,7 +1642,7 @@ }, { "cell_type": "markdown", - "id": "f2925eb5", + "id": "9ecccfd6", "metadata": {}, "source": [ "```{warning}\n", @@ -1671,13 +1677,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "fe223784", + "id": "33d5a397", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.639608Z", - "iopub.status.busy": "2026-08-03T06:21:34.639522Z", - "iopub.status.idle": "2026-08-03T06:21:34.647455Z", - "shell.execute_reply": "2026-08-03T06:21:34.647087Z" + "iopub.execute_input": "2026-08-04T13:19:51.854515Z", + "iopub.status.busy": "2026-08-04T13:19:51.854382Z", + "iopub.status.idle": "2026-08-04T13:19:51.863048Z", + "shell.execute_reply": "2026-08-04T13:19:51.862512Z" } }, "outputs": [ @@ -1702,7 +1708,7 @@ }, { "cell_type": "markdown", - "id": "fcf290fa", + "id": "d5b1f24e", "metadata": {}, "source": [ "Anything that reads a *structure* raises, and should — there is none, and\n", @@ -1718,13 +1724,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "fd3dcfcc", + "id": "1d4090aa", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.648245Z", - "iopub.status.busy": "2026-08-03T06:21:34.648153Z", - "iopub.status.idle": "2026-08-03T06:21:34.678379Z", - "shell.execute_reply": "2026-08-03T06:21:34.677969Z" + "iopub.execute_input": "2026-08-04T13:19:51.864023Z", + "iopub.status.busy": "2026-08-04T13:19:51.863904Z", + "iopub.status.idle": "2026-08-04T13:19:51.898350Z", + "shell.execute_reply": "2026-08-04T13:19:51.897570Z" } }, "outputs": [ @@ -1760,7 +1766,7 @@ }, { "cell_type": "markdown", - "id": "68525880", + "id": "3f46ba67", "metadata": {}, "source": [ "```{warning}\n", @@ -1783,13 +1789,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "a002d070", + "id": "1bca2f2e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.679196Z", - "iopub.status.busy": "2026-08-03T06:21:34.679105Z", - "iopub.status.idle": "2026-08-03T06:21:34.685801Z", - "shell.execute_reply": "2026-08-03T06:21:34.685407Z" + "iopub.execute_input": "2026-08-04T13:19:51.899584Z", + "iopub.status.busy": "2026-08-04T13:19:51.899441Z", + "iopub.status.idle": "2026-08-04T13:19:51.907099Z", + "shell.execute_reply": "2026-08-04T13:19:51.906522Z" } }, "outputs": [ @@ -1816,7 +1822,7 @@ }, { "cell_type": "markdown", - "id": "dc116601", + "id": "588e56f6", "metadata": {}, "source": [ "**The oxidation-state table is a choice.** The default `'icsd24'` is what has\n", @@ -1835,13 +1841,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "43a36c20", + "id": "fdaf48cf", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.686555Z", - "iopub.status.busy": "2026-08-03T06:21:34.686468Z", - "iopub.status.idle": "2026-08-03T06:21:34.791663Z", - "shell.execute_reply": "2026-08-03T06:21:34.791177Z" + "iopub.execute_input": "2026-08-04T13:19:51.908319Z", + "iopub.status.busy": "2026-08-04T13:19:51.908177Z", + "iopub.status.idle": "2026-08-04T13:19:52.021914Z", + "shell.execute_reply": "2026-08-04T13:19:52.021360Z" } }, "outputs": [ @@ -1870,7 +1876,7 @@ }, { "cell_type": "markdown", - "id": "2f4e1b39", + "id": "c9e58cd4", "metadata": {}, "source": [ "```{warning}\n", @@ -1895,13 +1901,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "f3f6cebe", + "id": "68f18a0c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:34.792663Z", - "iopub.status.busy": "2026-08-03T06:21:34.792565Z", - "iopub.status.idle": "2026-08-03T06:21:35.018247Z", - "shell.execute_reply": "2026-08-03T06:21:35.017819Z" + "iopub.execute_input": "2026-08-04T13:19:52.023217Z", + "iopub.status.busy": "2026-08-04T13:19:52.022991Z", + "iopub.status.idle": "2026-08-04T13:19:52.267846Z", + "shell.execute_reply": "2026-08-04T13:19:52.266978Z" } }, "outputs": [ @@ -1937,7 +1943,7 @@ }, { "cell_type": "markdown", - "id": "0ac49bbf", + "id": "f5c4b208", "metadata": {}, "source": [ "Note the other number: **33 of 40 attempts failed outright**, because a random\n", @@ -1951,6 +1957,62 @@ "and everything else work on it unchanged. The funnel is now complete: elements →\n", "compositions → structures → energies.\n", "\n", + "`mv.pl.spacegroups` shows the distribution, and putting the requested and the\n", + "achieved group side by side is how the difference stops being a column nobody\n", + "reads. Bars are grouped and coloured by crystal system rather than plotted as\n", + "230 flat categories, because the number itself carries no order a reader can\n", + "use — 62 is not \"between\" 61 and 63 in any sense that matters, but Pnma being\n", + "orthorhombic does." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "7d74dd02", + "metadata": { + "execution": { + "iopub.execute_input": "2026-08-04T13:19:52.269085Z", + "iopub.status.busy": "2026-08-04T13:19:52.268951Z", + "iopub.status.idle": "2026-08-04T13:19:52.407770Z", + "shell.execute_reply": "2026-08-04T13:19:52.407266Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "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CAiQ7S84OBhffPEFtm7derMpExERuFyCiIhsaPjw4Rg+fDiKioqwY8cOHD16FFVVVfDw8EC3bt0QGRmJBx54QPYEXVdISAhycnKQkZGB3377DaWlpXBzc0NoaCjGjx+vd98FU95++208//zz2LRpE/Lz83H9+nX4+flhwIABGDt2LDw8PAA0nbCUl5ebfVTkPffcg/Xr1+Ps2bP4+eefkZeXh8rKSri7u8Pf3x/du3dHdHS0wU0LdXXo0AGffvopFi5ciN27d+PQoUMoLy9HQ0MDfH190a9fP4wcOdLsSZE1pk+fjqeeegqpqak4fPgwqqur4e/vjyFDhiAmJgbOzs5YsmSJFG/qZDUkJARxcXEAgMDAQIv779KlCzZs2ICTJ09i+/btOHHiBKqqquDp6YmgoCA88sgjek/xkBMeHo7jx48jLS0N+/btQ0VFBXx8fBAWFoann35aOobjxo3DpUuX9B5BKsfNzQ3ffPMN3njjDfz0008oLi7GjRs3EBAQgMcffxwDBw60+P3KUalU0hgOHTrUbPyDDz4ofU5NPYIVsN24WJPfXXfdJcVGRkbKxnp7e0uxxp4q07JfWx6PGTNmYNq0acjKykJmZiZKSkpQXV2Nu+66C0FBQRg2bBgGDx5s8vXWHjMiojuZgxAWPFCZiIioHSxZskR6bOXatWsRHx9v54zuHNevX0dYWBhOnDgBADh69Ohtvza9uLhYKqbExsZi48aNds6IiIjofx+XSxAREd3miouLZW9qWVtbi4kTJ0oFhtDQ0Nu+wEBERERtg8sliIiIbnMrV65EUlISRo4ciXvvvRddunSBt7c3qqqqcPjwYfz444+4fPmyFP/mm2/aMVsiIiL6X8YiAxER0R2gpqYGqampSE1NlY179tlnMWnSpPZJioiIiG47XC5BRER0m+vevTtcXV1lY7y9vfHBBx/gm2++aaesiIiI6HbEmQxERHTLuNknF5C8adOmYcKECdi9ezfy8/Nx8eJFVFRUQKlUws/PD4MHD8bIkSNx11132TvVdsUnBhAREdkeny5BRERERERERDbB5RJEREREREREZBMsMhARERERERGRTbDIQEREREREREQ2wSIDEREREREREdkEiwxEREREREREZBMsMhARERERERGRTbDIQEREREREREQ2wSIDEREREREREdkEiwxEREREREREZBMsMhARERERERGRTbDIQEREREREREQ2wSIDEREREREREdkEiwxEREREREREZBMsMhARERERERGRTbDIQEREREREREQ2wSIDEREREREREdkEiwxEREREREREZBMsMhARERERERGRTbDIQEREREREREQ2wSIDEREREREREdnE/wOY/KsqylE/xAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 397, + "width": 524 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "try:\n", + " ax = mv.pl.spacegroups(many, column=\"space_group\",\n", + " compare=\"requested_space_group\")\n", + " ax.set_title(\"requested (hollow) vs achieved (filled)\")\n", + "except (ImportError, NameError, ValueError) as exc:\n", + " print(\"needs PyXtal and matplotlib:\", exc)" + ] + }, + { + "cell_type": "markdown", + "id": "09225104", + "metadata": {}, + "source": [ + "It also works on any dataset that has been through `mv.pp.symmetry`, which now\n", + "records `spacegroup_number` and `spacegroup_symbol` alongside the crystal system\n", + "and point group — the analyser was already being built, so the group itself cost\n", + "nothing to report and is the one label everybody actually cites.\n", + "\n", "```{seealso}\n", "[Beyond one number](beyond_one_number.ipynb) covers the results that are not a\n", "single number per material: curves, per-atom values and measurements.\n", diff --git a/matverse_guide/docs/tutorials/data_io.ipynb b/matverse_guide/docs/tutorials/data_io.ipynb index 675c5e5..390be10 100644 --- a/matverse_guide/docs/tutorials/data_io.ipynb +++ b/matverse_guide/docs/tutorials/data_io.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "56e7bf25", + "id": "3593ff64", "metadata": {}, "source": [ "# Getting data in and out\n", @@ -19,13 +19,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "f243dd39", + "id": "9c867d01", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:48.497639Z", - "iopub.status.busy": "2026-08-03T06:25:48.497512Z", - "iopub.status.idle": "2026-08-03T06:25:51.732171Z", - "shell.execute_reply": "2026-08-03T06:25:51.731694Z" + "iopub.execute_input": "2026-08-04T13:25:13.218319Z", + "iopub.status.busy": "2026-08-04T13:25:13.218226Z", + "iopub.status.idle": "2026-08-04T13:25:17.633174Z", + "shell.execute_reply": "2026-08-04T13:25:17.632648Z" } }, "outputs": [ @@ -33,20 +33,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -56,7 +62,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -72,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "cced4b28", + "id": "3aca5fca", "metadata": {}, "source": [ "## From a database, over OPTIMADE\n", @@ -85,13 +91,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "ff690da8", + "id": "cf16d709", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:51.733387Z", - "iopub.status.busy": "2026-08-03T06:25:51.733038Z", - "iopub.status.idle": "2026-08-03T06:25:51.736246Z", - "shell.execute_reply": "2026-08-03T06:25:51.735784Z" + "iopub.execute_input": "2026-08-04T13:25:17.634376Z", + "iopub.status.busy": "2026-08-04T13:25:17.634046Z", + "iopub.status.idle": "2026-08-04T13:25:17.637377Z", + "shell.execute_reply": "2026-08-04T13:25:17.636951Z" } }, "outputs": [ @@ -119,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "e8ab0b8d", + "id": "251afdf8", "metadata": {}, "source": [ "We query [OQMD](https://oqmd.org/) — about 1.4 million entries — for every\n", @@ -129,13 +135,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "e0c8e19d", + "id": "f642434a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:51.737105Z", - "iopub.status.busy": "2026-08-03T06:25:51.736989Z", - "iopub.status.idle": "2026-08-03T06:26:00.138134Z", - "shell.execute_reply": "2026-08-03T06:26:00.137705Z" + "iopub.execute_input": "2026-08-04T13:25:17.638263Z", + "iopub.status.busy": "2026-08-04T13:25:17.638154Z", + "iopub.status.idle": "2026-08-04T13:25:34.124986Z", + "shell.execute_reply": "2026-08-04T13:25:34.124365Z" } }, "outputs": [ @@ -188,13 +194,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "e73f5605", + "id": "e34c27ee", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:00.139149Z", - "iopub.status.busy": "2026-08-03T06:26:00.138933Z", - "iopub.status.idle": "2026-08-03T06:26:00.155815Z", - "shell.execute_reply": "2026-08-03T06:26:00.155375Z" + "iopub.execute_input": "2026-08-04T13:25:34.126123Z", + "iopub.status.busy": "2026-08-04T13:25:34.125906Z", + "iopub.status.idle": "2026-08-04T13:25:34.143571Z", + "shell.execute_reply": "2026-08-04T13:25:34.142974Z" } }, "outputs": [ @@ -382,7 +388,7 @@ }, { "cell_type": "markdown", - "id": "65355d8f", + "id": "f82021c7", "metadata": {}, "source": [ "Real data, with its real database identifiers in `obs['optimade_id']`, so any\n", @@ -399,13 +405,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "3eebac78", + "id": "35ec248f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:00.156740Z", - "iopub.status.busy": "2026-08-03T06:26:00.156628Z", - "iopub.status.idle": "2026-08-03T06:26:00.593274Z", - "shell.execute_reply": "2026-08-03T06:26:00.592767Z" + "iopub.execute_input": "2026-08-04T13:25:34.144568Z", + "iopub.status.busy": "2026-08-04T13:25:34.144450Z", + "iopub.status.idle": "2026-08-04T13:25:34.582355Z", + "shell.execute_reply": "2026-08-04T13:25:34.581752Z" } }, "outputs": [], @@ -419,13 +425,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "fda3449e", + "id": "90af71fc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:00.594346Z", - "iopub.status.busy": "2026-08-03T06:26:00.594256Z", - "iopub.status.idle": "2026-08-03T06:26:00.596469Z", - "shell.execute_reply": "2026-08-03T06:26:00.596118Z" + "iopub.execute_input": "2026-08-04T13:25:34.583502Z", + "iopub.status.busy": "2026-08-04T13:25:34.583389Z", + "iopub.status.idle": "2026-08-04T13:25:34.585944Z", + "shell.execute_reply": "2026-08-04T13:25:34.585483Z" } }, "outputs": [ @@ -446,7 +452,7 @@ }, { "cell_type": "markdown", - "id": "b5a86472", + "id": "2dfa654e", "metadata": {}, "source": [ "### What a real query gives you that a curated one does not\n", @@ -459,13 +465,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "76f53506", + "id": "b359eb2c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:00.597303Z", - "iopub.status.busy": "2026-08-03T06:26:00.597216Z", - "iopub.status.idle": "2026-08-03T06:26:00.955694Z", - "shell.execute_reply": "2026-08-03T06:26:00.955253Z" + "iopub.execute_input": "2026-08-04T13:25:34.586951Z", + "iopub.status.busy": "2026-08-04T13:25:34.586759Z", + "iopub.status.idle": "2026-08-04T13:25:35.109288Z", + "shell.execute_reply": "2026-08-04T13:25:35.108696Z" } }, "outputs": [ @@ -493,7 +499,7 @@ }, { "cell_type": "markdown", - "id": "4abe466e", + "id": "ff963f86", "metadata": {}, "source": [ "**Seven of fifteen were duplicates.** That is not a contrived example — it is\n", @@ -507,13 +513,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "38ce3013", + "id": "b1cadd55", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:00.956887Z", - "iopub.status.busy": "2026-08-03T06:26:00.956519Z", - "iopub.status.idle": "2026-08-03T06:26:00.963434Z", - "shell.execute_reply": "2026-08-03T06:26:00.962892Z" + "iopub.execute_input": "2026-08-04T13:25:35.110405Z", + "iopub.status.busy": "2026-08-04T13:25:35.110189Z", + "iopub.status.idle": "2026-08-04T13:25:35.116937Z", + "shell.execute_reply": "2026-08-04T13:25:35.116466Z" } }, "outputs": [ @@ -700,7 +706,7 @@ }, { "cell_type": "markdown", - "id": "7f502ad6", + "id": "1be3cfbe", "metadata": {}, "source": [ "### Cached, so the second call is free\n", @@ -711,13 +717,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "61e5eb12", + "id": "0d998aac", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:00.964398Z", - "iopub.status.busy": "2026-08-03T06:26:00.964281Z", - "iopub.status.idle": "2026-08-03T06:26:00.996200Z", - "shell.execute_reply": "2026-08-03T06:26:00.995813Z" + "iopub.execute_input": "2026-08-04T13:25:35.117887Z", + "iopub.status.busy": "2026-08-04T13:25:35.117751Z", + "iopub.status.idle": "2026-08-04T13:25:35.151698Z", + "shell.execute_reply": "2026-08-04T13:25:35.151163Z" } }, "outputs": [ @@ -847,13 +853,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "bbfa4c11", + "id": "5c76bd9f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:00.996987Z", - "iopub.status.busy": "2026-08-03T06:26:00.996902Z", - "iopub.status.idle": "2026-08-03T06:26:00.999404Z", - "shell.execute_reply": "2026-08-03T06:26:00.999005Z" + "iopub.execute_input": "2026-08-04T13:25:35.152647Z", + "iopub.status.busy": "2026-08-04T13:25:35.152530Z", + "iopub.status.idle": "2026-08-04T13:25:35.155414Z", + "shell.execute_reply": "2026-08-04T13:25:35.154902Z" } }, "outputs": [ @@ -876,13 +882,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "925440f5", + "id": "7d492c98", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.000318Z", - "iopub.status.busy": "2026-08-03T06:26:01.000229Z", - "iopub.status.idle": "2026-08-03T06:26:01.002272Z", - "shell.execute_reply": "2026-08-03T06:26:01.001929Z" + "iopub.execute_input": "2026-08-04T13:25:35.156384Z", + "iopub.status.busy": "2026-08-04T13:25:35.156245Z", + "iopub.status.idle": "2026-08-04T13:25:35.158834Z", + "shell.execute_reply": "2026-08-04T13:25:35.158367Z" } }, "outputs": [ @@ -903,7 +909,7 @@ }, { "cell_type": "markdown", - "id": "220ccde8", + "id": "5e73d79d", "metadata": {}, "source": [ "```{warning}\n", @@ -934,13 +940,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "1296eaf0", + "id": "0dab35ff", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.003105Z", - "iopub.status.busy": "2026-08-03T06:26:01.002959Z", - "iopub.status.idle": "2026-08-03T06:26:01.013654Z", - "shell.execute_reply": "2026-08-03T06:26:01.013254Z" + "iopub.execute_input": "2026-08-04T13:25:35.159742Z", + "iopub.status.busy": "2026-08-04T13:25:35.159600Z", + "iopub.status.idle": "2026-08-04T13:25:35.170837Z", + "shell.execute_reply": "2026-08-04T13:25:35.170264Z" } }, "outputs": [ @@ -1011,7 +1017,7 @@ }, { "cell_type": "markdown", - "id": "267f9995", + "id": "e38032c7", "metadata": {}, "source": [ "## From structures you already have" @@ -1020,13 +1026,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "b225588c", + "id": "d9244b87", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.014479Z", - "iopub.status.busy": "2026-08-03T06:26:01.014344Z", - "iopub.status.idle": "2026-08-03T06:26:01.022426Z", - "shell.execute_reply": "2026-08-03T06:26:01.022040Z" + "iopub.execute_input": "2026-08-04T13:25:35.171821Z", + "iopub.status.busy": "2026-08-04T13:25:35.171689Z", + "iopub.status.idle": "2026-08-04T13:25:35.180705Z", + "shell.execute_reply": "2026-08-04T13:25:35.180249Z" } }, "outputs": [ @@ -1099,7 +1105,7 @@ }, { "cell_type": "markdown", - "id": "b671ebe5", + "id": "acf3e4e1", "metadata": {}, "source": [ "Pass a DataFrame and it becomes `obs`, aligned by position.\n", @@ -1113,13 +1119,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "633cd5c7", + "id": "74358cfc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.023195Z", - "iopub.status.busy": "2026-08-03T06:26:01.023108Z", - "iopub.status.idle": "2026-08-03T06:26:01.029731Z", - "shell.execute_reply": "2026-08-03T06:26:01.029347Z" + "iopub.execute_input": "2026-08-04T13:25:35.181666Z", + "iopub.status.busy": "2026-08-04T13:25:35.181535Z", + "iopub.status.idle": "2026-08-04T13:25:35.189265Z", + "shell.execute_reply": "2026-08-04T13:25:35.188776Z" } }, "outputs": [ @@ -1148,7 +1154,7 @@ }, { "cell_type": "markdown", - "id": "1e2a4bda", + "id": "813ccf80", "metadata": {}, "source": [ "## From ASE\n", @@ -1160,13 +1166,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "6fa77682", + "id": "5b20e1b6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.030480Z", - "iopub.status.busy": "2026-08-03T06:26:01.030391Z", - "iopub.status.idle": "2026-08-03T06:26:01.087162Z", - "shell.execute_reply": "2026-08-03T06:26:01.086764Z" + "iopub.execute_input": "2026-08-04T13:25:35.190323Z", + "iopub.status.busy": "2026-08-04T13:25:35.190188Z", + "iopub.status.idle": "2026-08-04T13:25:35.205705Z", + "shell.execute_reply": "2026-08-04T13:25:35.205245Z" } }, "outputs": [ @@ -1235,7 +1241,7 @@ }, { "cell_type": "markdown", - "id": "3a2531e2", + "id": "8651f3f8", "metadata": {}, "source": [ "### From a trajectory or structure file\n", @@ -1248,13 +1254,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "36aeef50", + "id": "1d03b02f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.087975Z", - "iopub.status.busy": "2026-08-03T06:26:01.087885Z", - "iopub.status.idle": "2026-08-03T06:26:01.108376Z", - "shell.execute_reply": "2026-08-03T06:26:01.107869Z" + "iopub.execute_input": "2026-08-04T13:25:35.206694Z", + "iopub.status.busy": "2026-08-04T13:25:35.206524Z", + "iopub.status.idle": "2026-08-04T13:25:35.226738Z", + "shell.execute_reply": "2026-08-04T13:25:35.226178Z" } }, "outputs": [ @@ -1337,7 +1343,7 @@ }, { "cell_type": "markdown", - "id": "1a9ed2dc", + "id": "27528712", "metadata": {}, "source": [ "## CIFs, out and back\n", @@ -1348,13 +1354,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "9b0161ff", + "id": "203feaff", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.109262Z", - "iopub.status.busy": "2026-08-03T06:26:01.109166Z", - "iopub.status.idle": "2026-08-03T06:26:01.132755Z", - "shell.execute_reply": "2026-08-03T06:26:01.132380Z" + "iopub.execute_input": "2026-08-04T13:25:35.227703Z", + "iopub.status.busy": "2026-08-04T13:25:35.227587Z", + "iopub.status.idle": "2026-08-04T13:25:35.253296Z", + "shell.execute_reply": "2026-08-04T13:25:35.252759Z" } }, "outputs": [ @@ -1377,13 +1383,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "62195654", + "id": "353adb7e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.133583Z", - "iopub.status.busy": "2026-08-03T06:26:01.133496Z", - "iopub.status.idle": "2026-08-03T06:26:01.164499Z", - "shell.execute_reply": "2026-08-03T06:26:01.164092Z" + "iopub.execute_input": "2026-08-04T13:25:35.254345Z", + "iopub.status.busy": "2026-08-04T13:25:35.254142Z", + "iopub.status.idle": "2026-08-04T13:25:35.286713Z", + "shell.execute_reply": "2026-08-04T13:25:35.286114Z" } }, "outputs": [ @@ -1470,7 +1476,7 @@ }, { "cell_type": "markdown", - "id": "903d4eda", + "id": "cd15e3c9", "metadata": {}, "source": [ "Out and back with the formulas intact. `to_cif` names each file from its row,\n", @@ -1482,13 +1488,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "591ec71a", + "id": "901fedc5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.165362Z", - "iopub.status.busy": "2026-08-03T06:26:01.165218Z", - "iopub.status.idle": "2026-08-03T06:26:01.168054Z", - "shell.execute_reply": "2026-08-03T06:26:01.167674Z" + "iopub.execute_input": "2026-08-04T13:25:35.287689Z", + "iopub.status.busy": "2026-08-04T13:25:35.287567Z", + "iopub.status.idle": "2026-08-04T13:25:35.290957Z", + "shell.execute_reply": "2026-08-04T13:25:35.290491Z" } }, "outputs": [ @@ -1512,13 +1518,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "a813aad5", + "id": "5fe66758", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.168910Z", - "iopub.status.busy": "2026-08-03T06:26:01.168807Z", - "iopub.status.idle": "2026-08-03T06:26:01.171444Z", - "shell.execute_reply": "2026-08-03T06:26:01.171020Z" + "iopub.execute_input": "2026-08-04T13:25:35.291942Z", + "iopub.status.busy": "2026-08-04T13:25:35.291809Z", + "iopub.status.idle": "2026-08-04T13:25:35.294755Z", + "shell.execute_reply": "2026-08-04T13:25:35.294344Z" } }, "outputs": [ @@ -1540,7 +1546,7 @@ }, { "cell_type": "markdown", - "id": "ba7db32f", + "id": "bed46eb8", "metadata": {}, "source": [ "And the object itself is an ordinary `AnnData`, so `write_h5ad` is the archive\n", @@ -1557,13 +1563,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "3ef05165", + "id": "12718c6f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.172316Z", - "iopub.status.busy": "2026-08-03T06:26:01.172207Z", - "iopub.status.idle": "2026-08-03T06:26:01.177848Z", - "shell.execute_reply": "2026-08-03T06:26:01.177467Z" + "iopub.execute_input": "2026-08-04T13:25:35.295906Z", + "iopub.status.busy": "2026-08-04T13:25:35.295666Z", + "iopub.status.idle": "2026-08-04T13:25:35.302070Z", + "shell.execute_reply": "2026-08-04T13:25:35.301586Z" } }, "outputs": [ @@ -1596,13 +1602,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "27318bf8", + "id": "a6e810f5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.178596Z", - "iopub.status.busy": "2026-08-03T06:26:01.178512Z", - "iopub.status.idle": "2026-08-03T06:26:01.184851Z", - "shell.execute_reply": "2026-08-03T06:26:01.184390Z" + "iopub.execute_input": "2026-08-04T13:25:35.303112Z", + "iopub.status.busy": "2026-08-04T13:25:35.302977Z", + "iopub.status.idle": "2026-08-04T13:25:35.311731Z", + "shell.execute_reply": "2026-08-04T13:25:35.309950Z" } }, "outputs": [ @@ -1630,13 +1636,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "49b30989", + "id": "edff94ec", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.185688Z", - "iopub.status.busy": "2026-08-03T06:26:01.185586Z", - "iopub.status.idle": "2026-08-03T06:26:01.188406Z", - "shell.execute_reply": "2026-08-03T06:26:01.187911Z" + "iopub.execute_input": "2026-08-04T13:25:35.312730Z", + "iopub.status.busy": "2026-08-04T13:25:35.312560Z", + "iopub.status.idle": "2026-08-04T13:25:35.315548Z", + "shell.execute_reply": "2026-08-04T13:25:35.315057Z" } }, "outputs": [ @@ -1658,7 +1664,7 @@ }, { "cell_type": "markdown", - "id": "62c4bec6", + "id": "5b519d3e", "metadata": {}, "source": [ "```{note}\n", @@ -1673,13 +1679,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "da4b967c", + "id": "2b9b8089", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:01.189201Z", - "iopub.status.busy": "2026-08-03T06:26:01.189118Z", - "iopub.status.idle": "2026-08-03T06:26:01.191221Z", - "shell.execute_reply": "2026-08-03T06:26:01.190845Z" + "iopub.execute_input": "2026-08-04T13:25:35.316547Z", + "iopub.status.busy": "2026-08-04T13:25:35.316425Z", + "iopub.status.idle": "2026-08-04T13:25:35.318718Z", + "shell.execute_reply": "2026-08-04T13:25:35.318301Z" } }, "outputs": [ @@ -1706,7 +1712,7 @@ }, { "cell_type": "markdown", - "id": "9b6d4dcf", + "id": "a89b02a7", "metadata": {}, "source": [ "```{seealso}\n", diff --git a/matverse_guide/docs/tutorials/defects_and_diffusion.ipynb b/matverse_guide/docs/tutorials/defects_and_diffusion.ipynb index b849637..da36304 100644 --- a/matverse_guide/docs/tutorials/defects_and_diffusion.ipynb +++ b/matverse_guide/docs/tutorials/defects_and_diffusion.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "92af77b0", + "id": "1572eb2b", "metadata": {}, "source": [ "# Defects and diffusion\n", @@ -25,13 +25,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "da555464", + "id": "558fe6bc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:57.107086Z", - "iopub.status.busy": "2026-08-03T06:21:57.107007Z", - "iopub.status.idle": "2026-08-03T06:22:00.150501Z", - "shell.execute_reply": "2026-08-03T06:22:00.150047Z" + "iopub.execute_input": "2026-08-04T13:20:30.235389Z", + "iopub.status.busy": "2026-08-04T13:20:30.235279Z", + "iopub.status.idle": "2026-08-04T13:20:34.772640Z", + "shell.execute_reply": "2026-08-04T13:20:34.772006Z" } }, "outputs": [ @@ -39,20 +39,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -62,7 +68,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -78,7 +84,7 @@ }, { "cell_type": "markdown", - "id": "988bcf1b", + "id": "c4e3ce50", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -90,13 +96,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "68e24c31", + "id": "d52d2ccb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:00.151770Z", - "iopub.status.busy": "2026-08-03T06:22:00.151521Z", - "iopub.status.idle": "2026-08-03T06:22:00.200755Z", - "shell.execute_reply": "2026-08-03T06:22:00.200364Z" + "iopub.execute_input": "2026-08-04T13:20:34.774044Z", + "iopub.status.busy": "2026-08-04T13:20:34.773575Z", + "iopub.status.idle": "2026-08-04T13:20:34.789335Z", + "shell.execute_reply": "2026-08-04T13:20:34.788846Z" } }, "outputs": [ @@ -158,7 +164,7 @@ }, { "cell_type": "markdown", - "id": "b138a0d2", + "id": "2c056282", "metadata": {}, "source": [ "### Two ways to deform a cell before you break it\n", @@ -172,13 +178,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "11c29659", + "id": "5734a394", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:00.201629Z", - "iopub.status.busy": "2026-08-03T06:22:00.201532Z", - "iopub.status.idle": "2026-08-03T06:22:00.207071Z", - "shell.execute_reply": "2026-08-03T06:22:00.206686Z" + "iopub.execute_input": "2026-08-04T13:20:34.790309Z", + "iopub.status.busy": "2026-08-04T13:20:34.790200Z", + "iopub.status.idle": "2026-08-04T13:20:34.796568Z", + "shell.execute_reply": "2026-08-04T13:20:34.796049Z" } }, "outputs": [ @@ -203,13 +209,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "388bea47", + "id": "2a200de7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:00.207854Z", - "iopub.status.busy": "2026-08-03T06:22:00.207766Z", - "iopub.status.idle": "2026-08-03T06:22:00.211188Z", - "shell.execute_reply": "2026-08-03T06:22:00.210814Z" + "iopub.execute_input": "2026-08-04T13:20:34.797564Z", + "iopub.status.busy": "2026-08-04T13:20:34.797438Z", + "iopub.status.idle": "2026-08-04T13:20:34.801213Z", + "shell.execute_reply": "2026-08-04T13:20:34.800774Z" } }, "outputs": [ @@ -230,7 +236,7 @@ }, { "cell_type": "markdown", - "id": "5025279b", + "id": "b2154b4b", "metadata": {}, "source": [ "## Enumerating the defects\n", @@ -244,13 +250,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "6fe402d8", + "id": "162753ce", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:00.211961Z", - "iopub.status.busy": "2026-08-03T06:22:00.211872Z", - "iopub.status.idle": "2026-08-03T06:22:00.252947Z", - "shell.execute_reply": "2026-08-03T06:22:00.252558Z" + "iopub.execute_input": "2026-08-04T13:20:34.802418Z", + "iopub.status.busy": "2026-08-04T13:20:34.802293Z", + "iopub.status.idle": "2026-08-04T13:20:34.848599Z", + "shell.execute_reply": "2026-08-04T13:20:34.847880Z" } }, "outputs": [ @@ -314,7 +320,7 @@ }, { "cell_type": "markdown", - "id": "e6fde36b", + "id": "1685054c", "metadata": {}, "source": [ "```{note}\n", @@ -335,13 +341,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "2bf0ed74", + "id": "ec33fa86", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:00.253784Z", - "iopub.status.busy": "2026-08-03T06:22:00.253692Z", - "iopub.status.idle": "2026-08-03T06:22:00.382178Z", - "shell.execute_reply": "2026-08-03T06:22:00.381748Z" + "iopub.execute_input": "2026-08-04T13:20:34.849712Z", + "iopub.status.busy": "2026-08-04T13:20:34.849570Z", + "iopub.status.idle": "2026-08-04T13:20:34.902451Z", + "shell.execute_reply": "2026-08-04T13:20:34.901640Z" } }, "outputs": [ @@ -401,7 +407,7 @@ }, { "cell_type": "markdown", - "id": "b36d92d3", + "id": "7c47a8eb", "metadata": {}, "source": [ "```{note}\n", @@ -420,7 +426,7 @@ }, { "cell_type": "markdown", - "id": "5c867341", + "id": "de87e634", "metadata": {}, "source": [ "### Two kinds that are not a site you already have\n", @@ -438,13 +444,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "427aeabb", + "id": "35332e8a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:00.383108Z", - "iopub.status.busy": "2026-08-03T06:22:00.382963Z", - "iopub.status.idle": "2026-08-03T06:22:02.796921Z", - "shell.execute_reply": "2026-08-03T06:22:02.796474Z" + "iopub.execute_input": "2026-08-04T13:20:34.903963Z", + "iopub.status.busy": "2026-08-04T13:20:34.903512Z", + "iopub.status.idle": "2026-08-04T13:20:37.036316Z", + "shell.execute_reply": "2026-08-04T13:20:37.035517Z" } }, "outputs": [ @@ -479,22 +485,22 @@ " \n", " 0\n", " antisite\n", - " P\n", " O\n", + " P\n", " 168\n", " \n", " \n", " 1\n", " antisite\n", + " O\n", " P\n", - " Li\n", " 168\n", " \n", " \n", " 2\n", " antisite\n", + " O\n", " P\n", - " Fe\n", " 168\n", " \n", " \n", @@ -508,14 +514,14 @@ " 4\n", " antisite\n", " O\n", - " P\n", + " Fe\n", " 168\n", " \n", " \n", " 5\n", " antisite\n", " O\n", - " P\n", + " Fe\n", " 168\n", " \n", " \n", @@ -524,12 +530,12 @@ ], "text/plain": [ " defect removed added nsites\n", - "0 antisite P O 168\n", - "1 antisite P Li 168\n", - "2 antisite P Fe 168\n", + "0 antisite O P 168\n", + "1 antisite O P 168\n", + "2 antisite O P 168\n", "3 antisite O P 168\n", - "4 antisite O P 168\n", - "5 antisite O P 168" + "4 antisite O Fe 168\n", + "5 antisite O Fe 168" ] }, "execution_count": 7, @@ -548,7 +554,7 @@ }, { "cell_type": "markdown", - "id": "891a15f4", + "id": "a25145f9", "metadata": {}, "source": [ "Twenty-four antisites from a four-species cathode, each an ordered swap — Fe on\n", @@ -561,13 +567,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "3d59d7d9", + "id": "0dd6472b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:02.797833Z", - "iopub.status.busy": "2026-08-03T06:22:02.797732Z", - "iopub.status.idle": "2026-08-03T06:22:12.010223Z", - "shell.execute_reply": "2026-08-03T06:22:12.009681Z" + "iopub.execute_input": "2026-08-04T13:20:37.037625Z", + "iopub.status.busy": "2026-08-04T13:20:37.037480Z", + "iopub.status.idle": "2026-08-04T13:20:46.637281Z", + "shell.execute_reply": "2026-08-04T13:20:46.636642Z" } }, "outputs": [ @@ -648,7 +654,7 @@ }, { "cell_type": "markdown", - "id": "71aac75c", + "id": "c1d9470e", "metadata": {}, "source": [ "One more atom than the host supercell, which is what an interstitial is.\n", @@ -663,7 +669,7 @@ }, { "cell_type": "markdown", - "id": "67dc2f70", + "id": "d80df820", "metadata": {}, "source": [ "The raw energy of a cell with one atom missing is not a formation energy. A\n", @@ -679,13 +685,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "b9d3479a", + "id": "3a70e1d8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.011376Z", - "iopub.status.busy": "2026-08-03T06:22:12.011266Z", - "iopub.status.idle": "2026-08-03T06:22:12.061628Z", - "shell.execute_reply": "2026-08-03T06:22:12.061259Z" + "iopub.execute_input": "2026-08-04T13:20:46.642499Z", + "iopub.status.busy": "2026-08-04T13:20:46.642254Z", + "iopub.status.idle": "2026-08-04T13:20:46.704446Z", + "shell.execute_reply": "2026-08-04T13:20:46.703492Z" } }, "outputs": [ @@ -706,7 +712,7 @@ }, { "cell_type": "markdown", - "id": "b42c25c5", + "id": "b8bbe90a", "metadata": {}, "source": [ "An elemental solid has no window — copper in equilibrium with copper fixes its\n", @@ -718,13 +724,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "0e5f1e7d", + "id": "4af5e6e4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.062627Z", - "iopub.status.busy": "2026-08-03T06:22:12.062532Z", - "iopub.status.idle": "2026-08-03T06:22:12.065603Z", - "shell.execute_reply": "2026-08-03T06:22:12.065250Z" + "iopub.execute_input": "2026-08-04T13:20:46.705999Z", + "iopub.status.busy": "2026-08-04T13:20:46.705768Z", + "iopub.status.idle": "2026-08-04T13:20:46.711301Z", + "shell.execute_reply": "2026-08-04T13:20:46.710130Z" } }, "outputs": [ @@ -751,7 +757,7 @@ }, { "cell_type": "markdown", - "id": "61371ceb", + "id": "29c85ceb", "metadata": {}, "source": [ "**1.314 eV**, against roughly 1.3 eV measured for copper by positron\n", @@ -776,13 +782,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "6eee5f8e", + "id": "d1e69cde", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.066458Z", - "iopub.status.busy": "2026-08-03T06:22:12.066317Z", - "iopub.status.idle": "2026-08-03T06:22:12.070480Z", - "shell.execute_reply": "2026-08-03T06:22:12.070140Z" + "iopub.execute_input": "2026-08-04T13:20:46.712513Z", + "iopub.status.busy": "2026-08-04T13:20:46.712371Z", + "iopub.status.idle": "2026-08-04T13:20:46.717965Z", + "shell.execute_reply": "2026-08-04T13:20:46.717473Z" } }, "outputs": [ @@ -809,13 +815,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "6899084d", + "id": "e9ee37e2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.071275Z", - "iopub.status.busy": "2026-08-03T06:22:12.071178Z", - "iopub.status.idle": "2026-08-03T06:22:12.204492Z", - "shell.execute_reply": "2026-08-03T06:22:12.204068Z" + "iopub.execute_input": "2026-08-04T13:20:46.719477Z", + "iopub.status.busy": "2026-08-04T13:20:46.719342Z", + "iopub.status.idle": "2026-08-04T13:20:46.867866Z", + "shell.execute_reply": "2026-08-04T13:20:46.867583Z" } }, "outputs": [ @@ -859,13 +865,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "b7062a93", + "id": "dcc916e5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.205416Z", - "iopub.status.busy": "2026-08-03T06:22:12.205314Z", - "iopub.status.idle": "2026-08-03T06:22:12.210464Z", - "shell.execute_reply": "2026-08-03T06:22:12.209989Z" + "iopub.execute_input": "2026-08-04T13:20:46.870082Z", + "iopub.status.busy": "2026-08-04T13:20:46.869576Z", + "iopub.status.idle": "2026-08-04T13:20:46.876445Z", + "shell.execute_reply": "2026-08-04T13:20:46.875692Z" } }, "outputs": [ @@ -923,7 +929,7 @@ }, { "cell_type": "markdown", - "id": "9497f20d", + "id": "d915dd74", "metadata": {}, "source": [ "Each straight segment is one charge state, and its slope is the charge; the\n", @@ -948,7 +954,7 @@ }, { "cell_type": "markdown", - "id": "eb3f8e15", + "id": "ed906529", "metadata": {}, "source": [ "### The charged states are lying, and by how much\n", @@ -966,13 +972,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "2f7e7603", + "id": "ac87803f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.211281Z", - "iopub.status.busy": "2026-08-03T06:22:12.211181Z", - "iopub.status.idle": "2026-08-03T06:22:12.292247Z", - "shell.execute_reply": "2026-08-03T06:22:12.291763Z" + "iopub.execute_input": "2026-08-04T13:20:46.877625Z", + "iopub.status.busy": "2026-08-04T13:20:46.877491Z", + "iopub.status.idle": "2026-08-04T13:20:47.213548Z", + "shell.execute_reply": "2026-08-04T13:20:47.212637Z" } }, "outputs": [ @@ -1009,7 +1015,7 @@ }, { "cell_type": "markdown", - "id": "410d60b6", + "id": "16428a57", "metadata": {}, "source": [ "Zero shift at the valence band maximum and a growing one across the gap, which\n", @@ -1056,7 +1062,7 @@ }, { "cell_type": "markdown", - "id": "37fa7df6", + "id": "998abcc2", "metadata": {}, "source": [ "## What it costs to move\n", @@ -1071,13 +1077,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "6bf5aefe", + "id": "160ec3e6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.293141Z", - "iopub.status.busy": "2026-08-03T06:22:12.293040Z", - "iopub.status.idle": "2026-08-03T06:22:12.302541Z", - "shell.execute_reply": "2026-08-03T06:22:12.302136Z" + "iopub.execute_input": "2026-08-04T13:20:47.214823Z", + "iopub.status.busy": "2026-08-04T13:20:47.214684Z", + "iopub.status.idle": "2026-08-04T13:20:47.224650Z", + "shell.execute_reply": "2026-08-04T13:20:47.224117Z" } }, "outputs": [ @@ -1134,7 +1140,7 @@ }, { "cell_type": "markdown", - "id": "3538f85d", + "id": "33858abc", "metadata": {}, "source": [ "2.556 Å is the nearest-neighbour distance in copper, `a/√2`, which is what a\n", @@ -1158,13 +1164,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "5851b75b", + "id": "b84e80de", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.303380Z", - "iopub.status.busy": "2026-08-03T06:22:12.303288Z", - "iopub.status.idle": "2026-08-03T06:22:12.339977Z", - "shell.execute_reply": "2026-08-03T06:22:12.339539Z" + "iopub.execute_input": "2026-08-04T13:20:47.225961Z", + "iopub.status.busy": "2026-08-04T13:20:47.225847Z", + "iopub.status.idle": "2026-08-04T13:20:47.262837Z", + "shell.execute_reply": "2026-08-04T13:20:47.262377Z" } }, "outputs": [ @@ -1197,7 +1203,7 @@ }, { "cell_type": "markdown", - "id": "de2427e5", + "id": "02f888ef", "metadata": {}, "source": [ "`key_added` matters here. Without it the second relaxation would overwrite the\n", @@ -1213,13 +1219,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "3f9e1b4f", + "id": "3dbe1ed9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:12.340845Z", - "iopub.status.busy": "2026-08-03T06:22:12.340754Z", - "iopub.status.idle": "2026-08-03T06:22:13.335838Z", - "shell.execute_reply": "2026-08-03T06:22:13.335431Z" + "iopub.execute_input": "2026-08-04T13:20:47.264324Z", + "iopub.status.busy": "2026-08-04T13:20:47.264093Z", + "iopub.status.idle": "2026-08-04T13:20:48.255090Z", + "shell.execute_reply": "2026-08-04T13:20:48.254569Z" } }, "outputs": [ @@ -1282,7 +1288,7 @@ }, { "cell_type": "markdown", - "id": "b7d50e0e", + "id": "69c6c32c", "metadata": {}, "source": [ "**0.754 eV against a literature value of about 0.70 eV.** For a potential that\n", @@ -1305,13 +1311,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "152a9c9b", + "id": "d5c5cd50", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:13.337150Z", - "iopub.status.busy": "2026-08-03T06:22:13.337050Z", - "iopub.status.idle": "2026-08-03T06:22:13.463772Z", - "shell.execute_reply": "2026-08-03T06:22:13.463365Z" + "iopub.execute_input": "2026-08-04T13:20:48.256191Z", + "iopub.status.busy": "2026-08-04T13:20:48.256065Z", + "iopub.status.idle": "2026-08-04T13:20:48.387669Z", + "shell.execute_reply": "2026-08-04T13:20:48.387161Z" } }, "outputs": [ @@ -1349,7 +1355,7 @@ }, { "cell_type": "markdown", - "id": "40787163", + "id": "24ffa657", "metadata": {}, "source": [ "The path rises to a single saddle and comes back down, which is what a\n", @@ -1373,13 +1379,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "3b1d51c1", + "id": "8c79b449", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:13.464655Z", - "iopub.status.busy": "2026-08-03T06:22:13.464561Z", - "iopub.status.idle": "2026-08-03T06:22:13.470520Z", - "shell.execute_reply": "2026-08-03T06:22:13.470153Z" + "iopub.execute_input": "2026-08-04T13:20:48.388988Z", + "iopub.status.busy": "2026-08-04T13:20:48.388851Z", + "iopub.status.idle": "2026-08-04T13:20:48.395159Z", + "shell.execute_reply": "2026-08-04T13:20:48.394664Z" } }, "outputs": [ @@ -1474,13 +1480,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "8795e9f6", + "id": "c94b3794", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:13.471280Z", - "iopub.status.busy": "2026-08-03T06:22:13.471186Z", - "iopub.status.idle": "2026-08-03T06:22:13.861872Z", - "shell.execute_reply": "2026-08-03T06:22:13.861499Z" + "iopub.execute_input": "2026-08-04T13:20:48.396267Z", + "iopub.status.busy": "2026-08-04T13:20:48.396124Z", + "iopub.status.idle": "2026-08-04T13:20:48.619903Z", + "shell.execute_reply": "2026-08-04T13:20:48.619593Z" } }, "outputs": [ @@ -1520,7 +1526,7 @@ }, { "cell_type": "markdown", - "id": "af960728", + "id": "d61a99bf", "metadata": {}, "source": [ "A straight line on this plot is the definition of Arrhenius behaviour, and its\n", @@ -1540,7 +1546,7 @@ }, { "cell_type": "markdown", - "id": "d922777d", + "id": "cfd82451", "metadata": {}, "source": [ "## Which barriers are actually worth computing?\n", @@ -1556,13 +1562,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "97d4291b", + "id": "49afe235", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:13.862886Z", - "iopub.status.busy": "2026-08-03T06:22:13.862792Z", - "iopub.status.idle": "2026-08-03T06:22:14.214295Z", - "shell.execute_reply": "2026-08-03T06:22:14.213764Z" + "iopub.execute_input": "2026-08-04T13:20:48.626209Z", + "iopub.status.busy": "2026-08-04T13:20:48.625937Z", + "iopub.status.idle": "2026-08-04T13:20:48.990181Z", + "shell.execute_reply": "2026-08-04T13:20:48.988875Z" } }, "outputs": [ @@ -1636,7 +1642,7 @@ }, { "cell_type": "markdown", - "id": "fcc680b3", + "id": "e00a6476", "metadata": {}, "source": [ "One hop each. Close-packed lithium has twelve neighbours and they are all the\n", @@ -1652,13 +1658,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "ab221445", + "id": "baa07ec9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:14.215350Z", - "iopub.status.busy": "2026-08-03T06:22:14.215231Z", - "iopub.status.idle": "2026-08-03T06:22:14.229352Z", - "shell.execute_reply": "2026-08-03T06:22:14.228955Z" + "iopub.execute_input": "2026-08-04T13:20:48.991620Z", + "iopub.status.busy": "2026-08-04T13:20:48.991480Z", + "iopub.status.idle": "2026-08-04T13:20:49.006315Z", + "shell.execute_reply": "2026-08-04T13:20:49.005811Z" } }, "outputs": [ @@ -1724,7 +1730,7 @@ }, { "cell_type": "markdown", - "id": "2395db53", + "id": "4637e544", "metadata": {}, "source": [ "Stretching *c* separates the twelve neighbours into four in the basal plane at\n", @@ -1749,7 +1755,7 @@ }, { "cell_type": "markdown", - "id": "6425a4d6", + "id": "359c76c2", "metadata": {}, "source": [ "## Before the barrier: can the ion get out at all?\n", @@ -1773,13 +1779,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "36517168", + "id": "b930f2af", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:14.230175Z", - "iopub.status.busy": "2026-08-03T06:22:14.230086Z", - "iopub.status.idle": "2026-08-03T06:22:14.584497Z", - "shell.execute_reply": "2026-08-03T06:22:14.583961Z" + "iopub.execute_input": "2026-08-04T13:20:49.007414Z", + "iopub.status.busy": "2026-08-04T13:20:49.007297Z", + "iopub.status.idle": "2026-08-04T13:20:49.368173Z", + "shell.execute_reply": "2026-08-04T13:20:49.367681Z" } }, "outputs": [ @@ -1870,7 +1876,7 @@ }, { "cell_type": "markdown", - "id": "4ce9acb5", + "id": "3bbc7b14", "metadata": {}, "source": [ "**3 against 2**, which is the textbook difference between the two: spinel\n", @@ -1890,13 +1896,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "56f3dd55", + "id": "a898507c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:14.585502Z", - "iopub.status.busy": "2026-08-03T06:22:14.585406Z", - "iopub.status.idle": "2026-08-03T06:22:14.706458Z", - "shell.execute_reply": "2026-08-03T06:22:14.705864Z" + "iopub.execute_input": "2026-08-04T13:20:49.369282Z", + "iopub.status.busy": "2026-08-04T13:20:49.369175Z", + "iopub.status.idle": "2026-08-04T13:20:49.491264Z", + "shell.execute_reply": "2026-08-04T13:20:49.490541Z" } }, "outputs": [ @@ -1979,7 +1985,7 @@ }, { "cell_type": "markdown", - "id": "3f0817b1", + "id": "50831770", "metadata": {}, "source": [ "Allow a 5 Å hop and the layered oxide becomes three-dimensional too, because\n", @@ -1997,7 +2003,7 @@ }, { "cell_type": "markdown", - "id": "66c40919", + "id": "2b0c183c", "metadata": {}, "source": [ "## Handing the hop to DFT\n", @@ -2011,13 +2017,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "2c434fcf", + "id": "931f43af", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:14.707530Z", - "iopub.status.busy": "2026-08-03T06:22:14.707425Z", - "iopub.status.idle": "2026-08-03T06:22:14.726313Z", - "shell.execute_reply": "2026-08-03T06:22:14.725913Z" + "iopub.execute_input": "2026-08-04T13:20:49.492554Z", + "iopub.status.busy": "2026-08-04T13:20:49.492415Z", + "iopub.status.idle": "2026-08-04T13:20:49.523469Z", + "shell.execute_reply": "2026-08-04T13:20:49.522998Z" } }, "outputs": [ @@ -2046,7 +2052,7 @@ }, { "cell_type": "markdown", - "id": "1f3ddde2", + "id": "b6bd9b4a", "metadata": {}, "source": [ "Two of those settings are the reason to use a preset rather than write the file\n", @@ -2063,7 +2069,7 @@ }, { "cell_type": "markdown", - "id": "93e84cd5", + "id": "0b505ac1", "metadata": {}, "source": [ "## Finding a defect somebody else made\n", @@ -2080,13 +2086,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "ed76b905", + "id": "db23d97d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:14.727166Z", - "iopub.status.busy": "2026-08-03T06:22:14.727078Z", - "iopub.status.idle": "2026-08-03T06:22:14.743519Z", - "shell.execute_reply": "2026-08-03T06:22:14.743141Z" + "iopub.execute_input": "2026-08-04T13:20:49.524945Z", + "iopub.status.busy": "2026-08-04T13:20:49.524837Z", + "iopub.status.idle": "2026-08-04T13:20:49.565709Z", + "shell.execute_reply": "2026-08-04T13:20:49.565226Z" } }, "outputs": [ @@ -2129,7 +2135,7 @@ }, { "cell_type": "markdown", - "id": "f0a67dac", + "id": "4f55f1e3", "metadata": {}, "source": [ "The vacancy comes back at the coordinates it was made at, from a cell whose\n", @@ -2151,7 +2157,7 @@ }, { "cell_type": "markdown", - "id": "51dce66a", + "id": "56b2ddd0", "metadata": {}, "source": [ "## The curve a charge state leaves behind\n", @@ -2169,13 +2175,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "c3890a6b", + "id": "88e36a43", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:14.744352Z", - "iopub.status.busy": "2026-08-03T06:22:14.744262Z", - "iopub.status.idle": "2026-08-03T06:22:14.753858Z", - "shell.execute_reply": "2026-08-03T06:22:14.752574Z" + "iopub.execute_input": "2026-08-04T13:20:49.566792Z", + "iopub.status.busy": "2026-08-04T13:20:49.566666Z", + "iopub.status.idle": "2026-08-04T13:20:49.575709Z", + "shell.execute_reply": "2026-08-04T13:20:49.575218Z" } }, "outputs": [ @@ -2215,7 +2221,7 @@ }, { "cell_type": "markdown", - "id": "2b755512", + "id": "db9a8ab8", "metadata": {}, "source": [ "The frequency is $\\hbar\\sqrt{c}$ with the mass-weighted units carried\n", @@ -2241,7 +2247,7 @@ }, { "cell_type": "markdown", - "id": "daf75b95", + "id": "c3149390", "metadata": {}, "source": [ "## Is it a killer?\n", @@ -2258,13 +2264,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "554d394a", + "id": "dfaab364", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:14.754706Z", - "iopub.status.busy": "2026-08-03T06:22:14.754606Z", - "iopub.status.idle": "2026-08-03T06:22:16.485143Z", - "shell.execute_reply": "2026-08-03T06:22:16.484377Z" + "iopub.execute_input": "2026-08-04T13:20:49.576697Z", + "iopub.status.busy": "2026-08-04T13:20:49.576591Z", + "iopub.status.idle": "2026-08-04T13:20:51.323392Z", + "shell.execute_reply": "2026-08-04T13:20:51.322833Z" } }, "outputs": [ @@ -2335,7 +2341,7 @@ }, { "cell_type": "markdown", - "id": "f800c561", + "id": "995e33d2", "metadata": {}, "source": [ "Doubling the electron–phonon matrix element multiplies the capture rate by\n", @@ -2349,13 +2355,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "33e1f2b1", + "id": "b69378a8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:16.486896Z", - "iopub.status.busy": "2026-08-03T06:22:16.486728Z", - "iopub.status.idle": "2026-08-03T06:22:21.907728Z", - "shell.execute_reply": "2026-08-03T06:22:21.907197Z" + "iopub.execute_input": "2026-08-04T13:20:51.324865Z", + "iopub.status.busy": "2026-08-04T13:20:51.324728Z", + "iopub.status.idle": "2026-08-04T13:20:56.826930Z", + "shell.execute_reply": "2026-08-04T13:20:56.826338Z" } }, "outputs": [ @@ -2420,7 +2426,7 @@ }, { "cell_type": "markdown", - "id": "2cc0b8f3", + "id": "6c50c4b3", "metadata": {}, "source": [ "Orders of magnitude across a few hundred kelvin, which is why a capture\n", @@ -2444,7 +2450,7 @@ }, { "cell_type": "markdown", - "id": "b5fe605c", + "id": "27159be4", "metadata": {}, "source": [ "## What the object remembers" @@ -2453,13 +2459,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "8a191838", + "id": "82589868", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:21.908806Z", - "iopub.status.busy": "2026-08-03T06:22:21.908703Z", - "iopub.status.idle": "2026-08-03T06:22:21.910997Z", - "shell.execute_reply": "2026-08-03T06:22:21.910670Z" + "iopub.execute_input": "2026-08-04T13:20:56.828394Z", + "iopub.status.busy": "2026-08-04T13:20:56.828224Z", + "iopub.status.idle": "2026-08-04T13:20:56.832030Z", + "shell.execute_reply": "2026-08-04T13:20:56.831441Z" } }, "outputs": [ @@ -2488,7 +2494,7 @@ }, { "cell_type": "markdown", - "id": "b05b2e5e", + "id": "d9a11183", "metadata": {}, "source": [ "```{seealso}\n", diff --git a/matverse_guide/docs/tutorials/disorder.ipynb b/matverse_guide/docs/tutorials/disorder.ipynb index 60a2731..4f02b1e 100644 --- a/matverse_guide/docs/tutorials/disorder.ipynb +++ b/matverse_guide/docs/tutorials/disorder.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "e086e6c7", + "id": "e7355649", "metadata": {}, "source": [ "# Disorder\n", @@ -24,13 +24,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "59726079", + "id": "9120e5fb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:47.472807Z", - "iopub.status.busy": "2026-08-03T06:24:47.472727Z", - "iopub.status.idle": "2026-08-03T06:24:50.558192Z", - "shell.execute_reply": "2026-08-03T06:24:50.557728Z" + "iopub.execute_input": "2026-08-04T13:23:58.393161Z", + "iopub.status.busy": "2026-08-04T13:23:58.393081Z", + "iopub.status.idle": "2026-08-04T13:24:04.188517Z", + "shell.execute_reply": "2026-08-04T13:24:04.187974Z" } }, "outputs": [ @@ -38,20 +38,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -61,7 +67,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -77,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "e36295be", + "id": "86e6bbc7", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -90,13 +96,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "f7d03fb0", + "id": "01256df1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:50.559352Z", - "iopub.status.busy": "2026-08-03T06:24:50.559097Z", - "iopub.status.idle": "2026-08-03T06:24:50.615623Z", - "shell.execute_reply": "2026-08-03T06:24:50.615005Z" + "iopub.execute_input": "2026-08-04T13:24:04.190047Z", + "iopub.status.busy": "2026-08-04T13:24:04.189671Z", + "iopub.status.idle": "2026-08-04T13:24:04.216825Z", + "shell.execute_reply": "2026-08-04T13:24:04.216271Z" } }, "outputs": [ @@ -183,7 +189,7 @@ }, { "cell_type": "markdown", - "id": "aab7478e", + "id": "520618cc", "metadata": {}, "source": [ "Note that `mv.pp.describe` reports a formula for all three — a disordered cell\n", @@ -195,13 +201,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "687eccf0", + "id": "a9613dc0", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:50.616642Z", - "iopub.status.busy": "2026-08-03T06:24:50.616525Z", - "iopub.status.idle": "2026-08-03T06:24:50.623396Z", - "shell.execute_reply": "2026-08-03T06:24:50.622977Z" + "iopub.execute_input": "2026-08-04T13:24:04.217991Z", + "iopub.status.busy": "2026-08-04T13:24:04.217849Z", + "iopub.status.idle": "2026-08-04T13:24:04.227253Z", + "shell.execute_reply": "2026-08-04T13:24:04.226831Z" } }, "outputs": [ @@ -292,7 +298,7 @@ }, { "cell_type": "markdown", - "id": "a28cd256", + "id": "5a9d9f3e", "metadata": {}, "source": [ "`max_site_disorder` is how far the worst site is from having a single owner:\n", @@ -309,13 +315,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "f50fddb7", + "id": "1982e554", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:50.624219Z", - "iopub.status.busy": "2026-08-03T06:24:50.624128Z", - "iopub.status.idle": "2026-08-03T06:24:50.628855Z", - "shell.execute_reply": "2026-08-03T06:24:50.628494Z" + "iopub.execute_input": "2026-08-04T13:24:04.228469Z", + "iopub.status.busy": "2026-08-04T13:24:04.228339Z", + "iopub.status.idle": "2026-08-04T13:24:04.234663Z", + "shell.execute_reply": "2026-08-04T13:24:04.234216Z" } }, "outputs": [ @@ -391,7 +397,7 @@ }, { "cell_type": "markdown", - "id": "78bdeb2f", + "id": "4ad5a4a4", "metadata": {}, "source": [ "Exact. And the consequence is the interesting part." @@ -400,20 +406,20 @@ { "cell_type": "code", "execution_count": 5, - "id": "cee9377f", + "id": "bd35ce90", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:50.629611Z", - "iopub.status.busy": "2026-08-03T06:24:50.629525Z", - "iopub.status.idle": "2026-08-03T06:24:50.783882Z", - "shell.execute_reply": "2026-08-03T06:24:50.783443Z" + "iopub.execute_input": "2026-08-04T13:24:04.235817Z", + "iopub.status.busy": "2026-08-04T13:24:04.235683Z", + "iopub.status.idle": "2026-08-04T13:24:04.413452Z", + "shell.execute_reply": "2026-08-04T13:24:04.412953Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -454,7 +460,7 @@ }, { "cell_type": "markdown", - "id": "70f5644e", + "id": "e671da81", "metadata": {}, "source": [ "At room temperature the entropy term is tens of meV and usually ignorable. At a\n", @@ -483,13 +489,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "7b21f065", + "id": "17e85f95", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:50.784773Z", - "iopub.status.busy": "2026-08-03T06:24:50.784675Z", - "iopub.status.idle": "2026-08-03T06:24:51.783875Z", - "shell.execute_reply": "2026-08-03T06:24:51.783413Z" + "iopub.execute_input": "2026-08-04T13:24:04.414724Z", + "iopub.status.busy": "2026-08-04T13:24:04.414577Z", + "iopub.status.idle": "2026-08-04T13:24:05.102882Z", + "shell.execute_reply": "2026-08-04T13:24:05.102434Z" } }, "outputs": [ @@ -609,13 +615,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "8453e3a6", + "id": "7067cef0", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:51.785237Z", - "iopub.status.busy": "2026-08-03T06:24:51.785132Z", - "iopub.status.idle": "2026-08-03T06:24:51.787754Z", - "shell.execute_reply": "2026-08-03T06:24:51.787340Z" + "iopub.execute_input": "2026-08-04T13:24:05.104329Z", + "iopub.status.busy": "2026-08-04T13:24:05.104179Z", + "iopub.status.idle": "2026-08-04T13:24:05.108116Z", + "shell.execute_reply": "2026-08-04T13:24:05.107492Z" } }, "outputs": [ @@ -636,7 +642,7 @@ }, { "cell_type": "markdown", - "id": "0a300ba2", + "id": "122c3ffd", "metadata": {}, "source": [ "Every cell is now ordered, and the compositions survived: Cu₀.₅Au₀.₅ became\n", @@ -652,13 +658,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "2fb797d4", + "id": "bc10b4f1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:51.788634Z", - "iopub.status.busy": "2026-08-03T06:24:51.788533Z", - "iopub.status.idle": "2026-08-03T06:24:51.790909Z", - "shell.execute_reply": "2026-08-03T06:24:51.790503Z" + "iopub.execute_input": "2026-08-04T13:24:05.109260Z", + "iopub.status.busy": "2026-08-04T13:24:05.109121Z", + "iopub.status.idle": "2026-08-04T13:24:05.112782Z", + "shell.execute_reply": "2026-08-04T13:24:05.112116Z" } }, "outputs": [ @@ -685,7 +691,7 @@ }, { "cell_type": "markdown", - "id": "645c6e5f", + "id": "593c1b07", "metadata": {}, "source": [ "Arrangements are ranked by **Ewald energy**, which needs oxidation states.\n", @@ -716,13 +722,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "192ccd98", + "id": "7bbcb23f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:51.791687Z", - "iopub.status.busy": "2026-08-03T06:24:51.791598Z", - "iopub.status.idle": "2026-08-03T06:24:51.869961Z", - "shell.execute_reply": "2026-08-03T06:24:51.869495Z" + "iopub.execute_input": "2026-08-04T13:24:05.114394Z", + "iopub.status.busy": "2026-08-04T13:24:05.114252Z", + "iopub.status.idle": "2026-08-04T13:24:05.201011Z", + "shell.execute_reply": "2026-08-04T13:24:05.200515Z" } }, "outputs": [ @@ -745,7 +751,7 @@ }, { "cell_type": "markdown", - "id": "86f8e22e", + "id": "c29c3c72", "metadata": {}, "source": [ "It needs ATAT's `mcsqs`, a separate Fortran program, and it refuses rather than\n", @@ -763,13 +769,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "d71d03fb", + "id": "a2d2c9b7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:51.870834Z", - "iopub.status.busy": "2026-08-03T06:24:51.870741Z", - "iopub.status.idle": "2026-08-03T06:24:51.895806Z", - "shell.execute_reply": "2026-08-03T06:24:51.895378Z" + "iopub.execute_input": "2026-08-04T13:24:05.202425Z", + "iopub.status.busy": "2026-08-04T13:24:05.202310Z", + "iopub.status.idle": "2026-08-04T13:24:05.231227Z", + "shell.execute_reply": "2026-08-04T13:24:05.230540Z" } }, "outputs": [ @@ -829,13 +835,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "1a723c2b", + "id": "f7b88dd0", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:51.896731Z", - "iopub.status.busy": "2026-08-03T06:24:51.896574Z", - "iopub.status.idle": "2026-08-03T06:24:51.899535Z", - "shell.execute_reply": "2026-08-03T06:24:51.899112Z" + "iopub.execute_input": "2026-08-04T13:24:05.232405Z", + "iopub.status.busy": "2026-08-04T13:24:05.232268Z", + "iopub.status.idle": "2026-08-04T13:24:05.236082Z", + "shell.execute_reply": "2026-08-04T13:24:05.235645Z" } }, "outputs": [ @@ -859,7 +865,7 @@ }, { "cell_type": "markdown", - "id": "6428e409", + "id": "23d62d3a", "metadata": {}, "source": [ "That message is the point of the function existing at all.\n", @@ -893,13 +899,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "f5e62161", + "id": "57e0f3f8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:51.900358Z", - "iopub.status.busy": "2026-08-03T06:24:51.900202Z", - "iopub.status.idle": "2026-08-03T06:24:51.902214Z", - "shell.execute_reply": "2026-08-03T06:24:51.901858Z" + "iopub.execute_input": "2026-08-04T13:24:05.237529Z", + "iopub.status.busy": "2026-08-04T13:24:05.237400Z", + "iopub.status.idle": "2026-08-04T13:24:05.240699Z", + "shell.execute_reply": "2026-08-04T13:24:05.239927Z" } }, "outputs": [ @@ -920,7 +926,7 @@ }, { "cell_type": "markdown", - "id": "ec22f321", + "id": "10b35772", "metadata": {}, "source": [ "```{seealso}\n", @@ -932,7 +938,7 @@ }, { "cell_type": "markdown", - "id": "c42190fe", + "id": "3e299c07", "metadata": {}, "source": [ "## What can this be alloyed with?\n", @@ -949,13 +955,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "92d7316c", + "id": "154da5ab", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:51.902950Z", - "iopub.status.busy": "2026-08-03T06:24:51.902867Z", - "iopub.status.idle": "2026-08-03T06:24:52.835072Z", - "shell.execute_reply": "2026-08-03T06:24:52.834658Z" + "iopub.execute_input": "2026-08-04T13:24:05.241863Z", + "iopub.status.busy": "2026-08-04T13:24:05.241734Z", + "iopub.status.idle": "2026-08-04T13:24:06.095326Z", + "shell.execute_reply": "2026-08-04T13:24:06.094844Z" } }, "outputs": [ @@ -1050,7 +1056,7 @@ }, { "cell_type": "markdown", - "id": "a6879bba", + "id": "c0f544e4", "metadata": {}, "source": [ "Three pairs out of four materials, and the missing one is the point. **Silicon\n", @@ -1061,13 +1067,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "193301e9", + "id": "7cbecb84", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:52.836075Z", - "iopub.status.busy": "2026-08-03T06:24:52.835974Z", - "iopub.status.idle": "2026-08-03T06:24:52.838363Z", - "shell.execute_reply": "2026-08-03T06:24:52.837963Z" + "iopub.execute_input": "2026-08-04T13:24:06.096601Z", + "iopub.status.busy": "2026-08-04T13:24:06.096485Z", + "iopub.status.idle": "2026-08-04T13:24:06.099157Z", + "shell.execute_reply": "2026-08-04T13:24:06.098750Z" } }, "outputs": [ @@ -1090,7 +1096,7 @@ }, { "cell_type": "markdown", - "id": "2d3cd3a8", + "id": "57b9b0c8", "metadata": {}, "source": [ "\"Not commensurate\" — there is no species you can swap to get from Si to GaAs\n", @@ -1117,7 +1123,7 @@ }, { "cell_type": "markdown", - "id": "67677a6f", + "id": "1ecfe612", "metadata": {}, "source": [ "## Did the disorder work?\n", @@ -1139,13 +1145,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "a5af54cc", + "id": "434b8127", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:52.839202Z", - "iopub.status.busy": "2026-08-03T06:24:52.839105Z", - "iopub.status.idle": "2026-08-03T06:24:53.140559Z", - "shell.execute_reply": "2026-08-03T06:24:53.140091Z" + "iopub.execute_input": "2026-08-04T13:24:06.100379Z", + "iopub.status.busy": "2026-08-04T13:24:06.100249Z", + "iopub.status.idle": "2026-08-04T13:24:06.415577Z", + "shell.execute_reply": "2026-08-04T13:24:06.415092Z" } }, "outputs": [ @@ -1230,7 +1236,7 @@ }, { "cell_type": "markdown", - "id": "d1e317b2", + "id": "2a97b533", "metadata": {}, "source": [ "**+1 for the like pairs and −1 for the unlike ones** on B2, which is what\n", @@ -1250,13 +1256,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "f2aa7052", + "id": "425983fc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:53.141451Z", - "iopub.status.busy": "2026-08-03T06:24:53.141366Z", - "iopub.status.idle": "2026-08-03T06:24:54.007767Z", - "shell.execute_reply": "2026-08-03T06:24:54.007350Z" + "iopub.execute_input": "2026-08-04T13:24:06.416559Z", + "iopub.status.busy": "2026-08-04T13:24:06.416438Z", + "iopub.status.idle": "2026-08-04T13:24:07.324028Z", + "shell.execute_reply": "2026-08-04T13:24:07.323530Z" } }, "outputs": [ @@ -1339,7 +1345,7 @@ }, { "cell_type": "markdown", - "id": "1855cfbc", + "id": "3be850ed", "metadata": {}, "source": [ "The sign **inverts** between the first shell and the second. In bcc the eight\n", @@ -1362,7 +1368,7 @@ }, { "cell_type": "markdown", - "id": "5db78a03", + "id": "c3a926b7", "metadata": {}, "source": [ "## An effective Hamiltonian, and what it buys\n", @@ -1384,13 +1390,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "f4e3c71c", + "id": "c0e256dd", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:54.008744Z", - "iopub.status.busy": "2026-08-03T06:24:54.008652Z", - "iopub.status.idle": "2026-08-03T06:24:55.910118Z", - "shell.execute_reply": "2026-08-03T06:24:55.909668Z" + "iopub.execute_input": "2026-08-04T13:24:07.325687Z", + "iopub.status.busy": "2026-08-04T13:24:07.325433Z", + "iopub.status.idle": "2026-08-04T13:24:11.962890Z", + "shell.execute_reply": "2026-08-04T13:24:11.961791Z" } }, "outputs": [ @@ -1441,7 +1447,7 @@ }, { "cell_type": "markdown", - "id": "0f46c617", + "id": "1c6ed687", "metadata": {}, "source": [ "The number that says whether a cluster expansion is any good is the\n", @@ -1461,13 +1467,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "829dcd6e", + "id": "668866a5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:55.911610Z", - "iopub.status.busy": "2026-08-03T06:24:55.911259Z", - "iopub.status.idle": "2026-08-03T06:25:33.798791Z", - "shell.execute_reply": "2026-08-03T06:25:33.798026Z" + "iopub.execute_input": "2026-08-04T13:24:11.969934Z", + "iopub.status.busy": "2026-08-04T13:24:11.969204Z", + "iopub.status.idle": "2026-08-04T13:24:52.268382Z", + "shell.execute_reply": "2026-08-04T13:24:52.267112Z" } }, "outputs": [ @@ -1505,7 +1511,7 @@ }, { "cell_type": "markdown", - "id": "3bb92e2b", + "id": "a47f9a33", "metadata": {}, "source": [ "A heat capacity that is flat everywhere except one sharp peak, and the peak is\n", diff --git a/matverse_guide/docs/tutorials/dynamics.ipynb b/matverse_guide/docs/tutorials/dynamics.ipynb index ca45450..0ba5841 100644 --- a/matverse_guide/docs/tutorials/dynamics.ipynb +++ b/matverse_guide/docs/tutorials/dynamics.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "8cabf223", + "id": "2926b054", "metadata": {}, "source": [ "# Dynamics\n", @@ -23,13 +23,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "9399439f", + "id": "fc99b33b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:31.627006Z", - "iopub.status.busy": "2026-08-03T06:22:31.626863Z", - "iopub.status.idle": "2026-08-03T06:22:34.659203Z", - "shell.execute_reply": "2026-08-03T06:22:34.658763Z" + "iopub.execute_input": "2026-08-04T13:21:13.185496Z", + "iopub.status.busy": "2026-08-04T13:21:13.185115Z", + "iopub.status.idle": "2026-08-04T13:21:17.968527Z", + "shell.execute_reply": "2026-08-04T13:21:17.968058Z" } }, "outputs": [ @@ -37,20 +37,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -60,7 +66,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -76,7 +82,7 @@ }, { "cell_type": "markdown", - "id": "507cabe2", + "id": "dc91d7b3", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -89,13 +95,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "b085b0da", + "id": "304db55c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:34.660369Z", - "iopub.status.busy": "2026-08-03T06:22:34.660114Z", - "iopub.status.idle": "2026-08-03T06:22:34.709836Z", - "shell.execute_reply": "2026-08-03T06:22:34.709487Z" + "iopub.execute_input": "2026-08-04T13:21:17.970454Z", + "iopub.status.busy": "2026-08-04T13:21:17.970077Z", + "iopub.status.idle": "2026-08-04T13:21:17.992504Z", + "shell.execute_reply": "2026-08-04T13:21:17.991089Z" } }, "outputs": [ @@ -157,7 +163,7 @@ }, { "cell_type": "markdown", - "id": "678e8977", + "id": "29e5230d", "metadata": {}, "source": [ "## Running\n", @@ -169,13 +175,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "f10639fb", + "id": "6779ac17", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:34.710677Z", - "iopub.status.busy": "2026-08-03T06:22:34.710579Z", - "iopub.status.idle": "2026-08-03T06:22:41.513574Z", - "shell.execute_reply": "2026-08-03T06:22:41.513061Z" + "iopub.execute_input": "2026-08-04T13:21:17.993819Z", + "iopub.status.busy": "2026-08-04T13:21:17.993681Z", + "iopub.status.idle": "2026-08-04T13:21:25.180053Z", + "shell.execute_reply": "2026-08-04T13:21:25.179548Z" } }, "outputs": [ @@ -240,7 +246,7 @@ }, { "cell_type": "markdown", - "id": "c50a435c", + "id": "9917e0ad", "metadata": {}, "source": [ "`md_temperature_emt` is the temperature the run actually achieved, and it is\n", @@ -265,13 +271,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "78f47cd2", + "id": "39dccad2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:41.514667Z", - "iopub.status.busy": "2026-08-03T06:22:41.514575Z", - "iopub.status.idle": "2026-08-03T06:22:41.517352Z", - "shell.execute_reply": "2026-08-03T06:22:41.516985Z" + "iopub.execute_input": "2026-08-04T13:21:25.181676Z", + "iopub.status.busy": "2026-08-04T13:21:25.181525Z", + "iopub.status.idle": "2026-08-04T13:21:25.185770Z", + "shell.execute_reply": "2026-08-04T13:21:25.184979Z" } }, "outputs": [ @@ -294,20 +300,20 @@ { "cell_type": "code", "execution_count": 5, - "id": "18e6fec6", + "id": "0accd57b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:41.518127Z", - "iopub.status.busy": "2026-08-03T06:22:41.518039Z", - "iopub.status.idle": "2026-08-03T06:22:41.676130Z", - "shell.execute_reply": "2026-08-03T06:22:41.675741Z" + "iopub.execute_input": "2026-08-04T13:21:25.187085Z", + "iopub.status.busy": "2026-08-04T13:21:25.186953Z", + "iopub.status.idle": "2026-08-04T13:21:25.372912Z", + "shell.execute_reply": "2026-08-04T13:21:25.372311Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -348,7 +354,7 @@ }, { "cell_type": "markdown", - "id": "868502cd", + "id": "5148c54e", "metadata": {}, "source": [ "The instantaneous temperature swings wildly around its mean, and that is\n", @@ -369,13 +375,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "f390f9b6", + "id": "8f043e87", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:41.677172Z", - "iopub.status.busy": "2026-08-03T06:22:41.677077Z", - "iopub.status.idle": "2026-08-03T06:23:27.339951Z", - "shell.execute_reply": "2026-08-03T06:23:27.339362Z" + "iopub.execute_input": "2026-08-04T13:21:25.374856Z", + "iopub.status.busy": "2026-08-04T13:21:25.374395Z", + "iopub.status.idle": "2026-08-04T13:22:15.310927Z", + "shell.execute_reply": "2026-08-04T13:22:15.310009Z" } }, "outputs": [ @@ -452,13 +458,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "06967a8e", + "id": "21271948", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:23:27.341062Z", - "iopub.status.busy": "2026-08-03T06:23:27.340961Z", - "iopub.status.idle": "2026-08-03T06:23:27.455601Z", - "shell.execute_reply": "2026-08-03T06:23:27.455076Z" + "iopub.execute_input": "2026-08-04T13:22:15.312315Z", + "iopub.status.busy": "2026-08-04T13:22:15.312165Z", + "iopub.status.idle": "2026-08-04T13:22:15.433421Z", + "shell.execute_reply": "2026-08-04T13:22:15.432943Z" } }, "outputs": [ @@ -501,7 +507,7 @@ }, { "cell_type": "markdown", - "id": "402799c1", + "id": "7b56a800", "metadata": {}, "source": [ "A percent or so over 600 K, which is the right order for a metal — copper's\n", @@ -522,13 +528,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "214744a4", + "id": "bdfb7670", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:23:27.456942Z", - "iopub.status.busy": "2026-08-03T06:23:27.456830Z", - "iopub.status.idle": "2026-08-03T06:23:34.152991Z", - "shell.execute_reply": "2026-08-03T06:23:34.152271Z" + "iopub.execute_input": "2026-08-04T13:22:15.434666Z", + "iopub.status.busy": "2026-08-04T13:22:15.434525Z", + "iopub.status.idle": "2026-08-04T13:22:22.391307Z", + "shell.execute_reply": "2026-08-04T13:22:22.390668Z" } }, "outputs": [ @@ -589,7 +595,7 @@ }, { "cell_type": "markdown", - "id": "1f899478", + "id": "f2c39fe4", "metadata": {}, "source": [ "Essentially zero, and that is the right answer. Copper at 300 K has a vacancy\n", @@ -617,13 +623,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "32d8f7bc", + "id": "588022f8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:23:34.154171Z", - "iopub.status.busy": "2026-08-03T06:23:34.154018Z", - "iopub.status.idle": "2026-08-03T06:23:34.271217Z", - "shell.execute_reply": "2026-08-03T06:23:34.270795Z" + "iopub.execute_input": "2026-08-04T13:22:22.392505Z", + "iopub.status.busy": "2026-08-04T13:22:22.392359Z", + "iopub.status.idle": "2026-08-04T13:22:22.534080Z", + "shell.execute_reply": "2026-08-04T13:22:22.533606Z" } }, "outputs": [ @@ -644,7 +650,7 @@ }, { "cell_type": "markdown", - "id": "067bc011", + "id": "113a9010", "metadata": {}, "source": [ "Empty in this build, because the engine is not installed. Registering one is the\n", @@ -655,13 +661,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "e8af173f", + "id": "18d85bcc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:23:34.272099Z", - "iopub.status.busy": "2026-08-03T06:23:34.272010Z", - "iopub.status.idle": "2026-08-03T06:23:34.274558Z", - "shell.execute_reply": "2026-08-03T06:23:34.274252Z" + "iopub.execute_input": "2026-08-04T13:22:22.535325Z", + "iopub.status.busy": "2026-08-04T13:22:22.535188Z", + "iopub.status.idle": "2026-08-04T13:22:22.538335Z", + "shell.execute_reply": "2026-08-04T13:22:22.537846Z" } }, "outputs": [ @@ -696,7 +702,7 @@ }, { "cell_type": "markdown", - "id": "952efdca", + "id": "29a786be", "metadata": {}, "source": [ "The factory is lazy, which is why that cell runs in an environment without\n", @@ -719,13 +725,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "025d376d", + "id": "5bc0d876", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:23:34.275258Z", - "iopub.status.busy": "2026-08-03T06:23:34.275168Z", - "iopub.status.idle": "2026-08-03T06:24:15.854321Z", - "shell.execute_reply": "2026-08-03T06:24:15.853837Z" + "iopub.execute_input": "2026-08-04T13:22:22.539495Z", + "iopub.status.busy": "2026-08-04T13:22:22.539366Z", + "iopub.status.idle": "2026-08-04T13:23:11.059219Z", + "shell.execute_reply": "2026-08-04T13:23:11.057879Z" } }, "outputs": [ @@ -785,13 +791,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "8f91f06b", + "id": "ae461e0a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:15.855281Z", - "iopub.status.busy": "2026-08-03T06:24:15.855185Z", - "iopub.status.idle": "2026-08-03T06:24:15.857360Z", - "shell.execute_reply": "2026-08-03T06:24:15.857073Z" + "iopub.execute_input": "2026-08-04T13:23:11.060507Z", + "iopub.status.busy": "2026-08-04T13:23:11.060370Z", + "iopub.status.idle": "2026-08-04T13:23:11.067195Z", + "shell.execute_reply": "2026-08-04T13:23:11.066710Z" } }, "outputs": [ @@ -812,7 +818,7 @@ }, { "cell_type": "markdown", - "id": "06c9f9fd", + "id": "b4952ad5", "metadata": {}, "source": [ "```{warning}\n", @@ -831,13 +837,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "14f1c9a4", + "id": "18bea18a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:15.858103Z", - "iopub.status.busy": "2026-08-03T06:24:15.858021Z", - "iopub.status.idle": "2026-08-03T06:24:15.859977Z", - "shell.execute_reply": "2026-08-03T06:24:15.859674Z" + "iopub.execute_input": "2026-08-04T13:23:11.068731Z", + "iopub.status.busy": "2026-08-04T13:23:11.068589Z", + "iopub.status.idle": "2026-08-04T13:23:11.072321Z", + "shell.execute_reply": "2026-08-04T13:23:11.071834Z" } }, "outputs": [ @@ -858,7 +864,7 @@ }, { "cell_type": "markdown", - "id": "9ffd7d71", + "id": "5cd4ee0f", "metadata": {}, "source": [ "## Was it actually amorphous?\n", @@ -871,20 +877,20 @@ { "cell_type": "code", "execution_count": 14, - "id": "a1cb19d5", + "id": "865f13a9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:15.860700Z", - "iopub.status.busy": "2026-08-03T06:24:15.860617Z", - "iopub.status.idle": "2026-08-03T06:24:16.363564Z", - "shell.execute_reply": "2026-08-03T06:24:16.363078Z" + "iopub.execute_input": "2026-08-04T13:23:11.073523Z", + "iopub.status.busy": "2026-08-04T13:23:11.073386Z", + "iopub.status.idle": "2026-08-04T13:23:11.632775Z", + "shell.execute_reply": "2026-08-04T13:23:11.632209Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -925,7 +931,7 @@ }, { "cell_type": "markdown", - "id": "7d9b714b", + "id": "463fa1ea", "metadata": {}, "source": [ "The crystal's shells stay sharp out to 8 Å. The quenched structure keeps its\n", @@ -940,13 +946,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "7fd5772a", + "id": "dcb5f14e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:16.364710Z", - "iopub.status.busy": "2026-08-03T06:24:16.364391Z", - "iopub.status.idle": "2026-08-03T06:24:16.366664Z", - "shell.execute_reply": "2026-08-03T06:24:16.366358Z" + "iopub.execute_input": "2026-08-04T13:23:11.633971Z", + "iopub.status.busy": "2026-08-04T13:23:11.633831Z", + "iopub.status.idle": "2026-08-04T13:23:11.636316Z", + "shell.execute_reply": "2026-08-04T13:23:11.635821Z" } }, "outputs": [ @@ -972,7 +978,7 @@ }, { "cell_type": "markdown", - "id": "8a186244", + "id": "1cd983cf", "metadata": {}, "source": [ "Every temperature, every step count, every thermostat setting. For MD that is\n", @@ -988,7 +994,7 @@ }, { "cell_type": "markdown", - "id": "b60157f1", + "id": "7694f004", "metadata": {}, "source": [ "## Where the atoms spend their time\n", @@ -1008,13 +1014,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "dacbb17c", + "id": "691d2d2d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:16.367421Z", - "iopub.status.busy": "2026-08-03T06:24:16.367335Z", - "iopub.status.idle": "2026-08-03T06:24:16.718510Z", - "shell.execute_reply": "2026-08-03T06:24:16.718097Z" + "iopub.execute_input": "2026-08-04T13:23:11.637368Z", + "iopub.status.busy": "2026-08-04T13:23:11.637223Z", + "iopub.status.idle": "2026-08-04T13:23:11.696024Z", + "shell.execute_reply": "2026-08-04T13:23:11.695395Z" } }, "outputs": [ @@ -1088,7 +1094,7 @@ }, { "cell_type": "markdown", - "id": "53215493", + "id": "4f5212b0", "metadata": {}, "source": [ "The first peak lands at 2.96 Å against a nearest-neighbour distance of 2.97, and\n", @@ -1107,7 +1113,7 @@ }, { "cell_type": "markdown", - "id": "56780bf2", + "id": "5d8da6cc", "metadata": {}, "source": [ "## How much of the cell do they visit?\n", @@ -1124,13 +1130,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "1ecc6f7d", + "id": "88d49b7a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:16.719416Z", - "iopub.status.busy": "2026-08-03T06:24:16.719324Z", - "iopub.status.idle": "2026-08-03T06:24:16.734221Z", - "shell.execute_reply": "2026-08-03T06:24:16.733844Z" + "iopub.execute_input": "2026-08-04T13:23:11.697121Z", + "iopub.status.busy": "2026-08-04T13:23:11.696983Z", + "iopub.status.idle": "2026-08-04T13:23:11.719757Z", + "shell.execute_reply": "2026-08-04T13:23:11.714925Z" } }, "outputs": [ @@ -1234,7 +1240,7 @@ }, { "cell_type": "markdown", - "id": "688b20d1", + "id": "28556938", "metadata": {}, "source": [ "Monotonic, from four ions pinned in four voxels to a liquid that has forgotten\n", @@ -1253,13 +1259,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "8b7b45ed", + "id": "48720471", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:16.735062Z", - "iopub.status.busy": "2026-08-03T06:24:16.734968Z", - "iopub.status.idle": "2026-08-03T06:24:16.738851Z", - "shell.execute_reply": "2026-08-03T06:24:16.738508Z" + "iopub.execute_input": "2026-08-04T13:23:11.721279Z", + "iopub.status.busy": "2026-08-04T13:23:11.721123Z", + "iopub.status.idle": "2026-08-04T13:23:11.726751Z", + "shell.execute_reply": "2026-08-04T13:23:11.726029Z" } }, "outputs": [ @@ -1290,7 +1296,7 @@ }, { "cell_type": "markdown", - "id": "5b828075", + "id": "65efd8c9", "metadata": {}, "source": [ "0.87 became 0.03 with no change to the physics. That is why the function warns\n", @@ -1304,7 +1310,7 @@ }, { "cell_type": "markdown", - "id": "8dcc170e", + "id": "216628cb", "metadata": {}, "source": [ "## The shape of the motion\n", @@ -1321,13 +1327,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "b224f003", + "id": "cbbaecf2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:16.739655Z", - "iopub.status.busy": "2026-08-03T06:24:16.739562Z", - "iopub.status.idle": "2026-08-03T06:24:17.373902Z", - "shell.execute_reply": "2026-08-03T06:24:17.373444Z" + "iopub.execute_input": "2026-08-04T13:23:11.727890Z", + "iopub.status.busy": "2026-08-04T13:23:11.727670Z", + "iopub.status.idle": "2026-08-04T13:23:12.466628Z", + "shell.execute_reply": "2026-08-04T13:23:12.466162Z" } }, "outputs": [ @@ -1368,7 +1374,7 @@ }, { "cell_type": "markdown", - "id": "2374ceb0", + "id": "aca6942f", "metadata": {}, "source": [ "Twelve, eighteen, fifty-four — the neighbour counts of a rocksalt lattice,\n", @@ -1386,13 +1392,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "86e50e53", + "id": "54187dce", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:17.374787Z", - "iopub.status.busy": "2026-08-03T06:24:17.374696Z", - "iopub.status.idle": "2026-08-03T06:24:19.287286Z", - "shell.execute_reply": "2026-08-03T06:24:19.286859Z" + "iopub.execute_input": "2026-08-04T13:23:12.468158Z", + "iopub.status.busy": "2026-08-04T13:23:12.467951Z", + "iopub.status.idle": "2026-08-04T13:23:14.691928Z", + "shell.execute_reply": "2026-08-04T13:23:14.691570Z" } }, "outputs": [ @@ -1472,7 +1478,7 @@ }, { "cell_type": "markdown", - "id": "be9e3702", + "id": "70a10489", "metadata": {}, "source": [ "Two things to read.\n", @@ -1496,7 +1502,7 @@ }, { "cell_type": "markdown", - "id": "942a278a", + "id": "0bf94607", "metadata": {}, "source": [ "## Rattling or hopping?\n", @@ -1515,13 +1521,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "3f19f04d", + "id": "9914ae9f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:19.289489Z", - "iopub.status.busy": "2026-08-03T06:24:19.289401Z", - "iopub.status.idle": "2026-08-03T06:24:19.315563Z", - "shell.execute_reply": "2026-08-03T06:24:19.315183Z" + "iopub.execute_input": "2026-08-04T13:23:14.697478Z", + "iopub.status.busy": "2026-08-04T13:23:14.696947Z", + "iopub.status.idle": "2026-08-04T13:23:14.724928Z", + "shell.execute_reply": "2026-08-04T13:23:14.724262Z" } }, "outputs": [ @@ -1614,7 +1620,7 @@ }, { "cell_type": "markdown", - "id": "c2453e4b", + "id": "f733fa2c", "metadata": {}, "source": [ "The vibration amplitude is unchanged between the two runs, because it *is*\n", diff --git a/matverse_guide/docs/tutorials/from_pymatgen.ipynb b/matverse_guide/docs/tutorials/from_pymatgen.ipynb index 7212e7d..c9294a7 100644 --- a/matverse_guide/docs/tutorials/from_pymatgen.ipynb +++ b/matverse_guide/docs/tutorials/from_pymatgen.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "aa41e319", + "id": "40a747ef", "metadata": {}, "source": [ "# Coming from pymatgen\n", @@ -36,13 +36,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "88f71f31", + "id": "cc86d81b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:35.654436Z", - "iopub.status.busy": "2026-08-03T06:25:35.654295Z", - "iopub.status.idle": "2026-08-03T06:25:38.957597Z", - "shell.execute_reply": "2026-08-03T06:25:38.957101Z" + "iopub.execute_input": "2026-08-04T13:24:55.112731Z", + "iopub.status.busy": "2026-08-04T13:24:55.112628Z", + "iopub.status.idle": "2026-08-04T13:25:00.309366Z", + "shell.execute_reply": "2026-08-04T13:25:00.308801Z" } }, "outputs": [ @@ -50,20 +50,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -73,7 +79,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -89,7 +95,7 @@ }, { "cell_type": "markdown", - "id": "d32f3f63", + "id": "1fc28689", "metadata": {}, "source": [ "## Every transformation, by name\n", @@ -102,13 +108,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "26e16097", + "id": "41f1214c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:38.958727Z", - "iopub.status.busy": "2026-08-03T06:25:38.958471Z", - "iopub.status.idle": "2026-08-03T06:25:39.971653Z", - "shell.execute_reply": "2026-08-03T06:25:39.971222Z" + "iopub.execute_input": "2026-08-04T13:25:00.310881Z", + "iopub.status.busy": "2026-08-04T13:25:00.310544Z", + "iopub.status.idle": "2026-08-04T13:25:00.982089Z", + "shell.execute_reply": "2026-08-04T13:25:00.981697Z" } }, "outputs": [ @@ -131,13 +137,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "bb69ee8d", + "id": "c9a44310", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:39.972856Z", - "iopub.status.busy": "2026-08-03T06:25:39.972559Z", - "iopub.status.idle": "2026-08-03T06:25:39.979374Z", - "shell.execute_reply": "2026-08-03T06:25:39.978949Z" + "iopub.execute_input": "2026-08-04T13:25:00.983711Z", + "iopub.status.busy": "2026-08-04T13:25:00.983351Z", + "iopub.status.idle": "2026-08-04T13:25:00.991026Z", + "shell.execute_reply": "2026-08-04T13:25:00.990604Z" } }, "outputs": [ @@ -288,7 +294,7 @@ }, { "cell_type": "markdown", - "id": "f06feee6", + "id": "4569e943", "metadata": {}, "source": [ "Read from pymatgen at call time rather than from a table here, so a\n", @@ -300,13 +306,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "f36b3788", + "id": "e9b50ad9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:39.980236Z", - "iopub.status.busy": "2026-08-03T06:25:39.980141Z", - "iopub.status.idle": "2026-08-03T06:25:39.983771Z", - "shell.execute_reply": "2026-08-03T06:25:39.983393Z" + "iopub.execute_input": "2026-08-04T13:25:00.992090Z", + "iopub.status.busy": "2026-08-04T13:25:00.991918Z", + "iopub.status.idle": "2026-08-04T13:25:00.995828Z", + "shell.execute_reply": "2026-08-04T13:25:00.995398Z" } }, "outputs": [ @@ -327,7 +333,7 @@ }, { "cell_type": "markdown", - "id": "cf97bb72", + "id": "7d1f9339", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -338,13 +344,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "4675e01f", + "id": "f575b6b8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:39.984553Z", - "iopub.status.busy": "2026-08-03T06:25:39.984465Z", - "iopub.status.idle": "2026-08-03T06:25:40.011457Z", - "shell.execute_reply": "2026-08-03T06:25:40.011030Z" + "iopub.execute_input": "2026-08-04T13:25:00.996880Z", + "iopub.status.busy": "2026-08-04T13:25:00.996708Z", + "iopub.status.idle": "2026-08-04T13:25:01.028018Z", + "shell.execute_reply": "2026-08-04T13:25:01.027288Z" } }, "outputs": [ @@ -422,7 +428,7 @@ }, { "cell_type": "markdown", - "id": "9859a458", + "id": "dc188e30", "metadata": {}, "source": [ "## Applying one" @@ -431,13 +437,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "072039f7", + "id": "ad1920c4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.012365Z", - "iopub.status.busy": "2026-08-03T06:25:40.012207Z", - "iopub.status.idle": "2026-08-03T06:25:40.020634Z", - "shell.execute_reply": "2026-08-03T06:25:40.020221Z" + "iopub.execute_input": "2026-08-04T13:25:01.029257Z", + "iopub.status.busy": "2026-08-04T13:25:01.029125Z", + "iopub.status.idle": "2026-08-04T13:25:01.038539Z", + "shell.execute_reply": "2026-08-04T13:25:01.037955Z" } }, "outputs": [ @@ -461,7 +467,7 @@ }, { "cell_type": "markdown", - "id": "3917558d", + "id": "3afcad47", "metadata": {}, "source": [ "Three variants where a list comprehension would have left you with one list and\n", @@ -475,13 +481,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "624e4597", + "id": "13d1839a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.021573Z", - "iopub.status.busy": "2026-08-03T06:25:40.021427Z", - "iopub.status.idle": "2026-08-03T06:25:40.026595Z", - "shell.execute_reply": "2026-08-03T06:25:40.026166Z" + "iopub.execute_input": "2026-08-04T13:25:01.039677Z", + "iopub.status.busy": "2026-08-04T13:25:01.039547Z", + "iopub.status.idle": "2026-08-04T13:25:01.045096Z", + "shell.execute_reply": "2026-08-04T13:25:01.044586Z" } }, "outputs": [ @@ -556,7 +562,7 @@ }, { "cell_type": "markdown", - "id": "e2ab09cb", + "id": "4fe64b4c", "metadata": {}, "source": [ "### A failure on one row is not a failure of the call\n", @@ -569,13 +575,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "b5c9b317", + "id": "fb6893f1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.027426Z", - "iopub.status.busy": "2026-08-03T06:25:40.027329Z", - "iopub.status.idle": "2026-08-03T06:25:40.033525Z", - "shell.execute_reply": "2026-08-03T06:25:40.033125Z" + "iopub.execute_input": "2026-08-04T13:25:01.046087Z", + "iopub.status.busy": "2026-08-04T13:25:01.045981Z", + "iopub.status.idle": "2026-08-04T13:25:01.053749Z", + "shell.execute_reply": "2026-08-04T13:25:01.053259Z" } }, "outputs": [ @@ -651,13 +657,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "74fcc91c", + "id": "228613a3", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.034315Z", - "iopub.status.busy": "2026-08-03T06:25:40.034218Z", - "iopub.status.idle": "2026-08-03T06:25:40.036377Z", - "shell.execute_reply": "2026-08-03T06:25:40.036029Z" + "iopub.execute_input": "2026-08-04T13:25:01.055800Z", + "iopub.status.busy": "2026-08-04T13:25:01.055689Z", + "iopub.status.idle": "2026-08-04T13:25:01.058337Z", + "shell.execute_reply": "2026-08-04T13:25:01.057701Z" } }, "outputs": [ @@ -678,7 +684,7 @@ }, { "cell_type": "markdown", - "id": "04f6da0d", + "id": "255a843b", "metadata": {}, "source": [ "The rows that failed kept their original structure and are flagged `False`, so\n", @@ -692,13 +698,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "b87b9f38", + "id": "f935758a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.037121Z", - "iopub.status.busy": "2026-08-03T06:25:40.037034Z", - "iopub.status.idle": "2026-08-03T06:25:40.039282Z", - "shell.execute_reply": "2026-08-03T06:25:40.038864Z" + "iopub.execute_input": "2026-08-04T13:25:01.059645Z", + "iopub.status.busy": "2026-08-04T13:25:01.059505Z", + "iopub.status.idle": "2026-08-04T13:25:01.062197Z", + "shell.execute_reply": "2026-08-04T13:25:01.061799Z" } }, "outputs": [ @@ -724,7 +730,7 @@ }, { "cell_type": "markdown", - "id": "0ac91f6b", + "id": "50d78f07", "metadata": {}, "source": [ "## One-to-many\n", @@ -738,13 +744,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "50ec786c", + "id": "0a9f44d4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.040077Z", - "iopub.status.busy": "2026-08-03T06:25:40.039988Z", - "iopub.status.idle": "2026-08-03T06:25:40.062293Z", - "shell.execute_reply": "2026-08-03T06:25:40.061868Z" + "iopub.execute_input": "2026-08-04T13:25:01.063358Z", + "iopub.status.busy": "2026-08-04T13:25:01.063220Z", + "iopub.status.idle": "2026-08-04T13:25:01.085055Z", + "shell.execute_reply": "2026-08-04T13:25:01.084566Z" } }, "outputs": [ @@ -831,7 +837,7 @@ }, { "cell_type": "markdown", - "id": "5f297335", + "id": "d4cce148", "metadata": {}, "source": [ "```{note}\n", @@ -849,13 +855,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "5fdcd06e", + "id": "d3f2e8c3", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.063107Z", - "iopub.status.busy": "2026-08-03T06:25:40.063006Z", - "iopub.status.idle": "2026-08-03T06:25:40.072050Z", - "shell.execute_reply": "2026-08-03T06:25:40.071619Z" + "iopub.execute_input": "2026-08-04T13:25:01.086043Z", + "iopub.status.busy": "2026-08-04T13:25:01.085920Z", + "iopub.status.idle": "2026-08-04T13:25:01.095178Z", + "shell.execute_reply": "2026-08-04T13:25:01.094656Z" } }, "outputs": [ @@ -928,13 +934,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "d3658502", + "id": "a4c4dc86", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.072850Z", - "iopub.status.busy": "2026-08-03T06:25:40.072761Z", - "iopub.status.idle": "2026-08-03T06:25:40.074999Z", - "shell.execute_reply": "2026-08-03T06:25:40.074649Z" + "iopub.execute_input": "2026-08-04T13:25:01.096129Z", + "iopub.status.busy": "2026-08-04T13:25:01.096021Z", + "iopub.status.idle": "2026-08-04T13:25:01.099855Z", + "shell.execute_reply": "2026-08-04T13:25:01.099295Z" } }, "outputs": [ @@ -957,7 +963,7 @@ }, { "cell_type": "markdown", - "id": "282d6ee2", + "id": "93fc6987", "metadata": {}, "source": [ "One variant rather than one per step, because the intermediates are usually not\n", @@ -982,13 +988,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "809c178d", + "id": "bc1b8314", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.075761Z", - "iopub.status.busy": "2026-08-03T06:25:40.075671Z", - "iopub.status.idle": "2026-08-03T06:25:40.099787Z", - "shell.execute_reply": "2026-08-03T06:25:40.099351Z" + "iopub.execute_input": "2026-08-04T13:25:01.101127Z", + "iopub.status.busy": "2026-08-04T13:25:01.100989Z", + "iopub.status.idle": "2026-08-04T13:25:01.126391Z", + "shell.execute_reply": "2026-08-04T13:25:01.125605Z" } }, "outputs": [ @@ -1066,13 +1072,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "89337cd2", + "id": "aca4dbbd", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.100608Z", - "iopub.status.busy": "2026-08-03T06:25:40.100513Z", - "iopub.status.idle": "2026-08-03T06:25:40.103840Z", - "shell.execute_reply": "2026-08-03T06:25:40.103457Z" + "iopub.execute_input": "2026-08-04T13:25:01.127595Z", + "iopub.status.busy": "2026-08-04T13:25:01.127458Z", + "iopub.status.idle": "2026-08-04T13:25:01.131442Z", + "shell.execute_reply": "2026-08-04T13:25:01.130949Z" } }, "outputs": [ @@ -1094,7 +1100,7 @@ }, { "cell_type": "markdown", - "id": "c57777a2", + "id": "385a1bea", "metadata": {}, "source": [ "Bond-valence analysis read the states off the bond lengths, and the cells came\n", @@ -1107,13 +1113,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "68493ef2", + "id": "2b66be6a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.104603Z", - "iopub.status.busy": "2026-08-03T06:25:40.104513Z", - "iopub.status.idle": "2026-08-03T06:25:40.389940Z", - "shell.execute_reply": "2026-08-03T06:25:40.389462Z" + "iopub.execute_input": "2026-08-04T13:25:01.132470Z", + "iopub.status.busy": "2026-08-04T13:25:01.132342Z", + "iopub.status.idle": "2026-08-04T13:25:01.304584Z", + "shell.execute_reply": "2026-08-04T13:25:01.304030Z" } }, "outputs": [ @@ -1145,7 +1151,7 @@ }, { "cell_type": "markdown", - "id": "9426502d", + "id": "18b4f9cb", "metadata": {}, "source": [ "### It fails on metals, and says so per row\n", @@ -1158,13 +1164,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "3c22cb41", + "id": "3714f944", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.390895Z", - "iopub.status.busy": "2026-08-03T06:25:40.390744Z", - "iopub.status.idle": "2026-08-03T06:25:40.438036Z", - "shell.execute_reply": "2026-08-03T06:25:40.437534Z" + "iopub.execute_input": "2026-08-04T13:25:01.306498Z", + "iopub.status.busy": "2026-08-04T13:25:01.306269Z", + "iopub.status.idle": "2026-08-04T13:25:01.353610Z", + "shell.execute_reply": "2026-08-04T13:25:01.353134Z" } }, "outputs": [ @@ -1230,13 +1236,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "8d3a559b", + "id": "6963686d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.438974Z", - "iopub.status.busy": "2026-08-03T06:25:40.438859Z", - "iopub.status.idle": "2026-08-03T06:25:40.441162Z", - "shell.execute_reply": "2026-08-03T06:25:40.440790Z" + "iopub.execute_input": "2026-08-04T13:25:01.355072Z", + "iopub.status.busy": "2026-08-04T13:25:01.354952Z", + "iopub.status.idle": "2026-08-04T13:25:01.357498Z", + "shell.execute_reply": "2026-08-04T13:25:01.356989Z" } }, "outputs": [ @@ -1257,7 +1263,7 @@ }, { "cell_type": "markdown", - "id": "a22828d4", + "id": "a5b3cd5c", "metadata": {}, "source": [ "## What you get for it\n", @@ -1292,13 +1298,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "05f70f40", + "id": "a0b613e9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.441973Z", - "iopub.status.busy": "2026-08-03T06:25:40.441881Z", - "iopub.status.idle": "2026-08-03T06:25:40.480937Z", - "shell.execute_reply": "2026-08-03T06:25:40.480532Z" + "iopub.execute_input": "2026-08-04T13:25:01.358606Z", + "iopub.status.busy": "2026-08-04T13:25:01.358477Z", + "iopub.status.idle": "2026-08-04T13:25:01.401676Z", + "shell.execute_reply": "2026-08-04T13:25:01.400847Z" } }, "outputs": [ @@ -1364,7 +1370,7 @@ }, { "cell_type": "markdown", - "id": "1cd0f906", + "id": "1c867af3", "metadata": {}, "source": [ "`a+b, a-b, c` is the one to look at: it doubles the volume and gives axes of\n", @@ -1396,13 +1402,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "078bba82", + "id": "cf31fbc3", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.482086Z", - "iopub.status.busy": "2026-08-03T06:25:40.481926Z", - "iopub.status.idle": "2026-08-03T06:25:40.834837Z", - "shell.execute_reply": "2026-08-03T06:25:40.834290Z" + "iopub.execute_input": "2026-08-04T13:25:01.402959Z", + "iopub.status.busy": "2026-08-04T13:25:01.402834Z", + "iopub.status.idle": "2026-08-04T13:25:01.751584Z", + "shell.execute_reply": "2026-08-04T13:25:01.751091Z" } }, "outputs": [ @@ -1477,7 +1483,7 @@ }, { "cell_type": "markdown", - "id": "8a92ad87", + "id": "fd885277", "metadata": {}, "source": [ "| | matverse | α·e²/4πε₀r |\n", @@ -1505,13 +1511,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "03be23ab", + "id": "410f9f29", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:40.835857Z", - "iopub.status.busy": "2026-08-03T06:25:40.835741Z", - "iopub.status.idle": "2026-08-03T06:25:40.837917Z", - "shell.execute_reply": "2026-08-03T06:25:40.837528Z" + "iopub.execute_input": "2026-08-04T13:25:01.752891Z", + "iopub.status.busy": "2026-08-04T13:25:01.752755Z", + "iopub.status.idle": "2026-08-04T13:25:01.755823Z", + "shell.execute_reply": "2026-08-04T13:25:01.755486Z" } }, "outputs": [ @@ -1538,7 +1544,7 @@ }, { "cell_type": "markdown", - "id": "814fb9a5", + "id": "b9885f3f", "metadata": {}, "source": [ "## What matverse does not do\n", diff --git a/matverse_guide/docs/tutorials/getting_started.ipynb b/matverse_guide/docs/tutorials/getting_started.ipynb index ed8689b..8c064c1 100644 --- a/matverse_guide/docs/tutorials/getting_started.ipynb +++ b/matverse_guide/docs/tutorials/getting_started.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "030637c0", + "id": "bc0b3b99", "metadata": {}, "source": [ "# Screening real materials with matverse\n", @@ -25,13 +25,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "4e8340bf", + "id": "6d6fe4b4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:02.974431Z", - "iopub.status.busy": "2026-08-03T06:21:02.974352Z", - "iopub.status.idle": "2026-08-03T06:21:06.248356Z", - "shell.execute_reply": "2026-08-03T06:21:06.247829Z" + "iopub.execute_input": "2026-08-04T13:19:01.608741Z", + "iopub.status.busy": "2026-08-04T13:19:01.608660Z", + "iopub.status.idle": "2026-08-04T13:19:07.588360Z", + "shell.execute_reply": "2026-08-04T13:19:07.587836Z" } }, "outputs": [ @@ -39,20 +39,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -62,7 +68,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -78,7 +84,7 @@ }, { "cell_type": "markdown", - "id": "7dcd3383", + "id": "6a8fd8ae", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -107,13 +113,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "d864183a", + "id": "ed723424", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:06.249652Z", - "iopub.status.busy": "2026-08-03T06:21:06.249334Z", - "iopub.status.idle": "2026-08-03T06:21:06.252798Z", - "shell.execute_reply": "2026-08-03T06:21:06.252454Z" + "iopub.execute_input": "2026-08-04T13:19:07.589721Z", + "iopub.status.busy": "2026-08-04T13:19:07.589375Z", + "iopub.status.idle": "2026-08-04T13:19:07.594371Z", + "shell.execute_reply": "2026-08-04T13:19:07.593784Z" } }, "outputs": [ @@ -149,13 +155,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "989ebd67", + "id": "22188072", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:06.253573Z", - "iopub.status.busy": "2026-08-03T06:21:06.253486Z", - "iopub.status.idle": "2026-08-03T06:21:06.334469Z", - "shell.execute_reply": "2026-08-03T06:21:06.334033Z" + "iopub.execute_input": "2026-08-04T13:19:07.595495Z", + "iopub.status.busy": "2026-08-04T13:19:07.595369Z", + "iopub.status.idle": "2026-08-04T13:19:07.645805Z", + "shell.execute_reply": "2026-08-04T13:19:07.645340Z" } }, "outputs": [ @@ -182,7 +188,7 @@ }, { "cell_type": "markdown", - "id": "35ac8187", + "id": "70a72d59", "metadata": {}, "source": [ "`X` is the composition matrix and `var` is the periodic table. Neither was asked\n", @@ -197,13 +203,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "e2d18331", + "id": "e415475e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:06.335558Z", - "iopub.status.busy": "2026-08-03T06:21:06.335325Z", - "iopub.status.idle": "2026-08-03T06:21:06.342683Z", - "shell.execute_reply": "2026-08-03T06:21:06.342258Z" + "iopub.execute_input": "2026-08-04T13:19:07.649889Z", + "iopub.status.busy": "2026-08-04T13:19:07.649593Z", + "iopub.status.idle": "2026-08-04T13:19:07.662973Z", + "shell.execute_reply": "2026-08-04T13:19:07.662501Z" } }, "outputs": [ @@ -297,13 +303,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "6b0338d0", + "id": "d48abdb6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:06.343564Z", - "iopub.status.busy": "2026-08-03T06:21:06.343474Z", - "iopub.status.idle": "2026-08-03T06:21:06.349169Z", - "shell.execute_reply": "2026-08-03T06:21:06.348757Z" + "iopub.execute_input": "2026-08-04T13:19:07.664185Z", + "iopub.status.busy": "2026-08-04T13:19:07.664042Z", + "iopub.status.idle": "2026-08-04T13:19:07.671760Z", + "shell.execute_reply": "2026-08-04T13:19:07.671308Z" } }, "outputs": [ @@ -410,7 +416,7 @@ }, { "cell_type": "markdown", - "id": "787212cf", + "id": "3672c9c6", "metadata": {}, "source": [ "Because `var` is the periodic table, the natural display of anything\n", @@ -421,13 +427,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "d75f57c9", + "id": "962860bf", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:06.349980Z", - "iopub.status.busy": "2026-08-03T06:21:06.349888Z", - "iopub.status.idle": "2026-08-03T06:21:06.697906Z", - "shell.execute_reply": "2026-08-03T06:21:06.697502Z" + "iopub.execute_input": "2026-08-04T13:19:07.673619Z", + "iopub.status.busy": "2026-08-04T13:19:07.673141Z", + "iopub.status.idle": "2026-08-04T13:19:08.271247Z", + "shell.execute_reply": "2026-08-04T13:19:08.270435Z" } }, "outputs": [ @@ -466,7 +472,7 @@ }, { "cell_type": "markdown", - "id": "d5eeadb5", + "id": "8e17156c", "metadata": {}, "source": [ "And you can just look at one, which catches the mistakes a number will not\n", @@ -477,13 +483,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "9c639314", + "id": "0632d465", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:06.698860Z", - "iopub.status.busy": "2026-08-03T06:21:06.698763Z", - "iopub.status.idle": "2026-08-03T06:21:06.924111Z", - "shell.execute_reply": "2026-08-03T06:21:06.923686Z" + "iopub.execute_input": "2026-08-04T13:19:08.272562Z", + "iopub.status.busy": "2026-08-04T13:19:08.272423Z", + "iopub.status.idle": "2026-08-04T13:19:08.555491Z", + "shell.execute_reply": "2026-08-04T13:19:08.554976Z" } }, "outputs": [ @@ -520,7 +526,7 @@ }, { "cell_type": "markdown", - "id": "7ca31cf7", + "id": "1c18101b", "metadata": {}, "source": [ "With `py3Dmol` installed the default backend is an interactive viewer instead.\n", @@ -540,13 +546,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "f45bd5f2", + "id": "d0510a34", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:06.925064Z", - "iopub.status.busy": "2026-08-03T06:21:06.924924Z", - "iopub.status.idle": "2026-08-03T06:21:07.264119Z", - "shell.execute_reply": "2026-08-03T06:21:07.263714Z" + "iopub.execute_input": "2026-08-04T13:19:08.556999Z", + "iopub.status.busy": "2026-08-04T13:19:08.556793Z", + "iopub.status.idle": "2026-08-04T13:19:08.805009Z", + "shell.execute_reply": "2026-08-04T13:19:08.804715Z" } }, "outputs": [ @@ -633,13 +639,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "5a315a57", + "id": "0a127ed9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:07.265067Z", - "iopub.status.busy": "2026-08-03T06:21:07.264926Z", - "iopub.status.idle": "2026-08-03T06:21:11.976822Z", - "shell.execute_reply": "2026-08-03T06:21:11.976336Z" + "iopub.execute_input": "2026-08-04T13:19:08.806570Z", + "iopub.status.busy": "2026-08-04T13:19:08.806380Z", + "iopub.status.idle": "2026-08-04T13:19:15.506496Z", + "shell.execute_reply": "2026-08-04T13:19:15.505963Z" } }, "outputs": [ @@ -716,13 +722,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "6792460a", + "id": "c6986ae2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:11.977833Z", - "iopub.status.busy": "2026-08-03T06:21:11.977724Z", - "iopub.status.idle": "2026-08-03T06:21:12.226781Z", - "shell.execute_reply": "2026-08-03T06:21:12.226365Z" + "iopub.execute_input": "2026-08-04T13:19:15.507754Z", + "iopub.status.busy": "2026-08-04T13:19:15.507600Z", + "iopub.status.idle": "2026-08-04T13:19:15.774529Z", + "shell.execute_reply": "2026-08-04T13:19:15.773711Z" } }, "outputs": [ @@ -808,13 +814,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "14ee86fb", + "id": "7918bafb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.227648Z", - "iopub.status.busy": "2026-08-03T06:21:12.227558Z", - "iopub.status.idle": "2026-08-03T06:21:12.234908Z", - "shell.execute_reply": "2026-08-03T06:21:12.234412Z" + "iopub.execute_input": "2026-08-04T13:19:15.775739Z", + "iopub.status.busy": "2026-08-04T13:19:15.775601Z", + "iopub.status.idle": "2026-08-04T13:19:15.789771Z", + "shell.execute_reply": "2026-08-04T13:19:15.789061Z" } }, "outputs": [ @@ -904,7 +910,7 @@ }, { "cell_type": "markdown", - "id": "3c41f234", + "id": "c75fd7f9", "metadata": {}, "source": [ "The cheapest possible statement about electronic structure: line up the atomic\n", @@ -931,7 +937,7 @@ }, { "cell_type": "markdown", - "id": "9d766f49", + "id": "3a8ea4a5", "metadata": {}, "source": [ "`spacegroup` gives the symbol. This gives what the symbol *implies* — and\n", @@ -950,7 +956,7 @@ }, { "cell_type": "markdown", - "id": "8ee227dc", + "id": "58f6aef4", "metadata": {}, "source": [ "A space group says which symmetries a structure has. A **prototype** says which\n", @@ -969,7 +975,7 @@ }, { "cell_type": "markdown", - "id": "e406c29d", + "id": "e37ca9ca", "metadata": {}, "source": [ "`spacegroup` is determined from the deposited coordinates, not copied from a\n", @@ -991,13 +997,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "f5c622c9", + "id": "cb777fc5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.235730Z", - "iopub.status.busy": "2026-08-03T06:21:12.235643Z", - "iopub.status.idle": "2026-08-03T06:21:12.595959Z", - "shell.execute_reply": "2026-08-03T06:21:12.595532Z" + "iopub.execute_input": "2026-08-04T13:19:15.791116Z", + "iopub.status.busy": "2026-08-04T13:19:15.790700Z", + "iopub.status.idle": "2026-08-04T13:19:15.881874Z", + "shell.execute_reply": "2026-08-04T13:19:15.881326Z" } }, "outputs": [ @@ -1021,13 +1027,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "0ed02acc", + "id": "6a9f3c00", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.596846Z", - "iopub.status.busy": "2026-08-03T06:21:12.596755Z", - "iopub.status.idle": "2026-08-03T06:21:12.727748Z", - "shell.execute_reply": "2026-08-03T06:21:12.727357Z" + "iopub.execute_input": "2026-08-04T13:19:15.883130Z", + "iopub.status.busy": "2026-08-04T13:19:15.882908Z", + "iopub.status.idle": "2026-08-04T13:19:16.028608Z", + "shell.execute_reply": "2026-08-04T13:19:16.027854Z" } }, "outputs": [ @@ -1064,7 +1070,7 @@ }, { "cell_type": "markdown", - "id": "0905bff2", + "id": "7ac6c2da", "metadata": {}, "source": [ "LiFePO₄ and NaFePO₄ are the same framework with a different alkali, and the\n", @@ -1079,13 +1085,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "a1a29b0f", + "id": "9cb57963", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.728578Z", - "iopub.status.busy": "2026-08-03T06:21:12.728487Z", - "iopub.status.idle": "2026-08-03T06:21:12.734300Z", - "shell.execute_reply": "2026-08-03T06:21:12.733955Z" + "iopub.execute_input": "2026-08-04T13:19:16.029811Z", + "iopub.status.busy": "2026-08-04T13:19:16.029676Z", + "iopub.status.idle": "2026-08-04T13:19:16.036524Z", + "shell.execute_reply": "2026-08-04T13:19:16.036073Z" } }, "outputs": [ @@ -1159,7 +1165,7 @@ }, { "cell_type": "markdown", - "id": "53d79450", + "id": "750e20a9", "metadata": {}, "source": [ "Row 1 comes back at 1.00 and the runner-up at 0.06, which is the margin you want\n", @@ -1183,13 +1189,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "c7f82ae7", + "id": "9ca0187d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.735150Z", - "iopub.status.busy": "2026-08-03T06:21:12.735069Z", - "iopub.status.idle": "2026-08-03T06:21:12.737541Z", - "shell.execute_reply": "2026-08-03T06:21:12.737221Z" + "iopub.execute_input": "2026-08-04T13:19:16.037498Z", + "iopub.status.busy": "2026-08-04T13:19:16.037388Z", + "iopub.status.idle": "2026-08-04T13:19:16.042376Z", + "shell.execute_reply": "2026-08-04T13:19:16.041714Z" } }, "outputs": [ @@ -1216,7 +1222,7 @@ }, { "cell_type": "markdown", - "id": "1040b3d0", + "id": "c99a8562", "metadata": {}, "source": [ "ASE's effective-medium theory is the only calculator matverse ships working. It\n", @@ -1232,13 +1238,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "be04a61b", + "id": "e0e73fa2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.738231Z", - "iopub.status.busy": "2026-08-03T06:21:12.738150Z", - "iopub.status.idle": "2026-08-03T06:21:12.740865Z", - "shell.execute_reply": "2026-08-03T06:21:12.740555Z" + "iopub.execute_input": "2026-08-04T13:19:16.043460Z", + "iopub.status.busy": "2026-08-04T13:19:16.043325Z", + "iopub.status.idle": "2026-08-04T13:19:16.046999Z", + "shell.execute_reply": "2026-08-04T13:19:16.046572Z" } }, "outputs": [ @@ -1273,7 +1279,7 @@ }, { "cell_type": "markdown", - "id": "b2bcec1f", + "id": "0a6c7625", "metadata": {}, "source": [ "Registered, with its provenance attached — the method, the level of theory it\n", @@ -1287,13 +1293,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "4a8544b6", + "id": "26b47521", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.741548Z", - "iopub.status.busy": "2026-08-03T06:21:12.741469Z", - "iopub.status.idle": "2026-08-03T06:21:12.752805Z", - "shell.execute_reply": "2026-08-03T06:21:12.752466Z" + "iopub.execute_input": "2026-08-04T13:19:16.048118Z", + "iopub.status.busy": "2026-08-04T13:19:16.047990Z", + "iopub.status.idle": "2026-08-04T13:19:16.062458Z", + "shell.execute_reply": "2026-08-04T13:19:16.061963Z" } }, "outputs": [ @@ -1385,7 +1391,7 @@ }, { "cell_type": "markdown", - "id": "6b6caa28", + "id": "0ca3e4b3", "metadata": {}, "source": [ "Published room-temperature lattice parameters for the seven face-centred cubic\n", @@ -1395,13 +1401,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "5f154c4f", + "id": "9c21d14b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.753621Z", - "iopub.status.busy": "2026-08-03T06:21:12.753537Z", - "iopub.status.idle": "2026-08-03T06:21:12.944736Z", - "shell.execute_reply": "2026-08-03T06:21:12.944310Z" + "iopub.execute_input": "2026-08-04T13:19:16.063493Z", + "iopub.status.busy": "2026-08-04T13:19:16.063355Z", + "iopub.status.idle": "2026-08-04T13:19:16.372653Z", + "shell.execute_reply": "2026-08-04T13:19:16.371848Z" } }, "outputs": [ @@ -1504,13 +1510,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "a3ea1973", + "id": "29322a25", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.945612Z", - "iopub.status.busy": "2026-08-03T06:21:12.945516Z", - "iopub.status.idle": "2026-08-03T06:21:12.947926Z", - "shell.execute_reply": "2026-08-03T06:21:12.947341Z" + "iopub.execute_input": "2026-08-04T13:19:16.373824Z", + "iopub.status.busy": "2026-08-04T13:19:16.373699Z", + "iopub.status.idle": "2026-08-04T13:19:16.377096Z", + "shell.execute_reply": "2026-08-04T13:19:16.376648Z" } }, "outputs": [ @@ -1531,7 +1537,7 @@ }, { "cell_type": "markdown", - "id": "dcfe97e7", + "id": "6f3e8241", "metadata": {}, "source": [ "The relaxed geometry becomes its own **variant** rather than replacing the\n", @@ -1547,13 +1553,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "7790a4db", + "id": "33ede086", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:12.948825Z", - "iopub.status.busy": "2026-08-03T06:21:12.948722Z", - "iopub.status.idle": "2026-08-03T06:21:13.289001Z", - "shell.execute_reply": "2026-08-03T06:21:13.288569Z" + "iopub.execute_input": "2026-08-04T13:19:16.378173Z", + "iopub.status.busy": "2026-08-04T13:19:16.378047Z", + "iopub.status.idle": "2026-08-04T13:19:16.746908Z", + "shell.execute_reply": "2026-08-04T13:19:16.746235Z" } }, "outputs": [ @@ -1682,7 +1688,7 @@ }, { "cell_type": "markdown", - "id": "31e82e07", + "id": "4807ac98", "metadata": {}, "source": [ "Worth comparing against measured values rather than accepting:\n", @@ -1726,20 +1732,20 @@ { "cell_type": "code", "execution_count": 21, - "id": "5be72683", + "id": "e1cb0804", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:13.289978Z", - "iopub.status.busy": "2026-08-03T06:21:13.289854Z", - "iopub.status.idle": "2026-08-03T06:21:13.413739Z", - "shell.execute_reply": "2026-08-03T06:21:13.413317Z" + "iopub.execute_input": "2026-08-04T13:19:16.748672Z", + "iopub.status.busy": "2026-08-04T13:19:16.748087Z", + "iopub.status.idle": "2026-08-04T13:19:16.884203Z", + "shell.execute_reply": "2026-08-04T13:19:16.883673Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -1782,7 +1788,7 @@ }, { "cell_type": "markdown", - "id": "4a262fe2", + "id": "70022118", "metadata": {}, "source": [ "Aluminium is the outlier, platinum is high, and the middle five track closely.\n", @@ -1801,13 +1807,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "70382afd", + "id": "6ffb55a4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:13.414800Z", - "iopub.status.busy": "2026-08-03T06:21:13.414639Z", - "iopub.status.idle": "2026-08-03T06:21:13.553686Z", - "shell.execute_reply": "2026-08-03T06:21:13.553279Z" + "iopub.execute_input": "2026-08-04T13:19:16.885722Z", + "iopub.status.busy": "2026-08-04T13:19:16.885582Z", + "iopub.status.idle": "2026-08-04T13:19:17.037985Z", + "shell.execute_reply": "2026-08-04T13:19:17.037501Z" } }, "outputs": [ @@ -1947,7 +1953,7 @@ }, { "cell_type": "markdown", - "id": "ad5a196d", + "id": "7b8f54cd", "metadata": {}, "source": [ "Within 1.1% across seven metals and two independent implementations, and under\n", @@ -1977,13 +1983,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "a841eb6a", + "id": "a8ff94b3", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:13.554559Z", - "iopub.status.busy": "2026-08-03T06:21:13.554471Z", - "iopub.status.idle": "2026-08-03T06:21:13.685103Z", - "shell.execute_reply": "2026-08-03T06:21:13.684672Z" + "iopub.execute_input": "2026-08-04T13:19:17.039213Z", + "iopub.status.busy": "2026-08-04T13:19:17.039085Z", + "iopub.status.idle": "2026-08-04T13:19:17.193464Z", + "shell.execute_reply": "2026-08-04T13:19:17.192990Z" } }, "outputs": [ @@ -2022,7 +2028,7 @@ }, { "cell_type": "markdown", - "id": "4fdf9b6d", + "id": "54d5ea65", "metadata": {}, "source": [ "## Off the zero-kelvin hull\n", @@ -2037,13 +2043,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "d76fd1b8", + "id": "8bf8cded", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:13.686303Z", - "iopub.status.busy": "2026-08-03T06:21:13.686151Z", - "iopub.status.idle": "2026-08-03T06:21:13.920323Z", - "shell.execute_reply": "2026-08-03T06:21:13.919890Z" + "iopub.execute_input": "2026-08-04T13:19:17.194914Z", + "iopub.status.busy": "2026-08-04T13:19:17.194774Z", + "iopub.status.idle": "2026-08-04T13:19:17.463292Z", + "shell.execute_reply": "2026-08-04T13:19:17.462487Z" } }, "outputs": [ @@ -2154,7 +2160,7 @@ }, { "cell_type": "markdown", - "id": "41f2dfa0", + "id": "037d96d0", "metadata": {}, "source": [ "| volumetric expansion, /K | matverse | experiment |\n", @@ -2187,13 +2193,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "d2538a65", + "id": "9a37f23b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:13.921218Z", - "iopub.status.busy": "2026-08-03T06:21:13.921130Z", - "iopub.status.idle": "2026-08-03T06:21:14.054702Z", - "shell.execute_reply": "2026-08-03T06:21:14.054264Z" + "iopub.execute_input": "2026-08-04T13:19:17.464369Z", + "iopub.status.busy": "2026-08-04T13:19:17.464250Z", + "iopub.status.idle": "2026-08-04T13:19:17.619336Z", + "shell.execute_reply": "2026-08-04T13:19:17.618794Z" } }, "outputs": [ @@ -2231,7 +2237,7 @@ }, { "cell_type": "markdown", - "id": "c9565e0a", + "id": "c14cfc38", "metadata": {}, "source": [ "The phonons are also everything thermodynamics needs. `mv.prop.free_energy`\n", @@ -2243,13 +2249,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "d492b43b", + "id": "cb7e1402", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:14.055601Z", - "iopub.status.busy": "2026-08-03T06:21:14.055512Z", - "iopub.status.idle": "2026-08-03T06:21:14.061889Z", - "shell.execute_reply": "2026-08-03T06:21:14.061520Z" + "iopub.execute_input": "2026-08-04T13:19:17.620432Z", + "iopub.status.busy": "2026-08-04T13:19:17.620297Z", + "iopub.status.idle": "2026-08-04T13:19:17.628201Z", + "shell.execute_reply": "2026-08-04T13:19:17.627783Z" } }, "outputs": [ @@ -2351,7 +2357,7 @@ }, { "cell_type": "markdown", - "id": "4db8f943", + "id": "4d5e7b58", "metadata": {}, "source": [ "### The q-points a supercell cannot hold\n", @@ -2381,13 +2387,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "85170c30", + "id": "18e19174", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:14.062746Z", - "iopub.status.busy": "2026-08-03T06:21:14.062606Z", - "iopub.status.idle": "2026-08-03T06:21:18.742966Z", - "shell.execute_reply": "2026-08-03T06:21:18.742504Z" + "iopub.execute_input": "2026-08-04T13:19:17.629377Z", + "iopub.status.busy": "2026-08-04T13:19:17.629256Z", + "iopub.status.idle": "2026-08-04T13:19:22.753215Z", + "shell.execute_reply": "2026-08-04T13:19:22.752646Z" } }, "outputs": [ @@ -2421,7 +2427,7 @@ }, { "cell_type": "markdown", - "id": "774fafba", + "id": "26966242", "metadata": {}, "source": [ "Interpolation is also the only way to get a *dispersion*. A supercell holds a\n", @@ -2437,13 +2443,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "a18eea4a", + "id": "786ec31d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:18.743969Z", - "iopub.status.busy": "2026-08-03T06:21:18.743827Z", - "iopub.status.idle": "2026-08-03T06:21:19.155693Z", - "shell.execute_reply": "2026-08-03T06:21:19.155228Z" + "iopub.execute_input": "2026-08-04T13:19:22.754667Z", + "iopub.status.busy": "2026-08-04T13:19:22.754449Z", + "iopub.status.idle": "2026-08-04T13:19:23.222120Z", + "shell.execute_reply": "2026-08-04T13:19:23.221566Z" } }, "outputs": [ @@ -2481,7 +2487,7 @@ }, { "cell_type": "markdown", - "id": "b796c64f", + "id": "275f0f22", "metadata": {}, "source": [ "That is the check a hull cannot make, and the reason the two cells above are\n", @@ -2505,13 +2511,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "ca253542", + "id": "f0fe741a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:19.156621Z", - "iopub.status.busy": "2026-08-03T06:21:19.156473Z", - "iopub.status.idle": "2026-08-03T06:21:19.390412Z", - "shell.execute_reply": "2026-08-03T06:21:19.389925Z" + "iopub.execute_input": "2026-08-04T13:19:23.223572Z", + "iopub.status.busy": "2026-08-04T13:19:23.223430Z", + "iopub.status.idle": "2026-08-04T13:19:23.484248Z", + "shell.execute_reply": "2026-08-04T13:19:23.483729Z" } }, "outputs": [ @@ -2547,7 +2553,7 @@ }, { "cell_type": "markdown", - "id": "55d00e6c", + "id": "16d57c5a", "metadata": {}, "source": [ "The dashed line at zero is where `mv.pl.bands` would normally draw the Fermi\n", @@ -2573,13 +2579,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "e2be31c2", + "id": "edfda215", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:19.391557Z", - "iopub.status.busy": "2026-08-03T06:21:19.391453Z", - "iopub.status.idle": "2026-08-03T06:21:19.405721Z", - "shell.execute_reply": "2026-08-03T06:21:19.405310Z" + "iopub.execute_input": "2026-08-04T13:19:23.485492Z", + "iopub.status.busy": "2026-08-04T13:19:23.485356Z", + "iopub.status.idle": "2026-08-04T13:19:23.500389Z", + "shell.execute_reply": "2026-08-04T13:19:23.499904Z" } }, "outputs": [ @@ -2616,7 +2622,7 @@ }, { "cell_type": "markdown", - "id": "883209ca", + "id": "58f15453", "metadata": {}, "source": [ "The cell above prints a fallback rather than a table in the rendered docs,\n", @@ -2669,13 +2675,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "f16821b8", + "id": "34db8c71", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:19.406504Z", - "iopub.status.busy": "2026-08-03T06:21:19.406415Z", - "iopub.status.idle": "2026-08-03T06:21:19.409557Z", - "shell.execute_reply": "2026-08-03T06:21:19.409067Z" + "iopub.execute_input": "2026-08-04T13:19:23.501641Z", + "iopub.status.busy": "2026-08-04T13:19:23.501443Z", + "iopub.status.idle": "2026-08-04T13:19:23.504953Z", + "shell.execute_reply": "2026-08-04T13:19:23.504437Z" } }, "outputs": [ @@ -2705,13 +2711,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "854aeb01", + "id": "50fa9809", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:19.410417Z", - "iopub.status.busy": "2026-08-03T06:21:19.410269Z", - "iopub.status.idle": "2026-08-03T06:21:19.415780Z", - "shell.execute_reply": "2026-08-03T06:21:19.415407Z" + "iopub.execute_input": "2026-08-04T13:19:23.506048Z", + "iopub.status.busy": "2026-08-04T13:19:23.505924Z", + "iopub.status.idle": "2026-08-04T13:19:23.513145Z", + "shell.execute_reply": "2026-08-04T13:19:23.512628Z" } }, "outputs": [ @@ -2819,7 +2825,7 @@ }, { "cell_type": "markdown", - "id": "f7085280", + "id": "7f31e963", "metadata": {}, "source": [ "Subset when you actually want the short list — the object is an ordinary\n", @@ -2835,13 +2841,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "b5bed882", + "id": "8b57d805", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:19.416566Z", - "iopub.status.busy": "2026-08-03T06:21:19.416479Z", - "iopub.status.idle": "2026-08-03T06:21:19.427974Z", - "shell.execute_reply": "2026-08-03T06:21:19.427591Z" + "iopub.execute_input": "2026-08-04T13:19:23.514344Z", + "iopub.status.busy": "2026-08-04T13:19:23.514128Z", + "iopub.status.idle": "2026-08-04T13:19:23.526645Z", + "shell.execute_reply": "2026-08-04T13:19:23.526168Z" } }, "outputs": [ @@ -2959,7 +2965,7 @@ }, { "cell_type": "markdown", - "id": "b275a8f4", + "id": "7f39bc03", "metadata": {}, "source": [ "With seven elementals this is a formality. On a library of thousands it is the\n", @@ -2972,13 +2978,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "52c8ca62", + "id": "16dc88c5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:19.428787Z", - "iopub.status.busy": "2026-08-03T06:21:19.428700Z", - "iopub.status.idle": "2026-08-03T06:21:19.430726Z", - "shell.execute_reply": "2026-08-03T06:21:19.430368Z" + "iopub.execute_input": "2026-08-04T13:19:23.527682Z", + "iopub.status.busy": "2026-08-04T13:19:23.527557Z", + "iopub.status.idle": "2026-08-04T13:19:23.531090Z", + "shell.execute_reply": "2026-08-04T13:19:23.530229Z" } }, "outputs": [ @@ -3012,13 +3018,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "a29dde09", + "id": "1d576a3d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:19.431460Z", - "iopub.status.busy": "2026-08-03T06:21:19.431374Z", - "iopub.status.idle": "2026-08-03T06:21:19.663095Z", - "shell.execute_reply": "2026-08-03T06:21:19.662679Z" + "iopub.execute_input": "2026-08-04T13:19:23.532219Z", + "iopub.status.busy": "2026-08-04T13:19:23.532088Z", + "iopub.status.idle": "2026-08-04T13:19:23.781061Z", + "shell.execute_reply": "2026-08-04T13:19:23.780514Z" } }, "outputs": [ @@ -3044,7 +3050,7 @@ }, { "cell_type": "markdown", - "id": "990f3b11", + "id": "6c2ff308", "metadata": {}, "source": [ "Parameters are recorded with each call, so the history replays as code rather\n", diff --git a/matverse_guide/docs/tutorials/infrastructure.ipynb b/matverse_guide/docs/tutorials/infrastructure.ipynb index 9c4e627..af14cd0 100644 --- a/matverse_guide/docs/tutorials/infrastructure.ipynb +++ b/matverse_guide/docs/tutorials/infrastructure.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "59c82ce0", + "id": "64f6864a", "metadata": {}, "source": [ "# Infrastructure\n", @@ -18,13 +18,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "46f120ab", + "id": "845f5e43", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:02.674910Z", - "iopub.status.busy": "2026-08-03T06:26:02.674827Z", - "iopub.status.idle": "2026-08-03T06:26:05.750800Z", - "shell.execute_reply": "2026-08-03T06:26:05.750340Z" + "iopub.execute_input": "2026-08-04T13:25:37.499375Z", + "iopub.status.busy": "2026-08-04T13:25:37.499244Z", + "iopub.status.idle": "2026-08-04T13:25:42.186398Z", + "shell.execute_reply": "2026-08-04T13:25:42.185831Z" } }, "outputs": [ @@ -32,20 +32,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -55,7 +61,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -72,13 +78,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "a59f989f", + "id": "e9250062", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.751991Z", - "iopub.status.busy": "2026-08-03T06:26:05.751725Z", - "iopub.status.idle": "2026-08-03T06:26:05.897094Z", - "shell.execute_reply": "2026-08-03T06:26:05.896677Z" + "iopub.execute_input": "2026-08-04T13:25:42.187775Z", + "iopub.status.busy": "2026-08-04T13:25:42.187433Z", + "iopub.status.idle": "2026-08-04T13:25:42.230909Z", + "shell.execute_reply": "2026-08-04T13:25:42.230413Z" } }, "outputs": [ @@ -173,7 +179,7 @@ }, { "cell_type": "markdown", - "id": "fa172a52", + "id": "c9df788e", "metadata": {}, "source": [ "## What is this object carrying?\n", @@ -185,13 +191,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "e468a724", + "id": "33047824", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.898059Z", - "iopub.status.busy": "2026-08-03T06:26:05.897958Z", - "iopub.status.idle": "2026-08-03T06:26:05.899976Z", - "shell.execute_reply": "2026-08-03T06:26:05.899646Z" + "iopub.execute_input": "2026-08-04T13:25:42.231922Z", + "iopub.status.busy": "2026-08-04T13:25:42.231740Z", + "iopub.status.idle": "2026-08-04T13:25:42.234222Z", + "shell.execute_reply": "2026-08-04T13:25:42.233721Z" } }, "outputs": [ @@ -217,7 +223,7 @@ }, { "cell_type": "markdown", - "id": "165d591c", + "id": "343f73d8", "metadata": {}, "source": [ "## Units\n", @@ -230,13 +236,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "bf1e0c5f", + "id": "008b34ec", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.900852Z", - "iopub.status.busy": "2026-08-03T06:26:05.900738Z", - "iopub.status.idle": "2026-08-03T06:26:05.903112Z", - "shell.execute_reply": "2026-08-03T06:26:05.902705Z" + "iopub.execute_input": "2026-08-04T13:25:42.235110Z", + "iopub.status.busy": "2026-08-04T13:25:42.235003Z", + "iopub.status.idle": "2026-08-04T13:25:42.237538Z", + "shell.execute_reply": "2026-08-04T13:25:42.237114Z" } }, "outputs": [ @@ -268,13 +274,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "032af6a2", + "id": "846dba8b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.903946Z", - "iopub.status.busy": "2026-08-03T06:26:05.903845Z", - "iopub.status.idle": "2026-08-03T06:26:05.906363Z", - "shell.execute_reply": "2026-08-03T06:26:05.906030Z" + "iopub.execute_input": "2026-08-04T13:25:42.238522Z", + "iopub.status.busy": "2026-08-04T13:25:42.238324Z", + "iopub.status.idle": "2026-08-04T13:25:42.241413Z", + "shell.execute_reply": "2026-08-04T13:25:42.240950Z" } }, "outputs": [ @@ -304,7 +310,7 @@ }, { "cell_type": "markdown", - "id": "9ac68666", + "id": "d2422ccb", "metadata": {}, "source": [ "Every column matverse wrote has a unit; `lattice_parameter` and `nsites` come\n", @@ -315,13 +321,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "9c8ad15f", + "id": "fe07dd58", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.907111Z", - "iopub.status.busy": "2026-08-03T06:26:05.907014Z", - "iopub.status.idle": "2026-08-03T06:26:05.910050Z", - "shell.execute_reply": "2026-08-03T06:26:05.909725Z" + "iopub.execute_input": "2026-08-04T13:25:42.242337Z", + "iopub.status.busy": "2026-08-04T13:25:42.242224Z", + "iopub.status.idle": "2026-08-04T13:25:42.245707Z", + "shell.execute_reply": "2026-08-04T13:25:42.245259Z" } }, "outputs": [ @@ -345,7 +351,7 @@ }, { "cell_type": "markdown", - "id": "ecb34059", + "id": "ab0b8810", "metadata": {}, "source": [ "`mv.utils.convert` goes the other way — it takes a column in *someone else's*\n", @@ -358,13 +364,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "d54e7019", + "id": "06341196", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.910800Z", - "iopub.status.busy": "2026-08-03T06:26:05.910715Z", - "iopub.status.idle": "2026-08-03T06:26:05.916691Z", - "shell.execute_reply": "2026-08-03T06:26:05.916350Z" + "iopub.execute_input": "2026-08-04T13:25:42.246591Z", + "iopub.status.busy": "2026-08-04T13:25:42.246486Z", + "iopub.status.idle": "2026-08-04T13:25:42.253087Z", + "shell.execute_reply": "2026-08-04T13:25:42.252661Z" } }, "outputs": [ @@ -477,7 +483,7 @@ }, { "cell_type": "markdown", - "id": "fc2c06fe", + "id": "5e4c1e3e", "metadata": {}, "source": [ "`reported_energy_ev` and `energy_per_atom_emt` agree, which is the check worth\n", @@ -493,13 +499,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "6c1179c5", + "id": "8c78d35a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.917408Z", - "iopub.status.busy": "2026-08-03T06:26:05.917328Z", - "iopub.status.idle": "2026-08-03T06:26:05.919442Z", - "shell.execute_reply": "2026-08-03T06:26:05.919070Z" + "iopub.execute_input": "2026-08-04T13:25:42.254009Z", + "iopub.status.busy": "2026-08-04T13:25:42.253900Z", + "iopub.status.idle": "2026-08-04T13:25:42.256446Z", + "shell.execute_reply": "2026-08-04T13:25:42.256010Z" } }, "outputs": [ @@ -520,7 +526,7 @@ }, { "cell_type": "markdown", - "id": "b4bf27b5", + "id": "0ac31de4", "metadata": {}, "source": [ "## Surviving a walltime limit\n", @@ -534,13 +540,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "6f757f65", + "id": "155a5671", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.920340Z", - "iopub.status.busy": "2026-08-03T06:26:05.920218Z", - "iopub.status.idle": "2026-08-03T06:26:05.960313Z", - "shell.execute_reply": "2026-08-03T06:26:05.959920Z" + "iopub.execute_input": "2026-08-04T13:25:42.257273Z", + "iopub.status.busy": "2026-08-04T13:25:42.257164Z", + "iopub.status.idle": "2026-08-04T13:25:42.305889Z", + "shell.execute_reply": "2026-08-04T13:25:42.305430Z" } }, "outputs": [ @@ -566,7 +572,7 @@ }, { "cell_type": "markdown", - "id": "09361cc4", + "id": "94ddadf6", "metadata": {}, "source": [ "`mv.utils.resume` answers the question a restarted job actually asks: *which\n", @@ -576,13 +582,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "dc37d717", + "id": "91b2faae", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.961290Z", - "iopub.status.busy": "2026-08-03T06:26:05.961136Z", - "iopub.status.idle": "2026-08-03T06:26:05.988989Z", - "shell.execute_reply": "2026-08-03T06:26:05.988589Z" + "iopub.execute_input": "2026-08-04T13:25:42.307076Z", + "iopub.status.busy": "2026-08-04T13:25:42.306960Z", + "iopub.status.idle": "2026-08-04T13:25:42.338268Z", + "shell.execute_reply": "2026-08-04T13:25:42.337770Z" } }, "outputs": [ @@ -609,7 +615,7 @@ }, { "cell_type": "markdown", - "id": "1e435ecb", + "id": "16bb99a9", "metadata": {}, "source": [ "Three rows were done before the job died; four remain. Note that this works on\n", @@ -633,13 +639,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "6619aed1", + "id": "3eddadff", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:05.989829Z", - "iopub.status.busy": "2026-08-03T06:26:05.989738Z", - "iopub.status.idle": "2026-08-03T06:26:06.002555Z", - "shell.execute_reply": "2026-08-03T06:26:06.002128Z" + "iopub.execute_input": "2026-08-04T13:25:42.339311Z", + "iopub.status.busy": "2026-08-04T13:25:42.339196Z", + "iopub.status.idle": "2026-08-04T13:25:42.353646Z", + "shell.execute_reply": "2026-08-04T13:25:42.353181Z" } }, "outputs": [ @@ -660,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "f98e2ed3", + "id": "7607ae89", "metadata": {}, "source": [ "`map_chunks` runs an operation over each piece, optionally checkpointing as it\n", @@ -671,13 +677,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "80ee43b2", + "id": "daf6a688", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.003333Z", - "iopub.status.busy": "2026-08-03T06:26:06.003236Z", - "iopub.status.idle": "2026-08-03T06:26:06.138598Z", - "shell.execute_reply": "2026-08-03T06:26:06.138190Z" + "iopub.execute_input": "2026-08-04T13:25:42.354699Z", + "iopub.status.busy": "2026-08-04T13:25:42.354584Z", + "iopub.status.idle": "2026-08-04T13:25:42.506939Z", + "shell.execute_reply": "2026-08-04T13:25:42.506251Z" } }, "outputs": [ @@ -708,13 +714,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "66464350", + "id": "0a26ce8a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.139465Z", - "iopub.status.busy": "2026-08-03T06:26:06.139374Z", - "iopub.status.idle": "2026-08-03T06:26:06.143949Z", - "shell.execute_reply": "2026-08-03T06:26:06.143582Z" + "iopub.execute_input": "2026-08-04T13:25:42.508484Z", + "iopub.status.busy": "2026-08-04T13:25:42.508309Z", + "iopub.status.idle": "2026-08-04T13:25:42.514146Z", + "shell.execute_reply": "2026-08-04T13:25:42.513730Z" } }, "outputs": [ @@ -805,7 +811,7 @@ }, { "cell_type": "markdown", - "id": "188b651a", + "id": "74764576", "metadata": {}, "source": [ "The results landed on the parent object even though the work happened\n", @@ -821,13 +827,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "07d272b6", + "id": "784e1407", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.144736Z", - "iopub.status.busy": "2026-08-03T06:26:06.144649Z", - "iopub.status.idle": "2026-08-03T06:26:06.147051Z", - "shell.execute_reply": "2026-08-03T06:26:06.146708Z" + "iopub.execute_input": "2026-08-04T13:25:42.515208Z", + "iopub.status.busy": "2026-08-04T13:25:42.515104Z", + "iopub.status.idle": "2026-08-04T13:25:42.518032Z", + "shell.execute_reply": "2026-08-04T13:25:42.517558Z" } }, "outputs": [ @@ -872,7 +878,7 @@ }, { "cell_type": "markdown", - "id": "45db75a3", + "id": "34e7c2d5", "metadata": {}, "source": [ "### Submitting it\n", @@ -885,21 +891,21 @@ { "cell_type": "code", "execution_count": 15, - "id": "636a3f49", + "id": "2468cf43", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.147727Z", - "iopub.status.busy": "2026-08-03T06:26:06.147650Z", - "iopub.status.idle": "2026-08-03T06:26:06.149725Z", - "shell.execute_reply": "2026-08-03T06:26:06.149413Z" + "iopub.execute_input": "2026-08-04T13:25:42.518902Z", + "iopub.status.busy": "2026-08-04T13:25:42.518804Z", + "iopub.status.idle": "2026-08-04T13:25:42.521313Z", + "shell.execute_reply": "2026-08-04T13:25:42.520942Z" } }, "outputs": [ { "data": { "text/plain": [ - "{'script': '/tmp/tmpd_3kyryk/screen.sbatch',\n", - " 'command': 'sbatch /tmp/tmpd_3kyryk/screen.sbatch',\n", + "{'script': '/tmp/tmpqv_ij707/screen.sbatch',\n", + " 'command': 'sbatch /tmp/tmpqv_ij707/screen.sbatch',\n", " 'job_id': None,\n", " 'state': 'dry run'}" ] @@ -916,7 +922,7 @@ }, { "cell_type": "markdown", - "id": "aa5c92d1", + "id": "409c8cb4", "metadata": {}, "source": [ "`dry_run=True` returns the command without running it, which is what you want\n", @@ -930,21 +936,21 @@ { "cell_type": "code", "execution_count": 16, - "id": "02b7f50a", + "id": "0ff28645", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.150382Z", - "iopub.status.busy": "2026-08-03T06:26:06.150305Z", - "iopub.status.idle": "2026-08-03T06:26:06.152330Z", - "shell.execute_reply": "2026-08-03T06:26:06.152001Z" + "iopub.execute_input": "2026-08-04T13:25:42.522582Z", + "iopub.status.busy": "2026-08-04T13:25:42.522487Z", + "iopub.status.idle": "2026-08-04T13:25:42.524896Z", + "shell.execute_reply": "2026-08-04T13:25:42.524511Z" } }, "outputs": [ { "data": { "text/plain": [ - "[{'script': '/tmp/tmpd_3kyryk/screen.sbatch',\n", - " 'command': 'sbatch /tmp/tmpd_3kyryk/screen.sbatch',\n", + "[{'script': '/tmp/tmpqv_ij707/screen.sbatch',\n", + " 'command': 'sbatch /tmp/tmpqv_ij707/screen.sbatch',\n", " 'job_id': None,\n", " 'state': 'dry run'}]" ] @@ -961,13 +967,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "80e73773", + "id": "d2dabb2c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.153034Z", - "iopub.status.busy": "2026-08-03T06:26:06.152953Z", - "iopub.status.idle": "2026-08-03T06:26:06.155279Z", - "shell.execute_reply": "2026-08-03T06:26:06.154918Z" + "iopub.execute_input": "2026-08-04T13:25:42.525879Z", + "iopub.status.busy": "2026-08-04T13:25:42.525713Z", + "iopub.status.idle": "2026-08-04T13:25:42.528047Z", + "shell.execute_reply": "2026-08-04T13:25:42.527651Z" } }, "outputs": [ @@ -990,7 +996,7 @@ }, { "cell_type": "markdown", - "id": "f0a0c553", + "id": "9c07892d", "metadata": {}, "source": [ "With real submissions that reads `squeue`, and falls back to `sacct` for jobs\n", @@ -1019,13 +1025,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "e2a81ba7", + "id": "f4bdb495", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.156005Z", - "iopub.status.busy": "2026-08-03T06:26:06.155925Z", - "iopub.status.idle": "2026-08-03T06:26:06.158456Z", - "shell.execute_reply": "2026-08-03T06:26:06.158116Z" + "iopub.execute_input": "2026-08-04T13:25:42.528916Z", + "iopub.status.busy": "2026-08-04T13:25:42.528822Z", + "iopub.status.idle": "2026-08-04T13:25:42.531233Z", + "shell.execute_reply": "2026-08-04T13:25:42.530864Z" } }, "outputs": [ @@ -1064,13 +1070,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "52e0b9d7", + "id": "27438606", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.159161Z", - "iopub.status.busy": "2026-08-03T06:26:06.159078Z", - "iopub.status.idle": "2026-08-03T06:26:06.723710Z", - "shell.execute_reply": "2026-08-03T06:26:06.723174Z" + "iopub.execute_input": "2026-08-04T13:25:42.532176Z", + "iopub.status.busy": "2026-08-04T13:25:42.532081Z", + "iopub.status.idle": "2026-08-04T13:25:43.054244Z", + "shell.execute_reply": "2026-08-04T13:25:43.053697Z" } }, "outputs": [ @@ -1095,13 +1101,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "9138b6b0", + "id": "9fc47efe", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.724877Z", - "iopub.status.busy": "2026-08-03T06:26:06.724573Z", - "iopub.status.idle": "2026-08-03T06:26:06.727267Z", - "shell.execute_reply": "2026-08-03T06:26:06.726910Z" + "iopub.execute_input": "2026-08-04T13:25:43.055557Z", + "iopub.status.busy": "2026-08-04T13:25:43.055146Z", + "iopub.status.idle": "2026-08-04T13:25:43.058332Z", + "shell.execute_reply": "2026-08-04T13:25:43.057821Z" } }, "outputs": [ @@ -1122,7 +1128,7 @@ }, { "cell_type": "markdown", - "id": "e85afd37", + "id": "0f3d5694", "metadata": {}, "source": [ "INCAR, POSCAR, KPOINTS and a POTCAR *specification* — the last is a list of\n", @@ -1135,20 +1141,20 @@ { "cell_type": "code", "execution_count": 21, - "id": "e4303ba0", + "id": "4d9e3ec2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.728099Z", - "iopub.status.busy": "2026-08-03T06:26:06.727954Z", - "iopub.status.idle": "2026-08-03T06:26:06.730574Z", - "shell.execute_reply": "2026-08-03T06:26:06.730251Z" + "iopub.execute_input": "2026-08-04T13:25:43.059339Z", + "iopub.status.busy": "2026-08-04T13:25:43.059208Z", + "iopub.status.idle": "2026-08-04T13:25:43.062567Z", + "shell.execute_reply": "2026-08-04T13:25:43.061990Z" } }, "outputs": [ { "data": { "text/plain": [ - "{'root': '/tmp/tmpd_3kyryk/runs',\n", + "{'root': '/tmp/tmpqv_ij707/runs',\n", " 'n_total': 2,\n", " 'n_finished': 0,\n", " 'n_missing': 2,\n", @@ -1167,7 +1173,7 @@ }, { "cell_type": "markdown", - "id": "a20ab651", + "id": "6e4f69c1", "metadata": {}, "source": [ "Nothing has run, so both are missing. Pretend one finished:" @@ -1176,20 +1182,20 @@ { "cell_type": "code", "execution_count": 22, - "id": "8079f205", + "id": "f4a074c9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.731304Z", - "iopub.status.busy": "2026-08-03T06:26:06.731217Z", - "iopub.status.idle": "2026-08-03T06:26:06.733699Z", - "shell.execute_reply": "2026-08-03T06:26:06.733359Z" + "iopub.execute_input": "2026-08-04T13:25:43.063514Z", + "iopub.status.busy": "2026-08-04T13:25:43.063388Z", + "iopub.status.idle": "2026-08-04T13:25:43.066642Z", + "shell.execute_reply": "2026-08-04T13:25:43.066147Z" } }, "outputs": [ { "data": { "text/plain": [ - "{'root': '/tmp/tmpd_3kyryk/runs',\n", + "{'root': '/tmp/tmpqv_ij707/runs',\n", " 'n_total': 2,\n", " 'n_finished': 1,\n", " 'n_missing': 1,\n", @@ -1209,7 +1215,7 @@ }, { "cell_type": "markdown", - "id": "d13e832f", + "id": "2cd37268", "metadata": {}, "source": [ "```{note}\n", @@ -1227,13 +1233,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "7c33dba8", + "id": "68670302", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.734430Z", - "iopub.status.busy": "2026-08-03T06:26:06.734347Z", - "iopub.status.idle": "2026-08-03T06:26:06.741405Z", - "shell.execute_reply": "2026-08-03T06:26:06.741078Z" + "iopub.execute_input": "2026-08-04T13:25:43.067644Z", + "iopub.status.busy": "2026-08-04T13:25:43.067530Z", + "iopub.status.idle": "2026-08-04T13:25:43.076962Z", + "shell.execute_reply": "2026-08-04T13:25:43.076444Z" } }, "outputs": [ @@ -1299,7 +1305,7 @@ }, { "cell_type": "markdown", - "id": "2c4943f1", + "id": "c15e0cd0", "metadata": {}, "source": [ "Both are NaN with a reason, because the `` above is not a real\n", @@ -1314,13 +1320,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "7d2ff873", + "id": "102e03b2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.742207Z", - "iopub.status.busy": "2026-08-03T06:26:06.742127Z", - "iopub.status.idle": "2026-08-03T06:26:06.745776Z", - "shell.execute_reply": "2026-08-03T06:26:06.745447Z" + "iopub.execute_input": "2026-08-04T13:25:43.078068Z", + "iopub.status.busy": "2026-08-04T13:25:43.077959Z", + "iopub.status.idle": "2026-08-04T13:25:43.082646Z", + "shell.execute_reply": "2026-08-04T13:25:43.082155Z" } }, "outputs": [ @@ -1353,7 +1359,7 @@ }, { "cell_type": "markdown", - "id": "fc6ca81d", + "id": "736f9de5", "metadata": {}, "source": [ "`read_dos` fills the density of states onto the shared energy grid, and derives\n", @@ -1374,13 +1380,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "d719050f", + "id": "7789cc50", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.746510Z", - "iopub.status.busy": "2026-08-03T06:26:06.746427Z", - "iopub.status.idle": "2026-08-03T06:26:06.748408Z", - "shell.execute_reply": "2026-08-03T06:26:06.748079Z" + "iopub.execute_input": "2026-08-04T13:25:43.083677Z", + "iopub.status.busy": "2026-08-04T13:25:43.083516Z", + "iopub.status.idle": "2026-08-04T13:25:43.086021Z", + "shell.execute_reply": "2026-08-04T13:25:43.085498Z" } }, "outputs": [ @@ -1402,13 +1408,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "3d4b2b55", + "id": "7ffba28c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:26:06.749165Z", - "iopub.status.busy": "2026-08-03T06:26:06.749033Z", - "iopub.status.idle": "2026-08-03T06:26:06.750967Z", - "shell.execute_reply": "2026-08-03T06:26:06.750629Z" + "iopub.execute_input": "2026-08-04T13:25:43.086999Z", + "iopub.status.busy": "2026-08-04T13:25:43.086865Z", + "iopub.status.idle": "2026-08-04T13:25:43.089377Z", + "shell.execute_reply": "2026-08-04T13:25:43.088834Z" } }, "outputs": [ @@ -1429,7 +1435,7 @@ }, { "cell_type": "markdown", - "id": "5312aba6", + "id": "bbaaeeaf", "metadata": {}, "source": [ "```{seealso}\n", diff --git a/matverse_guide/docs/tutorials/interfaces.ipynb b/matverse_guide/docs/tutorials/interfaces.ipynb index d9dbe0c..9d29a16 100644 --- a/matverse_guide/docs/tutorials/interfaces.ipynb +++ b/matverse_guide/docs/tutorials/interfaces.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "46fe6621", + "id": "e295bf19", "metadata": {}, "source": [ "# Interfaces\n", @@ -28,13 +28,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "fae767f7", + "id": "d1fd4a8a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:37.212882Z", - "iopub.status.busy": "2026-08-03T06:24:37.212804Z", - "iopub.status.idle": "2026-08-03T06:24:40.334849Z", - "shell.execute_reply": "2026-08-03T06:24:40.334411Z" + "iopub.execute_input": "2026-08-04T13:23:42.222461Z", + "iopub.status.busy": "2026-08-04T13:23:42.222373Z", + "iopub.status.idle": "2026-08-04T13:23:48.199085Z", + "shell.execute_reply": "2026-08-04T13:23:48.198372Z" } }, "outputs": [ @@ -42,20 +42,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -65,7 +71,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -81,7 +87,7 @@ }, { "cell_type": "markdown", - "id": "605914c8", + "id": "0957b673", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -94,13 +100,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "76cc3335", + "id": "d50b37f2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:40.335982Z", - "iopub.status.busy": "2026-08-03T06:24:40.335743Z", - "iopub.status.idle": "2026-08-03T06:24:40.469564Z", - "shell.execute_reply": "2026-08-03T06:24:40.469186Z" + "iopub.execute_input": "2026-08-04T13:23:48.200474Z", + "iopub.status.busy": "2026-08-04T13:23:48.200111Z", + "iopub.status.idle": "2026-08-04T13:23:48.227901Z", + "shell.execute_reply": "2026-08-04T13:23:48.227411Z" } }, "outputs": [ @@ -175,7 +181,7 @@ }, { "cell_type": "markdown", - "id": "f8d972e5", + "id": "651859e8", "metadata": {}, "source": [ "## Will the lattices match?\n", @@ -189,13 +195,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "d172c5fb", + "id": "ac747654", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:40.470656Z", - "iopub.status.busy": "2026-08-03T06:24:40.470507Z", - "iopub.status.idle": "2026-08-03T06:24:41.633934Z", - "shell.execute_reply": "2026-08-03T06:24:41.633531Z" + "iopub.execute_input": "2026-08-04T13:23:48.228959Z", + "iopub.status.busy": "2026-08-04T13:23:48.228827Z", + "iopub.status.idle": "2026-08-04T13:23:49.191201Z", + "shell.execute_reply": "2026-08-04T13:23:49.190817Z" } }, "outputs": [ @@ -221,13 +227,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "780330e9", + "id": "e7381044", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:41.635237Z", - "iopub.status.busy": "2026-08-03T06:24:41.634909Z", - "iopub.status.idle": "2026-08-03T06:24:41.641472Z", - "shell.execute_reply": "2026-08-03T06:24:41.641109Z" + "iopub.execute_input": "2026-08-04T13:23:49.193317Z", + "iopub.status.busy": "2026-08-04T13:23:49.192598Z", + "iopub.status.idle": "2026-08-04T13:23:49.201408Z", + "shell.execute_reply": "2026-08-04T13:23:49.201129Z" } }, "outputs": [ @@ -363,7 +369,7 @@ }, { "cell_type": "markdown", - "id": "b2e84e22", + "id": "7836e24c", "metadata": {}, "source": [ "Six rows for three materials: the pairing is **ordered**, because copper grown\n", @@ -382,20 +388,20 @@ { "cell_type": "code", "execution_count": 5, - "id": "fe7cd253", + "id": "0d54949a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:41.642295Z", - "iopub.status.busy": "2026-08-03T06:24:41.642200Z", - "iopub.status.idle": "2026-08-03T06:24:41.761446Z", - "shell.execute_reply": "2026-08-03T06:24:41.761003Z" + "iopub.execute_input": "2026-08-04T13:23:49.202885Z", + "iopub.status.busy": "2026-08-04T13:23:49.202736Z", + "iopub.status.idle": "2026-08-04T13:23:49.344748Z", + "shell.execute_reply": "2026-08-04T13:23:49.344447Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -435,7 +441,7 @@ }, { "cell_type": "markdown", - "id": "7cccd5ab", + "id": "b16a17bc", "metadata": {}, "source": [ "Tighten the threshold and the screen starts discriminating — which is the\n", @@ -445,13 +451,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "7d81dbfe", + "id": "d7e86ab6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:41.762318Z", - "iopub.status.busy": "2026-08-03T06:24:41.762224Z", - "iopub.status.idle": "2026-08-03T06:24:42.016368Z", - "shell.execute_reply": "2026-08-03T06:24:42.015909Z" + "iopub.execute_input": "2026-08-04T13:23:49.346713Z", + "iopub.status.busy": "2026-08-04T13:23:49.346264Z", + "iopub.status.idle": "2026-08-04T13:23:49.633030Z", + "shell.execute_reply": "2026-08-04T13:23:49.631982Z" } }, "outputs": [ @@ -551,7 +557,7 @@ }, { "cell_type": "markdown", - "id": "219d0b84", + "id": "9841ce88", "metadata": {}, "source": [ "## What happens at the contact?\n", @@ -567,13 +573,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "faa95c71", + "id": "97c19eca", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:42.017221Z", - "iopub.status.busy": "2026-08-03T06:24:42.017134Z", - "iopub.status.idle": "2026-08-03T06:24:42.412650Z", - "shell.execute_reply": "2026-08-03T06:24:42.412180Z" + "iopub.execute_input": "2026-08-04T13:23:49.634229Z", + "iopub.status.busy": "2026-08-04T13:23:49.634098Z", + "iopub.status.idle": "2026-08-04T13:23:49.923393Z", + "shell.execute_reply": "2026-08-04T13:23:49.922985Z" } }, "outputs": [ @@ -674,7 +680,7 @@ }, { "cell_type": "markdown", - "id": "080110ed", + "id": "c3122913", "metadata": {}, "source": [ "All zero, and that is the correct answer for this dataset rather than a\n", @@ -690,13 +696,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "05f4f5bf", + "id": "a37b21b9", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:42.414159Z", - "iopub.status.busy": "2026-08-03T06:24:42.414040Z", - "iopub.status.idle": "2026-08-03T06:24:42.430191Z", - "shell.execute_reply": "2026-08-03T06:24:42.429789Z" + "iopub.execute_input": "2026-08-04T13:23:49.924974Z", + "iopub.status.busy": "2026-08-04T13:23:49.924811Z", + "iopub.status.idle": "2026-08-04T13:23:49.943693Z", + "shell.execute_reply": "2026-08-04T13:23:49.942978Z" } }, "outputs": [ @@ -780,13 +786,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "2030dd6c", + "id": "84ec49ed", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:42.431045Z", - "iopub.status.busy": "2026-08-03T06:24:42.430954Z", - "iopub.status.idle": "2026-08-03T06:24:42.676762Z", - "shell.execute_reply": "2026-08-03T06:24:42.676334Z" + "iopub.execute_input": "2026-08-04T13:23:49.945090Z", + "iopub.status.busy": "2026-08-04T13:23:49.944667Z", + "iopub.status.idle": "2026-08-04T13:23:50.203937Z", + "shell.execute_reply": "2026-08-04T13:23:50.203470Z" } }, "outputs": [ @@ -896,7 +902,7 @@ }, { "cell_type": "markdown", - "id": "76421fda", + "id": "477eb629", "metadata": {}, "source": [ "**Ni + 3 Al → Al₃Ni at −0.45 eV/atom.** Put aluminium against nickel and it\n", @@ -924,13 +930,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "f3729142", + "id": "e1f3f12a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:42.677621Z", - "iopub.status.busy": "2026-08-03T06:24:42.677533Z", - "iopub.status.idle": "2026-08-03T06:24:45.558568Z", - "shell.execute_reply": "2026-08-03T06:24:45.558125Z" + "iopub.execute_input": "2026-08-04T13:23:50.205317Z", + "iopub.status.busy": "2026-08-04T13:23:50.205175Z", + "iopub.status.idle": "2026-08-04T13:23:53.223462Z", + "shell.execute_reply": "2026-08-04T13:23:53.222949Z" } }, "outputs": [ @@ -1000,13 +1006,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "94166a98", + "id": "bac1258a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:45.559542Z", - "iopub.status.busy": "2026-08-03T06:24:45.559444Z", - "iopub.status.idle": "2026-08-03T06:24:45.561855Z", - "shell.execute_reply": "2026-08-03T06:24:45.561512Z" + "iopub.execute_input": "2026-08-04T13:23:53.236662Z", + "iopub.status.busy": "2026-08-04T13:23:53.236540Z", + "iopub.status.idle": "2026-08-04T13:23:53.251752Z", + "shell.execute_reply": "2026-08-04T13:23:53.251323Z" } }, "outputs": [ @@ -1033,7 +1039,7 @@ }, { "cell_type": "markdown", - "id": "4b325ac0", + "id": "666ea382", "metadata": {}, "source": [ "One cell per **termination**. Cutting the same orientation at a different plane\n", @@ -1049,13 +1055,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "43758ff4", + "id": "ac4b8cbc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:45.562561Z", - "iopub.status.busy": "2026-08-03T06:24:45.562481Z", - "iopub.status.idle": "2026-08-03T06:24:45.564783Z", - "shell.execute_reply": "2026-08-03T06:24:45.564445Z" + "iopub.execute_input": "2026-08-04T13:23:53.252718Z", + "iopub.status.busy": "2026-08-04T13:23:53.252621Z", + "iopub.status.idle": "2026-08-04T13:23:53.255158Z", + "shell.execute_reply": "2026-08-04T13:23:53.254799Z" } }, "outputs": [ @@ -1077,13 +1083,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "39724302", + "id": "1a1357fa", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:45.565487Z", - "iopub.status.busy": "2026-08-03T06:24:45.565407Z", - "iopub.status.idle": "2026-08-03T06:24:45.668596Z", - "shell.execute_reply": "2026-08-03T06:24:45.668187Z" + "iopub.execute_input": "2026-08-04T13:23:53.256120Z", + "iopub.status.busy": "2026-08-04T13:23:53.256023Z", + "iopub.status.idle": "2026-08-04T13:23:54.488985Z", + "shell.execute_reply": "2026-08-04T13:23:54.488529Z" } }, "outputs": [ @@ -1143,7 +1149,7 @@ }, { "cell_type": "markdown", - "id": "d0f8fe25", + "id": "1965edb9", "metadata": {}, "source": [ "```{note}\n", @@ -1163,13 +1169,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "2d4392c2", + "id": "0ee7eb60", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:45.669586Z", - "iopub.status.busy": "2026-08-03T06:24:45.669412Z", - "iopub.status.idle": "2026-08-03T06:24:45.675360Z", - "shell.execute_reply": "2026-08-03T06:24:45.674956Z" + "iopub.execute_input": "2026-08-04T13:23:54.490408Z", + "iopub.status.busy": "2026-08-04T13:23:54.490308Z", + "iopub.status.idle": "2026-08-04T13:23:54.504181Z", + "shell.execute_reply": "2026-08-04T13:23:54.503701Z" } }, "outputs": [ @@ -1279,7 +1285,7 @@ }, { "cell_type": "markdown", - "id": "9f8b45ee", + "id": "79f822f2", "metadata": {}, "source": [ "A pairing is usable when the lattices fit *and* the contact is inert. Neither\n", @@ -1291,13 +1297,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "305880b5", + "id": "ca72f80d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:45.676270Z", - "iopub.status.busy": "2026-08-03T06:24:45.676180Z", - "iopub.status.idle": "2026-08-03T06:24:45.678136Z", - "shell.execute_reply": "2026-08-03T06:24:45.677791Z" + "iopub.execute_input": "2026-08-04T13:23:54.505472Z", + "iopub.status.busy": "2026-08-04T13:23:54.505368Z", + "iopub.status.idle": "2026-08-04T13:23:54.508024Z", + "shell.execute_reply": "2026-08-04T13:23:54.507391Z" } }, "outputs": [ @@ -1318,7 +1324,7 @@ }, { "cell_type": "markdown", - "id": "5cedf7af", + "id": "cf7936ff", "metadata": {}, "source": [ "```{seealso}\n", diff --git a/matverse_guide/docs/tutorials/magnetic_ordering.ipynb b/matverse_guide/docs/tutorials/magnetic_ordering.ipynb index 88d24b4..72526d5 100644 --- a/matverse_guide/docs/tutorials/magnetic_ordering.ipynb +++ b/matverse_guide/docs/tutorials/magnetic_ordering.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "6ec51b38", + "id": "d1c618da", "metadata": {}, "source": [ "# Magnetic ordering\n", @@ -24,13 +24,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "6a1729fa", + "id": "6f4e750e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:21.029203Z", - "iopub.status.busy": "2026-08-03T06:24:21.029116Z", - "iopub.status.idle": "2026-08-03T06:24:24.153560Z", - "shell.execute_reply": "2026-08-03T06:24:24.153056Z" + "iopub.execute_input": "2026-08-04T13:23:17.504756Z", + "iopub.status.busy": "2026-08-04T13:23:17.504657Z", + "iopub.status.idle": "2026-08-04T13:23:23.447858Z", + "shell.execute_reply": "2026-08-04T13:23:23.447263Z" } }, "outputs": [ @@ -38,20 +38,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -61,7 +67,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -77,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "ad4658c5", + "id": "62e65931", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -89,13 +95,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "4f687625", + "id": "3dc94141", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:24.154738Z", - "iopub.status.busy": "2026-08-03T06:24:24.154415Z", - "iopub.status.idle": "2026-08-03T06:24:24.282198Z", - "shell.execute_reply": "2026-08-03T06:24:24.281742Z" + "iopub.execute_input": "2026-08-04T13:23:23.449367Z", + "iopub.status.busy": "2026-08-04T13:23:23.449011Z", + "iopub.status.idle": "2026-08-04T13:23:23.547698Z", + "shell.execute_reply": "2026-08-04T13:23:23.547128Z" } }, "outputs": [ @@ -183,7 +189,7 @@ }, { "cell_type": "markdown", - "id": "5ba1c9c4", + "id": "d5dc0300", "metadata": {}, "source": [ "## Which elements can even carry a moment" @@ -192,13 +198,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "6107a53a", + "id": "009a8ddb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:24.283136Z", - "iopub.status.busy": "2026-08-03T06:24:24.282978Z", - "iopub.status.idle": "2026-08-03T06:24:25.246500Z", - "shell.execute_reply": "2026-08-03T06:24:25.245901Z" + "iopub.execute_input": "2026-08-04T13:23:23.548921Z", + "iopub.status.busy": "2026-08-04T13:23:23.548785Z", + "iopub.status.idle": "2026-08-04T13:23:24.288026Z", + "shell.execute_reply": "2026-08-04T13:23:24.287320Z" } }, "outputs": [ @@ -280,7 +286,7 @@ }, { "cell_type": "markdown", - "id": "9105440e", + "id": "7d9d5fe4", "metadata": {}, "source": [ "Read those two columns carefully, because they answer different questions.\n", @@ -302,13 +308,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "43034535", + "id": "a84de43f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.247457Z", - "iopub.status.busy": "2026-08-03T06:24:25.247361Z", - "iopub.status.idle": "2026-08-03T06:24:25.249729Z", - "shell.execute_reply": "2026-08-03T06:24:25.249366Z" + "iopub.execute_input": "2026-08-04T13:23:24.289453Z", + "iopub.status.busy": "2026-08-04T13:23:24.289001Z", + "iopub.status.idle": "2026-08-04T13:23:24.293175Z", + "shell.execute_reply": "2026-08-04T13:23:24.292447Z" } }, "outputs": [ @@ -348,7 +354,7 @@ }, { "cell_type": "markdown", - "id": "9becfd3a", + "id": "1bc6f6f1", "metadata": {}, "source": [ "## Enumerating orderings\n", @@ -361,13 +367,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "a6e271f2", + "id": "c7851de4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.250457Z", - "iopub.status.busy": "2026-08-03T06:24:25.250375Z", - "iopub.status.idle": "2026-08-03T06:24:25.468692Z", - "shell.execute_reply": "2026-08-03T06:24:25.468259Z" + "iopub.execute_input": "2026-08-04T13:23:24.294536Z", + "iopub.status.busy": "2026-08-04T13:23:24.294403Z", + "iopub.status.idle": "2026-08-04T13:23:24.506830Z", + "shell.execute_reply": "2026-08-04T13:23:24.506357Z" } }, "outputs": [ @@ -395,13 +401,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "b8280f1d", + "id": "c86fb636", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.469727Z", - "iopub.status.busy": "2026-08-03T06:24:25.469477Z", - "iopub.status.idle": "2026-08-03T06:24:25.481591Z", - "shell.execute_reply": "2026-08-03T06:24:25.481119Z" + "iopub.execute_input": "2026-08-04T13:23:24.508119Z", + "iopub.status.busy": "2026-08-04T13:23:24.507982Z", + "iopub.status.idle": "2026-08-04T13:23:24.521965Z", + "shell.execute_reply": "2026-08-04T13:23:24.521420Z" } }, "outputs": [ @@ -536,7 +542,7 @@ }, { "cell_type": "markdown", - "id": "765a46c4", + "id": "039cf8f5", "metadata": {}, "source": [ "Three things worth reading in that table.\n", @@ -557,13 +563,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "88e72603", + "id": "8d6dbdd7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.482499Z", - "iopub.status.busy": "2026-08-03T06:24:25.482336Z", - "iopub.status.idle": "2026-08-03T06:24:25.484781Z", - "shell.execute_reply": "2026-08-03T06:24:25.484420Z" + "iopub.execute_input": "2026-08-04T13:23:24.524110Z", + "iopub.status.busy": "2026-08-04T13:23:24.523958Z", + "iopub.status.idle": "2026-08-04T13:23:24.528738Z", + "shell.execute_reply": "2026-08-04T13:23:24.528264Z" } }, "outputs": [ @@ -584,7 +590,7 @@ }, { "cell_type": "markdown", - "id": "2d78b4dd", + "id": "f56fe7db", "metadata": {}, "source": [ "```{note}\n", @@ -601,13 +607,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "918a1f87", + "id": "88bed0b7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.485546Z", - "iopub.status.busy": "2026-08-03T06:24:25.485456Z", - "iopub.status.idle": "2026-08-03T06:24:25.487627Z", - "shell.execute_reply": "2026-08-03T06:24:25.487291Z" + "iopub.execute_input": "2026-08-04T13:23:24.529906Z", + "iopub.status.busy": "2026-08-04T13:23:24.529770Z", + "iopub.status.idle": "2026-08-04T13:23:24.533250Z", + "shell.execute_reply": "2026-08-04T13:23:24.532803Z" } }, "outputs": [ @@ -629,7 +635,7 @@ }, { "cell_type": "markdown", - "id": "ea399d98", + "id": "46aed8d7", "metadata": {}, "source": [ "## Picking the ground state\n", @@ -641,13 +647,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "022da315", + "id": "33332517", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.488358Z", - "iopub.status.busy": "2026-08-03T06:24:25.488272Z", - "iopub.status.idle": "2026-08-03T06:24:25.506930Z", - "shell.execute_reply": "2026-08-03T06:24:25.506544Z" + "iopub.execute_input": "2026-08-04T13:23:24.534408Z", + "iopub.status.busy": "2026-08-04T13:23:24.534273Z", + "iopub.status.idle": "2026-08-04T13:23:24.556945Z", + "shell.execute_reply": "2026-08-04T13:23:24.556483Z" } }, "outputs": [ @@ -726,7 +732,7 @@ }, { "cell_type": "markdown", - "id": "726ae5e4", + "id": "7d2c439f", "metadata": {}, "source": [ "## The spread is zero, and that is the answer\n", @@ -746,13 +752,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "dc63d320", + "id": "c33df6ab", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.507702Z", - "iopub.status.busy": "2026-08-03T06:24:25.507612Z", - "iopub.status.idle": "2026-08-03T06:24:25.509757Z", - "shell.execute_reply": "2026-08-03T06:24:25.509443Z" + "iopub.execute_input": "2026-08-04T13:23:24.559024Z", + "iopub.status.busy": "2026-08-04T13:23:24.558257Z", + "iopub.status.idle": "2026-08-04T13:23:24.562581Z", + "shell.execute_reply": "2026-08-04T13:23:24.561859Z" } }, "outputs": [ @@ -776,7 +782,7 @@ }, { "cell_type": "markdown", - "id": "0327725a", + "id": "9ca700c4", "metadata": {}, "source": [ "```{warning}\n", @@ -819,13 +825,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "80582190", + "id": "4c41d2d3", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.510427Z", - "iopub.status.busy": "2026-08-03T06:24:25.510344Z", - "iopub.status.idle": "2026-08-03T06:24:25.512425Z", - "shell.execute_reply": "2026-08-03T06:24:25.512107Z" + "iopub.execute_input": "2026-08-04T13:23:24.563591Z", + "iopub.status.busy": "2026-08-04T13:23:24.563462Z", + "iopub.status.idle": "2026-08-04T13:23:24.566886Z", + "shell.execute_reply": "2026-08-04T13:23:24.566463Z" } }, "outputs": [ @@ -846,7 +852,7 @@ }, { "cell_type": "markdown", - "id": "bcb069ad", + "id": "cf1e144b", "metadata": {}, "source": [ "That is deliberate. `mv.thermo.hull` needs no special case for magnetism: it\n", @@ -867,7 +873,7 @@ }, { "cell_type": "markdown", - "id": "fb8e2d5a", + "id": "1f6237d1", "metadata": {}, "source": [ "## The other thing a d shell does\n", @@ -884,13 +890,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "e1fa03b8", + "id": "1f12e834", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.513122Z", - "iopub.status.busy": "2026-08-03T06:24:25.513040Z", - "iopub.status.idle": "2026-08-03T06:24:25.736094Z", - "shell.execute_reply": "2026-08-03T06:24:25.735693Z" + "iopub.execute_input": "2026-08-04T13:23:24.568639Z", + "iopub.status.busy": "2026-08-04T13:23:24.568503Z", + "iopub.status.idle": "2026-08-04T13:23:24.803296Z", + "shell.execute_reply": "2026-08-04T13:23:24.802872Z" } }, "outputs": [ @@ -979,7 +985,7 @@ }, { "cell_type": "markdown", - "id": "cbeac27b", + "id": "39e005b9", "metadata": {}, "source": [ "Mn³⁺ and Ni³⁺ come out **strong** and Ti⁴⁺ inactive, which is the textbook\n", @@ -1003,7 +1009,7 @@ }, { "cell_type": "markdown", - "id": "7fd1efe8", + "id": "5246fc20", "metadata": {}, "source": [ "## How far above room temperature does it stay a magnet?\n", @@ -1019,13 +1025,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "1d921f85", + "id": "d6cd42a8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.736986Z", - "iopub.status.busy": "2026-08-03T06:24:25.736890Z", - "iopub.status.idle": "2026-08-03T06:24:25.759713Z", - "shell.execute_reply": "2026-08-03T06:24:25.759253Z" + "iopub.execute_input": "2026-08-04T13:23:24.804936Z", + "iopub.status.busy": "2026-08-04T13:23:24.804796Z", + "iopub.status.idle": "2026-08-04T13:23:24.830868Z", + "shell.execute_reply": "2026-08-04T13:23:24.830384Z" } }, "outputs": [ @@ -1104,7 +1110,7 @@ }, { "cell_type": "markdown", - "id": "1977a464", + "id": "326b66e6", "metadata": {}, "source": [ "The ferromagnetic arrangement is lower, so the coupling is positive and the\n", @@ -1126,7 +1132,7 @@ }, { "cell_type": "markdown", - "id": "276eb48d", + "id": "0b745d06", "metadata": {}, "source": [ "### When the fit has nothing to fit\n", @@ -1140,13 +1146,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "a99d94e4", + "id": "73cbab3a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.760663Z", - "iopub.status.busy": "2026-08-03T06:24:25.760505Z", - "iopub.status.idle": "2026-08-03T06:24:25.765466Z", - "shell.execute_reply": "2026-08-03T06:24:25.765093Z" + "iopub.execute_input": "2026-08-04T13:23:24.832276Z", + "iopub.status.busy": "2026-08-04T13:23:24.832133Z", + "iopub.status.idle": "2026-08-04T13:23:24.839438Z", + "shell.execute_reply": "2026-08-04T13:23:24.838702Z" } }, "outputs": [ @@ -1184,7 +1190,7 @@ }, { "cell_type": "markdown", - "id": "45d49892", + "id": "3a4bf70a", "metadata": {}, "source": [ "A NaN and a stated reason, rather than a number near zero that would read as\n", @@ -1193,7 +1199,7 @@ }, { "cell_type": "markdown", - "id": "dcece87e", + "id": "d49f4b86", "metadata": {}, "source": [ "## What the moments cost in symmetry\n", @@ -1212,13 +1218,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "07e75818", + "id": "6b2e38c4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:25.766209Z", - "iopub.status.busy": "2026-08-03T06:24:25.766126Z", - "iopub.status.idle": "2026-08-03T06:24:25.867268Z", - "shell.execute_reply": "2026-08-03T06:24:25.866863Z" + "iopub.execute_input": "2026-08-04T13:23:24.840767Z", + "iopub.status.busy": "2026-08-04T13:23:24.840628Z", + "iopub.status.idle": "2026-08-04T13:23:24.947472Z", + "shell.execute_reply": "2026-08-04T13:23:24.946981Z" } }, "outputs": [ @@ -1308,7 +1314,7 @@ }, { "cell_type": "markdown", - "id": "9eae2483", + "id": "90adbf99", "metadata": {}, "source": [ "bcc iron has **96** operations. With no moments all 96 survive. With any\n", diff --git a/matverse_guide/docs/tutorials/models_and_campaigns.ipynb b/matverse_guide/docs/tutorials/models_and_campaigns.ipynb index 30d9ea3..d4875de 100644 --- a/matverse_guide/docs/tutorials/models_and_campaigns.ipynb +++ b/matverse_guide/docs/tutorials/models_and_campaigns.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "5bc70515", + "id": "8d0adf18", "metadata": {}, "source": [ "# Models and campaigns\n", @@ -19,13 +19,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "a56e2ef0", + "id": "99fff3ca", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:47.950943Z", - "iopub.status.busy": "2026-08-03T06:21:47.950866Z", - "iopub.status.idle": "2026-08-03T06:21:50.919617Z", - "shell.execute_reply": "2026-08-03T06:21:50.919094Z" + "iopub.execute_input": "2026-08-04T13:20:10.184592Z", + "iopub.status.busy": "2026-08-04T13:20:10.184497Z", + "iopub.status.idle": "2026-08-04T13:20:20.204348Z", + "shell.execute_reply": "2026-08-04T13:20:20.203865Z" } }, "outputs": [ @@ -33,20 +33,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -56,7 +62,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -72,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "14a02925", + "id": "7de4c948", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -85,13 +91,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "692a79cf", + "id": "b217efe0", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:50.920794Z", - "iopub.status.busy": "2026-08-03T06:21:50.920547Z", - "iopub.status.idle": "2026-08-03T06:21:50.974667Z", - "shell.execute_reply": "2026-08-03T06:21:50.974253Z" + "iopub.execute_input": "2026-08-04T13:20:20.206169Z", + "iopub.status.busy": "2026-08-04T13:20:20.205825Z", + "iopub.status.idle": "2026-08-04T13:20:20.230341Z", + "shell.execute_reply": "2026-08-04T13:20:20.229606Z" } }, "outputs": [ @@ -128,7 +134,7 @@ }, { "cell_type": "markdown", - "id": "318e6a53", + "id": "fd85994f", "metadata": {}, "source": [ "Each binary sits at the mean of its two elemental lattice parameters — a crude\n", @@ -139,13 +145,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "8f4a9c88", + "id": "e7f15759", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:50.975626Z", - "iopub.status.busy": "2026-08-03T06:21:50.975421Z", - "iopub.status.idle": "2026-08-03T06:21:51.142429Z", - "shell.execute_reply": "2026-08-03T06:21:51.141890Z" + "iopub.execute_input": "2026-08-04T13:20:20.231502Z", + "iopub.status.busy": "2026-08-04T13:20:20.231383Z", + "iopub.status.idle": "2026-08-04T13:20:20.331675Z", + "shell.execute_reply": "2026-08-04T13:20:20.329850Z" } }, "outputs": [ @@ -269,7 +275,7 @@ }, { "cell_type": "markdown", - "id": "50ca4d7c", + "id": "883c4f37", "metadata": {}, "source": [ "## The split is the part to care about\n", @@ -282,13 +288,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "7351da00", + "id": "6a02e416", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.143355Z", - "iopub.status.busy": "2026-08-03T06:21:51.143234Z", - "iopub.status.idle": "2026-08-03T06:21:51.147007Z", - "shell.execute_reply": "2026-08-03T06:21:51.146608Z" + "iopub.execute_input": "2026-08-04T13:20:20.332774Z", + "iopub.status.busy": "2026-08-04T13:20:20.332657Z", + "iopub.status.idle": "2026-08-04T13:20:20.338460Z", + "shell.execute_reply": "2026-08-04T13:20:20.337832Z" } }, "outputs": [ @@ -316,7 +322,7 @@ }, { "cell_type": "markdown", - "id": "e3f808c0", + "id": "f6c3285e", "metadata": {}, "source": [ "`mv.model.split` defaults to grouping by **composition**, and the default is the\n", @@ -338,13 +344,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "874e7ad6", + "id": "b5a90541", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.147834Z", - "iopub.status.busy": "2026-08-03T06:21:51.147734Z", - "iopub.status.idle": "2026-08-03T06:21:51.150741Z", - "shell.execute_reply": "2026-08-03T06:21:51.150403Z" + "iopub.execute_input": "2026-08-04T13:20:20.339420Z", + "iopub.status.busy": "2026-08-04T13:20:20.339316Z", + "iopub.status.idle": "2026-08-04T13:20:20.343420Z", + "shell.execute_reply": "2026-08-04T13:20:20.342821Z" } }, "outputs": [ @@ -366,7 +372,7 @@ }, { "cell_type": "markdown", - "id": "ee379c26", + "id": "af65671e", "metadata": {}, "source": [ "The element holdout is the hardest honest split and the one a discovery campaign\n", @@ -385,13 +391,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "d3650367", + "id": "cb4a6927", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.151549Z", - "iopub.status.busy": "2026-08-03T06:21:51.151459Z", - "iopub.status.idle": "2026-08-03T06:21:51.591890Z", - "shell.execute_reply": "2026-08-03T06:21:51.591414Z" + "iopub.execute_input": "2026-08-04T13:20:20.344430Z", + "iopub.status.busy": "2026-08-04T13:20:20.344319Z", + "iopub.status.idle": "2026-08-04T13:20:21.612833Z", + "shell.execute_reply": "2026-08-04T13:20:21.612491Z" } }, "outputs": [ @@ -418,7 +424,7 @@ }, { "cell_type": "markdown", - "id": "a6f92b79", + "id": "6f25d495", "metadata": {}, "source": [ "The prediction is a **level of theory**, not a special kind of column." @@ -427,13 +433,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "2521855d", + "id": "a4154b17", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.592978Z", - "iopub.status.busy": "2026-08-03T06:21:51.592710Z", - "iopub.status.idle": "2026-08-03T06:21:51.595253Z", - "shell.execute_reply": "2026-08-03T06:21:51.594896Z" + "iopub.execute_input": "2026-08-04T13:20:21.616325Z", + "iopub.status.busy": "2026-08-04T13:20:21.615986Z", + "iopub.status.idle": "2026-08-04T13:20:21.619480Z", + "shell.execute_reply": "2026-08-04T13:20:21.619221Z" } }, "outputs": [ @@ -465,7 +471,7 @@ }, { "cell_type": "markdown", - "id": "12c74c76", + "id": "5ba107a2", "metadata": {}, "source": [ "That matters for the same reason it does everywhere else in matverse: a\n", @@ -481,13 +487,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "3c27a034", + "id": "1395b418", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.595976Z", - "iopub.status.busy": "2026-08-03T06:21:51.595898Z", - "iopub.status.idle": "2026-08-03T06:21:51.601594Z", - "shell.execute_reply": "2026-08-03T06:21:51.601189Z" + "iopub.execute_input": "2026-08-04T13:20:21.620790Z", + "iopub.status.busy": "2026-08-04T13:20:21.620691Z", + "iopub.status.idle": "2026-08-04T13:20:21.626777Z", + "shell.execute_reply": "2026-08-04T13:20:21.626379Z" } }, "outputs": [ @@ -613,7 +619,7 @@ }, { "cell_type": "markdown", - "id": "46a08c83", + "id": "f7962288", "metadata": {}, "source": [ "It is honestly labelled **uncalibrated**. It is useful for deciding what to\n", @@ -623,13 +629,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "4a4ec348", + "id": "12c4e23f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.602523Z", - "iopub.status.busy": "2026-08-03T06:21:51.602438Z", - "iopub.status.idle": "2026-08-03T06:21:51.604612Z", - "shell.execute_reply": "2026-08-03T06:21:51.604235Z" + "iopub.execute_input": "2026-08-04T13:20:21.628041Z", + "iopub.status.busy": "2026-08-04T13:20:21.627881Z", + "iopub.status.idle": "2026-08-04T13:20:21.630300Z", + "shell.execute_reply": "2026-08-04T13:20:21.629874Z" } }, "outputs": [ @@ -653,7 +659,7 @@ }, { "cell_type": "markdown", - "id": "c2cde0fd", + "id": "aed7f5fc", "metadata": {}, "source": [ "Only scikit-learn is wired. Graph networks and fine-tuned interatomic potentials\n", @@ -664,13 +670,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "691ae0b1", + "id": "4392b0f6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.605565Z", - "iopub.status.busy": "2026-08-03T06:21:51.605447Z", - "iopub.status.idle": "2026-08-03T06:21:51.670522Z", - "shell.execute_reply": "2026-08-03T06:21:51.670103Z" + "iopub.execute_input": "2026-08-04T13:20:21.631324Z", + "iopub.status.busy": "2026-08-04T13:20:21.631165Z", + "iopub.status.idle": "2026-08-04T13:20:21.857733Z", + "shell.execute_reply": "2026-08-04T13:20:21.856958Z" } }, "outputs": [ @@ -678,9 +684,9 @@ "data": { "text/plain": [ "{'n': 6,\n", - " 'mae': 0.017428107971845627,\n", - " 'rmse': 0.023415460259419575,\n", - " 'r2': 0.8880648615994451}" + " 'mae': 0.01739907188476024,\n", + " 'rmse': 0.024090368763733147,\n", + " 'r2': 0.8815192106145648}" ] }, "execution_count": 10, @@ -699,7 +705,7 @@ }, { "cell_type": "markdown", - "id": "fe93805b", + "id": "1d153c2c", "metadata": {}, "source": [ "### Uncertainty from a committee instead\n", @@ -713,13 +719,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "ed273afd", + "id": "0ccdbf07", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.671366Z", - "iopub.status.busy": "2026-08-03T06:21:51.671276Z", - "iopub.status.idle": "2026-08-03T06:21:51.677251Z", - "shell.execute_reply": "2026-08-03T06:21:51.676783Z" + "iopub.execute_input": "2026-08-04T13:20:21.858902Z", + "iopub.status.busy": "2026-08-04T13:20:21.858799Z", + "iopub.status.idle": "2026-08-04T13:20:21.870103Z", + "shell.execute_reply": "2026-08-04T13:20:21.869069Z" } }, "outputs": [ @@ -818,7 +824,7 @@ }, { "cell_type": "markdown", - "id": "fdc7dbf3", + "id": "79f403f6", "metadata": {}, "source": [ "The two members here differ by a constant, so the spread is the same everywhere\n", @@ -834,13 +840,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "198bd84e", + "id": "f31d59f7", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:51.678067Z", - "iopub.status.busy": "2026-08-03T06:21:51.677959Z", - "iopub.status.idle": "2026-08-03T06:21:53.254509Z", - "shell.execute_reply": "2026-08-03T06:21:53.254033Z" + "iopub.execute_input": "2026-08-04T13:20:21.871448Z", + "iopub.status.busy": "2026-08-04T13:20:21.871029Z", + "iopub.status.idle": "2026-08-04T13:20:25.218901Z", + "shell.execute_reply": "2026-08-04T13:20:25.218480Z" } }, "outputs": [ @@ -913,13 +919,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "af0003db", + "id": "e4bc84d5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.255412Z", - "iopub.status.busy": "2026-08-03T06:21:53.255319Z", - "iopub.status.idle": "2026-08-03T06:21:53.354419Z", - "shell.execute_reply": "2026-08-03T06:21:53.353939Z" + "iopub.execute_input": "2026-08-04T13:20:25.219930Z", + "iopub.status.busy": "2026-08-04T13:20:25.219833Z", + "iopub.status.idle": "2026-08-04T13:20:25.429852Z", + "shell.execute_reply": "2026-08-04T13:20:25.429410Z" } }, "outputs": [ @@ -966,13 +972,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "0cf54c76", + "id": "f3a29b83", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.355364Z", - "iopub.status.busy": "2026-08-03T06:21:53.355267Z", - "iopub.status.idle": "2026-08-03T06:21:53.357555Z", - "shell.execute_reply": "2026-08-03T06:21:53.357213Z" + "iopub.execute_input": "2026-08-04T13:20:25.430857Z", + "iopub.status.busy": "2026-08-04T13:20:25.430753Z", + "iopub.status.idle": "2026-08-04T13:20:25.433149Z", + "shell.execute_reply": "2026-08-04T13:20:25.432686Z" } }, "outputs": [ @@ -993,7 +999,7 @@ }, { "cell_type": "markdown", - "id": "b7fa2772", + "id": "e3e98206", "metadata": {}, "source": [ "`leakage_mae` is the grouped MAE minus the random one. A large **positive**\n", @@ -1039,13 +1045,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "e49fde54", + "id": "318d32bb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.358336Z", - "iopub.status.busy": "2026-08-03T06:21:53.358250Z", - "iopub.status.idle": "2026-08-03T06:21:53.361940Z", - "shell.execute_reply": "2026-08-03T06:21:53.361538Z" + "iopub.execute_input": "2026-08-04T13:20:25.434031Z", + "iopub.status.busy": "2026-08-04T13:20:25.433945Z", + "iopub.status.idle": "2026-08-04T13:20:25.446944Z", + "shell.execute_reply": "2026-08-04T13:20:25.446442Z" } }, "outputs": [ @@ -1073,7 +1079,7 @@ }, { "cell_type": "markdown", - "id": "a3838dce", + "id": "8122074e", "metadata": {}, "source": [ "Each round: fit on what is known, ask for a batch, \"compute\" it, fold it back." @@ -1082,13 +1088,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "2d06e474", + "id": "82600d71", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.362746Z", - "iopub.status.busy": "2026-08-03T06:21:53.362662Z", - "iopub.status.idle": "2026-08-03T06:21:53.875306Z", - "shell.execute_reply": "2026-08-03T06:21:53.874820Z" + "iopub.execute_input": "2026-08-04T13:20:25.448039Z", + "iopub.status.busy": "2026-08-04T13:20:25.447913Z", + "iopub.status.idle": "2026-08-04T13:20:25.994214Z", + "shell.execute_reply": "2026-08-04T13:20:25.993652Z" } }, "outputs": [ @@ -1219,13 +1225,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "d8088ca4", + "id": "60f17282", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.876220Z", - "iopub.status.busy": "2026-08-03T06:21:53.876125Z", - "iopub.status.idle": "2026-08-03T06:21:53.878639Z", - "shell.execute_reply": "2026-08-03T06:21:53.878306Z" + "iopub.execute_input": "2026-08-04T13:20:25.995297Z", + "iopub.status.busy": "2026-08-04T13:20:25.995154Z", + "iopub.status.idle": "2026-08-04T13:20:25.998154Z", + "shell.execute_reply": "2026-08-04T13:20:25.997610Z" } }, "outputs": [ @@ -1247,20 +1253,20 @@ { "cell_type": "code", "execution_count": 18, - "id": "5bcaea07", + "id": "2b138a0f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.879379Z", - "iopub.status.busy": "2026-08-03T06:21:53.879294Z", - "iopub.status.idle": "2026-08-03T06:21:53.994309Z", - "shell.execute_reply": "2026-08-03T06:21:53.993764Z" + "iopub.execute_input": "2026-08-04T13:20:25.999169Z", + "iopub.status.busy": "2026-08-04T13:20:25.999053Z", + "iopub.status.idle": "2026-08-04T13:20:26.137955Z", + "shell.execute_reply": "2026-08-04T13:20:26.137275Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -1299,7 +1305,7 @@ }, { "cell_type": "markdown", - "id": "46a2fc20", + "id": "fc7984ca", "metadata": {}, "source": [ "The campaign found the true optimum having computed a fraction of the\n", @@ -1327,13 +1333,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "e8311827", + "id": "0896c898", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.995226Z", - "iopub.status.busy": "2026-08-03T06:21:53.995129Z", - "iopub.status.idle": "2026-08-03T06:21:53.997800Z", - "shell.execute_reply": "2026-08-03T06:21:53.997445Z" + "iopub.execute_input": "2026-08-04T13:20:26.138995Z", + "iopub.status.busy": "2026-08-04T13:20:26.138865Z", + "iopub.status.idle": "2026-08-04T13:20:26.141835Z", + "shell.execute_reply": "2026-08-04T13:20:26.141307Z" } }, "outputs": [ @@ -1356,13 +1362,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "9a4444ee", + "id": "7073266e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:53.998527Z", - "iopub.status.busy": "2026-08-03T06:21:53.998439Z", - "iopub.status.idle": "2026-08-03T06:21:54.112461Z", - "shell.execute_reply": "2026-08-03T06:21:54.112021Z" + "iopub.execute_input": "2026-08-04T13:20:26.142895Z", + "iopub.status.busy": "2026-08-04T13:20:26.142780Z", + "iopub.status.idle": "2026-08-04T13:20:26.261936Z", + "shell.execute_reply": "2026-08-04T13:20:26.261455Z" } }, "outputs": [ @@ -1405,7 +1411,7 @@ }, { "cell_type": "markdown", - "id": "f805a130", + "id": "70604149", "metadata": {}, "source": [ "A candidate is worth computing either because its predicted value is good or\n", @@ -1422,13 +1428,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "39bb137d", + "id": "1d4eb9e2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:54.113369Z", - "iopub.status.busy": "2026-08-03T06:21:54.113213Z", - "iopub.status.idle": "2026-08-03T06:21:54.118177Z", - "shell.execute_reply": "2026-08-03T06:21:54.117758Z" + "iopub.execute_input": "2026-08-04T13:20:26.263139Z", + "iopub.status.busy": "2026-08-04T13:20:26.263002Z", + "iopub.status.idle": "2026-08-04T13:20:26.269630Z", + "shell.execute_reply": "2026-08-04T13:20:26.268900Z" } }, "outputs": [ @@ -1455,7 +1461,7 @@ }, { "cell_type": "markdown", - "id": "d62e0583", + "id": "65ec2cbc", "metadata": {}, "source": [ "Farthest-point selection among a shortlist, so the batch spreads out in\n", @@ -1479,13 +1485,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "e91f4710", + "id": "02e797db", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:54.119016Z", - "iopub.status.busy": "2026-08-03T06:21:54.118922Z", - "iopub.status.idle": "2026-08-03T06:21:54.370477Z", - "shell.execute_reply": "2026-08-03T06:21:54.370046Z" + "iopub.execute_input": "2026-08-04T13:20:26.271168Z", + "iopub.status.busy": "2026-08-04T13:20:26.270725Z", + "iopub.status.idle": "2026-08-04T13:20:26.535183Z", + "shell.execute_reply": "2026-08-04T13:20:26.534585Z" } }, "outputs": [ @@ -1516,7 +1522,7 @@ }, { "cell_type": "markdown", - "id": "c7f75062", + "id": "e022879d", "metadata": {}, "source": [ "`mv.pl.parity` draws the error bars when an uncertainty column exists,\n", @@ -1533,13 +1539,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "ef2ecf72", + "id": "bc3686d2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:54.371387Z", - "iopub.status.busy": "2026-08-03T06:21:54.371300Z", - "iopub.status.idle": "2026-08-03T06:21:54.690352Z", - "shell.execute_reply": "2026-08-03T06:21:54.689970Z" + "iopub.execute_input": "2026-08-04T13:20:26.536208Z", + "iopub.status.busy": "2026-08-04T13:20:26.536095Z", + "iopub.status.idle": "2026-08-04T13:20:26.864672Z", + "shell.execute_reply": "2026-08-04T13:20:26.864137Z" } }, "outputs": [ @@ -1573,7 +1579,7 @@ }, { "cell_type": "markdown", - "id": "95444be6", + "id": "40f7fa30", "metadata": {}, "source": [ "A bar chart of 118 categories is unreadable and throws away the structure a\n", @@ -1584,13 +1590,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "4789379d", + "id": "28f79aba", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:54.691315Z", - "iopub.status.busy": "2026-08-03T06:21:54.691220Z", - "iopub.status.idle": "2026-08-03T06:21:54.778969Z", - "shell.execute_reply": "2026-08-03T06:21:54.778569Z" + "iopub.execute_input": "2026-08-04T13:20:26.865830Z", + "iopub.status.busy": "2026-08-04T13:20:26.865696Z", + "iopub.status.idle": "2026-08-04T13:20:26.956325Z", + "shell.execute_reply": "2026-08-04T13:20:26.955534Z" } }, "outputs": [ @@ -1627,7 +1633,7 @@ }, { "cell_type": "markdown", - "id": "e92c334c", + "id": "c0fc4a3a", "metadata": {}, "source": [ "### The rest\n", @@ -1646,13 +1652,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "5f86547d", + "id": "a10e810e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:54.779840Z", - "iopub.status.busy": "2026-08-03T06:21:54.779741Z", - "iopub.status.idle": "2026-08-03T06:21:55.427914Z", - "shell.execute_reply": "2026-08-03T06:21:55.427439Z" + "iopub.execute_input": "2026-08-04T13:20:26.957468Z", + "iopub.status.busy": "2026-08-04T13:20:26.957340Z", + "iopub.status.idle": "2026-08-04T13:20:27.645915Z", + "shell.execute_reply": "2026-08-04T13:20:27.645448Z" } }, "outputs": [ @@ -1678,7 +1684,7 @@ }, { "cell_type": "markdown", - "id": "19285d88", + "id": "cdcf5831", "metadata": {}, "source": [ "```{note}\n", diff --git a/matverse_guide/docs/tutorials/molecules.ipynb b/matverse_guide/docs/tutorials/molecules.ipynb index 7be2bdf..44a39b4 100644 --- a/matverse_guide/docs/tutorials/molecules.ipynb +++ b/matverse_guide/docs/tutorials/molecules.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "1abdfacd", + "id": "293b68c5", "metadata": {}, "source": [ "# Molecules\n", @@ -27,13 +27,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "7a8d4ec4", + "id": "436aee5c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:42.652506Z", - "iopub.status.busy": "2026-08-03T06:25:42.652341Z", - "iopub.status.idle": "2026-08-03T06:25:45.715497Z", - "shell.execute_reply": "2026-08-03T06:25:45.715046Z" + "iopub.execute_input": "2026-08-04T13:25:05.395841Z", + "iopub.status.busy": "2026-08-04T13:25:05.395734Z", + "iopub.status.idle": "2026-08-04T13:25:09.892730Z", + "shell.execute_reply": "2026-08-04T13:25:09.892179Z" } }, "outputs": [ @@ -41,20 +41,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -64,7 +70,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -80,7 +86,7 @@ }, { "cell_type": "markdown", - "id": "2c665439", + "id": "85370ffd", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -92,13 +98,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "e763949a", + "id": "4d1b8feb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:45.716729Z", - "iopub.status.busy": "2026-08-03T06:25:45.716427Z", - "iopub.status.idle": "2026-08-03T06:25:45.762062Z", - "shell.execute_reply": "2026-08-03T06:25:45.761660Z" + "iopub.execute_input": "2026-08-04T13:25:09.894520Z", + "iopub.status.busy": "2026-08-04T13:25:09.894110Z", + "iopub.status.idle": "2026-08-04T13:25:09.906484Z", + "shell.execute_reply": "2026-08-04T13:25:09.906030Z" } }, "outputs": [ @@ -142,13 +148,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "1eb52f03", + "id": "e75cb89f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:45.763003Z", - "iopub.status.busy": "2026-08-03T06:25:45.762823Z", - "iopub.status.idle": "2026-08-03T06:25:45.769391Z", - "shell.execute_reply": "2026-08-03T06:25:45.768994Z" + "iopub.execute_input": "2026-08-04T13:25:09.907963Z", + "iopub.status.busy": "2026-08-04T13:25:09.907863Z", + "iopub.status.idle": "2026-08-04T13:25:09.915370Z", + "shell.execute_reply": "2026-08-04T13:25:09.914866Z" } }, "outputs": [ @@ -232,7 +238,7 @@ }, { "cell_type": "markdown", - "id": "f760683c", + "id": "643537fe", "metadata": {}, "source": [ "The composition matrix, built without being asked, exactly as for a crystal.\n", @@ -242,13 +248,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "4c54ce6d", + "id": "07a2acfe", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:45.770693Z", - "iopub.status.busy": "2026-08-03T06:25:45.770602Z", - "iopub.status.idle": "2026-08-03T06:25:45.778201Z", - "shell.execute_reply": "2026-08-03T06:25:45.777833Z" + "iopub.execute_input": "2026-08-04T13:25:09.916448Z", + "iopub.status.busy": "2026-08-04T13:25:09.916347Z", + "iopub.status.idle": "2026-08-04T13:25:09.925369Z", + "shell.execute_reply": "2026-08-04T13:25:09.924974Z" } }, "outputs": [ @@ -343,7 +349,7 @@ }, { "cell_type": "markdown", - "id": "8cc3ba30", + "id": "4888a5f3", "metadata": {}, "source": [ "`volume` and `density` are NaN, because they are properties of a *cell* and a\n", @@ -354,13 +360,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "3b2a129b", + "id": "b4348e14", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:45.778946Z", - "iopub.status.busy": "2026-08-03T06:25:45.778860Z", - "iopub.status.idle": "2026-08-03T06:25:45.792473Z", - "shell.execute_reply": "2026-08-03T06:25:45.792077Z" + "iopub.execute_input": "2026-08-04T13:25:09.926418Z", + "iopub.status.busy": "2026-08-04T13:25:09.926315Z", + "iopub.status.idle": "2026-08-04T13:25:09.941408Z", + "shell.execute_reply": "2026-08-04T13:25:09.940998Z" } }, "outputs": [ @@ -434,7 +440,7 @@ }, { "cell_type": "markdown", - "id": "8b8333b9", + "id": "6ee5995e", "metadata": {}, "source": [ "## Symmetry\n", @@ -445,13 +451,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "1be33963", + "id": "c6e01989", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:45.793247Z", - "iopub.status.busy": "2026-08-03T06:25:45.793156Z", - "iopub.status.idle": "2026-08-03T06:25:45.827912Z", - "shell.execute_reply": "2026-08-03T06:25:45.827532Z" + "iopub.execute_input": "2026-08-04T13:25:09.942565Z", + "iopub.status.busy": "2026-08-04T13:25:09.942463Z", + "iopub.status.idle": "2026-08-04T13:25:09.980821Z", + "shell.execute_reply": "2026-08-04T13:25:09.980390Z" } }, "outputs": [ @@ -542,7 +548,7 @@ }, { "cell_type": "markdown", - "id": "e958c7b9", + "id": "9c0298de", "metadata": {}, "source": [ "C2v for water, **Td** for methane, C3v for ammonia, Cs for ethanol — the\n", @@ -564,13 +570,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "2cb89a27", + "id": "bf7ed6ae", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:45.828682Z", - "iopub.status.busy": "2026-08-03T06:25:45.828598Z", - "iopub.status.idle": "2026-08-03T06:25:45.944468Z", - "shell.execute_reply": "2026-08-03T06:25:45.944052Z" + "iopub.execute_input": "2026-08-04T13:25:09.981902Z", + "iopub.status.busy": "2026-08-04T13:25:09.981805Z", + "iopub.status.idle": "2026-08-04T13:25:10.108561Z", + "shell.execute_reply": "2026-08-04T13:25:10.108105Z" } }, "outputs": [ @@ -609,7 +615,7 @@ }, { "cell_type": "markdown", - "id": "8d8c8d80", + "id": "e18db3f1", "metadata": {}, "source": [ "## Bonds\n", @@ -622,13 +628,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "7fd03314", + "id": "109136d8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:45.945373Z", - "iopub.status.busy": "2026-08-03T06:25:45.945280Z", - "iopub.status.idle": "2026-08-03T06:25:46.564845Z", - "shell.execute_reply": "2026-08-03T06:25:46.564452Z" + "iopub.execute_input": "2026-08-04T13:25:10.109641Z", + "iopub.status.busy": "2026-08-04T13:25:10.109534Z", + "iopub.status.idle": "2026-08-04T13:25:10.709693Z", + "shell.execute_reply": "2026-08-04T13:25:10.709255Z" } }, "outputs": [ @@ -652,7 +658,7 @@ }, { "cell_type": "markdown", - "id": "025c90fd", + "id": "ba62d2bd", "metadata": {}, "source": [ "Different *perception*, though. A crystal's neighbours come from Voronoi solid\n", @@ -663,13 +669,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "bd34f89c", + "id": "a8062095", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.566029Z", - "iopub.status.busy": "2026-08-03T06:25:46.565709Z", - "iopub.status.idle": "2026-08-03T06:25:46.568082Z", - "shell.execute_reply": "2026-08-03T06:25:46.567745Z" + "iopub.execute_input": "2026-08-04T13:25:10.711092Z", + "iopub.status.busy": "2026-08-04T13:25:10.710702Z", + "iopub.status.idle": "2026-08-04T13:25:10.713436Z", + "shell.execute_reply": "2026-08-04T13:25:10.712998Z" } }, "outputs": [ @@ -692,7 +698,7 @@ }, { "cell_type": "markdown", - "id": "0971abc0", + "id": "6de6798b", "metadata": {}, "source": [ "## Descriptors that need the graph" @@ -701,13 +707,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "cb404675", + "id": "5f758b13", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.568785Z", - "iopub.status.busy": "2026-08-03T06:25:46.568706Z", - "iopub.status.idle": "2026-08-03T06:25:46.582270Z", - "shell.execute_reply": "2026-08-03T06:25:46.581816Z" + "iopub.execute_input": "2026-08-04T13:25:10.714305Z", + "iopub.status.busy": "2026-08-04T13:25:10.714197Z", + "iopub.status.idle": "2026-08-04T13:25:10.728876Z", + "shell.execute_reply": "2026-08-04T13:25:10.728441Z" } }, "outputs": [ @@ -803,7 +809,7 @@ }, { "cell_type": "markdown", - "id": "e48a7ad6", + "id": "58751e96", "metadata": {}, "source": [ "Ethanol has **two rotatable bonds** — C–C and C–O. The C–H bonds are terminal\n", @@ -827,13 +833,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "0ce4a4ca", + "id": "052f587b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.583057Z", - "iopub.status.busy": "2026-08-03T06:25:46.582955Z", - "iopub.status.idle": "2026-08-03T06:25:46.604512Z", - "shell.execute_reply": "2026-08-03T06:25:46.604134Z" + "iopub.execute_input": "2026-08-04T13:25:10.729914Z", + "iopub.status.busy": "2026-08-04T13:25:10.729815Z", + "iopub.status.idle": "2026-08-04T13:25:10.752588Z", + "shell.execute_reply": "2026-08-04T13:25:10.752122Z" } }, "outputs": [ @@ -972,13 +978,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "2877f6bf", + "id": "c9511d66", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.605362Z", - "iopub.status.busy": "2026-08-03T06:25:46.605280Z", - "iopub.status.idle": "2026-08-03T06:25:46.607995Z", - "shell.execute_reply": "2026-08-03T06:25:46.607666Z" + "iopub.execute_input": "2026-08-04T13:25:10.753589Z", + "iopub.status.busy": "2026-08-04T13:25:10.753490Z", + "iopub.status.idle": "2026-08-04T13:25:10.756795Z", + "shell.execute_reply": "2026-08-04T13:25:10.756357Z" } }, "outputs": [ @@ -999,7 +1005,7 @@ }, { "cell_type": "markdown", - "id": "4f3ca2a1", + "id": "f41eb49b", "metadata": {}, "source": [ "Every cut splits nine atoms into pieces that still total nine — mass is\n", @@ -1021,13 +1027,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "d24c1005", + "id": "89728ad2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.608701Z", - "iopub.status.busy": "2026-08-03T06:25:46.608619Z", - "iopub.status.idle": "2026-08-03T06:25:46.613125Z", - "shell.execute_reply": "2026-08-03T06:25:46.612800Z" + "iopub.execute_input": "2026-08-04T13:25:10.758018Z", + "iopub.status.busy": "2026-08-04T13:25:10.757918Z", + "iopub.status.idle": "2026-08-04T13:25:10.763164Z", + "shell.execute_reply": "2026-08-04T13:25:10.762773Z" } }, "outputs": [ @@ -1099,7 +1105,7 @@ }, { "cell_type": "markdown", - "id": "acc96aec", + "id": "adf3253f", "metadata": {}, "source": [ "Ring bonds are not cut, because one cut cannot separate a ring — the molecule\n", @@ -1120,13 +1126,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "f332f576", + "id": "85352c19", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.613828Z", - "iopub.status.busy": "2026-08-03T06:25:46.613750Z", - "iopub.status.idle": "2026-08-03T06:25:46.626162Z", - "shell.execute_reply": "2026-08-03T06:25:46.625732Z" + "iopub.execute_input": "2026-08-04T13:25:10.764366Z", + "iopub.status.busy": "2026-08-04T13:25:10.764261Z", + "iopub.status.idle": "2026-08-04T13:25:10.777621Z", + "shell.execute_reply": "2026-08-04T13:25:10.777257Z" } }, "outputs": [ @@ -1210,13 +1216,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "24427ff6", + "id": "123bee5c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.627012Z", - "iopub.status.busy": "2026-08-03T06:25:46.626929Z", - "iopub.status.idle": "2026-08-03T06:25:46.629018Z", - "shell.execute_reply": "2026-08-03T06:25:46.628715Z" + "iopub.execute_input": "2026-08-04T13:25:10.778732Z", + "iopub.status.busy": "2026-08-04T13:25:10.778631Z", + "iopub.status.idle": "2026-08-04T13:25:10.781050Z", + "shell.execute_reply": "2026-08-04T13:25:10.780642Z" } }, "outputs": [ @@ -1243,7 +1249,7 @@ }, { "cell_type": "markdown", - "id": "21be27da", + "id": "8c076544", "metadata": {}, "source": [ "The translated copy of water is recognised: matching is on the reduced formula\n", @@ -1259,13 +1265,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "6449a45d", + "id": "27026db2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.629880Z", - "iopub.status.busy": "2026-08-03T06:25:46.629802Z", - "iopub.status.idle": "2026-08-03T06:25:46.765356Z", - "shell.execute_reply": "2026-08-03T06:25:46.764889Z" + "iopub.execute_input": "2026-08-04T13:25:10.782062Z", + "iopub.status.busy": "2026-08-04T13:25:10.781892Z", + "iopub.status.idle": "2026-08-04T13:25:10.920916Z", + "shell.execute_reply": "2026-08-04T13:25:10.920411Z" } }, "outputs": [ @@ -1302,7 +1308,7 @@ }, { "cell_type": "markdown", - "id": "a1886d5c", + "id": "317800df", "metadata": {}, "source": [ "Crude, and it needs nothing extra. With `py3Dmol` installed the default backend\n", @@ -1319,13 +1325,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "54b5d2bc", + "id": "44e85339", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.766299Z", - "iopub.status.busy": "2026-08-03T06:25:46.766197Z", - "iopub.status.idle": "2026-08-03T06:25:46.810935Z", - "shell.execute_reply": "2026-08-03T06:25:46.810527Z" + "iopub.execute_input": "2026-08-04T13:25:10.921936Z", + "iopub.status.busy": "2026-08-04T13:25:10.921832Z", + "iopub.status.idle": "2026-08-04T13:25:10.936651Z", + "shell.execute_reply": "2026-08-04T13:25:10.936210Z" } }, "outputs": [ @@ -1419,7 +1425,7 @@ }, { "cell_type": "markdown", - "id": "4be79d5c", + "id": "5c4a73fc", "metadata": {}, "source": [ "QC, composition descriptors and even a calculator run unmodified. EMT is\n", @@ -1435,13 +1441,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "2c0fb239", + "id": "0577cad5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.811765Z", - "iopub.status.busy": "2026-08-03T06:25:46.811675Z", - "iopub.status.idle": "2026-08-03T06:25:46.817755Z", - "shell.execute_reply": "2026-08-03T06:25:46.817374Z" + "iopub.execute_input": "2026-08-04T13:25:10.937619Z", + "iopub.status.busy": "2026-08-04T13:25:10.937476Z", + "iopub.status.idle": "2026-08-04T13:25:10.943771Z", + "shell.execute_reply": "2026-08-04T13:25:10.943335Z" } }, "outputs": [ @@ -1462,7 +1468,7 @@ }, { "cell_type": "markdown", - "id": "544bcf11", + "id": "7a54adb1", "metadata": {}, "source": [ "```{seealso}\n", @@ -1474,7 +1480,7 @@ }, { "cell_type": "markdown", - "id": "60cc9aa0", + "id": "bcd9c99a", "metadata": {}, "source": [ "## Are the bonds the right length?\n", @@ -1489,13 +1495,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "7b3612fc", + "id": "a88650eb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.818515Z", - "iopub.status.busy": "2026-08-03T06:25:46.818424Z", - "iopub.status.idle": "2026-08-03T06:25:46.835286Z", - "shell.execute_reply": "2026-08-03T06:25:46.834900Z" + "iopub.execute_input": "2026-08-04T13:25:10.944609Z", + "iopub.status.busy": "2026-08-04T13:25:10.944505Z", + "iopub.status.idle": "2026-08-04T13:25:10.961821Z", + "shell.execute_reply": "2026-08-04T13:25:10.961406Z" } }, "outputs": [ @@ -1595,7 +1601,7 @@ }, { "cell_type": "markdown", - "id": "cb08759c", + "id": "8b20d350", "metadata": {}, "source": [ "Water comes out at **zero** deviation, because it was built at exactly the\n", @@ -1617,7 +1623,7 @@ }, { "cell_type": "markdown", - "id": "bd273083", + "id": "c7f6e3e3", "metadata": {}, "source": [ "## Two questions that both mean \"the same molecule\"\n", @@ -1633,13 +1639,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "b2f8e4d7", + "id": "5ed96233", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.836047Z", - "iopub.status.busy": "2026-08-03T06:25:46.835960Z", - "iopub.status.idle": "2026-08-03T06:25:46.846858Z", - "shell.execute_reply": "2026-08-03T06:25:46.846460Z" + "iopub.execute_input": "2026-08-04T13:25:10.964086Z", + "iopub.status.busy": "2026-08-04T13:25:10.963979Z", + "iopub.status.idle": "2026-08-04T13:25:10.975773Z", + "shell.execute_reply": "2026-08-04T13:25:10.975264Z" } }, "outputs": [ @@ -1669,7 +1675,7 @@ }, { "cell_type": "markdown", - "id": "96791df0", + "id": "1ea958b2", "metadata": {}, "source": [ "**Geometry says two molecules. Topology says one.**\n", @@ -1686,7 +1692,7 @@ }, { "cell_type": "markdown", - "id": "b9f829ca", + "id": "ff6c3e35", "metadata": {}, "source": [ "## Which bond breaks first\n", @@ -1700,13 +1706,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "a3cae48f", + "id": "d1ae6c2c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.847660Z", - "iopub.status.busy": "2026-08-03T06:25:46.847575Z", - "iopub.status.idle": "2026-08-03T06:25:46.870551Z", - "shell.execute_reply": "2026-08-03T06:25:46.870160Z" + "iopub.execute_input": "2026-08-04T13:25:10.976769Z", + "iopub.status.busy": "2026-08-04T13:25:10.976608Z", + "iopub.status.idle": "2026-08-04T13:25:11.001033Z", + "shell.execute_reply": "2026-08-04T13:25:11.000491Z" } }, "outputs": [ @@ -1829,7 +1835,7 @@ }, { "cell_type": "markdown", - "id": "0f95875c", + "id": "6158b35a", "metadata": {}, "source": [ "Eight bonds, one row each, every one named. With the placeholder energies above\n", @@ -1854,7 +1860,7 @@ }, { "cell_type": "markdown", - "id": "4a83e78e", + "id": "4d1dc7e5", "metadata": {}, "source": [ "## What is actually on the molecule\n", @@ -1871,13 +1877,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "dd5dbd70", + "id": "bad10968", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.871388Z", - "iopub.status.busy": "2026-08-03T06:25:46.871294Z", - "iopub.status.idle": "2026-08-03T06:25:46.881592Z", - "shell.execute_reply": "2026-08-03T06:25:46.881225Z" + "iopub.execute_input": "2026-08-04T13:25:11.001961Z", + "iopub.status.busy": "2026-08-04T13:25:11.001854Z", + "iopub.status.idle": "2026-08-04T13:25:11.013567Z", + "shell.execute_reply": "2026-08-04T13:25:11.013090Z" } }, "outputs": [ @@ -1916,7 +1922,7 @@ }, { "cell_type": "markdown", - "id": "e2097e5e", + "id": "a7642c9e", "metadata": {}, "source": [ "Ethanol comes back as `[CH3];[OH]` — a methyl and a hydroxyl, which is what it\n", @@ -1939,7 +1945,7 @@ }, { "cell_type": "markdown", - "id": "a1ecc8ae", + "id": "bf8266ff", "metadata": {}, "source": [ "## Free energies, and the mode you trust least\n", @@ -1957,13 +1963,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "d487a5e0", + "id": "04874f9b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:25:46.882339Z", - "iopub.status.busy": "2026-08-03T06:25:46.882251Z", - "iopub.status.idle": "2026-08-03T06:25:46.892895Z", - "shell.execute_reply": "2026-08-03T06:25:46.892536Z" + "iopub.execute_input": "2026-08-04T13:25:11.014512Z", + "iopub.status.busy": "2026-08-04T13:25:11.014409Z", + "iopub.status.idle": "2026-08-04T13:25:11.026047Z", + "shell.execute_reply": "2026-08-04T13:25:11.025616Z" } }, "outputs": [ @@ -2042,7 +2048,7 @@ }, { "cell_type": "markdown", - "id": "9473de96", + "id": "4df9d027", "metadata": {}, "source": [ "Same molecule, same energy, one mode moved. The stiff case agrees to four\n", diff --git a/matverse_guide/docs/tutorials/screening.ipynb b/matverse_guide/docs/tutorials/screening.ipynb index 6485530..e91f44b 100644 --- a/matverse_guide/docs/tutorials/screening.ipynb +++ b/matverse_guide/docs/tutorials/screening.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "93cdf76a", + "id": "48107288", "metadata": {}, "source": [ "# Screening, end to end\n", @@ -26,13 +26,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "6122299e", + "id": "756ec53b", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:21.411284Z", - "iopub.status.busy": "2026-08-03T06:21:21.411190Z", - "iopub.status.idle": "2026-08-03T06:21:24.437964Z", - "shell.execute_reply": "2026-08-03T06:21:24.437517Z" + "iopub.execute_input": "2026-08-04T13:19:27.305439Z", + "iopub.status.busy": "2026-08-04T13:19:27.305337Z", + "iopub.status.idle": "2026-08-04T13:19:35.332817Z", + "shell.execute_reply": "2026-08-04T13:19:35.332268Z" } }, "outputs": [ @@ -40,20 +40,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -63,7 +69,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -78,7 +84,7 @@ }, { "cell_type": "markdown", - "id": "56d728c2", + "id": "8c12830d", "metadata": {}, "source": [ "## Build a dataset\n", @@ -90,13 +96,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "d557ddb4", + "id": "00a02a97", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.439306Z", - "iopub.status.busy": "2026-08-03T06:21:24.438960Z", - "iopub.status.idle": "2026-08-03T06:21:24.487551Z", - "shell.execute_reply": "2026-08-03T06:21:24.487129Z" + "iopub.execute_input": "2026-08-04T13:19:35.334872Z", + "iopub.status.busy": "2026-08-04T13:19:35.334334Z", + "iopub.status.idle": "2026-08-04T13:19:35.349980Z", + "shell.execute_reply": "2026-08-04T13:19:35.349238Z" } }, "outputs": [ @@ -164,7 +170,7 @@ }, { "cell_type": "markdown", - "id": "33fd0404", + "id": "49c85e06", "metadata": {}, "source": [ "The candidates are L1₂ orderings of the same three elements, plus a B2 AlNi.\n", @@ -175,13 +181,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "8d077ca5", + "id": "0873a975", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.488432Z", - "iopub.status.busy": "2026-08-03T06:21:24.488335Z", - "iopub.status.idle": "2026-08-03T06:21:24.491216Z", - "shell.execute_reply": "2026-08-03T06:21:24.490895Z" + "iopub.execute_input": "2026-08-04T13:19:35.351042Z", + "iopub.status.busy": "2026-08-04T13:19:35.350902Z", + "iopub.status.idle": "2026-08-04T13:19:35.355684Z", + "shell.execute_reply": "2026-08-04T13:19:35.354607Z" } }, "outputs": [], @@ -212,7 +218,7 @@ }, { "cell_type": "markdown", - "id": "08aab8af", + "id": "cce00f1d", "metadata": {}, "source": [ "Put the published elementals and the candidates into one object. Building it in\n", @@ -223,13 +229,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "a112b08c", + "id": "329f87e0", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.492010Z", - "iopub.status.busy": "2026-08-03T06:21:24.491923Z", - "iopub.status.idle": "2026-08-03T06:21:24.498924Z", - "shell.execute_reply": "2026-08-03T06:21:24.498431Z" + "iopub.execute_input": "2026-08-04T13:19:35.359158Z", + "iopub.status.busy": "2026-08-04T13:19:35.359021Z", + "iopub.status.idle": "2026-08-04T13:19:35.369548Z", + "shell.execute_reply": "2026-08-04T13:19:35.368985Z" } }, "outputs": [ @@ -255,7 +261,7 @@ }, { "cell_type": "markdown", - "id": "89484531", + "id": "ab0e3c5d", "metadata": {}, "source": [ "Seven materials, three elements. `X` is already the composition matrix and `var`\n", @@ -276,13 +282,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "0d83a3f2", + "id": "c881e9d6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.499835Z", - "iopub.status.busy": "2026-08-03T06:21:24.499729Z", - "iopub.status.idle": "2026-08-03T06:21:24.630154Z", - "shell.execute_reply": "2026-08-03T06:21:24.629723Z" + "iopub.execute_input": "2026-08-04T13:19:35.370671Z", + "iopub.status.busy": "2026-08-04T13:19:35.370545Z", + "iopub.status.idle": "2026-08-04T13:19:35.531112Z", + "shell.execute_reply": "2026-08-04T13:19:35.530691Z" } }, "outputs": [ @@ -384,7 +390,7 @@ }, { "cell_type": "markdown", - "id": "a3282bb5", + "id": "3874f652", "metadata": {}, "source": [ "`standardize` deposits two new structure variants rather than replacing the\n", @@ -394,13 +400,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "4a7b9276", + "id": "808c6887", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.631072Z", - "iopub.status.busy": "2026-08-03T06:21:24.630981Z", - "iopub.status.idle": "2026-08-03T06:21:24.633317Z", - "shell.execute_reply": "2026-08-03T06:21:24.632848Z" + "iopub.execute_input": "2026-08-04T13:19:35.532757Z", + "iopub.status.busy": "2026-08-04T13:19:35.532625Z", + "iopub.status.idle": "2026-08-04T13:19:35.536601Z", + "shell.execute_reply": "2026-08-04T13:19:35.535848Z" } }, "outputs": [ @@ -421,7 +427,7 @@ }, { "cell_type": "markdown", - "id": "8cf32cf3", + "id": "b78f5e5e", "metadata": {}, "source": [ "## Throw out what is broken\n", @@ -435,13 +441,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "3a760fde", + "id": "595080c2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.634266Z", - "iopub.status.busy": "2026-08-03T06:21:24.634182Z", - "iopub.status.idle": "2026-08-03T06:21:24.886385Z", - "shell.execute_reply": "2026-08-03T06:21:24.885952Z" + "iopub.execute_input": "2026-08-04T13:19:35.537797Z", + "iopub.status.busy": "2026-08-04T13:19:35.537675Z", + "iopub.status.idle": "2026-08-04T13:19:36.093771Z", + "shell.execute_reply": "2026-08-04T13:19:36.093330Z" } }, "outputs": [ @@ -558,13 +564,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "836ba74f", + "id": "42a0be31", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.887285Z", - "iopub.status.busy": "2026-08-03T06:21:24.887180Z", - "iopub.status.idle": "2026-08-03T06:21:24.893780Z", - "shell.execute_reply": "2026-08-03T06:21:24.893372Z" + "iopub.execute_input": "2026-08-04T13:19:36.095554Z", + "iopub.status.busy": "2026-08-04T13:19:36.095413Z", + "iopub.status.idle": "2026-08-04T13:19:36.104342Z", + "shell.execute_reply": "2026-08-04T13:19:36.103855Z" } }, "outputs": [ @@ -586,7 +592,7 @@ }, { "cell_type": "markdown", - "id": "1d85c894", + "id": "74b212a9", "metadata": {}, "source": [ "This is one of the few calls that returns instead of depositing, because AnnData\n", @@ -598,13 +604,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "933cd9b4", + "id": "1d6339e5", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.894649Z", - "iopub.status.busy": "2026-08-03T06:21:24.894553Z", - "iopub.status.idle": "2026-08-03T06:21:24.934136Z", - "shell.execute_reply": "2026-08-03T06:21:24.933526Z" + "iopub.execute_input": "2026-08-04T13:19:36.105578Z", + "iopub.status.busy": "2026-08-04T13:19:36.105457Z", + "iopub.status.idle": "2026-08-04T13:19:36.112386Z", + "shell.execute_reply": "2026-08-04T13:19:36.111642Z" } }, "outputs": [ @@ -631,7 +637,7 @@ }, { "cell_type": "markdown", - "id": "a6353ff6", + "id": "a3043683", "metadata": {}, "source": [ "`dedup` blocks on `(reduced formula, space group)` before running pymatgen's\n", @@ -645,13 +651,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "dac48998", + "id": "f878dcdb", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:24.935048Z", - "iopub.status.busy": "2026-08-03T06:21:24.934939Z", - "iopub.status.idle": "2026-08-03T06:21:25.161330Z", - "shell.execute_reply": "2026-08-03T06:21:25.160932Z" + "iopub.execute_input": "2026-08-04T13:19:36.113535Z", + "iopub.status.busy": "2026-08-04T13:19:36.113392Z", + "iopub.status.idle": "2026-08-04T13:19:36.858785Z", + "shell.execute_reply": "2026-08-04T13:19:36.858379Z" } }, "outputs": [ @@ -761,7 +767,7 @@ }, { "cell_type": "markdown", - "id": "f7f92dc7", + "id": "80d19de5", "metadata": {}, "source": [ "The relaxed geometry becomes its own variant, `relaxed_emt`, rather than\n", @@ -774,13 +780,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "f44bbc99", + "id": "e65177a1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:25.162285Z", - "iopub.status.busy": "2026-08-03T06:21:25.162190Z", - "iopub.status.idle": "2026-08-03T06:21:25.164425Z", - "shell.execute_reply": "2026-08-03T06:21:25.164102Z" + "iopub.execute_input": "2026-08-04T13:19:36.860102Z", + "iopub.status.busy": "2026-08-04T13:19:36.860003Z", + "iopub.status.idle": "2026-08-04T13:19:36.863530Z", + "shell.execute_reply": "2026-08-04T13:19:36.863197Z" } }, "outputs": [ @@ -812,7 +818,7 @@ }, { "cell_type": "markdown", - "id": "556a6550", + "id": "9b3c7782", "metadata": {}, "source": [ "`surrogate: True` and `license: 'LGPL-2.1'` are not decoration. The first is\n", @@ -826,13 +832,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "d4fb374d", + "id": "d6ca6e27", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:25.165321Z", - "iopub.status.busy": "2026-08-03T06:21:25.165230Z", - "iopub.status.idle": "2026-08-03T06:21:25.803484Z", - "shell.execute_reply": "2026-08-03T06:21:25.803054Z" + "iopub.execute_input": "2026-08-04T13:19:36.864648Z", + "iopub.status.busy": "2026-08-04T13:19:36.864557Z", + "iopub.status.idle": "2026-08-04T13:19:37.795959Z", + "shell.execute_reply": "2026-08-04T13:19:37.795473Z" } }, "outputs": [ @@ -942,7 +948,7 @@ }, { "cell_type": "markdown", - "id": "aece8062", + "id": "70bcfe2b", "metadata": {}, "source": [ "```{warning}\n", @@ -971,13 +977,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "328a44c1", + "id": "ace22dd0", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:25.804416Z", - "iopub.status.busy": "2026-08-03T06:21:25.804318Z", - "iopub.status.idle": "2026-08-03T06:21:25.954002Z", - "shell.execute_reply": "2026-08-03T06:21:25.953559Z" + "iopub.execute_input": "2026-08-04T13:19:37.797142Z", + "iopub.status.busy": "2026-08-04T13:19:37.797036Z", + "iopub.status.idle": "2026-08-04T13:19:38.125026Z", + "shell.execute_reply": "2026-08-04T13:19:38.124556Z" } }, "outputs": [ @@ -1003,7 +1009,7 @@ }, { "cell_type": "markdown", - "id": "92a2fe9f", + "id": "b0384eac", "metadata": {}, "source": [ "The hull plot labels itself when the hull is closed, because a convex hull drawn\n", @@ -1018,13 +1024,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "e0d5fc9f", + "id": "29d9bd25", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:25.954895Z", - "iopub.status.busy": "2026-08-03T06:21:25.954803Z", - "iopub.status.idle": "2026-08-03T06:21:25.957010Z", - "shell.execute_reply": "2026-08-03T06:21:25.956680Z" + "iopub.execute_input": "2026-08-04T13:19:38.126200Z", + "iopub.status.busy": "2026-08-04T13:19:38.126095Z", + "iopub.status.idle": "2026-08-04T13:19:38.128675Z", + "shell.execute_reply": "2026-08-04T13:19:38.128237Z" } }, "outputs": [ @@ -1045,7 +1051,7 @@ }, { "cell_type": "markdown", - "id": "e5721b44", + "id": "52c790f2", "metadata": {}, "source": [ "The object records which kind of number you have, so a later reader does not\n", @@ -1077,13 +1083,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "6c2133ea", + "id": "433ca1af", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:25.957736Z", - "iopub.status.busy": "2026-08-03T06:21:25.957656Z", - "iopub.status.idle": "2026-08-03T06:21:26.124216Z", - "shell.execute_reply": "2026-08-03T06:21:26.123561Z" + "iopub.execute_input": "2026-08-04T13:19:38.129758Z", + "iopub.status.busy": "2026-08-04T13:19:38.129661Z", + "iopub.status.idle": "2026-08-04T13:19:38.481110Z", + "shell.execute_reply": "2026-08-04T13:19:38.480702Z" } }, "outputs": [ @@ -1182,7 +1188,7 @@ }, { "cell_type": "markdown", - "id": "ed5d2df1", + "id": "536ab6ce", "metadata": {}, "source": [ "Three rows, three different answers, none of them small.\n", @@ -1211,13 +1217,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "bea9b529", + "id": "796a13cc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.125294Z", - "iopub.status.busy": "2026-08-03T06:21:26.125169Z", - "iopub.status.idle": "2026-08-03T06:21:26.127496Z", - "shell.execute_reply": "2026-08-03T06:21:26.127168Z" + "iopub.execute_input": "2026-08-04T13:19:38.482088Z", + "iopub.status.busy": "2026-08-04T13:19:38.481990Z", + "iopub.status.idle": "2026-08-04T13:19:38.484322Z", + "shell.execute_reply": "2026-08-04T13:19:38.484003Z" } }, "outputs": [ @@ -1245,7 +1251,7 @@ }, { "cell_type": "markdown", - "id": "89bfefa7", + "id": "a262d933", "metadata": {}, "source": [ "### What it would cost, and whether you could get it\n", @@ -1257,13 +1263,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "3ccc8111", + "id": "c118e859", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.128225Z", - "iopub.status.busy": "2026-08-03T06:21:26.128140Z", - "iopub.status.idle": "2026-08-03T06:21:26.626209Z", - "shell.execute_reply": "2026-08-03T06:21:26.625783Z" + "iopub.execute_input": "2026-08-04T13:19:38.485168Z", + "iopub.status.busy": "2026-08-04T13:19:38.485080Z", + "iopub.status.idle": "2026-08-04T13:19:39.371998Z", + "shell.execute_reply": "2026-08-04T13:19:39.371502Z" } }, "outputs": [ @@ -1346,7 +1352,7 @@ }, { "cell_type": "markdown", - "id": "a91d692c", + "id": "1df890e8", "metadata": {}, "source": [ "`cost_per_kg` is raw-material cost from elemental prices — not synthesis, not\n", @@ -1366,13 +1372,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "ae35e3b8", + "id": "ab4fa43a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.627218Z", - "iopub.status.busy": "2026-08-03T06:21:26.627120Z", - "iopub.status.idle": "2026-08-03T06:21:26.653765Z", - "shell.execute_reply": "2026-08-03T06:21:26.653410Z" + "iopub.execute_input": "2026-08-04T13:19:39.373194Z", + "iopub.status.busy": "2026-08-04T13:19:39.373091Z", + "iopub.status.idle": "2026-08-04T13:19:39.428821Z", + "shell.execute_reply": "2026-08-04T13:19:39.428435Z" } }, "outputs": [ @@ -1394,7 +1400,7 @@ }, { "cell_type": "markdown", - "id": "085ba449", + "id": "bcf830ba", "metadata": {}, "source": [ "And since the diffraction pattern is on the same grid convention, a neutron\n", @@ -1405,7 +1411,7 @@ }, { "cell_type": "markdown", - "id": "a75ab999", + "id": "bc3f4acf", "metadata": {}, "source": [ "### Stable, and stable *when*\n", @@ -1418,13 +1424,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "e425e292", + "id": "9719925d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.654595Z", - "iopub.status.busy": "2026-08-03T06:21:26.654507Z", - "iopub.status.idle": "2026-08-03T06:21:26.738558Z", - "shell.execute_reply": "2026-08-03T06:21:26.738167Z" + "iopub.execute_input": "2026-08-04T13:19:39.430611Z", + "iopub.status.busy": "2026-08-04T13:19:39.430482Z", + "iopub.status.idle": "2026-08-04T13:19:39.532740Z", + "shell.execute_reply": "2026-08-04T13:19:39.532018Z" } }, "outputs": [ @@ -1518,7 +1524,7 @@ }, { "cell_type": "markdown", - "id": "fa6c39d0", + "id": "73afe57f", "metadata": {}, "source": [ "`chempot_window` is the extent of the region in chemical potential space where\n", @@ -1550,13 +1556,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "ac79090d", + "id": "67d81663", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.739394Z", - "iopub.status.busy": "2026-08-03T06:21:26.739307Z", - "iopub.status.idle": "2026-08-03T06:21:26.741688Z", - "shell.execute_reply": "2026-08-03T06:21:26.741377Z" + "iopub.execute_input": "2026-08-04T13:19:39.533951Z", + "iopub.status.busy": "2026-08-04T13:19:39.533833Z", + "iopub.status.idle": "2026-08-04T13:19:39.537816Z", + "shell.execute_reply": "2026-08-04T13:19:39.537299Z" } }, "outputs": [ @@ -1578,7 +1584,7 @@ }, { "cell_type": "markdown", - "id": "fbb2810c", + "id": "6ed4b248", "metadata": {}, "source": [ "It refuses without a key, and the message says why rather than returning zeros.\n", @@ -1591,7 +1597,7 @@ }, { "cell_type": "markdown", - "id": "83415dce", + "id": "79af11b2", "metadata": {}, "source": [ "Ask for something light and not too far above the hull — two criteria that pull\n", @@ -1601,13 +1607,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "06581895", + "id": "133c152f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.742439Z", - "iopub.status.busy": "2026-08-03T06:21:26.742355Z", - "iopub.status.idle": "2026-08-03T06:21:26.744920Z", - "shell.execute_reply": "2026-08-03T06:21:26.744595Z" + "iopub.execute_input": "2026-08-04T13:19:39.539246Z", + "iopub.status.busy": "2026-08-04T13:19:39.539116Z", + "iopub.status.idle": "2026-08-04T13:19:39.543177Z", + "shell.execute_reply": "2026-08-04T13:19:39.542626Z" } }, "outputs": [ @@ -1633,13 +1639,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "2f0f711a", + "id": "df3dbaf2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.745585Z", - "iopub.status.busy": "2026-08-03T06:21:26.745503Z", - "iopub.status.idle": "2026-08-03T06:21:26.750149Z", - "shell.execute_reply": "2026-08-03T06:21:26.749813Z" + "iopub.execute_input": "2026-08-04T13:19:39.544134Z", + "iopub.status.busy": "2026-08-04T13:19:39.544030Z", + "iopub.status.idle": "2026-08-04T13:19:39.550531Z", + "shell.execute_reply": "2026-08-04T13:19:39.549915Z" } }, "outputs": [ @@ -1747,13 +1753,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "bed57d97", + "id": "40186e8d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.750827Z", - "iopub.status.busy": "2026-08-03T06:21:26.750744Z", - "iopub.status.idle": "2026-08-03T06:21:26.881571Z", - "shell.execute_reply": "2026-08-03T06:21:26.881148Z" + "iopub.execute_input": "2026-08-04T13:19:39.551668Z", + "iopub.status.busy": "2026-08-04T13:19:39.551534Z", + "iopub.status.idle": "2026-08-04T13:19:39.919675Z", + "shell.execute_reply": "2026-08-04T13:19:39.918954Z" } }, "outputs": [ @@ -1793,7 +1799,7 @@ }, { "cell_type": "markdown", - "id": "33c85a5a", + "id": "cf7bd9fd", "metadata": {}, "source": [ "Cu and Ni sit at zero and are still grey — they failed on density, not on\n", @@ -1804,7 +1810,7 @@ }, { "cell_type": "markdown", - "id": "a7d0b5ca", + "id": "d04a873c", "metadata": {}, "source": [ "The screen deposits a boolean column and the criteria that produced it. It does\n", @@ -1821,13 +1827,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "0548854e", + "id": "dd9ed6ee", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.882435Z", - "iopub.status.busy": "2026-08-03T06:21:26.882346Z", - "iopub.status.idle": "2026-08-03T06:21:26.888596Z", - "shell.execute_reply": "2026-08-03T06:21:26.888235Z" + "iopub.execute_input": "2026-08-04T13:19:39.920923Z", + "iopub.status.busy": "2026-08-04T13:19:39.920784Z", + "iopub.status.idle": "2026-08-04T13:19:39.929468Z", + "shell.execute_reply": "2026-08-04T13:19:39.928985Z" } }, "outputs": [ @@ -1944,7 +1950,7 @@ }, { "cell_type": "markdown", - "id": "c786a489", + "id": "112df8b3", "metadata": {}, "source": [ "`pareto_rank` keeps the second-best trade-offs reachable instead of discarding\n", @@ -1956,13 +1962,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "729d139f", + "id": "47824914", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.889555Z", - "iopub.status.busy": "2026-08-03T06:21:26.889468Z", - "iopub.status.idle": "2026-08-03T06:21:26.894562Z", - "shell.execute_reply": "2026-08-03T06:21:26.894211Z" + "iopub.execute_input": "2026-08-04T13:19:39.930637Z", + "iopub.status.busy": "2026-08-04T13:19:39.930519Z", + "iopub.status.idle": "2026-08-04T13:19:39.937068Z", + "shell.execute_reply": "2026-08-04T13:19:39.936631Z" } }, "outputs": [ @@ -2062,7 +2068,7 @@ }, { "cell_type": "markdown", - "id": "3858c959", + "id": "04b5b2af", "metadata": {}, "source": [ "## Is the reaction downhill?\n", @@ -2075,13 +2081,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "4ac41c8e", + "id": "86dbcd52", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.895331Z", - "iopub.status.busy": "2026-08-03T06:21:26.895251Z", - "iopub.status.idle": "2026-08-03T06:21:26.898547Z", - "shell.execute_reply": "2026-08-03T06:21:26.898188Z" + "iopub.execute_input": "2026-08-04T13:19:39.940179Z", + "iopub.status.busy": "2026-08-04T13:19:39.940045Z", + "iopub.status.idle": "2026-08-04T13:19:39.947663Z", + "shell.execute_reply": "2026-08-04T13:19:39.945328Z" } }, "outputs": [ @@ -2108,7 +2114,7 @@ }, { "cell_type": "markdown", - "id": "671d91d4", + "id": "1464bc20", "metadata": {}, "source": [ "`favourable: False` and a positive energy — EMT again saying no intermetallic is\n", @@ -2120,13 +2126,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "dbbbf8ed", + "id": "4b39d7db", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:26.899263Z", - "iopub.status.busy": "2026-08-03T06:21:26.899175Z", - "iopub.status.idle": "2026-08-03T06:21:27.016440Z", - "shell.execute_reply": "2026-08-03T06:21:27.016040Z" + "iopub.execute_input": "2026-08-04T13:19:39.948778Z", + "iopub.status.busy": "2026-08-04T13:19:39.948664Z", + "iopub.status.idle": "2026-08-04T13:19:40.075309Z", + "shell.execute_reply": "2026-08-04T13:19:40.074826Z" } }, "outputs": [ @@ -2163,7 +2169,7 @@ }, { "cell_type": "markdown", - "id": "0fd1dda9", + "id": "c70b5710", "metadata": {}, "source": [ "## What the object remembers" @@ -2172,13 +2178,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "e3fbd0c9", + "id": "11290e35", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:27.017657Z", - "iopub.status.busy": "2026-08-03T06:21:27.017565Z", - "iopub.status.idle": "2026-08-03T06:21:27.019784Z", - "shell.execute_reply": "2026-08-03T06:21:27.019341Z" + "iopub.execute_input": "2026-08-04T13:19:40.076652Z", + "iopub.status.busy": "2026-08-04T13:19:40.076520Z", + "iopub.status.idle": "2026-08-04T13:19:40.079835Z", + "shell.execute_reply": "2026-08-04T13:19:40.079186Z" } }, "outputs": [ @@ -2209,13 +2215,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "973dfa2e", + "id": "850190de", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:21:27.020605Z", - "iopub.status.busy": "2026-08-03T06:21:27.020519Z", - "iopub.status.idle": "2026-08-03T06:21:27.198024Z", - "shell.execute_reply": "2026-08-03T06:21:27.197487Z" + "iopub.execute_input": "2026-08-04T13:19:40.081452Z", + "iopub.status.busy": "2026-08-04T13:19:40.081334Z", + "iopub.status.idle": "2026-08-04T13:19:40.269137Z", + "shell.execute_reply": "2026-08-04T13:19:40.267772Z" } }, "outputs": [ @@ -2241,7 +2247,7 @@ }, { "cell_type": "markdown", - "id": "fceefcd2", + "id": "e65464f1", "metadata": {}, "source": [ "Parameters are recorded with each call, so the history replays as code rather\n", diff --git a/matverse_guide/docs/tutorials/structure_and_bands.ipynb b/matverse_guide/docs/tutorials/structure_and_bands.ipynb index 681b24f..74e2fcb 100644 --- a/matverse_guide/docs/tutorials/structure_and_bands.ipynb +++ b/matverse_guide/docs/tutorials/structure_and_bands.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "cbd4fd80", + "id": "0b4306fe", "metadata": {}, "source": [ "# Local environments and electronic structure\n", @@ -26,13 +26,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "2e0f6bd0", + "id": "e0637239", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:27.513279Z", - "iopub.status.busy": "2026-08-03T06:24:27.513186Z", - "iopub.status.idle": "2026-08-03T06:24:30.740927Z", - "shell.execute_reply": "2026-08-03T06:24:30.740484Z" + "iopub.execute_input": "2026-08-04T13:23:28.471617Z", + "iopub.status.busy": "2026-08-04T13:23:28.471535Z", + "iopub.status.idle": "2026-08-04T13:23:34.290982Z", + "shell.execute_reply": "2026-08-04T13:23:34.290448Z" } }, "outputs": [ @@ -40,20 +40,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -63,7 +69,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -79,7 +85,7 @@ }, { "cell_type": "markdown", - "id": "b104b51b", + "id": "ff3650f2", "metadata": {}, "source": [ "That report is the point of `mv.pl.set_style` doing more than set rcParams:\n", @@ -98,13 +104,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "54df3730", + "id": "6c8f8e12", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:30.742060Z", - "iopub.status.busy": "2026-08-03T06:24:30.741769Z", - "iopub.status.idle": "2026-08-03T06:24:30.825517Z", - "shell.execute_reply": "2026-08-03T06:24:30.825015Z" + "iopub.execute_input": "2026-08-04T13:23:34.292784Z", + "iopub.status.busy": "2026-08-04T13:23:34.292325Z", + "iopub.status.idle": "2026-08-04T13:23:34.404978Z", + "shell.execute_reply": "2026-08-04T13:23:34.404408Z" } }, "outputs": [ @@ -166,7 +172,7 @@ }, { "cell_type": "markdown", - "id": "0193a88b", + "id": "87c73468", "metadata": {}, "source": [ "## Coordination: the sites axis again\n", @@ -178,13 +184,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "77195761", + "id": "8a085a1c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:30.826582Z", - "iopub.status.busy": "2026-08-03T06:24:30.826418Z", - "iopub.status.idle": "2026-08-03T06:24:31.597348Z", - "shell.execute_reply": "2026-08-03T06:24:31.596899Z" + "iopub.execute_input": "2026-08-04T13:23:34.406368Z", + "iopub.status.busy": "2026-08-04T13:23:34.406227Z", + "iopub.status.idle": "2026-08-04T13:23:35.424829Z", + "shell.execute_reply": "2026-08-04T13:23:35.424383Z" } }, "outputs": [ @@ -214,7 +220,7 @@ }, { "cell_type": "markdown", - "id": "242098de", + "id": "a8abbc5f", "metadata": {}, "source": [ "**Li 6, Fe 6, P 4, O 4** — the published olivine coordination, recovered from\n", @@ -229,13 +235,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "298fa4b6", + "id": "0cd51811", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:31.598279Z", - "iopub.status.busy": "2026-08-03T06:24:31.598172Z", - "iopub.status.idle": "2026-08-03T06:24:31.600394Z", - "shell.execute_reply": "2026-08-03T06:24:31.600069Z" + "iopub.execute_input": "2026-08-04T13:23:35.425956Z", + "iopub.status.busy": "2026-08-04T13:23:35.425812Z", + "iopub.status.idle": "2026-08-04T13:23:35.429474Z", + "shell.execute_reply": "2026-08-04T13:23:35.428626Z" } }, "outputs": [ @@ -261,13 +267,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "8521bcc0", + "id": "8d20ff6a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:31.601134Z", - "iopub.status.busy": "2026-08-03T06:24:31.600995Z", - "iopub.status.idle": "2026-08-03T06:24:31.653681Z", - "shell.execute_reply": "2026-08-03T06:24:31.653257Z" + "iopub.execute_input": "2026-08-04T13:23:35.430720Z", + "iopub.status.busy": "2026-08-04T13:23:35.430592Z", + "iopub.status.idle": "2026-08-04T13:23:35.489924Z", + "shell.execute_reply": "2026-08-04T13:23:35.488594Z" } }, "outputs": [ @@ -354,7 +360,7 @@ }, { "cell_type": "markdown", - "id": "3bf70b8b", + "id": "dd5bf332", "metadata": {}, "source": [ "## A number is not a shape\n", @@ -369,13 +375,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "90642d2b", + "id": "10beb6d2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:31.654535Z", - "iopub.status.busy": "2026-08-03T06:24:31.654447Z", - "iopub.status.idle": "2026-08-03T06:24:32.363537Z", - "shell.execute_reply": "2026-08-03T06:24:32.363113Z" + "iopub.execute_input": "2026-08-04T13:23:35.491191Z", + "iopub.status.busy": "2026-08-04T13:23:35.491055Z", + "iopub.status.idle": "2026-08-04T13:23:36.213860Z", + "shell.execute_reply": "2026-08-04T13:23:36.213430Z" } }, "outputs": [ @@ -512,13 +518,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "80d81c37", + "id": "85df05c8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:32.364450Z", - "iopub.status.busy": "2026-08-03T06:24:32.364364Z", - "iopub.status.idle": "2026-08-03T06:24:32.367797Z", - "shell.execute_reply": "2026-08-03T06:24:32.367449Z" + "iopub.execute_input": "2026-08-04T13:23:36.214874Z", + "iopub.status.busy": "2026-08-04T13:23:36.214769Z", + "iopub.status.idle": "2026-08-04T13:23:36.219382Z", + "shell.execute_reply": "2026-08-04T13:23:36.218874Z" } }, "outputs": [ @@ -545,7 +551,7 @@ }, { "cell_type": "markdown", - "id": "5b43c757", + "id": "2e42789a", "metadata": {}, "source": [ "This is the structural story of an olivine cathode, in one column.\n", @@ -562,13 +568,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "835cdd8e", + "id": "83abf95d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:32.368482Z", - "iopub.status.busy": "2026-08-03T06:24:32.368400Z", - "iopub.status.idle": "2026-08-03T06:24:32.462540Z", - "shell.execute_reply": "2026-08-03T06:24:32.462136Z" + "iopub.execute_input": "2026-08-04T13:23:36.220386Z", + "iopub.status.busy": "2026-08-04T13:23:36.220229Z", + "iopub.status.idle": "2026-08-04T13:23:36.321738Z", + "shell.execute_reply": "2026-08-04T13:23:36.321323Z" } }, "outputs": [ @@ -611,7 +617,7 @@ }, { "cell_type": "markdown", - "id": "3c22a419", + "id": "676d7b1f", "metadata": {}, "source": [ "## The bond network belongs in `obsp`\n", @@ -624,13 +630,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "fc43b753", + "id": "613421f8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:32.463398Z", - "iopub.status.busy": "2026-08-03T06:24:32.463308Z", - "iopub.status.idle": "2026-08-03T06:24:32.621902Z", - "shell.execute_reply": "2026-08-03T06:24:32.621500Z" + "iopub.execute_input": "2026-08-04T13:23:36.323130Z", + "iopub.status.busy": "2026-08-04T13:23:36.323022Z", + "iopub.status.idle": "2026-08-04T13:23:36.487431Z", + "shell.execute_reply": "2026-08-04T13:23:36.486984Z" } }, "outputs": [ @@ -654,13 +660,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "8c82b8ce", + "id": "707bed1d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:32.622739Z", - "iopub.status.busy": "2026-08-03T06:24:32.622650Z", - "iopub.status.idle": "2026-08-03T06:24:32.625197Z", - "shell.execute_reply": "2026-08-03T06:24:32.624875Z" + "iopub.execute_input": "2026-08-04T13:23:36.488658Z", + "iopub.status.busy": "2026-08-04T13:23:36.488398Z", + "iopub.status.idle": "2026-08-04T13:23:36.491667Z", + "shell.execute_reply": "2026-08-04T13:23:36.491278Z" } }, "outputs": [ @@ -682,7 +688,7 @@ }, { "cell_type": "markdown", - "id": "4d83ca03", + "id": "bdb20000", "metadata": {}, "source": [ "The degree of the graph is the coordination number, which it had better be.\n", @@ -699,13 +705,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "83725beb", + "id": "286b9827", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:32.625889Z", - "iopub.status.busy": "2026-08-03T06:24:32.625808Z", - "iopub.status.idle": "2026-08-03T06:24:32.631437Z", - "shell.execute_reply": "2026-08-03T06:24:32.631116Z" + "iopub.execute_input": "2026-08-04T13:23:36.492825Z", + "iopub.status.busy": "2026-08-04T13:23:36.492691Z", + "iopub.status.idle": "2026-08-04T13:23:36.499231Z", + "shell.execute_reply": "2026-08-04T13:23:36.498745Z" } }, "outputs": [ @@ -773,13 +779,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "01199c73", + "id": "5bf195a2", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:32.632142Z", - "iopub.status.busy": "2026-08-03T06:24:32.632061Z", - "iopub.status.idle": "2026-08-03T06:24:32.636295Z", - "shell.execute_reply": "2026-08-03T06:24:32.635969Z" + "iopub.execute_input": "2026-08-04T13:23:36.500229Z", + "iopub.status.busy": "2026-08-04T13:23:36.500126Z", + "iopub.status.idle": "2026-08-04T13:23:36.505180Z", + "shell.execute_reply": "2026-08-04T13:23:36.504747Z" } }, "outputs": [ @@ -835,7 +841,7 @@ }, { "cell_type": "markdown", - "id": "0d1bc656", + "id": "b68716b9", "metadata": {}, "source": [ "`coordination_spread` is the one worth screening on: zero means every atom sits\n", @@ -852,13 +858,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "62379927", + "id": "608623a6", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:32.636983Z", - "iopub.status.busy": "2026-08-03T06:24:32.636903Z", - "iopub.status.idle": "2026-08-03T06:24:33.403015Z", - "shell.execute_reply": "2026-08-03T06:24:33.402532Z" + "iopub.execute_input": "2026-08-04T13:23:36.506086Z", + "iopub.status.busy": "2026-08-04T13:23:36.505989Z", + "iopub.status.idle": "2026-08-04T13:23:37.180416Z", + "shell.execute_reply": "2026-08-04T13:23:37.179889Z" } }, "outputs": [ @@ -924,7 +930,7 @@ }, { "cell_type": "markdown", - "id": "3714194d", + "id": "679aeb27", "metadata": {}, "source": [ "For an ion conductor this is the question. A framework whose octahedra share\n", @@ -960,13 +966,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "195dc33f", + "id": "368b7486", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.403967Z", - "iopub.status.busy": "2026-08-03T06:24:33.403877Z", - "iopub.status.idle": "2026-08-03T06:24:33.566582Z", - "shell.execute_reply": "2026-08-03T06:24:33.566120Z" + "iopub.execute_input": "2026-08-04T13:23:37.181666Z", + "iopub.status.busy": "2026-08-04T13:23:37.181480Z", + "iopub.status.idle": "2026-08-04T13:23:37.353740Z", + "shell.execute_reply": "2026-08-04T13:23:37.352634Z" } }, "outputs": [ @@ -1064,7 +1070,7 @@ }, { "cell_type": "markdown", - "id": "275fbb93", + "id": "fd9954a5", "metadata": {}, "source": [ "Graphite 2D, diamond 3D, MoS2 2D — and `n_components` counts two layers per\n", @@ -1079,13 +1085,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "d29da94d", + "id": "7ae7f360", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.567484Z", - "iopub.status.busy": "2026-08-03T06:24:33.567393Z", - "iopub.status.idle": "2026-08-03T06:24:33.571802Z", - "shell.execute_reply": "2026-08-03T06:24:33.571443Z" + "iopub.execute_input": "2026-08-04T13:23:37.354855Z", + "iopub.status.busy": "2026-08-04T13:23:37.354717Z", + "iopub.status.idle": "2026-08-04T13:23:37.360197Z", + "shell.execute_reply": "2026-08-04T13:23:37.359699Z" } }, "outputs": [ @@ -1157,7 +1163,7 @@ }, { "cell_type": "markdown", - "id": "077acc01", + "id": "98ee029c", "metadata": {}, "source": [ "`dimensionality_strategy` is recorded next to the answer for the same reason\n", @@ -1176,13 +1182,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "e889287d", + "id": "1e1c242a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.572537Z", - "iopub.status.busy": "2026-08-03T06:24:33.572456Z", - "iopub.status.idle": "2026-08-03T06:24:33.636034Z", - "shell.execute_reply": "2026-08-03T06:24:33.635627Z" + "iopub.execute_input": "2026-08-04T13:23:37.361421Z", + "iopub.status.busy": "2026-08-04T13:23:37.361281Z", + "iopub.status.idle": "2026-08-04T13:23:37.428793Z", + "shell.execute_reply": "2026-08-04T13:23:37.428295Z" } }, "outputs": [ @@ -1253,7 +1259,7 @@ }, { "cell_type": "markdown", - "id": "ad42f10f", + "id": "736944c2", "metadata": {}, "source": [ "Γ–X–W–K–L–U, the standard fcc path. Note that Cu and Al get **different numbers\n", @@ -1279,13 +1285,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "d5b30f62", + "id": "c83124c1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.637012Z", - "iopub.status.busy": "2026-08-03T06:24:33.636926Z", - "iopub.status.idle": "2026-08-03T06:24:33.679651Z", - "shell.execute_reply": "2026-08-03T06:24:33.679165Z" + "iopub.execute_input": "2026-08-04T13:23:37.430263Z", + "iopub.status.busy": "2026-08-04T13:23:37.430132Z", + "iopub.status.idle": "2026-08-04T13:23:37.473738Z", + "shell.execute_reply": "2026-08-04T13:23:37.473272Z" } }, "outputs": [ @@ -1333,7 +1339,7 @@ }, { "cell_type": "markdown", - "id": "d60be111", + "id": "6279b590", "metadata": {}, "source": [ "**Bands × k-points.** One row per band per spin per material, energies along a\n", @@ -1344,13 +1350,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "29642c16", + "id": "ee5cfde8", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.680583Z", - "iopub.status.busy": "2026-08-03T06:24:33.680438Z", - "iopub.status.idle": "2026-08-03T06:24:33.686930Z", - "shell.execute_reply": "2026-08-03T06:24:33.686468Z" + "iopub.execute_input": "2026-08-04T13:23:37.475090Z", + "iopub.status.busy": "2026-08-04T13:23:37.474966Z", + "iopub.status.idle": "2026-08-04T13:23:37.482078Z", + "shell.execute_reply": "2026-08-04T13:23:37.481359Z" } }, "outputs": [ @@ -1504,13 +1510,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "926f1e79", + "id": "de271043", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.687943Z", - "iopub.status.busy": "2026-08-03T06:24:33.687836Z", - "iopub.status.idle": "2026-08-03T06:24:33.691505Z", - "shell.execute_reply": "2026-08-03T06:24:33.691084Z" + "iopub.execute_input": "2026-08-04T13:23:37.484273Z", + "iopub.status.busy": "2026-08-04T13:23:37.484097Z", + "iopub.status.idle": "2026-08-04T13:23:37.488364Z", + "shell.execute_reply": "2026-08-04T13:23:37.487893Z" } }, "outputs": [ @@ -1583,7 +1589,7 @@ }, { "cell_type": "markdown", - "id": "b394ade5", + "id": "c6544b2d", "metadata": {}, "source": [ "Two things about the axis are worth reading carefully.\n", @@ -1602,13 +1608,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "15214bdd", + "id": "d996c603", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.692267Z", - "iopub.status.busy": "2026-08-03T06:24:33.692174Z", - "iopub.status.idle": "2026-08-03T06:24:33.857613Z", - "shell.execute_reply": "2026-08-03T06:24:33.857222Z" + "iopub.execute_input": "2026-08-04T13:23:37.489760Z", + "iopub.status.busy": "2026-08-04T13:23:37.489623Z", + "iopub.status.idle": "2026-08-04T13:23:37.684349Z", + "shell.execute_reply": "2026-08-04T13:23:37.683794Z" } }, "outputs": [ @@ -1645,7 +1651,7 @@ }, { "cell_type": "markdown", - "id": "c85b045a", + "id": "0a38a5bc", "metadata": {}, "source": [ "## What the bands say\n", @@ -1657,13 +1663,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "87aba324", + "id": "439f307e", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.858692Z", - "iopub.status.busy": "2026-08-03T06:24:33.858600Z", - "iopub.status.idle": "2026-08-03T06:24:33.865469Z", - "shell.execute_reply": "2026-08-03T06:24:33.865034Z" + "iopub.execute_input": "2026-08-04T13:23:37.685952Z", + "iopub.status.busy": "2026-08-04T13:23:37.685786Z", + "iopub.status.idle": "2026-08-04T13:23:37.695373Z", + "shell.execute_reply": "2026-08-04T13:23:37.694915Z" } }, "outputs": [ @@ -1742,7 +1748,7 @@ }, { "cell_type": "markdown", - "id": "2f3dd0d8", + "id": "18b8f39c", "metadata": {}, "source": [ "Metals, gap zero. Correct: two of the four bands cross the Fermi level, and a\n", @@ -1755,13 +1761,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "e8876f22", + "id": "eb15b738", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.866399Z", - "iopub.status.busy": "2026-08-03T06:24:33.866311Z", - "iopub.status.idle": "2026-08-03T06:24:33.912386Z", - "shell.execute_reply": "2026-08-03T06:24:33.911927Z" + "iopub.execute_input": "2026-08-04T13:23:37.696510Z", + "iopub.status.busy": "2026-08-04T13:23:37.696373Z", + "iopub.status.idle": "2026-08-04T13:23:37.745332Z", + "shell.execute_reply": "2026-08-04T13:23:37.744750Z" } }, "outputs": [ @@ -1856,7 +1862,7 @@ }, { "cell_type": "markdown", - "id": "98b5aefc", + "id": "513dc54c", "metadata": {}, "source": [ "1.70 eV, which is exactly what the model was built with, and **direct** —\n", @@ -1923,13 +1929,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "fac9f8a6", + "id": "97068b54", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:33.913294Z", - "iopub.status.busy": "2026-08-03T06:24:33.913147Z", - "iopub.status.idle": "2026-08-03T06:24:34.005275Z", - "shell.execute_reply": "2026-08-03T06:24:34.004832Z" + "iopub.execute_input": "2026-08-04T13:23:37.746461Z", + "iopub.status.busy": "2026-08-04T13:23:37.746321Z", + "iopub.status.idle": "2026-08-04T13:23:38.036077Z", + "shell.execute_reply": "2026-08-04T13:23:38.035467Z" } }, "outputs": [ @@ -1950,7 +1956,7 @@ }, { "cell_type": "markdown", - "id": "fbe11da3", + "id": "2d67a2f8", "metadata": {}, "source": [ "It names the install rather than returning zeros — and the docstring says why\n", @@ -1965,13 +1971,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "dc2505a1", + "id": "4ef40be3", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:34.006398Z", - "iopub.status.busy": "2026-08-03T06:24:34.006036Z", - "iopub.status.idle": "2026-08-03T06:24:34.008247Z", - "shell.execute_reply": "2026-08-03T06:24:34.007903Z" + "iopub.execute_input": "2026-08-04T13:23:38.038066Z", + "iopub.status.busy": "2026-08-04T13:23:38.037486Z", + "iopub.status.idle": "2026-08-04T13:23:38.041032Z", + "shell.execute_reply": "2026-08-04T13:23:38.040309Z" } }, "outputs": [ @@ -1993,7 +1999,7 @@ }, { "cell_type": "markdown", - "id": "c7919fde", + "id": "6216cdaa", "metadata": {}, "source": [ "```{seealso}\n", @@ -2006,7 +2012,7 @@ }, { "cell_type": "markdown", - "id": "5f315b45", + "id": "41364b19", "metadata": {}, "source": [ "## How sure is a coordination number?\n", @@ -2022,13 +2028,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "a2031e63", + "id": "8f0b259f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:34.008997Z", - "iopub.status.busy": "2026-08-03T06:24:34.008910Z", - "iopub.status.idle": "2026-08-03T06:24:34.481398Z", - "shell.execute_reply": "2026-08-03T06:24:34.480971Z" + "iopub.execute_input": "2026-08-04T13:23:38.042220Z", + "iopub.status.busy": "2026-08-04T13:23:38.042084Z", + "iopub.status.idle": "2026-08-04T13:23:38.532730Z", + "shell.execute_reply": "2026-08-04T13:23:38.532168Z" } }, "outputs": [ @@ -2173,7 +2179,7 @@ }, { "cell_type": "markdown", - "id": "b5706501", + "id": "0b739882", "metadata": {}, "source": [ "Sodium gets six faces and six neighbours, every weight 1.0 — nothing to decide.\n", @@ -2191,13 +2197,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "095e0357", + "id": "9540dd12", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:34.482275Z", - "iopub.status.busy": "2026-08-03T06:24:34.482182Z", - "iopub.status.idle": "2026-08-03T06:24:34.506989Z", - "shell.execute_reply": "2026-08-03T06:24:34.506581Z" + "iopub.execute_input": "2026-08-04T13:23:38.533921Z", + "iopub.status.busy": "2026-08-04T13:23:38.533787Z", + "iopub.status.idle": "2026-08-04T13:23:38.561246Z", + "shell.execute_reply": "2026-08-04T13:23:38.560663Z" } }, "outputs": [ @@ -2223,7 +2229,7 @@ }, { "cell_type": "markdown", - "id": "ab5ddfc1", + "id": "d7668d55", "metadata": {}, "source": [ "0.58 against 1.00. That is the column to sort on when auditing coordination\n", @@ -2234,7 +2240,7 @@ }, { "cell_type": "markdown", - "id": "d043af0f", + "id": "569e79ec", "metadata": {}, "source": [ "## Who counts as a neighbour?\n", @@ -2250,13 +2256,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "18b607b5", + "id": "012018dc", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:34.507889Z", - "iopub.status.busy": "2026-08-03T06:24:34.507800Z", - "iopub.status.idle": "2026-08-03T06:24:35.137093Z", - "shell.execute_reply": "2026-08-03T06:24:35.136605Z" + "iopub.execute_input": "2026-08-04T13:23:38.562416Z", + "iopub.status.busy": "2026-08-04T13:23:38.562283Z", + "iopub.status.idle": "2026-08-04T13:23:39.214830Z", + "shell.execute_reply": "2026-08-04T13:23:39.213997Z" } }, "outputs": [ @@ -2393,7 +2399,7 @@ }, { "cell_type": "markdown", - "id": "f343ff9c", + "id": "e494937b", "metadata": {}, "source": [ "Six and octahedral for every site, which is what rocksalt is.\n", @@ -2406,13 +2412,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "c02abca9", + "id": "5a7a4640", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:35.138065Z", - "iopub.status.busy": "2026-08-03T06:24:35.137973Z", - "iopub.status.idle": "2026-08-03T06:24:35.327503Z", - "shell.execute_reply": "2026-08-03T06:24:35.327126Z" + "iopub.execute_input": "2026-08-04T13:23:39.216083Z", + "iopub.status.busy": "2026-08-04T13:23:39.215950Z", + "iopub.status.idle": "2026-08-04T13:23:39.418488Z", + "shell.execute_reply": "2026-08-04T13:23:39.416902Z" } }, "outputs": [ @@ -2514,7 +2520,7 @@ }, { "cell_type": "markdown", - "id": "5b90d4fa", + "id": "216e77f8", "metadata": {}, "source": [ "Lower coordination, from an identical structure. A geometric criterion would\n", @@ -2540,7 +2546,7 @@ }, { "cell_type": "markdown", - "id": "122a5b92", + "id": "f731568b", "metadata": {}, "source": [ "## What photoemission actually sees\n", @@ -2558,13 +2564,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "2282a21c", + "id": "949a329c", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:35.328541Z", - "iopub.status.busy": "2026-08-03T06:24:35.328455Z", - "iopub.status.idle": "2026-08-03T06:24:35.340650Z", - "shell.execute_reply": "2026-08-03T06:24:35.340258Z" + "iopub.execute_input": "2026-08-04T13:23:39.420016Z", + "iopub.status.busy": "2026-08-04T13:23:39.419598Z", + "iopub.status.idle": "2026-08-04T13:23:39.434823Z", + "shell.execute_reply": "2026-08-04T13:23:39.434118Z" } }, "outputs": [ @@ -2604,7 +2610,7 @@ }, { "cell_type": "markdown", - "id": "db3e6578", + "id": "5b8e91d1", "metadata": {}, "source": [ "Twenty, exactly the ratio of the two cross-sections. The oxygen states are\n", @@ -2619,13 +2625,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "60e4716e", + "id": "9a16b00f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:24:35.341475Z", - "iopub.status.busy": "2026-08-03T06:24:35.341388Z", - "iopub.status.idle": "2026-08-03T06:24:35.501087Z", - "shell.execute_reply": "2026-08-03T06:24:35.500690Z" + "iopub.execute_input": "2026-08-04T13:23:39.436633Z", + "iopub.status.busy": "2026-08-04T13:23:39.436063Z", + "iopub.status.idle": "2026-08-04T13:23:39.611615Z", + "shell.execute_reply": "2026-08-04T13:23:39.610245Z" } }, "outputs": [ @@ -2671,7 +2677,7 @@ }, { "cell_type": "markdown", - "id": "6a4b8308", + "id": "8bfb3afc", "metadata": {}, "source": [ "```{note}\n", diff --git a/matverse_guide/docs/tutorials/surfaces_and_adsorption.ipynb b/matverse_guide/docs/tutorials/surfaces_and_adsorption.ipynb index a6d3b36..e09dcf5 100644 --- a/matverse_guide/docs/tutorials/surfaces_and_adsorption.ipynb +++ b/matverse_guide/docs/tutorials/surfaces_and_adsorption.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "a781019a", + "id": "69f9bec6", "metadata": {}, "source": [ "# Surfaces and adsorption\n", @@ -20,13 +20,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "ae9b40ba", + "id": "e706ccfe", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:23.983817Z", - "iopub.status.busy": "2026-08-03T06:22:23.983737Z", - "iopub.status.idle": "2026-08-03T06:22:27.123865Z", - "shell.execute_reply": "2026-08-03T06:22:27.123310Z" + "iopub.execute_input": "2026-08-04T13:21:00.302201Z", + "iopub.status.busy": "2026-08-04T13:21:00.302093Z", + "iopub.status.idle": "2026-08-04T13:21:06.998782Z", + "shell.execute_reply": "2026-08-04T13:21:06.998264Z" } }, "outputs": [ @@ -34,20 +34,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "🔬 Starting plot initialization...\n", - "🧪 Calculators available: 6\n", - " • emt — EMT (LGPL-2.1)\n", - " • lj — Lennard-Jones (LGPL-2.1)\n", - " • mace-mpa — mace-mpa (unstated)\n", - " • mace-omat — mace-omat (unstated)\n", - " • sevennet — sevennet (unstated)\n", - " • chgnet — chgnet (unstated)\n" + "🔬 Starting plot initialization...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "🧪 Calculators available: 12\n", + " • emt — EMT (LGPL-2.1)\n", + " • lj — Lennard-Jones (LGPL-2.1)\n", + " • mace-mpa — mace-mpa (unstated)\n", + " • mace-omat — mace-omat (unstated)\n", + " • sevennet — sevennet (unstated)\n", + " • chgnet — chgnet (unstated)\n", + " • m3gnet — M3GNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • m3gnet-r2scan — M3GNet-PES-MatPES-r2SCAN-2025.2 (BSD-3-Clause)\n", + " • tensornet — TensorNet-PES-MatPES-PBE-2025.2 (BSD-3-Clause)\n", + " • orb — ORB v3 conservative (Apache-2.0)\n", + " • gpaw-pbe — GPAW PBE, PW(500 eV) (GPL-3.0)\n", + " • gpaw-pbe-fast — GPAW PBE, PW(400 eV) (GPL-3.0)\n", "🖥️ NVIDIA CUDA GPUs: 1\n", " • [CUDA 0] NVIDIA H100 80GB HBM3 — 79.1 GB, compute 9.0\n", "\n", @@ -57,7 +63,7 @@ " / / / / / / /_/ / /_ | |/ / __/ / (__ ) __/\n", "/_/ /_/ /_/\\__,_/\\__/ |___/\\___/_/ /____/\\___/\n", "\n", - "🔖 Version: 0.1.71 🧮 Functions: 213 📚 Tutorials: https://matverse.readthedocs.io/\n", + "🔖 Version: 0.1.71 🧮 Functions: 214 📚 Tutorials: https://matverse.readthedocs.io/\n", "✅ set_style complete.\n", "\n" ] @@ -73,7 +79,7 @@ }, { "cell_type": "markdown", - "id": "176881ae", + "id": "3ddfca08", "metadata": {}, "source": [ "## Loading a dataset\n", @@ -86,13 +92,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "a5917a3f", + "id": "1e808906", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.125141Z", - "iopub.status.busy": "2026-08-03T06:22:27.124775Z", - "iopub.status.idle": "2026-08-03T06:22:27.256576Z", - "shell.execute_reply": "2026-08-03T06:22:27.256181Z" + "iopub.execute_input": "2026-08-04T13:21:07.000665Z", + "iopub.status.busy": "2026-08-04T13:21:07.000291Z", + "iopub.status.idle": "2026-08-04T13:21:07.026055Z", + "shell.execute_reply": "2026-08-04T13:21:07.025592Z" } }, "outputs": [ @@ -160,7 +166,7 @@ }, { "cell_type": "markdown", - "id": "20e532d6", + "id": "d2765ff5", "metadata": {}, "source": [ "The bulk energy is not optional bookkeeping — a surface energy is the cost of\n", @@ -178,13 +184,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "9abb913f", + "id": "e173c272", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.257436Z", - "iopub.status.busy": "2026-08-03T06:22:27.257342Z", - "iopub.status.idle": "2026-08-03T06:22:27.472179Z", - "shell.execute_reply": "2026-08-03T06:22:27.471788Z" + "iopub.execute_input": "2026-08-04T13:21:07.027314Z", + "iopub.status.busy": "2026-08-04T13:21:07.027167Z", + "iopub.status.idle": "2026-08-04T13:21:07.252783Z", + "shell.execute_reply": "2026-08-04T13:21:07.252274Z" } }, "outputs": [ @@ -212,13 +218,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "c54036f5", + "id": "2c4d0c60", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.473421Z", - "iopub.status.busy": "2026-08-03T06:22:27.473212Z", - "iopub.status.idle": "2026-08-03T06:22:27.484517Z", - "shell.execute_reply": "2026-08-03T06:22:27.484160Z" + "iopub.execute_input": "2026-08-04T13:21:07.253989Z", + "iopub.status.busy": "2026-08-04T13:21:07.253858Z", + "iopub.status.idle": "2026-08-04T13:21:07.265391Z", + "shell.execute_reply": "2026-08-04T13:21:07.265031Z" } }, "outputs": [ @@ -333,7 +339,7 @@ }, { "cell_type": "markdown", - "id": "2a06d795", + "id": "f5dcd707", "metadata": {}, "source": [ "More rows out than in, with `obs['parent']` pointing back at the bulk material —\n", @@ -349,13 +355,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "ae492d47", + "id": "efec2842", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.485269Z", - "iopub.status.busy": "2026-08-03T06:22:27.485179Z", - "iopub.status.idle": "2026-08-03T06:22:27.487341Z", - "shell.execute_reply": "2026-08-03T06:22:27.487044Z" + "iopub.execute_input": "2026-08-04T13:21:07.266822Z", + "iopub.status.busy": "2026-08-04T13:21:07.266681Z", + "iopub.status.idle": "2026-08-04T13:21:07.270565Z", + "shell.execute_reply": "2026-08-04T13:21:07.269851Z" } }, "outputs": [ @@ -382,7 +388,7 @@ }, { "cell_type": "markdown", - "id": "e861d7b5", + "id": "958006ae", "metadata": {}, "source": [ "## Surface energies" @@ -391,13 +397,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "bb66b61d", + "id": "44f07115", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.488053Z", - "iopub.status.busy": "2026-08-03T06:22:27.487975Z", - "iopub.status.idle": "2026-08-03T06:22:27.510704Z", - "shell.execute_reply": "2026-08-03T06:22:27.510353Z" + "iopub.execute_input": "2026-08-04T13:21:07.271913Z", + "iopub.status.busy": "2026-08-04T13:21:07.271778Z", + "iopub.status.idle": "2026-08-04T13:21:07.303106Z", + "shell.execute_reply": "2026-08-04T13:21:07.302619Z" } }, "outputs": [ @@ -426,7 +432,7 @@ }, { "cell_type": "markdown", - "id": "78e807ac", + "id": "cda3263a", "metadata": {}, "source": [ "**(111) < (100) < (110)**, which is the literature ordering for copper and for\n", @@ -441,20 +447,20 @@ { "cell_type": "code", "execution_count": 7, - "id": "0c4b1190", + "id": "6ad5de9d", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.511473Z", - "iopub.status.busy": "2026-08-03T06:22:27.511387Z", - "iopub.status.idle": "2026-08-03T06:22:27.625339Z", - "shell.execute_reply": "2026-08-03T06:22:27.624978Z" + "iopub.execute_input": "2026-08-04T13:21:07.304310Z", + "iopub.status.busy": "2026-08-04T13:21:07.304174Z", + "iopub.status.idle": "2026-08-04T13:21:07.466263Z", + "shell.execute_reply": "2026-08-04T13:21:07.465458Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 7, @@ -494,7 +500,7 @@ }, { "cell_type": "markdown", - "id": "8225670a", + "id": "9a7a7d3a", "metadata": {}, "source": [ "## When a slab is not the bulk formula\n", @@ -513,13 +519,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "e3e6edb0", + "id": "136ec893", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.626196Z", - "iopub.status.busy": "2026-08-03T06:22:27.626107Z", - "iopub.status.idle": "2026-08-03T06:22:27.796270Z", - "shell.execute_reply": "2026-08-03T06:22:27.795775Z" + "iopub.execute_input": "2026-08-04T13:21:07.467456Z", + "iopub.status.busy": "2026-08-04T13:21:07.467325Z", + "iopub.status.idle": "2026-08-04T13:21:07.658532Z", + "shell.execute_reply": "2026-08-04T13:21:07.657694Z" } }, "outputs": [ @@ -610,7 +616,7 @@ }, { "cell_type": "markdown", - "id": "d711d281", + "id": "fbea506b", "metadata": {}, "source": [ "Four of these five are not Cu₃Au. The leftover atoms have to come from somewhere\n", @@ -622,13 +628,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "8e28c96e", + "id": "91ad79d4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.797121Z", - "iopub.status.busy": "2026-08-03T06:22:27.797037Z", - "iopub.status.idle": "2026-08-03T06:22:27.802319Z", - "shell.execute_reply": "2026-08-03T06:22:27.802029Z" + "iopub.execute_input": "2026-08-04T13:21:07.659897Z", + "iopub.status.busy": "2026-08-04T13:21:07.659765Z", + "iopub.status.idle": "2026-08-04T13:21:07.670529Z", + "shell.execute_reply": "2026-08-04T13:21:07.669581Z" } }, "outputs": [ @@ -722,7 +728,7 @@ }, { "cell_type": "markdown", - "id": "5c21a390", + "id": "4dd14d59", "metadata": {}, "source": [ "### Referencing the surplus to a reservoir\n", @@ -740,13 +746,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "4533aa13", + "id": "89b37e1f", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:27.803213Z", - "iopub.status.busy": "2026-08-03T06:22:27.803133Z", - "iopub.status.idle": "2026-08-03T06:22:28.961481Z", - "shell.execute_reply": "2026-08-03T06:22:28.961064Z" + "iopub.execute_input": "2026-08-04T13:21:07.671712Z", + "iopub.status.busy": "2026-08-04T13:21:07.671584Z", + "iopub.status.idle": "2026-08-04T13:21:08.513665Z", + "shell.execute_reply": "2026-08-04T13:21:08.512809Z" } }, "outputs": [ @@ -856,7 +862,7 @@ }, { "cell_type": "markdown", - "id": "c254864c", + "id": "61286e59", "metadata": {}, "source": [ "Two things to read off. The two (100) terminations carry equal and opposite Au\n", @@ -877,13 +883,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "33cdc719", + "id": "9bba5334", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:28.962462Z", - "iopub.status.busy": "2026-08-03T06:22:28.962332Z", - "iopub.status.idle": "2026-08-03T06:22:28.966984Z", - "shell.execute_reply": "2026-08-03T06:22:28.966650Z" + "iopub.execute_input": "2026-08-04T13:21:08.514871Z", + "iopub.status.busy": "2026-08-04T13:21:08.514733Z", + "iopub.status.idle": "2026-08-04T13:21:08.521736Z", + "shell.execute_reply": "2026-08-04T13:21:08.520945Z" } }, "outputs": [ @@ -942,7 +948,7 @@ }, { "cell_type": "markdown", - "id": "208c2d83", + "id": "75caf4a6", "metadata": {}, "source": [ "## The equilibrium crystal shape\n", @@ -956,13 +962,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "9c4d847b", + "id": "af114ba4", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:28.967701Z", - "iopub.status.busy": "2026-08-03T06:22:28.967618Z", - "iopub.status.idle": "2026-08-03T06:22:29.019523Z", - "shell.execute_reply": "2026-08-03T06:22:29.019112Z" + "iopub.execute_input": "2026-08-04T13:21:08.523119Z", + "iopub.status.busy": "2026-08-04T13:21:08.522995Z", + "iopub.status.idle": "2026-08-04T13:21:08.583869Z", + "shell.execute_reply": "2026-08-04T13:21:08.583335Z" } }, "outputs": [ @@ -1030,13 +1036,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "b265b6b3", + "id": "51ed960a", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.020369Z", - "iopub.status.busy": "2026-08-03T06:22:29.020281Z", - "iopub.status.idle": "2026-08-03T06:22:29.025076Z", - "shell.execute_reply": "2026-08-03T06:22:29.024739Z" + "iopub.execute_input": "2026-08-04T13:21:08.585592Z", + "iopub.status.busy": "2026-08-04T13:21:08.584965Z", + "iopub.status.idle": "2026-08-04T13:21:08.592337Z", + "shell.execute_reply": "2026-08-04T13:21:08.591913Z" } }, "outputs": [ @@ -1108,7 +1114,7 @@ }, { "cell_type": "markdown", - "id": "15fb56c3", + "id": "ca29e109", "metadata": {}, "source": [ "(111) takes **two thirds** of the surface, (100) most of the rest, and (110)\n", @@ -1128,13 +1134,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "07aaeefc", + "id": "0bb9e825", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.025815Z", - "iopub.status.busy": "2026-08-03T06:22:29.025726Z", - "iopub.status.idle": "2026-08-03T06:22:29.027841Z", - "shell.execute_reply": "2026-08-03T06:22:29.027507Z" + "iopub.execute_input": "2026-08-04T13:21:08.593928Z", + "iopub.status.busy": "2026-08-04T13:21:08.593799Z", + "iopub.status.idle": "2026-08-04T13:21:08.597348Z", + "shell.execute_reply": "2026-08-04T13:21:08.596895Z" } }, "outputs": [ @@ -1158,13 +1164,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "cb7e6ef6", + "id": "f9b02561", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.028499Z", - "iopub.status.busy": "2026-08-03T06:22:29.028422Z", - "iopub.status.idle": "2026-08-03T06:22:29.121414Z", - "shell.execute_reply": "2026-08-03T06:22:29.121029Z" + "iopub.execute_input": "2026-08-04T13:21:08.598695Z", + "iopub.status.busy": "2026-08-04T13:21:08.598576Z", + "iopub.status.idle": "2026-08-04T13:21:08.708405Z", + "shell.execute_reply": "2026-08-04T13:21:08.707969Z" } }, "outputs": [ @@ -1206,7 +1212,7 @@ }, { "cell_type": "markdown", - "id": "6a171e89", + "id": "01b4c0a3", "metadata": {}, "source": [ "## Adsorption\n", @@ -1219,13 +1225,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "9fc4467c", + "id": "5367ed12", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.122352Z", - "iopub.status.busy": "2026-08-03T06:22:29.122201Z", - "iopub.status.idle": "2026-08-03T06:22:29.162390Z", - "shell.execute_reply": "2026-08-03T06:22:29.161997Z" + "iopub.execute_input": "2026-08-04T13:21:08.710019Z", + "iopub.status.busy": "2026-08-04T13:21:08.709890Z", + "iopub.status.idle": "2026-08-04T13:21:08.756918Z", + "shell.execute_reply": "2026-08-04T13:21:08.756439Z" } }, "outputs": [ @@ -1295,7 +1301,7 @@ }, { "cell_type": "markdown", - "id": "7850e5c8", + "id": "5fd9df94", "metadata": {}, "source": [ "### Sites are enumerated, not guessed\n", @@ -1308,13 +1314,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "b088fa57", + "id": "deff51d1", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.163175Z", - "iopub.status.busy": "2026-08-03T06:22:29.163092Z", - "iopub.status.idle": "2026-08-03T06:22:29.233245Z", - "shell.execute_reply": "2026-08-03T06:22:29.232886Z" + "iopub.execute_input": "2026-08-04T13:21:08.758153Z", + "iopub.status.busy": "2026-08-04T13:21:08.757978Z", + "iopub.status.idle": "2026-08-04T13:21:08.840597Z", + "shell.execute_reply": "2026-08-04T13:21:08.840326Z" } }, "outputs": [ @@ -1395,13 +1401,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "378d3831", + "id": "fe8aea16", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.234097Z", - "iopub.status.busy": "2026-08-03T06:22:29.234013Z", - "iopub.status.idle": "2026-08-03T06:22:29.236936Z", - "shell.execute_reply": "2026-08-03T06:22:29.236597Z" + "iopub.execute_input": "2026-08-04T13:21:08.842259Z", + "iopub.status.busy": "2026-08-04T13:21:08.842110Z", + "iopub.status.idle": "2026-08-04T13:21:08.846691Z", + "shell.execute_reply": "2026-08-04T13:21:08.845873Z" } }, "outputs": [ @@ -1426,7 +1432,7 @@ }, { "cell_type": "markdown", - "id": "352b80ca", + "id": "7e3c41c5", "metadata": {}, "source": [ "On-top, bridge and hollow — the three coordination environments a close-packed\n", @@ -1436,13 +1442,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "88266f98", + "id": "4b3f4d38", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.237645Z", - "iopub.status.busy": "2026-08-03T06:22:29.237560Z", - "iopub.status.idle": "2026-08-03T06:22:29.581291Z", - "shell.execute_reply": "2026-08-03T06:22:29.580928Z" + "iopub.execute_input": "2026-08-04T13:21:08.847995Z", + "iopub.status.busy": "2026-08-04T13:21:08.847862Z", + "iopub.status.idle": "2026-08-04T13:21:09.842998Z", + "shell.execute_reply": "2026-08-04T13:21:09.842565Z" } }, "outputs": [ @@ -1471,7 +1477,7 @@ }, { "cell_type": "markdown", - "id": "ef5749be", + "id": "ab3d451d", "metadata": {}, "source": [ "**Hollow is lowest, then bridge, then on-top** — more neighbours, more bonding.\n", @@ -1488,20 +1494,20 @@ { "cell_type": "code", "execution_count": 20, - "id": "6f5d3435", + "id": "062d0f76", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.582502Z", - "iopub.status.busy": "2026-08-03T06:22:29.582416Z", - "iopub.status.idle": "2026-08-03T06:22:29.686038Z", - "shell.execute_reply": "2026-08-03T06:22:29.685677Z" + "iopub.execute_input": "2026-08-04T13:21:09.844270Z", + "iopub.status.busy": "2026-08-04T13:21:09.844155Z", + "iopub.status.idle": "2026-08-04T13:21:09.960782Z", + "shell.execute_reply": "2026-08-04T13:21:09.960328Z" } }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -1539,7 +1545,7 @@ }, { "cell_type": "markdown", - "id": "e3698349", + "id": "8e5ee9c4", "metadata": {}, "source": [ "About 170 meV between on-top and hollow. That is the size of difference that\n", @@ -1548,7 +1554,7 @@ }, { "cell_type": "markdown", - "id": "749d4c7d", + "id": "e074240f", "metadata": {}, "source": [ "```{warning}\n", @@ -1572,13 +1578,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "967a5d57", + "id": "407ea5ba", "metadata": { "execution": { - "iopub.execute_input": "2026-08-03T06:22:29.686983Z", - "iopub.status.busy": "2026-08-03T06:22:29.686892Z", - "iopub.status.idle": "2026-08-03T06:22:29.688849Z", - "shell.execute_reply": "2026-08-03T06:22:29.688535Z" + "iopub.execute_input": "2026-08-04T13:21:09.961953Z", + "iopub.status.busy": "2026-08-04T13:21:09.961809Z", + "iopub.status.idle": "2026-08-04T13:21:09.964415Z", + "shell.execute_reply": "2026-08-04T13:21:09.963705Z" } }, "outputs": [ @@ -1602,7 +1608,7 @@ }, { "cell_type": "markdown", - "id": "60f24df3", + "id": "16a292b1", "metadata": {}, "source": [ "```{seealso}\n", diff --git a/pyproject.toml b/pyproject.toml index 09f4292..adf6fc4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,14 @@ matminer = ["matminer"] cost = ["bibtexparser"] # mv.prop.cost price table screening = ["smact"] # mv.gen.compositions generation = ["pyxtal"] # mv.gen.from_symmetry +# Real Kohn-Sham DFT, as a matverse level of theory. GPAW is an ASE +# calculator, so nothing beyond the registration is needed - but a DFT run is +# minutes where a surrogate is milliseconds, which is why it is an extra and +# why the test suite exercises it on one molecule rather than a crystal. +dft = ["gpaw"] +# Further foundation potentials, on top of the mace/sevennet/chgnet already +# reachable. matgl carries M3GNet and TensorNet at both PBE and r2SCAN. +potentials = ["matgl", "orb-models"] # mv.prop.phonon_at_temperature. hiphive reaches numba through trainstation, # and numba caps numpy below 2.5, so this extra cannot share an environment # with the newest numpy. It is tested in its own CI job for that reason rather diff --git a/tests/_contract_cases.py b/tests/_contract_cases.py index 9ceb0ee..aeca96e 100644 --- a/tests/_contract_cases.py +++ b/tests/_contract_cases.py @@ -149,6 +149,13 @@ def two_elements(): return ["Ti", "O"] +def symmetric(): + """A dataset carrying obs['spacegroup_number'], for mv.pl.spacegroups.""" + md = mv.datasets.metals(["Cu", "Al"]) + mv.pp.symmetry(md) + return md + + def perovskite_candidates(): return mv.data.from_compositions(["BaTiO3", "SrTiO3"]) @@ -849,6 +856,7 @@ def measured_alloy(): {"threshold": 4, "returns": "new"}), (mv.gen.from_symmetry, perovskite_candidates, (), {"space_groups": [221], "seed": 0, "returns": "new"}), + (mv.pl.spacegroups, symmetric, (), {}), (mv.disorder.cluster_expansion, cu_au_training, (), {"parent": cu_au_parent(), "level": "emt", "cutoffs": {2: 6.0, 3: 4.5}}), diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py index 0d3d92f..14a907a 100644 --- a/tests/test_pipeline.py +++ b/tests/test_pipeline.py @@ -336,3 +336,163 @@ def test_the_whole_object_still_saves(self, md, tmp_path): assert "relaxed_emt" in back.obsm["structures"].columns assert back.uns["levels"]["emt"]["method"] == "EMT" assert len(mv.structures(back, "relaxed_emt")) == 6 + + +def _spec(name: str) -> bool: + import importlib.util + return importlib.util.find_spec(name) is not None + + +class TestLevelsOfTheory: + """What each level claims about itself. + + Not backend-free, though the first version of this assumed it was: the + metadata is built inside _builtin alongside the import, so a level whose + backend is absent appears as {'unavailable': ...} rather than with its + fields. Every check here therefore skips the levels this environment + cannot construct, and asserts that it checked something. + """ + + @staticmethod + def _present(names): + levels = mv.calc.available() + found = {n: levels[n] for n in names + if n in levels and "unavailable" not in levels[n]} + if not found: + pytest.skip(f"no backend installed for any of {names}") + return found + + def test_the_dft_levels_are_not_surrogates(self): + """The whole point of the kind/surrogate fields. GPAW solves the + Kohn-Sham equations; everything else here reproduces something that + did, and a screen that cannot tell them apart cannot report what + produced a number.""" + for entry in self._present(("gpaw-pbe", "gpaw-pbe-fast")).values(): + assert entry["kind"] == "dft" + assert entry["surrogate"] is False + assert entry["reference"] == "PBE" + + def test_the_surrogates_say_so(self): + found = self._present(("m3gnet", "tensornet", "orb", "mace-mpa", + "chgnet")) + for entry in found.values(): + assert entry["surrogate"] is True + assert entry["kind"] == "mlip" + + def test_the_reference_functional_is_recorded_and_differs(self): + """Mixing a PBE surrogate with an r2SCAN one is the same class of + error as mixing PBE with HSE06. On silicon the two M3GNet checkpoints + differ by 6 eV for the same cell, so this is not a nicety.""" + found = self._present(("m3gnet", "m3gnet-r2scan")) + if len(found) < 2: + pytest.skip("both matgl checkpoints are needed to compare them") + assert "PBE" in found["m3gnet"]["reference"] + assert "r2SCAN" in found["m3gnet-r2scan"]["reference"] + assert found["m3gnet"]["reference"] != \ + found["m3gnet-r2scan"]["reference"] + + def test_the_dft_levels_record_what_decides_convergence(self): + """A DFT number without its cutoff and k-mesh is not reproducible.""" + for entry in self._present(("gpaw-pbe", "gpaw-pbe-fast")).values(): + assert entry["plane_wave_cutoff_eV"] > 0 + assert len(entry["kpoint_mesh"]) == 3 + + def test_the_gpaw_mesh_is_fixed_not_a_density(self): + """A density-based mesh changes discretely with cell size, which puts + a step in E(V). On silicon that gave a bulk modulus of -879 GPa at + density 2.0 and 256 GPa at 2.5, against 88.7 at a fixed mesh.""" + for entry in self._present(("gpaw-pbe", "gpaw-pbe-fast")).values(): + assert "kpoint_density_per_inv_angstrom" not in entry + assert all(isinstance(k, int) for k in entry["kpoint_mesh"]) + + +@pytest.mark.skipif(not _spec("matgl"), reason="matgl is an optional extra") +class TestMatglStressUnit: + def test_the_stress_is_in_ase_units_not_gigapascals(self): + """matgl returns stress in GPa by default while ASE's contract is + eV/A^3. Left alone it makes every stress-derived quantity exactly + 160.2x too large, with no error raised anywhere — the factor is the + GPa-to-eV/A^3 conversion, which is what makes it recognisable.""" + from ase.build import bulk + from matverse.calc import _builtin + factory, _ = _builtin("tensornet") + atoms = bulk("Si", "diamond", a=5.43) + atoms.calc = factory() + stress = abs(np.asarray(atoms.get_stress())).max() + # Silicon near equilibrium: hundredths of eV/A^3, not units of it. + assert stress < 0.5, f"stress {stress} looks like GPa, not eV/A^3" + + +@pytest.mark.skipif(not _spec("gpaw"), reason="GPAW is an optional extra") +class TestRealDFT: + """One genuine Kohn-Sham calculation, small enough for CI. + + This skips in CI, and not because it is slow. GPAW ships no wheel and its + 26.x sources include C++ headers from files the build compiles as C, so on + a stock runner it stops at "fatal error: algorithm: No such file or + directory" regardless of libxc, BLAS and build-essential. It builds where + the compiler puts the C++ headers on the default include path, which is + where the numbers in the notes were measured: a relaxed silicon lattice + constant of 5.479 A against a PBE literature 5.47, and a bulk modulus of + 88.7 GPa against 88-89. Those runs take minutes each and would not belong + in CI even if it could install the package. + """ + + def test_it_actually_solves_something(self): + from ase import Atoms + from gpaw import GPAW + molecule = Atoms("H2", positions=[[3, 3, 2.63], [3, 3, 3.37]], + cell=[6, 6, 6], pbc=False) + molecule.calc = GPAW(mode="lcao", basis="sz(dzp)", xc="PBE", + txt=None, h=0.25) + energy = molecule.get_potential_energy() + assert np.isfinite(energy) + assert -12.0 < energy < 0.0 # bound, and not absurd + assert np.isfinite(molecule.get_forces()).all() + + def test_the_level_reaches_matverse_as_dft(self): + """Constructed through mv.calc's own registry rather than directly, + so a broken factory shows up here.""" + from matverse.calc import _builtin + factory, meta = _builtin("gpaw-pbe-fast") + assert meta["kind"] == "dft" and meta["surrogate"] is False + assert factory() is not None + + +@pytest.mark.skipif(not _spec("matplotlib"), reason="needs matplotlib") +class TestSpacegroupPlot: + def test_it_groups_by_crystal_system(self): + import matplotlib + matplotlib.use("Agg") + from matverse.pl import _crystal_system + # Boundaries of the international convention, which is where an + # off-by-one would sit. + assert _crystal_system(1) == "triclinic" + assert _crystal_system(2) == "triclinic" + assert _crystal_system(3) == "monoclinic" + assert _crystal_system(15) == "monoclinic" + assert _crystal_system(16) == "orthorhombic" + assert _crystal_system(195) == "cubic" + assert _crystal_system(230) == "cubic" + + def test_it_plots_a_distribution(self): + import matplotlib + matplotlib.use("Agg") + md = mv.datasets.metals(["Cu", "Al", "Ni"]) + mv.pp.symmetry(md) + ax = mv.pl.spacegroups(md) + assert ax._matverse_n_groups >= 1 + + def test_it_says_what_it_left_out(self): + import matplotlib + matplotlib.use("Agg") + md = mv.datasets.metals(["Cu", "Al", "Ni", "Ag", "Au"]) + mv.pp.symmetry(md) + ax = mv.pl.spacegroups(md, top=1) + assert ax._matverse_n_groups == 1 + assert ax._matverse_dropped >= 0 + + def test_a_missing_column_names_the_fix(self): + md = mv.datasets.metals(["Cu"]) + with pytest.raises(ValueError, match="mv.pp.symmetry"): + mv.pl.spacegroups(md)