NOETHER
A physics research assistant that shows its work.
Explains physics concepts with everyday analogies, dimension-checked equations, worked examples it recomputes, and simulations it actually runs. Answers questions from real arXiv papers with every sentence anchored to a verbatim span. Audits your own draft's bibliography for references that don't exist.
pip install noether-physics
noether explain decoherence
On 0.1.0 or 0.1.1? Upgrade. Those releases confirm fabricated references — the specific failure this tool exists to prevent. See CHANGELOG.md.
Read this before you trust it
This is a research-integrity tool, so its limits matter more than its features.
The verification gate checks that a quote is real. It does not check that the quote supports the claim. A claim can contradict its own citation and still pass. Demonstrated during development: a claim asserting "the experiment detected a nonzero neutron EDM at five sigma" was accepted while citing a passage reporting d_n = 0.0 ± 1.1 × 10⁻²⁶ e·cm — a null result. The quote was genuine, so the gate let it through. Closing that gap needs entailment checking, which needs a language model, and keeping the model outside the verifier is what makes the other guarantees meaningful. So every answer this tool emits ends by saying so, and you should read the quotes.
The reference resolver is now measured in both directions. It resolves 86.5% of real references and was fooled by 0 of 8 deliberately fabricated ones. That second number did not exist until a labelled benchmark was built for it — and the first run of that benchmark caught the resolver confirming 80% of fabrications, some at 0.95 confidence. Three defects were found and fixed. Eight fabrications is still a small sample: 0% means "fooled by none of eight", not "cannot be fooled".
It is small. 58 papers in the test corpus, 8 concepts in the explanation library, quantum coverage limited to two-level systems and one cavity mode. No PDF fallback, so roughly 9% of quant-ph papers (measured: 5 of 55) cannot be ingested at all.
docs/DEFERRED.md is the full account — every gap, with the measurement behind
it. It is the honest document; this README is the summary.
Why it exists
2026 audits found a 17% phantom-citation rate in AI-assisted survey papers — references resolving to no digital object — and roughly 146,900 AI-generated fake citations across 2.5M papers in 2025. arXiv now bans authors who submit hallucinated references.
Physics has a structural advantage nobody exploits: arXiv distributes the actual LaTeX source.
Equations arrive with their \labels, citations with their \cite keys, sections with their real
structure — read, not guessed. Tools in other fields OCR PDFs because their domains have no source.
Physics does.
What it does
Explains. Curated prose, not generated — then machine-checked. Every equation is parsed and dimension-checked; every worked example is recomputed and compared against its stored answer, so a typo in the library fails CI rather than teaching you a wrong number.
noether explain decoherence # analogy, maths, worked example, live simulation
noether concepts # what the library covers
Simulates. Six models — pendulum, damped/driven oscillator, projectile with drag (SciPy); Rabi, decoherence, Jaynes-Cummings (QuTiP). Every run halves the step size and reports the drift, and where a closed form exists the numerics are compared against it automatically.
noether simulate rabi --params "detuning=6.28" --bloch
noether models
Checks equations. Undeclared symbols return unknown, never a guess — h is Planck's constant
or a height, T a period or a temperature. unknown is not a pass.
noether eq 'T = 2 \pi \sqrt{\frac{L}{g}}' --units 'T=second,L=meter,g=meter/second**2' --vary 'L=0.1..2' --at 'g=9.81'
Reads papers. Ingests LaTeX source, so "equation 14" means the equation the authors numbered 14.
noether ingest 2001.11966
noether equations arXiv:2001.11966
noether find "vacuum Rabi oscillations"
Audits your draft. Resolves every \bibitem against arXiv, Crossref, OpenAlex and INSPIRE.
Exits non-zero on unresolvable references or cite keys with no bibliography entry, so it works as a
pre-commit hook.
noether audit path/to/your-paper.tex
Measured results
Run noether bench status yourself. As of the last run:
| gate | result | threshold | verdict |
|---|---|---|---|
| equations | 100% (31/31) | 90% | pass |
| retrieval | 83.3% (10/12) at top-3 of 58 papers | 80% | pass |
| citations | 86.5% (32/37) | 85% | pass |
| resolver | 0% false positives (0/8 fabrications) | ≤10% | pass |
Read these with their scope attached. "Right paper in the top 3" over 58 papers is a real task; over
8 it was nearly free, and an earlier run reported a meaningless 100% because top_k exceeded the
corpus size. The citation threshold is 85% rather than 100% because books, theses and pre-digital
articles are genuinely not in any index — the residual failures on the nEDM letter are a 1954 Danish
journal, a 1955 Pauli chapter and a 1982 Oxford book.
Use it from Claude
pip install "noether-physics[mcp]"
claude mcp add --scope user noether -- python -m noether.mcp_server
14 tools. Claude reasons and writes; NOETHER retrieves, checks and records. There is deliberately no
write_answer tool — the component that can hallucinate is not the component that decides what
ships.
Install
pip install noether-physics # core
pip install "noether-physics[quantum]" # + QuTiP simulations
pip install "noether-physics[mcp]" # + MCP server
Python 3.12+. From source: uv venv && uv pip install -e ".[dev,quantum,mcp]", then uv run pytest
(288 tests, no network — cassettes default to replay and a miss is an error, not a live fallback).
Terms
arXiv forbids bulk crawling. This fetches one paper at a time behind a 3-second interval and caches
permanently, so a given paper is downloaded exactly once. Every source, its rate limit and its terms
are declared in research/sources/source_registry.yaml; a source not in that file is not called.
No AI-generated imagery. Every figure is extracted from a real paper or rendered deterministically from code and data, and is tagged with which.
Licence
MIT — see LICENSE. Release history: CHANGELOG.md.
The name honours Emmy Noether. The PyPI distribution is noether-physics because noether belongs
to an unrelated physical-units library; the command is
noether either way.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file noether_physics-0.1.2.tar.gz.
File metadata
- Download URL: noether_physics-0.1.2.tar.gz
- Upload date:
- Size: 289.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
956ac810741de77c3cf5a7ca0a7f602d79f15b6d683d1681b57cb0b627f61c76
|
|
| MD5 |
24797430d07f5e4e570f29c4b813e686
|
|
| BLAKE2b-256 |
3ac7291679e081cf36ed1e5b17f5b53374b346f2de56866aa4081db849c57dad
|
File details
Details for the file noether_physics-0.1.2-py3-none-any.whl.
File metadata
- Download URL: noether_physics-0.1.2-py3-none-any.whl
- Upload date:
- Size: 149.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fe495d617aaff0bc63c78514b4a8c3f4a9b94d90f58b6c6d413c75dbd9c7882
|
|
| MD5 |
8fbaa787315f6907117e5572a0c00334
|
|
| BLAKE2b-256 |
4da8291be25aac85ebea5bbc44294b3cacbad85107798110435ef31c7be3addb
|