Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
39e2207
Restructure issue tracker into per-issue files with index
AndrewSazonov Jun 13, 2026
93524f4
Close nine issues resolved or invalidated in current code
AndrewSazonov Jun 13, 2026
ef15d3b
Mark recently shipped features done in the roadmap
AndrewSazonov Jun 13, 2026
7c8ab57
Add edstar-project-persistence ADR suggestion
AndrewSazonov Jun 13, 2026
a48a829
Add edstar-project-persistence implementation plan
AndrewSazonov Jun 13, 2026
25272f3
Accept EdSTAR project persistence ADR
AndrewSazonov Jun 13, 2026
0825056
Add explicit persistence names to handlers
AndrewSazonov Jun 13, 2026
fc865ec
Add EdSTAR persistence inventory audit
AndrewSazonov Jun 13, 2026
d6c3550
Save and load EdSTAR project files
AndrewSazonov Jun 13, 2026
1518223
Rename project info facade to metadata
AndrewSazonov Jun 13, 2026
e3e7a62
Persist software provenance as role rows
AndrewSazonov Jun 13, 2026
25771cd
Rename structure row identities to id
AndrewSazonov Jun 13, 2026
162f505
Rename experiment structure link categories
AndrewSazonov Jun 13, 2026
8e01920
Rename experiment EdSTAR fields
AndrewSazonov Jun 13, 2026
36ad94a
Rename analysis parameter reference fields
AndrewSazonov Jun 13, 2026
dc6d302
Document EdSTAR parameter keys
AndrewSazonov Jun 13, 2026
ba17336
Keep report CIF separate from EdSTAR persistence
AndrewSazonov Jun 13, 2026
58f3253
Reach EdSTAR Phase 1 review gate
AndrewSazonov Jun 13, 2026
0bc19aa
Write remaining EdSTAR tags
AndrewSazonov Jun 13, 2026
98e0a0e
Validate current EdSTAR background tags
AndrewSazonov Jun 13, 2026
b17b5d3
Use project metadata in tutorial
AndrewSazonov Jun 13, 2026
7300692
Align parameter docs with EdSTAR keys
AndrewSazonov Jun 13, 2026
d640b40
Remove stale CIF parameter pages
AndrewSazonov Jun 13, 2026
5003551
Refresh workflow EdSTAR examples
AndrewSazonov Jun 13, 2026
4733d80
Simplify legacy timestamp restore
AndrewSazonov Jun 13, 2026
b774fe8
Update EdSTAR Phase 1 status
AndrewSazonov Jun 13, 2026
80ecfe0
Remove dead EdSTAR ADP helpers
AndrewSazonov Jun 13, 2026
d0eb02d
Rename space-group coordinate-system parameter
AndrewSazonov Jun 13, 2026
7cfa5a1
Record coordinate-system rename decision
AndrewSazonov Jun 13, 2026
0135656
Keep EdSTAR ADP serialization type-neutral
AndrewSazonov Jun 13, 2026
103e230
Test EdSTAR project persistence
AndrewSazonov Jun 13, 2026
078014c
Test EdSTAR serializer schema markers
AndrewSazonov Jun 13, 2026
978f5c4
Fix EdSTAR verification lint findings
AndrewSazonov Jun 13, 2026
2c491a5
Apply EdSTAR verification formatting
AndrewSazonov Jun 13, 2026
bbd9d1a
Translate EdSTAR CIF tags for cryspy and pdffit backends
AndrewSazonov Jun 13, 2026
f7ac15e
Migrate integration tests to EdSTAR API
AndrewSazonov Jun 13, 2026
bd09b14
Migrate verification pages to EdSTAR API
AndrewSazonov Jun 13, 2026
99d11be
Load tutorial projects from bundled fixtures
AndrewSazonov Jun 13, 2026
a50a48f
Keep bundled tutorial projects read-only on run
AndrewSazonov Jun 13, 2026
2f5ae44
Adjust table cell line height and padding for improved readability
AndrewSazonov Jun 13, 2026
85c31fd
Group parameter reference pages by owner block
AndrewSazonov Jun 13, 2026
e6b1cdf
Align parameter reference descriptions with source metadata
AndrewSazonov Jun 13, 2026
788214b
Point tutorials at published project archives
AndrewSazonov Jun 13, 2026
bd0673c
Link displayed parameters to reference docs
AndrewSazonov Jun 13, 2026
97ab288
Refactor parameter tables for improved readability and consistency ac…
AndrewSazonov Jun 13, 2026
b60573b
Split parameter-name display into uid, edstar, and cif
AndrewSazonov Jun 13, 2026
35de083
Normalize mixed B/U ADPs for the pdffit backend
AndrewSazonov Jun 13, 2026
05946cd
Guard parameter docs route map against drift
AndrewSazonov Jun 13, 2026
573741e
Finish parameter-display rename in remaining tests
AndrewSazonov Jun 13, 2026
91e8799
Wrap long ADR documentation-url example line
AndrewSazonov Jun 13, 2026
3f3c6f6
Reflow pdffit ADP-normalization docstring
AndrewSazonov Jun 13, 2026
666441d
Regenerate package structure for EdSTAR verification
AndrewSazonov Jun 13, 2026
f2a7f02
Mark Phase 1 review and Phase 2 verification complete
AndrewSazonov Jun 13, 2026
ddec707
Rename EdSTAR persistence format to EasyDiff
AndrewSazonov Jun 13, 2026
85b1d3c
Rename EdSTAR to EasyDiff in tests
AndrewSazonov Jun 13, 2026
8cc86fb
Rename EdSTAR to EasyDiff in documentation
AndrewSazonov Jun 13, 2026
030fab9
Convert bundled tutorial project fixtures to EasyDiff
AndrewSazonov Jun 13, 2026
d47ffdd
Point load tutorials at published EasyDiff archives
AndrewSazonov Jun 13, 2026
a284c5e
Fix stale ADR links in open issues
AndrewSazonov Jun 14, 2026
4c29777
Mark Phase 2 review complete
AndrewSazonov Jun 14, 2026
e529939
Accept data-source-pinning and resource-naming ADRs
AndrewSazonov Jun 14, 2026
aaa59ef
Pin downloadable data by a packaged commit ref
AndrewSazonov Jun 14, 2026
8a91429
Switch downloadable resources to slug ids
AndrewSazonov Jun 14, 2026
110f149
Detect project archives by namespace, not kind field
AndrewSazonov Jun 14, 2026
eaf9f08
Pin data to reorganized slug-layout snapshot
AndrewSazonov Jun 14, 2026
4c7bf0e
Rename tutorials to slug ids and update data calls
AndrewSazonov Jun 14, 2026
8d16118
Update integration tests and docs to slug data ids
AndrewSazonov Jun 14, 2026
e8b054e
Update unit tests for slug download API
AndrewSazonov Jun 14, 2026
f9d481e
Fix lint and formatting for slug download API
AndrewSazonov Jun 14, 2026
41ef744
Validate cached project ZIP before extraction
AndrewSazonov Jun 14, 2026
0857389
Update user docs to slug download API
AndrewSazonov Jun 14, 2026
915941e
Order tutorial listings by learning order
AndrewSazonov Jun 14, 2026
8537831
Fix lint and formatting for review fixes
AndrewSazonov Jun 14, 2026
9ccea33
Rename easydiff persistence format to edifa
AndrewSazonov Jun 14, 2026
4448451
Rename easydiff to edifa in tests
AndrewSazonov Jun 14, 2026
36ad62b
Rename easydiff to edifa in documentation
AndrewSazonov Jun 14, 2026
7bd38b9
Pin data to .edifa snapshot
AndrewSazonov Jun 14, 2026
64e2446
Apply formatting after edifa rename
AndrewSazonov Jun 14, 2026
e39d086
Switch dataset names to dash-prefixed categories
AndrewSazonov Jun 14, 2026
1eda706
Pin data to dash-prefixed index snapshot
AndrewSazonov Jun 14, 2026
091fd72
Update tests for dash-prefixed dataset names
AndrewSazonov Jun 14, 2026
06b3e7e
Update tutorials and docs for dash-prefixed dataset names
AndrewSazonov Jun 14, 2026
e59006a
Update naming ADRs for dash-prefixed dataset names
AndrewSazonov Jun 14, 2026
2b9a9bd
Apply formatting after dash-prefix rename
AndrewSazonov Jun 14, 2026
9c05244
Stack tutorial listing into one cell with full version
AndrewSazonov Jun 14, 2026
7de7f9d
Read tutorial baseline projects from .edifa files
AndrewSazonov Jun 14, 2026
58c78f1
Point tutorial index links at slug notebooks
AndrewSazonov Jun 14, 2026
09b3eb6
Format review-fix files
AndrewSazonov Jun 14, 2026
e89e732
Save tutorial projects under slug-derived names
AndrewSazonov Jun 14, 2026
f6417ff
Clean slug-named tutorial outputs, keep proj- archives
AndrewSazonov Jun 14, 2026
7720cc8
Update saved-project test fixtures to project.edifa
AndrewSazonov Jun 14, 2026
2fa1cc2
Update functional tests for atom-site id rename
AndrewSazonov Jun 14, 2026
f4784b2
Update user docs to atom-site and alias id API
AndrewSazonov Jun 14, 2026
9476f0c
Move NCAF WISH tutorial to Multiple Data Blocks
AndrewSazonov Jun 14, 2026
8e7f51d
Fix tutorial-baseline reader tags and refresh baseline
AndrewSazonov Jun 14, 2026
3bf785f
Cover sequential tutorials excluded from scalar baseline
AndrewSazonov Jun 14, 2026
f157166
Add benchmark results for various tutorials
AndrewSazonov Jun 14, 2026
6e592b9
Rename block display method to show_as_text
AndrewSazonov Jun 14, 2026
6441132
Update docs and tutorials to show_as_text
AndrewSazonov Jun 14, 2026
8d99336
Drop redundant exp_ prefix from TOF peak parameters
AndrewSazonov Jun 14, 2026
c43d7c5
Default correlation matrix to 5 parameters
AndrewSazonov Jun 14, 2026
cbeb9be
Tighten line spacing of rendered Rich tables
AndrewSazonov Jun 14, 2026
329040e
Add clean page titles so header icons render
AndrewSazonov Jun 14, 2026
4eaea2e
Fix experiment-type tags on extra peak keys
AndrewSazonov Jun 14, 2026
8cb7fdc
Tag linked_structure for single-crystal experiments
AndrewSazonov Jun 14, 2026
39afb58
Complete code and edifaCIF rows for extra peak keys
AndrewSazonov Jun 14, 2026
54923e9
Rename edi persistence format and simplify schema marker
AndrewSazonov Jun 14, 2026
85de026
Rename edi format in tests and tools
AndrewSazonov Jun 14, 2026
c1fc30a
Rename edi format and alias across documentation
AndrewSazonov Jun 14, 2026
6b570e9
Switch import alias to edi in tests
AndrewSazonov Jun 14, 2026
841931a
Add edi pronunciation note and finalize docs
AndrewSazonov Jun 14, 2026
cdde1cc
Switch CLI module import alias to edi
AndrewSazonov Jun 14, 2026
8582bdc
Pin downloadable data to edi-format snapshot
AndrewSazonov Jun 15, 2026
5603746
Update saved-marker assertion to version-only edi
AndrewSazonov Jun 15, 2026
9d7f89b
Re-pin data to edi experiment snapshot
AndrewSazonov Jun 15, 2026
4c26f0a
Reject legacy .edifa section files on project load
AndrewSazonov Jun 15, 2026
117dbf7
Drop schema_name from project layout doc sample
AndrewSazonov Jun 15, 2026
f021727
Fix tutorial-output task comment to analysis.edi
AndrewSazonov Jun 15, 2026
f392f51
Cover legacy project.edifa rejection on load
AndrewSazonov Jun 15, 2026
ad25a4a
Remove unreleased .edifa legacy load handling
AndrewSazonov Jun 15, 2026
49a80d6
Complete code and coreCIF rows for instrument calib keys
AndrewSazonov Jun 15, 2026
2d4b575
Complete code and CIF source rows for all parameters
AndrewSazonov Jun 15, 2026
66b7070
Replace CifHandler with TagSpec edi_names/cif_names
AndrewSazonov Jun 15, 2026
0790948
Document TagSpec model and broad_ export names
AndrewSazonov Jun 15, 2026
33d935a
Drop unreleased exp_ read aliases from TOF peak keys
AndrewSazonov Jun 15, 2026
2058ca0
Update handler inventory tool to TagSpec schema
AndrewSazonov Jun 15, 2026
9800545
Add TagSpec read-name contract tests
AndrewSazonov Jun 15, 2026
02b4353
Point ADR doc-URL refs at TagSpec.edi_name
AndrewSazonov Jun 15, 2026
ed31ba1
Fix TOF rise/decay doc anchors to canonical edi names
AndrewSazonov Jun 15, 2026
bcf046b
Increase maximum width of content area for better readability
AndrewSazonov Jun 15, 2026
becf72b
Unify table row spacing across notebook and docs site
AndrewSazonov Jun 15, 2026
af9fb48
Add tutorial format flags and cap listing table width
AndrewSazonov Jun 15, 2026
6fe52b3
Fix list-table width test breaking pytest reporting
AndrewSazonov Jun 15, 2026
dd83942
Merge develop and integrate sample-absorption into renamed APIs
AndrewSazonov Jun 15, 2026
71072fc
Reformat absorption parameter page to the new template
AndrewSazonov Jun 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions docs/dev/adrs/accepted/analysis-cif-fit-state.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Persist these common categories for any saved fit projection:
`_fit_parameter` stores analysis-owned per-parameter fit controls and
pre-fit scalar snapshots:

- `param_unique_name`
- `parameter_unique_name`
- `fit_min`
- `fit_max`
- `start_value`
Expand All @@ -70,7 +70,7 @@ pre-fit scalar snapshots:
When any row has uncertainty-derived bounds, `_fit_parameter` also
stores the provenance field:

- `fit_bounds_uncertainty_multiplier`
- `bounds_uncertainty_multiplier`

For Bayesian fit projections, `_fit_parameter` also stores per-parameter
posterior summaries:
Expand Down
7 changes: 7 additions & 0 deletions docs/dev/adrs/accepted/category-owner-sections.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ Accepted and implemented.

2026-05-17

## Amendment

[`edstar-project-persistence.md`](edstar-project-persistence.md) updates
the default project file format from CIF files to Edi files. This ADR's
ownership split still applies: real structure/experiment datablocks
remain distinct from singleton category-owner sections.

## Context

The library has two different kinds of objects that expose CIF-like
Expand Down
206 changes: 206 additions & 0 deletions docs/dev/adrs/accepted/data-source-pinning.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
# ADR: Data Download Source Pinning

**Status:** Accepted **Date:** 2026-06-14

> This ADR follows [`AGENTS.md`](../../../../AGENTS.md). No deliberate
> exception to those instructions is taken.

## Group

Documentation.

> Placed with the documentation/tutorial-infrastructure decisions
> (notebook generation, versioned docs) because the downloaded payload
> is primarily example, tutorial, and project-archive data. The
> mechanism is reused by the public `download_data()` API.

> Sibling of [`resource-naming.md`](resource-naming.md): this ADR pins
> _which snapshot_ of the data repository to fetch and decides
> replace-in-place under stable identifiers; that ADR decides what those
> identifiers _are_ (the dash-prefixed `<category>-<slug>` scheme that
> replaces the integer ids).

## Context

EasyDiffraction does not ship its example/tutorial datasets inside the
wheel — they are large (measured patterns, project archives) — so the
library downloads them on demand from the `easyscience/diffraction`
repository via `pooch`. The library therefore has to record **which
snapshot of that repository to fetch**.

Today `src/easydiffraction/utils/utils.py` records this with **two**
hand-edited constants:

- `_DATA_INDEX_REF` — a full commit SHA, used to build the raw
`raw.githubusercontent.com/easyscience/diffraction/<ref>/data/...`
URLs (`_build_data_url`).
- `_DATA_INDEX_HASH` — a `sha256:` checksum of `data/index.json`, passed
to `pooch.retrieve` as `known_hash` (`_fetch_data_index`).

Each downloadable archive additionally carries its own content checksum
inside `index.json` — stored today in the existing **`hash`** field as a
`sha256:...` string (`record.get('hash')`, passed to `pooch` as
`known_hash`) — so per-archive integrity is already data-driven and is
**not** part of this decision. Throughout this ADR, "the dataset
`sha256`" means the value of that existing `hash` field; this ADR does
**not** rename the data-index schema or introduce a new `sha256` key, so
no data-repository migration follows from it.

Problems with the current arrangement:

- **Two coupled values.** Every data change requires editing both the
commit and the index checksum, in source, plus a release.
- **Opaque and in code.** The pin is a bare SHA embedded in logic.
- **Cache staleness coupling.** `_fetch_data_index` caches the index
under the fixed filename `data-index.json`. The checksum is what makes
`pooch` notice the index changed and re-download it; without it, a
changed commit would silently reuse the stale cached index.

Constraints established for this decision:

- The data repository is **multi-purpose** (data, project metadata, and
later umbrella site content), so it must not be tagged or
directory-versioned for data reasons alone.
- **No new repositories** (the project already has `diffraction`,
`diffraction-lib`, `diffraction-app`) and **no git submodules**.
- The data is **not small** — it stays a runtime download, not a
packaged or submodule-checked-out payload.
- Which data a build uses should **track the library version** and be
**reproducible** for any released version.
- There must be a way to **test new or updated data during
development**.

## Decision

1. **Pin by a single git commit.** The data source is identified by one
value: a full commit SHA of `easyscience/diffraction`. A full SHA is
content-addressed, so it fixes the exact bytes of `index.json` and
every archive at that snapshot, over HTTPS. This is purpose-neutral:
it pins "the repository as it was at this commit" regardless of why
the repository changed.

2. **Store the commit in a packaged, non-code file.** The commit lives
in `src/easydiffraction/_data_index_ref.txt` (one line: the SHA),
read at runtime via `importlib.resources`. It is edited by hand, like
the current constant, but it is data rather than logic, and because
it sits under the package directory it is included in the wheel and
readable for both source checkouts and installed users.

`pyproject.toml` is explicitly **not** used to hold this value:
`pyproject.toml` is a build-time file that is not shipped in the
wheel, and custom `[tool.*]` tables are not exposed through
`importlib.metadata`, so an installed package could not read it at
runtime.

3. **Drop `_DATA_INDEX_HASH`.** With the commit pinning the index bytes
and per-archive checksums verifying downloads, the separate index
checksum is redundant. `pooch.retrieve` for the index uses
`known_hash=None`.

4. **Derive the cached index filename from the commit.** The index is
cached as `data-index-<commit>.json` instead of `data-index.json`.
Changing the commit therefore changes the cache filename, so the new
index is downloaded fresh; old indices remain cached under their own
names (harmless, and useful offline). This replaces the checksum as
the cache-busting mechanism while keeping a single source of truth.

5. **Update data by replacing files in place.** Datasets keep stable
paths/identifiers (their form — the dash-prefixed `<category>-<slug>`
scheme — is fixed by the sibling
[`resource-naming.md`](resource-naming.md)); updating a dataset
overwrites the existing file and refreshes its `sha256` in
`index.json`. Git history records the replacement and the pinned
commit selects the snapshot. No new dataset ids are minted for what
is conceptually the same dataset.

6. **Version tracking and reproducibility come from the release.** The
committed `_data_index_ref.txt` is part of the library source, so it
is frozen into every release artifact. A released library version
therefore always resolves to the same data snapshot, and the data a
build uses tracks the library version without any cross-repository
tagging.

7. **Invalidate local payloads by content, including extractions.**
Because datasets are replaced in place under stable identifiers
(Decision 5), the local cache must not return stale bytes after a ref
bump. Both the downloaded archive/file **and** any project ZIP
extraction directory are keyed by that dataset's `sha256` from the
index — the value of the existing `hash` field per the §Context note,
not a renamed schema key (for example the cached filename and the
extraction directory carry a short content hash). A dataset whose
bytes changed therefore resolves to a new local path and is
re-fetched/re-extracted, while unchanged datasets are reused — so
only what actually changed is re-downloaded, and an existing stale
file or extracted directory is never served. Equivalently, an
existing payload may be verified against the current index `sha256`
before reuse; either way the rule covers extraction directories, not
only direct downloads. (The index itself is keyed by the commit per
Decision 4, so it always refreshes on a ref bump.)

8. **Validate the pinned ref before use.** On read, the contents of
`_data_index_ref.txt` are stripped of surrounding whitespace and must
be a full 40-character hexadecimal commit SHA. Any other value —
empty, a branch name, a short SHA, or path-like text — raises a clear
error before any URL or cache filename is built. This turns the "must
be a full commit SHA" requirement into an enforced contract, so a
malformed edit fails fast instead of silently breaking
reproducibility or the cache-busting invariant.

## Consequences

- The data pin is a **single, non-code value** that is edited the same
way as today (paste a commit), minus the checksum.
- Integrity is preserved: full-commit content addressing over HTTPS for
the index, plus per-archive `sha256` for every download.
- Cache invalidation is automatic and tied to the one value: the index
by commit, and each archive/extraction by its `sha256` (Decisions 4
and 7). A ref bump re-fetches only the datasets whose bytes changed,
and never returns a stale file or extracted project directory.
- Reproducibility is preserved per released version, including repeated
use on a machine that already has older local copies; the data pin is
agnostic to non-data changes in the multi-purpose repository.
- The pinned value **must be a full commit SHA**, not a branch name: the
cache-busting filename trick only works for immutable refs (a moving
branch keeps the same `index.json` content address in its name). This
is enforced at read time (Decision 8), so a bad edit fails fast.
- Retaining content-keyed local copies of superseded datasets uses some
extra disk in the cache; this is accepted (and prunable) in exchange
for never serving stale bytes.
- Dropping the index checksum slightly reduces index-level
defense-in-depth; this is accepted because the commit already fixes
the bytes and transport is HTTPS.

## Alternatives Considered

- **Keep both constants in code.** Status quo; rejected for the
two-value coupling, opacity, and cache coupling above.
- **Version the data with git tags** (`data-vN` or per-release tags).
Rejected: the repository is multi-purpose, so data-driven tags pollute
its tag namespace and conflate data with site/metadata changes.
- **Append-only versioned directories** (`data/v3/...`). Rejected: it
conflicts with the preferred replace-in-place workflow and grows the
repository indefinitely.
- **Git submodule of the data repository.** Rejected: no submodules, and
the data is too large to check out or ship with the library.
- **Hold the value in `pyproject.toml`.** Rejected: not present in the
installed wheel and not exposed via `importlib.metadata`, so it is not
runtime-readable for installed users (see Decision 2).
- **Track a moving branch (e.g. `master`) for releases.** Rejected:
releases would retroactively see new data and lose reproducibility;
also defeats the filename cache-busting.

## Deferred Work

- **Development data channel and override.** A future change may let
unreleased/dev builds resolve a live channel automatically and/or
honor an `EASYDIFFRACTION_DATA_REF` environment variable to point a
build at a branch or commit for testing data before it is finalized.
This ADR only fixes the released-build pin; the dev workflow today is
to set the commit (or the override, once added) to the data snapshot
under test.
- **Automated bump.** Optionally, release CI could write the current
data commit into `_data_index_ref.txt` so the value is never
hand-edited. Out of scope here; manual editing remains the baseline.
- **Dedicated data home.** If the umbrella repository grows, moving the
data to its own released artifact could fully decouple its lifecycle.
Out of scope: the project does not want additional repositories now.
40 changes: 23 additions & 17 deletions docs/dev/adrs/accepted/display-ux.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ project.display.parameters.free()
project.display.parameters.fittable()
project.display.parameters.all()
project.display.parameters.access()
project.display.parameters.cif_uids()
project.display.parameters.uid()
project.display.parameters.edi()
project.display.parameters.cif()

project.display.fit.results()
project.display.fit.correlations()
Expand All @@ -88,22 +90,26 @@ project.display.posterior.predictive(expt_name='hrpt')
current responsibilities move to clearer homes, while the implementation
may keep the existing helpers as internal delegation targets:

| Current method | New home |
| ---------------------------- | -------------------------------------------------------------- |
| `all_params()` | `project.display.parameters.all()` |
| `fittable_params()` | `project.display.parameters.fittable()` |
| `free_params()` | `project.display.parameters.free()` |
| `how_to_access_parameters()` | `project.display.parameters.access()` |
| `parameter_cif_uids()` | `project.display.parameters.cif_uids()` |
| `fit_results()` | `project.display.fit.results()` |
| `constraints()` | `project.analysis.constraints.show()` |
| `as_cif()` | `project.analysis.as_cif` and `project.analysis.show_as_cif()` |

`project.analysis` and `project.info` follow the same CIF display
pattern as structures and experiments:

- `as_cif` is a read-only property returning CIF text as a string.
- `show_as_cif()` pretty-prints the CIF text with a header.
| Current method | New home |
| ---------------------------- | --------------------------------------------------------------- |
| `all_params()` | `project.display.parameters.all()` |
| `fittable_params()` | `project.display.parameters.fittable()` |
| `free_params()` | `project.display.parameters.free()` |
| `how_to_access_parameters()` | `project.display.parameters.access()` |
| `parameter_uids()` | `project.display.parameters.uid()` |
| `parameter_edi_tags()` | `project.display.parameters.edi()` |
| `parameter_cif_tags()` | `project.display.parameters.cif()` |
| `fit_results()` | `project.display.fit.results()` |
| `constraints()` | `project.analysis.constraints.show()` |
| `as_cif()` | `project.analysis.as_cif` and `project.analysis.show_as_text()` |

`project.analysis` and `project.info` follow the same display pattern as
structures and experiments:

- `as_cif` is a read-only property returning the serialized CIF text as
a string (the block body that is persisted into the project's Edi
files).
- `show_as_text()` pretty-prints that text with a header.

## Pattern Display

Expand Down
Loading
Loading