easydiffraction 0.7.2__tar.gz → 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. easydiffraction-0.8.0/.badgery.yaml +74 -0
  2. easydiffraction-0.8.0/.github/workflows/backmerge-pr.yaml +96 -0
  3. easydiffraction-0.7.2/.github/workflows/delete-old-runs.yml → easydiffraction-0.8.0/.github/workflows/cleanup.yaml +1 -1
  4. easydiffraction-0.8.0/.github/workflows/coverage.yaml +147 -0
  5. easydiffraction-0.8.0/.github/workflows/dashboard.yaml +90 -0
  6. easydiffraction-0.7.2/.github/workflows/build-docs.yml → easydiffraction-0.8.0/.github/workflows/docs.yaml +19 -9
  7. easydiffraction-0.8.0/.github/workflows/labels.yaml +45 -0
  8. easydiffraction-0.7.2/.github/workflows/publish-pypi.yml → easydiffraction-0.8.0/.github/workflows/pypi-publish.yaml +13 -10
  9. easydiffraction-0.8.0/.github/workflows/pypi-test.yaml +99 -0
  10. easydiffraction-0.8.0/.github/workflows/quality.yaml +123 -0
  11. easydiffraction-0.7.2/.github/workflows/draft-release-notes.yml → easydiffraction-0.8.0/.github/workflows/release-notes.yaml +8 -5
  12. easydiffraction-0.8.0/.github/workflows/release-pr.yaml +43 -0
  13. easydiffraction-0.7.2/.github/workflows/scan-security.yml → easydiffraction-0.8.0/.github/workflows/security.yaml +1 -2
  14. easydiffraction-0.7.2/.github/workflows/trigger-test-code.yaml → easydiffraction-0.8.0/.github/workflows/test-trigger.yaml +4 -4
  15. easydiffraction-0.7.2/.github/workflows/test-code.yaml → easydiffraction-0.8.0/.github/workflows/test.yaml +89 -120
  16. easydiffraction-0.7.2/.github/workflows/test-tutorials-colab.yaml → easydiffraction-0.8.0/.github/workflows/tutorial-tests-colab.yaml +2 -2
  17. easydiffraction-0.7.2/.github/workflows/trigger-test-tutorials.yaml → easydiffraction-0.8.0/.github/workflows/tutorial-tests-trigger.yaml +4 -4
  18. easydiffraction-0.7.2/.github/workflows/test-tutorials.yaml → easydiffraction-0.8.0/.github/workflows/tutorial-tests.yaml +36 -49
  19. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/.gitignore +9 -0
  20. easydiffraction-0.8.0/.pre-commit-config.yaml +57 -0
  21. easydiffraction-0.8.0/.prettierignore +6 -0
  22. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/DEVELOPMENT.md +39 -6
  23. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/PKG-INFO +39 -1
  24. easydiffraction-0.8.0/docs/api-reference/display.md +1 -0
  25. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/index.md +1 -1
  26. easydiffraction-0.8.0/docs/api-reference/io.md +1 -0
  27. easydiffraction-0.8.0/docs/architecture/package-structure-full.md +278 -0
  28. easydiffraction-0.8.0/docs/architecture/package-structure-short.md +142 -0
  29. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/installation-and-setup/index.md +2 -2
  30. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/mkdocs.yml +7 -5
  31. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/tutorials/index.md +14 -4
  32. easydiffraction-0.8.0/out.prof +0 -0
  33. easydiffraction-0.8.0/pixi.lock +10939 -0
  34. easydiffraction-0.8.0/pixi.toml +211 -0
  35. easydiffraction-0.8.0/pyproject.toml +280 -0
  36. easydiffraction-0.8.0/pytest.ini +13 -0
  37. easydiffraction-0.8.0/src/easydiffraction/__init__.py +28 -0
  38. easydiffraction-0.8.0/src/easydiffraction/__main__.py +53 -0
  39. easydiffraction-0.8.0/src/easydiffraction/analysis/__init__.py +2 -0
  40. easydiffraction-0.8.0/src/easydiffraction/analysis/analysis.py +594 -0
  41. easydiffraction-0.8.0/src/easydiffraction/analysis/calculators/__init__.py +2 -0
  42. easydiffraction-0.8.0/src/easydiffraction/analysis/calculators/base.py +57 -0
  43. easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/calculator_crysfml.py → easydiffraction-0.8.0/src/easydiffraction/analysis/calculators/crysfml.py +51 -40
  44. easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/calculator_cryspy.py → easydiffraction-0.8.0/src/easydiffraction/analysis/calculators/cryspy.py +106 -76
  45. easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/calculator_factory.py → easydiffraction-0.8.0/src/easydiffraction/analysis/calculators/factory.py +45 -11
  46. easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/calculator_pdffit.py → easydiffraction-0.8.0/src/easydiffraction/analysis/calculators/pdffit.py +35 -18
  47. easydiffraction-0.8.0/src/easydiffraction/analysis/categories/__init__.py +2 -0
  48. easydiffraction-0.8.0/src/easydiffraction/analysis/categories/aliases.py +106 -0
  49. easydiffraction-0.8.0/src/easydiffraction/analysis/categories/constraints.py +111 -0
  50. easydiffraction-0.8.0/src/easydiffraction/analysis/categories/joint_fit_experiments.py +104 -0
  51. easydiffraction-0.8.0/src/easydiffraction/analysis/fit_helpers/__init__.py +2 -0
  52. {easydiffraction-0.7.2/src/easydiffraction/analysis/fitting → easydiffraction-0.8.0/src/easydiffraction/analysis/fit_helpers}/metrics.py +22 -22
  53. easydiffraction-0.8.0/src/easydiffraction/analysis/fit_helpers/reporting.py +178 -0
  54. easydiffraction-0.8.0/src/easydiffraction/analysis/fit_helpers/tracking.py +259 -0
  55. easydiffraction-0.7.2/src/easydiffraction/analysis/minimization.py → easydiffraction-0.8.0/src/easydiffraction/analysis/fitting.py +51 -49
  56. easydiffraction-0.8.0/src/easydiffraction/analysis/minimizers/__init__.py +2 -0
  57. easydiffraction-0.7.2/src/easydiffraction/analysis/minimizers/minimizer_base.py → easydiffraction-0.8.0/src/easydiffraction/analysis/minimizers/base.py +51 -13
  58. easydiffraction-0.7.2/src/easydiffraction/analysis/minimizers/minimizer_dfols.py → easydiffraction-0.8.0/src/easydiffraction/analysis/minimizers/dfols.py +13 -15
  59. easydiffraction-0.7.2/src/easydiffraction/analysis/minimizers/minimizer_factory.py → easydiffraction-0.8.0/src/easydiffraction/analysis/minimizers/factory.py +16 -16
  60. easydiffraction-0.7.2/src/easydiffraction/analysis/minimizers/minimizer_lmfit.py → easydiffraction-0.8.0/src/easydiffraction/analysis/minimizers/lmfit.py +18 -25
  61. easydiffraction-0.8.0/src/easydiffraction/core/__init__.py +2 -0
  62. easydiffraction-0.8.0/src/easydiffraction/core/category.py +115 -0
  63. easydiffraction-0.8.0/src/easydiffraction/core/collection.py +102 -0
  64. easydiffraction-0.8.0/src/easydiffraction/core/datablock.py +128 -0
  65. easydiffraction-0.8.0/src/easydiffraction/core/diagnostic.py +217 -0
  66. easydiffraction-0.8.0/src/easydiffraction/core/factory.py +36 -0
  67. easydiffraction-0.8.0/src/easydiffraction/core/guard.py +143 -0
  68. easydiffraction-0.8.0/src/easydiffraction/core/identity.py +77 -0
  69. easydiffraction-0.8.0/src/easydiffraction/core/parameters.py +401 -0
  70. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/src/easydiffraction/core/singletons.py +46 -29
  71. easydiffraction-0.8.0/src/easydiffraction/core/validation.py +345 -0
  72. easydiffraction-0.8.0/src/easydiffraction/crystallography/__init__.py +2 -0
  73. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/src/easydiffraction/crystallography/crystallography.py +27 -26
  74. easydiffraction-0.8.0/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
  75. easydiffraction-0.8.0/src/easydiffraction/crystallography/space_groups.py +33 -0
  76. easydiffraction-0.8.0/src/easydiffraction/display/__init__.py +17 -0
  77. easydiffraction-0.8.0/src/easydiffraction/display/base.py +135 -0
  78. easydiffraction-0.8.0/src/easydiffraction/display/plotters/__init__.py +10 -0
  79. easydiffraction-0.8.0/src/easydiffraction/display/plotters/ascii.py +86 -0
  80. easydiffraction-0.8.0/src/easydiffraction/display/plotters/base.py +83 -0
  81. easydiffraction-0.7.2/src/easydiffraction/plotting/plotters/plotter_plotly.py → easydiffraction-0.8.0/src/easydiffraction/display/plotters/plotly.py +41 -8
  82. easydiffraction-0.8.0/src/easydiffraction/display/plotting.py +440 -0
  83. easydiffraction-0.8.0/src/easydiffraction/display/tablers/__init__.py +10 -0
  84. easydiffraction-0.8.0/src/easydiffraction/display/tablers/base.py +109 -0
  85. easydiffraction-0.8.0/src/easydiffraction/display/tablers/pandas.py +169 -0
  86. easydiffraction-0.8.0/src/easydiffraction/display/tablers/rich.py +153 -0
  87. easydiffraction-0.8.0/src/easydiffraction/display/tables.py +118 -0
  88. easydiffraction-0.8.0/src/easydiffraction/display/utils.py +48 -0
  89. easydiffraction-0.8.0/src/easydiffraction/experiments/__init__.py +2 -0
  90. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/__init__.py +2 -0
  91. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/background/__init__.py +2 -0
  92. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/background/base.py +22 -0
  93. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/background/chebyshev.py +163 -0
  94. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/background/enums.py +27 -0
  95. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/background/factory.py +66 -0
  96. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/background/line_segment.py +169 -0
  97. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/data/bragg_pd.py +440 -0
  98. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/data/bragg_sc.py +96 -0
  99. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/data/factory.py +76 -0
  100. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/data/total.py +267 -0
  101. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/excluded_regions.py +161 -0
  102. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/experiment_type.py +156 -0
  103. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/instrument/__init__.py +2 -0
  104. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/instrument/base.py +24 -0
  105. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/instrument/cwl.py +72 -0
  106. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/instrument/factory.py +74 -0
  107. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/instrument/tof.py +153 -0
  108. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/linked_phases.py +86 -0
  109. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/__init__.py +2 -0
  110. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/base.py +13 -0
  111. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/cwl.py +45 -0
  112. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/cwl_mixins.py +332 -0
  113. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/factory.py +130 -0
  114. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/tof.py +44 -0
  115. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/tof_mixins.py +293 -0
  116. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/total.py +17 -0
  117. easydiffraction-0.8.0/src/easydiffraction/experiments/categories/peak/total_mixins.py +181 -0
  118. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/__init__.py +16 -0
  119. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/base.py +264 -0
  120. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/bragg_pd.py +134 -0
  121. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/bragg_sc.py +28 -0
  122. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/enums.py +119 -0
  123. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/factory.py +181 -0
  124. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/instrument_mixin.py +46 -0
  125. easydiffraction-0.8.0/src/easydiffraction/experiments/experiment/total_pd.py +59 -0
  126. easydiffraction-0.8.0/src/easydiffraction/experiments/experiments.py +134 -0
  127. easydiffraction-0.8.0/src/easydiffraction/io/__init__.py +2 -0
  128. easydiffraction-0.8.0/src/easydiffraction/io/cif/__init__.py +2 -0
  129. easydiffraction-0.8.0/src/easydiffraction/io/cif/handler.py +33 -0
  130. easydiffraction-0.8.0/src/easydiffraction/io/cif/parse.py +34 -0
  131. easydiffraction-0.8.0/src/easydiffraction/io/cif/serialize.py +356 -0
  132. easydiffraction-0.8.0/src/easydiffraction/project/__init__.py +2 -0
  133. easydiffraction-0.8.0/src/easydiffraction/project/project.py +289 -0
  134. easydiffraction-0.8.0/src/easydiffraction/project/project_info.py +105 -0
  135. easydiffraction-0.8.0/src/easydiffraction/sample_models/__init__.py +2 -0
  136. easydiffraction-0.8.0/src/easydiffraction/sample_models/categories/__init__.py +2 -0
  137. easydiffraction-0.8.0/src/easydiffraction/sample_models/categories/atom_sites.py +334 -0
  138. easydiffraction-0.8.0/src/easydiffraction/sample_models/categories/cell.py +188 -0
  139. easydiffraction-0.8.0/src/easydiffraction/sample_models/categories/space_group.py +107 -0
  140. easydiffraction-0.8.0/src/easydiffraction/sample_models/sample_model/__init__.py +2 -0
  141. easydiffraction-0.8.0/src/easydiffraction/sample_models/sample_model/base.py +183 -0
  142. easydiffraction-0.8.0/src/easydiffraction/sample_models/sample_model/factory.py +103 -0
  143. easydiffraction-0.8.0/src/easydiffraction/sample_models/sample_models.py +87 -0
  144. easydiffraction-0.8.0/src/easydiffraction/summary/__init__.py +2 -0
  145. easydiffraction-0.8.0/src/easydiffraction/summary/summary.py +213 -0
  146. easydiffraction-0.8.0/src/easydiffraction/utils/__init__.py +2 -0
  147. easydiffraction-0.8.0/src/easydiffraction/utils/environment.py +140 -0
  148. easydiffraction-0.8.0/src/easydiffraction/utils/logging.py +589 -0
  149. easydiffraction-0.8.0/src/easydiffraction/utils/utils.py +651 -0
  150. {easydiffraction-0.7.2/tests/functional → easydiffraction-0.8.0/tests/integration}/fitting/test_pair-distribution-function.py +48 -20
  151. {easydiffraction-0.7.2/tests/functional → easydiffraction-0.8.0/tests/integration}/fitting/test_powder-diffraction_constant-wavelength.py +236 -74
  152. easydiffraction-0.8.0/tests/integration/fitting/test_powder-diffraction_joint-fit.py +328 -0
  153. {easydiffraction-0.7.2/tests/functional → easydiffraction-0.8.0/tests/integration}/fitting/test_powder-diffraction_multiphase.py +69 -22
  154. {easydiffraction-0.7.2/tests/functional → easydiffraction-0.8.0/tests/integration}/fitting/test_powder-diffraction_time-of-flight.py +97 -31
  155. easydiffraction-0.8.0/tests/integration/scipp-analysis/dream/test_scipp-cif.py +74 -0
  156. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/calculators/test_base.py +7 -0
  157. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/calculators/test_crysfml.py +29 -0
  158. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +25 -0
  159. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/calculators/test_factory.py +41 -0
  160. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +98 -0
  161. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/categories/test_aliases.py +15 -0
  162. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/categories/test_constraints.py +14 -0
  163. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/categories/test_joint_fit_experiments.py +15 -0
  164. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/fit_helpers/test_metrics.py +54 -0
  165. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py +60 -0
  166. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/fit_helpers/test_tracking.py +45 -0
  167. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/minimizers/test_base.py +107 -0
  168. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/minimizers/test_dfols.py +50 -0
  169. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/minimizers/test_factory.py +51 -0
  170. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/minimizers/test_lmfit.py +73 -0
  171. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/test_analysis.py +84 -0
  172. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/test_analysis_access_params.py +83 -0
  173. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/test_analysis_show_empty.py +39 -0
  174. easydiffraction-0.8.0/tests/unit/easydiffraction/analysis/test_fitting.py +36 -0
  175. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_category.py +67 -0
  176. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_collection.py +31 -0
  177. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_datablock.py +73 -0
  178. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_diagnostic.py +33 -0
  179. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_factory.py +29 -0
  180. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_guard.py +53 -0
  181. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_identity.py +30 -0
  182. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_parameters.py +100 -0
  183. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_singletons.py +12 -0
  184. easydiffraction-0.8.0/tests/unit/easydiffraction/core/test_validation.py +65 -0
  185. easydiffraction-0.8.0/tests/unit/easydiffraction/crystallography/test_crystallography.py +9 -0
  186. easydiffraction-0.8.0/tests/unit/easydiffraction/crystallography/test_space_groups.py +9 -0
  187. easydiffraction-0.8.0/tests/unit/easydiffraction/display/plotters/test_ascii.py +23 -0
  188. easydiffraction-0.8.0/tests/unit/easydiffraction/display/plotters/test_base.py +39 -0
  189. easydiffraction-0.8.0/tests/unit/easydiffraction/display/plotters/test_plotly.py +87 -0
  190. easydiffraction-0.8.0/tests/unit/easydiffraction/display/test_plotting.py +144 -0
  191. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/background/test_base.py +61 -0
  192. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/background/test_chebyshev.py +31 -0
  193. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/background/test_enums.py +11 -0
  194. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/background/test_factory.py +24 -0
  195. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/background/test_line_segment.py +39 -0
  196. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/instrument/test_base.py +12 -0
  197. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/instrument/test_cwl.py +12 -0
  198. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/instrument/test_factory.py +37 -0
  199. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/instrument/test_tof.py +44 -0
  200. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_base.py +13 -0
  201. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_cwl.py +34 -0
  202. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_cwl_mixins.py +30 -0
  203. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_factory.py +58 -0
  204. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_tof.py +25 -0
  205. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_tof_mixins.py +38 -0
  206. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_total.py +36 -0
  207. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/peak/test_total_mixins.py +12 -0
  208. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/test_excluded_regions.py +52 -0
  209. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/test_experiment_type.py +36 -0
  210. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/categories/test_linked_phases.py +16 -0
  211. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/experiment/test_base.py +38 -0
  212. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/experiment/test_bragg_pd.py +73 -0
  213. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/experiment/test_bragg_sc.py +35 -0
  214. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/experiment/test_enums.py +18 -0
  215. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/experiment/test_factory.py +35 -0
  216. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/experiment/test_instrument_mixin.py +9 -0
  217. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/experiment/test_total_pd.py +51 -0
  218. easydiffraction-0.8.0/tests/unit/easydiffraction/experiments/test_experiments.py +40 -0
  219. easydiffraction-0.8.0/tests/unit/easydiffraction/io/cif/test_handler.py +16 -0
  220. easydiffraction-0.8.0/tests/unit/easydiffraction/io/cif/test_serialize.py +83 -0
  221. easydiffraction-0.8.0/tests/unit/easydiffraction/io/cif/test_serialize_more.py +142 -0
  222. easydiffraction-0.8.0/tests/unit/easydiffraction/project/test_project.py +9 -0
  223. easydiffraction-0.8.0/tests/unit/easydiffraction/project/test_project_info.py +9 -0
  224. easydiffraction-0.8.0/tests/unit/easydiffraction/project/test_project_load_and_summary_wrap.py +39 -0
  225. easydiffraction-0.8.0/tests/unit/easydiffraction/project/test_project_save.py +39 -0
  226. easydiffraction-0.8.0/tests/unit/easydiffraction/sample_models/categories/test_atom_sites.py +28 -0
  227. easydiffraction-0.8.0/tests/unit/easydiffraction/sample_models/categories/test_cell.py +43 -0
  228. easydiffraction-0.8.0/tests/unit/easydiffraction/sample_models/categories/test_space_group.py +15 -0
  229. easydiffraction-0.8.0/tests/unit/easydiffraction/sample_models/sample_model/test_base.py +12 -0
  230. easydiffraction-0.8.0/tests/unit/easydiffraction/sample_models/sample_model/test_factory.py +16 -0
  231. easydiffraction-0.8.0/tests/unit/easydiffraction/sample_models/test_sample_models.py +6 -0
  232. easydiffraction-0.8.0/tests/unit/easydiffraction/summary/test_summary.py +60 -0
  233. easydiffraction-0.8.0/tests/unit/easydiffraction/summary/test_summary_details.py +135 -0
  234. easydiffraction-0.8.0/tests/unit/easydiffraction/test___init__.py +68 -0
  235. easydiffraction-0.8.0/tests/unit/easydiffraction/test___main__.py +54 -0
  236. easydiffraction-0.8.0/tests/unit/easydiffraction/utils/test_logging.py +25 -0
  237. easydiffraction-0.8.0/tests/unit/easydiffraction/utils/test_utils.py +200 -0
  238. easydiffraction-0.8.0/tmp/Untitled.ipynb +567 -0
  239. easydiffraction-0.8.0/tmp/Untitled0.ipynb +492 -0
  240. easydiffraction-0.8.0/tmp/Untitled1.ipynb +149 -0
  241. easydiffraction-0.8.0/tmp/Untitled2.ipynb +6 -0
  242. easydiffraction-0.8.0/tmp/_gemmi.py +613 -0
  243. easydiffraction-0.8.0/tmp/_read_cif.py +184 -0
  244. easydiffraction-0.8.0/tmp/_smart.py +162 -0
  245. easydiffraction-0.8.0/tmp/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +750 -0
  246. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/cryst-struct_pd-neut-tof_multiphase-BSFTO-HRPT.py +23 -23
  247. easydiffraction-0.8.0/tmp/data/hrpt.cif +3140 -0
  248. easydiffraction-0.8.0/tmp/data/large_structure.cif +5025 -0
  249. easydiffraction-0.8.0/tmp/data/lbco.cif +36 -0
  250. easydiffraction-0.8.0/tmp/display.py +413 -0
  251. easydiffraction-0.8.0/tmp/display2.py +28 -0
  252. easydiffraction-0.8.0/tmp/display3-Copy1.py +45 -0
  253. easydiffraction-0.8.0/tmp/display3.py +173 -0
  254. easydiffraction-0.8.0/tmp/generate_overview_mermaid.py +309 -0
  255. easydiffraction-0.8.0/tmp/short.py +94 -0
  256. easydiffraction-0.8.0/tmp/short2.py +228 -0
  257. easydiffraction-0.7.2/tutorials/quick_single-fit_pd-neut-cwl_LBCO-HRPT.py → easydiffraction-0.8.0/tmp/short3.py +34 -22
  258. easydiffraction-0.8.0/tmp/short5.py +316 -0
  259. easydiffraction-0.8.0/tmp/short6.py +85 -0
  260. easydiffraction-0.8.0/tmp/short7.py +129 -0
  261. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/test_single-fit_pd-neut-tof_Si-DREAM_nc.py +49 -34
  262. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tools/create_mkdocs_yml.py +35 -45
  263. easydiffraction-0.8.0/tools/gen_tests_scaffold.py +107 -0
  264. easydiffraction-0.8.0/tools/generate_package_docs.py +172 -0
  265. easydiffraction-0.8.0/tools/naming_check.py +117 -0
  266. easydiffraction-0.8.0/tools/test_scripts.py +57 -0
  267. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tools/tweak_notebooks.py +20 -23
  268. easydiffraction-0.8.0/tools/update_spdx.py +95 -0
  269. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/advanced_joint-fit_pd-neut-xray-cwl_PbSO4.py +94 -50
  270. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +41 -35
  271. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/cryst-struct_pd-neut-cwl_CoSiO4-D20.py +87 -55
  272. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/cryst-struct_pd-neut-cwl_HS-HRPT.py +74 -49
  273. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/cryst-struct_pd-neut-tof_Si-SEPD.py +25 -22
  274. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/cryst-struct_pd-neut-tof_multidata_NCAF-WISH.py +154 -102
  275. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/cryst-struct_pd-neut-tof_multiphase-LBCO-Si_McStas.py +64 -66
  276. easydiffraction-0.8.0/tutorials/dmsc-summer-school-2025_analysis-powder-diffraction.py +1495 -0
  277. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/pdf_pd-neut-cwl_Ni.py +13 -13
  278. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/pdf_pd-neut-tof_Si-NOMAD.py +21 -8
  279. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tutorials/pdf_pd-xray_NaCl.py +26 -8
  280. easydiffraction-0.8.0/tutorials/quick_from-cif_pd-neut-cwl_LBCO-HRPT.py +73 -0
  281. easydiffraction-0.8.0/tutorials/quick_from-code_pd-neut-cwl_LBCO-HRPT.py +165 -0
  282. easydiffraction-0.7.2/.github/workflows/create-release-pr.yml +0 -35
  283. easydiffraction-0.7.2/.github/workflows/test-package-pypi.yaml +0 -64
  284. easydiffraction-0.7.2/.github/workflows/verify-pr-labels.yml +0 -24
  285. easydiffraction-0.7.2/.prettierignore +0 -2
  286. easydiffraction-0.7.2/docs/api-reference/plotting.md +0 -1
  287. easydiffraction-0.7.2/pixi/prod/pixi.toml +0 -23
  288. easydiffraction-0.7.2/pixi/wheel/pixi.toml +0 -31
  289. easydiffraction-0.7.2/pixi.lock +0 -17410
  290. easydiffraction-0.7.2/pixi.toml +0 -163
  291. easydiffraction-0.7.2/pyproject.toml +0 -176
  292. easydiffraction-0.7.2/pytest.ini +0 -3
  293. easydiffraction-0.7.2/src/easydiffraction/__init__.py +0 -128
  294. easydiffraction-0.7.2/src/easydiffraction/__main__.py +0 -37
  295. easydiffraction-0.7.2/src/easydiffraction/analysis/__init__.py +0 -3
  296. easydiffraction-0.7.2/src/easydiffraction/analysis/analysis.py +0 -470
  297. easydiffraction-0.7.2/src/easydiffraction/analysis/calculation.py +0 -73
  298. easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/__init__.py +0 -3
  299. easydiffraction-0.7.2/src/easydiffraction/analysis/calculators/calculator_base.py +0 -151
  300. easydiffraction-0.7.2/src/easydiffraction/analysis/collections/__init__.py +0 -3
  301. easydiffraction-0.7.2/src/easydiffraction/analysis/collections/aliases.py +0 -50
  302. easydiffraction-0.7.2/src/easydiffraction/analysis/collections/constraints.py +0 -50
  303. easydiffraction-0.7.2/src/easydiffraction/analysis/collections/joint_fit_experiments.py +0 -55
  304. easydiffraction-0.7.2/src/easydiffraction/analysis/fitting/__init__.py +0 -3
  305. easydiffraction-0.7.2/src/easydiffraction/analysis/fitting/progress_tracker.py +0 -222
  306. easydiffraction-0.7.2/src/easydiffraction/analysis/fitting/results.py +0 -126
  307. easydiffraction-0.7.2/src/easydiffraction/analysis/minimizers/__init__.py +0 -3
  308. easydiffraction-0.7.2/src/easydiffraction/core/__init__.py +0 -3
  309. easydiffraction-0.7.2/src/easydiffraction/core/objects.py +0 -511
  310. easydiffraction-0.7.2/src/easydiffraction/crystallography/__init__.py +0 -3
  311. easydiffraction-0.7.2/src/easydiffraction/crystallography/space_group_lookup_table.py +0 -25508
  312. easydiffraction-0.7.2/src/easydiffraction/experiments/__init__.py +0 -3
  313. easydiffraction-0.7.2/src/easydiffraction/experiments/collections/__init__.py +0 -3
  314. easydiffraction-0.7.2/src/easydiffraction/experiments/collections/background.py +0 -236
  315. easydiffraction-0.7.2/src/easydiffraction/experiments/collections/excluded_regions.py +0 -100
  316. easydiffraction-0.7.2/src/easydiffraction/experiments/collections/linked_phases.py +0 -61
  317. easydiffraction-0.7.2/src/easydiffraction/experiments/components/__init__.py +0 -3
  318. easydiffraction-0.7.2/src/easydiffraction/experiments/components/experiment_type.py +0 -118
  319. easydiffraction-0.7.2/src/easydiffraction/experiments/components/instrument.py +0 -130
  320. easydiffraction-0.7.2/src/easydiffraction/experiments/components/peak.py +0 -435
  321. easydiffraction-0.7.2/src/easydiffraction/experiments/datastore.py +0 -250
  322. easydiffraction-0.7.2/src/easydiffraction/experiments/experiment.py +0 -570
  323. easydiffraction-0.7.2/src/easydiffraction/experiments/experiments.py +0 -114
  324. easydiffraction-0.7.2/src/easydiffraction/plotting/__init__.py +0 -3
  325. easydiffraction-0.7.2/src/easydiffraction/plotting/plotters/__init__.py +0 -3
  326. easydiffraction-0.7.2/src/easydiffraction/plotting/plotters/plotter_ascii.py +0 -50
  327. easydiffraction-0.7.2/src/easydiffraction/plotting/plotters/plotter_base.py +0 -53
  328. easydiffraction-0.7.2/src/easydiffraction/plotting/plotting.py +0 -364
  329. easydiffraction-0.7.2/src/easydiffraction/project.py +0 -361
  330. easydiffraction-0.7.2/src/easydiffraction/sample_models/__init__.py +0 -3
  331. easydiffraction-0.7.2/src/easydiffraction/sample_models/collections/__init__.py +0 -3
  332. easydiffraction-0.7.2/src/easydiffraction/sample_models/collections/atom_sites.py +0 -114
  333. easydiffraction-0.7.2/src/easydiffraction/sample_models/components/__init__.py +0 -3
  334. easydiffraction-0.7.2/src/easydiffraction/sample_models/components/cell.py +0 -77
  335. easydiffraction-0.7.2/src/easydiffraction/sample_models/components/space_group.py +0 -45
  336. easydiffraction-0.7.2/src/easydiffraction/sample_models/sample_model.py +0 -205
  337. easydiffraction-0.7.2/src/easydiffraction/sample_models/sample_models.py +0 -130
  338. easydiffraction-0.7.2/src/easydiffraction/summary.py +0 -197
  339. easydiffraction-0.7.2/src/easydiffraction/utils/__init__.py +0 -3
  340. easydiffraction-0.7.2/src/easydiffraction/utils/decorators.py +0 -45
  341. easydiffraction-0.7.2/src/easydiffraction/utils/formatting.py +0 -55
  342. easydiffraction-0.7.2/src/easydiffraction/utils/utils.py +0 -664
  343. easydiffraction-0.7.2/tests/functional/fitting/test_powder-diffraction_joint-fit.py +0 -230
  344. easydiffraction-0.7.2/tests/unit/analysis/calculators/test_calculator_base.py +0 -83
  345. easydiffraction-0.7.2/tests/unit/analysis/calculators/test_calculator_cryspy.py +0 -103
  346. easydiffraction-0.7.2/tests/unit/analysis/calculators/test_calculator_factory.py +0 -65
  347. easydiffraction-0.7.2/tests/unit/analysis/collections/test_joint_fit_experiment.py +0 -22
  348. easydiffraction-0.7.2/tests/unit/analysis/minimizers/test_fitting_progress_tracker.py +0 -98
  349. easydiffraction-0.7.2/tests/unit/analysis/minimizers/test_minimizer_base.py +0 -116
  350. easydiffraction-0.7.2/tests/unit/analysis/minimizers/test_minimizer_dfols.py +0 -79
  351. easydiffraction-0.7.2/tests/unit/analysis/minimizers/test_minimizer_factory.py +0 -66
  352. easydiffraction-0.7.2/tests/unit/analysis/minimizers/test_minimizer_lmfit.py +0 -98
  353. easydiffraction-0.7.2/tests/unit/analysis/test_analysis.py +0 -157
  354. easydiffraction-0.7.2/tests/unit/analysis/test_minimization.py +0 -163
  355. easydiffraction-0.7.2/tests/unit/analysis/test_reliability_factors.py +0 -110
  356. easydiffraction-0.7.2/tests/unit/core/test_objects.py +0 -128
  357. easydiffraction-0.7.2/tests/unit/core/test_singletons.py +0 -87
  358. easydiffraction-0.7.2/tests/unit/experiments/collections/test_background.py +0 -106
  359. easydiffraction-0.7.2/tests/unit/experiments/collections/test_datastore.py +0 -181
  360. easydiffraction-0.7.2/tests/unit/experiments/collections/test_linked_phases.py +0 -46
  361. easydiffraction-0.7.2/tests/unit/experiments/components/test_experiment_type.py +0 -54
  362. easydiffraction-0.7.2/tests/unit/experiments/components/test_instrument.py +0 -85
  363. easydiffraction-0.7.2/tests/unit/experiments/components/test_peak.py +0 -145
  364. easydiffraction-0.7.2/tests/unit/experiments/test_experiment.py +0 -153
  365. easydiffraction-0.7.2/tests/unit/experiments/test_experiments.py +0 -86
  366. easydiffraction-0.7.2/tests/unit/sample_models/collections/test_atom_sites.py +0 -86
  367. easydiffraction-0.7.2/tests/unit/sample_models/components/test_cell.py +0 -37
  368. easydiffraction-0.7.2/tests/unit/sample_models/components/test_space_group.py +0 -31
  369. easydiffraction-0.7.2/tests/unit/sample_models/test_sample_models.py +0 -80
  370. easydiffraction-0.7.2/tests/unit/test_project.py +0 -194
  371. easydiffraction-0.7.2/tests/unit/test_symmetry_lookup_table.py +0 -128
  372. easydiffraction-0.7.2/tools/test_scripts.py +0 -25
  373. easydiffraction-0.7.2/tools/update_spdx.py +0 -67
  374. easydiffraction-0.7.2/tutorials/data/NOM_9999_Si_640g_PAC_50_ff_ftfrgr_up-to-50.gr +0 -5037
  375. easydiffraction-0.7.2/tutorials/data/NaCl.gr +0 -5028
  376. easydiffraction-0.7.2/tutorials/data/co2sio4_d20.xye +0 -1418
  377. easydiffraction-0.7.2/tutorials/data/d1a_pbso4.dat +0 -1801
  378. easydiffraction-0.7.2/tutorials/data/d1a_pbso4_first-half.dat +0 -1800
  379. easydiffraction-0.7.2/tutorials/data/d1a_pbso4_second-half.dat +0 -1110
  380. easydiffraction-0.7.2/tutorials/data/hrpt_hs.xye +0 -3220
  381. easydiffraction-0.7.2/tutorials/data/lab_pbso4.dat +0 -3601
  382. easydiffraction-0.7.2/tutorials/data/mcstas_lbco-si.xye +0 -1002
  383. easydiffraction-0.7.2/tutorials/data/ni-q27r100-neutron_from-2.gr +0 -9853
  384. easydiffraction-0.7.2/tutorials/data/sepd_si.xye +0 -5600
  385. easydiffraction-0.7.2/tutorials/data/wish_ncaf_5_6.xys +0 -4121
  386. easydiffraction-0.7.2/tutorials/dmsc-summer-school-2025_analysis-powder-diffraction.py +0 -1431
  387. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/CONTRIBUTING.md +0 -0
  388. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/LICENSE +0 -0
  389. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/README.md +0 -0
  390. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/deps/pycrysfml-0.1.6-py312-none-macosx_14_0_arm64.whl +0 -0
  391. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/deps/pycrysfml-0.1.6-py312-none-win_amd64.whl +0 -0
  392. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/analysis.md +0 -0
  393. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/core.md +0 -0
  394. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/crystallography.md +0 -0
  395. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/experiments.md +0 -0
  396. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/project.md +0 -0
  397. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/sample_models.md +0 -0
  398. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/summary.md +0 -0
  399. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/api-reference/utils.md +0 -0
  400. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
  401. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
  402. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/assets/images/user-guide/data-analysis_model.png +0 -0
  403. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
  404. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
  405. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/index.md +0 -0
  406. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/introduction/index.md +0 -0
  407. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/analysis-workflow/analysis.md +0 -0
  408. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/analysis-workflow/experiment.md +0 -0
  409. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/analysis-workflow/index.md +0 -0
  410. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/analysis-workflow/model.md +0 -0
  411. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/analysis-workflow/project.md +0 -0
  412. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/analysis-workflow/summary.md +0 -0
  413. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/concept.md +0 -0
  414. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/data-format.md +0 -0
  415. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/first-steps.md +0 -0
  416. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/glossary.md +0 -0
  417. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/index.md +0 -0
  418. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
  419. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
  420. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/_exptl_crystal.md +0 -0
  421. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/_extinction.md +0 -0
  422. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/_pd_calib.md +0 -0
  423. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/atom_site.md +0 -0
  424. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/background.md +0 -0
  425. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/cell.md +0 -0
  426. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/expt_type.md +0 -0
  427. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/instrument.md +0 -0
  428. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/linked_phases.md +0 -0
  429. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/pd_meas.md +0 -0
  430. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/peak.md +0 -0
  431. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters/space_group.md +0 -0
  432. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/docs/user-guide/parameters.md +0 -0
  433. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/prettierrc.toml +0 -0
  434. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/pycrysfml.md +0 -0
  435. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/data/DREAM_mantle_bc240_nist_cif.xye +0 -0
  436. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/data/DREAM_mantle_bc240_nist_cif_2.xye +0 -0
  437. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/data/DREAM_mantle_bc240_nist_nc.xye +0 -0
  438. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/data/DREAM_mantle_bc240_nist_nc_2.xye +0 -0
  439. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/data/Si_mp-149_symmetrized_mcstas.cif +0 -0
  440. {easydiffraction-0.7.2/tutorials → easydiffraction-0.8.0/tmp}/data/hrpt_lbco.xye +0 -0
  441. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/mcstas_lbco-si.xys +0 -0
  442. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/mcstas_lbco-si_up-to-108k.xys +0 -0
  443. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/powder_reduced_Si_2large_bank.xye +0 -0
  444. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/reduced_LBCO.xye +0 -0
  445. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/reduced_Si.xye +0 -0
  446. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/wish_ncaf.xye +0 -0
  447. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/wish_ncaf_2_9.xye +0 -0
  448. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/wish_ncaf_4_7.xye +0 -0
  449. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/wish_ncaf_4_7.xys +0 -0
  450. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/wish_ncaf_5_6.xye +0 -0
  451. {easydiffraction-0.7.2/tutorials/data → easydiffraction-0.8.0/tmp/data_old}/wish_ybcfo_5_6.xye +0 -0
  452. {easydiffraction-0.7.2/tutorials-drafts → easydiffraction-0.8.0/tmp}/hrpt_n_Bi0p88Sm0p12Fe0p94Ti0p06O3_DW_V_9x8x52_1p49_HI.xye +0 -0
  453. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tools/add_assets_to_docs.sh +0 -0
  454. {easydiffraction-0.7.2 → easydiffraction-0.8.0}/tools/cleanup_docs.sh +0 -0
@@ -0,0 +1,74 @@
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
+ flag: unittests
56
+ enabled: true
57
+
58
+ - group: Coverage
59
+ type: interrogate
60
+ title: Docstring coverage (interrogate)
61
+ report: reports/{branch}/coverage-docstring.txt
62
+ enabled: true
63
+
64
+ - group: Build & Release
65
+ type: gh_action
66
+ title: Publishing (PyPI)
67
+ workflow: pypi-publish.yaml
68
+ enabled: true
69
+
70
+ - group: Build & Release
71
+ type: gh_action
72
+ title: Docs build/deployment
73
+ workflow: docs.yaml
74
+ enabled: true
@@ -0,0 +1,96 @@
1
+ # This workflow creates a backmerge PR into `develop` whenever a new version tag is pushed (v*).
2
+ #
3
+ # Key points:
4
+ # - The PR head is a temporary branch that points at the *tag commit* (refs/tags/vX.Y.Z).
5
+ # After merging, `develop` can `git describe` as vX.Y.Z-... because the tag commit becomes an ancestor.
6
+ # - The PR is auto-merged using a MERGE COMMIT (not squash) via a GitHub App token.
7
+ # The GitHub App must be added to the develop ruleset bypass list.
8
+ #
9
+ # Required repo config:
10
+ # - Actions secret: ES_BACKMERGE_PRIVATE_KEY (GitHub App private key PEM)
11
+ # - Actions variable: ES_BACKMERGE_APP_ID (GitHub App ID)
12
+
13
+ name: Backmerge PR (tag -> develop)
14
+
15
+ on:
16
+ push:
17
+ tags:
18
+ - 'v*'
19
+
20
+ permissions:
21
+ contents: write
22
+ pull-requests: write
23
+
24
+ jobs:
25
+ create-backmerge-pr:
26
+ runs-on: ubuntu-latest
27
+
28
+ steps:
29
+ - name: Create GitHub App installation token
30
+ id: app-token
31
+ uses: actions/create-github-app-token@v2
32
+ with:
33
+ app-id: ${{ vars.ES_BACKMERGE_APP_ID }}
34
+ private-key: ${{ secrets.ES_BACKMERGE_PRIVATE_KEY }}
35
+
36
+ - name: Checkout tag commit
37
+ uses: actions/checkout@v5
38
+ with:
39
+ ref: ${{ github.ref }} # refs/tags/vX.Y.Z
40
+ fetch-depth: 0
41
+ token: ${{ steps.app-token.outputs.token }}
42
+
43
+ - name: Create and push backmerge branch at tag
44
+ id: vars
45
+ run: |
46
+ set -euo pipefail
47
+
48
+ TAG='${{ github.ref_name }}'
49
+ BRANCH="backmerge/${TAG}"
50
+
51
+ echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
52
+ echo "branch=${BRANCH}" >> "$GITHUB_OUTPUT"
53
+
54
+ git config user.name "github-actions[bot]"
55
+ git config user.email "github-actions[bot]@users.noreply.github.com"
56
+
57
+ # Create/move branch to point exactly at the tag commit
58
+ git checkout -B "$BRANCH"
59
+
60
+ # Push (force makes re-runs idempotent for the same tag)
61
+ git push --force --set-upstream origin "$BRANCH"
62
+ env:
63
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
64
+
65
+ - name:
66
+ Create PR from tag backmerge branch to develop (or reuse if exists)
67
+ run: |
68
+ set -euo pipefail
69
+
70
+ TITLE="Backmerge: ${{ steps.vars.outputs.tag }} into develop"
71
+
72
+ BODY="⚠️ This PR is created automatically for backmerge of a new release tag commit \`${{ steps.vars.outputs.tag }}\` into \`develop\`.
73
+
74
+ It is labeled '[maintainer] auto-pull-request' and is excluded from release notes and version bump logic."
75
+
76
+ if gh pr view --repo "${{ github.repository }}" --head "${{ steps.vars.outputs.branch }}" >/dev/null 2>&1; then
77
+ echo "PR already exists for head=${{ steps.vars.outputs.branch }}"
78
+ else
79
+ gh pr create \
80
+ --repo "${{ github.repository }}" \
81
+ --base develop \
82
+ --head "${{ steps.vars.outputs.branch }}" \
83
+ --title "$TITLE" \
84
+ --label "[maintainer] auto-pull-request" \
85
+ --body "$BODY"
86
+ fi
87
+ env:
88
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
89
+
90
+ - name: Enable auto-merge using MERGE COMMIT
91
+ run: |
92
+ set -euo pipefail
93
+ # Merge the PR identified by its head branch.
94
+ gh pr merge --repo "${{ github.repository }}" --merge --auto "${{ steps.vars.outputs.branch }}"
95
+ env:
96
+ GH_TOKEN: ${{ steps.app-token.outputs.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,147 @@
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 integration tests with coverage and upload to Codecov
90
+ integration-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 integration tests with coverage
112
+ run:
113
+ pixi run integration-tests-coverage
114
+ --cov-report=xml:coverage-integration.xml
115
+
116
+ - name: Upload integration tests coverage to Codecov
117
+ if: ${{ !cancelled() }}
118
+ uses: codecov/codecov-action@v5
119
+ with:
120
+ name: integration-tests-job
121
+ flags: integration
122
+ files: ./coverage-integration.xml
123
+ fail_ci_if_error: true
124
+ verbose: true
125
+ token: ${{ secrets.CODECOV_TOKEN }}
126
+
127
+ # Job 4: Trigger dashboard build
128
+ dashboard-build-trigger:
129
+ needs: [docstring-coverage, unit-tests-coverage, integration-tests-coverage] # depend on the previous jobs
130
+
131
+ runs-on: ubuntu-latest
132
+
133
+ steps:
134
+ - name: Check-out repository
135
+ uses: actions/checkout@v5
136
+
137
+ - name: Trigger dashboard build
138
+ uses: actions/github-script@v7
139
+ with:
140
+ github-token: ${{ secrets.GITHUB_TOKEN }}
141
+ script: |
142
+ await github.rest.actions.createWorkflowDispatch({
143
+ owner: context.repo.owner,
144
+ repo: context.repo.repo,
145
+ workflow_id: "dashboard.yaml",
146
+ ref: "${{ env.CI_BRANCH }}"
147
+ });
@@ -0,0 +1,90 @@
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: |
45
+ pixi run dev
46
+ pixi add --pypi --git https://github.com/enhantica/badgery badgery
47
+
48
+ - name: Run docstring coverage and code complexity/maintainability checks
49
+ run: |
50
+ for BRANCH in ${{ env.DEFAULT_BRANCH }} ${{ env.DEVELOP_BRANCH }} ${{ env.CI_BRANCH }}; do
51
+ echo "=== Processing branch $BRANCH ==="
52
+ if [ -d "../$BRANCH" ]; then
53
+ echo "Branch $BRANCH already processed, skipping"
54
+ continue
55
+ fi
56
+ git worktree add ../$BRANCH origin/$BRANCH
57
+ mkdir -p reports/$BRANCH
58
+ echo "Docstring coverage for branch $BRANCH"
59
+ pixi run interrogate -c pyproject.toml --fail-under=0 ../$BRANCH/src > reports/$BRANCH/coverage-docstring.txt
60
+ echo "Cyclomatic complexity for branch $BRANCH"
61
+ pixi run radon cc -s -j ../$BRANCH/src > reports/$BRANCH/cyclomatic-complexity.json
62
+ echo "Maintainability index for branch $BRANCH"
63
+ pixi run radon mi -j ../$BRANCH/src > reports/$BRANCH/maintainability-index.json
64
+ echo "Raw metrics for branch $BRANCH"
65
+ pixi run radon raw -s -j ../$BRANCH/src > reports/$BRANCH/raw-metrics.json
66
+ done
67
+
68
+ - name: Generate dashboard HTML
69
+ run: >
70
+ pixi run python -m badgery --config .badgery.yaml --repo ${{
71
+ github.repository }} --branch ${{ env.CI_BRANCH }} --output index.html
72
+
73
+ - name: Prepare publish directory
74
+ run: |
75
+ mkdir -p _dashboard_publish/${{ env.REPO_NAME }}/${{ env.CI_BRANCH }}
76
+ cp index.html _dashboard_publish/${{ env.REPO_NAME }}/${{ env.CI_BRANCH }}
77
+
78
+ - name: Publish to main branch of ${{ github.repository }}
79
+ uses: peaceiris/actions-gh-pages@v3
80
+ with:
81
+ external_repository: ${{ env.REPO_OWNER }}/dashboard
82
+ publish_branch: ${{ env.DEFAULT_BRANCH }}
83
+ personal_token: ${{ secrets.GH_API_PERSONAL_ACCESS_TOKEN }}
84
+ publish_dir: ./_dashboard_publish
85
+ keep_files: true
86
+
87
+ - name: Add dashboard link to summary
88
+ run: |
89
+ URL="https://${{ env.REPO_OWNER }}.github.io/dashboard/${{ env.REPO_NAME }}/${{ env.CI_BRANCH }}"
90
+ 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 ..
@@ -134,7 +137,14 @@ jobs:
134
137
  # Input: docs/ directory containing the Markdown files
135
138
  # Output: site/ directory containing the generated HTML files
136
139
  - name: Build site with MkDocs
137
- run: pixi run docs-build
140
+ run: |
141
+ if [[ "${CI_BRANCH}" == "develop" || "${CI_BRANCH}" == "master" || "${CI_BRANCH}" == "main" ]]; then
142
+ echo "📘 Building production docs for ${CI_BRANCH}"
143
+ pixi run docs-build
144
+ else
145
+ echo "📗 Building local docs for ${CI_BRANCH}"
146
+ pixi run docs-local
147
+ fi
138
148
 
139
149
  # Set up the Pages action to configure the static files to be deployed
140
150
  # NOTE: The repository must have GitHub Pages enabled and configured to build using GitHub Actions
@@ -226,7 +236,7 @@ jobs:
226
236
  # which triggers deployment to the custom domain via webhook.
227
237
  #
228
238
  # 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
239
+ # token GH_API_PERSONAL_ACCESS_TOKEN must be set for this repository via
230
240
  # https://github.com/easyscience/diffraction-lib/settings/secrets/actions
231
241
  # Then the gh_pages branch is used to deploy the site to the custom domain.
232
242
  # Deploying is done with a webhook added via:
@@ -234,7 +244,7 @@ jobs:
234
244
  - name: PROD deployment to gh_pages for custom domain
235
245
  uses: s0/git-publish-subdir-action@develop
236
246
  env:
237
- GITHUB_TOKEN: ${{ secrets.GH_API_PERSONAL_ACCSESS_TOKEN }}
247
+ GITHUB_TOKEN: ${{ secrets.GH_API_PERSONAL_ACCESS_TOKEN }}
238
248
  REPO: self
239
249
  BRANCH: gh_pages
240
250
  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
@@ -0,0 +1,99 @@
1
+ name: PyPI package tests
2
+
3
+ on:
4
+ # Run daily, at 00:00.
5
+ schedule:
6
+ - cron: '0 0 * * *'
7
+ # Allows you to run this workflow manually from the Actions tab
8
+ workflow_dispatch:
9
+
10
+ # Allow only one concurrent workflow, skipping runs queued between the run
11
+ # in-progress and latest queued. And cancel in-progress runs.
12
+ concurrency:
13
+ group:
14
+ ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
15
+ cancel-in-progress: true
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
+
22
+ jobs:
23
+ # Job 1: Test installation from PyPI on multiple OS
24
+ pypi-package-tests:
25
+ strategy:
26
+ matrix:
27
+ os: [ubuntu-latest, windows-latest, macos-latest]
28
+
29
+ runs-on: ${{ matrix.os }}
30
+
31
+ steps:
32
+ - name: Set up pixi
33
+ uses: prefix-dev/setup-pixi@v0.9.0
34
+ with:
35
+ run-install: false
36
+ cache: false
37
+ post-cleanup: false
38
+
39
+ - name:
40
+ Download the pixi configuration file from the ${{ env.CI_BRANCH}}
41
+ branch
42
+ shell: bash
43
+ run: |
44
+ curl -LO https://raw.githubusercontent.com/easyscience/diffraction-lib/${CI_BRANCH}/pixi.toml
45
+
46
+ - name: Download the tests from the ${{ env.DEFAULT_BRANCH }} branch
47
+ shell: bash
48
+ run: |
49
+ curl -LO https://github.com/easyscience/diffraction-lib/archive/refs/heads/${DEFAULT_BRANCH}.zip
50
+ unzip ${DEFAULT_BRANCH}.zip -d .
51
+ mkdir -p tests
52
+ cp -r diffraction-lib-${DEFAULT_BRANCH}/tests/* tests/
53
+ rm -rf ${DEFAULT_BRANCH}.zip diffraction-lib-${DEFAULT_BRANCH}
54
+
55
+ - name: Create the environment and install dependencies
56
+ run: pixi install
57
+
58
+ - name: Install package from PyPI with all extras
59
+ run: pixi add --pypi "easydiffraction[all]"
60
+
61
+ - name: Run unit tests to verify the installation
62
+ run: pixi run unit-tests
63
+
64
+ - name: Run integration tests to verify the installation
65
+ run: pixi run integration-tests
66
+
67
+ # Github token to avoid hitting the unauthenticated API rate limit
68
+ - name: List and fetch the EasyDiffraction tutorials
69
+ env:
70
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
71
+ run: |
72
+ pixi run easydiffraction --version
73
+ pixi run easydiffraction list-tutorials
74
+ pixi run easydiffraction fetch-tutorials
75
+
76
+ - name: Test tutorials as notebooks
77
+ run: pixi run notebook-tests
78
+
79
+ # Job 2: Trigger dashboard build
80
+ dashboard-build-trigger:
81
+ needs: pypi-package-tests
82
+
83
+ runs-on: ubuntu-latest
84
+
85
+ steps:
86
+ - name: Check-out repository
87
+ uses: actions/checkout@v5
88
+
89
+ - name: Trigger dashboard build
90
+ uses: actions/github-script@v7
91
+ with:
92
+ github-token: ${{ secrets.GITHUB_TOKEN }}
93
+ script: |
94
+ await github.rest.actions.createWorkflowDispatch({
95
+ owner: context.repo.owner,
96
+ repo: context.repo.repo,
97
+ workflow_id: "dashboard.yaml",
98
+ ref: "${{ env.CI_BRANCH }}"
99
+ });