easydiffraction 0.7.2__tar.gz → 0.7.3__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.7.3/.badgery.yaml +73 -0
- easydiffraction-0.7.3/.github/workflows/backmerge-pr.yaml +44 -0
- easydiffraction-0.7.2/.github/workflows/delete-old-runs.yml → easydiffraction-0.7.3/.github/workflows/cleanup.yaml +1 -1
- easydiffraction-0.7.3/.github/workflows/coverage.yaml +145 -0
- easydiffraction-0.7.3/.github/workflows/dashboard.yaml +89 -0
- easydiffraction-0.7.2/.github/workflows/build-docs.yml → easydiffraction-0.7.3/.github/workflows/docs.yaml +11 -8
- easydiffraction-0.7.3/.github/workflows/labels.yaml +45 -0
- easydiffraction-0.7.2/.github/workflows/publish-pypi.yml → easydiffraction-0.7.3/.github/workflows/pypi-publish.yaml +13 -10
- easydiffraction-0.7.2/.github/workflows/test-package-pypi.yaml → easydiffraction-0.7.3/.github/workflows/pypi-test.yaml +22 -9
- easydiffraction-0.7.3/.github/workflows/quality.yaml +123 -0
- easydiffraction-0.7.2/.github/workflows/draft-release-notes.yml → easydiffraction-0.7.3/.github/workflows/release-notes.yaml +8 -5
- easydiffraction-0.7.3/.github/workflows/release-pr.yaml +43 -0
- easydiffraction-0.7.2/.github/workflows/scan-security.yml → easydiffraction-0.7.3/.github/workflows/security.yaml +1 -2
- easydiffraction-0.7.2/.github/workflows/trigger-test-code.yaml → easydiffraction-0.7.3/.github/workflows/test-trigger.yaml +4 -4
- easydiffraction-0.7.2/.github/workflows/test-code.yaml → easydiffraction-0.7.3/.github/workflows/test.yaml +81 -119
- easydiffraction-0.7.2/.github/workflows/test-tutorials-colab.yaml → easydiffraction-0.7.3/.github/workflows/tutorial-tests-colab.yaml +2 -2
- easydiffraction-0.7.2/.github/workflows/trigger-test-tutorials.yaml → easydiffraction-0.7.3/.github/workflows/tutorial-tests-trigger.yaml +4 -4
- easydiffraction-0.7.2/.github/workflows/test-tutorials.yaml → easydiffraction-0.7.3/.github/workflows/tutorial-tests.yaml +9 -49
- easydiffraction-0.7.3/.pre-commit-config.yaml +57 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/DEVELOPMENT.md +37 -4
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/PKG-INFO +35 -1
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/installation-and-setup/index.md +2 -2
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pixi.lock +4981 -11285
- easydiffraction-0.7.3/pixi.toml +205 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pyproject.toml +120 -20
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/__init__.py +4 -4
- easydiffraction-0.7.3/src/easydiffraction/__main__.py +53 -0
- easydiffraction-0.7.3/src/easydiffraction/analysis/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/analysis.py +48 -25
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculation.py +10 -16
- easydiffraction-0.7.3/src/easydiffraction/analysis/calculators/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_base.py +22 -20
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_crysfml.py +40 -29
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_cryspy.py +36 -26
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_factory.py +4 -2
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_pdffit.py +22 -10
- easydiffraction-0.7.3/src/easydiffraction/analysis/collections/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/collections/aliases.py +1 -1
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/collections/constraints.py +1 -1
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/collections/joint_fit_experiments.py +3 -4
- easydiffraction-0.7.3/src/easydiffraction/analysis/fitting/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/fitting/metrics.py +15 -15
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/fitting/progress_tracker.py +31 -18
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/fitting/results.py +22 -5
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimization.py +20 -21
- easydiffraction-0.7.3/src/easydiffraction/analysis/minimizers/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_base.py +7 -7
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_dfols.py +10 -12
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_factory.py +11 -11
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_lmfit.py +12 -19
- easydiffraction-0.7.3/src/easydiffraction/core/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/core/objects.py +105 -78
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/core/singletons.py +22 -17
- easydiffraction-0.7.3/src/easydiffraction/crystallography/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/crystallography/crystallography.py +7 -7
- easydiffraction-0.7.3/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
- easydiffraction-0.7.3/src/easydiffraction/crystallography/space_groups.py +23 -0
- easydiffraction-0.7.3/src/easydiffraction/experiments/__init__.py +2 -0
- easydiffraction-0.7.3/src/easydiffraction/experiments/collections/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/collections/background.py +18 -13
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/collections/excluded_regions.py +6 -8
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/collections/linked_phases.py +2 -4
- easydiffraction-0.7.3/src/easydiffraction/experiments/components/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/components/experiment_type.py +8 -7
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/components/instrument.py +19 -8
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/components/peak.py +64 -33
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/datastore.py +67 -63
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/experiment.py +72 -70
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/experiments.py +7 -19
- easydiffraction-0.7.3/src/easydiffraction/plotting/__init__.py +2 -0
- easydiffraction-0.7.3/src/easydiffraction/plotting/plotters/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotters/plotter_ascii.py +3 -1
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotters/plotter_base.py +21 -6
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotters/plotter_plotly.py +5 -2
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotting.py +9 -20
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/project.py +44 -44
- easydiffraction-0.7.3/src/easydiffraction/sample_models/__init__.py +2 -0
- easydiffraction-0.7.3/src/easydiffraction/sample_models/collections/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/collections/atom_sites.py +9 -10
- easydiffraction-0.7.3/src/easydiffraction/sample_models/components/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/components/cell.py +2 -4
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/components/space_group.py +2 -4
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/sample_model.py +29 -32
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/sample_models.py +13 -19
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/summary.py +31 -33
- easydiffraction-0.7.3/src/easydiffraction/utils/__init__.py +2 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/utils/decorators.py +20 -6
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/utils/formatting.py +9 -5
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/utils/utils.py +153 -126
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/components/test_peak.py +2 -2
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/test_experiment.py +2 -1
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/test_sample_models.py +6 -6
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/test_project.py +33 -15
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/test_symmetry_lookup_table.py +5 -4
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/create_mkdocs_yml.py +35 -45
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/test_scripts.py +6 -4
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/tweak_notebooks.py +20 -23
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/update_spdx.py +10 -9
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/advanced_joint-fit_pd-neut-xray-cwl_PbSO4.py +16 -12
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +26 -18
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-cwl_CoSiO4-D20.py +7 -5
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-cwl_HS-HRPT.py +7 -5
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-tof_Si-SEPD.py +7 -5
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-tof_multidata_NCAF-WISH.py +11 -9
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-tof_multiphase-LBCO-Si_McStas.py +13 -45
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/dmsc-summer-school-2025_analysis-powder-diffraction.py +542 -479
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/pdf_pd-neut-cwl_Ni.py +10 -4
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/pdf_pd-neut-tof_Si-NOMAD.py +12 -4
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/pdf_pd-xray_NaCl.py +10 -3
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/quick_single-fit_pd-neut-cwl_LBCO-HRPT.py +8 -8
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/cryst-struct_pd-neut-tof_multiphase-BSFTO-HRPT.py +2 -2
- easydiffraction-0.7.2/.github/workflows/create-release-pr.yml +0 -35
- easydiffraction-0.7.2/.github/workflows/verify-pr-labels.yml +0 -24
- easydiffraction-0.7.2/pixi/prod/pixi.toml +0 -23
- easydiffraction-0.7.2/pixi/wheel/pixi.toml +0 -31
- easydiffraction-0.7.2/pixi.toml +0 -163
- easydiffraction-0.7.2/src/easydiffraction/__main__.py +0 -37
- easydiffraction-0.7.2/src/easydiffraction/analysis/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/analysis/collections/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/analysis/fitting/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/analysis/minimizers/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/core/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/crystallography/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/crystallography/space_group_lookup_table.py +0 -25508
- easydiffraction-0.7.2/src/easydiffraction/experiments/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/experiments/collections/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/experiments/components/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/plotting/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/plotting/plotters/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/sample_models/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/sample_models/collections/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/sample_models/components/__init__.py +0 -3
- easydiffraction-0.7.2/src/easydiffraction/utils/__init__.py +0 -3
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/.gitignore +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/.prettierignore +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/CONTRIBUTING.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/LICENSE +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/README.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/deps/pycrysfml-0.1.6-py312-none-macosx_14_0_arm64.whl +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/deps/pycrysfml-0.1.6-py312-none-win_amd64.whl +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/analysis.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/core.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/crystallography.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/experiments.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/index.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/plotting.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/project.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/sample_models.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/summary.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/utils.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-analysis_model.png +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/index.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/introduction/index.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/mkdocs.yml +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/tutorials/index.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/analysis.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/experiment.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/index.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/model.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/project.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/summary.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/concept.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/data-format.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/first-steps.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/glossary.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/index.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_exptl_crystal.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_extinction.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_pd_calib.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/atom_site.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/background.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/cell.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/expt_type.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/instrument.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/linked_phases.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/pd_meas.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/peak.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/space_group.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/prettierrc.toml +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pycrysfml.md +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pytest.ini +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_pair-distribution-function.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_constant-wavelength.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_joint-fit.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_multiphase.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_time-of-flight.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/calculators/test_calculator_base.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/calculators/test_calculator_cryspy.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/calculators/test_calculator_factory.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/collections/test_joint_fit_experiment.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_fitting_progress_tracker.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_base.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_dfols.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_factory.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_lmfit.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/test_analysis.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/test_minimization.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/test_reliability_factors.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/core/test_objects.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/core/test_singletons.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/collections/test_background.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/collections/test_datastore.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/collections/test_linked_phases.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/components/test_experiment_type.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/components/test_instrument.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/test_experiments.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/collections/test_atom_sites.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/components/test_cell.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/components/test_space_group.py +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/add_assets_to_docs.sh +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/cleanup_docs.sh +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/NOM_9999_Si_640g_PAC_50_ff_ftfrgr_up-to-50.gr +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/NaCl.gr +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/co2sio4_d20.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/d1a_pbso4.dat +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/d1a_pbso4_first-half.dat +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/d1a_pbso4_second-half.dat +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/hrpt_hs.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/hrpt_lbco.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/lab_pbso4.dat +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/mcstas_lbco-si.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/mcstas_lbco-si.xys +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/mcstas_lbco-si_up-to-108k.xys +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/ni-q27r100-neutron_from-2.gr +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/powder_reduced_Si_2large_bank.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/reduced_LBCO.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/reduced_Si.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/sepd_si.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_2_9.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_4_7.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_4_7.xys +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_5_6.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_5_6.xys +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ybcfo_5_6.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_cif.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_cif_2.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_nc.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_nc_2.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/Si_mp-149_symmetrized_mcstas.cif +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/hrpt_n_Bi0p88Sm0p12Fe0p94Ti0p06O3_DW_V_9x8x52_1p49_HI.xye +0 -0
- {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/test_single-fit_pd-neut-tof_Si-DREAM_nc.py +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
default_branch: master
|
|
2
|
+
develop_branch: develop
|
|
3
|
+
|
|
4
|
+
cards:
|
|
5
|
+
- group: Tests
|
|
6
|
+
type: gh_action
|
|
7
|
+
title: Code/package tests (GitHub)
|
|
8
|
+
file: test.yaml
|
|
9
|
+
enabled: true
|
|
10
|
+
|
|
11
|
+
- group: Tests
|
|
12
|
+
type: gh_action
|
|
13
|
+
title: Tutorial tests (GitHub)
|
|
14
|
+
file: tutorial-tests.yaml
|
|
15
|
+
enabled: true
|
|
16
|
+
|
|
17
|
+
- group: Tests
|
|
18
|
+
type: gh_action
|
|
19
|
+
title: Package tests (PyPI)
|
|
20
|
+
file: pypi-test.yaml
|
|
21
|
+
enabled: true
|
|
22
|
+
|
|
23
|
+
- group: Code Quality
|
|
24
|
+
type: codefactor
|
|
25
|
+
title: Code quality (CodeFactor)
|
|
26
|
+
enabled: true
|
|
27
|
+
|
|
28
|
+
- group: Code Quality
|
|
29
|
+
type: radon_mi
|
|
30
|
+
title: Maintainability index (radon)
|
|
31
|
+
report: reports/{branch}/maintainability-index.json
|
|
32
|
+
enabled: true
|
|
33
|
+
|
|
34
|
+
- group: Code Quality
|
|
35
|
+
type: radon_cc
|
|
36
|
+
title: Cyclomatic complexity (radon)
|
|
37
|
+
report: reports/{branch}/cyclomatic-complexity.json
|
|
38
|
+
enabled: true
|
|
39
|
+
|
|
40
|
+
- group: Size
|
|
41
|
+
type: radon_loc
|
|
42
|
+
title: Source/Logical lines of code (radon)
|
|
43
|
+
report: reports/{branch}/raw-metrics.json
|
|
44
|
+
enabled: true
|
|
45
|
+
|
|
46
|
+
- group: Size
|
|
47
|
+
type: radon_ff
|
|
48
|
+
title: Functions/Files count (radon)
|
|
49
|
+
report: reports/{branch}/cyclomatic-complexity.json
|
|
50
|
+
enabled: true
|
|
51
|
+
|
|
52
|
+
- group: Coverage
|
|
53
|
+
type: codecov
|
|
54
|
+
title: Unit test coverage (Codecov)
|
|
55
|
+
enabled: true
|
|
56
|
+
|
|
57
|
+
- group: Coverage
|
|
58
|
+
type: interrogate
|
|
59
|
+
title: Docstring coverage (interrogate)
|
|
60
|
+
report: reports/{branch}/coverage-docstring.txt
|
|
61
|
+
enabled: true
|
|
62
|
+
|
|
63
|
+
- group: Build & Release
|
|
64
|
+
type: gh_action
|
|
65
|
+
title: Publishing (PyPI)
|
|
66
|
+
workflow: pypi-publish.yaml
|
|
67
|
+
enabled: true
|
|
68
|
+
|
|
69
|
+
- group: Build & Release
|
|
70
|
+
type: gh_action
|
|
71
|
+
title: Docs build/deployment
|
|
72
|
+
workflow: docs.yaml
|
|
73
|
+
enabled: true
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# This workflow creates a backmerge PR from DEFAULT_BRANCH into `develop`
|
|
2
|
+
# whenever a new version tag is pushed (v*).
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# - Triggered automatically on tag push (v*).
|
|
6
|
+
# - Creates a PR titled "Backmerge: DEFAULT_BRANCH into develop".
|
|
7
|
+
# - Adds the label "[maintainer] auto-pull-request" so it is excluded from changelogs.
|
|
8
|
+
|
|
9
|
+
name: Backmerge PR creation
|
|
10
|
+
|
|
11
|
+
on:
|
|
12
|
+
push:
|
|
13
|
+
tags:
|
|
14
|
+
- 'v*'
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
pull-requests: write
|
|
19
|
+
|
|
20
|
+
# Set the environment variables to be used in all jobs defined in this workflow
|
|
21
|
+
env:
|
|
22
|
+
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
create-backmerge-pr:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout ${{ env.DEFAULT_BRANCH }} branch
|
|
29
|
+
uses: actions/checkout@v5
|
|
30
|
+
with:
|
|
31
|
+
ref: ${{ env.DEFAULT_BRANCH }}
|
|
32
|
+
|
|
33
|
+
- name: Create PR from ${{ env.DEFAULT_BRANCH }} to develop
|
|
34
|
+
run: |
|
|
35
|
+
gh pr create \
|
|
36
|
+
--base develop \
|
|
37
|
+
--head ${{ env.DEFAULT_BRANCH }} \
|
|
38
|
+
--title "Backmerge: ${{ env.DEFAULT_BRANCH }} into develop" \
|
|
39
|
+
--label "[maintainer] auto-pull-request" \
|
|
40
|
+
--body "⚠️ This PR is created automatically for backmerges changes from \`${{ env.DEFAULT_BRANCH }}\` into \`develop\`, following a new release tag push.
|
|
41
|
+
|
|
42
|
+
It is labeled \`[maintainer] auto-pull-request\` and is excluded from release notes and version bump logic."
|
|
43
|
+
env:
|
|
44
|
+
GITHUB_TOKEN: ${{ secrets.GH_API_PERSONAL_ACCESS_TOKEN }}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
name: Coverage checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
# Trigger the workflow on push
|
|
5
|
+
push:
|
|
6
|
+
# Trigger the workflow on pull request
|
|
7
|
+
pull_request:
|
|
8
|
+
# Allows you to run this workflow manually from the Actions tab
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
# Need permissions to trigger the dashboard build workflow
|
|
12
|
+
permissions:
|
|
13
|
+
actions: write
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
# Allow only one concurrent workflow, skipping runs queued between the run
|
|
17
|
+
# in-progress and latest queued. And cancel in-progress runs.
|
|
18
|
+
concurrency:
|
|
19
|
+
group:
|
|
20
|
+
${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
21
|
+
cancel-in-progress: true
|
|
22
|
+
|
|
23
|
+
# Set the environment variables to be used in all jobs defined in this workflow
|
|
24
|
+
env:
|
|
25
|
+
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
# Job 1: Run docstring coverage
|
|
29
|
+
docstring-coverage:
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
|
|
32
|
+
steps:
|
|
33
|
+
- name: Check-out repository
|
|
34
|
+
uses: actions/checkout@v5
|
|
35
|
+
|
|
36
|
+
- name: Set up pixi
|
|
37
|
+
uses: prefix-dev/setup-pixi@v0.9.0
|
|
38
|
+
with:
|
|
39
|
+
environments: default
|
|
40
|
+
activate-environment: default
|
|
41
|
+
run-install: true
|
|
42
|
+
frozen: true
|
|
43
|
+
cache: false
|
|
44
|
+
post-cleanup: false
|
|
45
|
+
|
|
46
|
+
- name: Install and setup development dependencies
|
|
47
|
+
shell: bash
|
|
48
|
+
run: pixi run dev
|
|
49
|
+
|
|
50
|
+
- name: Run docstring coverage
|
|
51
|
+
run: pixi run docstring-coverage
|
|
52
|
+
|
|
53
|
+
# Job 2: Run unit tests with coverage and upload to Codecov
|
|
54
|
+
unit-tests-coverage:
|
|
55
|
+
runs-on: ubuntu-latest
|
|
56
|
+
|
|
57
|
+
steps:
|
|
58
|
+
- name: Check-out repository
|
|
59
|
+
uses: actions/checkout@v5
|
|
60
|
+
|
|
61
|
+
- name: Set up pixi
|
|
62
|
+
uses: prefix-dev/setup-pixi@v0.9.0
|
|
63
|
+
with:
|
|
64
|
+
environments: default
|
|
65
|
+
activate-environment: default
|
|
66
|
+
run-install: true
|
|
67
|
+
frozen: true
|
|
68
|
+
cache: false
|
|
69
|
+
post-cleanup: false
|
|
70
|
+
|
|
71
|
+
- name: Install and setup development dependencies
|
|
72
|
+
shell: bash
|
|
73
|
+
run: pixi run dev
|
|
74
|
+
|
|
75
|
+
- name: Run unit tests with coverage
|
|
76
|
+
run: pixi run unit-tests-coverage --cov-report=xml:coverage-unit.xml
|
|
77
|
+
|
|
78
|
+
- name: Upload unit tests coverage to Codecov
|
|
79
|
+
if: ${{ !cancelled() }}
|
|
80
|
+
uses: codecov/codecov-action@v5
|
|
81
|
+
with:
|
|
82
|
+
name: unit-tests-job
|
|
83
|
+
flags: unittests
|
|
84
|
+
files: ./coverage-unit.xml
|
|
85
|
+
fail_ci_if_error: true
|
|
86
|
+
verbose: true
|
|
87
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
88
|
+
|
|
89
|
+
# Job 2: Run functional tests with coverage and upload to Codecov
|
|
90
|
+
func-tests-coverage:
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
|
|
93
|
+
steps:
|
|
94
|
+
- name: Check-out repository
|
|
95
|
+
uses: actions/checkout@v5
|
|
96
|
+
|
|
97
|
+
- name: Set up pixi
|
|
98
|
+
uses: prefix-dev/setup-pixi@v0.9.0
|
|
99
|
+
with:
|
|
100
|
+
environments: default
|
|
101
|
+
activate-environment: default
|
|
102
|
+
run-install: true
|
|
103
|
+
frozen: true
|
|
104
|
+
cache: false
|
|
105
|
+
post-cleanup: false
|
|
106
|
+
|
|
107
|
+
- name: Install and setup development dependencies
|
|
108
|
+
shell: bash
|
|
109
|
+
run: pixi run dev
|
|
110
|
+
|
|
111
|
+
- name: Run functional tests with coverage
|
|
112
|
+
run: pixi run func-tests-coverage --cov-report=xml:coverage-func.xml
|
|
113
|
+
|
|
114
|
+
- name: Upload functional tests coverage to Codecov
|
|
115
|
+
if: ${{ !cancelled() }}
|
|
116
|
+
uses: codecov/codecov-action@v5
|
|
117
|
+
with:
|
|
118
|
+
name: func-tests-job
|
|
119
|
+
flags: functional
|
|
120
|
+
files: ./coverage-func.xml
|
|
121
|
+
fail_ci_if_error: true
|
|
122
|
+
verbose: true
|
|
123
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
124
|
+
|
|
125
|
+
# Job 4: Trigger dashboard build
|
|
126
|
+
dashboard-build-trigger:
|
|
127
|
+
needs: [docstring-coverage, unit-tests-coverage, func-tests-coverage] # depend on the previous jobs
|
|
128
|
+
|
|
129
|
+
runs-on: ubuntu-latest
|
|
130
|
+
|
|
131
|
+
steps:
|
|
132
|
+
- name: Check-out repository
|
|
133
|
+
uses: actions/checkout@v5
|
|
134
|
+
|
|
135
|
+
- name: Trigger dashboard build
|
|
136
|
+
uses: actions/github-script@v7
|
|
137
|
+
with:
|
|
138
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
139
|
+
script: |
|
|
140
|
+
await github.rest.actions.createWorkflowDispatch({
|
|
141
|
+
owner: context.repo.owner,
|
|
142
|
+
repo: context.repo.repo,
|
|
143
|
+
workflow_id: "dashboard.yaml",
|
|
144
|
+
ref: "${{ env.CI_BRANCH }}"
|
|
145
|
+
});
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
name: Dashboard build and publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
workflow_call:
|
|
6
|
+
|
|
7
|
+
# Allow only one concurrent workflow, skipping runs queued between the run
|
|
8
|
+
# in-progress and latest queued. And cancel in-progress runs.
|
|
9
|
+
concurrency:
|
|
10
|
+
group:
|
|
11
|
+
${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
# Set the environment variables to be used in all jobs defined in this workflow
|
|
15
|
+
env:
|
|
16
|
+
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
17
|
+
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
18
|
+
DEVELOP_BRANCH: develop
|
|
19
|
+
REPO_OWNER: ${{ github.repository_owner }}
|
|
20
|
+
REPO_NAME: ${{ github.event.repository.name }}
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
dashboard:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout repository
|
|
28
|
+
uses: actions/checkout@v5
|
|
29
|
+
with:
|
|
30
|
+
fetch-depth: 0
|
|
31
|
+
|
|
32
|
+
- name: Set up pixi
|
|
33
|
+
uses: prefix-dev/setup-pixi@v0.9.0
|
|
34
|
+
with:
|
|
35
|
+
environments: default
|
|
36
|
+
activate-environment: default
|
|
37
|
+
run-install: true
|
|
38
|
+
frozen: true
|
|
39
|
+
cache: false
|
|
40
|
+
post-cleanup: false
|
|
41
|
+
|
|
42
|
+
- name: Install and setup development dependencies
|
|
43
|
+
shell: bash
|
|
44
|
+
run: pixi run dev
|
|
45
|
+
|
|
46
|
+
- name: Run docstring coverage and code complexity/maintainability checks
|
|
47
|
+
run: |
|
|
48
|
+
for BRANCH in ${{ env.DEFAULT_BRANCH }} ${{ env.DEVELOP_BRANCH }} ${{ env.CI_BRANCH }}; do
|
|
49
|
+
echo "=== Processing branch $BRANCH ==="
|
|
50
|
+
if [ -d "../worktree-$BRANCH" ]; then
|
|
51
|
+
echo "Branch $BRANCH already processed, skipping"
|
|
52
|
+
continue
|
|
53
|
+
fi
|
|
54
|
+
git worktree add ../worktree-$BRANCH origin/$BRANCH
|
|
55
|
+
mkdir -p reports/$BRANCH
|
|
56
|
+
echo "Docstring coverage for branch $BRANCH"
|
|
57
|
+
pixi run interrogate -c pyproject.toml --fail-under=0 ../worktree-$BRANCH/src > reports/$BRANCH/coverage-docstring.txt
|
|
58
|
+
echo "Cyclomatic complexity for branch $BRANCH"
|
|
59
|
+
pixi run radon cc -s -j ../worktree-$BRANCH/src --exclude ../worktree-$BRANCH/src/easydiffraction/crystallography/space_group_lookup_table.py > reports/$BRANCH/cyclomatic-complexity.json
|
|
60
|
+
echo "Maintainability index for branch $BRANCH"
|
|
61
|
+
pixi run radon mi -j ../worktree-$BRANCH/src --exclude ../worktree-$BRANCH/src/easydiffraction/crystallography/space_group_lookup_table.py > reports/$BRANCH/maintainability-index.json
|
|
62
|
+
echo "Raw metrics for branch $BRANCH"
|
|
63
|
+
pixi run radon raw -s -j ../worktree-$BRANCH/src --exclude ../worktree-$BRANCH/src/easydiffraction/crystallography/space_group_lookup_table.py > reports/$BRANCH/raw-metrics.json
|
|
64
|
+
done
|
|
65
|
+
|
|
66
|
+
- name: Generate dashboard HTML
|
|
67
|
+
run: |
|
|
68
|
+
pixi add --pypi --git https://github.com/enhantica/badgery badgery
|
|
69
|
+
pixi run pip show badgery
|
|
70
|
+
pixi run python -m badgery --config .badgery.yaml --repo ${{ github.repository }} --branch ${{ env.CI_BRANCH }} --output index.html
|
|
71
|
+
|
|
72
|
+
- name: Prepare publish directory
|
|
73
|
+
run: |
|
|
74
|
+
mkdir -p _dashboard_publish/${{ env.REPO_NAME }}/${{ env.CI_BRANCH }}
|
|
75
|
+
cp index.html _dashboard_publish/${{ env.REPO_NAME }}/${{ env.CI_BRANCH }}
|
|
76
|
+
|
|
77
|
+
- name: Publish to main branch of ${{ github.repository }}
|
|
78
|
+
uses: peaceiris/actions-gh-pages@v3
|
|
79
|
+
with:
|
|
80
|
+
external_repository: ${{ env.REPO_OWNER }}/dashboard
|
|
81
|
+
publish_branch: ${{ env.DEFAULT_BRANCH }}
|
|
82
|
+
personal_token: ${{ secrets.GH_API_PERSONAL_ACCESS_TOKEN }}
|
|
83
|
+
publish_dir: ./_dashboard_publish
|
|
84
|
+
keep_files: true
|
|
85
|
+
|
|
86
|
+
- name: Add dashboard link to summary
|
|
87
|
+
run: |
|
|
88
|
+
URL="https://${{ env.REPO_OWNER }}.github.io/dashboard/${{ env.REPO_NAME }}/${{ env.CI_BRANCH }}"
|
|
89
|
+
echo "Dashboard link: [$URL]($URL)" >> $GITHUB_STEP_SUMMARY
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
# and inspecting, as well as links to both the development and production versions of
|
|
15
15
|
# the deployed documentation site.
|
|
16
16
|
|
|
17
|
-
name:
|
|
17
|
+
name: Docs build and deployment
|
|
18
18
|
|
|
19
19
|
on:
|
|
20
20
|
# Trigger the workflow on pull request
|
|
21
21
|
pull_request:
|
|
22
22
|
# Selected branches
|
|
23
|
-
branches: [master, develop]
|
|
23
|
+
branches: [master, main, develop]
|
|
24
24
|
# Trigger the workflow on push
|
|
25
25
|
push:
|
|
26
26
|
# Selected branches
|
|
27
|
-
branches: [master, develop]
|
|
27
|
+
branches: [master, main, develop]
|
|
28
28
|
# Runs on creating a new tag starting with 'v', e.g. 'v1.0.3'
|
|
29
29
|
tags: ['v*']
|
|
30
30
|
# Allows you to run this workflow manually from the Actions tab
|
|
@@ -86,14 +86,17 @@ jobs:
|
|
|
86
86
|
- name: Set up pixi
|
|
87
87
|
uses: prefix-dev/setup-pixi@v0.9.0
|
|
88
88
|
with:
|
|
89
|
-
environments:
|
|
90
|
-
|
|
91
|
-
activate-environment: py313-docs
|
|
89
|
+
environments: default
|
|
90
|
+
activate-environment: default
|
|
92
91
|
run-install: true
|
|
93
92
|
frozen: true
|
|
94
93
|
cache: false
|
|
95
94
|
post-cleanup: false
|
|
96
95
|
|
|
96
|
+
- name: Install and setup development dependencies
|
|
97
|
+
shell: bash
|
|
98
|
+
run: pixi run dev
|
|
99
|
+
|
|
97
100
|
- name: Clone easyscience/assets-docs and easyscience/assets-branding
|
|
98
101
|
run: |
|
|
99
102
|
cd ..
|
|
@@ -226,7 +229,7 @@ jobs:
|
|
|
226
229
|
# which triggers deployment to the custom domain via webhook.
|
|
227
230
|
#
|
|
228
231
|
# To be able to push to the gh_pages branch, the personal GitHub API access
|
|
229
|
-
# token
|
|
232
|
+
# token GH_API_PERSONAL_ACCESS_TOKEN must be set for this repository via
|
|
230
233
|
# https://github.com/easyscience/diffraction-lib/settings/secrets/actions
|
|
231
234
|
# Then the gh_pages branch is used to deploy the site to the custom domain.
|
|
232
235
|
# Deploying is done with a webhook added via:
|
|
@@ -234,7 +237,7 @@ jobs:
|
|
|
234
237
|
- name: PROD deployment to gh_pages for custom domain
|
|
235
238
|
uses: s0/git-publish-subdir-action@develop
|
|
236
239
|
env:
|
|
237
|
-
GITHUB_TOKEN: ${{ secrets.
|
|
240
|
+
GITHUB_TOKEN: ${{ secrets.GH_API_PERSONAL_ACCESS_TOKEN }}
|
|
238
241
|
REPO: self
|
|
239
242
|
BRANCH: gh_pages
|
|
240
243
|
FOLDER: site
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Verifies if a pull request has at least one label from a set of valid
|
|
2
|
+
# labels before it can be merged.
|
|
3
|
+
|
|
4
|
+
name: PR label checks
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
pull_request_target:
|
|
8
|
+
types: [opened, labeled, unlabeled, synchronize]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
pull-requests: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
require-label:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Validate required labels
|
|
18
|
+
run: |
|
|
19
|
+
PR_LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r '.[]')
|
|
20
|
+
echo "Current PR labels: $PR_LABELS"
|
|
21
|
+
VALID_LABELS=(
|
|
22
|
+
"[maintainer] auto-pull-request"
|
|
23
|
+
"[scope] bug"
|
|
24
|
+
"[scope] documentation"
|
|
25
|
+
"[scope] enhancement"
|
|
26
|
+
"[scope] maintenance"
|
|
27
|
+
"[scope] significant"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
found=false
|
|
31
|
+
for label in "${VALID_LABELS[@]}"; do
|
|
32
|
+
if echo "$PR_LABELS" | grep -Fxq "$label"; then
|
|
33
|
+
echo "✅ Found valid label: $label"
|
|
34
|
+
found=true
|
|
35
|
+
break
|
|
36
|
+
fi
|
|
37
|
+
done
|
|
38
|
+
|
|
39
|
+
if [ "$found" = false ]; then
|
|
40
|
+
echo "ERROR: PR must have at least one of the following labels:"
|
|
41
|
+
for label in "${VALID_LABELS[@]}"; do
|
|
42
|
+
echo " - $label"
|
|
43
|
+
done
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Builds a Python package and publish it to PyPI when a new tag is
|
|
2
2
|
# created.
|
|
3
3
|
|
|
4
|
-
name:
|
|
4
|
+
name: PyPI publishing
|
|
5
5
|
|
|
6
6
|
on:
|
|
7
7
|
# Runs on creating a new tag starting with 'v', e.g. 'v1.0.3'
|
|
@@ -20,19 +20,22 @@ jobs:
|
|
|
20
20
|
with:
|
|
21
21
|
fetch-depth: '0' # full history with tags to get the version number by versioningit
|
|
22
22
|
|
|
23
|
-
- name: Set up
|
|
24
|
-
uses:
|
|
23
|
+
- name: Set up pixi
|
|
24
|
+
uses: prefix-dev/setup-pixi@v0.9.0
|
|
25
25
|
with:
|
|
26
|
-
|
|
26
|
+
environments: default
|
|
27
|
+
activate-environment: default
|
|
28
|
+
run-install: true
|
|
29
|
+
frozen: true
|
|
30
|
+
cache: false
|
|
31
|
+
post-cleanup: false
|
|
27
32
|
|
|
28
|
-
- name:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
- name: Install build tool
|
|
32
|
-
run: pip install --upgrade build
|
|
33
|
+
- name: Install and setup development dependencies
|
|
34
|
+
shell: bash
|
|
35
|
+
run: pixi run dev
|
|
33
36
|
|
|
34
37
|
- name: Create Python package
|
|
35
|
-
run: python -m build
|
|
38
|
+
run: pixi run python -m build
|
|
36
39
|
|
|
37
40
|
- name: Publish distribution 📦 to PyPI
|
|
38
41
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: PyPI package tests
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
# Run daily, at 00:00.
|
|
@@ -14,8 +14,13 @@ concurrency:
|
|
|
14
14
|
${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
15
15
|
cancel-in-progress: true
|
|
16
16
|
|
|
17
|
+
# Set the environment variables to be used in all jobs defined in this workflow
|
|
18
|
+
env:
|
|
19
|
+
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
20
|
+
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
21
|
+
|
|
17
22
|
jobs:
|
|
18
|
-
|
|
23
|
+
pypi-package-tests:
|
|
19
24
|
strategy:
|
|
20
25
|
matrix:
|
|
21
26
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
@@ -30,22 +35,30 @@ jobs:
|
|
|
30
35
|
cache: false
|
|
31
36
|
post-cleanup: false
|
|
32
37
|
|
|
33
|
-
- name:
|
|
38
|
+
- name:
|
|
39
|
+
Download the pixi configuration file from the ${{ env.CI_BRANCH}}
|
|
40
|
+
branch
|
|
41
|
+
shell: bash
|
|
34
42
|
run: |
|
|
35
|
-
curl -LO https://raw.githubusercontent.com/easyscience/diffraction-lib/
|
|
43
|
+
curl -LO https://raw.githubusercontent.com/easyscience/diffraction-lib/${CI_BRANCH}/pixi.toml
|
|
36
44
|
|
|
37
|
-
- name: Download the tests from the
|
|
45
|
+
- name: Download the tests from the ${{ env.DEFAULT_BRANCH }} branch
|
|
38
46
|
shell: bash
|
|
39
47
|
run: |
|
|
40
|
-
curl -LO https://github.com/easyscience/diffraction-lib/archive/refs/heads
|
|
41
|
-
unzip
|
|
48
|
+
curl -LO https://github.com/easyscience/diffraction-lib/archive/refs/heads/${DEFAULT_BRANCH}.zip
|
|
49
|
+
unzip ${DEFAULT_BRANCH}.zip -d .
|
|
42
50
|
mkdir -p tests
|
|
43
|
-
cp -r diffraction-lib
|
|
44
|
-
rm -rf
|
|
51
|
+
cp -r diffraction-lib-${DEFAULT_BRANCH}/tests/* tests/
|
|
52
|
+
rm -rf ${DEFAULT_BRANCH}.zip diffraction-lib-${DEFAULT_BRANCH}
|
|
45
53
|
|
|
46
54
|
- name: Create the environment and install dependencies
|
|
47
55
|
run: pixi install
|
|
48
56
|
|
|
57
|
+
- name: Install package from PyPI with dev and visualization extras
|
|
58
|
+
run: |
|
|
59
|
+
pixi add --pypi "easydiffraction[dev,visualization]"
|
|
60
|
+
pixi run easydiffraction --version
|
|
61
|
+
|
|
49
62
|
- name: Run unit tests to verify the installation
|
|
50
63
|
run: pixi run unit-tests
|
|
51
64
|
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# The workflow is divided into several steps to ensure code quality:
|
|
2
|
+
# - Check the validity of pyproject.toml
|
|
3
|
+
# - Check code linting
|
|
4
|
+
# - Check code formatting
|
|
5
|
+
# - Check formatting of docstrings in the code
|
|
6
|
+
# - Check formatting of Markdown, YAML, TOML, etc. files
|
|
7
|
+
|
|
8
|
+
name: Code quality checks
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
# Trigger the workflow on push
|
|
12
|
+
push:
|
|
13
|
+
# Every branch
|
|
14
|
+
branches: ['**']
|
|
15
|
+
# Do not run this workflow on creating a new tag starting with
|
|
16
|
+
# 'v', e.g. 'v1.0.3' (see publish-pypi.yml)
|
|
17
|
+
tags-ignore: ['v*']
|
|
18
|
+
# Trigger the workflow on pull request
|
|
19
|
+
pull_request:
|
|
20
|
+
# Allows you to run this workflow manually from the Actions tab
|
|
21
|
+
workflow_dispatch:
|
|
22
|
+
|
|
23
|
+
# Allow only one concurrent workflow, skipping runs queued between the run
|
|
24
|
+
# in-progress and latest queued. And cancel in-progress runs.
|
|
25
|
+
concurrency:
|
|
26
|
+
group:
|
|
27
|
+
${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
28
|
+
cancel-in-progress: true
|
|
29
|
+
|
|
30
|
+
# Set the environment variables to be used in all jobs defined in this workflow
|
|
31
|
+
env:
|
|
32
|
+
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
code-quality:
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
|
|
38
|
+
steps:
|
|
39
|
+
- name: Checkout repository
|
|
40
|
+
uses: actions/checkout@v5
|
|
41
|
+
|
|
42
|
+
- name: Set up pixi
|
|
43
|
+
uses: prefix-dev/setup-pixi@v0.9.0
|
|
44
|
+
with:
|
|
45
|
+
environments: default
|
|
46
|
+
activate-environment: default
|
|
47
|
+
run-install: true
|
|
48
|
+
frozen: true
|
|
49
|
+
cache: false
|
|
50
|
+
post-cleanup: false
|
|
51
|
+
|
|
52
|
+
- name: Install and setup development dependencies
|
|
53
|
+
shell: bash
|
|
54
|
+
run: pixi run dev
|
|
55
|
+
|
|
56
|
+
# Check the validity of pyproject.toml
|
|
57
|
+
- name: Check validity of pyproject.toml
|
|
58
|
+
id: check_pyproject
|
|
59
|
+
continue-on-error: true
|
|
60
|
+
shell: bash
|
|
61
|
+
run: pixi run pyproject-check
|
|
62
|
+
|
|
63
|
+
# Check code linting with Ruff in the project root
|
|
64
|
+
- name: Check code linting
|
|
65
|
+
id: check_code_linting
|
|
66
|
+
continue-on-error: true
|
|
67
|
+
shell: bash
|
|
68
|
+
run: pixi run py-lint-check
|
|
69
|
+
|
|
70
|
+
# Check code formatting with Ruff in the project root
|
|
71
|
+
- name: Check code formatting
|
|
72
|
+
id: check_code_formatting
|
|
73
|
+
continue-on-error: true
|
|
74
|
+
shell: bash
|
|
75
|
+
run: pixi run py-format-check
|
|
76
|
+
|
|
77
|
+
# Check formatting of docstrings in the code with docformatter
|
|
78
|
+
- name: Check formatting of docstrings in the code
|
|
79
|
+
id: check_docs_formatting
|
|
80
|
+
continue-on-error: true
|
|
81
|
+
shell: bash
|
|
82
|
+
run: pixi run docs-format-check
|
|
83
|
+
|
|
84
|
+
# Check formatting of MD, YAML, TOML, etc. files with Prettier in
|
|
85
|
+
# the project root
|
|
86
|
+
- name: Check formatting of MD, YAML, TOML, etc. files
|
|
87
|
+
id: check_others_formatting
|
|
88
|
+
continue-on-error: true
|
|
89
|
+
shell: bash
|
|
90
|
+
run: pixi run nonpy-format-check
|
|
91
|
+
|
|
92
|
+
# Check formatting of Jupyter Notebooks in the tutorials folder
|
|
93
|
+
- name: Convert tutorial scripts to notebooks and check formatting
|
|
94
|
+
id: check_notebooks_formatting
|
|
95
|
+
continue-on-error: true
|
|
96
|
+
shell: bash
|
|
97
|
+
run: |
|
|
98
|
+
pixi run notebook-prepare
|
|
99
|
+
pixi run notebook-format-check
|
|
100
|
+
|
|
101
|
+
# Add summary
|
|
102
|
+
- name: Add quality checks summary
|
|
103
|
+
if: always()
|
|
104
|
+
shell: bash
|
|
105
|
+
run: |
|
|
106
|
+
{
|
|
107
|
+
echo "## 🧪 Code Quality Checks Summary"
|
|
108
|
+
echo ""
|
|
109
|
+
echo "| Check | Status |"
|
|
110
|
+
echo "|-------|--------|"
|
|
111
|
+
echo "| pyproject.toml | ${{ steps.check_pyproject.outcome == 'success' && '✅' || '❌' }} |"
|
|
112
|
+
echo "| py lint | ${{ steps.check_code_linting.outcome == 'success' && '✅' || '❌' }} |"
|
|
113
|
+
echo "| py format | ${{ steps.check_code_formatting.outcome == 'success' && '✅' || '❌' }} |"
|
|
114
|
+
echo "| docstring format | ${{ steps.check_docs_formatting.outcome == 'success' && '✅' || '❌' }} |"
|
|
115
|
+
echo "| nonpy format | ${{ steps.check_others_formatting.outcome == 'success' && '✅' || '❌' }} |"
|
|
116
|
+
echo "| notebooks format | ${{ steps.check_notebooks_formatting.outcome == 'success' && '✅' || '❌' }} |"
|
|
117
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
118
|
+
|
|
119
|
+
# Fail job requirement
|
|
120
|
+
- name: Fail job if any check failed
|
|
121
|
+
if: failure()
|
|
122
|
+
shell: bash
|
|
123
|
+
run: exit 1
|