Installation¶
pip install rietx
Requirements¶
Python 3.11 or newer, and five packages: numpy, scipy, pydantic, gemmi
and spglib.
That core install is a complete refinement package. It reads patterns and CIFs, applies every correction, runs the whole staged refinement machinery, builds the report, indexes an unknown cell, and keeps projects and history. Nothing in that list is optional or lazily imported.
Optional extras¶
No extra makes a refinement more accurate. Each one adds a rendering (plots, HTML, the GUI), a second opinion on the Jacobian (the differentiable backends), or the development toolchain.
Install an extra by naming it in brackets. Quote the argument, because zsh
reads bare brackets as a glob:
pip install "rietx[viz]" # one extra
pip install "rietx[viz,jax]" # several, comma-separated, no spaces
uv pip install -e ".[dev]" # from a source checkout
Extra |
Installs |
What it buys |
|---|---|---|
|
matplotlib, plotly |
Plots. |
|
plotly |
The refinement GUI, |
|
jax |
The |
|
torch |
Experimental. |
|
sphinx, myst-parser, sphinxcontrib-bibtex, furo |
Builds this manual. |
|
the |
The test suite. |
That is the whole list. Background estimation needs nothing installed: arPLS,
SNIP and the penalised spline are implemented in the core, the spline as penalty
rows inside the least squares rather than as a pre-subtraction. See
auto_background.
Use the numpy backend. backend="numpy" is the default and the only backend
a refinement needs. The others exist to hold the analytic Jacobian to an
independent account. An Apple-GPU refinement runs 46 to 182 times slower than
numpy, because the work is launch-latency-bound.
Precision is not the trade. A GPU backend may compute Jacobian columns in fp32, but the residual used for the cost and the statistics, and the solve itself, stay fp64 on the host.
Checking an install¶
Ask the package rather than a table that goes stale. capabilities() reports
the versions, the backends, the plans, the modes, the anodes, the pattern
formats it can open, and the feature flags. For each backend it reports whether
the optional dependency imports here:
from rietx import capabilities
caps = capabilities()
caps.package_version
[backend.name for backend in caps.backends if backend.available]
[fmt.name for fmt in caps.reader_formats]
Capabilities.backends is the field that answers “did my jax extra take?”.
Each BackendCapability carries BackendCapability.available (does it import
here), BackendCapability.requires (the distribution to install) and
BackendCapability.experimental. Calling rietx from a program covers the rest of the object.
Installing from source¶
git clone https://github.com/yue-here/rietx
cd rietx
uv venv --python 3.12 && uv pip install -e ".[dev]"
Then run the suite. The fast selection is the unit and property tests. The full selection adds the real-data acceptance suites, which refine certified standards and take tens of minutes:
.venv/bin/python -m pytest -n auto --dist loadgroup -m "not slow" # fast
.venv/bin/python -m pytest -n auto --dist loadgroup # everything
--dist loadgroup is not optional. It honours the marks that keep a shared
refinement fixture on one worker; plain --dist load silently refits. The suite
prints its own counts, and those counts depend on the extras installed: jax and
torch turn skips into passes.
Validation and accuracy claims¶
docs/VALIDATION.md
tabulates every real-data assertion in the repository and says what each
tolerance is referenced to. It is generated from the suite, so it is the
accuracy claim, and nothing in this manual restates it.
Read it with its own opening rule in mind: judge a correction by what it changed, never by ΔRwp. Of the eight corrections in v0.5, two provably cannot move Rwp, one moves it the wrong way when it is right, and the two largest accuracy wins are invisible in it.