| """ |
| Executes the actual Python code blocks published in docs/getting-started.md |
| and docs/examples.md, instead of a hand-maintained copy of them. |
| |
| The docs snippets were written by copying from real, already-tested code |
| (experiments/matrix_healing_zne.py, test_mps.py, test_autodiff.py) -- this |
| file closes the other direction: if a future API change (renamed function, |
| changed signature, removed argument) breaks what's *published*, these tests |
| fail immediately instead of the breakage sitting undiscovered until someone |
| rereads the site by hand. |
| |
| Each block is located by its section heading (not "first ```python fence in |
| the file"), since docs/getting-started.md also has a Colab-only block under |
| "## Install" that uses IPython magics (`!git clone`, `%cd`) and is not valid |
| standalone Python -- it's intentionally not selected here. |
| """ |
| import re |
| import pathlib |
|
|
| import numpy as np |
| import pytest |
|
|
| REPO_ROOT = pathlib.Path(__file__).parent |
|
|
|
|
| def _extract_section_code(md_path, heading): |
| text = (REPO_ROOT / md_path).read_text(encoding='utf-8') |
| heading_pos = text.index(heading) |
| remainder = text[heading_pos + len(heading):] |
| match = re.search(r"```python\n(.*?)\n```", remainder, re.DOTALL) |
| assert match is not None, f"no python fence found under {heading!r} in {md_path}" |
| return match.group(1) |
|
|
|
|
| def _run_section(md_path, heading): |
| code = _extract_section_code(md_path, heading) |
| namespace = {'__name__': '__doc_example__'} |
| exec(compile(code, f"{md_path}::{heading}", 'exec'), namespace) |
| return namespace |
|
|
|
|
| class TestGettingStartedExamples: |
|
|
| def test_quick_start(self): |
| ns = _run_section('docs/getting-started.md', '## Quick start') |
| probs = np.asarray(ns['probs']) |
| sv = np.asarray(ns['sv']) |
| assert probs.sum() == pytest.approx(1.0, abs=1e-6) |
| assert np.linalg.norm(sv) == pytest.approx(1.0, abs=1e-6) |
|
|
| def test_anti_oom_chunk(self): |
| ns = _run_section('docs/getting-started.md', '## Anti-OOM for large circuits') |
| sim = ns['sim'] |
| assert sim.n == 27 |
| assert sim.num_chunks >= 1 |
|
|
| def test_zero_noise_extrapolation(self): |
| ns = _run_section('docs/getting-started.md', '## Zero-Noise Extrapolation') |
| raw_fidelity = float(ns['raw_fidelity']) |
| corrected_fidelity = float(ns['corrected_fidelity']) |
| assert 0.0 <= raw_fidelity <= 1.0 |
| assert 0.0 <= corrected_fidelity <= 1.0 |
| |
| |
| assert corrected_fidelity > raw_fidelity |
|
|
|
|
| class TestExamplesPage: |
|
|
| def test_density_matrix_zne_healing(self): |
| ns = _run_section('docs/examples.md', '## Density-matrix ZNE healing') |
| raw_fidelity = float(ns['raw_fidelity']) |
| corrected_fidelity = float(ns['corrected_fidelity']) |
| assert 0.0 <= raw_fidelity <= 1.0 |
| assert 0.0 <= corrected_fidelity <= 1.0 |
| assert corrected_fidelity > raw_fidelity |
|
|
| def test_mps_low_entanglement(self): |
| ns = _run_section('docs/examples.md', '## MPS for low-entanglement circuits') |
| prob = np.asarray(ns['prob']) |
| n = ns['n'] |
| assert prob[0] == pytest.approx(0.5, abs=1e-6) |
| assert prob[2 ** n - 1] == pytest.approx(0.5, abs=1e-6) |
| assert prob.sum() == pytest.approx(1.0, abs=1e-6) |
|
|
| def test_differentiable_vqe(self): |
| ns = _run_section('docs/examples.md', '## Differentiable VQE') |
| energy = float(ns['energy']) |
| ground_state = float(np.min(np.diag(ns['h_matrix']))) |
| |
| |
| assert energy < ground_state / 2 |
|
|