easydiffraction 0.9.1__tar.gz → 0.10.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.10.0/.github/workflows/backmerge.yaml +66 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/dashboard.yaml +14 -1
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/docs.yaml +60 -37
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/pypi-test.yaml +2 -4
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/release-pr.yaml +18 -4
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/PKG-INFO +1 -1
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/analysis.py +38 -1
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/fitting.py +10 -4
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/utils/logging.py +3 -3
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/test_analysis.py +53 -0
- easydiffraction-0.10.0/tests/unit/easydiffraction/analysis/test_fitting.py +92 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/utils/test_utils.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-1.py +4 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-10.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-11.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-12.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-13.py +5 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-2.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-3.py +5 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-4.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-5.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-6.py +12 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-7.py +4 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-8.py +1 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/ed-9.py +1 -0
- easydiffraction-0.9.1/.github/workflows/backmerge-pr.yaml +0 -81
- easydiffraction-0.9.1/tests/unit/easydiffraction/analysis/test_fitting.py +0 -36
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.badgery.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/cleanup.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/coverage.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/labels.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/pypi-publish.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/quality.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/release-notes.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/security.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/test-trigger.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/test.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/tutorial-tests-colab.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/tutorial-tests-trigger.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.github/workflows/tutorial-tests.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.gitignore +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.pre-commit-config.yaml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/.prettierignore +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/CONTRIBUTING.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/DEVELOPMENT.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/LICENSE +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/README.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/deps/pycrysfml-0.1.6-py312-none-macosx_14_0_arm64.whl +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/deps/pycrysfml-0.1.6-py312-none-win_amd64.whl +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/analysis.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/core.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/crystallography.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/display.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/experiments.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/index.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/io.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/project.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/sample_models.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/summary.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/api-reference/utils.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/architecture/package-structure-full.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/architecture/package-structure-short.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/assets/images/user-guide/data-analysis_model.png +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/index.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/installation-and-setup/index.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/introduction/index.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/mkdocs.yml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/tutorials/index.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/analysis-workflow/analysis.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/analysis-workflow/experiment.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/analysis-workflow/index.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/analysis-workflow/model.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/analysis-workflow/project.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/analysis-workflow/summary.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/concept.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/data-format.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/first-steps.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/glossary.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/index.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/_exptl_crystal.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/_extinction.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/_pd_calib.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/atom_site.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/background.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/cell.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/expt_type.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/instrument.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/linked_phases.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/pd_meas.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/peak.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters/space_group.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/docs/user-guide/parameters.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/pixi.lock +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/pixi.toml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/prettierrc.toml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/pycrysfml.md +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/pyproject.toml +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/pytest.ini +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/__main__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/calculators/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/calculators/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/calculators/crysfml.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/calculators/cryspy.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/calculators/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/calculators/pdffit.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/categories/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/categories/aliases.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/categories/constraints.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/categories/joint_fit_experiments.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/fit_helpers/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/fit_helpers/metrics.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/fit_helpers/reporting.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/fit_helpers/tracking.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/minimizers/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/minimizers/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/minimizers/dfols.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/minimizers/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/analysis/minimizers/lmfit.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/category.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/collection.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/datablock.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/diagnostic.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/guard.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/identity.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/parameters.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/singletons.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/core/validation.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/crystallography/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/crystallography/crystallography.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/crystallography/space_groups.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/plotters/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/plotters/ascii.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/plotters/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/plotters/plotly.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/plotting.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/tablers/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/tablers/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/tablers/pandas.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/tablers/rich.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/tables.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/display/utils.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/background/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/background/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/background/chebyshev.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/background/enums.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/background/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/background/line_segment.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/data/bragg_pd.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/data/bragg_sc.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/data/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/data/total.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/excluded_regions.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/experiment_type.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/instrument/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/instrument/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/instrument/cwl.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/instrument/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/instrument/tof.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/linked_phases.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/cwl.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/cwl_mixins.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/tof.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/tof_mixins.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/total.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/categories/peak/total_mixins.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/bragg_pd.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/bragg_sc.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/enums.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/instrument_mixin.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiment/total_pd.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/experiments/experiments.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/io/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/io/cif/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/io/cif/handler.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/io/cif/parse.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/io/cif/serialize.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/project/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/project/project.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/project/project_info.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/categories/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/categories/atom_sites.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/categories/cell.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/categories/space_group.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/sample_model/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/sample_model/base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/sample_model/factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/sample_models/sample_models.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/summary/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/summary/summary.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/utils/__init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/utils/environment.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/src/easydiffraction/utils/utils.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/integration/fitting/test_pair-distribution-function.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/integration/fitting/test_powder-diffraction_constant-wavelength.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/integration/fitting/test_powder-diffraction_joint-fit.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/integration/fitting/test_powder-diffraction_multiphase.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/integration/fitting/test_powder-diffraction_time-of-flight.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/integration/scipp-analysis/dream/test_scipp-cif.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/calculators/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/calculators/test_crysfml.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/calculators/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/categories/test_aliases.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/categories/test_constraints.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/categories/test_joint_fit_experiments.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_metrics.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_tracking.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/minimizers/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/minimizers/test_dfols.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/minimizers/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/test_analysis_access_params.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/analysis/test_analysis_show_empty.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_category.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_collection.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_datablock.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_diagnostic.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_guard.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_identity.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_parameters.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_singletons.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/core/test_validation.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/crystallography/test_crystallography.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/crystallography/test_space_groups.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/display/plotters/test_ascii.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/display/plotters/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/display/plotters/test_plotly.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/display/test_plotting.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/background/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/background/test_chebyshev.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/background/test_enums.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/background/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/background/test_line_segment.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/instrument/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/instrument/test_cwl.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/instrument/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/instrument/test_tof.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_cwl.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_cwl_mixins.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_tof.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_tof_mixins.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_total.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/peak/test_total_mixins.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/test_excluded_regions.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/test_experiment_type.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/categories/test_linked_phases.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/experiment/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/experiment/test_bragg_pd.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/experiment/test_bragg_sc.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/experiment/test_enums.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/experiment/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/experiment/test_instrument_mixin.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/experiment/test_total_pd.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/experiments/test_experiments.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/io/cif/test_handler.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/io/cif/test_serialize.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/io/cif/test_serialize_more.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/project/test_project.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/project/test_project_info.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/project/test_project_load_and_summary_wrap.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/project/test_project_save.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/sample_models/categories/test_atom_sites.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/sample_models/categories/test_cell.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/sample_models/categories/test_space_group.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/sample_models/sample_model/test_base.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/sample_models/sample_model/test_factory.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/sample_models/test_sample_models.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/summary/test_summary.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/summary/test_summary_details.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/test___init__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/test___main__.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/utils/test_logging.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/Untitled.ipynb +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/Untitled0.ipynb +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/Untitled1.ipynb +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/Untitled2.ipynb +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/_gemmi.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/_read_cif.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/_smart.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/cryst-struct_pd-neut-tof_multiphase-BSFTO-HRPT.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/DREAM_mantle_bc240_nist_cif.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/DREAM_mantle_bc240_nist_cif_2.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/DREAM_mantle_bc240_nist_nc.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/DREAM_mantle_bc240_nist_nc_2.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/Si_mp-149_symmetrized_mcstas.cif +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/hrpt.cif +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/hrpt_lbco.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/large_structure.cif +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data/lbco.cif +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/mcstas_lbco-si.xys +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/mcstas_lbco-si_up-to-108k.xys +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/powder_reduced_Si_2large_bank.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/reduced_LBCO.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/reduced_Si.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/wish_ncaf.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/wish_ncaf_2_9.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/wish_ncaf_4_7.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/wish_ncaf_4_7.xys +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/wish_ncaf_5_6.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/data_old/wish_ybcfo_5_6.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/display.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/display2.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/display3-Copy1.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/display3.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/generate_overview_mermaid.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/hrpt_n_Bi0p88Sm0p12Fe0p94Ti0p06O3_DW_V_9x8x52_1p49_HI.xye +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/short.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/short2.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/short3.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/short5.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/short6.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/short7.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tmp/test_single-fit_pd-neut-tof_Si-DREAM_nc.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/add_assets_to_docs.sh +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/cleanup_docs.sh +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/create_mkdocs_yml.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/gen_tests_scaffold.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/generate_package_docs.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/naming_check.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/test_scripts.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/tweak_notebooks.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tools/update_spdx.py +0 -0
- {easydiffraction-0.9.1 → easydiffraction-0.10.0}/tutorials/index.json +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# This workflow automatically merges `master` into `develop` whenever a new version tag is pushed (v*).
|
|
2
|
+
#
|
|
3
|
+
# Key points:
|
|
4
|
+
# - Directly merges master into develop without creating a PR.
|
|
5
|
+
# - Skips CI on the merge commit using [skip ci] in the commit message.
|
|
6
|
+
# - The code being merged has already been tested as part of the release process.
|
|
7
|
+
# - This ensures develop stays up-to-date with release changes (version bumps, etc.).
|
|
8
|
+
#
|
|
9
|
+
# Required repo config:
|
|
10
|
+
# https://github.com/organizations/easyscience/settings/secrets/actions
|
|
11
|
+
# https://github.com/organizations/easyscience/settings/variables/actions
|
|
12
|
+
# - Actions secret: EASYSCIENCE_APP_KEY (GitHub App private key PEM)
|
|
13
|
+
# - Actions variable: EASYSCIENCE_APP_ID (GitHub App ID)
|
|
14
|
+
# The GitHub App must be added to the develop branch ruleset bypass list.
|
|
15
|
+
|
|
16
|
+
name: Backmerge (master -> develop)
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
push:
|
|
20
|
+
tags: ['v*']
|
|
21
|
+
|
|
22
|
+
permissions:
|
|
23
|
+
contents: write
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
backmerge:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- name: Create GitHub App installation token
|
|
31
|
+
id: app-token
|
|
32
|
+
uses: actions/create-github-app-token@v2
|
|
33
|
+
with:
|
|
34
|
+
app-id: ${{ vars.EASYSCIENCE_APP_ID }}
|
|
35
|
+
private-key: ${{ secrets.EASYSCIENCE_APP_KEY }}
|
|
36
|
+
|
|
37
|
+
- name: Checkout repository
|
|
38
|
+
uses: actions/checkout@v5
|
|
39
|
+
with:
|
|
40
|
+
fetch-depth: 0
|
|
41
|
+
token: ${{ steps.app-token.outputs.token }}
|
|
42
|
+
|
|
43
|
+
- name: Configure git for pushing
|
|
44
|
+
run: |
|
|
45
|
+
git config user.name "easyscience[bot]"
|
|
46
|
+
git config user.email "${{ vars.EASYSCIENCE_APP_ID }}+easyscience[bot]@users.noreply.github.com"
|
|
47
|
+
|
|
48
|
+
- name: Merge master into develop
|
|
49
|
+
run: |
|
|
50
|
+
set -euo pipefail
|
|
51
|
+
|
|
52
|
+
TAG='${{ github.ref_name }}'
|
|
53
|
+
|
|
54
|
+
# Ensure local develop branch exists and is up-to-date with origin
|
|
55
|
+
git fetch origin develop:develop
|
|
56
|
+
# Switch to develop branch
|
|
57
|
+
git checkout develop
|
|
58
|
+
|
|
59
|
+
# Merge master into develop (no fast-forward to preserve history)
|
|
60
|
+
# Use [skip ci] to avoid triggering CI - the code was already tested on master
|
|
61
|
+
git merge origin/master --no-ff -m "Backmerge: ${TAG} from master into develop [skip ci]"
|
|
62
|
+
|
|
63
|
+
# Push the merge commit to develop
|
|
64
|
+
git push origin develop
|
|
65
|
+
|
|
66
|
+
echo "✅ Successfully merged master (${TAG}) into develop"
|
|
@@ -24,6 +24,19 @@ jobs:
|
|
|
24
24
|
runs-on: ubuntu-latest
|
|
25
25
|
|
|
26
26
|
steps:
|
|
27
|
+
# Create GitHub App token for pushing to external dashboard repo.
|
|
28
|
+
# The 'repositories' parameter is required to grant access to repos
|
|
29
|
+
# other than the one where the workflow is running.
|
|
30
|
+
- name: Create GitHub App installation token
|
|
31
|
+
id: app-token
|
|
32
|
+
uses: actions/create-github-app-token@v2
|
|
33
|
+
with:
|
|
34
|
+
app-id: ${{ vars.EASYSCIENCE_APP_ID }}
|
|
35
|
+
private-key: ${{ secrets.EASYSCIENCE_APP_KEY }}
|
|
36
|
+
repositories: |
|
|
37
|
+
${{ github.event.repository.name }}
|
|
38
|
+
dashboard
|
|
39
|
+
|
|
27
40
|
- name: Checkout repository
|
|
28
41
|
uses: actions/checkout@v5
|
|
29
42
|
with:
|
|
@@ -80,7 +93,7 @@ jobs:
|
|
|
80
93
|
with:
|
|
81
94
|
external_repository: ${{ env.REPO_OWNER }}/dashboard
|
|
82
95
|
publish_branch: ${{ env.DEFAULT_BRANCH }}
|
|
83
|
-
personal_token: ${{
|
|
96
|
+
personal_token: ${{ steps.app-token.outputs.token }}
|
|
84
97
|
publish_dir: ./_dashboard_publish
|
|
85
98
|
keep_files: true
|
|
86
99
|
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
# This workflow builds and deploys documentation for the project.
|
|
2
2
|
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
# - Deploys the built site to gh-pages branch for production (release tags starting with v*).
|
|
11
|
-
# - This triggers deployment to a custom domain via webhook.
|
|
3
|
+
# Overview:
|
|
4
|
+
# - Converts tutorial Python scripts to Jupyter notebooks and executes them.
|
|
5
|
+
# - Builds the documentation site using MkDocs with the Material theme.
|
|
6
|
+
# - Uploads the built site as an artifact for local inspection.
|
|
7
|
+
# - Deploys versioned documentation to the gh-pages branch using Mike:
|
|
8
|
+
# - For release tags (v*): deploys to a versioned folder (e.g., /0.9.1/) and updates /latest/.
|
|
9
|
+
# - For branches: deploys to /dev/.
|
|
12
10
|
#
|
|
13
|
-
# The action summary page will contain
|
|
14
|
-
# and inspecting, as well as
|
|
15
|
-
# the deployed documentation site.
|
|
11
|
+
# The action summary page will contain a link to the built artifact for downloading
|
|
12
|
+
# and inspecting, as well as a link to the deployed documentation site.
|
|
16
13
|
|
|
17
14
|
name: Docs build and deployment
|
|
18
15
|
|
|
@@ -30,12 +27,12 @@ on:
|
|
|
30
27
|
# Allows you to run this workflow manually from the Actions tab
|
|
31
28
|
workflow_dispatch:
|
|
32
29
|
|
|
33
|
-
# Allow only one concurrent
|
|
34
|
-
#
|
|
30
|
+
# Allow only one concurrent deployment to gh-pages at a time.
|
|
31
|
+
# All docs workflows share the same concurrency group to prevent race conditions
|
|
32
|
+
# when multiple branches/tags trigger simultaneous deployments.
|
|
35
33
|
concurrency:
|
|
36
|
-
group:
|
|
37
|
-
|
|
38
|
-
cancel-in-progress: true
|
|
34
|
+
group: docs-gh-pages-deploy
|
|
35
|
+
cancel-in-progress: false
|
|
39
36
|
|
|
40
37
|
# Set the environment variables to be used in all jobs defined in this workflow
|
|
41
38
|
env:
|
|
@@ -53,16 +50,17 @@ env:
|
|
|
53
50
|
NOTEBOOKS_DIR: tutorials
|
|
54
51
|
|
|
55
52
|
jobs:
|
|
56
|
-
#
|
|
53
|
+
# Single job that builds and deploys documentation.
|
|
54
|
+
# Uses macOS runner for consistent Plotly chart rendering.
|
|
57
55
|
build-deploy-docs:
|
|
58
56
|
strategy:
|
|
59
57
|
matrix:
|
|
60
|
-
os: [macos-14]
|
|
58
|
+
os: [macos-14]
|
|
61
59
|
|
|
62
60
|
runs-on: ${{ matrix.os }}
|
|
63
61
|
|
|
64
62
|
permissions:
|
|
65
|
-
contents: write #
|
|
63
|
+
contents: write # Required for pushing to the gh-pages branch
|
|
66
64
|
|
|
67
65
|
steps:
|
|
68
66
|
# Setting DOCS_VERSION to be used in mkdocs.yml, and then in the
|
|
@@ -87,10 +85,20 @@ jobs:
|
|
|
87
85
|
echo "DOCS_VERSION=${DOCS_VERSION}" >> "$GITHUB_ENV"
|
|
88
86
|
echo "DEPLOYMENT_URL=https://easyscience.github.io/${{ github.event.repository.name }}/${DOCS_VERSION}" >> "$GITHUB_ENV"
|
|
89
87
|
|
|
88
|
+
# Create GitHub App token for pushing to gh-pages as easyscience[bot].
|
|
89
|
+
- name: Create GitHub App installation token
|
|
90
|
+
id: app-token
|
|
91
|
+
uses: actions/create-github-app-token@v2
|
|
92
|
+
with:
|
|
93
|
+
app-id: ${{ vars.EASYSCIENCE_APP_ID }}
|
|
94
|
+
private-key: ${{ secrets.EASYSCIENCE_APP_KEY }}
|
|
95
|
+
|
|
96
|
+
# Check out the repository source code.
|
|
97
|
+
# Note: The gh-pages branch is fetched separately later for mike deployment.
|
|
90
98
|
- name: Check-out repository
|
|
91
99
|
uses: actions/checkout@v5
|
|
92
100
|
with:
|
|
93
|
-
|
|
101
|
+
token: ${{ steps.app-token.outputs.token }}
|
|
94
102
|
|
|
95
103
|
# Activate dark mode to create documentation with Plotly charts in dark mode
|
|
96
104
|
# Need a better solution to automatically switch the chart colour theme based on the mkdocs material switcher
|
|
@@ -103,6 +111,8 @@ jobs:
|
|
|
103
111
|
# dark-mode on
|
|
104
112
|
# dark-mode status
|
|
105
113
|
|
|
114
|
+
# Set up the pixi package manager and install dependencies from pixi.toml.
|
|
115
|
+
# Uses frozen lockfile to ensure reproducible builds.
|
|
106
116
|
- name: Set up pixi
|
|
107
117
|
uses: prefix-dev/setup-pixi@v0.9.0
|
|
108
118
|
with:
|
|
@@ -113,37 +123,43 @@ jobs:
|
|
|
113
123
|
cache: false
|
|
114
124
|
post-cleanup: false
|
|
115
125
|
|
|
126
|
+
# Install additional development dependencies (e.g., pre-commit hooks, dev tools).
|
|
116
127
|
- name: Install and setup development dependencies
|
|
117
128
|
shell: bash
|
|
118
129
|
run: pixi run dev
|
|
119
130
|
|
|
131
|
+
# Clone shared documentation assets and branding resources from external repositories.
|
|
132
|
+
# These contain common MkDocs configuration, templates, stylesheets, and images.
|
|
120
133
|
- name: Clone easyscience/assets-docs and easyscience/assets-branding
|
|
121
134
|
run: |
|
|
122
135
|
cd ..
|
|
123
136
|
git clone https://github.com/easyscience/assets-docs.git
|
|
124
137
|
git clone https://github.com/easyscience/assets-branding.git
|
|
125
138
|
|
|
139
|
+
# Copy assets from the cloned repositories into the docs/ directory.
|
|
140
|
+
# This includes stylesheets, images, templates, and other shared resources.
|
|
126
141
|
- name: Add files from cloned repositories
|
|
127
142
|
run: pixi run docs-assets
|
|
128
143
|
|
|
129
|
-
# Convert
|
|
130
|
-
#
|
|
131
|
-
#
|
|
132
|
-
# Run the notebooks to generate the output cells using multiple cores
|
|
133
|
-
# The notebooks are then used to build the documentation site
|
|
144
|
+
# Convert Python scripts in the tutorials/ directory to Jupyter notebooks.
|
|
145
|
+
# This step also strips any existing output from the notebooks and prepares
|
|
146
|
+
# them for documentation.
|
|
134
147
|
- name: Convert tutorial scripts to notebooks
|
|
135
148
|
run: pixi run notebook-prepare
|
|
136
149
|
|
|
137
|
-
#
|
|
138
|
-
# "Matplotlib is building the font cache
|
|
150
|
+
# Pre-import the main package to trigger Matplotlib font cache building.
|
|
151
|
+
# This avoids "Matplotlib is building the font cache" messages during notebook execution.
|
|
139
152
|
- name: Pre-build site step
|
|
140
153
|
run: pixi run python -c "import easydiffraction"
|
|
141
154
|
|
|
142
|
-
#
|
|
155
|
+
# Execute all Jupyter notebooks to generate output cells (plots, tables, etc.).
|
|
156
|
+
# Uses multiple cores for parallel execution to speed up the process.
|
|
143
157
|
- name: Run notebooks
|
|
144
158
|
# if: false # Temporarily disabled to speed up the docs build
|
|
145
159
|
run: pixi run notebook-exec
|
|
146
160
|
|
|
161
|
+
# Move the executed notebooks to docs/tutorials/ directory
|
|
162
|
+
# so they can be included in the documentation site.
|
|
147
163
|
- name: Move notebooks to docs/tutorials
|
|
148
164
|
run: pixi run docs-notebooks
|
|
149
165
|
|
|
@@ -170,17 +186,24 @@ jobs:
|
|
|
170
186
|
if-no-files-found: 'error'
|
|
171
187
|
compression-level: 0
|
|
172
188
|
|
|
173
|
-
#
|
|
174
|
-
# Configure git for pushing to gh-pages branch
|
|
189
|
+
# Configure git user for mike to commit and push to gh-pages branch.
|
|
175
190
|
- name: Configure git for pushing
|
|
176
191
|
run: |
|
|
177
|
-
git config user.name "
|
|
178
|
-
git config user.email "
|
|
192
|
+
git config user.name "easyscience[bot]"
|
|
193
|
+
git config user.email "${{ vars.EASYSCIENCE_APP_ID }}+easyscience[bot]@users.noreply.github.com"
|
|
194
|
+
|
|
195
|
+
# Fetch the gh-pages branch to ensure mike has the latest remote state.
|
|
196
|
+
# This is required because the checkout step only fetches the source branch,
|
|
197
|
+
# not the gh-pages branch that mike needs to update.
|
|
198
|
+
- name: Fetch gh-pages branch
|
|
199
|
+
run: |
|
|
200
|
+
git fetch origin gh-pages:gh-pages 2>/dev/null || true
|
|
179
201
|
|
|
180
|
-
#
|
|
181
|
-
#
|
|
182
|
-
#
|
|
183
|
-
# "${RELEASE_VERSION#v}"
|
|
202
|
+
# Deploy versioned documentation using mike (MkDocs plugin for versioning).
|
|
203
|
+
# - For release tags (v*): deploys to versioned folder (e.g., /0.9.1/) and aliases to /latest/.
|
|
204
|
+
# - For branches: deploys to /dev/.
|
|
205
|
+
# The "${RELEASE_VERSION#v}" syntax strips the 'v' prefix (v0.9.1 -> 0.9.1).
|
|
206
|
+
# Also sets 'latest' as the default version for the version selector.
|
|
184
207
|
- name: Rebuild and deploy docs with mike
|
|
185
208
|
run: |
|
|
186
209
|
if [[ "${IS_RELEASE_TAG}" == "true" ]]; then
|
|
@@ -50,14 +50,12 @@ jobs:
|
|
|
50
50
|
unzip ${DEFAULT_BRANCH}.zip -d .
|
|
51
51
|
mkdir -p tests
|
|
52
52
|
cp -r diffraction-lib-${DEFAULT_BRANCH}/tests/* tests/
|
|
53
|
+
cp diffraction-lib-${DEFAULT_BRANCH}/pytest.ini .
|
|
53
54
|
rm -rf ${DEFAULT_BRANCH}.zip diffraction-lib-${DEFAULT_BRANCH}
|
|
54
55
|
|
|
55
56
|
- name: Create the environment and install dependencies
|
|
56
57
|
run: pixi install
|
|
57
58
|
|
|
58
|
-
- name: Install package from PyPI with all extras
|
|
59
|
-
run: pixi add --pypi "easydiffraction[all]"
|
|
60
|
-
|
|
61
59
|
- name: Run unit tests to verify the installation
|
|
62
60
|
run: pixi run unit-tests
|
|
63
61
|
|
|
@@ -71,7 +69,7 @@ jobs:
|
|
|
71
69
|
run: |
|
|
72
70
|
pixi run easydiffraction --version
|
|
73
71
|
pixi run easydiffraction list-tutorials
|
|
74
|
-
pixi run easydiffraction
|
|
72
|
+
pixi run easydiffraction download-all-tutorials
|
|
75
73
|
|
|
76
74
|
- name: Test tutorials as notebooks
|
|
77
75
|
run: pixi run notebook-tests
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
# This workflow creates an automated release PR from `develop` into `
|
|
1
|
+
# This workflow creates an automated release PR from `develop` into `master`.
|
|
2
2
|
#
|
|
3
3
|
# Usage:
|
|
4
4
|
# - Triggered manually via workflow_dispatch.
|
|
5
5
|
# - Creates a PR titled "Release: merge develop into master".
|
|
6
6
|
# - Adds the label "[maintainer] auto-pull-request" so it is excluded from changelogs.
|
|
7
7
|
# - The PR body makes clear that this is automation only (no review needed).
|
|
8
|
+
#
|
|
9
|
+
# Required repo config:
|
|
10
|
+
# https://github.com/organizations/easyscience/settings/secrets/actions
|
|
11
|
+
# https://github.com/organizations/easyscience/settings/variables/actions
|
|
12
|
+
# - Actions secret: EASYSCIENCE_APP_KEY (GitHub App private key PEM)
|
|
13
|
+
# - Actions variable: EASYSCIENCE_APP_ID (GitHub App ID)
|
|
8
14
|
|
|
9
15
|
name: Release PR (develop -> master)
|
|
10
16
|
|
|
@@ -13,7 +19,7 @@ on:
|
|
|
13
19
|
workflow_dispatch:
|
|
14
20
|
|
|
15
21
|
permissions:
|
|
16
|
-
contents:
|
|
22
|
+
contents: read
|
|
17
23
|
pull-requests: write
|
|
18
24
|
|
|
19
25
|
# Set the environment variables to be used in all jobs defined in this workflow
|
|
@@ -24,10 +30,18 @@ jobs:
|
|
|
24
30
|
create-pull-request:
|
|
25
31
|
runs-on: ubuntu-latest
|
|
26
32
|
steps:
|
|
33
|
+
- name: Create GitHub App installation token
|
|
34
|
+
id: app-token
|
|
35
|
+
uses: actions/create-github-app-token@v2
|
|
36
|
+
with:
|
|
37
|
+
app-id: ${{ vars.EASYSCIENCE_APP_ID }}
|
|
38
|
+
private-key: ${{ secrets.EASYSCIENCE_APP_KEY }}
|
|
39
|
+
|
|
27
40
|
- name: Checkout develop branch
|
|
28
41
|
uses: actions/checkout@v5
|
|
29
42
|
with:
|
|
30
43
|
ref: develop
|
|
44
|
+
token: ${{ steps.app-token.outputs.token }}
|
|
31
45
|
|
|
32
46
|
- name: Create PR from develop to ${{ env.DEFAULT_BRANCH }}
|
|
33
47
|
run: |
|
|
@@ -36,8 +50,8 @@ jobs:
|
|
|
36
50
|
--head develop \
|
|
37
51
|
--title "Release: merge develop into ${{ env.DEFAULT_BRANCH }}" \
|
|
38
52
|
--label "[maintainer] auto-pull-request" \
|
|
39
|
-
--body "
|
|
53
|
+
--body "This PR is created automatically to trigger the release pipeline. It merges the accumulated changes from \`develop\` into \`${{ env.DEFAULT_BRANCH }}\`.
|
|
40
54
|
|
|
41
55
|
It is labeled \`[maintainer] auto-pull-request\` and is excluded from release notes and version bump logic."
|
|
42
56
|
env:
|
|
43
|
-
|
|
57
|
+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
|
@@ -501,10 +501,23 @@ class Analysis:
|
|
|
501
501
|
"""Execute fitting using the selected mode, calculator and
|
|
502
502
|
minimizer.
|
|
503
503
|
|
|
504
|
+
This method performs the optimization but does not display
|
|
505
|
+
results automatically. Call :meth:`show_fit_results` after
|
|
506
|
+
fitting to see a summary of the fit quality and parameter
|
|
507
|
+
values.
|
|
508
|
+
|
|
504
509
|
In 'single' mode, fits each experiment independently. In
|
|
505
510
|
'joint' mode, performs a simultaneous fit across experiments
|
|
506
511
|
with weights.
|
|
507
|
-
|
|
512
|
+
|
|
513
|
+
Sets :attr:`fit_results` on success, which can be accessed
|
|
514
|
+
programmatically
|
|
515
|
+
(e.g., ``analysis.fit_results.reduced_chi_square``).
|
|
516
|
+
|
|
517
|
+
Example::
|
|
518
|
+
|
|
519
|
+
project.analysis.fit()
|
|
520
|
+
project.analysis.show_fit_results() # Display results
|
|
508
521
|
"""
|
|
509
522
|
sample_models = self.project.sample_models
|
|
510
523
|
if not sample_models:
|
|
@@ -554,6 +567,30 @@ class Analysis:
|
|
|
554
567
|
# After fitting, get the results
|
|
555
568
|
self.fit_results = self.fitter.results
|
|
556
569
|
|
|
570
|
+
def show_fit_results(self) -> None:
|
|
571
|
+
"""Display a summary of the fit results.
|
|
572
|
+
|
|
573
|
+
Renders the fit quality metrics (reduced χ², R-factors) and a
|
|
574
|
+
table of fitted parameters with their starting values, final
|
|
575
|
+
values, and uncertainties.
|
|
576
|
+
|
|
577
|
+
This method should be called after :meth:`fit` completes. If no
|
|
578
|
+
fit has been performed yet, a warning is logged.
|
|
579
|
+
|
|
580
|
+
Example::
|
|
581
|
+
|
|
582
|
+
project.analysis.fit()
|
|
583
|
+
project.analysis.show_fit_results()
|
|
584
|
+
"""
|
|
585
|
+
if not hasattr(self, 'fit_results') or self.fit_results is None:
|
|
586
|
+
log.warning('No fit results available. Run fit() first.')
|
|
587
|
+
return
|
|
588
|
+
|
|
589
|
+
sample_models = self.project.sample_models
|
|
590
|
+
experiments = self.project.experiments
|
|
591
|
+
|
|
592
|
+
self.fitter._process_fit_results(sample_models, experiments)
|
|
593
|
+
|
|
557
594
|
def _update_categories(self, called_by_minimizer=False) -> None:
|
|
558
595
|
"""Update all categories owned by Analysis.
|
|
559
596
|
|
|
@@ -37,6 +37,10 @@ class Fitter:
|
|
|
37
37
|
) -> None:
|
|
38
38
|
"""Run the fitting process.
|
|
39
39
|
|
|
40
|
+
This method performs the optimization but does not display
|
|
41
|
+
results. Use :meth:`show_fit_results` on the Analysis object
|
|
42
|
+
to display the fit results after fitting is complete.
|
|
43
|
+
|
|
40
44
|
Args:
|
|
41
45
|
sample_models: Collection of sample models.
|
|
42
46
|
experiments: Collection of experiments.
|
|
@@ -66,15 +70,17 @@ class Fitter:
|
|
|
66
70
|
# Perform fitting
|
|
67
71
|
self.results = self.minimizer.fit(params, objective_function)
|
|
68
72
|
|
|
69
|
-
# Post-fit processing
|
|
70
|
-
self._process_fit_results(sample_models, experiments)
|
|
71
|
-
|
|
72
73
|
def _process_fit_results(
|
|
73
74
|
self,
|
|
74
75
|
sample_models: SampleModels,
|
|
75
76
|
experiments: Experiments,
|
|
76
77
|
) -> None:
|
|
77
|
-
"""Collect reliability inputs and display results
|
|
78
|
+
"""Collect reliability inputs and display fit results.
|
|
79
|
+
|
|
80
|
+
This method is typically called by
|
|
81
|
+
:meth:`Analysis.show_fit_results` rather than directly. It
|
|
82
|
+
calculates R-factors and other metrics, then renders them to
|
|
83
|
+
the console.
|
|
78
84
|
|
|
79
85
|
Args:
|
|
80
86
|
sample_models: Collection of sample models.
|
|
@@ -554,8 +554,8 @@ class ConsolePrinter:
|
|
|
554
554
|
def section(cls, title: str) -> None:
|
|
555
555
|
"""Formats a section header with bold green text."""
|
|
556
556
|
full_title = f'{title.upper()}'
|
|
557
|
-
line = '
|
|
558
|
-
formatted = f'[bold green]
|
|
557
|
+
line = '—' * len(full_title)
|
|
558
|
+
formatted = f'[bold green]{line}\n{full_title}\n{line}[/bold green]'
|
|
559
559
|
if not in_jupyter():
|
|
560
560
|
formatted = f'\n{formatted}'
|
|
561
561
|
cls._console.print(formatted)
|
|
@@ -566,7 +566,7 @@ class ConsolePrinter:
|
|
|
566
566
|
and padding.
|
|
567
567
|
"""
|
|
568
568
|
width = ConsoleManager._detect_width()
|
|
569
|
-
symbol = '
|
|
569
|
+
symbol = '—'
|
|
570
570
|
full_title = f' {title.upper()} '
|
|
571
571
|
pad_len = (width - len(full_title)) // 2
|
|
572
572
|
padding = symbol * pad_len
|
|
@@ -82,3 +82,56 @@ def test_fit_modes_show_and_switch_to_joint(monkeypatch, capsys):
|
|
|
82
82
|
out2 = capsys.readouterr().out
|
|
83
83
|
assert 'Current fit mode changed to' in out2
|
|
84
84
|
assert a.fit_mode == 'joint'
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def test_show_fit_results_warns_when_no_results(capsys):
|
|
88
|
+
"""Test that show_fit_results logs a warning when fit() has not been run."""
|
|
89
|
+
from easydiffraction.analysis.analysis import Analysis
|
|
90
|
+
|
|
91
|
+
a = Analysis(project=_make_project_with_names([]))
|
|
92
|
+
|
|
93
|
+
# Ensure fit_results is not set
|
|
94
|
+
assert not hasattr(a, 'fit_results') or a.fit_results is None
|
|
95
|
+
|
|
96
|
+
a.show_fit_results()
|
|
97
|
+
out = capsys.readouterr().out
|
|
98
|
+
assert 'No fit results available' in out
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def test_show_fit_results_calls_process_fit_results(monkeypatch):
|
|
102
|
+
"""Test that show_fit_results delegates to fitter._process_fit_results."""
|
|
103
|
+
from easydiffraction.analysis.analysis import Analysis
|
|
104
|
+
|
|
105
|
+
# Track if _process_fit_results was called
|
|
106
|
+
process_called = {'called': False, 'args': None}
|
|
107
|
+
|
|
108
|
+
def mock_process_fit_results(sample_models, experiments):
|
|
109
|
+
process_called['called'] = True
|
|
110
|
+
process_called['args'] = (sample_models, experiments)
|
|
111
|
+
|
|
112
|
+
# Create a mock project with sample_models and experiments
|
|
113
|
+
class MockProject:
|
|
114
|
+
sample_models = object()
|
|
115
|
+
experiments = object()
|
|
116
|
+
_varname = 'proj'
|
|
117
|
+
|
|
118
|
+
class experiments_cls:
|
|
119
|
+
names = []
|
|
120
|
+
|
|
121
|
+
experiments = experiments_cls()
|
|
122
|
+
|
|
123
|
+
project = MockProject()
|
|
124
|
+
project.sample_models = object()
|
|
125
|
+
project.experiments.names = []
|
|
126
|
+
|
|
127
|
+
a = Analysis(project=project)
|
|
128
|
+
|
|
129
|
+
# Set up fit_results so show_fit_results doesn't return early
|
|
130
|
+
a.fit_results = object()
|
|
131
|
+
|
|
132
|
+
# Mock the fitter's _process_fit_results method
|
|
133
|
+
monkeypatch.setattr(a.fitter, '_process_fit_results', mock_process_fit_results)
|
|
134
|
+
|
|
135
|
+
a.show_fit_results()
|
|
136
|
+
|
|
137
|
+
assert process_called['called'], '_process_fit_results should be called'
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2021-2025 EasyDiffraction contributors <https://github.com/easyscience/diffraction>
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
|
+
|
|
4
|
+
def test_module_import():
|
|
5
|
+
import easydiffraction.analysis.fitting as MUT
|
|
6
|
+
|
|
7
|
+
expected_module_name = 'easydiffraction.analysis.fitting'
|
|
8
|
+
actual_module_name = MUT.__name__
|
|
9
|
+
assert expected_module_name == actual_module_name
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_fitter_early_exit_when_no_params(capsys, monkeypatch):
|
|
13
|
+
from easydiffraction.analysis.fitting import Fitter
|
|
14
|
+
|
|
15
|
+
class DummyCollection:
|
|
16
|
+
free_parameters = []
|
|
17
|
+
|
|
18
|
+
def __init__(self):
|
|
19
|
+
self._names = ['e1']
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def names(self):
|
|
23
|
+
return self._names
|
|
24
|
+
|
|
25
|
+
class DummyMin:
|
|
26
|
+
tracker = type('T', (), {'track': staticmethod(lambda a, b: a)})()
|
|
27
|
+
|
|
28
|
+
def fit(self, params, obj):
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
f = Fitter()
|
|
32
|
+
# Avoid creating a real minimizer
|
|
33
|
+
f.minimizer = DummyMin()
|
|
34
|
+
f.fit(sample_models=DummyCollection(), experiments=DummyCollection())
|
|
35
|
+
out = capsys.readouterr().out
|
|
36
|
+
assert 'No parameters selected for fitting' in out
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_fitter_fit_does_not_call_process_fit_results(monkeypatch):
|
|
40
|
+
"""Test that Fitter.fit() does not automatically call _process_fit_results.
|
|
41
|
+
|
|
42
|
+
The display of results is now the responsibility of Analysis.show_fit_results().
|
|
43
|
+
"""
|
|
44
|
+
from easydiffraction.analysis.fitting import Fitter
|
|
45
|
+
|
|
46
|
+
process_called = {'called': False}
|
|
47
|
+
|
|
48
|
+
class DummyParam:
|
|
49
|
+
value = 1.0
|
|
50
|
+
_fit_start_value = None
|
|
51
|
+
|
|
52
|
+
class DummyCollection:
|
|
53
|
+
free_parameters = [DummyParam()]
|
|
54
|
+
|
|
55
|
+
def __init__(self):
|
|
56
|
+
self._names = ['e1']
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def names(self):
|
|
60
|
+
return self._names
|
|
61
|
+
|
|
62
|
+
class MockFitResults:
|
|
63
|
+
pass
|
|
64
|
+
|
|
65
|
+
class DummyMin:
|
|
66
|
+
tracker = type('T', (), {'track': staticmethod(lambda a, b: a)})()
|
|
67
|
+
|
|
68
|
+
def fit(self, params, obj):
|
|
69
|
+
return MockFitResults()
|
|
70
|
+
|
|
71
|
+
def _sync_result_to_parameters(self, params, engine_params):
|
|
72
|
+
pass
|
|
73
|
+
|
|
74
|
+
f = Fitter()
|
|
75
|
+
f.minimizer = DummyMin()
|
|
76
|
+
|
|
77
|
+
# Track if _process_fit_results is called
|
|
78
|
+
original_process = f._process_fit_results
|
|
79
|
+
|
|
80
|
+
def mock_process(*args, **kwargs):
|
|
81
|
+
process_called['called'] = True
|
|
82
|
+
return original_process(*args, **kwargs)
|
|
83
|
+
|
|
84
|
+
monkeypatch.setattr(f, '_process_fit_results', mock_process)
|
|
85
|
+
|
|
86
|
+
f.fit(sample_models=DummyCollection(), experiments=DummyCollection())
|
|
87
|
+
|
|
88
|
+
assert not process_called['called'], (
|
|
89
|
+
'Fitter.fit() should not call _process_fit_results automatically. '
|
|
90
|
+
'Use Analysis.show_fit_results() instead.'
|
|
91
|
+
)
|
|
92
|
+
assert f.results is not None, 'Fitter.fit() should still set results'
|
{easydiffraction-0.9.1 → easydiffraction-0.10.0}/tests/unit/easydiffraction/utils/test_utils.py
RENAMED
|
@@ -189,6 +189,7 @@ def test_get_version_for_url_released(monkeypatch):
|
|
|
189
189
|
assert MUT._get_version_for_url() == '0.8.0.post1'
|
|
190
190
|
|
|
191
191
|
|
|
192
|
+
@pytest.mark.filterwarnings('ignore:Failed to fetch tutorials index:UserWarning')
|
|
192
193
|
def test_fetch_tutorials_index_returns_empty_on_error(monkeypatch):
|
|
193
194
|
import easydiffraction.utils.utils as MUT
|
|
194
195
|
|