🎉 Release: merge develop into master#214
Merged
Merged
Conversation
* Update background-auto-estimate plan after review cycle * Promote background-auto-estimate ADR to accepted * Add pybaselines dependency * Add BackgroundEstimatorMethodEnum * Add background curve estimator helper * Add clear method to CollectionBase * Add auto_estimate to LineSegmentBackground * Reach Phase 1 review gate * Guard auto_estimate against empty active data * Make n_points cap deterministic at zero noise * Validate auto_estimate numeric overrides * Update ADR to match Phase 1 helper contract * Apply pixi run fix auto-fixes * Use list.extend in RDP stack updates * Add unit tests for background estimator helper * Add auto_estimate lifecycle tests * Add CollectionBase.clear() invariant tests * Add functional tutorial-corpus test for auto_estimate * Add TOF tutorial-corpus case for auto_estimate * Apply ruff format to auto_estimate tests * Document automatic background estimation in the user guide * Apply pixi run fix auto-fixes * Compare auto_estimate against tutorial background curve * Assert adapter dispatch and clipping in auto_estimate tests * Simplify background estimation with auto_estimate method * Record narrower Phase 2 calibration outcome in docs * Simplify background setting by using auto_estimate method * Document the empty-data exception to the overwrite contract * Simplify background estimation with auto_estimate method * Estimate background after excluding regions in ed-2 tutorial * Regenerate ed-6 notebook for auto_estimate conversion * Regenerate ed-20 notebook for auto_estimate conversion * Enhance table rendering: prevent cell wrapping for wide tables --------- Co-authored-by: andrewsazonov <andrewsazonov@andrewsazonovs-Virtual-Machine.local>
* Update tutorial baselines for auto_estimate background * Add lint-rule-audit implementation plan * Correct safe vs unsafe fix counts in audit plan * Add lint-rule audit regeneration helper * Reach Phase 1 review gate * Scope only docs/docs/tutorials paths as tutorials * Add unit tests for lint_rule_audit helper * Apply pixi run fix auto-fixes * Fix bold-emphasis artifact in audit plan headline * Remove dead lint ignores (Priority 0 cleanup) * Update suggested PR text for Priority 0 cleanup * Enable D100/D104 and add missing source docstrings * Reconcile audit plan with P1a docstring enablement * Update plan scope and file list for P1a * Fix DTZ005 timestamp and enable TD004/TD005 TODO rules * Record P1b in audit plan roadmap * Mark P1b landed in remaining plan sections * Enable I001/E501/F841 and clean flagged test sites * Record P1c in audit plan; Priority 1 complete * Reflect full Priority 1 completion in plan scope and PR text * Apply prettier comment alignment to pyproject.toml * Adopt PLR sub-codes and PLW rules in tests (D1) * Record D1 (PLR/PLW adoption) in audit plan roadmap * Route src diagnostics through Logger and enable T20 (D2) * Record D1 and D2 in audit plan summaries * Update scope for D2; record D3-D5 keep-disabled rationale * Mark remaining tiers keep-disabled across plan; resolve T201 Q * Apply pixi run fix auto-fixes
* Add test-suite-and-validation ADR suggestion
* Update test-suite-and-validation ADR and index from review
* Add test-suite-and-validation implementation plan
* Make codecov patch informational and gate project at 80%
* Replace fast marker with pr and nightly test tiers
* Select test tiers per trigger across all test layers
* Gate unit-test structure check on shared src tree walk
* Document strict test layer placement criteria
* Relocate network and engine tests to correct layers
* Document integration layer defaults to pr tier
* Add hypothesis deterministic profile and shared test fixtures
* Add property-based input-domain tests for validators
* Raise coverage fail_under to 80 percent
* Add strict docs build and spell check on every push
* Add calculator support matrix query for verification
* Add cross-engine verification comparison pages and script wiring
* Add per-experiment performance benchmarks (nightly)
* Record cross-repo nightly harness and benchmarks as future work
* Promote test-suite-and-validation ADR to accepted
* Reach Phase 1 review gate
* Run pr tier on pull_request events, not only main branches
* Share excluded-dirs set between structure check and docs
* Add lychee link check to the docs gate
* Run verification notebooks in notebook test and exec tasks
* Assert explicit tolerances for all verification metrics
* Run full suite across all tiers in the nightly workflow
* Scope verification to CWL powder now, defer rest to issue 115
* Lint and format verification pages like tutorials
* Apply pixi run fix auto-fixes and resolve lint findings
* Tighten cross-engine verification tolerances from measurement
* Render small canvas in raster tests to speed them up
* Add icon to the Verification docs section
* Fix tabel typo in docs CSS comments
* Fix promoted ADR links to documentation-ci-build
* Scope codespell and lychee to pass on real sources
* Run docs checks (spell, link, strict build) with the checks
* Reflow ADR prose after link fix
* Make check static-only and add full pre-PR all task
* Always build docs strictly; drop docs-build-strict
* Gate docstring coverage as a check, not in coverage.yml
* Restore logger reaction mode in validation-properties test
Add an autouse fixture that snapshots and restores Logger._reaction
so the WARN mode set by _warn() cannot leak into later raise-expecting
tests (e.g. core/test_guard, core/test_parameters).
* Expand unit-test coverage across analysis, display, report
Add and extend supplementary coverage tests for analysis (analysis,
fitting, minimizers/base), display (plotting, progress), report
(data_context, html_renderer), background estimate, and the package
__main__ entry point. Raises overall unit coverage to ~84.5%.
* Add coverage tests for tex_renderer, iucr_writer, serialize, tracking
Supplementary unit tests lift tex_renderer 67->100%, iucr_writer
84->97%, cif serialize 83->96%, and fit tracking 78->98%. Overall unit
coverage rises to ~86.3%.
* Add coverage tests for project display, logging, utils, experiment item
Supplementary unit tests lift project/display 73->100%, utils/logging
76->99%, utils/utils 86->99%, and experiment item/base 76->99%. Overall
unit coverage rises to ~87.8%.
* Add coverage tests for plotting, analysis, plotly, project
Supplementary unit tests lift display/plotting 82->93%, analysis 82->94%,
plotters/plotly 78->97%, and project/project 80->100%. Overall unit
coverage crosses 90% (90.0%).
* Add coverage tests for sequential, environment, sidecar, collection
Supplementary unit tests lift analysis/sequential 53->99%,
utils/environment 69->95%, io/results_sidecar 81->99%, and experiment
collection 47->100%. Overall unit coverage rises to ~91.4%.
* Add docstrings across analysis, datablocks, display modules
Document previously-undocumented methods, properties, setters, and
__init__s across analysis (categories, minimizers, fit_helpers,
calculators), datablocks/experiment (peak, instrument), and display.
Raises docstring coverage from 86.2% to 94.4% (interrogate).
* Fix diagonal-shape call in single-crystal predictive plot
_plot_single_crystal_posterior_predictive_summary called
PlotlyPlotter._get_diagonal_shape() with no arguments, but the method
requires (minimum, maximum); the reflection-check plot raised TypeError
whenever reached. Compute the shared axis range via
single_crystal_axis_range (matching build_single_crystal_figure) and
pass it through. Adds a test covering the now-working build path.
* Make relative-destination zip test hermetic
test_relative_destination_does_not_depend_on_current_project relied
on a sibling test leaving EASYDIFFRACTION_ARTIFACT_ROOT cleared; it
failed in isolation because the configured artifact root rooted the
relative destination under tmp/tutorials instead of the cwd. Clear the
env var in the test so the cwd-resolution branch is exercised
deterministically.
* Harden unit-test gate: random order, state reset, 88% floor
Add pytest-randomly so unit tests run in randomised order (they ran
single-process in deterministic alphabetical order, which hid ordering
bugs). Add a tests/unit autouse fixture that snapshots and restores the
Logger reaction/mode and the environment around every test, enforcing a
clean RAISE baseline so no test can leak global state forward. Raise the
coverage floor from 80% to 88% (currently 91.4%).
* Fix two unit tests that relied on leaked WARN logger mode
test_extinction_model_invalid (expects invalid input to fall back and
keep the current value) and Structures test_show_params (expects the
None-not-callable TypeError) only passed when an alphabetically-earlier
test had leaked Logger WARN mode. Set WARN explicitly in each so they
pass deterministically under randomised order.
* Add open issue: static type checker in the quality gate
Record issue 116 — adding mypy/pyright/ty would have caught the
wrong-arity _get_diagonal_shape call at lint time. Notes an incremental
rollout to manage the initial backlog.
* Record pytest-randomly dependency approval in the plan
Verify-review-1 finding 1: pytest-randomly was not in the plan's
pre-approval list. It was approved by direct user request in the
conversation (AGENTS.md §Architecture first approval path), so it need
not be removed; record that approval in the plan's Decisions section for
traceability.
* Skip integration tests on the fast tier instead of failing
On feature-branch pushes the tier selection is 'not pr and not
nightly'. Every integration test is auto-marked pr, so the selection is
empty and pytest exits 5 ('no tests collected'), failing the step under
set -euo pipefail. Add a run-pr-tier output from env-prepare and gate
both integration-test steps (source-test and package-test) on it, so
integration runs only in the pr tier (PRs + develop/master) as designed
and is cleanly skipped otherwise.
* Fix two Windows-only failures in coverage tests
test_print_path_is_stringified hardcoded a POSIX path; str(Path) uses
backslashes on Windows. Compare against str(Path(...)) instead.
test_read_posterior_payload_reads_aux_arrays intermittently hit
FileNotFoundError creating an HDF5 file in a fresh tmp dir on Windows CI
(all sibling h5py tests share the pattern and passed, so this is an
environmental flake). Force the parent dir to exist and pass a str path
to remove the deterministic vectors.
* Use in-memory HDF5 for low-level sidecar unit tests
The low-level sidecar helpers (_create_dataset, _read_dataset,
_read_payload_group, _write_payload_group, _read_posterior_payload) take
an open h5py handle and don't care whether it is disk-backed. Writing
real .h5 files to tmp_path dragged the platform filesystem into these
unit tests and caused an intermittent Windows ENOENT on file creation.
Add an _in_memory_h5() context manager using h5py's core driver
(backing_store=False) and route the 10 low-level tests through it: no
disk, no paths, hermetic, faster, and immune to FS flakiness on every
platform. Real on-disk tmp_path files remain only for the two
public-API tests that read a sidecar from a directory. Replaces the
mkdir+str band-aid; module coverage unchanged at 99%.
* Scope display_path relative_to patch to the target only
test_display_path_falls_back_to_absolute monkeypatched
pathlib.Path.relative_to to raise unconditionally, to simulate the
different-Windows-drive case (which POSIX cannot reach with walk_up).
That global patch also broke pytest's own relative_to call in its result
reporter (cwd_relative_nodeid -> bestrelpath), which only runs when the
invocation dir differs from the rootdir -- i.e. the package-test job
(pytest ../tests/unit from a subproject), crashing it with INTERNALERROR
'on a different drive'. Make the fake raise only for the resolved target
path and delegate every other call, so pytest internals keep working
while the except-ValueError fallback is still exercised cross-platform.
* Add test-suite-and-validation ADR suggestion * Update test-suite-and-validation ADR and index from review * Add test-suite-and-validation implementation plan * Make codecov patch informational and gate project at 80% * Replace fast marker with pr and nightly test tiers * Select test tiers per trigger across all test layers * Gate unit-test structure check on shared src tree walk * Document strict test layer placement criteria * Relocate network and engine tests to correct layers * Document integration layer defaults to pr tier * Add hypothesis deterministic profile and shared test fixtures * Add property-based input-domain tests for validators * Raise coverage fail_under to 80 percent * Add strict docs build and spell check on every push * Add calculator support matrix query for verification * Add cross-engine verification comparison pages and script wiring * Add per-experiment performance benchmarks (nightly) * Record cross-repo nightly harness and benchmarks as future work * Promote test-suite-and-validation ADR to accepted * Reach Phase 1 review gate * Run pr tier on pull_request events, not only main branches * Share excluded-dirs set between structure check and docs * Add lychee link check to the docs gate * Run verification notebooks in notebook test and exec tasks * Assert explicit tolerances for all verification metrics * Run full suite across all tiers in the nightly workflow * Scope verification to CWL powder now, defer rest to issue 115 * Lint and format verification pages like tutorials * Apply pixi run fix auto-fixes and resolve lint findings * Tighten cross-engine verification tolerances from measurement * Render small canvas in raster tests to speed them up * Add icon to the Verification docs section * Fix tabel typo in docs CSS comments * Fix promoted ADR links to documentation-ci-build * Scope codespell and lychee to pass on real sources * Run docs checks (spell, link, strict build) with the checks * Reflow ADR prose after link fix * Make check static-only and add full pre-PR all task * Always build docs strictly; drop docs-build-strict * Gate docstring coverage as a check, not in coverage.yml * Add cross-engine verification helper module * Add pattern_comparison display method * Add FullProf cross-engine verification pages * Gate cryspy TOF Jorgensen-Von Dreele discrepancy * Exclude FullProf reference data from codespell * Add CI-skip list for verification notebooks * Drop failing cryspy TOF gate; pages show the discrepancy * Group verification pages by experiment type * Fix comparison hover and residual labels to match legend * Fix stale strict-gate notes on TOF verification pages * Validate comparison arrays against the experiment x grid * Strip trailing whitespace from si_tof.sub header * Wire relocated skip conftest to verification ci_skip * Describe verification engines once, not per page * List peak profile and asymmetry per verification page * Add skipped LaB6 SyCos/SySin verification skeleton * Add calculation-without-measured-data ADR suggestion * Add reflection comparison plot and fix residual hover * Add single-crystal verification helpers and parsers * Restructure verification suite and relocate references * Add FullProf reference comparison to LBCO page * Add FullProf examples * Remove empty notebook cell and trailing comment * Update verification CI skip list * Reflow documentation and comments * Remove unused publication and rendering directories from package structure * Record lint-rule audit decisions as an accepted ADR * Remove implemented plans from docs/dev/plans * Fix ci_skip stem so asymmetry page is skipped in CI * Add SC verification tests and FullProf length validation * Fix engine order and drop empty cell in Si page * Clarify LaB6 verification page features are not yet applied * Add before/after refinement closeness helper * Investigate PbSO4 asymmetry disagreement by refinement * Add live-notebook Plotly loader implementation plan * Vendor Plotly bundle and figure loader into the package * Expose re-callable edFigures.activate for live notebooks * Exclude vendored plot assets from prettier * Add renderSpec direct-render entry to the figure loader * Render live figures through the self-hosted loader * Record live-notebook Plotly delivery options as issue 117 * Mark live-notebook Plotly loader Phase 1 complete * Trim top margin of live-notebook figures * Preload Plotly runtime on import for instant live plots * Revert "Preload Plotly runtime on import for instant live plots" This reverts commit ac61d83. * Skip resize observer for live-notebook figures * Reserve explicit figure height for JupyterLab windowing * Defer live figure render until the container has a size * Revert VISA-specific live-figure tweaks, keep self-hosted runtime * Record VISA Plotly empty-rows investigation as issue 118 * Compare verification patterns on absolute scale Drop peak-normalisation in pattern_closeness: metrics are computed on absolute intensities so a seeded FullProf scale gives a real scale comparison. Rename max_deviation -> max_deviation_percent, make the intensity ratio the absolute area ratio, relabel it "Area ratio" and correlation "Shape correlation" to mark the scale vs shape axes, and tighten the default tolerances. Remove the scale_to_reference and report_reference_scales helpers. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Plot verification comparisons at absolute scale Drop peak-normalisation in plot_calc_comparison and plot_reflection_comparison so the overlay and the F-squared scatter show the true absolute scale; remove the now-unused _peak_normalized helper. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Update verification metric tests for absolute scale Rename the max_deviation field, flip the scale-independence test to assert the metrics now reflect absolute scale, and update the tolerance defaults. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Rework verification pages for absolute-scale comparison Seed each page with the FullProf .pcr scale and compare on absolute intensities; annotate every input with its FullProf parameter name. Where an engine then disagrees, add a per-engine refinement that frees the differing parameter (asymmetry on asym-PbSO4, the Lorentzian gamma and scale on Si, scale on NCAF and Pr2NiO4) and reports the before/after closeness. Point lab6 at the new background-free FullProf .sub, keep its SyCos/SySin lines ready to uncomment, and skip NCAF in CI while its TOF scale convention is refined. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add verification absolute-scale plan Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add new validation example * Update LaB6 example * Build FullProf .sub grid from the intensity count Reconstruct the x grid from the number of intensities rather than the header maximum, so a maximum rounded a fraction of a step off (a common FullProf quirk, hit by the Jorgensen Si .sub) no longer adds a spurious point; keep the header maximum as a one-step sanity check. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add Jorgensen TOF Si verification page Verify the plain Jorgensen TOF profile (Gaussian plus back-to-back exponentials, no Lorentzian) for Si against FullProf. Both engines diverge from FullProf's Jorgensen shape, so the page seeds the .pcr scale, reports the absolute comparison, and refines the broadening terms and scale with cryspy to quantify the residual. Skipped in CI like the other report-only TOF pages. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Make report_refinement_closeness display-only Return nothing so a notebook cell ending in the call shows only the rendered before/after table, not an echoed metrics tuple; callers that need the numbers use pattern_closeness directly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Update notebooks * Update fullprof projects * Add verification-exec task to run verification notebooks * xfail rather than skip CI-listed verification notebooks Mark the verification pages listed in ci_skip.txt as xfail(strict=False) instead of skip, so nbmake still executes them — they render in the docs and --overwrite writes their outputs — while a known discrepancy or pending-feature page stays an expected failure rather than a suite failure. The script-test runner still skips them as the fast regression check. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Make verification pages consistent in structure Give every page the same cell order and section headers, move project creation into its own cell, drop the asym Conclusion cell, normalise the FullProf comment spacing, and correct the ncaf/asym descriptions (they are investigation pages, not script-test regression checks). Parameter values are unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Refactor comments for clarity in structure definition * Reflow comments and docs to line-length limit * Guard FullProf profile loader against empty input * Remove implemented plans from docs/dev/plans * Align empty-input error message and test * Guard empty profile body before genfromtxt * Make bundled_reference_dir test CWD-independent * Add issue 119: rename asym_empir and add FCJ model * Gate TOF scale-only verification pages as strict pass --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…FullProf verification suite (#197) * Add cwl-sample-displacement-transparency implementation plan * Add CWL sample displacement and transparency parameters * Emit SyCos/SySin offsets in cryspy CWL instrument CIF * Update cryspy dict with SyCos/SySin offsets * Note crysfml lacks SyCos/SySin instrument corrections * Enable SyCos/SySin corrections in LaB6 verification page * Reach Phase 1 review gate * Strip isotope number from atom symbol for crysfml * Refine SyCos/SySin and use 11B in LaB6 verification page * Restructure LaB6 page: compare engines, then refine cryspy * Drop Zero offset from LaB6 page to match other pages * Add public Analysis.calculate() method Mirrors fit() as the non-fitting trigger that refreshes structures and experiments so experiment.data.intensity_calc reflects current params. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Refactor FullProf verification loaders for project-dir API Loaders take (project_dir, file) and hide bundled_reference_dir; add load_fullprof_calc_profile for .prf Icalc minus real .bac background, handling both .bac layouts (two-column and header+flat-array). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add lazy pattern recalculation ADR suggestion Proposes a dirty-flag + compute-once-per-change lazy recompute of the calculated pattern so explicit calculate() becomes optional. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Freeze FullProf .pcr files and regenerate bundled references Zero all refinement codes (and remove VARY/BKG auto-refine keywords) so fp2k recomputes at fixed values; regenerate .prf/.bac/.sub references. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Record sample-absorption modelling gap in open issues Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Rework CWL verification notebooks to canonical structure Per-engine sections with constants read from the frozen .pcr, Load reference after Define-structure, explicit project.analysis.calculate(), engine-specific profiles (SyCos/SySin, TCH-FCJ) in their own sections. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Rework TOF Si verification notebooks to canonical structure Constants from frozen .pcr, per-engine sections, fit both engines for the TOF scale convention with after-fit agreement. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Replace NCAF reference with single-pattern FullProf data Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Rework remaining verification notebooks to canonical structure Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Show fit results and drop redundant calls in verification pages Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Apply formatting and lint fixes to analysis modules Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Register verification pages in nav and refine skip list Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Reflow SyCos correction comment to line-length limit Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Refactor FullProf loaders to satisfy complexity and lint Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Apply pixi run fix auto-fixes Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Update verification loader tests to project-dir API Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Test CWL sample displacement/transparency parameters Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Test cryspy SyCos/SySin CIF and dict mapping Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Skip NCAF verification page (tabulated IRF mismatch) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Remove implemented cwl-sample-displacement-transparency plan Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Remove implemented test-suite-and-validation plan Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Comment out cryspy develop branch * Add Jorgensen Si verification page to docs nav Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Update verification index for canonical pages Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Re-theme metrics box background on dark-theme switch Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Generalize refinement wording in verification index Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Split nightly tests into per-tier steps with output checks Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Align pypi-test concurrency group with nightly Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Drop dead env vars and report all tiers in pypi-test Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Rename nightly.yml to nightly-test.yml Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add calculation-without-measured-data implementation plan * Promote calculation-without-measured-data ADR to accepted * Add data_range category package * Expose data_range on experiment items * Add derived sinθ/λ and d-spacing views to data_range * Guard data_range and subsume measured_range * Generate powder calculation grid from data_range * Add calc-without-data guards for single crystal and total * Show background and bragg for calculated-only patterns * Document data_range and calculated-only workflow * Reach Phase 1 review gate * Return live descriptors from data_range axis getters * Omit data_range from CIF when measured data is present * Rebuild generated grid when data_range changes * Raise a clear error for an inverted data_range grid * Use floor semantics so the grid stays within x_max * Cap default CWL 2theta range below the backscattering limit * Reject fitting an experiment without measured data * Write finite placeholders for cryspy calc-only measured loop * Render background on calculated-only patterns * Skip CIF data loop for a generated calc-only grid * Align ADR decision 8 with the deferred Bragg row * Update suggested PR text to shipped calc-only behaviour * Consolidate the has-measured-data predicate on the experiment * Judge measured-data existence on unfiltered points * Judge total-scattering measured data on unfiltered points * Add bkg legend color to the ASCII plotter * Add calculate-without-measured-data tutorials and docs * Set d-to-TOF Zero offset in NCAF verification page * Render the Bragg-peaks panel for calculated-only patterns * Use consistent FullProf Zero for TOF verification, drop .sub * Remove orphaned FullProf .sub files from verification suite * Add fullprof_version helper and v8.40 .sum version sources * Restrict pattern comparison to non-excluded regions * Add fullprof_label helper for one-line legend labels * Show FullProf version and excluded regions in TOF pages * Refine ed-28 TOF calculation-without-data tutorial * Update notebooks * Prune FullProf verification projects to needed files * Set calculator type first in verification comparisons * Stop emitting blank JS theme probe during report save * Force recompute so structure edits reflect on calculate * Update tutorials * Remove outdated section on calculating patterns without measured data * Update agreement tolerances and test cases for improved accuracy * Apply sentinel default on CIF load without re-validating * Add support for β-tensor anisotropic displacement parameters * Refresh Without Measured Data tutorials section * Apply pixi run fix auto-fixes * Wrap long doc comments to satisfy lint * Document _require_measured_data argument * Format docs with prettier and regenerate package diagrams * Add unit tests for the data_range category * Serialize NaN numeric values as the CIF unknown marker * Update experiment-base tests for data_range-backed range * Update display tests for calc-only pattern API * Combine None/NaN CIF unknown-marker branches * Add calc-only matrix integration tests for both engines * Mark Phase 2 verification complete in plan
* Keep table header divider matching the border in Jupyter and docs * Renumber open issues and refresh summary table * Mark sample-displacement correction in progress * Refine adp-beta-tensor plan and drop review history * Add ADP creation-API UX follow-up issue * Add reciprocal-cell length helper * Expand adp-beta-tensor plan: CIF round-trip and helper reuse * Add beta member to AdpTypeEnum * Support beta tensor in atom_site_aniso category * Convert ADP values to and from the beta tensor * Pass beta tensor straight through to cryspy * Emit beta tensor in the atom_site_aniso CIF loop * Round-trip beta tensor through the project CIF serializer * Reuse shared reciprocal helper in structure builder * Reach Phase 1 review gate * Add recommended-priorities work proposal Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Update prnio.pcr * Fix stale equivalent-iso B for beta-tensor atoms * Explain tolerant parent walk in aniso display units * Note beta equivalent-iso and report-units Phase 2 checks * Add tbti verification example * Update prnio example * Add new example * Update example * Add new verification examples * Refactor _apply_adp_symmetry_constraints to accept called_by_minimizer parameter * Send beta atoms to cryspy in U notation * Use beta tensor directly in single-crystal verification examples * Satisfy lint and docstring checks for beta tensor * Wrap over-length comments in pandas table styler * Add beta tensor tests: reciprocal helper, conversion, display, cryspy * Add CIF template for Pr2NiO4 and update PCR parameters * Add beta tensor tests: CIF round-trip, family, builder, report units * Update notebooks * Refactor in-house calculation engine documentation for clarity and consistency * Update Tb₂Ti₂O₇ verification details for clarity and consistency * Add entry to CI skip list for sg-neut-cwl_ext-iso_tbti due to asymmetry type differences * Add cryspy beta U-notation stash/restore regression test * Fix report units routing so beta suppression actually applies * Mark Phase 2 verification complete in adp-beta-tensor plan * Fix comment formatting for clarity on cryspy isotropic extinction * Support inline create(adp_type=...) for anisotropic atoms * Set adp_type='beta' inline in single-crystal verification examples * Add plan-required beta tests (iso->beta, Bani->beta, diagonal guard, B_eq, header) * Document the dual beta->cryspy path (passthrough + CIF relabel) * Update navigation in mkdocs.yml * Respect Jupyter dark mode via the shared figure loader The live-notebook loader (ed-figures.js) could not detect JupyterLab's theme and only re-coloured annotation fonts, so the comparison plot's metrics box kept its baked light-grey background in dark mode. Teach the loader to detect the JupyterLab (and baked) theme, re-theme the metrics box background and border, and observe the Jupyter theme attributes. Make the loader the single source of theme-sync, resize, and the legend toggle: expose those entry points on window.edFigures and have the standalone/report HTML path delegate to them, deleting the duplicated inline post-scripts that had drifted out of parity. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add minimizer ADP-constraint bypass regression test Cover the called_by_minimizer branch of _apply_adp_symmetry_constraints on a cubic special position: the minimizer path applies a symmetry- averaged, out-of-range tensor value raw (via _set_value_from_minimizer) without aborting, while the interactive path still validates and raises. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Document the minimizer ADP-constraint validation bypass Record decision 7 in the plan and a matching ADR Extension bullet: the symmetry-constraint pass writes aniso tensor components via _set_value_from_minimizer during a fit, bypassing the diagonal range validator so a transiently out-of-range averaged value cannot abort the refinement. The interactive path keeps full validation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Record inline-create and dark-mode additions in the plan Document the two user-requested in-scope additions that landed beyond the original checklist: inline create(adp_type='beta') ergonomics and the Jupyter dark-mode / shared-figure-loader fix. Update the Suggested PR section to mention both benefits. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Decouple the figure helper loader from include_plotlyjs A standalone snippet with external Plotly (include_plotlyjs=False) was left without window.edFigures, silently dropping theme sync, resize, and the legend toggle. Embed the shared loader by default via a new include_helper_loader flag; the report renderer opts out only for figures after the first so the loader is still embedded once per page. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Refine documentation for PbSO₄ and LaB₆ entries --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…der samples (#200) * Add preferred-orientation-category ADR suggestion * Add preferred-orientation-category implementation plan * Add pref_orient preferred-orientation category * Expose preferred_orientation on Bragg powder experiment * Emit texture loop in cryspy experiment CIF * Pass preferred-orientation through cryspy cache * Write preferred-orientation loop in IUCr report * Promote preferred-orientation-category ADR to accepted * Reach Phase 1 review gate * Scope cryspy texture emission to constant wavelength * Bind preferred-orientation l property without noqa * Rename preferred-orientation direction to index_h/k/l * Align plan and ADR with CW-only index_h/k/l wiring * Add preferred-orientation unit tests * Apply pixi run fix auto-fixes * Format preferred-orientation ADR and plan with prettier * Add LBCO preferred-orientation cross-engine verification * Map preferred-orientation r to cryspy g1=1/r * Use both March-Dollase parameters in LBCO verification * Correct ADR: cryspy is March-Dollase with g1=1/r * Align march-lbco notebook titles and set fraction in create * Document cross-engine preferred-orientation parameter map * Wrap _march_r_to_cryspy_g1 docstring within doc-length limit * Refine only scale in march-lbco fit section * Document crysfml r/fraction mapping for future PO wiring * Rename pref_orient params to march_r and march_random_fract * Update notebook * Document preferred orientation in user guide and verification TOC * Apply docstring formatting to _march_r_to_cryspy_g1 * Refine preferred-orientation parameters in march-lbco verification * Document cryspy March-Dollase convention in march-lbco notebook * Fix ADR pass-through pseudocode to show 1/r and label matching * Update plan create example to march_r/march_random_fract * Add preferred-orientation CIF round-trip test * Align plan Phase 2 wording with final verification behaviour
* Remove unused _allowed_attrs guard helper * Remove dead pair-plot height helper and unused constants * Remove unused DEFAULT_CREDIBLE_INTERVAL_LEVELS alias * Extract _summary_parameters_by_datablock helper * Remove unused _set_created mutator * Remove never-wired lmfit iteration callback * Fix stale API and inconsistencies in user docs * Standardize single-crystal label on sc- in docs * Promote documentation-ci-build ADR to accepted * Add documentation-snippet-tests implementation plan * Add model-sample-absorption ADR suggestion * Apply prettier formatting to ADR, plan, and issue docs
* Promote model-sample-absorption ADR to accepted * Add model-sample-absorption implementation plan * Add absorption switchable category package * Wire absorption category into powder experiment owner * Add Hewat cylindrical absorption factor helper * Restrict cylinder-hewat absorption to constant wavelength * Apply absorption correction in cryspy and crysfml backends * Confirm absorption category round-trips in experiment CIF * Document sample-absorption parameters * Reach Phase 1 review gate * Export absorption metadata in IUCr powder report * Keep absorption type consistent when CIF tag is rejected * Point plan ADR link at the accepted ADR * Apply pixi run fix auto-fixes * Add unit tests for absorption category and helper * Restore literal formula text in implementation plan * Test absorption application in cryspy and crysfml backends * Model absorption in LaB6 verification page * Assign exception message in crysfml absorption test * Document scoped outcome for absorption verification page * Add LaB6 no-FCJ verification page demonstrating absorption * Reference no-FCJ absorption demonstration page in plan * Record linux-x86_64 tutorial benchmark run
* Restructure issue tracker into per-issue files with index Split open.md/closed.md into one Markdown file per issue under issues/open/ (named <priority>_<title>.md) and issues/closed/ (<title>.md). Re-tier priorities across the five [priority] labels, generate issues/index.md (open ordered by priority + closed tables), move per-issue rationale into the issue files, and repoint references that pointed at the removed open.md/closed.md. * Close nine issues resolved or invalidated in current code Re-verified all open issues against the codebase and moved nine to closed/: #3 (joint-fit weight rebuild via _prepare_joint_fit), #16 (serial benchmarks), #24 (CrysFML default fallbacks removed), #43 (summary module relocated), #56 (terminal-derived ASCII width), #58 (project_info_to_cif moved), #84 (None serialised as CIF '?'), #105 (fit-result reset helper now has a caller), and #137 (re-verified as a false positive — fit() already auto-saves). Regenerated index.md. * Mark recently shipped features done in the roadmap Add the anisotropic beta-tensor ADP row and flip Uiso/Bani/Uani to done (shipped via beta-tensor support), add one-call automatic background estimation, and mark the basic March-Dollase preferred-orientation model implemented in the library. * Add edstar-project-persistence ADR suggestion * Add edstar-project-persistence implementation plan * Accept EdSTAR project persistence ADR * Add explicit persistence names to handlers * Add EdSTAR persistence inventory audit * Save and load EdSTAR project files * Rename project info facade to metadata * Persist software provenance as role rows * Rename structure row identities to id * Rename experiment structure link categories * Rename experiment EdSTAR fields * Rename analysis parameter reference fields * Document EdSTAR parameter keys * Keep report CIF separate from EdSTAR persistence * Reach EdSTAR Phase 1 review gate * Write remaining EdSTAR tags * Validate current EdSTAR background tags * Use project metadata in tutorial * Align parameter docs with EdSTAR keys * Remove stale CIF parameter pages * Refresh workflow EdSTAR examples * Simplify legacy timestamp restore * Update EdSTAR Phase 1 status * Remove dead EdSTAR ADP helpers * Rename space-group coordinate-system parameter * Record coordinate-system rename decision * Keep EdSTAR ADP serialization type-neutral Give the isotropic and anisotropic ADP CIF handlers a stable project_name (_atom_site.adp_iso, _atom_site_aniso.adp_NN) so EdSTAR persistence uses the type-neutral tag for every row regardless of the atom's adp_type. Without it, a structure mixing Biso/Uiso (or Bani/Uani) atoms reordered per-row CIF names and crashed serialization with a false "CIF tag mismatch in loop column" error, so such projects could not be saved. Derive the report ADP column label from the owning atom's adp_type instead of the reordered CIF name, so the strict B/U report label is correct for the type-neutral default direction too. * Test EdSTAR project persistence Update the unit suite for the EdSTAR persistence renames: type-neutral ADP tags, project metadata (info -> metadata), .edstar persistence files and schema marker, role-keyed analysis software, renamed structure/experiment/analysis fields, and the linked_structure(s) and metadata module moves. Mirror the moved source modules with renamed test files and add coverage for the new EdSTAR serializer behaviour. * Test EdSTAR serializer schema markers * Fix EdSTAR verification lint findings Resolve pydoclint/ruff findings surfaced by pixi run check on the EdSTAR code: add explicit utf-8 encoding to EdSTAR read_text calls, keep the new docstrings within the 72-char doc-line limit, drop the delegated-only Raises section on edstar_body_from_text (DOC502), and escape the literal dots in pytest match= patterns (RUF043). * Apply EdSTAR verification formatting Apply pixi run fix formatting to the branch: rewrap docstrings and Markdown authored during Phase 1, normalise EdSTAR source modules, and regenerate docs/dev/package-structure/full.md and short.md to reflect the renamed and added modules. * Translate EdSTAR CIF tags for cryspy and pdffit backends The cryspy and pdffit calculators feed structure.as_cif to their external engines, but EdSTAR persistence renamed the CIF tags those engines require (_atom_site.label -> .id, _space_group.name_H-M_alt -> .name_h_m, IT_coordinate_system_code -> coord_system_code, and the type-neutral _atom_site.adp_iso). Without the legacy spellings cryspy fails to build a crystal block (KeyError: 'crystal_<name>') and diffpy returns no structure, breaking all cryspy and pdffit fitting. Map the renamed tags back to the legacy IUCr spellings each engine recognizes when generating the engine CIF, choosing the active B/U displacement tag from the atom's adp_type. Add unit coverage for both translation helpers. * Migrate integration tests to EdSTAR API Update the integration suite for the EdSTAR renames: atom-site/aniso label -> id, experiment type -> experiment_type, linked_crystal/ linked_phases -> linked_structure(s) with structure_id, background x/y -> position/intensity, space-group coord_system_code, role-keyed analysis.software, project.info -> metadata, .edstar persistence files, and the type-neutral ADP CIF tags. * Migrate verification pages to EdSTAR API Update the verification scripts and regenerated notebooks for the atom-site row-identity rename (label -> id); the linked-structure and other EdSTAR field renames were already applied. Verification pages now build structures with the current public API. * Load tutorial projects from bundled fixtures Temporarily point the load/resume tutorials (ed-18, ed-23, ed-24, ed-26) at new-format EdSTAR project directories bundled under docs/docs/tutorials/projects/ instead of downloading the old beta archives, which predate the EdSTAR persistence format. ed-26 re-saves to a working directory before resuming so the bundled copy stays read-only. Revert to download_data once the regenerated archives are published to the EasyDiffraction data repository. * Keep bundled tutorial projects read-only on run Re-home ed-18 to a working directory before fitting, and copy ed-23's scan project (with its data files and results.csv) to a writable working directory before resuming, so running the tutorials no longer writes back into the bundled docs/docs/tutorials/projects/ fixtures. * Adjust table cell line height and padding for improved readability * Group parameter reference pages by owner block * Align parameter reference descriptions with source metadata * Point tutorials at published project archives * Link displayed parameters to reference docs * Refactor parameter tables for improved readability and consistency across documentation * Split parameter-name display into uid, edstar, and cif Replace project.display.parameters.cif_uids() with three focused views: uid() shows the constraint unique identifier (the former behaviour), edstar() shows the EdSTAR persistence tag, and cif() shows the report CIF tag. EdSTAR is a distinct format from CIF, so the three naming surfaces are now shown separately with their own column titles. * Normalize mixed B/U ADPs for the pdffit backend The pdffit conversion previously chose a single B/U family for the whole structure and relabeled tags without converting values, so a structure mixing Biso/Uiso (or Bani/Uani) atoms fed diffpy the minority family's values under the wrong convention. Normalize every B-family ADP value to U (value / 8π²) before writing the U tags, and restore the live structure afterwards. Add coverage for the mixed isotropic case. * Guard parameter docs route map against drift The owner-grouped parameter-reference routing (parameters/<owner>/ <category>) is already resolved via _PARAMETER_DOCS_BLOCKS. Drop the redundant 'excluded_regions' block entry (the plural category code is already remapped to the singular 'excluded_region' page), and add a test asserting the block map mirrors the docs tree exactly so runtime parameter URLs cannot drift from the reference pages again. * Finish parameter-display rename in remaining tests Update the coverage and project-display tests that still called the removed parameter_cif_uids()/cif_uids() to the split uid()/edstar()/ cif() surface, including the delegate-name expectations and the constraint-table paragraph text. * Wrap long ADR documentation-url example line * Reflow pdffit ADP-normalization docstring * Regenerate package structure for EdSTAR verification * Mark Phase 1 review and Phase 2 verification complete * Rename EdSTAR persistence format to EasyDiff Rename the EasyDiffraction project persistence format and its on-disk identity from "EdSTAR" to "EasyDiff": the io.easydiff module, the section_to_easydiff/easydiff_body_from_text helpers, the `_easydiff.schema_*` markers, the `.easydiff` section-file extension, and the save/load/zip-detection/diagnostics paths. STAR is a generic syntax layer, so the application format is named for EasyDiffraction rather than for STAR, and strict report CIF stays separate. * Rename EdSTAR to EasyDiff in tests Update the unit/integration tests for the EasyDiff rename: io.easydiff serializer test module, `.easydiff` extensions and `_easydiff.*` schema markers, and the easydiff()/parameter_easydiff_tags display surface. * Rename EdSTAR to EasyDiff in documentation Update ADRs, the implementation plan, user-guide prose, CLI and quick-reference pages, and the regenerated package-structure docs to describe the project persistence format as EasyDiff (`.easydiff` section files) rather than EdSTAR, and shorten the custom report-CIF label to `easydiffCIF`. The `edstar-project-persistence` ADR/plan slug is kept as the stable feature identifier. * Convert bundled tutorial project fixtures to EasyDiff Rename the bundled ed-18/23/24/26 project section files from `.edstar` to `.easydiff` with the updated `_easydiff.*` schema markers. These serve as the source for the published project archives the load tutorials download. * Point load tutorials at published EasyDiff archives Bump the pinned data-index ref/hash to the data-repo commit that adds the EasyDiff-format project archives, and repoint the load/resume tutorials (ed-18/23/24/26) at the new dataset ids 44-47 so they download projects the current library can open. * Fix stale ADR links in open issues Point the two open-issue references at the accepted ADR location (../../adrs/accepted/edstar-project-persistence.md) instead of the pre-promotion suggestions path, which also resolved with the wrong relative depth from docs/dev/issues/open/. * Mark Phase 2 review complete * Accept data-source-pinning and resource-naming ADRs * Pin downloadable data by a packaged commit ref * Switch downloadable resources to slug ids * Detect project archives by namespace, not kind field * Pin data to reorganized slug-layout snapshot * Rename tutorials to slug ids and update data calls * Update integration tests and docs to slug data ids * Update unit tests for slug download API * Fix lint and formatting for slug download API * Validate cached project ZIP before extraction * Update user docs to slug download API * Order tutorial listings by learning order * Fix lint and formatting for review fixes * Rename easydiff persistence format to edifa * Rename easydiff to edifa in tests * Rename easydiff to edifa in documentation * Pin data to .edifa snapshot * Apply formatting after edifa rename * Switch dataset names to dash-prefixed categories * Pin data to dash-prefixed index snapshot * Update tests for dash-prefixed dataset names * Update tutorials and docs for dash-prefixed dataset names * Update naming ADRs for dash-prefixed dataset names * Apply formatting after dash-prefix rename * Stack tutorial listing into one cell with full version * Read tutorial baseline projects from .edifa files * Point tutorial index links at slug notebooks * Format review-fix files * Save tutorial projects under slug-derived names * Clean slug-named tutorial outputs, keep proj- archives * Update saved-project test fixtures to project.edifa * Update functional tests for atom-site id rename * Update user docs to atom-site and alias id API * Move NCAF WISH tutorial to Multiple Data Blocks * Fix tutorial-baseline reader tags and refresh baseline * Cover sequential tutorials excluded from scalar baseline * Add benchmark results for various tutorials * Rename block display method to show_as_text * Update docs and tutorials to show_as_text * Drop redundant exp_ prefix from TOF peak parameters * Default correlation matrix to 5 parameters * Tighten line spacing of rendered Rich tables * Add clean page titles so header icons render * Fix experiment-type tags on extra peak keys * Tag linked_structure for single-crystal experiments * Complete code and edifaCIF rows for extra peak keys * Rename edi persistence format and simplify schema marker * Rename edi format in tests and tools * Rename edi format and alias across documentation * Switch import alias to edi in tests * Add edi pronunciation note and finalize docs * Switch CLI module import alias to edi * Pin downloadable data to edi-format snapshot * Update saved-marker assertion to version-only edi * Re-pin data to edi experiment snapshot * Reject legacy .edifa section files on project load * Drop schema_name from project layout doc sample * Fix tutorial-output task comment to analysis.edi * Cover legacy project.edifa rejection on load * Remove unreleased .edifa legacy load handling * Complete code and coreCIF rows for instrument calib keys * Complete code and CIF source rows for all parameters * Replace CifHandler with TagSpec edi_names/cif_names * Document TagSpec model and broad_ export names * Drop unreleased exp_ read aliases from TOF peak keys * Update handler inventory tool to TagSpec schema * Add TagSpec read-name contract tests * Point ADR doc-URL refs at TagSpec.edi_name * Fix TOF rise/decay doc anchors to canonical edi names * Increase maximum width of content area for better readability * Unify table row spacing across notebook and docs site Move the table cell spacing into shared TABLE_CELL_* constants in the tabler base module so the pandas (<table>) and Rich (<pre>) backends apply the same compact values inline, and the JupyterLab notebook and the built docs site render the same way. Collapse the Rich _to_html transform to a single replace that merges the spacing into Rich's own <pre> style attribute, preserving the emitted font-family instead of dropping it via a duplicate attribute. Add one scoped site rule so MkDocs-Material honours the inline spacing on rendered HTML output tables, which its default table typography (line-height 2.35 on .md-typeset cells) otherwise inflates. Markdown prose tables and code-input cells are left unchanged. * Add tutorial format flags and cap listing table width Cap the `list-tutorials` table at 100 columns: it shrinks to fit narrower terminals and stops widening past 100 on very wide ones. Let `download-tutorial` choose the file format with composable flags: no flag downloads the notebook (.ipynb), `--py` the plain-Python script, and passing both downloads both. The Python API gains a `file_format` argument validated against a new TutorialFormat enum. The notebook is published nested (tutorials/<name>/<name>.ipynb) while the script is a flat static copy (tutorials/<name>.py), so the script URL is derived from the notebook URL accordingly. * Fix list-table width test breaking pytest reporting The width test replaced the global shutil.get_terminal_size with a no-argument lambda, so pytest's own get_terminal_size(fallback=...) call during progress reporting raised TypeError and aborted the run with an INTERNALERROR. Extract a _list_table_width() helper and test it directly with a signature-compatible stub, so the cap logic is verified without disturbing pytest's terminal-size lookups. * Reformat absorption parameter page to the new template Port the merged absorption page to the project's current parameter-page format: front-matter title, material-icon headings with stable anchors, and per-parameter Access/Source tables (code / Edi / coreCIF), matching the sibling extinction page.
* Add bayesian-resume-and-mcmc-sidecar ADR (accepted) * Add bayesian-resume-and-mcmc-sidecar implementation plan * Rename Bayesian sidecar to mcmc.h5 and single-source it * Persist bumps-dream sampler state to the mcmc sidecar * Implement bumps-dream resume via saved sampler state * Unify emcee and dream resume semantics * Add chains alias for bumps-dream population * Note P1.7 fixtures regeneration is a no-op (no tracked sidecars) * Reach Phase 1 review gate * Record Phase 2 project regeneration and dream resume tutorial scope * Fix dream resume default steps to use category sampling_steps * Error on explicit resume when no resumable chain exists * Expose chains alias on the user-facing dream minimizer category * Reject population mismatch on dream resume * Align ADR chains alias to single shared population_size descriptor * Apply pixi run fix auto-fixes * Add unit tests for DREAM resume and mcmc sidecar * Add integration test for DREAM resume parity * Use raw-string regex in resume match assertions * Update resume validation test for MCMC minimizers * Update DREAM support tests for resume-aware driver signatures * Preserve raw sampler state across project save_as * Rename DREAM display tutorial to resume and re-pin data * Apply pixi run fix formatting * Pin data index to regenerated 10000-step Bayesian projects * Update DREAM resume tutorial baseline * Record Phase 2 completion and save_as scope note in plan * Preserve raw sampler state on same-path save_as * Parallelize DREAM via fork pool when MPMapper falls back to serial * Report DREAM resume progress relative to new generations * Note DREAM resume cost scales with population size * Count DREAM resume progress as 1/extra_steps to match emcee * Make sampler progress display consistent across engines
* Add validate-joint-fit-weights implementation plan * Validate joint-fit weights before residual normalisation * Close joint-fit weight validation issue * Reach Phase 1 review gate * Silence overflow warning in joint-fit weight check * Add joint-fit weight validation tests * Apply pixi run fix auto-fixes * Mark Phase 2 verification complete in plan
…-asymmetry settings (#206) * Add documentation for Bérar–Baldinozzi empirical asymmetry convention mismatch * Add ADR for Dataset-Driven Fit Modes and Sequential Redefinition * Add Y2O3 verification files for neutron powder analysis with anisotropic β-tensor ADPs * Update SequentialFitTemplate to support multiple CIF structures and adjust validation requirements * Add method to order series points by x value for consistent plotting * Update show method to clarify control point terminology in output * Finalize rename-asym-empir-to-beba plan after review * Use id instead of label in lab6 nosldl atom sites * Rename empirical asymmetry params to beba in peak mixin * Rename pseudo-Voigt empirical-asymmetry peak type to beba * Map beba asymmetry params in cryspy and crysfml calculators * Update tests for beba asymmetry rename * Rename pbso4 empirical page to beba and add mismatch note * Use beba names and neutral mismatch note on y2o3 page * Use beba asymmetry names in tutorials * Update docs, issue 133, and issue 166 for beba asymmetry rename * Reach Phase 1 review gate * Use subscript display labels A0..B1 for beba asymmetry params * Record current-branch deviation in beba rename plan * Apply pixi run fix auto-fixes * Fix _order_series_by_x docstring to satisfy pydoclint * Fix beba param order in peak-switch warning test expectations * Adapt sequential-fit tests to multi-structure template API * Adapt sequential integration test to at-least-one-structure rule * Add beba CIF round-trip and factory type-string tests * Remove completed plans and stale design-review artifacts * Reformat ADR index table * Add dataset-driven fit modes ADR review cycle * Remove stale refine-yap-tscan nav entry * Fix linked phases to linked structures in March–Dollase correction and verification scripts * Refactor documentation and remove unused edi-crysfml comparison code * Refactor dataset-driven fit modes for clarity and correctness
* Clear superseded dataset-driven-fit-modes review history * Refine dataset-driven-fit-modes ADR from review cycle * Add dataset-driven-fit-modes implementation plan * Offer fit modes by project applicability * Validate fit mode against loaded experiments * Fit a single experiment in single mode * Remove single-mode parameter snapshot fallback * Add copy_data and clearer sequential data resolution * Confirm category visibility already matches fit modes * Confirm no tutorial relies on single-with-N * Close issue 85 and accept dataset-driven fit modes ADR * Reach Phase 1 review gate * Raise ValueError for unresolvable sequential data dir * Refresh copy_data archive to current matched files * Clarify ADR applicability excludes measured-data * Fix plan Phase 1 status and issue 85 link * Reject sequential data_dir overlapping the copy archive * Satisfy ruff lint in fit-mode availability code * Apply pixi run fix auto-fixes * Remove completed adp-beta-tensor and beba-rename plans * Order mode-applicability check after request validation * Update and add unit tests for dataset-driven fit modes * Update category-support integration test for fit-mode availability * Update sequential and joint-fit integration tests for new fit-mode rules * Mark Phase 2 verification complete in plan * Add ADR for Notebook-Owned Verification Regression Gating
…nown-bad comparisons (#208) * Add verification-software-version-labels ADR suggestion * Add verification-software-version-labels implementation plan * Share engine-to-package map from utils * Add engine_label helper and drop v from fullprof_label * Show software versions on verification pages * Promote verification-software-version-labels ADR to accepted * Reach Phase 1 review gate * Update software-labels branch status * Require g prefix for version hash labels * Validate verification engine label tags * Reuse captured verification labels * Test verification software labels * Apply pixi run fix auto-fixes * Apply pixi run fix auto-fixes * Apply pixi run fix auto-fixes * Integrate known_discrepancy verification gating * Add X-ray PbSO4 verification page * Assert known_discrepancy per comparison, not per call
…truments (#209) * Add cwl-second-wavelength-placeholder implementation plan * Add second-wavelength placeholder fields to CWL instrument * Emit diffrn_radiation_wavelength loop for CWL doublet * Record CWL second-wavelength fields in persistence ADR * Reach Phase 1 review gate * Add tests for CWL second-wavelength placeholder * Resolve lint and formatting findings for placeholder * Add writer-level tests for second-wavelength export * Assert doublet loop row payload in writer test
…th powder (#210) * Add X-ray CW polarization optics ADR * Add X-ray CW polarization optics plan * Promote xray-cw-polarization-optics ADR to accepted * Split CW powder instrument by radiation probe * Add shared Lorentz-polarization helper * Emit cryspy polarization setup for X-ray CW powder * Apply Lorentz-polarization envelope on crysfml CW powder Static inspection found lower-level CrysFML Lorentz routines that accept cthm/rkk, but the Python cw_powder_pattern_from_dict wrapper reads no dictionary keys for those values. Use the shared post-pattern multiplier for the wrapper path. * Document X-ray CW polarization optics fields * Reach Phase 1 review gate * Update instrument support tag example * Clarify CW powder instrument base initialization * Add X-ray CW polarization optics tests * Apply Phase 2 formatting updates * Complete Phase 2 verification * Refactor documentation and update FullProf label initialization in LBCO verification scripts * Remove implemented feature plans
* Add tutorial benchmark results for Darwin ARM64 Py3.14 * Correct absorption wrapping notes in ADR * Add three new open issues and refine absorption note * Update CrysFML CFL X-ray support * Add LiF X-ray verification cases * Add PbSO4 X-ray verification diagnostics * Remove unused verification constants * Remove PbSO4 X-ray verification data * Standardize verification examples and use CrysFML 0.7.0 * Apply formatting * Fix CFL API review findings * Move pattern corrections to analysis/corrections package Relocate the calculator-independent absorption and polarization corrections out of the calculators (engines) package into a sibling analysis/corrections/ package, completing the import rename begun in the review-fix commit. Add an accepted ADR recording the placement and the shared apply(y, experiment) contract. No public API or behaviour change. * Add CrysFML Python API request evidence scripts * Document upstream request evidence workflow * Prefix verification links with experiment types * Focus LaB6 verification examples on one feature * Add request evidence comparison plots * Stabilize CFL backend verification checks * Add CrysFML request evidence and PDF verification * Update CrysFML Python API request evidence * Update verification examples and request scripts * Remove unsupported crysfml verification sections * Update Fe and Tb2Ti2O7 verification examples * Add comprehensive features documentation for user interface components and structure models * Publish features matrix in user docs * Rename verification scripts for total scattering profiles * Refactor verification documentation for LaB6 and add new profiles for NCAF, Ni, Si, and NaCl * Add features section to documentation overview * Enhance features documentation * Refine verification notebooks and feature documentation Add a top "Refinement" note to every verification notebook stating what is adjusted (scale, profile terms, or none) and flag known differences. Align notebook and index names with the Features page, and clarify that PDF references come from a direct diffpy.pdffit2 call (not FullProf) and that the Kα1/Kα2 doublet is an EasyDiffraction-level implementation. Give the Y2O3 isotropic-ADP example realistic Biso values (Y 0.30, O 0.50) and regenerate its FullProf reference. Name the NCAF TOF page as the Gaussian case (Lorentzian terms forced to zero). Remove stray fort.77. Update the published Features matrix for current-branch state. * Remove fort.77, ignore Fortran scratch files, format docs * Add missing verification notebooks to docs nav * Refresh PDF scale baselines after external scale refactor PdffitCalculator now sets pscale to 1.0 and the linked-structure scale is applied in TotalData._update, so the refined PDF scale parameters land at new values while fit quality is unchanged. Update the three affected tutorial baselines (pdf-nacl-xrd, pdf-si-nomad, joint-si-bragg-pdf). * Refine Features page layout and per-engine status icons Add per-engine status icons and inline verification/cross-ref links, fix the section heading levels so the in-page table of contents lists every section, and give the capability matrices a uniform, compact column layout (equal narrow LIB/CLI/APP columns via a scoped md_in_html wrapper). Link to the Features page from the Introduction. * Apply prettier formatting to Features and Introduction * Restore mobile content gutter on docs pages * Reword Features page intro for a user audience * Clarify column legend and render its example icons * Fix SyCos/SySin cross-refs for displacement and transparency * Split structural twinning and add magnetic domains row * Align minimizer and sampler names with backend (method) tags * List pdffit2 as planned for space group IT number * Mark pdffit2 not supporting IT coordinate system code * Clarify auto vs explicit background estimation methods * Update preferred-orientation, second-wavelength, displacement rows * Mark cryspy TOF peak-shape profiles as implemented * Fix extinction cross-ref and pdffit2 no-data simulation status * Swap not-applicable icon and document unknown-status icon * Add report formats and posterior plots to features * Split polarized neutron diffraction into 2.3 and 2.4 * Expand and complexity-sort backlog; tag tutorials Jupyter * Remove redundant TOC list and plainer engine wording * Drop already-implemented fit-quality-metrics backlog item * Spell out Ikeda-Carpenter sigma and gamma parameters * Unify CLI column icons and explain CLI workflow in a note * Clarify structure names in verification documentation * Condense engine list with links to the Analysis page * Move column and Feature-cell legends into note blocks * Make the How-to-read legend notes collapsible * Refactor documentation for clarity and formatting improvements * Fix grammar in epics note * Fix column logic, cross-ref icon, and heading consistency * Tighten matrix status columns and cell padding * Balance matrix cell padding and narrow status columns
* Expose TOF microstructural size/strain broadening parameters * Add TOF size/strain verification example (known issue) * Fix size/strain param formatting in verification index * Add per-experiment eta-adaptive peak-range cutoff parameter * Cache Wyckoff orbit templates to speed up refinement * Skip excluded re-apply and cache included-point mask in fits * Refresh TOF size/strain on minimizer fast-dict path * Require positive cutoff_fwhm (reject zero/negative) * Promote peak-profile-cutoff ADR to accepted * Add performance follow-up issues 174-177 * Apply pixi run fix auto-fixes * Correct CrysFML lattice-centering intensity scale * Assert LBCO fit by chi-square and well-constrained Biso * Default cutoff_fwhm to automatic tail-aware window * Match verification cutoffs to FullProf Wdt; assert fixed TOF JvD pages * Add cutoff_fwhm_auto_floor peak parameter for auto cutoff Expose the automatic peak-range cutoff floor as a public per-experiment peak parameter (cutoff_fwhm_auto_floor, default 1e-6, valid in (0, 1)) on the TOF and CWL peak categories, plumbed to the cryspy calculator dict (profile_wdt_auto_floor). Used only in automatic mode (cutoff_fwhm = 0): raising it speeds up broad/Lorentzian fits, smaller keeps more tail. * Add issue 179 on automatic cutoff_fwhm detection Document the investigation into an S/N-aware automatic peak-range cutoff: the current eta-only window does not work equally well across examples and a single global floor cannot satisfy both high-S/N x-ray and low-S/N neutron data. Records the sweep evidence and candidate mechanisms. * Use cryspy 0.12.0; rename cutoff key, drop inert auto-floor param * Formatting and linting * Invalidate included-point cache on public data mutation * Align cutoff_fwhm docs and tests with literal semantics * Correct TOF JvD verification refinement note * Mark microstructural size/strain available in features * Fix lint in included-point cache invalidation hooks * Update ADR index cutoff summary to literal semantics * Un-gate LaB6 SyCos/SySin verification (agrees on cryspy 0.12.0) * Refactor docstring formatting in PdDataBase to improve readability * Apply pixi run fix auto-fixes * Refactor Si SEPD tutorial: streamline experiment setup and peak profile configuration * Update cryspy dependency to point to hotfix branch for performance improvements * Add cutoff_fwhm parameter to experiment peak configurations * Update scale factors for linked structures in NCAF WISH tutorial * Source verification peak cutoff from FULLPROF_WDT constant * Refactor tutorial notebooks for clarity and consistency * Update cryspy dependency to version 0.12.1 * Add Darwin ARM64 tutorial benchmarks * Add directories to package structure docs * Update tutorial parameters for microstructural size-strain * Remove outdated fix references from tutorial index * Fix cryspy flag for rhombohedral structures * Update notebooks * Document cryspy filter bug * List issue 180 in open-issue index * Update tutorial baseline for new notebook results * Document cutoff_fwhm and size/strain peak parameters * Inline size/strain params; factor peak cutoff into common row * Move TOF performance table to experiment guide; refine peak rows * Drop speculative Ikeda-Carpenter params (not implemented) * Add Ikeda-Carpenter to TOF table as work in progress * Raise clearly when CrysFML is used for time-of-flight * Warn that CrysFML ignores peak.cutoff_fwhm * Untrack generated tutorial benchmark CSVs * Give crysfml CWL test stubs an experiment_type * Record cutoff_fwhm auto-detection findings in issue 179 * Wrap long CrysFML comment lines under the doc limit * Apply pixi run fix auto-fixes * Document CrysFML calculate_pattern Raises in docstring
… refresh the features overview (#213) * Correct issue 164 note on review-artifact ignore status * Add reviewed project audit findings document * Drop obsolete absorption-removal from issue 163 * Reframe issue 180 as upstream tracking; downgrade to low * Rescope issue 20 to leftover stderr-redirect cleanup * Clarify issue 79 is an audit task to justify low priority * Add audit-evidence notes to existing backlog issues * File six new backlog issues from audit and sync index * Record just-do disposition for trivial audit findings * Add missing suggestion ADRs to the index * Fix issues layout in development-docs-structure ADR * Reference handler-inventory generator in edstar ADR * Promote upstream-capability-request-evidence ADR to accepted * Promote verification-example-lifecycle ADR to accepted * Relocate superseded parameter-posterior-summary ADR to accepted * Link size/strain verification page from features table * Remove consumed project-audit working document * File issues for CI test warnings (fork, diffpy, pytest noise) * Cross-reference issue 187 fork constraint from issue 95 * Apply formatting * Update feature descriptions to reflect Gaussian broadening in calculations * Update features matrix engine support and CLI/LIB consistency * Add highest issue for single-crystal TOF verification example * Add single-crystal TOF verification example (Taurine) * Close issue 190: single-crystal TOF verification added * Fix all parameters in Taurine FullProf reference (pure calculation) * Refine descriptions for Pr2NiO4 and Taurine structures in verification documentation * Add DREAM diamond TOF verification example and fix verification nav * Fetch git tags in notebook CI so versioningit version is shown * Add feature requests for TOF and X-ray powder pattern calculations in pycrysfml
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #214 +/- ##
===========================================
+ Coverage 80.25% 90.34% +10.09%
===========================================
Files 262 284 +22
Lines 21961 24664 +2703
Branches 2551 2897 +346
===========================================
+ Hits 17624 22282 +4658
+ Misses 3368 1756 -1612
+ Partials 969 626 -343
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR is created automatically to trigger the release pipeline. It merges the accumulated changes from
developintomaster.[bot] releaseand is excluded from release notes and version bump logic.