easydiffraction 0.10.2__tar.gz → 0.11.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 (581) hide show
  1. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/.badgery.yaml +5 -7
  2. easydiffraction-0.11.0/.copier-answers.yml +27 -0
  3. easydiffraction-0.11.0/.github/actions/download-artifact/action.yml +50 -0
  4. easydiffraction-0.11.0/.github/actions/github-script/action.yml +19 -0
  5. easydiffraction-0.11.0/.github/actions/setup-easyscience-bot/action.yml +40 -0
  6. easydiffraction-0.11.0/.github/actions/setup-pixi/action.yml +44 -0
  7. easydiffraction-0.11.0/.github/actions/upload-artifact/action.yml +49 -0
  8. easydiffraction-0.11.0/.github/actions/upload-codecov/action.yml +42 -0
  9. easydiffraction-0.11.0/.github/configs/pages-deployment.json +6 -0
  10. easydiffraction-0.11.0/.github/configs/rulesets-develop.json +37 -0
  11. easydiffraction-0.11.0/.github/configs/rulesets-gh-pages.json +19 -0
  12. easydiffraction-0.11.0/.github/configs/rulesets-master.json +30 -0
  13. easydiffraction-0.11.0/.github/copilot-instructions.md +159 -0
  14. easydiffraction-0.11.0/.github/scripts/backmerge-conflict-issue.js +69 -0
  15. easydiffraction-0.11.0/.github/workflows/backmerge.yml +109 -0
  16. easydiffraction-0.10.2/.github/workflows/cleanup.yaml → easydiffraction-0.11.0/.github/workflows/cleanup.yml +11 -7
  17. easydiffraction-0.10.2/.github/workflows/coverage.yaml → easydiffraction-0.11.0/.github/workflows/coverage.yml +14 -67
  18. easydiffraction-0.10.2/.github/workflows/dashboard.yaml → easydiffraction-0.11.0/.github/workflows/dashboard.yml +43 -42
  19. easydiffraction-0.10.2/.github/workflows/docs.yaml → easydiffraction-0.11.0/.github/workflows/docs.yml +50 -81
  20. easydiffraction-0.11.0/.github/workflows/issues-labels.yml +42 -0
  21. easydiffraction-0.11.0/.github/workflows/lint-format.yml +124 -0
  22. easydiffraction-0.10.2/.github/workflows/labels.yaml → easydiffraction-0.11.0/.github/workflows/pr-labels.yml +15 -4
  23. easydiffraction-0.11.0/.github/workflows/pypi-publish.yml +46 -0
  24. easydiffraction-0.11.0/.github/workflows/pypi-test.yml +80 -0
  25. easydiffraction-0.10.2/.github/workflows/release-notes.yaml → easydiffraction-0.11.0/.github/workflows/release-notes.yml +9 -14
  26. easydiffraction-0.11.0/.github/workflows/release-pr.yml +55 -0
  27. easydiffraction-0.11.0/.github/workflows/security.yml +93 -0
  28. easydiffraction-0.10.2/.github/workflows/test-trigger.yaml → easydiffraction-0.11.0/.github/workflows/test-trigger.yml +13 -3
  29. easydiffraction-0.11.0/.github/workflows/test.yml +279 -0
  30. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/.github/workflows/tutorial-tests-colab.yaml +5 -6
  31. easydiffraction-0.10.2/.github/workflows/tutorial-tests-trigger.yaml → easydiffraction-0.11.0/.github/workflows/tutorial-tests-trigger.yml +13 -3
  32. easydiffraction-0.10.2/.github/workflows/tutorial-tests.yaml → easydiffraction-0.11.0/.github/workflows/tutorial-tests.yml +12 -37
  33. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/.gitignore +15 -17
  34. easydiffraction-0.11.0/.pre-commit-config.yaml +61 -0
  35. easydiffraction-0.11.0/.prettierignore +32 -0
  36. easydiffraction-0.11.0/CONTRIBUTING.md +446 -0
  37. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/LICENSE +1 -1
  38. easydiffraction-0.11.0/PKG-INFO +135 -0
  39. easydiffraction-0.11.0/README.md +53 -0
  40. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/codecov.yml +0 -5
  41. easydiffraction-0.11.0/docs/architecture/architecture.md +1178 -0
  42. easydiffraction-0.11.0/docs/architecture/issues_closed.md +67 -0
  43. easydiffraction-0.11.0/docs/architecture/issues_open.md +359 -0
  44. easydiffraction-0.11.0/docs/architecture/package-structure-full.md +302 -0
  45. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/docs/architecture/package-structure-short.md +71 -60
  46. easydiffraction-0.11.0/docs/docs/api-reference/datablocks/experiment.md +1 -0
  47. easydiffraction-0.11.0/docs/docs/api-reference/datablocks/structure.md +1 -0
  48. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/index.md +12 -10
  49. easydiffraction-0.11.0/docs/docs/assets/images/favicon.png +0 -0
  50. easydiffraction-0.11.0/docs/docs/assets/images/logo_dark.svg +41 -0
  51. easydiffraction-0.11.0/docs/docs/assets/images/logo_light.svg +41 -0
  52. easydiffraction-0.11.0/docs/docs/assets/javascripts/extra.js +27 -0
  53. easydiffraction-0.11.0/docs/docs/assets/javascripts/mathjax.js +33 -0
  54. easydiffraction-0.11.0/docs/docs/assets/stylesheets/extra.css +359 -0
  55. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/index.md +14 -13
  56. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/installation-and-setup/index.md +44 -38
  57. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/introduction/index.md +17 -15
  58. easydiffraction-0.11.0/docs/docs/tutorials/ed-1.ipynb +203 -0
  59. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-1.py +6 -6
  60. easydiffraction-0.11.0/docs/docs/tutorials/ed-10.ipynb +222 -0
  61. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-10.py +10 -11
  62. easydiffraction-0.11.0/docs/docs/tutorials/ed-11.ipynb +254 -0
  63. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-11.py +11 -12
  64. easydiffraction-0.11.0/docs/docs/tutorials/ed-12.ipynb +303 -0
  65. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-12.py +12 -13
  66. easydiffraction-0.11.0/docs/docs/tutorials/ed-13.ipynb +2923 -0
  67. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-13.py +110 -110
  68. easydiffraction-0.11.0/docs/docs/tutorials/ed-14.ipynb +319 -0
  69. easydiffraction-0.11.0/docs/docs/tutorials/ed-14.py +109 -0
  70. easydiffraction-0.11.0/docs/docs/tutorials/ed-15.ipynb +296 -0
  71. easydiffraction-0.11.0/docs/docs/tutorials/ed-15.py +100 -0
  72. easydiffraction-0.11.0/docs/docs/tutorials/ed-16.ipynb +623 -0
  73. easydiffraction-0.11.0/docs/docs/tutorials/ed-16.py +259 -0
  74. easydiffraction-0.11.0/docs/docs/tutorials/ed-17.ipynb +658 -0
  75. easydiffraction-0.11.0/docs/docs/tutorials/ed-17.py +327 -0
  76. easydiffraction-0.11.0/docs/docs/tutorials/ed-2.ipynb +344 -0
  77. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-2.py +27 -27
  78. easydiffraction-0.11.0/docs/docs/tutorials/ed-3.ipynb +1804 -0
  79. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-3.py +64 -63
  80. easydiffraction-0.11.0/docs/docs/tutorials/ed-4.ipynb +705 -0
  81. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-4.py +34 -40
  82. easydiffraction-0.11.0/docs/docs/tutorials/ed-5.ipynb +637 -0
  83. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-5.py +66 -73
  84. easydiffraction-0.11.0/docs/docs/tutorials/ed-6.ipynb +849 -0
  85. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-6.py +43 -49
  86. easydiffraction-0.11.0/docs/docs/tutorials/ed-7.ipynb +741 -0
  87. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-7.py +22 -26
  88. easydiffraction-0.11.0/docs/docs/tutorials/ed-8.ipynb +747 -0
  89. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-8.py +38 -44
  90. easydiffraction-0.11.0/docs/docs/tutorials/ed-9.ipynb +704 -0
  91. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/ed-9.py +50 -56
  92. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs/docs}/tutorials/index.json +31 -3
  93. easydiffraction-0.11.0/docs/docs/tutorials/index.md +98 -0
  94. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/analysis-workflow/analysis.md +139 -142
  95. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/analysis-workflow/experiment.md +105 -89
  96. easydiffraction-0.11.0/docs/docs/user-guide/analysis-workflow/index.md +37 -0
  97. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/analysis-workflow/model.md +59 -55
  98. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/analysis-workflow/project.md +41 -39
  99. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/analysis-workflow/summary.md +16 -14
  100. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/concept.md +39 -34
  101. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/data-format.md +47 -43
  102. easydiffraction-0.11.0/docs/docs/user-guide/first-steps.md +190 -0
  103. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/glossary.md +14 -10
  104. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/index.md +13 -12
  105. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/_diffrn_radiation.md +4 -4
  106. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +2 -2
  107. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/_pd_calib.md +2 -2
  108. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/atom_site.md +15 -14
  109. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/background.md +10 -9
  110. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/cell.md +2 -2
  111. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/expt_type.md +2 -2
  112. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/instrument.md +13 -11
  113. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/linked_phases.md +4 -4
  114. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/pd_meas.md +2 -2
  115. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/peak.md +2 -2
  116. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/space_group.md +5 -5
  117. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters.md +64 -53
  118. easydiffraction-0.11.0/docs/includes/abbreviations.md +15 -0
  119. easydiffraction-0.11.0/docs/mkdocs.yml +229 -0
  120. easydiffraction-0.11.0/docs/overrides/.icons/app.svg +4 -0
  121. easydiffraction-0.11.0/docs/overrides/.icons/easydiffraction.svg +3 -0
  122. easydiffraction-0.11.0/docs/overrides/.icons/easyscience.svg +20 -0
  123. easydiffraction-0.11.0/docs/overrides/.icons/google-colab.svg +7 -0
  124. easydiffraction-0.11.0/docs/overrides/main.html +39 -0
  125. easydiffraction-0.11.0/docs/overrides/partials/logo.html +15 -0
  126. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/pixi.lock +5290 -3518
  127. easydiffraction-0.11.0/pixi.toml +274 -0
  128. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/prettierrc.toml +15 -4
  129. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/pycrysfml.md +2 -1
  130. easydiffraction-0.11.0/pyproject.toml +391 -0
  131. easydiffraction-0.11.0/src/easydiffraction/__init__.py +17 -0
  132. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/__main__.py +5 -5
  133. easydiffraction-0.11.0/src/easydiffraction/analysis/__init__.py +2 -0
  134. easydiffraction-0.11.0/src/easydiffraction/analysis/analysis.py +803 -0
  135. easydiffraction-0.11.0/src/easydiffraction/analysis/calculators/__init__.py +6 -0
  136. easydiffraction-0.11.0/src/easydiffraction/analysis/calculators/base.py +64 -0
  137. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/calculators/crysfml.py +110 -70
  138. easydiffraction-0.11.0/src/easydiffraction/analysis/calculators/cryspy.py +615 -0
  139. easydiffraction-0.11.0/src/easydiffraction/analysis/calculators/factory.py +40 -0
  140. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/calculators/pdffit.py +60 -15
  141. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/__init__.py +2 -0
  142. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/aliases/__init__.py +5 -0
  143. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/aliases/default.py +101 -0
  144. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/aliases/factory.py +15 -0
  145. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/constraints/__init__.py +5 -0
  146. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/constraints/default.py +124 -0
  147. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/constraints/factory.py +15 -0
  148. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/fit_mode/__init__.py +6 -0
  149. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/fit_mode/enums.py +26 -0
  150. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/fit_mode/factory.py +15 -0
  151. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/fit_mode/fit_mode.py +64 -0
  152. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/joint_fit_experiments/__init__.py +5 -0
  153. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/joint_fit_experiments/default.py +100 -0
  154. easydiffraction-0.11.0/src/easydiffraction/analysis/categories/joint_fit_experiments/factory.py +15 -0
  155. easydiffraction-0.11.0/src/easydiffraction/analysis/fit_helpers/__init__.py +2 -0
  156. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/fit_helpers/metrics.py +94 -59
  157. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/fit_helpers/reporting.py +53 -34
  158. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/fit_helpers/tracking.py +61 -28
  159. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/fitting.py +106 -62
  160. easydiffraction-0.11.0/src/easydiffraction/analysis/minimizers/__init__.py +5 -0
  161. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/minimizers/base.py +88 -60
  162. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/analysis/minimizers/dfols.py +36 -20
  163. easydiffraction-0.11.0/src/easydiffraction/analysis/minimizers/factory.py +15 -0
  164. easydiffraction-0.11.0/src/easydiffraction/analysis/minimizers/lmfit.py +160 -0
  165. easydiffraction-0.11.0/src/easydiffraction/core/__init__.py +2 -0
  166. easydiffraction-0.11.0/src/easydiffraction/core/category.py +252 -0
  167. easydiffraction-0.11.0/src/easydiffraction/core/collection.py +174 -0
  168. easydiffraction-0.11.0/src/easydiffraction/core/datablock.py +181 -0
  169. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/core/diagnostic.py +45 -45
  170. easydiffraction-0.11.0/src/easydiffraction/core/factory.py +271 -0
  171. easydiffraction-0.11.0/src/easydiffraction/core/guard.py +227 -0
  172. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/core/identity.py +11 -10
  173. easydiffraction-0.11.0/src/easydiffraction/core/metadata.py +119 -0
  174. easydiffraction-0.10.2/src/easydiffraction/core/singletons.py → easydiffraction-0.11.0/src/easydiffraction/core/singleton.py +39 -32
  175. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/core/validation.py +104 -109
  176. easydiffraction-0.10.2/src/easydiffraction/core/parameters.py → easydiffraction-0.11.0/src/easydiffraction/core/variable.py +162 -100
  177. easydiffraction-0.11.0/src/easydiffraction/crystallography/__init__.py +2 -0
  178. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/crystallography/crystallography.py +31 -19
  179. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/crystallography/space_groups.py +7 -6
  180. easydiffraction-0.11.0/src/easydiffraction/datablocks/__init__.py +2 -0
  181. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/__init__.py +2 -0
  182. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/__init__.py +2 -0
  183. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/background/__init__.py +9 -0
  184. {easydiffraction-0.10.2/src/easydiffraction/experiments → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment}/categories/background/base.py +3 -2
  185. {easydiffraction-0.10.2/src/easydiffraction/experiments → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment}/categories/background/chebyshev.py +77 -52
  186. {easydiffraction-0.10.2/src/easydiffraction/experiments → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment}/categories/background/enums.py +2 -2
  187. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/background/factory.py +14 -0
  188. {easydiffraction-0.10.2/src/easydiffraction/experiments → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment}/categories/background/line_segment.py +69 -49
  189. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/data/__init__.py +7 -0
  190. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/data/bragg_pd.py +625 -0
  191. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/data/bragg_sc.py +434 -0
  192. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/data/factory.py +33 -0
  193. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/data/total_pd.py +376 -0
  194. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/diffrn/__init__.py +4 -0
  195. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/diffrn/default.py +136 -0
  196. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/diffrn/factory.py +15 -0
  197. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/excluded_regions/__init__.py +9 -0
  198. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/excluded_regions.py → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/excluded_regions/default.py +62 -47
  199. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/excluded_regions/factory.py +17 -0
  200. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/experiment_type/__init__.py +4 -0
  201. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/experiment_type/default.py +142 -0
  202. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/experiment_type/factory.py +15 -0
  203. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/extinction/__init__.py +4 -0
  204. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/extinction/factory.py +15 -0
  205. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/extinction/shelx.py +94 -0
  206. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/instrument/__init__.py +7 -0
  207. {easydiffraction-0.10.2/src/easydiffraction/experiments → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment}/categories/instrument/base.py +5 -3
  208. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/instrument/cwl.py +127 -0
  209. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/instrument/factory.py +30 -0
  210. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/instrument/tof.py +179 -0
  211. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/linked_crystal/__init__.py +4 -0
  212. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/linked_crystal/default.py +89 -0
  213. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/linked_crystal/factory.py +15 -0
  214. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/linked_phases/__init__.py +5 -0
  215. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/linked_phases/default.py +99 -0
  216. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/linked_phases/factory.py +15 -0
  217. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/__init__.py +10 -0
  218. {easydiffraction-0.10.2/src/easydiffraction/experiments → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment}/categories/peak/base.py +1 -1
  219. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/cwl.py +88 -0
  220. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/cwl_mixins.py +314 -0
  221. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/factory.py +26 -0
  222. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/tof.py +87 -0
  223. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/tof_mixins.py +276 -0
  224. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/total.py +36 -0
  225. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/categories/peak/total_mixins.py +170 -0
  226. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/collection.py +157 -0
  227. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/item/__init__.py +9 -0
  228. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/item/base.py +768 -0
  229. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/item/bragg_pd.py +219 -0
  230. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/item/bragg_sc.py +162 -0
  231. {easydiffraction-0.10.2/src/easydiffraction/experiments/experiment → easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/item}/enums.py +104 -1
  232. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/item/factory.py +277 -0
  233. easydiffraction-0.11.0/src/easydiffraction/datablocks/experiment/item/total_pd.py +92 -0
  234. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/__init__.py +2 -0
  235. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/__init__.py +2 -0
  236. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/atom_sites/__init__.py +5 -0
  237. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/atom_sites/default.py +380 -0
  238. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/atom_sites/factory.py +15 -0
  239. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/cell/__init__.py +4 -0
  240. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/cell/default.py +235 -0
  241. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/cell/factory.py +15 -0
  242. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/space_group/__init__.py +4 -0
  243. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/space_group/default.py +163 -0
  244. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/categories/space_group/factory.py +15 -0
  245. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/collection.py +92 -0
  246. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/item/__init__.py +2 -0
  247. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/item/base.py +255 -0
  248. easydiffraction-0.11.0/src/easydiffraction/datablocks/structure/item/factory.py +137 -0
  249. easydiffraction-0.11.0/src/easydiffraction/display/__init__.py +18 -0
  250. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/display/base.py +40 -17
  251. easydiffraction-0.11.0/src/easydiffraction/display/plotters/__init__.py +11 -0
  252. easydiffraction-0.11.0/src/easydiffraction/display/plotters/ascii.py +206 -0
  253. easydiffraction-0.11.0/src/easydiffraction/display/plotters/base.py +261 -0
  254. easydiffraction-0.11.0/src/easydiffraction/display/plotters/plotly.py +413 -0
  255. easydiffraction-0.11.0/src/easydiffraction/display/plotting.py +688 -0
  256. easydiffraction-0.11.0/src/easydiffraction/display/tablers/__init__.py +11 -0
  257. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/display/tablers/base.py +50 -34
  258. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/display/tablers/pandas.py +72 -43
  259. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/display/tablers/rich.py +65 -43
  260. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/display/tables.py +34 -18
  261. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/display/utils.py +2 -4
  262. easydiffraction-0.11.0/src/easydiffraction/io/__init__.py +7 -0
  263. easydiffraction-0.11.0/src/easydiffraction/io/ascii.py +182 -0
  264. easydiffraction-0.11.0/src/easydiffraction/io/cif/__init__.py +2 -0
  265. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/io/cif/handler.py +4 -3
  266. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/io/cif/parse.py +1 -1
  267. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/io/cif/serialize.py +65 -29
  268. easydiffraction-0.11.0/src/easydiffraction/project/__init__.py +2 -0
  269. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/project/project.py +163 -68
  270. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/project/project_info.py +39 -9
  271. easydiffraction-0.11.0/src/easydiffraction/summary/__init__.py +2 -0
  272. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/summary/summary.py +18 -20
  273. easydiffraction-0.11.0/src/easydiffraction/utils/__init__.py +5 -0
  274. easydiffraction-0.11.0/src/easydiffraction/utils/_vendored/__init__.py +22 -0
  275. easydiffraction-0.11.0/src/easydiffraction/utils/_vendored/jupyter_dark_detect/__init__.py +10 -0
  276. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/detector.py +5 -8
  277. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/utils/_vendored/theme_detect.py +24 -20
  278. easydiffraction-0.11.0/src/easydiffraction/utils/enums.py +30 -0
  279. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/utils/environment.py +51 -20
  280. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/utils/logging.py +202 -72
  281. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/utils/utils.py +258 -208
  282. easydiffraction-0.11.0/tests/integration/fitting/test_multi.py +236 -0
  283. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/fitting/test_pair-distribution-function.py +36 -39
  284. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/fitting/test_powder-diffraction_constant-wavelength.py +74 -69
  285. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/fitting/test_powder-diffraction_joint-fit.py +38 -43
  286. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/fitting/test_powder-diffraction_time-of-flight.py +27 -30
  287. easydiffraction-0.11.0/tests/integration/fitting/test_single-crystal-diffraction.py +90 -0
  288. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/scipp-analysis/dream/conftest.py +2 -1
  289. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/scipp-analysis/dream/test_analyze_reduced_data.py +20 -19
  290. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/scipp-analysis/dream/test_package_import.py +2 -1
  291. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/scipp-analysis/dream/test_read_reduced_data.py +2 -1
  292. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/scipp-analysis/dream/test_validate_meta_data.py +2 -1
  293. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/integration/scipp-analysis/dream/test_validate_physical_data.py +2 -1
  294. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/calculators/test_base.py +2 -1
  295. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/calculators/test_crysfml.py +2 -2
  296. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +4 -3
  297. easydiffraction-0.11.0/tests/unit/easydiffraction/analysis/calculators/test_factory.py +22 -0
  298. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +4 -4
  299. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/categories/test_aliases.py +5 -3
  300. easydiffraction-0.11.0/tests/unit/easydiffraction/analysis/categories/test_constraints.py +16 -0
  301. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/categories/test_joint_fit_experiments.py +5 -3
  302. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_metrics.py +6 -6
  303. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py +2 -1
  304. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_tracking.py +1 -1
  305. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/minimizers/test_base.py +5 -5
  306. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/minimizers/test_dfols.py +13 -2
  307. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/minimizers/test_factory.py +15 -13
  308. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit.py +4 -1
  309. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/test_analysis.py +72 -43
  310. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/test_analysis_access_params.py +8 -7
  311. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/test_analysis_show_empty.py +3 -2
  312. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/analysis/test_fitting.py +6 -5
  313. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/core/test_category.py +42 -10
  314. easydiffraction-0.11.0/tests/unit/easydiffraction/core/test_collection.py +165 -0
  315. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/core/test_datablock.py +70 -7
  316. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/core/test_diagnostic.py +1 -1
  317. easydiffraction-0.11.0/tests/unit/easydiffraction/core/test_factory.py +2 -0
  318. easydiffraction-0.11.0/tests/unit/easydiffraction/core/test_guard.py +101 -0
  319. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/core/test_identity.py +2 -1
  320. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/core/test_parameters.py +15 -18
  321. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/core/test_singletons.py +2 -2
  322. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/core/test_validation.py +7 -6
  323. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/crystallography/test_crystallography.py +2 -1
  324. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/crystallography/test_space_groups.py +2 -1
  325. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/background/test_base.py +18 -10
  326. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/background/test_chebyshev.py +5 -5
  327. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_enums.py +17 -0
  328. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_factory.py +22 -0
  329. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/background/test_line_segment.py +5 -5
  330. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_pd.py +144 -0
  331. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_sc.py +92 -0
  332. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_factory.py +85 -0
  333. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_total_pd.py +91 -0
  334. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/instrument/test_base.py +3 -2
  335. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/instrument/test_cwl.py +3 -3
  336. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_factory.py +37 -0
  337. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/instrument/test_tof.py +3 -3
  338. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/peak/test_base.py +2 -2
  339. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/peak/test_cwl.py +5 -4
  340. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/peak/test_cwl_mixins.py +5 -5
  341. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py +54 -0
  342. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/peak/test_tof.py +4 -4
  343. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/peak/test_tof_mixins.py +11 -7
  344. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/peak/test_total.py +2 -2
  345. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/peak/test_total_mixins.py +2 -2
  346. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment}/categories/test_excluded_regions.py +6 -6
  347. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/test_experiment_type.py +37 -0
  348. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/test_extinction.py +76 -0
  349. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_crystal.py +88 -0
  350. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_phases.py +19 -0
  351. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/item/test_base.py +38 -0
  352. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/experiment → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/item}/test_bragg_pd.py +20 -20
  353. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc.py +36 -0
  354. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/experiment → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/item}/test_enums.py +5 -4
  355. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/item/test_factory.py +28 -0
  356. {easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/experiment → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/item}/test_total_pd.py +15 -15
  357. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/test_experiments.py → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/experiment/test_collection.py +10 -9
  358. {easydiffraction-0.10.2/tests/unit/easydiffraction/sample_models → easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/structure}/categories/test_space_group.py +2 -2
  359. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/structure/item/test_base.py +12 -0
  360. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/structure/item/test_factory.py +9 -0
  361. easydiffraction-0.11.0/tests/unit/easydiffraction/datablocks/structure/test_collection.py +2 -0
  362. easydiffraction-0.11.0/tests/unit/easydiffraction/display/plotters/test_ascii.py +50 -0
  363. easydiffraction-0.11.0/tests/unit/easydiffraction/display/plotters/test_base.py +68 -0
  364. easydiffraction-0.11.0/tests/unit/easydiffraction/display/plotters/test_plotly.py +174 -0
  365. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/display/test_plotting.py +38 -27
  366. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/io/cif/test_handler.py +2 -1
  367. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/io/cif/test_serialize.py +6 -5
  368. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/io/cif/test_serialize_more.py +9 -12
  369. easydiffraction-0.11.0/tests/unit/easydiffraction/project/test_project.py +51 -0
  370. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/project/test_project_info.py +2 -1
  371. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/project/test_project_load_and_summary_wrap.py +6 -6
  372. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/project/test_project_save.py +6 -5
  373. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/summary/test_summary.py +3 -8
  374. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/summary/test_summary_details.py +4 -4
  375. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/test___init__.py +3 -4
  376. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/test___main__.py +1 -1
  377. easydiffraction-0.11.0/tests/unit/easydiffraction/utils/test_enums.py +27 -0
  378. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/utils/test_logging.py +2 -1
  379. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/utils/test_theme_detect.py +93 -122
  380. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tests/unit/easydiffraction/utils/test_utils.py +11 -15
  381. easydiffraction-0.11.0/tmp/__validator.py +87 -0
  382. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +6 -20
  383. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/cryst-struct_pd-neut-tof_multiphase-BSFTO-HRPT.py +0 -6
  384. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/short7.py +0 -1
  385. easydiffraction-0.11.0/tmp/show_d401.py +26 -0
  386. easydiffraction-0.11.0/tmp/show_w505.py +27 -0
  387. easydiffraction-0.11.0/tools/convert_google_docstrings_to_numpy.py +539 -0
  388. easydiffraction-0.11.0/tools/license_headers.py +315 -0
  389. easydiffraction-0.11.0/tools/param_consistency.py +677 -0
  390. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tools/test_scripts.py +6 -5
  391. easydiffraction-0.11.0/tools/update_docs_assets.py +91 -0
  392. easydiffraction-0.11.0/tools/update_github_labels.py +341 -0
  393. easydiffraction-0.10.2/.github/workflows/backmerge.yaml +0 -66
  394. easydiffraction-0.10.2/.github/workflows/pypi-publish.yaml +0 -43
  395. easydiffraction-0.10.2/.github/workflows/pypi-test.yaml +0 -97
  396. easydiffraction-0.10.2/.github/workflows/quality.yaml +0 -123
  397. easydiffraction-0.10.2/.github/workflows/release-pr.yaml +0 -57
  398. easydiffraction-0.10.2/.github/workflows/security.yaml +0 -39
  399. easydiffraction-0.10.2/.github/workflows/test.yaml +0 -259
  400. easydiffraction-0.10.2/.pre-commit-config.yaml +0 -57
  401. easydiffraction-0.10.2/.prettierignore +0 -6
  402. easydiffraction-0.10.2/CONTRIBUTING.md +0 -94
  403. easydiffraction-0.10.2/DEVELOPMENT.md +0 -150
  404. easydiffraction-0.10.2/PKG-INFO +0 -188
  405. easydiffraction-0.10.2/README.md +0 -53
  406. easydiffraction-0.10.2/docs/api-reference/experiments.md +0 -1
  407. easydiffraction-0.10.2/docs/api-reference/sample_models.md +0 -1
  408. easydiffraction-0.10.2/docs/architecture/package-structure-full.md +0 -278
  409. easydiffraction-0.10.2/docs/mkdocs.yml +0 -99
  410. easydiffraction-0.10.2/docs/tutorials/index.md +0 -79
  411. easydiffraction-0.10.2/docs/user-guide/analysis-workflow/index.md +0 -34
  412. easydiffraction-0.10.2/docs/user-guide/first-steps.md +0 -182
  413. easydiffraction-0.10.2/pixi.toml +0 -210
  414. easydiffraction-0.10.2/pyproject.toml +0 -301
  415. easydiffraction-0.10.2/pytest.ini +0 -13
  416. easydiffraction-0.10.2/src/easydiffraction/__init__.py +0 -30
  417. easydiffraction-0.10.2/src/easydiffraction/analysis/__init__.py +0 -2
  418. easydiffraction-0.10.2/src/easydiffraction/analysis/analysis.py +0 -631
  419. easydiffraction-0.10.2/src/easydiffraction/analysis/calculators/__init__.py +0 -2
  420. easydiffraction-0.10.2/src/easydiffraction/analysis/calculators/base.py +0 -57
  421. easydiffraction-0.10.2/src/easydiffraction/analysis/calculators/cryspy.py +0 -416
  422. easydiffraction-0.10.2/src/easydiffraction/analysis/calculators/factory.py +0 -105
  423. easydiffraction-0.10.2/src/easydiffraction/analysis/categories/__init__.py +0 -2
  424. easydiffraction-0.10.2/src/easydiffraction/analysis/categories/aliases.py +0 -106
  425. easydiffraction-0.10.2/src/easydiffraction/analysis/categories/constraints.py +0 -111
  426. easydiffraction-0.10.2/src/easydiffraction/analysis/categories/joint_fit_experiments.py +0 -104
  427. easydiffraction-0.10.2/src/easydiffraction/analysis/fit_helpers/__init__.py +0 -2
  428. easydiffraction-0.10.2/src/easydiffraction/analysis/minimizers/__init__.py +0 -2
  429. easydiffraction-0.10.2/src/easydiffraction/analysis/minimizers/factory.py +0 -126
  430. easydiffraction-0.10.2/src/easydiffraction/analysis/minimizers/lmfit.py +0 -124
  431. easydiffraction-0.10.2/src/easydiffraction/core/__init__.py +0 -2
  432. easydiffraction-0.10.2/src/easydiffraction/core/category.py +0 -115
  433. easydiffraction-0.10.2/src/easydiffraction/core/collection.py +0 -102
  434. easydiffraction-0.10.2/src/easydiffraction/core/datablock.py +0 -128
  435. easydiffraction-0.10.2/src/easydiffraction/core/factory.py +0 -36
  436. easydiffraction-0.10.2/src/easydiffraction/core/guard.py +0 -143
  437. easydiffraction-0.10.2/src/easydiffraction/crystallography/__init__.py +0 -2
  438. easydiffraction-0.10.2/src/easydiffraction/display/__init__.py +0 -17
  439. easydiffraction-0.10.2/src/easydiffraction/display/plotters/__init__.py +0 -10
  440. easydiffraction-0.10.2/src/easydiffraction/display/plotters/ascii.py +0 -86
  441. easydiffraction-0.10.2/src/easydiffraction/display/plotters/base.py +0 -83
  442. easydiffraction-0.10.2/src/easydiffraction/display/plotters/plotly.py +0 -155
  443. easydiffraction-0.10.2/src/easydiffraction/display/plotting.py +0 -440
  444. easydiffraction-0.10.2/src/easydiffraction/display/tablers/__init__.py +0 -10
  445. easydiffraction-0.10.2/src/easydiffraction/experiments/__init__.py +0 -2
  446. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/__init__.py +0 -2
  447. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/background/__init__.py +0 -2
  448. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/background/factory.py +0 -66
  449. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/data/bragg_pd.py +0 -455
  450. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/data/bragg_sc.py +0 -96
  451. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/data/factory.py +0 -76
  452. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/data/total.py +0 -267
  453. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/experiment_type.py +0 -156
  454. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/instrument/__init__.py +0 -2
  455. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/instrument/cwl.py +0 -72
  456. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/instrument/factory.py +0 -74
  457. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/instrument/tof.py +0 -153
  458. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/linked_phases.py +0 -86
  459. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/__init__.py +0 -2
  460. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/cwl.py +0 -45
  461. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/cwl_mixins.py +0 -332
  462. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/factory.py +0 -130
  463. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/tof.py +0 -44
  464. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/tof_mixins.py +0 -293
  465. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/total.py +0 -17
  466. easydiffraction-0.10.2/src/easydiffraction/experiments/categories/peak/total_mixins.py +0 -181
  467. easydiffraction-0.10.2/src/easydiffraction/experiments/experiment/__init__.py +0 -16
  468. easydiffraction-0.10.2/src/easydiffraction/experiments/experiment/base.py +0 -264
  469. easydiffraction-0.10.2/src/easydiffraction/experiments/experiment/bragg_pd.py +0 -134
  470. easydiffraction-0.10.2/src/easydiffraction/experiments/experiment/bragg_sc.py +0 -28
  471. easydiffraction-0.10.2/src/easydiffraction/experiments/experiment/factory.py +0 -181
  472. easydiffraction-0.10.2/src/easydiffraction/experiments/experiment/instrument_mixin.py +0 -46
  473. easydiffraction-0.10.2/src/easydiffraction/experiments/experiment/total_pd.py +0 -59
  474. easydiffraction-0.10.2/src/easydiffraction/experiments/experiments.py +0 -134
  475. easydiffraction-0.10.2/src/easydiffraction/io/__init__.py +0 -2
  476. easydiffraction-0.10.2/src/easydiffraction/io/cif/__init__.py +0 -2
  477. easydiffraction-0.10.2/src/easydiffraction/project/__init__.py +0 -2
  478. easydiffraction-0.10.2/src/easydiffraction/sample_models/__init__.py +0 -2
  479. easydiffraction-0.10.2/src/easydiffraction/sample_models/categories/__init__.py +0 -2
  480. easydiffraction-0.10.2/src/easydiffraction/sample_models/categories/atom_sites.py +0 -334
  481. easydiffraction-0.10.2/src/easydiffraction/sample_models/categories/cell.py +0 -188
  482. easydiffraction-0.10.2/src/easydiffraction/sample_models/categories/space_group.py +0 -107
  483. easydiffraction-0.10.2/src/easydiffraction/sample_models/sample_model/__init__.py +0 -2
  484. easydiffraction-0.10.2/src/easydiffraction/sample_models/sample_model/base.py +0 -183
  485. easydiffraction-0.10.2/src/easydiffraction/sample_models/sample_model/factory.py +0 -103
  486. easydiffraction-0.10.2/src/easydiffraction/sample_models/sample_models.py +0 -87
  487. easydiffraction-0.10.2/src/easydiffraction/summary/__init__.py +0 -2
  488. easydiffraction-0.10.2/src/easydiffraction/utils/__init__.py +0 -10
  489. easydiffraction-0.10.2/src/easydiffraction/utils/_vendored/__init__.py +0 -23
  490. easydiffraction-0.10.2/src/easydiffraction/utils/_vendored/jupyter_dark_detect/__init__.py +0 -10
  491. easydiffraction-0.10.2/tests/integration/fitting/test_powder-diffraction_multiphase.py +0 -143
  492. easydiffraction-0.10.2/tests/unit/easydiffraction/analysis/calculators/test_factory.py +0 -41
  493. easydiffraction-0.10.2/tests/unit/easydiffraction/analysis/categories/test_constraints.py +0 -14
  494. easydiffraction-0.10.2/tests/unit/easydiffraction/core/test_collection.py +0 -31
  495. easydiffraction-0.10.2/tests/unit/easydiffraction/core/test_factory.py +0 -29
  496. easydiffraction-0.10.2/tests/unit/easydiffraction/core/test_guard.py +0 -53
  497. easydiffraction-0.10.2/tests/unit/easydiffraction/display/plotters/test_ascii.py +0 -23
  498. easydiffraction-0.10.2/tests/unit/easydiffraction/display/plotters/test_base.py +0 -39
  499. easydiffraction-0.10.2/tests/unit/easydiffraction/display/plotters/test_plotly.py +0 -87
  500. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/categories/background/test_enums.py +0 -11
  501. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/categories/background/test_factory.py +0 -24
  502. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/categories/instrument/test_factory.py +0 -37
  503. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/categories/peak/test_factory.py +0 -58
  504. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/categories/test_experiment_type.py +0 -36
  505. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/categories/test_linked_phases.py +0 -16
  506. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/experiment/test_base.py +0 -38
  507. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/experiment/test_bragg_sc.py +0 -35
  508. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/experiment/test_factory.py +0 -35
  509. easydiffraction-0.10.2/tests/unit/easydiffraction/experiments/experiment/test_instrument_mixin.py +0 -9
  510. easydiffraction-0.10.2/tests/unit/easydiffraction/project/test_project.py +0 -9
  511. easydiffraction-0.10.2/tests/unit/easydiffraction/sample_models/categories/test_atom_sites.py +0 -28
  512. easydiffraction-0.10.2/tests/unit/easydiffraction/sample_models/categories/test_cell.py +0 -43
  513. easydiffraction-0.10.2/tests/unit/easydiffraction/sample_models/sample_model/test_base.py +0 -12
  514. easydiffraction-0.10.2/tests/unit/easydiffraction/sample_models/sample_model/test_factory.py +0 -16
  515. easydiffraction-0.10.2/tests/unit/easydiffraction/sample_models/test_sample_models.py +0 -6
  516. easydiffraction-0.10.2/tools/add_assets_to_docs.sh +0 -16
  517. easydiffraction-0.10.2/tools/cleanup_docs.sh +0 -10
  518. easydiffraction-0.10.2/tools/create_mkdocs_yml.py +0 -158
  519. easydiffraction-0.10.2/tools/update_spdx.py +0 -109
  520. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/.codefactorignore +0 -0
  521. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/deps/pycrysfml-0.1.6-py312-none-macosx_14_0_arm64.whl +0 -0
  522. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/deps/pycrysfml-0.1.6-py312-none-win_amd64.whl +0 -0
  523. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/analysis.md +0 -0
  524. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/core.md +0 -0
  525. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/crystallography.md +0 -0
  526. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/display.md +0 -0
  527. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/io.md +0 -0
  528. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/project.md +0 -0
  529. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/summary.md +0 -0
  530. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/api-reference/utils.md +0 -0
  531. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
  532. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
  533. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/assets/images/user-guide/data-analysis_model.png +0 -0
  534. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
  535. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
  536. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/_exptl_crystal.md +0 -0
  537. {easydiffraction-0.10.2 → easydiffraction-0.11.0/docs}/docs/user-guide/parameters/_extinction.md +0 -0
  538. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
  539. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/Untitled.ipynb +0 -0
  540. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/Untitled0.ipynb +0 -0
  541. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/Untitled1.ipynb +0 -0
  542. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/Untitled2.ipynb +0 -0
  543. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/_gemmi.py +0 -0
  544. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/_read_cif.py +0 -0
  545. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/_smart.py +0 -0
  546. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/DREAM_mantle_bc240_nist_cif.xye +0 -0
  547. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/DREAM_mantle_bc240_nist_cif_2.xye +0 -0
  548. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/DREAM_mantle_bc240_nist_nc.xye +0 -0
  549. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/DREAM_mantle_bc240_nist_nc_2.xye +0 -0
  550. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/Si_mp-149_symmetrized_mcstas.cif +0 -0
  551. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/hrpt.cif +0 -0
  552. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/hrpt_lbco.xye +0 -0
  553. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/large_structure.cif +0 -0
  554. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data/lbco.cif +0 -0
  555. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/mcstas_lbco-si.xys +0 -0
  556. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/mcstas_lbco-si_up-to-108k.xys +0 -0
  557. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/powder_reduced_Si_2large_bank.xye +0 -0
  558. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/reduced_LBCO.xye +0 -0
  559. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/reduced_Si.xye +0 -0
  560. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/wish_ncaf.xye +0 -0
  561. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/wish_ncaf_2_9.xye +0 -0
  562. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/wish_ncaf_4_7.xye +0 -0
  563. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/wish_ncaf_4_7.xys +0 -0
  564. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/wish_ncaf_5_6.xye +0 -0
  565. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/data_old/wish_ybcfo_5_6.xye +0 -0
  566. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/display.py +0 -0
  567. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/display2.py +0 -0
  568. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/display3-Copy1.py +0 -0
  569. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/display3.py +0 -0
  570. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/generate_overview_mermaid.py +0 -0
  571. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/hrpt_n_Bi0p88Sm0p12Fe0p94Ti0p06O3_DW_V_9x8x52_1p49_HI.xye +0 -0
  572. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/short.py +0 -0
  573. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/short2.py +0 -0
  574. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/short3.py +0 -0
  575. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/short5.py +0 -0
  576. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/short6.py +0 -0
  577. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tmp/test_single-fit_pd-neut-tof_Si-DREAM_nc.py +0 -0
  578. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tools/gen_tests_scaffold.py +0 -0
  579. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tools/generate_package_docs.py +0 -0
  580. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tools/naming_check.py +0 -0
  581. {easydiffraction-0.10.2 → easydiffraction-0.11.0}/tools/tweak_notebooks.py +0 -0
@@ -5,19 +5,18 @@ cards:
5
5
  - group: Tests
6
6
  type: gh_action
7
7
  title: Code/package tests (GitHub)
8
- file: test.yaml
8
+ file: test.yml
9
9
  enabled: true
10
-
11
10
  - group: Tests
12
11
  type: gh_action
13
12
  title: Tutorial tests (GitHub)
14
- file: tutorial-tests.yaml
13
+ file: tutorial-tests.yml
15
14
  enabled: true
16
15
 
17
16
  - group: Tests
18
17
  type: gh_action
19
18
  title: Package tests (PyPI)
20
- file: pypi-test.yaml
19
+ file: pypi-test.yml
21
20
  enabled: true
22
21
 
23
22
  - group: Code Quality
@@ -60,15 +59,14 @@ cards:
60
59
  title: Docstring coverage (interrogate)
61
60
  report: reports/{branch}/coverage-docstring.txt
62
61
  enabled: true
63
-
64
62
  - group: Build & Release
65
63
  type: gh_action
66
64
  title: Publishing (PyPI)
67
- workflow: pypi-publish.yaml
65
+ workflow: pypi-publish.yml
68
66
  enabled: true
69
67
 
70
68
  - group: Build & Release
71
69
  type: gh_action
72
70
  title: Docs build/deployment
73
- workflow: docs.yaml
71
+ workflow: docs.yml
74
72
  enabled: true
@@ -0,0 +1,27 @@
1
+ # WARNING: Do not edit this file manually.
2
+ # Any changes will be overwritten by Copier.
3
+ _commit: v0.10.1-25-ga5301e9
4
+ _src_path: gh:easyscience/templates
5
+ app_docs_url: https://easyscience.github.io/diffraction-app
6
+ app_doi: 10.5281/zenodo.18163581
7
+ app_package_name: easydiffraction_app
8
+ app_python: '3.13'
9
+ app_repo_name: diffraction-app
10
+ home_page_url: https://easyscience.github.io/diffraction
11
+ home_repo_name: diffraction
12
+ lib_docs_url: https://easyscience.github.io/diffraction-lib
13
+ lib_doi: 10.5281/zenodo.18163581
14
+ lib_package_name: easydiffraction
15
+ lib_python_max: '3.13'
16
+ lib_python_min: '3.11'
17
+ lib_repo_name: diffraction-lib
18
+ project_contact_email: support@easydiffraction.org
19
+ project_copyright_years: 2021-2026
20
+ project_extended_description: A software for calculating neutron powder diffraction
21
+ patterns based on a structural model and refining its parameters against experimental
22
+ data
23
+ project_name: EasyDiffraction
24
+ project_short_description: Diffraction data analysis
25
+ project_shortcut: ED
26
+ project_type: both
27
+ template_type: lib
@@ -0,0 +1,50 @@
1
+ name: 'Download artifact'
2
+ description: 'Generic wrapper for actions/download-artifact'
3
+ inputs:
4
+ name:
5
+ description: 'Name of the artifact to download'
6
+ required: true
7
+
8
+ path:
9
+ description: 'Destination path'
10
+ required: false
11
+ default: '.'
12
+
13
+ pattern:
14
+ description: 'Glob pattern to match artifact names (optional)'
15
+ required: false
16
+ default: ''
17
+
18
+ merge-multiple:
19
+ description: 'Merge multiple artifacts into the same directory'
20
+ required: false
21
+ default: 'false'
22
+
23
+ github-token:
24
+ description: 'GitHub token for cross-repo download (optional)'
25
+ required: false
26
+ default: ''
27
+
28
+ repository:
29
+ description: 'owner/repo for cross-repo download (optional)'
30
+ required: false
31
+ default: ''
32
+
33
+ run-id:
34
+ description: 'Workflow run ID for cross-run download (optional)'
35
+ required: false
36
+ default: ''
37
+
38
+ runs:
39
+ using: 'composite'
40
+ steps:
41
+ - name: Download artifact
42
+ uses: actions/download-artifact@v4
43
+ with:
44
+ name: ${{ inputs.name }}
45
+ path: ${{ inputs.path }}
46
+ pattern: ${{ inputs.pattern }}
47
+ merge-multiple: ${{ inputs.merge-multiple }}
48
+ github-token: ${{ inputs.github-token }}
49
+ repository: ${{ inputs.repository }}
50
+ run-id: ${{ inputs.run-id }}
@@ -0,0 +1,19 @@
1
+ name: 'GitHub Script'
2
+ description: 'Wrapper for actions/github-script'
3
+ inputs:
4
+ script:
5
+ description: 'JavaScript to run'
6
+ required: true
7
+
8
+ github-token:
9
+ description: 'GitHub token (defaults to github.token)'
10
+ required: false
11
+ default: ${{ github.token }}
12
+
13
+ runs:
14
+ using: 'composite'
15
+ steps:
16
+ - uses: actions/github-script@v8
17
+ with:
18
+ script: ${{ inputs.script }}
19
+ github-token: ${{ inputs.github-token }}
@@ -0,0 +1,40 @@
1
+ name: 'Setup EasyScience bot for pushing'
2
+ description: 'Create GitHub App token and configure git identity + origin remote'
3
+ inputs:
4
+ app-id:
5
+ description: 'GitHub App ID'
6
+ required: true
7
+ private-key:
8
+ description: 'GitHub App private key (PEM)'
9
+ required: true
10
+ repositories:
11
+ description: 'Additional repositories to grant access to (newline-separated)'
12
+ required: false
13
+ default: ''
14
+
15
+ outputs:
16
+ token:
17
+ description: 'Installation access token'
18
+ value: ${{ steps.app-token.outputs.token }}
19
+
20
+ runs:
21
+ using: 'composite'
22
+ steps:
23
+ - name: Create GitHub App installation token
24
+ id: app-token
25
+ uses: actions/create-github-app-token@v2
26
+ with:
27
+ app-id: ${{ inputs.app-id }}
28
+ private-key: ${{ inputs.private-key }}
29
+ repositories: ${{ inputs.repositories }}
30
+
31
+ - name: Configure git for pushing
32
+ shell: bash
33
+ run: |
34
+ git config user.name "easyscience[bot]"
35
+ git config user.email "${{ inputs.app-id }}+easyscience[bot]@users.noreply.github.com"
36
+
37
+ - name: Configure origin remote to use the bot token
38
+ shell: bash
39
+ run: |
40
+ git remote set-url origin https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/${{ github.repository }}.git
@@ -0,0 +1,44 @@
1
+ name: 'Setup Pixi Environment'
2
+ description: 'Sets up pixi with common configuration'
3
+ inputs:
4
+ environments:
5
+ description: 'Pixi environments to setup'
6
+ required: false
7
+ default: 'default'
8
+ activate-environment:
9
+ description: 'Environment to activate'
10
+ required: false
11
+ default: 'default'
12
+ run-install:
13
+ description: 'Whether to run pixi install'
14
+ required: false
15
+ default: 'true'
16
+ locked:
17
+ description: 'Whether to run pixi install --locked'
18
+ required: false
19
+ default: 'false'
20
+ frozen:
21
+ description: 'Whether to run pixi install --frozen'
22
+ required: false
23
+ default: 'true'
24
+ cache:
25
+ description: 'Whether to use cache'
26
+ required: false
27
+ default: 'false'
28
+ post-cleanup:
29
+ description: 'Whether to run post cleanup'
30
+ required: false
31
+ default: 'false'
32
+
33
+ runs:
34
+ using: 'composite'
35
+ steps:
36
+ - uses: prefix-dev/setup-pixi@v0.9.4
37
+ with:
38
+ environments: ${{ inputs.environments }}
39
+ activate-environment: ${{ inputs.activate-environment }}
40
+ run-install: ${{ inputs.run-install }}
41
+ locked: ${{ inputs.locked }}
42
+ frozen: ${{ inputs.frozen }}
43
+ cache: ${{ inputs.cache }}
44
+ post-cleanup: ${{ inputs.post-cleanup }}
@@ -0,0 +1,49 @@
1
+ name: 'Upload artifact'
2
+ description: 'Generic wrapper for actions/upload-artifact'
3
+ inputs:
4
+ name:
5
+ description: 'Artifact name'
6
+ required: true
7
+
8
+ path:
9
+ description: 'File(s)/dir(s)/glob(s) to upload (newline-separated)'
10
+ required: true
11
+
12
+ include-hidden-files:
13
+ description: 'Include hidden files'
14
+ required: false
15
+ default: 'true'
16
+
17
+ if-no-files-found:
18
+ description: 'warn | error | ignore'
19
+ required: false
20
+ default: 'error'
21
+
22
+ compression-level:
23
+ description: '0-9 (0 = no compression)'
24
+ required: false
25
+ default: '0'
26
+
27
+ retention-days:
28
+ description: 'Retention in days (optional)'
29
+ required: false
30
+ default: ''
31
+
32
+ overwrite:
33
+ description: 'Overwrite an existing artifact with the same name'
34
+ required: false
35
+ default: 'false'
36
+
37
+ runs:
38
+ using: 'composite'
39
+ steps:
40
+ - name: Upload artifact
41
+ uses: actions/upload-artifact@v4
42
+ with:
43
+ name: ${{ inputs.name }}
44
+ path: ${{ inputs.path }}
45
+ include-hidden-files: ${{ inputs.include-hidden-files }}
46
+ if-no-files-found: ${{ inputs.if-no-files-found }}
47
+ compression-level: ${{ inputs.compression-level }}
48
+ retention-days: ${{ inputs.retention-days }}
49
+ overwrite: ${{ inputs.overwrite }}
@@ -0,0 +1,42 @@
1
+ name: 'Upload coverage to Codecov'
2
+ description: 'Generic wrapper for codecov/codecov-action@v5'
3
+
4
+ inputs:
5
+ name:
6
+ description: 'Codecov upload name'
7
+ required: true
8
+
9
+ flags:
10
+ description: 'Codecov flags'
11
+ required: false
12
+ default: ''
13
+
14
+ files:
15
+ description: 'Coverage report files'
16
+ required: true
17
+
18
+ fail_ci_if_error:
19
+ description: 'Fail CI if upload fails'
20
+ required: false
21
+ default: 'true'
22
+
23
+ verbose:
24
+ description: 'Enable verbose output'
25
+ required: false
26
+ default: 'true'
27
+
28
+ token:
29
+ description: 'Codecov token'
30
+ required: true
31
+
32
+ runs:
33
+ using: composite
34
+ steps:
35
+ - uses: codecov/codecov-action@v5
36
+ with:
37
+ name: ${{ inputs.name }}
38
+ flags: ${{ inputs.flags }}
39
+ files: ${{ inputs.files }}
40
+ fail_ci_if_error: ${{ inputs.fail_ci_if_error }}
41
+ verbose: ${{ inputs.verbose }}
42
+ token: ${{ inputs.token }}
@@ -0,0 +1,6 @@
1
+ {
2
+ "source": {
3
+ "branch": "gh-pages",
4
+ "path": "/"
5
+ }
6
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "develop branch",
3
+ "target": "branch",
4
+ "enforcement": "active",
5
+ "conditions": {
6
+ "ref_name": {
7
+ "include": ["refs/heads/develop"],
8
+ "exclude": []
9
+ }
10
+ },
11
+ "bypass_actors": [
12
+ {
13
+ "actor_id": 2476259,
14
+ "actor_type": "Integration",
15
+ "bypass_mode": "always"
16
+ }
17
+ ],
18
+ "rules": [
19
+ {
20
+ "type": "non_fast_forward"
21
+ },
22
+ {
23
+ "type": "deletion"
24
+ },
25
+ {
26
+ "type": "pull_request",
27
+ "parameters": {
28
+ "allowed_merge_methods": ["squash"],
29
+ "dismiss_stale_reviews_on_push": false,
30
+ "require_code_owner_review": false,
31
+ "require_last_push_approval": false,
32
+ "required_approving_review_count": 0,
33
+ "required_review_thread_resolution": false
34
+ }
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "gh-pages branch",
3
+ "target": "branch",
4
+ "enforcement": "active",
5
+ "conditions": {
6
+ "ref_name": {
7
+ "include": ["refs/heads/gh-pages"],
8
+ "exclude": []
9
+ }
10
+ },
11
+ "rules": [
12
+ {
13
+ "type": "non_fast_forward"
14
+ },
15
+ {
16
+ "type": "deletion"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "master branch",
3
+ "target": "branch",
4
+ "enforcement": "active",
5
+ "conditions": {
6
+ "ref_name": {
7
+ "include": ["~DEFAULT_BRANCH"],
8
+ "exclude": []
9
+ }
10
+ },
11
+ "rules": [
12
+ {
13
+ "type": "non_fast_forward"
14
+ },
15
+ {
16
+ "type": "deletion"
17
+ },
18
+ {
19
+ "type": "pull_request",
20
+ "parameters": {
21
+ "allowed_merge_methods": ["merge"],
22
+ "dismiss_stale_reviews_on_push": false,
23
+ "require_code_owner_review": false,
24
+ "require_last_push_approval": false,
25
+ "required_approving_review_count": 0,
26
+ "required_review_thread_resolution": false
27
+ }
28
+ }
29
+ ]
30
+ }
@@ -0,0 +1,159 @@
1
+ # Copilot Instructions for EasyDiffraction
2
+
3
+ ## Project Context
4
+
5
+ - Python library for crystallographic diffraction analysis, such as
6
+ refinement of the structural model against experimental data.
7
+ - Support for
8
+ - sample_form: powder and single crystal
9
+ - beam_mode: time-of-flight and constant wavelength
10
+ - radiation_probe: neutron and x-ray
11
+ - scattering_type: bragg and total scattering
12
+ - Calculations are done using external calculation libraries:
13
+ - `cryspy` for Bragg diffraction
14
+ - `crysfml` for Bragg diffraction
15
+ - `pdffit2` for Total scattering
16
+ - Follow CIF naming conventions where possible. In some places, we
17
+ deviate for better API design, but we try to keep the spirit of the
18
+ CIF names.
19
+ - Reusing the concept of datablocks and categories from CIF. We have
20
+ `DatablockItem` (structure or experiment) and `DatablockCollection`
21
+ (collection of structures or experiments), as well as `CategoryItem`
22
+ (single categories in CIF) and `CategoryCollection` (loop categories
23
+ in CIF).
24
+ - Metadata via frozen dataclasses: `TypeInfo`, `Compatibility`,
25
+ `CalculatorSupport`.
26
+ - The API is designed for scientists who use EasyDiffraction as a final
27
+ product in a user-friendly, intuitive way. The target users are not
28
+ software developers and may have little or no Python experience. The
29
+ design is not oriented toward developers building their own tooling on
30
+ top of the library, although experienced developers will find their
31
+ own way. Prioritize discoverability, clear error messages, and safe
32
+ defaults so that non-programmers are not stuck by standard API
33
+ conventions.
34
+ - This project must be developed to be as error-free as possible, with
35
+ the same rigour applied to critical software (e.g. nuclear-plant
36
+ control systems). Every code path must be tested, edge cases must be
37
+ handled explicitly, and silent failures are not acceptable.
38
+
39
+ ## Code Style
40
+
41
+ - Use snake_case for functions and variables, PascalCase for classes,
42
+ and UPPER_SNAKE_CASE for constants.
43
+ - Use `from __future__ import annotations` in every module.
44
+ - Type-annotate all public function signatures.
45
+ - Docstrings on all public classes and methods (numpy style).
46
+ - Prefer flat over nested, explicit over clever.
47
+ - Write straightforward code; do not add defensive checks for unlikely
48
+ edge cases.
49
+ - Prefer composition over deep inheritance.
50
+ - One class per file when the class is substantial; group small related
51
+ classes.
52
+ - Avoid `**kwargs`; use explicit keyword arguments for clarity,
53
+ autocomplete, and typo detection.
54
+ - Do not use string-based dispatch (e.g. `getattr(self, f'_{name}')`) to
55
+ route to attributes or methods. Instead, write explicit named methods
56
+ (e.g. `_set_sample_form`, `_set_beam_mode`). This keeps the code
57
+ greppable, autocomplete-friendly, and type-safe.
58
+ - Public parameters and descriptors are either **editable** (property
59
+ with both getter and setter) or **read-only** (property with getter
60
+ only). If internal code needs to mutate a read-only property, add a
61
+ private `_set_<name>` method instead of exposing a public setter.
62
+
63
+ ## Architecture
64
+
65
+ - Eager imports at the top of the module by default. Use lazy imports
66
+ (inside a method body) only when necessary to break circular
67
+ dependencies or to keep `core/` free of heavy utility imports on
68
+ rarely-called paths (e.g. `help()`).
69
+ - No `pkgutil` / `importlib` auto-discovery patterns.
70
+ - No background/daemon threads.
71
+ - No monkey-patching or runtime class mutation.
72
+ - Do not use `__all__` in modules; instead, rely on explicit imports in
73
+ `__init__.py` to control the public API.
74
+ - Do not use redundant `import X as X` aliases in `__init__.py`. Use
75
+ plain `from module import X`.
76
+ - Concrete classes use `@Factory.register` decorators. To trigger
77
+ registration, each package's `__init__.py` must explicitly import
78
+ every concrete class (e.g.
79
+ `from .chebyshev import ChebyshevPolynomialBackground`). When adding a
80
+ new concrete class, always add its import to the corresponding
81
+ `__init__.py`.
82
+ - Switchable categories (those whose implementation can be swapped at
83
+ runtime via a factory) follow a fixed naming convention on the owner
84
+ (experiment, structure, or analysis): `<category>` (read-only
85
+ property), `<category>_type` (getter + setter),
86
+ `show_supported_<category>_types()`, `show_current_<category>_type()`.
87
+ The owner class owns the type setter and the show methods; the show
88
+ methods delegate to `Factory.show_supported(...)` passing context.
89
+ Every factory-created category must have this full API, even if only
90
+ one implementation exists today.
91
+ - Categories are flat siblings within their owner (datablock or
92
+ analysis). A category must never be a child of another category of a
93
+ different type. Categories can reference each other via IDs, but not
94
+ via parent-child nesting.
95
+ - Every finite, closed set of values (factory tags, experiment axes,
96
+ category descriptors with enumerated choices) must use a `(str, Enum)`
97
+ class. Internal code compares against enum members, never raw strings.
98
+ - Keep `core/` free of domain logic — only base classes and utilities.
99
+ - Don't introduce a new abstraction until there is a concrete second use
100
+ case.
101
+ - Don't add dependencies without asking.
102
+
103
+ ## Tutorials
104
+
105
+ - Jupyter notebooks (`docs/docs/tutorials/*.ipynb`) are **generated
106
+ artifacts** — never edit them by hand. Edit only the corresponding
107
+ `*.py` script, then run `pixi run notebook-convert` followed by
108
+ `pixi run notebook-prepare` to regenerate the notebook.
109
+
110
+ ## Changes
111
+
112
+ - Before implementing any structural or design change (new categories,
113
+ new factories, switchable-category wiring, new datablocks, CIF
114
+ serialisation changes), read `docs/architecture/architecture.md` to
115
+ understand the current design choices and conventions. Follow the
116
+ documented patterns (factory registration, switchable-category naming,
117
+ metadata classification, etc.) to stay consistent with the rest of the
118
+ codebase. For localised bug fixes or test updates, the rules in this
119
+ file are sufficient.
120
+ - The project is in beta; do not keep legacy code or add deprecation
121
+ warnings. Instead, update tests and tutorials to follow the current
122
+ API.
123
+ - Minimal diffs: don't rewrite working code just to reformat it.
124
+ - Never remove or replace existing functionality as part of a new change
125
+ without explicit confirmation. If a refactor would drop features,
126
+ options, or configurations, highlight every removal and wait for
127
+ approval.
128
+ - Fix only what's asked; flag adjacent issues as comments, don't fix
129
+ them silently.
130
+ - Don't add new features or refactor existing code unless explicitly
131
+ asked.
132
+ - Do not remove TODOs or comments unless the change fully resolves them.
133
+ - When renaming, grep the entire project (code, tests, tutorials, docs).
134
+ - Every change should be atomic and self-contained, small enough to be
135
+ described by a single commit message. Make one change, suggest the
136
+ commit message, then stop and wait for confirmation before starting
137
+ the next change.
138
+ - When in doubt, ask for clarification before making changes.
139
+
140
+ ## Workflow
141
+
142
+ - All open issues, design questions, and planned improvements are
143
+ tracked in `docs/architecture/issues_open.md`, ordered by priority.
144
+ When an issue is fully implemented, move it from that file to
145
+ `docs/architecture/issues_closed.md`. When the resolution affects the
146
+ architecture, update the relevant sections of
147
+ `docs/architecture/architecture.md`.
148
+ - After changes, run linting and formatting fixes with `pixi run fix`.
149
+ Do not check what was auto-fixed, just accept the fixes and move on.
150
+ - After changes, run unit tests with `pixi run unit-tests`.
151
+ - After changes, run integration tests with
152
+ `pixi run integration-tests`.
153
+ - After changes, run tutorial tests with `pixi run script-tests`.
154
+ - Suggest a concise commit message (as a code block) after each change
155
+ (less than 72 characters, imperative mood, without prefixing with the
156
+ type of change). E.g.:
157
+ - Add ChebyshevPolynomialBackground class
158
+ - Implement background_type setter on Experiment
159
+ - Standardize switchable-category naming convention
@@ -0,0 +1,69 @@
1
+ module.exports = async ({ github, context, core }) => {
2
+ // Repo context
3
+ const owner = context.repo.owner
4
+ const repo = context.repo.repo
5
+
6
+ // Link to the exact workflow run that detected the conflict
7
+ const runUrl = `${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`
8
+
9
+ // We use a *stable title* so we can find/reuse the same "conflict tracker" issue
10
+ // instead of creating a new issue on every failed run.
11
+ const title = 'Backmerge conflict: master → develop'
12
+
13
+ // Comment/issue body includes the run URL so maintainers can jump straight to logs.
14
+ const body = [
15
+ 'Automatic backmerge failed due to merge conflicts.',
16
+ '',
17
+ `Workflow run: ${runUrl}`,
18
+ '',
19
+ 'Manual resolution required.',
20
+ ].join('\n')
21
+
22
+ // Label applied to the tracker issue (assumed to already exist in the repo).
23
+ const label = '[bot] backmerge'
24
+
25
+ // Search issues by title across *open and closed* issues.
26
+ // Why: if the conflict was resolved previously and the issue was closed,
27
+ // we prefer to reopen it and append a new comment instead of creating duplicates.
28
+ const q = `repo:${owner}/${repo} is:issue in:title "${title}"`
29
+ const search = await github.rest.search.issuesAndPullRequests({
30
+ q,
31
+ per_page: 10,
32
+ })
33
+
34
+ // Pick the first exact-title match (search can return partial matches).
35
+ const existing = search.data.items.find((i) => i.title === title)
36
+
37
+ if (existing) {
38
+ // If a tracker issue exists, reuse it:
39
+ // - reopen it if needed
40
+ // - add a comment with the new run URL
41
+ if (existing.state === 'closed') {
42
+ await github.rest.issues.update({
43
+ owner,
44
+ repo,
45
+ issue_number: existing.number,
46
+ state: 'open',
47
+ })
48
+ }
49
+
50
+ await github.rest.issues.createComment({
51
+ owner,
52
+ repo,
53
+ issue_number: existing.number,
54
+ body,
55
+ })
56
+
57
+ core.notice(`Conflict issue updated: #${existing.number}`)
58
+ return
59
+ }
60
+
61
+ // No tracker issue exists yet -> create the first one.
62
+ await github.rest.issues.create({
63
+ owner,
64
+ repo,
65
+ title,
66
+ body,
67
+ labels: [label],
68
+ })
69
+ }