Skip to content

test: retire the apps-parity dumps, name tools, fixtures and tests by subject - #35

Merged
Paullo9 merged 33 commits into
mainfrom
issue-18-fixtures-by-subject
Oct 30, 2026
Merged

Paullo9 merged 33 commits into
mainfrom
issue-18-fixtures-by-subject

Conversation

@Paullo9

@Paullo9 Paullo9 commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Paul · project thread

Fixes #18

Merge #28 first. This branch has #28's branch merged in, so the conflicts between the two PRs are resolved here once; after #28 is squash-merged, merging main back in leaves only this PR's changes.

Fixture and tool cleanup for #18 (with #10 folded in). One commit per step; no number moved anywhere.

  • Apps-parity dumps retired: slice-2-apps.json, slice-3b-apps.json, slice-3b-apps-onone.json, slice-4-apps.json (about 15 MB), Slice4AppsParityTests, EllipseAppsParityTests, ScatteringPinsTests.testAppsBitForBit (and the beta'' site-list test) and tools/slice-*/apps-parity/. docs/parity.md marks P7, P10 and P16 retired. The SciPy sweep test read its plants from the 3b dump, so first the sweep fixture got its own plant and start fields, and sweep.py now renders the rings itself. The Python port hashes equal to the Swift renderer, and every optimum is byte-identical.
  • Named by subject: every fixture generator is now under tools/pins/<subject>/ (cells, conventional-cell, structure-factors, ring-calibration, ring-indexing, ellipse, phase-vectors, ring-display, plus the already subject-named orix, orientation-symmetry, presets, mp-import, cif-symmetry, acom-matcher). Fixtures are named <reference>-<subject>-pins.json, the refuter_* CIFs by what they hold, and the eight session-named test files after their API. consumer-check files are named by subject too. The renamed fixtures are byte-identical, and every script's resolved path was checked.
  • One example copy: tools/readme-consumer/Sources/readme-consumer is a symlink to Examples/diffracto-example, because SwiftPM refuses a target path: outside the package root. run.sh checks the link, and it passes.
  • Disabled real-data test: it now runs when its file exists under $MACEM_DATA and is skipped with a reason otherwise.
  • Python environment: CONTRIBUTING.md describes it once, with tools/pins/requirements/{pymatgen,orix,py4dstem}.txt. The pymatgen generators name a pymatgen venv, not the orix one.
  • One pymatgen-core version: the nine pymatgen-recording fixtures were regenerated on pymatgen-core 2026.10.16. A structural diff of each finds only version, Python, timestamp and generator-path fields changed.

Local: swift test -c release (fast and parity targets) green, tools/consumer-check/run.sh and tools/readme-consumer/run.sh pass, SwiftLint and SwiftFormat clean.

Follow-ups done in the last round (main and #28 merged in):

  • NOTICE names tools/pins/structure-factors/fetch-table.sh, tools/pins/cells/pins.py with pymatgen-cells-pins.json, tools/pins/orientation-symmetry/pins.py and tools/pins/orix/*-pins.py, and pymatgen-core 2026.10.16. README.md points at tools/pins/<subject>/ and CONTRIBUTING.md instead of tools/*/pins.py.
  • The renamed ring-calibration, ring-indexing and ellipse tools cite macTEM as "before v1.0.0 (history squashed)", as docs: NOTICE provenance, Materials Project and orix credits, README and CITATION for 0.10.0 #28 does elsewhere; the string literals in tools/pins/structure-factors/pins.py still name a58c84c because they are fixture bytes.
  • fetch-table.sh does not call a macTEM script: line 2 is a provenance comment.
  • CHANGELOG: release-please hides test/refactor/docs entries, so there is no visible line for "fixtures renamed, no number moved".
  • On Paul's Mac the pymatgen generators now expect ../References/python/pymatgen: build it from tools/pins/requirements/pymatgen.txt, or link it to the orix venv, which holds the same packages.

Local after the merges: swift test -c release --parallel --skip DiffractoKitParityTests green (170 Swift Testing tests plus the XCTest cases).

🤖 Generated with Claude Code

claude and others added 24 commits October 28, 2026 14:40
Comments in DiffractoCore cited registration sections, review rounds and
work sessions that are not part of this repository. They now say what the
code does, or name the module that does it. Comment-only change.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Comment-only change in DiffractoScattering: registration sections and
review rounds removed, "slice 1" named as DiffractoCore.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Comment-only change in DiffractoGeometry: registration sections, review
rounds, finding numbers and work-session names removed; "slice 1/2/3b"
named as DiffractoCore, DiffractoScattering or the file that does it;
"the owner" reworded.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Comment-only change in DiffractoOrientation: registration sections,
roadmap task numbers and the study step removed.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Comment, print and test-name text in DiffractoCoreTests: registration
sections, review rounds, tiers and work-session names removed; a missing
mutation script no longer cited; "registered" values renamed expected or
documented. The D17 tolerance rule is now described in words. Also two
leftover registration notes in DiffractoGeometry and macTEM's ADR numbers
named as macTEM's. No assertion changes.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
…repo

Comment, MARK and test-name text in DiffractoGeometryTests and
DiffractoScatteringTests: registration sections, the old roadmap,
review rounds and finding numbers, tiers and missing mutation scripts
removed; the archived camera-length plan no longer cited; "registered"
values renamed documented, quoted or predicted; "the owner's data" is
the maintainer's. No assertion changes.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Comment, suite-name and known-issue text in DiffractoOrientationTests,
DiffractoKitParityTests and DiffractoKitTestSupport: registration
sections, amendments, gates and work-session names removed or named by
subject; "registered" values renamed stated, documented or predicted.
The apps-parity tests are left as they are: #18 retires them. No
assertion changes.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Pin generators and tools READMEs: registration sections, the private
design note, the old roadmap, review rounds and the missing mutation
scripts (tools/kit-0.0.4/mutants-*.py, tools/slice-3b/mutants.py,
tools/kit-0.2.0/mutants-policy.py) no longer cited; the mutation results
stay as measured facts. Package.swift no longer names the missing
tools/test.sh. Only comments, docstrings and README text change: string
literals the generators write into fixtures are left as they are, so a
regenerated fixture stays byte-identical.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
…reader

status.md is one screen without test counts, open-items.md one plain
list (the venv note moves to CONTRIBUTING.md, the app-adoption note is
added), parity.md and benchmarks.md drop references to material outside
the repo, and a short public ROADMAP.md names the items parity.md cites.

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
macTEM's public history starts at v1.0.0, so its commits a58c84c and
9482831 cannot be found. NOTICE, the source comments and the tools now cite
"macTEM before v1.0.0 (history squashed)". NOTICE gains an orix entry (the
oracle for P26 and P36, no code copied into the library) and credits the
Materials Project fixtures under CC BY 4.0.

Part of #17

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
README: install pin 0.10.0, CI and docs badges, the Metal path and the
ImagoKit/Accelerate dependency, the module table up to 0.10.0 and two
Known limits lines reworded. CITATION gains version, date-released and orix,
and loses the ORCID TODO. The fixture README lists the orix misorientation
pins and credits the Materials Project files; the stray .keep is gone.

Part of #17

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
…ing)

Part of #16

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Part of #17

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWxuR53HJvmXUenLwd
# Conflicts:
#	CITATION.cff
#	NOTICE
#	Sources/DiffractoCore/ReflectionList.swift
#	Sources/DiffractoGeometry/ElectronWavelength.swift
#	Sources/DiffractoGeometry/RingCalibration.swift
#	Sources/DiffractoGeometry/RingIndexing.swift
#	Tests/DiffractoGeometryTests/RingCalibrationTests.swift
#	Tests/DiffractoGeometryTests/RingFitCalibrationTests.swift
#	Tests/DiffractoGeometryTests/RingIndexingTests.swift
#	Tests/DiffractoKitParityTests/Geometry/RingCalibrationPinsTests.swift
#	Tests/Fixtures/README.md
#	tools/slice-3/README.md
slice-3b-sweep.json now records each ring's plant (size, radius, eps, theta, gap, seed) and fit1D's start and annulus, and
tools/slice-3b/sweep.py renders the 20 rings itself (a line-for-line Python port of EllipsePlant with no noise; every ring's
FNV-1a hash equals the Swift renderer's). Reason: the sweep test read its plants from slice-3b-apps.json, the apps-parity
dump that #18 retires. No number moved: every optimum, hash and count is byte-identical; only the plant fields were added
and the dump index dropped.

Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deletes slice-2-apps.json, slice-3b-apps.json, slice-3b-apps-onone.json and slice-4-apps.json (about 15 MB) with their
tests (ScatteringPinsTests' testAppsBitForBit and the beta'' site-list test, EllipseAppsParityTests, Slice4AppsParityTests)
and generators (tools/slice-{2,3b,4}/apps-parity). Reason: they were bit-identity dumps of the apps' pre-port code
(mac4DSTEM 7d6fdbd1), holding the kit to frozen legacy output rather than to a reference, and regenerating them needed an
old app checkout. The Python pins (P4 to P6, P11, P14, P15) and the planted-truth tests hold the same functions.
docs/parity.md marks P7, P10 and P16 retired; the fixtures README drops the four rows (and gains the missing
orix-misorientation row).

Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One move, no number changed: every fixture is byte-identical under its new name.

- Generators: tools/slice-1, slice-1b, slice-2, slice-3, slice-3b, slice-4, kit-0.0.4 and mactem-pieces become
  tools/pins/{cells, conventional-cell, structure-factors, ring-calibration, ring-indexing, ellipse, phase-vectors,
  ring-display}; the subject-named orix, symmetry (now orientation-symmetry), presets, mp-import, cif-symmetry and
  acom-matcher move under tools/pins too, so every fixture generator lives in one place. Each script's root path is one
  level deeper; every resolved path was checked.
- Fixtures: slice-*-pins.json become <reference>-<subject>-pins.json (pymatgen-cells, spglib-conventional-cell,
  numpy-structure-factor, numpy-ring-calibration, numpy-ring-indexing, scipy-ellipse-sweep, py4dstem-phase-vector); the
  review CIFs refuter_* are named by what they hold (magnesium_P1_origin_shifted.cif and so on). The fixture folders and
  FixtureDirs are unchanged.
- Tests: Slice1bSupport, KitAsks0100Tests, ToleranceFixesTests, ACOMKitAsksTests, PhaseVectorReviewFindingTests,
  RingFitAmendmentTests, PolicyFixesTests and Slice4PinsTests (with its G2 to G4 suites) are named after the API they
  test; consumer-check's Geometry004, MacTEMPieces and Release0100 files after their subject.
- docs/parity.md, the fixtures README and the "Generated by" lines of three generated sources follow.

Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tools/readme-consumer's target is now a symbolic link to Examples/diffracto-example, so the README's program exists once
in the repository (the README block aside) instead of three byte-identical times. SwiftPM refuses a target `path:`
outside the package root, so the link stands in for it; run.sh checks the link and compares the example with the
README, and the consumer package still builds from outside the kit against the public API only.

Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
testRinglessFitOnARealMeanPatternFallsBackToTheConic was .disabled; it is now enabled when its file exists under
$MACEM_DATA (default ../data beside the checkout) and skipped with a reason otherwise, the kit's rule for real-data
tests. The file is still absent everywhere (its manifest line is pending), so CI skips it as before.

Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e per oracle

CONTRIBUTING.md describes the three venvs (pymatgen with spglib, orix, py4DSTEM) and how to build them from a fresh
clone with tools/pins/requirements/{pymatgen,orix,py4dstem}.txt, which pin the versions the committed fixtures were
made with. The pymatgen generators now name a venv called pymatgen instead of the orix one they ran in.

Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reason: the fixtures recorded pymatgen-core 2026.9.23 (an earlier venv) while the reference environment holds 2026.10.16;
every fixture that records a pymatgen-core version now records 2026.10.16. Regenerated with tools/pins:
pymatgen-cells, spglib-conventional-cell, tetragonal, numpy-structure-factor, mp-import, presets, py4dstem-phase-vector,
symmetry and py4dstem-family-real pins. No number moved: a structural comparison of each old and new file finds only the
version, Python, timestamp and (phase-vector pins) generator-path fields changed. The generators' version asserts and the
tests that read the recorded versions follow (pymatgen-core 2026.10.16, Python 3.12, and NumPy 2.5.4 / SciPy 1.18.1 in
the py4DSTEM venv).

Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Paullo9 Paullo9 self-assigned this Oct 29, 2026
Paullo9 and others added 5 commits October 29, 2026 15:37
Part of #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…links and 0.0.3

Every version heading is `## [x.y.z](compare link) (date)`, the form
release-please writes from 0.11.0 on, so the file reads as one list.
0.3.0, 0.1.1 and 0.1.0 get their tag dates, 0.0.3 gets a pre-release
entry, and the "archived" lines and internal ask and task numbers are
gone. The CI tag check's regex already reads both heading forms
(`^## \[?v?x.y.z`), so ci.yml is unchanged; it reads 0.10.0 here.

Done: the CHANGELOG bullet of #17. Next: Paul merges #28.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both lines carry an x-release-please-version annotation and the files are
release-please extra-files, so the Release PR moves them with the
manifest. CITATION's date-released stays a hand edit in the Release PR.

Done: the CITATION 'bumped with every tag' bullet of #17. Next: Paul merges #28.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paullo9 and others added 4 commits October 29, 2026 23:16
…-subject

Resolves the conflicts between the two PRs once: the renamed tools keep
#28's provenance wording ("macTEM before v1.0.0 (history squashed)"),
the fixture README keeps the renamed table with #28's Materials Project
credit, and the two old slice READMEs stay deleted (their text lives in
tools/pins/ring-calibration and tools/pins/ring-indexing). NOTICE and
README now name the tools/pins paths and pymatgen-core 2026.10.16.

Done: #18's NOTICE and README follow-ups. Next: Paul merges #28, then this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
main's #28 is already in this branch; its later line-wrap edits are superseded by the renamed files here, and the
retired tools/slice-3 and slice-3b READMEs stay deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkKZEWLQDNR7GTJSa5geSZ
@Paullo9
Paullo9 merged commit f0dd2ec into main Oct 30, 2026
6 checks passed
@Paullo9
Paullo9 deleted the issue-18-fixtures-by-subject branch October 30, 2026 10:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tools and fixtures: retire the apps-parity dumps, name the rest by subject

2 participants