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.
Files changed (250) hide show
  1. easydiffraction-0.7.3/.badgery.yaml +73 -0
  2. easydiffraction-0.7.3/.github/workflows/backmerge-pr.yaml +44 -0
  3. easydiffraction-0.7.2/.github/workflows/delete-old-runs.yml → easydiffraction-0.7.3/.github/workflows/cleanup.yaml +1 -1
  4. easydiffraction-0.7.3/.github/workflows/coverage.yaml +145 -0
  5. easydiffraction-0.7.3/.github/workflows/dashboard.yaml +89 -0
  6. easydiffraction-0.7.2/.github/workflows/build-docs.yml → easydiffraction-0.7.3/.github/workflows/docs.yaml +11 -8
  7. easydiffraction-0.7.3/.github/workflows/labels.yaml +45 -0
  8. easydiffraction-0.7.2/.github/workflows/publish-pypi.yml → easydiffraction-0.7.3/.github/workflows/pypi-publish.yaml +13 -10
  9. easydiffraction-0.7.2/.github/workflows/test-package-pypi.yaml → easydiffraction-0.7.3/.github/workflows/pypi-test.yaml +22 -9
  10. easydiffraction-0.7.3/.github/workflows/quality.yaml +123 -0
  11. easydiffraction-0.7.2/.github/workflows/draft-release-notes.yml → easydiffraction-0.7.3/.github/workflows/release-notes.yaml +8 -5
  12. easydiffraction-0.7.3/.github/workflows/release-pr.yaml +43 -0
  13. easydiffraction-0.7.2/.github/workflows/scan-security.yml → easydiffraction-0.7.3/.github/workflows/security.yaml +1 -2
  14. easydiffraction-0.7.2/.github/workflows/trigger-test-code.yaml → easydiffraction-0.7.3/.github/workflows/test-trigger.yaml +4 -4
  15. easydiffraction-0.7.2/.github/workflows/test-code.yaml → easydiffraction-0.7.3/.github/workflows/test.yaml +81 -119
  16. easydiffraction-0.7.2/.github/workflows/test-tutorials-colab.yaml → easydiffraction-0.7.3/.github/workflows/tutorial-tests-colab.yaml +2 -2
  17. easydiffraction-0.7.2/.github/workflows/trigger-test-tutorials.yaml → easydiffraction-0.7.3/.github/workflows/tutorial-tests-trigger.yaml +4 -4
  18. easydiffraction-0.7.2/.github/workflows/test-tutorials.yaml → easydiffraction-0.7.3/.github/workflows/tutorial-tests.yaml +9 -49
  19. easydiffraction-0.7.3/.pre-commit-config.yaml +57 -0
  20. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/DEVELOPMENT.md +37 -4
  21. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/PKG-INFO +35 -1
  22. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/installation-and-setup/index.md +2 -2
  23. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pixi.lock +4981 -11285
  24. easydiffraction-0.7.3/pixi.toml +205 -0
  25. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pyproject.toml +120 -20
  26. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/__init__.py +4 -4
  27. easydiffraction-0.7.3/src/easydiffraction/__main__.py +53 -0
  28. easydiffraction-0.7.3/src/easydiffraction/analysis/__init__.py +2 -0
  29. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/analysis.py +48 -25
  30. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculation.py +10 -16
  31. easydiffraction-0.7.3/src/easydiffraction/analysis/calculators/__init__.py +2 -0
  32. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_base.py +22 -20
  33. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_crysfml.py +40 -29
  34. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_cryspy.py +36 -26
  35. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_factory.py +4 -2
  36. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/calculators/calculator_pdffit.py +22 -10
  37. easydiffraction-0.7.3/src/easydiffraction/analysis/collections/__init__.py +2 -0
  38. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/collections/aliases.py +1 -1
  39. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/collections/constraints.py +1 -1
  40. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/collections/joint_fit_experiments.py +3 -4
  41. easydiffraction-0.7.3/src/easydiffraction/analysis/fitting/__init__.py +2 -0
  42. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/fitting/metrics.py +15 -15
  43. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/fitting/progress_tracker.py +31 -18
  44. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/fitting/results.py +22 -5
  45. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimization.py +20 -21
  46. easydiffraction-0.7.3/src/easydiffraction/analysis/minimizers/__init__.py +2 -0
  47. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_base.py +7 -7
  48. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_dfols.py +10 -12
  49. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_factory.py +11 -11
  50. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/analysis/minimizers/minimizer_lmfit.py +12 -19
  51. easydiffraction-0.7.3/src/easydiffraction/core/__init__.py +2 -0
  52. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/core/objects.py +105 -78
  53. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/core/singletons.py +22 -17
  54. easydiffraction-0.7.3/src/easydiffraction/crystallography/__init__.py +2 -0
  55. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/crystallography/crystallography.py +7 -7
  56. easydiffraction-0.7.3/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
  57. easydiffraction-0.7.3/src/easydiffraction/crystallography/space_groups.py +23 -0
  58. easydiffraction-0.7.3/src/easydiffraction/experiments/__init__.py +2 -0
  59. easydiffraction-0.7.3/src/easydiffraction/experiments/collections/__init__.py +2 -0
  60. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/collections/background.py +18 -13
  61. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/collections/excluded_regions.py +6 -8
  62. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/collections/linked_phases.py +2 -4
  63. easydiffraction-0.7.3/src/easydiffraction/experiments/components/__init__.py +2 -0
  64. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/components/experiment_type.py +8 -7
  65. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/components/instrument.py +19 -8
  66. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/components/peak.py +64 -33
  67. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/datastore.py +67 -63
  68. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/experiment.py +72 -70
  69. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/experiments/experiments.py +7 -19
  70. easydiffraction-0.7.3/src/easydiffraction/plotting/__init__.py +2 -0
  71. easydiffraction-0.7.3/src/easydiffraction/plotting/plotters/__init__.py +2 -0
  72. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotters/plotter_ascii.py +3 -1
  73. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotters/plotter_base.py +21 -6
  74. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotters/plotter_plotly.py +5 -2
  75. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/plotting/plotting.py +9 -20
  76. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/project.py +44 -44
  77. easydiffraction-0.7.3/src/easydiffraction/sample_models/__init__.py +2 -0
  78. easydiffraction-0.7.3/src/easydiffraction/sample_models/collections/__init__.py +2 -0
  79. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/collections/atom_sites.py +9 -10
  80. easydiffraction-0.7.3/src/easydiffraction/sample_models/components/__init__.py +2 -0
  81. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/components/cell.py +2 -4
  82. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/components/space_group.py +2 -4
  83. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/sample_model.py +29 -32
  84. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/sample_models/sample_models.py +13 -19
  85. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/summary.py +31 -33
  86. easydiffraction-0.7.3/src/easydiffraction/utils/__init__.py +2 -0
  87. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/utils/decorators.py +20 -6
  88. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/utils/formatting.py +9 -5
  89. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/src/easydiffraction/utils/utils.py +153 -126
  90. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/components/test_peak.py +2 -2
  91. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/test_experiment.py +2 -1
  92. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/test_sample_models.py +6 -6
  93. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/test_project.py +33 -15
  94. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/test_symmetry_lookup_table.py +5 -4
  95. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/create_mkdocs_yml.py +35 -45
  96. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/test_scripts.py +6 -4
  97. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/tweak_notebooks.py +20 -23
  98. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/update_spdx.py +10 -9
  99. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/advanced_joint-fit_pd-neut-xray-cwl_PbSO4.py +16 -12
  100. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +26 -18
  101. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-cwl_CoSiO4-D20.py +7 -5
  102. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-cwl_HS-HRPT.py +7 -5
  103. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-tof_Si-SEPD.py +7 -5
  104. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-tof_multidata_NCAF-WISH.py +11 -9
  105. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/cryst-struct_pd-neut-tof_multiphase-LBCO-Si_McStas.py +13 -45
  106. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/dmsc-summer-school-2025_analysis-powder-diffraction.py +542 -479
  107. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/pdf_pd-neut-cwl_Ni.py +10 -4
  108. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/pdf_pd-neut-tof_Si-NOMAD.py +12 -4
  109. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/pdf_pd-xray_NaCl.py +10 -3
  110. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/quick_single-fit_pd-neut-cwl_LBCO-HRPT.py +8 -8
  111. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/cryst-struct_pd-neut-tof_multiphase-BSFTO-HRPT.py +2 -2
  112. easydiffraction-0.7.2/.github/workflows/create-release-pr.yml +0 -35
  113. easydiffraction-0.7.2/.github/workflows/verify-pr-labels.yml +0 -24
  114. easydiffraction-0.7.2/pixi/prod/pixi.toml +0 -23
  115. easydiffraction-0.7.2/pixi/wheel/pixi.toml +0 -31
  116. easydiffraction-0.7.2/pixi.toml +0 -163
  117. easydiffraction-0.7.2/src/easydiffraction/__main__.py +0 -37
  118. easydiffraction-0.7.2/src/easydiffraction/analysis/__init__.py +0 -3
  119. easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/__init__.py +0 -3
  120. easydiffraction-0.7.2/src/easydiffraction/analysis/collections/__init__.py +0 -3
  121. easydiffraction-0.7.2/src/easydiffraction/analysis/fitting/__init__.py +0 -3
  122. easydiffraction-0.7.2/src/easydiffraction/analysis/minimizers/__init__.py +0 -3
  123. easydiffraction-0.7.2/src/easydiffraction/core/__init__.py +0 -3
  124. easydiffraction-0.7.2/src/easydiffraction/crystallography/__init__.py +0 -3
  125. easydiffraction-0.7.2/src/easydiffraction/crystallography/space_group_lookup_table.py +0 -25508
  126. easydiffraction-0.7.2/src/easydiffraction/experiments/__init__.py +0 -3
  127. easydiffraction-0.7.2/src/easydiffraction/experiments/collections/__init__.py +0 -3
  128. easydiffraction-0.7.2/src/easydiffraction/experiments/components/__init__.py +0 -3
  129. easydiffraction-0.7.2/src/easydiffraction/plotting/__init__.py +0 -3
  130. easydiffraction-0.7.2/src/easydiffraction/plotting/plotters/__init__.py +0 -3
  131. easydiffraction-0.7.2/src/easydiffraction/sample_models/__init__.py +0 -3
  132. easydiffraction-0.7.2/src/easydiffraction/sample_models/collections/__init__.py +0 -3
  133. easydiffraction-0.7.2/src/easydiffraction/sample_models/components/__init__.py +0 -3
  134. easydiffraction-0.7.2/src/easydiffraction/utils/__init__.py +0 -3
  135. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/.gitignore +0 -0
  136. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/.prettierignore +0 -0
  137. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/CONTRIBUTING.md +0 -0
  138. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/LICENSE +0 -0
  139. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/README.md +0 -0
  140. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/deps/pycrysfml-0.1.6-py312-none-macosx_14_0_arm64.whl +0 -0
  141. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/deps/pycrysfml-0.1.6-py312-none-win_amd64.whl +0 -0
  142. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/analysis.md +0 -0
  143. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/core.md +0 -0
  144. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/crystallography.md +0 -0
  145. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/experiments.md +0 -0
  146. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/index.md +0 -0
  147. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/plotting.md +0 -0
  148. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/project.md +0 -0
  149. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/sample_models.md +0 -0
  150. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/summary.md +0 -0
  151. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/api-reference/utils.md +0 -0
  152. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
  153. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
  154. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-analysis_model.png +0 -0
  155. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
  156. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
  157. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/index.md +0 -0
  158. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/introduction/index.md +0 -0
  159. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/mkdocs.yml +0 -0
  160. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/tutorials/index.md +0 -0
  161. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/analysis.md +0 -0
  162. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/experiment.md +0 -0
  163. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/index.md +0 -0
  164. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/model.md +0 -0
  165. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/project.md +0 -0
  166. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/analysis-workflow/summary.md +0 -0
  167. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/concept.md +0 -0
  168. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/data-format.md +0 -0
  169. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/first-steps.md +0 -0
  170. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/glossary.md +0 -0
  171. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/index.md +0 -0
  172. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
  173. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
  174. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_exptl_crystal.md +0 -0
  175. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_extinction.md +0 -0
  176. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/_pd_calib.md +0 -0
  177. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/atom_site.md +0 -0
  178. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/background.md +0 -0
  179. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/cell.md +0 -0
  180. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/expt_type.md +0 -0
  181. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/instrument.md +0 -0
  182. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/linked_phases.md +0 -0
  183. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/pd_meas.md +0 -0
  184. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/peak.md +0 -0
  185. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters/space_group.md +0 -0
  186. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/docs/user-guide/parameters.md +0 -0
  187. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/prettierrc.toml +0 -0
  188. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pycrysfml.md +0 -0
  189. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/pytest.ini +0 -0
  190. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_pair-distribution-function.py +0 -0
  191. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_constant-wavelength.py +0 -0
  192. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_joint-fit.py +0 -0
  193. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_multiphase.py +0 -0
  194. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/functional/fitting/test_powder-diffraction_time-of-flight.py +0 -0
  195. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/calculators/test_calculator_base.py +0 -0
  196. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/calculators/test_calculator_cryspy.py +0 -0
  197. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/calculators/test_calculator_factory.py +0 -0
  198. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/collections/test_joint_fit_experiment.py +0 -0
  199. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_fitting_progress_tracker.py +0 -0
  200. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_base.py +0 -0
  201. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_dfols.py +0 -0
  202. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_factory.py +0 -0
  203. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/minimizers/test_minimizer_lmfit.py +0 -0
  204. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/test_analysis.py +0 -0
  205. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/test_minimization.py +0 -0
  206. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/analysis/test_reliability_factors.py +0 -0
  207. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/core/test_objects.py +0 -0
  208. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/core/test_singletons.py +0 -0
  209. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/collections/test_background.py +0 -0
  210. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/collections/test_datastore.py +0 -0
  211. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/collections/test_linked_phases.py +0 -0
  212. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/components/test_experiment_type.py +0 -0
  213. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/components/test_instrument.py +0 -0
  214. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/experiments/test_experiments.py +0 -0
  215. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/collections/test_atom_sites.py +0 -0
  216. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/components/test_cell.py +0 -0
  217. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tests/unit/sample_models/components/test_space_group.py +0 -0
  218. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/add_assets_to_docs.sh +0 -0
  219. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tools/cleanup_docs.sh +0 -0
  220. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/NOM_9999_Si_640g_PAC_50_ff_ftfrgr_up-to-50.gr +0 -0
  221. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/NaCl.gr +0 -0
  222. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/co2sio4_d20.xye +0 -0
  223. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/d1a_pbso4.dat +0 -0
  224. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/d1a_pbso4_first-half.dat +0 -0
  225. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/d1a_pbso4_second-half.dat +0 -0
  226. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/hrpt_hs.xye +0 -0
  227. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/hrpt_lbco.xye +0 -0
  228. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/lab_pbso4.dat +0 -0
  229. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/mcstas_lbco-si.xye +0 -0
  230. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/mcstas_lbco-si.xys +0 -0
  231. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/mcstas_lbco-si_up-to-108k.xys +0 -0
  232. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/ni-q27r100-neutron_from-2.gr +0 -0
  233. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/powder_reduced_Si_2large_bank.xye +0 -0
  234. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/reduced_LBCO.xye +0 -0
  235. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/reduced_Si.xye +0 -0
  236. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/sepd_si.xye +0 -0
  237. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf.xye +0 -0
  238. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_2_9.xye +0 -0
  239. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_4_7.xye +0 -0
  240. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_4_7.xys +0 -0
  241. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_5_6.xye +0 -0
  242. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ncaf_5_6.xys +0 -0
  243. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials/data/wish_ybcfo_5_6.xye +0 -0
  244. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_cif.xye +0 -0
  245. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_cif_2.xye +0 -0
  246. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_nc.xye +0 -0
  247. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/DREAM_mantle_bc240_nist_nc_2.xye +0 -0
  248. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/data/Si_mp-149_symmetrized_mcstas.cif +0 -0
  249. {easydiffraction-0.7.2 → easydiffraction-0.7.3}/tutorials-drafts/hrpt_n_Bi0p88Sm0p12Fe0p94Ti0p06O3_DW_V_9x8x52_1p49_HI.xye +0 -0
  250. {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 }}
@@ -2,7 +2,7 @@
2
2
  # parameters.
3
3
  # https://github.com/Mattraks/delete-workflow-runs
4
4
 
5
- name: Delete old workflow runs
5
+ name: Old workflow runs cleanup
6
6
 
7
7
  on:
8
8
  # Run monthly, at 00:00 on the 1st day of month.
@@ -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: Build and deploy docs
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
- py313-docs
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 GH_API_PERSONAL_ACCSESS_TOKEN must be set for this repository via
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.GH_API_PERSONAL_ACCSESS_TOKEN }}
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: Publish to PyPI
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 Python
24
- uses: actions/setup-python@v5
23
+ - name: Set up pixi
24
+ uses: prefix-dev/setup-pixi@v0.9.0
25
25
  with:
26
- python-version: '3.13'
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: Upgrade package installer for Python
29
- run: pip install --upgrade pip
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: Test unpinned PyPI package
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
- test-package:
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: Download the pixi configuration file from the master branch
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/master/pixi/prod/pixi.toml
43
+ curl -LO https://raw.githubusercontent.com/easyscience/diffraction-lib/${CI_BRANCH}/pixi.toml
36
44
 
37
- - name: Download the tests from the master branch
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/master.zip
41
- unzip master.zip -d .
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-master/tests/* tests/
44
- rm -rf master.zip diffraction-lib-master
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