easydiffraction 0.11.1__tar.gz → 0.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.copier-answers.yml +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/copilot-instructions.md +37 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/backmerge.yml +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/cleanup.yml +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/coverage.yml +9 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/dashboard.yml +3 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/docs.yml +3 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/issues-labels.yml +11 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/lint-format.yml +3 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/pypi-publish.yml +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/pypi-test.yml +20 -9
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/release-notes.yml +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/release-pr.yml +3 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/security.yml +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/test-trigger.yml +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/test.yml +13 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/tutorial-tests-trigger.yml +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/tutorial-tests.yml +3 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.gitignore +5 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.pre-commit-config.yaml +14 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/PKG-INFO +3 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/architecture.md +135 -9
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/issues_closed.md +50 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/issues_open.md +15 -80
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/package-structure-full.md +98 -35
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/package-structure-short.md +61 -16
- easydiffraction-0.12.0/docs/architecture/sequential_fitting_design.md +1269 -0
- easydiffraction-0.12.0/docs/docs/cli/index.md +90 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/index.md +5 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/installation-and-setup/index.md +87 -127
- easydiffraction-0.12.0/docs/docs/introduction/index.md +74 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-1.ipynb +84 -23
- easydiffraction-0.12.0/docs/docs/tutorials/ed-1.py +110 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-10.ipynb +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-10.py +2 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-11.ipynb +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-11.py +2 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-12.ipynb +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-12.py +2 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-13.ipynb +30 -30
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-13.py +28 -28
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-14.ipynb +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-14.py +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-15.ipynb +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-15.py +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-16.ipynb +8 -18
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-16.py +6 -9
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-17.ipynb +203 -118
- easydiffraction-0.12.0/docs/docs/tutorials/ed-17.py +364 -0
- easydiffraction-0.12.0/docs/docs/tutorials/ed-18.ipynb +178 -0
- easydiffraction-0.12.0/docs/docs/tutorials/ed-18.py +56 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-2.ipynb +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-2.py +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-3.ipynb +66 -118
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-3.py +35 -52
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-4.ipynb +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-4.py +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-5.ipynb +18 -34
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-5.py +7 -12
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-6.ipynb +19 -19
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-6.py +18 -18
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-7.ipynb +19 -19
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-7.py +18 -18
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-8.ipynb +6 -6
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-8.py +5 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-9.ipynb +5 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-9.py +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/index.json +7 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/index.md +12 -8
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/analysis.md +2 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/first-steps.md +12 -11
- easydiffraction-0.12.0/docs/docs/user-guide/index.md +24 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters.md +1 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/mkdocs.yml +4 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/pixi.lock +5009 -5799
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/pixi.toml +22 -10
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/pyproject.toml +64 -43
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/__init__.py +1 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/__main__.py +24 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/analysis.py +594 -398
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/base.py +0 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/crysfml.py +31 -21
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/cryspy.py +357 -234
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/factory.py +3 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/pdffit.py +4 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/aliases/default.py +61 -19
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/aliases/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/constraints/default.py +17 -7
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/constraints/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/enums.py +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/metrics.py +13 -12
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/reporting.py +84 -77
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/tracking.py +19 -21
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fitting.py +47 -67
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/base.py +26 -33
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/dfols.py +5 -7
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/lmfit.py +9 -11
- easydiffraction-0.12.0/src/easydiffraction/analysis/sequential.py +887 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/category.py +6 -8
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/collection.py +11 -15
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/datablock.py +26 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/diagnostic.py +5 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/factory.py +11 -13
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/guard.py +8 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/identity.py +1 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/metadata.py +6 -7
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/singleton.py +31 -70
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/validation.py +3 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/variable.py +14 -26
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/crystallography/crystallography.py +76 -41
- easydiffraction-0.12.0/src/easydiffraction/crystallography/space_groups.py +98 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/base.py +0 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/chebyshev.py +2 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/enums.py +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/factory.py +5 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/line_segment.py +2 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_pd.py +10 -8
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/factory.py +5 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/total_pd.py +2 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/default.py +2 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/extinction/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/extinction/shelx.py +2 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/factory.py +5 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/tof.py +8 -8
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/factory.py +3 -1
- easydiffraction-0.12.0/src/easydiffraction/datablocks/experiment/categories/peak/base.py +39 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl.py +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl_mixins.py +5 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/factory.py +5 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof.py +1 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof_mixins.py +14 -14
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/collection.py +8 -10
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/base.py +78 -21
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/bragg_pd.py +15 -8
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/bragg_sc.py +18 -16
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/enums.py +17 -17
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/factory.py +7 -13
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/total_pd.py +22 -10
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/cell/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/space_group/default.py +2 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/space_group/factory.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/item/base.py +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/base.py +5 -6
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/plotters/ascii.py +6 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/plotters/base.py +52 -20
- easydiffraction-0.12.0/src/easydiffraction/display/plotters/plotly.py +699 -0
- easydiffraction-0.12.0/src/easydiffraction/display/plotting.py +1362 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/base.py +4 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/pandas.py +10 -6
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/rich.py +9 -6
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tables.py +4 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/utils.py +3 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/__init__.py +1 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/ascii.py +92 -19
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/cif/parse.py +36 -0
- easydiffraction-0.12.0/src/easydiffraction/io/cif/serialize.py +659 -0
- easydiffraction-0.12.0/src/easydiffraction/project/project.py +473 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/project/project_info.py +0 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/summary/summary.py +7 -8
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/theme_detect.py +2 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/enums.py +2 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/environment.py +16 -20
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/logging.py +41 -27
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/utils.py +48 -33
- easydiffraction-0.12.0/tests/functional/conftest.py +29 -0
- easydiffraction-0.12.0/tests/functional/test_experiment_workflow.py +130 -0
- easydiffraction-0.12.0/tests/functional/test_fitting_workflow.py +185 -0
- easydiffraction-0.12.0/tests/functional/test_project_lifecycle.py +118 -0
- easydiffraction-0.12.0/tests/functional/test_structure_workflow.py +139 -0
- easydiffraction-0.12.0/tests/functional/test_switchable_categories.py +65 -0
- easydiffraction-0.12.0/tests/integration/fitting/conftest.py +89 -0
- easydiffraction-0.12.0/tests/integration/fitting/test_analysis_display.py +95 -0
- easydiffraction-0.12.0/tests/integration/fitting/test_cif_round_trip.py +322 -0
- easydiffraction-0.12.0/tests/integration/fitting/test_exploration_help.py +163 -0
- easydiffraction-0.12.0/tests/integration/fitting/test_plotting.py +29 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_powder-diffraction_constant-wavelength.py +55 -7
- easydiffraction-0.12.0/tests/integration/fitting/test_project_load.py +246 -0
- easydiffraction-0.12.0/tests/integration/fitting/test_sequential.py +369 -0
- easydiffraction-0.12.0/tests/integration/fitting/test_summary_report.py +36 -0
- easydiffraction-0.12.0/tests/integration/fitting/test_switch-calculator.py +71 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_analyze_reduced_data.py +13 -14
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_factory.py +4 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +111 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/categories/test_aliases.py +27 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/categories/test_fit_mode.py +85 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_metrics.py +9 -8
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_base.py +4 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_dfols.py +8 -4
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_factory.py +8 -6
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit.py +6 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_analysis.py +10 -9
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_analysis_access_params.py +2 -2
- easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/test_analysis_coverage.py +290 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_analysis_show_empty.py +6 -6
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_fitting.py +8 -16
- easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/test_sequential.py +302 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_category.py +5 -2
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_collection.py +5 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_diagnostic.py +1 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/core/test_factory.py +246 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/core/test_metadata.py +101 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_parameters.py +11 -5
- easydiffraction-0.12.0/tests/unit/easydiffraction/core/test_singletons.py +10 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/crystallography/test_crystallography_coverage.py +98 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/crystallography/test_crystallography_wyckoff.py +55 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/crystallography/test_space_groups_coverage.py +71 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_base.py +4 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_chebyshev.py +2 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_factory.py +4 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_line_segment.py +3 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_factory.py +4 -10
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_factory.py +4 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_tof.py +2 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_base.py +48 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py +4 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/categories/test_diffrn.py +72 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_excluded_regions.py +3 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_phases.py +5 -2
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_base.py +160 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_base_coverage.py +225 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_pd.py +2 -2
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc_coverage.py +187 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_enums_coverage.py +178 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_factory.py +32 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_factory_coverage.py +92 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_total_pd.py +1 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/categories/test_atom_sites.py +132 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/categories/test_cell.py +83 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/item/test_base_coverage.py +179 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/test_collection.py +2 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/test_collection_coverage.py +58 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/display/plotters/test_plotly.py +38 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/__init__.py +2 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/test_base.py +55 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/test_pandas.py +33 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/test_rich.py +44 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_base.py +37 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_plotting.py +506 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_plotting_coverage.py +521 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_tables.py +61 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_utils.py +29 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/io/cif/test_parse.py +86 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/io/cif/test_serialize.py +5 -3
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/io/cif/test_serialize_more.py +19 -10
- easydiffraction-0.12.0/tests/unit/easydiffraction/io/test_ascii.py +196 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project.py +1 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/project/test_project_load.py +142 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project_load_and_summary_wrap.py +17 -5
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project_save.py +2 -2
- easydiffraction-0.12.0/tests/unit/easydiffraction/summary/test_summary_details.py +154 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/test___main__.py +153 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_enums.py +1 -1
- easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_environment.py +86 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_environment_coverage.py +52 -0
- easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_logging_coverage.py +150 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_utils.py +10 -5
- easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_utils_coverage.py +461 -0
- easydiffraction-0.12.0/tmp/cli/lbco_hrpt/analysis/analysis.cif +15 -0
- easydiffraction-0.12.0/tmp/cli/lbco_hrpt/experiments/hrpt.cif +3156 -0
- easydiffraction-0.12.0/tmp/cli/lbco_hrpt/project.cif +5 -0
- easydiffraction-0.12.0/tmp/cli/lbco_hrpt/structures/lbco.cif +26 -0
- easydiffraction-0.12.0/tmp/cli/lbco_hrpt/summary.cif +1 -0
- {easydiffraction-0.11.1/docs/docs/tutorials → easydiffraction-0.12.0/tmp/correlations}/ed-1.py +43 -7
- easydiffraction-0.12.0/tmp/hep7c/data/HEP_7c_LaMe_riet.dat +9101 -0
- easydiffraction-0.12.0/tmp/hep7c/data/hep7c_4.dat +1469 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_I/analysis/analysis.cif +25 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_I/experiments/pd_xray_1.cif +1540 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_I/project.cif +5 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_I/structures/lam7o3.cif +32 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_I/summary.cif +1 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_I.py +514 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_II/analysis/analysis.cif +25 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_II/experiments/pd_xray_2.cif +9192 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_II/project.cif +5 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_II/structures/lam7o3.cif +32 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_II/summary.cif +1 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_II.py +534 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/analysis/analysis.cif +31 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/experiments/pd_xray_1.cif +1540 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/experiments/pd_xray_2.cif +9192 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/project.cif +5 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/structures/lam7o3.cif +32 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/summary.cif +1 -0
- easydiffraction-0.12.0/tmp/hep7c/hep7c_joint.py +228 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/_read_cif.py +1 -1
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +12 -12
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short.py +1 -1
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short2.py +1 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/gen_tests_scaffold.py +1 -1
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/param_consistency.py +5 -2
- easydiffraction-0.12.0/tools/test_structure_check.py +199 -0
- easydiffraction-0.11.1/deps/pycrysfml-0.1.6-py312-none-macosx_14_0_arm64.whl +0 -0
- easydiffraction-0.11.1/deps/pycrysfml-0.1.6-py312-none-win_amd64.whl +0 -0
- easydiffraction-0.11.1/docs/docs/introduction/index.md +0 -76
- easydiffraction-0.11.1/docs/docs/tutorials/ed-17.py +0 -327
- easydiffraction-0.11.1/docs/docs/user-guide/index.md +0 -24
- easydiffraction-0.11.1/pycrysfml.md +0 -27
- easydiffraction-0.11.1/src/easydiffraction/crystallography/space_groups.py +0 -34
- easydiffraction-0.11.1/src/easydiffraction/datablocks/experiment/categories/peak/base.py +0 -13
- easydiffraction-0.11.1/src/easydiffraction/display/plotters/plotly.py +0 -413
- easydiffraction-0.11.1/src/easydiffraction/display/plotting.py +0 -688
- easydiffraction-0.11.1/src/easydiffraction/io/cif/serialize.py +0 -392
- easydiffraction-0.11.1/src/easydiffraction/project/project.py +0 -384
- easydiffraction-0.11.1/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +0 -98
- easydiffraction-0.11.1/tests/unit/easydiffraction/analysis/categories/test_aliases.py +0 -17
- easydiffraction-0.11.1/tests/unit/easydiffraction/core/test_factory.py +0 -2
- easydiffraction-0.11.1/tests/unit/easydiffraction/core/test_singletons.py +0 -12
- easydiffraction-0.11.1/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_base.py +0 -13
- easydiffraction-0.11.1/tests/unit/easydiffraction/datablocks/experiment/item/test_base.py +0 -38
- easydiffraction-0.11.1/tests/unit/easydiffraction/display/test_plotting.py +0 -155
- easydiffraction-0.11.1/tests/unit/easydiffraction/summary/test_summary_details.py +0 -135
- easydiffraction-0.11.1/tests/unit/easydiffraction/test___main__.py +0 -66
- easydiffraction-0.11.1/tools/convert_google_docstrings_to_numpy.py +0 -539
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.badgery.yaml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.codefactorignore +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/download-artifact/action.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/github-script/action.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/setup-easyscience-bot/action.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/setup-pixi/action.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/upload-artifact/action.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/upload-codecov/action.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/pages-deployment.json +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/rulesets-develop.json +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/rulesets-gh-pages.json +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/rulesets-master.json +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/scripts/backmerge-conflict-issue.js +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/pr-labels.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/tutorial-tests-colab.yaml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.prettierignore +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/CONTRIBUTING.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/LICENSE +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/README.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/codecov.yml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/analysis.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/core.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/crystallography.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/datablocks/experiment.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/datablocks/structure.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/display.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/index.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/io.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/project.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/summary.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/utils.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/favicon.png +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/logo_dark.svg +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/logo_light.svg +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-analysis_model.png +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/javascripts/extra.js +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/javascripts/mathjax.js +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/stylesheets/extra.css +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/experiment.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/index.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/model.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/project.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/summary.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/concept.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/data-format.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/glossary.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_exptl_crystal.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_extinction.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_pd_calib.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/atom_site.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/background.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/cell.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/expt_type.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/instrument.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/linked_phases.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/pd_meas.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/peak.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/space_group.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/includes/abbreviations.md +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/app.svg +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/easydiffraction.svg +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/easyscience.svg +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/google-colab.svg +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/main.html +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/partials/logo.html +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/prettierrc.toml +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/aliases/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/constraints/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/fit_mode.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/default.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/crystallography/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_sc.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/default.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/default.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/extinction/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/base.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/cwl.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/default.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/default.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/total.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/total_mixins.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/default.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/cell/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/cell/default.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/space_group/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/collection.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/item/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/item/factory.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/plotters/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/cif/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/cif/handler.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/project/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/summary/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/detector.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_multi.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_pair-distribution-function.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_powder-diffraction_joint-fit.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_powder-diffraction_time-of-flight.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_single-crystal-diffraction.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/conftest.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_package_import.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_read_reduced_data.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_validate_meta_data.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_validate_physical_data.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_base.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_crysfml.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/categories/test_constraints.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/categories/test_joint_fit_experiments.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_tracking.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_datablock.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_guard.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_identity.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_validation.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/crystallography/test_crystallography.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/crystallography/test_space_groups.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_enums.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_pd.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_sc.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_total_pd.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_base.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_cwl.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl_mixins.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof_mixins.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total_mixins.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_experiment_type.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_extinction.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_crystal.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_enums.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/test_collection.py +0 -0
- /easydiffraction-0.11.1/tests/unit/easydiffraction/datablocks/structure/test_collection.py → /easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/categories/__init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_space_group.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/structure/item/test_base.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/structure/item/test_factory.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/display/plotters/test_ascii.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/display/plotters/test_base.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/io/cif/test_handler.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project_info.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/summary/test_summary.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/test___init__.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_logging.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_theme_detect.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_cif.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_cif_2.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_nc.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_nc_2.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/Si_mp-149_symmetrized_mcstas.cif +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/hrpt.cif +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/hrpt_lbco.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/large_structure.cif +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/lbco.cif +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/mcstas_lbco-si.xys +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/mcstas_lbco-si_up-to-108k.xys +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/powder_reduced_Si_2large_bank.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/reduced_LBCO.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/reduced_Si.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_2_9.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_4_7.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_4_7.xys +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_5_6.xye +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ybcfo_5_6.xye +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled.ipynb +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled0.ipynb +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled1.ipynb +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled2.ipynb +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/__validator.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/_gemmi.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/_smart.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/cryst-struct_pd-neut-tof_multiphase-BSFTO-HRPT.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display2.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display3-Copy1.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display3.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/generate_overview_mermaid.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/hrpt_n_Bi0p88Sm0p12Fe0p94Ti0p06O3_DW_V_9x8x52_1p49_HI.xye +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short3.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short5.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short6.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short7.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/show_d401.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/show_w505.py +0 -0
- {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/test_single-fit_pd-neut-tof_Si-DREAM_nc.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/generate_package_docs.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/license_headers.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/naming_check.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/test_scripts.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/tweak_notebooks.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/update_docs_assets.py +0 -0
- {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/update_github_labels.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# WARNING: Do not edit this file manually.
|
|
2
2
|
# Any changes will be overwritten by Copier.
|
|
3
|
-
_commit: v0.10.1-
|
|
3
|
+
_commit: v0.10.1-40-g29e2ccf
|
|
4
4
|
_src_path: gh:easyscience/templates
|
|
5
5
|
app_docs_url: https://easyscience.github.io/diffraction-app
|
|
6
6
|
app_doi: 10.5281/zenodo.18163581
|
|
7
7
|
app_package_name: easydiffraction_app
|
|
8
|
-
app_python: '3.
|
|
8
|
+
app_python: '3.14'
|
|
9
9
|
app_repo_name: diffraction-app
|
|
10
10
|
home_page_url: https://easyscience.github.io/diffraction
|
|
11
11
|
home_repo_name: diffraction
|
|
@@ -13,7 +13,7 @@ lib_docs_url: https://easyscience.github.io/diffraction-lib
|
|
|
13
13
|
lib_doi: 10.5281/zenodo.18163581
|
|
14
14
|
lib_package_name: easydiffraction
|
|
15
15
|
lib_python_max: '3.14'
|
|
16
|
-
lib_python_min: '3.
|
|
16
|
+
lib_python_min: '3.12'
|
|
17
17
|
lib_repo_name: diffraction-lib
|
|
18
18
|
project_contact_email: support@easydiffraction.org
|
|
19
19
|
project_copyright_years: 2021-2026
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
and UPPER_SNAKE_CASE for constants.
|
|
43
43
|
- Use `from __future__ import annotations` in every module.
|
|
44
44
|
- Type-annotate all public function signatures.
|
|
45
|
-
- Docstrings on all public classes and methods (numpy style).
|
|
45
|
+
- Docstrings on all public classes and methods (numpy style). These must
|
|
46
|
+
include sections Parameters, Returns and Raises, where applicable.
|
|
46
47
|
- Prefer flat over nested, explicit over clever.
|
|
47
48
|
- Write straightforward code; do not add defensive checks for unlikely
|
|
48
49
|
edge cases.
|
|
@@ -59,6 +60,19 @@
|
|
|
59
60
|
with both getter and setter) or **read-only** (property with getter
|
|
60
61
|
only). If internal code needs to mutate a read-only property, add a
|
|
61
62
|
private `_set_<name>` method instead of exposing a public setter.
|
|
63
|
+
- Lint complexity thresholds (`max-args`, `max-branches`,
|
|
64
|
+
`max-statements`, `max-locals`, `max-nested-blocks`, etc. in
|
|
65
|
+
`pyproject.toml`) are intentional code-quality guardrails. They are
|
|
66
|
+
not arbitrary numbers — the project uses ruff's defaults (with
|
|
67
|
+
`max-args` and `max-positional-args` set to 6 instead of 5 to account
|
|
68
|
+
for ruff counting `self`/`cls`). When code violates a threshold, it is
|
|
69
|
+
a signal that the function or class needs refactoring — not that the
|
|
70
|
+
threshold needs raising. Do not raise thresholds, add `# noqa`
|
|
71
|
+
comments, or use any other mechanism to silence complexity violations.
|
|
72
|
+
Instead, refactor the code (extract helpers, introduce parameter
|
|
73
|
+
objects, flatten nesting, etc.). For complex refactors that touch many
|
|
74
|
+
lines or change public API, propose a refactoring plan and wait for
|
|
75
|
+
approval before proceeding.
|
|
62
76
|
|
|
63
77
|
## Architecture
|
|
64
78
|
|
|
@@ -107,6 +121,26 @@
|
|
|
107
121
|
`*.py` script, then run `pixi run notebook-prepare` to regenerate the
|
|
108
122
|
notebook.
|
|
109
123
|
|
|
124
|
+
## Testing
|
|
125
|
+
|
|
126
|
+
- Every new module, class, or bug fix must ship with tests. See
|
|
127
|
+
`docs/architecture/architecture.md` §10 for the full test strategy.
|
|
128
|
+
- **Unit tests mirror the source tree:**
|
|
129
|
+
`src/easydiffraction/<pkg>/<mod>.py` →
|
|
130
|
+
`tests/unit/easydiffraction/<pkg>/test_<mod>.py`. Run
|
|
131
|
+
`pixi run test-structure-check` to verify.
|
|
132
|
+
- Category packages with only `default.py`/`factory.py` may use a single
|
|
133
|
+
parent-level `test_<package>.py` instead of per-file tests.
|
|
134
|
+
- Supplementary test files use the pattern `test_<mod>_coverage.py`.
|
|
135
|
+
- Tests that expect `log.error()` to raise must `monkeypatch` Logger to
|
|
136
|
+
RAISE mode (another test may have leaked WARN mode).
|
|
137
|
+
- `@typechecked` setters raise `typeguard.TypeCheckError`, not
|
|
138
|
+
`TypeError`.
|
|
139
|
+
- No test-ordering dependence, no network, no sleeping, no real
|
|
140
|
+
calculation engines in unit tests.
|
|
141
|
+
- After adding or modifying tests, run `pixi run unit-tests` and confirm
|
|
142
|
+
all tests pass.
|
|
143
|
+
|
|
110
144
|
## Changes
|
|
111
145
|
|
|
112
146
|
- Before implementing any structural or design change (new categories,
|
|
@@ -147,6 +181,8 @@
|
|
|
147
181
|
`docs/architecture/architecture.md`.
|
|
148
182
|
- After changes, run linting and formatting fixes with `pixi run fix`.
|
|
149
183
|
Do not check what was auto-fixed, just accept the fixes and move on.
|
|
184
|
+
Then, run linting and formatting checks with `pixi run check` and
|
|
185
|
+
address any remaining issues until the code is clean.
|
|
150
186
|
- After changes, run unit tests with `pixi run unit-tests`.
|
|
151
187
|
- After changes, run integration tests with
|
|
152
188
|
`pixi run integration-tests`.
|
|
@@ -20,6 +20,11 @@ concurrency:
|
|
|
20
20
|
group: backmerge-master-into-develop
|
|
21
21
|
cancel-in-progress: false
|
|
22
22
|
|
|
23
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
24
|
+
# Remove once all referenced actions natively target Node 24.
|
|
25
|
+
env:
|
|
26
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
27
|
+
|
|
23
28
|
jobs:
|
|
24
29
|
backmerge:
|
|
25
30
|
runs-on: ubuntu-latest
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
name: Coverage checks
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
# Trigger the workflow on push
|
|
4
|
+
# Trigger the workflow on push to develop
|
|
5
5
|
push:
|
|
6
|
+
branches:
|
|
7
|
+
- develop
|
|
6
8
|
# Do not run on version tags (those are handled by other workflows)
|
|
7
9
|
tags-ignore: ['v*']
|
|
8
10
|
# Trigger the workflow on pull request
|
|
@@ -15,15 +17,18 @@ permissions:
|
|
|
15
17
|
actions: write
|
|
16
18
|
contents: read
|
|
17
19
|
|
|
18
|
-
# Allow only one concurrent workflow
|
|
19
|
-
# in-progress
|
|
20
|
+
# Allow only one concurrent workflow per PR or branch ref.
|
|
21
|
+
# Cancel in-progress runs only for pull requests, but let branch push runs finish.
|
|
20
22
|
concurrency:
|
|
21
23
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
22
|
-
cancel-in-progress:
|
|
24
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
23
25
|
|
|
24
26
|
# Set the environment variables to be used in all jobs defined in this workflow
|
|
25
27
|
env:
|
|
26
28
|
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
29
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
30
|
+
# Remove once all referenced actions natively target Node 24.
|
|
31
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
27
32
|
|
|
28
33
|
jobs:
|
|
29
34
|
# Job 1: Run docstring coverage
|
|
@@ -14,6 +14,9 @@ env:
|
|
|
14
14
|
DEVELOP_BRANCH: develop
|
|
15
15
|
REPO_OWNER: ${{ github.repository_owner }}
|
|
16
16
|
REPO_NAME: ${{ github.event.repository.name }}
|
|
17
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
18
|
+
# Remove once all referenced actions natively target Node 24.
|
|
19
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
17
20
|
|
|
18
21
|
jobs:
|
|
19
22
|
dashboard:
|
|
@@ -48,6 +48,9 @@ env:
|
|
|
48
48
|
IS_RELEASE_TAG: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
|
49
49
|
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
50
50
|
NOTEBOOKS_DIR: tutorials
|
|
51
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
52
|
+
# Remove once all referenced actions natively target Node 24.
|
|
53
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
51
54
|
|
|
52
55
|
jobs:
|
|
53
56
|
# Single job that builds and deploys documentation.
|
|
@@ -11,10 +11,21 @@ on:
|
|
|
11
11
|
permissions:
|
|
12
12
|
issues: write
|
|
13
13
|
|
|
14
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
15
|
+
# Remove once all referenced actions natively target Node 24.
|
|
16
|
+
env:
|
|
17
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
18
|
+
|
|
14
19
|
jobs:
|
|
15
20
|
check-labels:
|
|
21
|
+
if: github.actor != 'easyscience[bot]'
|
|
22
|
+
|
|
16
23
|
runs-on: ubuntu-latest
|
|
17
24
|
|
|
25
|
+
concurrency:
|
|
26
|
+
group: issue-labels-${{ github.event.issue.number }}
|
|
27
|
+
cancel-in-progress: true
|
|
28
|
+
|
|
18
29
|
steps:
|
|
19
30
|
- name: Checkout repository
|
|
20
31
|
uses: actions/checkout@v5
|
|
@@ -34,6 +34,9 @@ permissions:
|
|
|
34
34
|
# Set the environment variables to be used in all jobs defined in this workflow
|
|
35
35
|
env:
|
|
36
36
|
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
37
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
38
|
+
# Remove once all referenced actions natively target Node 24.
|
|
39
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
37
40
|
|
|
38
41
|
jobs:
|
|
39
42
|
lint-format:
|
|
@@ -10,6 +10,11 @@ on:
|
|
|
10
10
|
# Allows you to run this workflow manually from the Actions tab
|
|
11
11
|
workflow_dispatch:
|
|
12
12
|
|
|
13
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
14
|
+
# Remove once all referenced actions natively target Node 24.
|
|
15
|
+
env:
|
|
16
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
17
|
+
|
|
13
18
|
jobs:
|
|
14
19
|
pypi-publish:
|
|
15
20
|
runs-on: ubuntu-latest
|
|
@@ -20,6 +20,9 @@ permissions:
|
|
|
20
20
|
env:
|
|
21
21
|
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
22
22
|
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
23
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
24
|
+
# Remove once all referenced actions natively target Node 24.
|
|
25
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
23
26
|
|
|
24
27
|
jobs:
|
|
25
28
|
# Job 1: Test installation from PyPI on multiple OS
|
|
@@ -45,30 +48,38 @@ jobs:
|
|
|
45
48
|
- name: Init pixi project
|
|
46
49
|
run: pixi init easydiffraction
|
|
47
50
|
|
|
51
|
+
- name: Set the minimum system requirements
|
|
52
|
+
run: pixi project system-requirements add macos 14.0
|
|
53
|
+
|
|
48
54
|
- name: Add Python 3.14 from Conda
|
|
49
55
|
working-directory: easydiffraction
|
|
50
56
|
run: pixi add "python=3.14"
|
|
51
57
|
|
|
52
58
|
- name: Add other Conda dependencies
|
|
53
59
|
working-directory: easydiffraction
|
|
54
|
-
run:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
working-directory: easydiffraction
|
|
58
|
-
run: pixi add --pypi "easydiffraction"
|
|
60
|
+
run: |
|
|
61
|
+
pixi add gsl
|
|
62
|
+
pixi add --platform osx-arm64 libcxx
|
|
59
63
|
|
|
60
|
-
- name: Add
|
|
64
|
+
- name: Add pycrysfml calculator from custom PyPI index
|
|
61
65
|
working-directory: easydiffraction
|
|
62
|
-
run:
|
|
66
|
+
run: |
|
|
67
|
+
echo '' >> pixi.toml
|
|
68
|
+
echo '[pypi-dependencies]' >> pixi.toml
|
|
69
|
+
echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
|
|
63
70
|
|
|
64
|
-
- name: Add
|
|
71
|
+
- name: Add easydiffraction (with dev dependencies) from PyPI
|
|
65
72
|
working-directory: easydiffraction
|
|
66
|
-
run: pixi
|
|
73
|
+
run: pixi add --pypi "easydiffraction[dev]"
|
|
67
74
|
|
|
68
75
|
- name: Run unit tests to verify the installation
|
|
69
76
|
working-directory: easydiffraction
|
|
70
77
|
run: pixi run python -m pytest ../tests/unit/ --color=yes -v
|
|
71
78
|
|
|
79
|
+
- name: Run functional tests to verify the installation
|
|
80
|
+
working-directory: easydiffraction
|
|
81
|
+
run: pixi run python -m pytest ../tests/functional/ --color=yes -v
|
|
82
|
+
|
|
72
83
|
- name: Run integration tests to verify the installation
|
|
73
84
|
working-directory: easydiffraction
|
|
74
85
|
run: pixi run python -m pytest ../tests/integration/ --color=yes -n auto
|
|
@@ -10,6 +10,11 @@ on:
|
|
|
10
10
|
# Allows you to run this workflow manually from the Actions tab
|
|
11
11
|
workflow_dispatch:
|
|
12
12
|
|
|
13
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
14
|
+
# Remove once all referenced actions natively target Node 24.
|
|
15
|
+
env:
|
|
16
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
17
|
+
|
|
13
18
|
jobs:
|
|
14
19
|
draft-release-notes:
|
|
15
20
|
permissions:
|
|
@@ -24,6 +24,9 @@ permissions:
|
|
|
24
24
|
env:
|
|
25
25
|
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
26
26
|
SOURCE_BRANCH: ${{ inputs.source_branch || 'develop' }}
|
|
27
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
28
|
+
# Remove once all referenced actions natively target Node 24.
|
|
29
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
27
30
|
|
|
28
31
|
jobs:
|
|
29
32
|
create-pull-request:
|
|
@@ -44,6 +44,11 @@ permissions:
|
|
|
44
44
|
contents: read
|
|
45
45
|
security-events: write
|
|
46
46
|
|
|
47
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
48
|
+
# Remove once all referenced actions natively target Node 24.
|
|
49
|
+
env:
|
|
50
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
51
|
+
|
|
47
52
|
jobs:
|
|
48
53
|
codeql:
|
|
49
54
|
name: Code scanning
|
|
@@ -10,6 +10,11 @@ on:
|
|
|
10
10
|
permissions:
|
|
11
11
|
contents: read
|
|
12
12
|
|
|
13
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
14
|
+
# Remove once all referenced actions natively target Node 24.
|
|
15
|
+
env:
|
|
16
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
17
|
+
|
|
13
18
|
jobs:
|
|
14
19
|
code-tests-trigger:
|
|
15
20
|
runs-on: ubuntu-latest
|
|
@@ -44,8 +44,11 @@ concurrency:
|
|
|
44
44
|
# Set the environment variables to be used in all jobs defined in this workflow
|
|
45
45
|
env:
|
|
46
46
|
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
47
|
-
PY_VERSIONS: '3.
|
|
48
|
-
PIXI_ENVS: 'py-
|
|
47
|
+
PY_VERSIONS: '3.12 3.14'
|
|
48
|
+
PIXI_ENVS: 'py-312-env py-314-env'
|
|
49
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
50
|
+
# Remove once all referenced actions natively target Node 24.
|
|
51
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
49
52
|
|
|
50
53
|
jobs:
|
|
51
54
|
# Job 1: Set up environment variables
|
|
@@ -214,7 +217,14 @@ jobs:
|
|
|
214
217
|
# platform-specific deps so this is a no-op on Linux/Windows.
|
|
215
218
|
echo "Adding libc++ for macOS (required by diffpy.pdffit2)"
|
|
216
219
|
pixi add --platform osx-arm64 libcxx
|
|
217
|
-
|
|
220
|
+
|
|
221
|
+
# Doing this in a hacky way, as pixi does not support adding
|
|
222
|
+
# dependencies from a custom PyPI index with a CLI command without
|
|
223
|
+
# specifying full wheel name.
|
|
224
|
+
echo "Adding pycrysfml from custom PyPI index"
|
|
225
|
+
echo '' >> pixi.toml
|
|
226
|
+
echo '[pypi-dependencies]' >> pixi.toml
|
|
227
|
+
echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
|
|
218
228
|
|
|
219
229
|
echo "Looking for wheel in ../dist/py$py_ver/"
|
|
220
230
|
ls -l "../dist/py$py_ver/"
|
{easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/tutorial-tests-trigger.yml
RENAMED
|
@@ -10,6 +10,11 @@ on:
|
|
|
10
10
|
permissions:
|
|
11
11
|
contents: read
|
|
12
12
|
|
|
13
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
14
|
+
# Remove once all referenced actions natively target Node 24.
|
|
15
|
+
env:
|
|
16
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
17
|
+
|
|
13
18
|
jobs:
|
|
14
19
|
tutorial-tests-trigger:
|
|
15
20
|
runs-on: ubuntu-latest
|
|
@@ -27,6 +27,9 @@ concurrency:
|
|
|
27
27
|
# Set the environment variables to be used in all jobs defined in this workflow
|
|
28
28
|
env:
|
|
29
29
|
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
30
|
+
# Opt into Node.js 24 for all JavaScript actions.
|
|
31
|
+
# Remove once all referenced actions natively target Node 24.
|
|
32
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
30
33
|
|
|
31
34
|
jobs:
|
|
32
35
|
# Job 1: Test tutorials as scripts and notebooks on multiple OS
|
|
@@ -53,9 +53,23 @@ repos:
|
|
|
53
53
|
pass_filenames: false
|
|
54
54
|
stages: [manual]
|
|
55
55
|
|
|
56
|
+
- id: pixi-test-structure-check
|
|
57
|
+
name: pixi run test-structure-check
|
|
58
|
+
entry: pixi run test-structure-check
|
|
59
|
+
language: system
|
|
60
|
+
pass_filenames: false
|
|
61
|
+
stages: [manual]
|
|
62
|
+
|
|
56
63
|
- id: pixi-unit-tests
|
|
57
64
|
name: pixi run unit-tests
|
|
58
65
|
entry: pixi run unit-tests
|
|
59
66
|
language: system
|
|
60
67
|
pass_filenames: false
|
|
61
68
|
stages: [manual]
|
|
69
|
+
|
|
70
|
+
- id: pixi-functional-tests
|
|
71
|
+
name: pixi run functional-tests
|
|
72
|
+
entry: pixi run functional-tests
|
|
73
|
+
language: system
|
|
74
|
+
pass_filenames: false
|
|
75
|
+
stages: [manual]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: easydiffraction
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
4
4
|
Summary: Diffraction data analysis
|
|
5
5
|
Project-URL: Homepage, https://easydiffraction.org
|
|
6
6
|
Project-URL: Documentation, https://easyscience.github.io/diffraction-lib
|
|
@@ -15,12 +15,11 @@ Classifier: License :: OSI Approved :: BSD License
|
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
17
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
22
21
|
Classifier: Topic :: Scientific/Engineering
|
|
23
|
-
Requires-Python: >=3.
|
|
22
|
+
Requires-Python: >=3.12
|
|
24
23
|
Requires-Dist: asciichartpy
|
|
25
24
|
Requires-Dist: asteval
|
|
26
25
|
Requires-Dist: bumps
|
|
@@ -32,11 +31,9 @@ Requires-Dist: diffpy-pdffit2
|
|
|
32
31
|
Requires-Dist: diffpy-utils
|
|
33
32
|
Requires-Dist: essdiffraction
|
|
34
33
|
Requires-Dist: gemmi
|
|
35
|
-
Requires-Dist: jupyterlab
|
|
36
34
|
Requires-Dist: lmfit
|
|
37
35
|
Requires-Dist: numpy
|
|
38
36
|
Requires-Dist: pandas
|
|
39
|
-
Requires-Dist: pixi-kernel
|
|
40
37
|
Requires-Dist: plotly
|
|
41
38
|
Requires-Dist: pooch
|
|
42
39
|
Requires-Dist: py3dmol
|
|
@@ -51,6 +48,7 @@ Requires-Dist: varname
|
|
|
51
48
|
Provides-Extra: dev
|
|
52
49
|
Requires-Dist: build; extra == 'dev'
|
|
53
50
|
Requires-Dist: copier; extra == 'dev'
|
|
51
|
+
Requires-Dist: docstripy; extra == 'dev'
|
|
54
52
|
Requires-Dist: format-docstring; extra == 'dev'
|
|
55
53
|
Requires-Dist: gitpython; extra == 'dev'
|
|
56
54
|
Requires-Dist: interrogate; extra == 'dev'
|
|
@@ -188,7 +188,7 @@ GuardedBase
|
|
|
188
188
|
└── GenericDescriptorBase # name, value (validated via AttributeSpec), description
|
|
189
189
|
├── GenericStringDescriptor # _value_type = DataTypes.STRING
|
|
190
190
|
└── GenericNumericDescriptor # _value_type = DataTypes.NUMERIC, + units
|
|
191
|
-
└── GenericParameter # + free, uncertainty, fit_min, fit_max, constrained
|
|
191
|
+
└── GenericParameter # + free, uncertainty, fit_min, fit_max, constrained
|
|
192
192
|
```
|
|
193
193
|
|
|
194
194
|
CIF-bound concrete classes add a `CifHandler` for serialisation:
|
|
@@ -714,12 +714,13 @@ Projects are saved as a directory of CIF files:
|
|
|
714
714
|
```shell
|
|
715
715
|
project_dir/
|
|
716
716
|
├── project.cif # ProjectInfo
|
|
717
|
-
├── analysis.cif # Analysis settings
|
|
718
717
|
├── summary.cif # Summary report
|
|
719
718
|
├── structures/
|
|
720
719
|
│ └── lbco.cif # One file per structure
|
|
721
|
-
|
|
722
|
-
|
|
720
|
+
├── experiments/
|
|
721
|
+
│ └── hrpt.cif # One file per experiment
|
|
722
|
+
└── analysis/
|
|
723
|
+
└── analysis.cif # Analysis settings
|
|
723
724
|
```
|
|
724
725
|
|
|
725
726
|
### 7.3 Verbosity
|
|
@@ -856,7 +857,7 @@ project.experiments['hrpt'].calculator_type = 'cryspy'
|
|
|
856
857
|
project.analysis.current_minimizer = 'lmfit'
|
|
857
858
|
|
|
858
859
|
# Plot before fitting
|
|
859
|
-
project.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
|
|
860
|
+
project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
|
|
860
861
|
|
|
861
862
|
# Select free parameters
|
|
862
863
|
project.structures['lbco'].cell.length_a.free = True
|
|
@@ -865,14 +866,14 @@ project.experiments['hrpt'].instrument.calib_twotheta_offset.free = True
|
|
|
865
866
|
project.experiments['hrpt'].background['10'].y.free = True
|
|
866
867
|
|
|
867
868
|
# Inspect free parameters
|
|
868
|
-
project.analysis.
|
|
869
|
+
project.analysis.display.free_params()
|
|
869
870
|
|
|
870
871
|
# Fit and show results
|
|
871
872
|
project.analysis.fit()
|
|
872
|
-
project.analysis.
|
|
873
|
+
project.analysis.display.fit_results()
|
|
873
874
|
|
|
874
875
|
# Plot after fitting
|
|
875
|
-
project.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
|
|
876
|
+
project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
|
|
876
877
|
|
|
877
878
|
# Save
|
|
878
879
|
project.save()
|
|
@@ -919,6 +920,10 @@ project.experiments['xray_pdf'].peak_profile_type = 'gaussian-damped-sinc'
|
|
|
919
920
|
- `DatablockItem` = one CIF `data_` block, `DatablockCollection` = set
|
|
920
921
|
of blocks.
|
|
921
922
|
- `CategoryItem` = one CIF category, `CategoryCollection` = CIF loop.
|
|
923
|
+
- **Free-flag encoding**: A parameter's free/fixed status is encoded in
|
|
924
|
+
CIF via uncertainty brackets. `3.89` = fixed, `3.89(2)` = free with
|
|
925
|
+
esd, `3.89()` = free without esd. There is no separate list of free
|
|
926
|
+
parameters; the brackets are the single source of truth.
|
|
922
927
|
|
|
923
928
|
### 9.2 Immutability of Experiment Type
|
|
924
929
|
|
|
@@ -1165,9 +1170,130 @@ def length_a(self) -> Parameter:
|
|
|
1165
1170
|
- The CI tool `pixi run param-consistency-check` validates compliance;
|
|
1166
1171
|
`pixi run param-consistency-fix` auto-fixes violations.
|
|
1167
1172
|
|
|
1173
|
+
### 9.9 Lint Complexity Thresholds
|
|
1174
|
+
|
|
1175
|
+
The Pylint-style complexity limits in `pyproject.toml` are **intentional
|
|
1176
|
+
code-quality guardrails**, not arbitrary numbers. A violation is a
|
|
1177
|
+
signal that the function or class needs refactoring — not that the
|
|
1178
|
+
threshold needs raising.
|
|
1179
|
+
|
|
1180
|
+
The project uses **ruff's defaults** for all PLR thresholds, with one
|
|
1181
|
+
exception: `max-args` and `max-positional-args` are set to **6** instead
|
|
1182
|
+
of the ruff default of 5, because ruff counts `self`/`cls` while
|
|
1183
|
+
traditional pylint does not. Setting 6 in ruff matches pylint's standard
|
|
1184
|
+
limit of 5 real parameters per function.
|
|
1185
|
+
|
|
1186
|
+
| Threshold | Value | Rule |
|
|
1187
|
+
| --------------------- | ----- | ------- |
|
|
1188
|
+
| `max-args` | 6 | PLR0913 |
|
|
1189
|
+
| `max-positional-args` | 6 | PLR0917 |
|
|
1190
|
+
| `max-branches` | 12 | PLR0912 |
|
|
1191
|
+
| `max-statements` | 50 | PLR0915 |
|
|
1192
|
+
| `max-locals` | 15 | PLR0914 |
|
|
1193
|
+
| `max-nested-blocks` | 5 | PLR1702 |
|
|
1194
|
+
| `max-returns` | 6 | PLR0911 |
|
|
1195
|
+
| `max-public-methods` | 20 | PLR0904 |
|
|
1196
|
+
|
|
1197
|
+
**Rules:**
|
|
1198
|
+
|
|
1199
|
+
- **Do not raise thresholds.** The current values represent the
|
|
1200
|
+
project's design intent for maximum acceptable complexity.
|
|
1201
|
+
- **Do not add `# noqa` comments** (or any other mechanism) to silence
|
|
1202
|
+
complexity rules such as `PLR0912`, `PLR0913`, `PLR0914`, `PLR0915`,
|
|
1203
|
+
`PLR0917`, `PLR1702`.
|
|
1204
|
+
- **Refactor the code instead:** extract helper functions, introduce
|
|
1205
|
+
parameter objects, flatten nesting, use early returns, etc.
|
|
1206
|
+
- **For complex refactors** that touch many lines or change public API,
|
|
1207
|
+
propose a refactoring plan and wait for approval before proceeding.
|
|
1208
|
+
|
|
1209
|
+
---
|
|
1210
|
+
|
|
1211
|
+
## 10. Test Strategy
|
|
1212
|
+
|
|
1213
|
+
Every new feature, category, factory, or bug fix must ship with tests.
|
|
1214
|
+
The project enforces a multi-layered testing approach that catches
|
|
1215
|
+
regressions at different levels of abstraction.
|
|
1216
|
+
|
|
1217
|
+
### 10.1 Test Layers
|
|
1218
|
+
|
|
1219
|
+
| Layer | Location | Runner command | Scope |
|
|
1220
|
+
| --------------------- | ----------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
1221
|
+
| **Unit** | `tests/unit/` | `pixi run unit-tests` | Single class or function in isolation. Fast, no I/O, no external engines. |
|
|
1222
|
+
| **Functional** | `tests/functional/` | `pixi run functional-tests` | Multi-component workflows (e.g. create experiment → load data → fit). No external data files beyond tiny test stubs. |
|
|
1223
|
+
| **Integration** | `tests/integration/` | `pixi run integration-tests` | End-to-end pipelines using real calculation engines (cryspy, crysfml, pdffit2) and real data files from `data/`. |
|
|
1224
|
+
| **Script (tutorial)** | `tools/test_scripts.py` | `pixi run script-tests` | Runs each tutorial `*.py` script under `docs/docs/tutorials/` as a subprocess and checks for a zero exit code. |
|
|
1225
|
+
| **Notebook** | `docs/docs/tutorials/` | `pixi run notebook-tests` | Executes every Jupyter notebook end-to-end via `nbmake`. |
|
|
1226
|
+
|
|
1227
|
+
### 10.2 Directory Structure Convention
|
|
1228
|
+
|
|
1229
|
+
The unit-test tree **mirrors** the source tree:
|
|
1230
|
+
|
|
1231
|
+
```
|
|
1232
|
+
src/easydiffraction/<pkg>/<module>.py
|
|
1233
|
+
→ tests/unit/easydiffraction/<pkg>/test_<module>.py
|
|
1234
|
+
```
|
|
1235
|
+
|
|
1236
|
+
Two additional patterns are recognised:
|
|
1237
|
+
|
|
1238
|
+
1. **Supplementary coverage files** — `test_<module>_coverage.py`,
|
|
1239
|
+
`test_<module>_more.py`, etc. sit beside the main test file and add
|
|
1240
|
+
extra scenarios.
|
|
1241
|
+
2. **Parent-level roll-up** — for category packages that contain only
|
|
1242
|
+
`default.py` and `factory.py`, a single `test_<package_name>.py` one
|
|
1243
|
+
directory up covers the whole package (e.g.
|
|
1244
|
+
`categories/test_experiment_type.py` covers
|
|
1245
|
+
`categories/experiment_type/default.py` and
|
|
1246
|
+
`categories/experiment_type/factory.py`).
|
|
1247
|
+
|
|
1248
|
+
The CI tool `pixi run test-structure-check` validates that every source
|
|
1249
|
+
module has a corresponding test file and reports any gaps. Explicit name
|
|
1250
|
+
aliases (e.g. `variable.py` tested by `test_parameters.py`) are declared
|
|
1251
|
+
in `KNOWN_ALIASES` inside the tool script.
|
|
1252
|
+
|
|
1253
|
+
### 10.3 What to Test per Source Module Type
|
|
1254
|
+
|
|
1255
|
+
| Source module type | Required tests |
|
|
1256
|
+
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1257
|
+
| **Core base class** (`core/`) | Instantiation, public properties, validation edge cases, identity wiring. |
|
|
1258
|
+
| **Factory** (`factory.py`) | Registration check, `supported_tags()`, `default_tag()`, `create()` for each tag, `show_supported()` output, invalid-tag handling. |
|
|
1259
|
+
| **Category** (`default.py`) | Instantiation, all public properties (read + write where applicable), CIF round-trip (`as_cif` → `from_cif`), parameter enumeration. |
|
|
1260
|
+
| **Enum** (`enums.py`) | Membership of all members, `default()` method, `description()` for every member, `StrEnum` string equality. |
|
|
1261
|
+
| **Datablock item** (`base.py`) | Construction, switchable-category full API (`<cat>`, `<cat>_type` get/set, `show_supported_<cat>_types`, `show_current_<cat>_type`), `show`/`show_as_cif`. |
|
|
1262
|
+
| **Collection** (`collection.py`) | `create`, `add`, `remove`, `names`, `show_names`, `show_params`, iteration, duplicate-name handling. |
|
|
1263
|
+
| **Calculator / Minimizer** | `can_handle()` with compatible and incompatible experiment types, `_compute()` stub or mock. |
|
|
1264
|
+
| **Display / IO** | Input → output for representative cases; file-not-found and malformed-input error paths. |
|
|
1265
|
+
|
|
1266
|
+
### 10.4 Test Conventions
|
|
1267
|
+
|
|
1268
|
+
- **No test-ordering dependence.** Each test must be self-contained. Use
|
|
1269
|
+
`monkeypatch` to set `Logger._reaction` when the test expects a raised
|
|
1270
|
+
exception (another test may have leaked WARN mode via the global
|
|
1271
|
+
`Logger` singleton).
|
|
1272
|
+
- **Error paths are tested explicitly.** Use `pytest.raises()` (with
|
|
1273
|
+
`monkeypatch` for Logger RAISE mode) for `log.error()` calls that
|
|
1274
|
+
specify `exc_type`.
|
|
1275
|
+
- **`@typechecked` setters raise `typeguard.TypeCheckError`**, not
|
|
1276
|
+
`TypeError`. Tests must catch the correct exception.
|
|
1277
|
+
- **Use `capsys` / `capfd`** for asserting console output from `show_*`
|
|
1278
|
+
methods.
|
|
1279
|
+
- **Prefer `tmp_path`** (pytest fixture) for file-system tests.
|
|
1280
|
+
- **No sleeping, no network calls, no real calculation engines** in unit
|
|
1281
|
+
tests.
|
|
1282
|
+
- Test files carry the SPDX license header and a module-level docstring.
|
|
1283
|
+
They are exempt from most lint rules (ANN, D, DOC, INP001, S101, etc.)
|
|
1284
|
+
per `pyproject.toml`.
|
|
1285
|
+
|
|
1286
|
+
### 10.5 Coverage Threshold
|
|
1287
|
+
|
|
1288
|
+
The minimum line-coverage threshold is **70 %** (`fail_under = 70` in
|
|
1289
|
+
`pyproject.toml`). The project aspires to test every code path; the
|
|
1290
|
+
threshold is a safety net, not a target.
|
|
1291
|
+
|
|
1292
|
+
Run `pixi run unit-tests-coverage` for a per-module report.
|
|
1293
|
+
|
|
1168
1294
|
---
|
|
1169
1295
|
|
|
1170
|
-
##
|
|
1296
|
+
## 11. Issues
|
|
1171
1297
|
|
|
1172
1298
|
- **Open:** [`issues_open.md`](issues_open.md) — prioritised backlog.
|
|
1173
1299
|
- **Closed:** [`issues_closed.md`](issues_closed.md) — resolved items
|