easydiffraction 0.13.1__tar.gz → 0.15.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 (503) hide show
  1. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/pypi-test.yml +9 -7
  2. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/test.yml +6 -5
  3. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/PKG-INFO +3 -1
  4. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/architecture.md +130 -77
  5. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/issues_closed.md +16 -6
  6. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/issues_open.md +6 -26
  7. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/package-structure-full.md +20 -5
  8. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/package-structure-short.md +13 -3
  9. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-1.ipynb +3 -3
  10. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-1.py +3 -3
  11. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-10.ipynb +2 -2
  12. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-10.py +2 -2
  13. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-11.ipynb +5 -5
  14. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-11.py +5 -5
  15. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-12.ipynb +15 -25
  16. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-12.py +6 -9
  17. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-13.ipynb +104 -85
  18. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-13.py +71 -54
  19. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-14.ipynb +4 -4
  20. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-14.py +4 -4
  21. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-15.ipynb +29 -21
  22. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-15.py +8 -7
  23. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-16.ipynb +6 -6
  24. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-16.py +6 -6
  25. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-17.ipynb +48 -18
  26. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-17.py +48 -18
  27. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-18.ipynb +4 -20
  28. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-18.py +2 -8
  29. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-2.ipynb +76 -8
  30. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-2.py +29 -8
  31. easydiffraction-0.15.0/docs/docs/tutorials/ed-20.ipynb +816 -0
  32. easydiffraction-0.15.0/docs/docs/tutorials/ed-20.py +381 -0
  33. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-3.ipynb +138 -228
  34. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-3.py +25 -55
  35. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-4.ipynb +8 -4
  36. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-4.py +8 -4
  37. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-5.ipynb +94 -173
  38. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-5.py +32 -68
  39. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-6.ipynb +12 -13
  40. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-6.py +12 -13
  41. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-7.ipynb +191 -15
  42. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-7.py +89 -14
  43. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-8.ipynb +9 -12
  44. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-8.py +9 -12
  45. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-9.ipynb +5 -7
  46. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/ed-9.py +4 -6
  47. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/index.json +7 -0
  48. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/tutorials/index.md +8 -3
  49. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/analysis-workflow/analysis.md +10 -11
  50. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/analysis-workflow/project.md +13 -18
  51. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/first-steps.md +7 -8
  52. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/mkdocs.yml +3 -1
  53. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/pixi.lock +864 -792
  54. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/pixi.toml +8 -2
  55. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/pyproject.toml +3 -1
  56. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/__main__.py +3 -3
  57. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/analysis.py +25 -66
  58. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/calculators/crysfml.py +133 -43
  59. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/calculators/cryspy.py +77 -50
  60. easydiffraction-0.15.0/src/easydiffraction/analysis/categories/fit/__init__.py +6 -0
  61. easydiffraction-0.15.0/src/easydiffraction/analysis/categories/fit/default.py +200 -0
  62. {easydiffraction-0.13.1/src/easydiffraction/analysis/categories/fit_mode → easydiffraction-0.15.0/src/easydiffraction/analysis/categories/fit}/enums.py +2 -2
  63. {easydiffraction-0.13.1/src/easydiffraction/analysis/categories/fit_mode → easydiffraction-0.15.0/src/easydiffraction/analysis/categories/fit}/factory.py +3 -3
  64. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/sequential.py +3 -5
  65. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/variable.py +42 -1
  66. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/crystallography/crystallography.py +161 -13
  67. easydiffraction-0.15.0/src/easydiffraction/datablocks/experiment/categories/calculation/__init__.py +8 -0
  68. easydiffraction-0.15.0/src/easydiffraction/datablocks/experiment/categories/calculation/default.py +106 -0
  69. easydiffraction-0.15.0/src/easydiffraction/datablocks/experiment/categories/calculation/factory.py +17 -0
  70. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_pd.py +1 -1
  71. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_sc.py +1 -1
  72. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/data/total_pd.py +1 -1
  73. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/instrument/tof.py +1 -1
  74. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/__init__.py +1 -0
  75. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl.py +7 -6
  76. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl_mixins.py +2 -2
  77. easydiffraction-0.15.0/src/easydiffraction/datablocks/experiment/categories/peak/factory.py +148 -0
  78. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof.py +38 -12
  79. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/total.py +7 -3
  80. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/item/base.py +143 -100
  81. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/item/bragg_pd.py +21 -11
  82. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/item/enums.py +35 -27
  83. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/item/factory.py +2 -0
  84. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/atom_site_aniso/default.py +0 -42
  85. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/default.py +35 -12
  86. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/cell/default.py +15 -8
  87. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/item/base.py +17 -10
  88. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/io/cif/serialize.py +69 -36
  89. easydiffraction-0.15.0/src/easydiffraction/project/categories/display/__init__.py +8 -0
  90. easydiffraction-0.15.0/src/easydiffraction/project/categories/display/default.py +117 -0
  91. easydiffraction-0.15.0/src/easydiffraction/project/categories/display/factory.py +17 -0
  92. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/project/project.py +17 -20
  93. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/summary/summary.py +2 -2
  94. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/utils.py +2 -2
  95. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/functional/test_adp_switching.py +5 -7
  96. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/functional/test_structure_workflow.py +100 -0
  97. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/functional/test_switchable_categories.py +5 -5
  98. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/conftest.py +1 -1
  99. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_analysis_display.py +5 -6
  100. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_aniso_adp_fitting.py +2 -3
  101. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_exploration_help.py +4 -7
  102. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_multi.py +3 -3
  103. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_plotting.py +5 -5
  104. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_powder-diffraction_constant-wavelength.py +3 -3
  105. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_powder-diffraction_joint-fit.py +4 -4
  106. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_powder-diffraction_time-of-flight.py +2 -2
  107. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_project_load.py +2 -2
  108. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_switch-calculator.py +3 -3
  109. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/scipp-analysis/dream/test_package_import.py +6 -0
  110. easydiffraction-0.15.0/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +116 -0
  111. easydiffraction-0.15.0/tests/unit/easydiffraction/analysis/categories/test_fit.py +92 -0
  112. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/test_analysis.py +9 -9
  113. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/test_analysis_coverage.py +3 -3
  114. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/test_analysis_show_empty.py +3 -0
  115. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_parameters.py +56 -2
  116. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/crystallography/test_crystallography_coverage.py +54 -0
  117. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/crystallography/test_crystallography_wyckoff.py +31 -0
  118. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_base.py +2 -2
  119. easydiffraction-0.15.0/tests/unit/easydiffraction/datablocks/experiment/categories/calculation/test_default.py +90 -0
  120. easydiffraction-0.15.0/tests/unit/easydiffraction/datablocks/experiment/categories/calculation/test_factory.py +27 -0
  121. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_tof.py +1 -1
  122. easydiffraction-0.15.0/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py +89 -0
  123. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof.py +13 -0
  124. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_base_coverage.py +15 -15
  125. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc_coverage.py +4 -4
  126. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_enums_coverage.py +24 -12
  127. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/test_collection.py +1 -0
  128. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_atom_site_aniso.py +48 -87
  129. easydiffraction-0.15.0/tests/unit/easydiffraction/display/tablers/__init__.py +2 -0
  130. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/io/cif/test_serialize.py +39 -1
  131. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/io/cif/test_serialize_more.py +5 -7
  132. easydiffraction-0.15.0/tests/unit/easydiffraction/project/categories/display/test_default.py +55 -0
  133. easydiffraction-0.15.0/tests/unit/easydiffraction/project/categories/display/test_factory.py +23 -0
  134. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/project/test_project_load.py +16 -5
  135. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/summary/test_summary.py +4 -1
  136. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/summary/test_summary_details.py +9 -2
  137. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/test___main__.py +21 -29
  138. easydiffraction-0.13.1/docs/docs/tutorials/data/ed-7.xye +0 -5600
  139. easydiffraction-0.13.1/docs/docs/tutorials/ed-19.ipynb +0 -1101
  140. easydiffraction-0.13.1/docs/docs/tutorials/ed-19.py +0 -566
  141. easydiffraction-0.13.1/src/easydiffraction/analysis/categories/fit_mode/__init__.py +0 -6
  142. easydiffraction-0.13.1/src/easydiffraction/analysis/categories/fit_mode/fit_mode.py +0 -65
  143. easydiffraction-0.13.1/src/easydiffraction/datablocks/experiment/categories/peak/factory.py +0 -30
  144. easydiffraction-0.13.1/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +0 -28
  145. easydiffraction-0.13.1/tests/unit/easydiffraction/analysis/categories/test_fit_mode.py +0 -85
  146. easydiffraction-0.13.1/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py +0 -57
  147. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.badgery.yaml +0 -0
  148. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.codefactorignore +0 -0
  149. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.copier-answers.yml +0 -0
  150. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/actions/download-artifact/action.yml +0 -0
  151. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/actions/github-script/action.yml +0 -0
  152. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/actions/setup-easyscience-bot/action.yml +0 -0
  153. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/actions/setup-pixi/action.yml +0 -0
  154. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/actions/upload-artifact/action.yml +0 -0
  155. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/actions/upload-codecov/action.yml +0 -0
  156. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/configs/pages-deployment.json +0 -0
  157. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/configs/rulesets-develop.json +0 -0
  158. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/configs/rulesets-gh-pages.json +0 -0
  159. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/configs/rulesets-master.json +0 -0
  160. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/copilot-instructions.md +0 -0
  161. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/scripts/backmerge-conflict-issue.js +0 -0
  162. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/backmerge.yml +0 -0
  163. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/cleanup.yml +0 -0
  164. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/coverage.yml +0 -0
  165. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/dashboard.yml +0 -0
  166. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/docs.yml +0 -0
  167. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/issues-labels.yml +0 -0
  168. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/lint-format.yml +0 -0
  169. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/pr-labels.yml +0 -0
  170. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/pypi-publish.yml +0 -0
  171. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/release-notes.yml +0 -0
  172. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/release-pr.yml +0 -0
  173. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/security.yml +0 -0
  174. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/test-trigger.yml +0 -0
  175. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/tutorial-tests-colab.yaml +0 -0
  176. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/tutorial-tests-trigger.yml +0 -0
  177. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.github/workflows/tutorial-tests.yml +0 -0
  178. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.gitignore +0 -0
  179. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.pre-commit-config.yaml +0 -0
  180. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/.prettierignore +0 -0
  181. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/CONTRIBUTING.md +0 -0
  182. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/LICENSE +0 -0
  183. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/README.md +0 -0
  184. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/codecov.yml +0 -0
  185. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/ROADMAP.md +0 -0
  186. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/adp_implementation.md +0 -0
  187. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/architecture/cryspy-dwf-bug.md +0 -0
  188. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/analysis.md +0 -0
  189. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/core.md +0 -0
  190. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/crystallography.md +0 -0
  191. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/datablocks/experiment.md +0 -0
  192. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/datablocks/structure.md +0 -0
  193. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/display.md +0 -0
  194. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/index.md +0 -0
  195. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/io.md +0 -0
  196. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/project.md +0 -0
  197. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/summary.md +0 -0
  198. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/api-reference/utils.md +0 -0
  199. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/favicon.png +0 -0
  200. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/logo_dark.svg +0 -0
  201. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/logo_light.svg +0 -0
  202. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
  203. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
  204. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/user-guide/data-analysis_model.png +0 -0
  205. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
  206. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
  207. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/javascripts/extra.js +0 -0
  208. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/javascripts/mathjax.js +0 -0
  209. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/assets/stylesheets/extra.css +0 -0
  210. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/cli/index.md +0 -0
  211. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/index.md +0 -0
  212. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/installation-and-setup/index.md +0 -0
  213. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/introduction/index.md +0 -0
  214. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/analysis-workflow/experiment.md +0 -0
  215. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/analysis-workflow/index.md +0 -0
  216. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/analysis-workflow/model.md +0 -0
  217. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/analysis-workflow/summary.md +0 -0
  218. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/concept.md +0 -0
  219. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/data-format.md +0 -0
  220. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/glossary.md +0 -0
  221. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/index.md +0 -0
  222. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
  223. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
  224. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/_exptl_crystal.md +0 -0
  225. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/_extinction.md +0 -0
  226. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/_pd_calib.md +0 -0
  227. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/atom_site.md +0 -0
  228. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/background.md +0 -0
  229. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/cell.md +0 -0
  230. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/expt_type.md +0 -0
  231. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/instrument.md +0 -0
  232. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/linked_phases.md +0 -0
  233. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/pd_meas.md +0 -0
  234. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/peak.md +0 -0
  235. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters/space_group.md +0 -0
  236. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/docs/user-guide/parameters.md +0 -0
  237. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/includes/abbreviations.md +0 -0
  238. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/overrides/.icons/app.svg +0 -0
  239. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/overrides/.icons/easydiffraction.svg +0 -0
  240. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/overrides/.icons/easyscience.svg +0 -0
  241. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/overrides/.icons/google-colab.svg +0 -0
  242. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/overrides/main.html +0 -0
  243. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/docs/overrides/partials/logo.html +0 -0
  244. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/prettierrc.toml +0 -0
  245. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/__init__.py +0 -0
  246. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/__init__.py +0 -0
  247. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/calculators/__init__.py +0 -0
  248. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/calculators/base.py +0 -0
  249. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/calculators/factory.py +0 -0
  250. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/calculators/pdffit.py +0 -0
  251. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/__init__.py +0 -0
  252. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/aliases/__init__.py +0 -0
  253. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/aliases/default.py +0 -0
  254. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/aliases/factory.py +0 -0
  255. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/constraints/__init__.py +0 -0
  256. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/constraints/default.py +0 -0
  257. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/constraints/factory.py +0 -0
  258. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/__init__.py +0 -0
  259. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/default.py +0 -0
  260. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/factory.py +0 -0
  261. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/fit_helpers/__init__.py +0 -0
  262. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/fit_helpers/metrics.py +0 -0
  263. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/fit_helpers/reporting.py +0 -0
  264. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/fit_helpers/tracking.py +0 -0
  265. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/fitting.py +0 -0
  266. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/__init__.py +0 -0
  267. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/base.py +0 -0
  268. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/bumps.py +0 -0
  269. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/bumps_amoeba.py +0 -0
  270. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/bumps_de.py +0 -0
  271. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/bumps_lm.py +0 -0
  272. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/dfols.py +0 -0
  273. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/enums.py +0 -0
  274. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/factory.py +0 -0
  275. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/lmfit.py +0 -0
  276. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/lmfit_least_squares.py +0 -0
  277. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/analysis/minimizers/lmfit_leastsq.py +0 -0
  278. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/__init__.py +0 -0
  279. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/category.py +0 -0
  280. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/collection.py +0 -0
  281. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/datablock.py +0 -0
  282. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/diagnostic.py +0 -0
  283. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/factory.py +0 -0
  284. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/guard.py +0 -0
  285. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/identity.py +0 -0
  286. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/metadata.py +0 -0
  287. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/singleton.py +0 -0
  288. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/core/validation.py +0 -0
  289. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/crystallography/__init__.py +0 -0
  290. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
  291. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/crystallography/space_groups.py +0 -0
  292. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/__init__.py +0 -0
  293. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/__init__.py +0 -0
  294. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/__init__.py +0 -0
  295. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/background/__init__.py +0 -0
  296. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/background/base.py +0 -0
  297. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/background/chebyshev.py +0 -0
  298. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/background/enums.py +0 -0
  299. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/background/factory.py +0 -0
  300. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/background/line_segment.py +0 -0
  301. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/data/__init__.py +0 -0
  302. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/data/factory.py +0 -0
  303. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/__init__.py +0 -0
  304. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/default.py +0 -0
  305. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/factory.py +0 -0
  306. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/__init__.py +0 -0
  307. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/default.py +0 -0
  308. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/factory.py +0 -0
  309. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/__init__.py +0 -0
  310. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/default.py +0 -0
  311. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/factory.py +0 -0
  312. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/extinction/__init__.py +0 -0
  313. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/extinction/becker_coppens.py +0 -0
  314. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/extinction/factory.py +0 -0
  315. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/instrument/__init__.py +0 -0
  316. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/instrument/base.py +0 -0
  317. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/instrument/cwl.py +0 -0
  318. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/instrument/factory.py +0 -0
  319. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/__init__.py +0 -0
  320. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/default.py +0 -0
  321. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/factory.py +0 -0
  322. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/__init__.py +0 -0
  323. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/default.py +0 -0
  324. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/factory.py +0 -0
  325. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/base.py +0 -0
  326. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof_mixins.py +0 -0
  327. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/categories/peak/total_mixins.py +0 -0
  328. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/collection.py +0 -0
  329. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/item/__init__.py +0 -0
  330. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/item/bragg_sc.py +0 -0
  331. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/experiment/item/total_pd.py +0 -0
  332. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/__init__.py +0 -0
  333. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/__init__.py +0 -0
  334. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/atom_site_aniso/__init__.py +0 -0
  335. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/atom_site_aniso/factory.py +0 -0
  336. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/__init__.py +0 -0
  337. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/enums.py +0 -0
  338. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/factory.py +0 -0
  339. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/cell/__init__.py +0 -0
  340. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/cell/factory.py +0 -0
  341. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/space_group/__init__.py +0 -0
  342. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/space_group/default.py +0 -0
  343. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/categories/space_group/factory.py +0 -0
  344. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/collection.py +0 -0
  345. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/item/__init__.py +0 -0
  346. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/datablocks/structure/item/factory.py +0 -0
  347. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/__init__.py +0 -0
  348. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/base.py +0 -0
  349. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/plotters/__init__.py +0 -0
  350. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/plotters/ascii.py +0 -0
  351. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/plotters/base.py +0 -0
  352. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/plotters/plotly.py +0 -0
  353. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/plotting.py +0 -0
  354. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/tablers/__init__.py +0 -0
  355. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/tablers/base.py +0 -0
  356. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/tablers/pandas.py +0 -0
  357. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/tablers/rich.py +0 -0
  358. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/tables.py +0 -0
  359. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/display/utils.py +0 -0
  360. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/io/__init__.py +0 -0
  361. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/io/ascii.py +0 -0
  362. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/io/cif/__init__.py +0 -0
  363. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/io/cif/handler.py +0 -0
  364. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/io/cif/parse.py +0 -0
  365. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/project/__init__.py +0 -0
  366. {easydiffraction-0.13.1/src/easydiffraction/summary → easydiffraction-0.15.0/src/easydiffraction/project/categories}/__init__.py +0 -0
  367. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/project/project_info.py +0 -0
  368. {easydiffraction-0.13.1/tests/unit/easydiffraction/datablocks/structure/categories → easydiffraction-0.15.0/src/easydiffraction/summary}/__init__.py +0 -0
  369. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/__init__.py +0 -0
  370. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/_vendored/__init__.py +0 -0
  371. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/__init__.py +0 -0
  372. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/detector.py +0 -0
  373. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/_vendored/theme_detect.py +0 -0
  374. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/enums.py +0 -0
  375. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/environment.py +0 -0
  376. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/src/easydiffraction/utils/logging.py +0 -0
  377. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/functional/conftest.py +0 -0
  378. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/functional/test_experiment_workflow.py +0 -0
  379. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/functional/test_fitting_workflow.py +0 -0
  380. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/functional/test_project_lifecycle.py +0 -0
  381. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_cif_round_trip.py +0 -0
  382. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_pair-distribution-function.py +0 -0
  383. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_sequential.py +0 -0
  384. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_single-crystal-diffraction.py +0 -0
  385. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/fitting/test_summary_report.py +0 -0
  386. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/scipp-analysis/dream/conftest.py +0 -0
  387. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/scipp-analysis/dream/test_analyze_reduced_data.py +0 -0
  388. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/scipp-analysis/dream/test_read_reduced_data.py +0 -0
  389. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/scipp-analysis/dream/test_validate_meta_data.py +0 -0
  390. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/integration/scipp-analysis/dream/test_validate_physical_data.py +0 -0
  391. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/calculators/test_base.py +0 -0
  392. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/calculators/test_crysfml.py +0 -0
  393. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/calculators/test_factory.py +0 -0
  394. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +0 -0
  395. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/categories/test_aliases.py +0 -0
  396. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/categories/test_constraints.py +0 -0
  397. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/categories/test_joint_fit_experiments.py +0 -0
  398. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_metrics.py +0 -0
  399. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py +0 -0
  400. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_tracking.py +0 -0
  401. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_base.py +0 -0
  402. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps.py +0 -0
  403. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps_amoeba.py +0 -0
  404. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps_de.py +0 -0
  405. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps_lm.py +0 -0
  406. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_dfols.py +0 -0
  407. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_enums.py +0 -0
  408. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_factory.py +0 -0
  409. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit.py +0 -0
  410. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit_least_squares.py +0 -0
  411. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit_leastsq.py +0 -0
  412. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/test_analysis_access_params.py +0 -0
  413. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/test_fitting.py +0 -0
  414. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/analysis/test_sequential.py +0 -0
  415. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_category.py +0 -0
  416. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_collection.py +0 -0
  417. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_datablock.py +0 -0
  418. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_diagnostic.py +0 -0
  419. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_factory.py +0 -0
  420. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_guard.py +0 -0
  421. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_identity.py +0 -0
  422. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_metadata.py +0 -0
  423. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_singletons.py +0 -0
  424. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/core/test_validation.py +0 -0
  425. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/crystallography/test_crystallography.py +0 -0
  426. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/crystallography/test_space_groups.py +0 -0
  427. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/crystallography/test_space_groups_coverage.py +0 -0
  428. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_chebyshev.py +0 -0
  429. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_enums.py +0 -0
  430. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_factory.py +0 -0
  431. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_line_segment.py +0 -0
  432. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_pd.py +0 -0
  433. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_sc.py +0 -0
  434. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_factory.py +0 -0
  435. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_total_pd.py +0 -0
  436. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_base.py +0 -0
  437. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_cwl.py +0 -0
  438. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_factory.py +0 -0
  439. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_base.py +0 -0
  440. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl.py +0 -0
  441. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl_mixins.py +0 -0
  442. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof_mixins.py +0 -0
  443. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total.py +0 -0
  444. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total_mixins.py +0 -0
  445. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_diffrn.py +0 -0
  446. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_excluded_regions.py +0 -0
  447. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_experiment_type.py +0 -0
  448. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_extinction.py +0 -0
  449. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_crystal.py +0 -0
  450. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_phases.py +0 -0
  451. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_base.py +0 -0
  452. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_pd.py +0 -0
  453. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc.py +0 -0
  454. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_enums.py +0 -0
  455. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_factory.py +0 -0
  456. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_factory_coverage.py +0 -0
  457. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_total_pd.py +0 -0
  458. {easydiffraction-0.13.1/tests/unit/easydiffraction/display/tablers → easydiffraction-0.15.0/tests/unit/easydiffraction/datablocks/structure/categories}/__init__.py +0 -0
  459. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_atom_sites.py +0 -0
  460. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_cell.py +0 -0
  461. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_space_group.py +0 -0
  462. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/item/test_base.py +0 -0
  463. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/item/test_base_coverage.py +0 -0
  464. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/item/test_factory.py +0 -0
  465. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/test_collection.py +0 -0
  466. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/datablocks/structure/test_collection_coverage.py +0 -0
  467. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/plotters/test_ascii.py +0 -0
  468. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/plotters/test_base.py +0 -0
  469. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/plotters/test_plotly.py +0 -0
  470. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/tablers/test_base.py +0 -0
  471. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/tablers/test_pandas.py +0 -0
  472. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/tablers/test_rich.py +0 -0
  473. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/test_base.py +0 -0
  474. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/test_plotting.py +0 -0
  475. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/test_plotting_coverage.py +0 -0
  476. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/test_tables.py +0 -0
  477. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/display/test_utils.py +0 -0
  478. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/io/cif/test_handler.py +0 -0
  479. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/io/cif/test_parse.py +0 -0
  480. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/io/test_ascii.py +0 -0
  481. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/project/test_project.py +0 -0
  482. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/project/test_project_info.py +0 -0
  483. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/project/test_project_load_and_summary_wrap.py +0 -0
  484. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/project/test_project_save.py +0 -0
  485. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/test___init__.py +0 -0
  486. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_enums.py +0 -0
  487. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_environment.py +0 -0
  488. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_environment_coverage.py +0 -0
  489. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_logging.py +0 -0
  490. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_logging_coverage.py +0 -0
  491. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_theme_detect.py +0 -0
  492. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_utils.py +0 -0
  493. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tests/unit/easydiffraction/utils/test_utils_coverage.py +0 -0
  494. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/gen_tests_scaffold.py +0 -0
  495. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/generate_package_docs.py +0 -0
  496. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/license_headers.py +0 -0
  497. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/naming_check.py +0 -0
  498. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/param_consistency.py +0 -0
  499. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/test_scripts.py +0 -0
  500. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/test_structure_check.py +0 -0
  501. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/tweak_notebooks.py +0 -0
  502. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/update_docs_assets.py +0 -0
  503. {easydiffraction-0.13.1 → easydiffraction-0.15.0}/tools/update_github_labels.py +0 -0
@@ -50,7 +50,9 @@ jobs:
50
50
 
51
51
  - name: Set the minimum system requirements
52
52
  working-directory: easydiffraction
53
- run: pixi project system-requirements add macos 14.0
53
+ run: |
54
+ pixi project system-requirements add macos 14.0
55
+ pixi project system-requirements add glibc 2.35
54
56
 
55
57
  - name: Add Python 3.14 from Conda
56
58
  working-directory: easydiffraction
@@ -62,12 +64,12 @@ jobs:
62
64
  pixi add gsl
63
65
  pixi add --platform osx-arm64 libcxx
64
66
 
65
- - name: Add pycrysfml calculator from custom PyPI index
66
- working-directory: easydiffraction
67
- run: |
68
- echo '' >> pixi.toml
69
- echo '[pypi-dependencies]' >> pixi.toml
70
- echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
67
+ #- name: Add pycrysfml calculator from custom PyPI index
68
+ # working-directory: easydiffraction
69
+ # run: |
70
+ # echo '' >> pixi.toml
71
+ # echo '[pypi-dependencies]' >> pixi.toml
72
+ # echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
71
73
 
72
74
  - name: Add easydiffraction (with dev dependencies) from PyPI
73
75
  working-directory: easydiffraction
@@ -217,8 +217,9 @@ jobs:
217
217
  pixi init easydiffraction_py$py_ver
218
218
  cd easydiffraction_py$py_ver
219
219
 
220
- echo "Setting macOS 14.0 as minimum required"
220
+ echo "Setting the minimum system requirements"
221
221
  pixi project system-requirements add macos 14.0
222
+ pixi project system-requirements add glibc 2.35
222
223
 
223
224
  echo "Adding Python $py_ver"
224
225
  pixi add "python=$py_ver"
@@ -236,10 +237,10 @@ jobs:
236
237
  # Doing this in a hacky way, as pixi does not support adding
237
238
  # dependencies from a custom PyPI index with a CLI command without
238
239
  # specifying full wheel name.
239
- echo "Adding pycrysfml from custom PyPI index"
240
- echo '' >> pixi.toml
241
- echo '[pypi-dependencies]' >> pixi.toml
242
- echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
240
+ #echo "Adding pycrysfml from custom PyPI index"
241
+ #echo '' >> pixi.toml
242
+ #echo '[pypi-dependencies]' >> pixi.toml
243
+ #echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
243
244
 
244
245
  echo "Looking for wheel in ../dist/py$py_ver/"
245
246
  ls -l "../dist/py$py_ver/"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easydiffraction
3
- Version: 0.13.1
3
+ Version: 0.15.0
4
4
  Summary: Diffraction data analysis
5
5
  Project-URL: Homepage, https://easydiffraction.org
6
6
  Project-URL: Documentation, https://easyscience.github.io/diffraction-lib
@@ -24,6 +24,7 @@ Requires-Dist: asciichartpy
24
24
  Requires-Dist: asteval
25
25
  Requires-Dist: bumps
26
26
  Requires-Dist: colorama
27
+ Requires-Dist: crysfml
27
28
  Requires-Dist: cryspy
28
29
  Requires-Dist: darkdetect
29
30
  Requires-Dist: dfo-ls
@@ -69,6 +70,7 @@ Requires-Dist: nbstripout; extra == 'dev'
69
70
  Requires-Dist: pre-commit; extra == 'dev'
70
71
  Requires-Dist: pydoclint; extra == 'dev'
71
72
  Requires-Dist: pytest; extra == 'dev'
73
+ Requires-Dist: pytest-benchmark; extra == 'dev'
72
74
  Requires-Dist: pytest-cov; extra == 'dev'
73
75
  Requires-Dist: pytest-xdist; extra == 'dev'
74
76
  Requires-Dist: pyyaml; extra == 'dev'
@@ -210,7 +210,7 @@ GuardedBase
210
210
  └── GenericDescriptorBase # name, value (validated via AttributeSpec), description
211
211
  ├── GenericStringDescriptor # _value_type = DataTypes.STRING
212
212
  └── GenericNumericDescriptor # _value_type = DataTypes.NUMERIC, + units
213
- └── GenericParameter # + free, uncertainty, fit_min, fit_max, constrained
213
+ └── GenericParameter # + free, uncertainty, fit_min, fit_max, constrained, symmetry_fixed
214
214
  ```
215
215
 
216
216
  CIF-bound concrete classes add a `CifHandler` for serialisation:
@@ -322,6 +322,17 @@ A `Structure` contains four categories:
322
322
  Symmetry constraints (cell metric, atomic coordinates, ADPs) are applied
323
323
  via the `crystallography` module during `_update_categories()`.
324
324
 
325
+ Parameters that are fully determined by symmetry (e.g. `lattice_b` in
326
+ cubic, `fract_y` of an atom on a 4-fold axis, off-diagonal ADPs forced
327
+ to zero by site symmetry) are flagged as `symmetry_fixed = True` on the
328
+ `Parameter`. This forces `free = False`; any subsequent attempt to set
329
+ `free = True` on such a parameter is ignored with a warning. Flags are
330
+ recomputed on every `_update_categories()` so that changing the space
331
+ group, Wyckoff letter, or ADP type re-evaluates which parameters are
332
+ fixed. Surface helpers `cell_symmetry_fixed_flags(...)` and
333
+ `atom_site_symmetry_fixed_flags(...)` in `crystallography` expose the
334
+ per-key flags.
335
+
325
336
  ### 4.2 Atomic Displacement Parameters (ADP)
326
337
 
327
338
  ADP support covers four CIF-standard types: **Biso**, **Uiso**,
@@ -389,14 +400,14 @@ class PeakFactory(FactoryBase):
389
400
  frozenset({
390
401
  ('scattering_type', ScatteringTypeEnum.BRAGG),
391
402
  ('beam_mode', BeamModeEnum.CONSTANT_WAVELENGTH),
392
- }): PeakProfileTypeEnum.PSEUDO_VOIGT,
403
+ }): PeakProfileTypeEnum.CWL_PSEUDO_VOIGT,
393
404
  frozenset({
394
405
  ('scattering_type', ScatteringTypeEnum.BRAGG),
395
406
  ('beam_mode', BeamModeEnum.TIME_OF_FLIGHT),
396
- }): PeakProfileTypeEnum.JORGENSEN,
407
+ }): PeakProfileTypeEnum.TOF_JORGENSEN,
397
408
  frozenset({
398
409
  ('scattering_type', ScatteringTypeEnum.TOTAL),
399
- }): PeakProfileTypeEnum.GAUSSIAN_DAMPED_SINC,
410
+ }): PeakProfileTypeEnum.TOTAL_GAUSSIAN_DAMPED_SINC,
400
411
  }
401
412
  ```
402
413
 
@@ -413,8 +424,8 @@ attributes:
413
424
  @PeakFactory.register
414
425
  class CwlPseudoVoigt(PeakBase, CwlBroadeningMixin):
415
426
  type_info = TypeInfo(
416
- tag='pseudo-voigt',
417
- description='Pseudo-Voigt profile',
427
+ tag=PeakProfileTypeEnum.CWL_PSEUDO_VOIGT.value,
428
+ description=PeakProfileTypeEnum.CWL_PSEUDO_VOIGT.description(),
418
429
  )
419
430
  compatibility = Compatibility(
420
431
  scattering_type=frozenset({ScatteringTypeEnum.BRAGG}),
@@ -478,7 +489,11 @@ from .line_segment import LineSegmentBackground
478
489
 
479
490
  ### 5.6 Tag Naming Convention
480
491
 
481
- Tags are the user-facing identifiers for selecting types. They must be:
492
+ Canonical tags are the stable identifiers for factory lookup and
493
+ serialisation. User-facing APIs may expose context-local aliases when
494
+ the owner object already provides enough context to disambiguate the
495
+ choice (for example, `experiment.peak_profile_type = 'pseudo-voigt'`
496
+ inside a CWL or TOF experiment). Canonical tags must be:
482
497
 
483
498
  - **Consistent** — use the same abbreviations everywhere.
484
499
  - **Hyphen-separated** — all lowercase, words joined by hyphens.
@@ -507,15 +522,22 @@ Tags are the user-facing identifiers for selecting types. They must be:
507
522
 
508
523
  **Peak tags**
509
524
 
510
- | Tag | Class |
511
- | ------------------------------------ | ---------------------------------- |
512
- | `pseudo-voigt` | `CwlPseudoVoigt` |
513
- | `pseudo-voigt + empirical asymmetry` | `CwlPseudoVoigtEmpiricalAsymmetry` |
514
- | `thompson-cox-hastings` | `CwlThompsonCoxHastings` |
515
- | `jorgensen` | `TofJorgensen` |
516
- | `jorgensen-von-dreele` | `TofJorgensenVonDreele` |
517
- | `double-jorgensen-von-dreele` | `TofDoubleJorgensenVonDreele` |
518
- | `gaussian-damped-sinc` | `TotalGaussianDampedSinc` |
525
+ Canonical peak tags are globally unique within `PeakFactory`. The
526
+ experiment-facing `peak_profile_type` getter, setter, and supported-type
527
+ display use context-local aliases so users do not need to type `cwl-`,
528
+ `tof-`, or `total-` when the experiment context already disambiguates
529
+ the choice.
530
+
531
+ | Canonical tag | Local alias | Class |
532
+ | -------------------------------------- | ------------------------------------ | ---------------------------------- |
533
+ | `cwl-pseudo-voigt` | `pseudo-voigt` | `CwlPseudoVoigt` |
534
+ | `cwl-pseudo-voigt-empirical-asymmetry` | `pseudo-voigt + empirical asymmetry` | `CwlPseudoVoigtEmpiricalAsymmetry` |
535
+ | `cwl-thompson-cox-hastings` | `thompson-cox-hastings` | `CwlThompsonCoxHastings` |
536
+ | `tof-pseudo-voigt` | `pseudo-voigt` | `TofPseudoVoigt` |
537
+ | `tof-jorgensen` | `jorgensen` | `TofJorgensen` |
538
+ | `tof-jorgensen-von-dreele` | `jorgensen-von-dreele` | `TofJorgensenVonDreele` |
539
+ | `tof-double-jorgensen-von-dreele` | `double-jorgensen-von-dreele` | `TofDoubleJorgensenVonDreele` |
540
+ | `total-gaussian-damped-sinc` | `gaussian-damped-sinc` | `TotalGaussianDampedSinc` |
519
541
 
520
542
  **Instrument tags**
521
543
 
@@ -684,14 +706,14 @@ category's `calculator_support` metadata and
684
706
  registry by `engine_imported` (whether the third-party library is
685
707
  available in the environment).
686
708
 
687
- The experiment exposes the standard switchable-category API:
709
+ The experiment exposes a dedicated `calculation` category:
688
710
 
689
- - `calculator` — read-only property (lazy, auto-resolved on first
690
- access)
691
- - `calculator_type` — getter + setter
692
- - `show_supported_calculator_types()` — filtered by data category
693
- support
694
- - `show_current_calculator_type()`
711
+ - `calculation.calculator_type` — getter + setter for the calculator
712
+ backend tag
713
+ - `calculation.calculator` — read-only access to the live backend
714
+ instance
715
+ - `calculation.show_calculator_types()` — filtered by data category
716
+ support and marks the current type
695
717
 
696
718
  ### 6.2 Minimiser
697
719
 
@@ -713,22 +735,19 @@ workflow:
713
735
 
714
736
  `Analysis` is bound to a `Project` and provides the high-level API:
715
737
 
716
- - Minimiser selection: `current_minimizer`,
717
- `show_available_minimizers()`
718
- - Fit mode: `fit_mode` (`CategoryItem` with a `mode` descriptor
719
- validated by `FitModeEnum`); `'single'` fits each experiment
720
- independently, `'joint'` fits all simultaneously with weights from
721
- `joint_fit_experiments`, `'sequential'` records that sequential
722
- fitting was used. `show_supported_fit_mode_types()` filters by
723
- experiment count (≤1 → only `single`; >1 → all three).
724
- `show_current_fit_mode_type()` prints the current mode.
738
+ - Fit configuration: `fit` (`CategoryItem` with `minimizer_type` and
739
+ `mode` descriptors). `fit.minimizer_type` selects the minimizer
740
+ backend. `fit.mode` stores whether fitting is `'single'`, `'joint'`,
741
+ or `'sequential'`. `fit.show_minimizer_types()` lists supported
742
+ minimizers; `fit.show_modes()` filters modes by experiment count (≤1 →
743
+ only `single`; >1 all three).
725
744
  - Joint-fit weights: `joint_fit_experiments` (`CategoryCollection` of
726
- per-experiment weight entries); sibling of `fit_mode`, not a child.
745
+ per-experiment weight entries); sibling of `fit`, not a child.
727
746
  - Parameter tables: `show_all_params()`, `show_fittable_params()`,
728
747
  `show_free_params()`, `how_to_access_parameters()`
729
- - Fitting: `fit()` dispatches single/joint; `fit_sequential()` handles
730
- sequential mode (sets `fit_mode` to `'sequential'` internally).
731
- `display.fit_results()` shows results.
748
+ - Fitting: `fit()` dispatches single/joint through the callable `fit`
749
+ category; `fit_sequential()` handles sequential mode (sets `fit.mode`
750
+ to `'sequential'` internally). `display.fit_results()` shows results.
732
751
  - Aliases and constraints (single-type categories; no public `_type`
733
752
  getter or setter)
734
753
 
@@ -751,9 +770,9 @@ It owns and coordinates all components:
751
770
  | `project.info` | `ProjectInfo` | Metadata: name, title, description, path |
752
771
  | `project.structures` | `Structures` | Collection of structure datablocks |
753
772
  | `project.experiments` | `Experiments` | Collection of experiment datablocks |
754
- | `project.analysis` | `Analysis` | Calculator, minimiser, fitting |
773
+ | `project.display` | `Display` | Plot/table engine selection and facades |
774
+ | `project.analysis` | `Analysis` | Minimiser, fitting, aliases, constraints |
755
775
  | `project.summary` | `Summary` | Report generation |
756
- | `project.plotter` | `Plotter` | Visualisation |
757
776
  | `project.verbosity` | `str` | Console output level (full/short/silent) |
758
777
 
759
778
  ### 7.1 Data Flow
@@ -778,7 +797,7 @@ Projects are saved as a directory of CIF files:
778
797
 
779
798
  ```shell
780
799
  project_dir/
781
- ├── project.cif # ProjectInfo
800
+ ├── project.cif # ProjectInfo + Display preferences
782
801
  ├── summary.cif # Summary report
783
802
  ├── structures/
784
803
  │ └── lbco.cif # One file per structure
@@ -788,6 +807,13 @@ project_dir/
788
807
  └── analysis.cif # Analysis settings
789
808
  ```
790
809
 
810
+ `project.cif` carries both the `_project.*` metadata and the
811
+ `_display.*` engine preferences (`plotter_type`, `tabler_type`), so a
812
+ saved project re-opens with the same display backends. Per-experiment
813
+ calculator selection (`_calculation.calculator_type`) lives in each
814
+ experiment file, and fit configuration (`_fit.minimizer_type`,
815
+ `_fit.mode`) lives in `analysis/analysis.cif`.
816
+
791
817
  ### 7.3 Verbosity
792
818
 
793
819
  `Project.verbosity` controls how much console output operations produce.
@@ -894,7 +920,7 @@ project.experiments['hrpt'].instrument.setup_wavelength = 1.494
894
920
  project.experiments['hrpt'].instrument.calib_twotheta_offset = 0.6
895
921
 
896
922
  # Browse and select peak profile type
897
- project.experiments['hrpt'].show_supported_peak_profile_types()
923
+ project.experiments['hrpt'].show_peak_profile_types()
898
924
  project.experiments['hrpt'].peak_profile_type = 'pseudo-voigt'
899
925
 
900
926
  # Set peak profile parameters
@@ -902,7 +928,7 @@ project.experiments['hrpt'].peak.broad_gauss_u = 0.1
902
928
  project.experiments['hrpt'].peak.broad_gauss_v = -0.1
903
929
 
904
930
  # Browse and select background type
905
- project.experiments['hrpt'].show_supported_background_types()
931
+ project.experiments['hrpt'].show_background_types()
906
932
  project.experiments['hrpt'].background_type = 'line-segment'
907
933
 
908
934
  # Add background points
@@ -917,12 +943,12 @@ project.experiments['hrpt'].linked_phases.create(id='lbco', scale=10.0)
917
943
 
918
944
  ```python
919
945
  # Calculator is auto-resolved per experiment; override if needed
920
- project.experiments['hrpt'].show_supported_calculator_types()
921
- project.experiments['hrpt'].calculator_type = 'cryspy'
922
- project.analysis.current_minimizer = 'lmfit'
946
+ project.experiments['hrpt'].calculation.show_calculator_types()
947
+ project.experiments['hrpt'].calculation.calculator_type = 'cryspy'
948
+ project.analysis.fit.minimizer_type = 'lmfit'
923
949
 
924
950
  # Plot before fitting
925
- project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
951
+ project.display.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
926
952
 
927
953
  # Select free parameters
928
954
  project.structures['lbco'].cell.length_a.free = True
@@ -938,7 +964,7 @@ project.analysis.fit()
938
964
  project.analysis.display.fit_results()
939
965
 
940
966
  # Plot after fitting
941
- project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
967
+ project.display.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
942
968
 
943
969
  # Save
944
970
  project.save()
@@ -1030,13 +1056,12 @@ exposes the full switchable API:
1030
1056
  | --------------- | -------------------------------------------- | ------------------------------------------------ |
1031
1057
  | Current object | `<category>` property (read-only) | `expt.background`, `expt.peak` |
1032
1058
  | Active type tag | `<category>_type` property (getter + setter) | `expt.background_type`, `expt.peak_profile_type` |
1033
- | Show supported | `show_supported_<category>_types()` | `expt.show_supported_background_types()` |
1034
- | Show current | `show_current_<category>_type()` | `expt.show_current_peak_profile_type()` |
1059
+ | Show types | `show_<category>_types()` | `expt.show_background_types()` |
1035
1060
 
1036
1061
  Multi-type categories:
1037
1062
 
1038
- - **Experiment:** `calculator_type`, `background_type`,
1039
- `peak_profile_type`, `extinction_type`.
1063
+ - **Experiment:** `background_type`, `peak_profile_type`,
1064
+ `extinction_type`.
1040
1065
 
1041
1066
  Categories that are **fixed at creation** (determined by the experiment
1042
1067
  type and never changed) expose only a read-only `<category>` property
@@ -1056,10 +1081,15 @@ Single-type categories (no public `_type` property):
1056
1081
  - **Structure:** `cell`, `space_group`, `atom_sites`, `atom_site_aniso`.
1057
1082
  - **Analysis:** `aliases`, `constraints`.
1058
1083
 
1059
- `fit_mode` has show methods (`show_supported_fit_mode_types()`,
1060
- `show_current_fit_mode_type()`) but no public `_type` getter or setter
1061
- because it has only one factory implementation. The mode is changed via
1062
- the `fit_mode.mode` descriptor directly.
1084
+ `fit` is a dedicated analysis category. Its public selector surface is
1085
+ `fit.minimizer_type` and `fit.mode`; there is no separate owner-level
1086
+ proxy API. Likewise, `calculation` is a dedicated experiment category
1087
+ that owns calculator selection —
1088
+ `experiment.calculation.calculator_type` and
1089
+ `experiment.calculation.show_calculator_types()` — instead of the
1090
+ selector being exposed at the experiment owner level. The same pattern
1091
+ applies to `display` on `Project`, which owns `plotter_type` and
1092
+ `tabler_type` (see §9.4.1).
1063
1093
 
1064
1094
  **Design decisions:**
1065
1095
 
@@ -1074,17 +1104,39 @@ the `fit_mode.mode` descriptor directly.
1074
1104
  displaying the current content (not on the base
1075
1105
  `CategoryItem`/`CategoryCollection`).
1076
1106
 
1107
+ #### 9.4.1 Selector Families
1108
+
1109
+ Not every `_type` attribute represents the same kind of choice. The API
1110
+ recognises three distinct selector families. They share a similar
1111
+ `<name>_type` shape so the user can inspect and set them uniformly, but
1112
+ their intent and ownership differ:
1113
+
1114
+ | Family | User intent | Examples | CIF |
1115
+ | ---------------------------------- | ------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
1116
+ | Backend selector | Pick an execution backend | `fit.minimizer_type`, `calculation.calculator_type`, `display.plotter_type` | `_fit.minimizer_type`, `_calculation.calculator_type`, `_display.plotter_type` |
1117
+ | Switchable-category impl. selector | Swap a category implementation | `experiment.background_type`, `experiment.peak_profile_type` | category-owned type tag such as `_peak.profile_type` |
1118
+ | Semantic value selector | Pick a scientific/analysis mode | `fit.mode` | `_fit.mode` |
1119
+
1120
+ Backend selectors and semantic value selectors live on a dedicated
1121
+ configuration category (`fit`, `calculation`, `display`). Switchable-
1122
+ category implementation selectors are owned by the host (typically the
1123
+ experiment) because switching them replaces the category instance, as
1124
+ described in §9.3.
1125
+
1077
1126
  ### 9.5 Discoverable Supported Options
1078
1127
 
1079
1128
  The user can always discover what is supported for the current
1080
1129
  experiment:
1081
1130
 
1082
1131
  ```python
1083
- expt.show_supported_peak_profile_types()
1084
- expt.show_supported_background_types()
1085
- expt.show_supported_calculator_types()
1086
- expt.show_supported_extinction_types()
1087
- project.analysis.show_available_minimizers()
1132
+ expt.show_peak_profile_types()
1133
+ expt.show_background_types()
1134
+ expt.calculation.show_calculator_types()
1135
+ expt.show_extinction_types()
1136
+ project.analysis.fit.show_minimizer_types()
1137
+ project.analysis.fit.show_modes()
1138
+ project.display.show_plotter_types()
1139
+ project.display.show_tabler_types()
1088
1140
  ```
1089
1141
 
1090
1142
  Available calculators are filtered by `engine_imported` (whether the
@@ -1122,10 +1174,10 @@ but internal dispatch always uses the enum:
1122
1174
 
1123
1175
  ```python
1124
1176
  # ✅ Correct — compare with enum
1125
- if self._fit_mode.mode.value == FitModeEnum.JOINT:
1177
+ if self._fit.mode.value == FitModeEnum.JOINT:
1126
1178
 
1127
1179
  # ❌ Wrong — compare with raw string
1128
- if self._fit_mode.mode.value == 'joint':
1180
+ if self._fit.mode.value == 'joint':
1129
1181
  ```
1130
1182
 
1131
1183
  ### 9.7 Flat Category Structure — No Nested Categories
@@ -1150,25 +1202,26 @@ Owner
1150
1202
  └── CategoryB ← WRONG: CategoryB is a child of CategoryA
1151
1203
  ```
1152
1204
 
1153
- **Example — `fit_mode` and `joint_fit_experiments`:** `fit_mode` is a
1154
- `CategoryItem` holding the active strategy (`'single'` or `'joint'`).
1205
+ **Example — `fit` and `joint_fit_experiments`:** `fit` is a
1206
+ `CategoryItem` holding the active minimizer and fitting mode.
1155
1207
  `joint_fit_experiments` is a separate `CategoryCollection` holding
1156
1208
  per-experiment weights. Both are direct children of `Analysis`, not
1157
1209
  nested:
1158
1210
 
1159
1211
  ```python
1160
1212
  # ✅ Correct — sibling categories on Analysis
1161
- project.analysis.fit_mode.mode = 'joint'
1213
+ project.analysis.fit.mode = 'joint'
1162
1214
  project.analysis.joint_fit_experiments['npd'].weight = 0.7
1163
1215
 
1164
- # ❌ Wrong — joint_fit_experiments as a child of fit_mode
1165
- project.analysis.fit_mode.joint_fit_experiments['npd'].weight = 0.7
1216
+ # ❌ Wrong — joint_fit_experiments as a child of fit
1217
+ project.analysis.fit.joint_fit_experiments['npd'].weight = 0.7
1166
1218
  ```
1167
1219
 
1168
1220
  In CIF output, sibling categories appear as independent blocks:
1169
1221
 
1170
1222
  ```
1171
- _analysis.fit_mode joint
1223
+ _fit.minimizer_type lmfit
1224
+ _fit.mode joint
1172
1225
 
1173
1226
  loop_
1174
1227
  _joint_fit_experiment.id
@@ -1326,16 +1379,16 @@ in `KNOWN_ALIASES` inside the tool script.
1326
1379
 
1327
1380
  ### 10.3 What to Test per Source Module Type
1328
1381
 
1329
- | Source module type | Required tests |
1330
- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
1331
- | **Core base class** (`core/`) | Instantiation, public properties, validation edge cases, identity wiring. |
1332
- | **Factory** (`factory.py`) | Registration check, `supported_tags()`, `default_tag()`, `create()` for each tag, `show_supported()` output, invalid-tag handling. |
1333
- | **Category** (`default.py`) | Instantiation, all public properties (read + write where applicable), CIF round-trip (`as_cif` → `from_cif`), parameter enumeration. |
1334
- | **Enum** (`enums.py`) | Membership of all members, `default()` method, `description()` for every member, `StrEnum` string equality. |
1335
- | **Datablock item** (`base.py`) | Construction, switchable-category full API (`<cat>`, `<cat>_type` get/set, `show_supported_<cat>_types`, `show_current_<cat>_type`), `show`/`show_as_cif`. |
1336
- | **Collection** (`collection.py`) | `create`, `add`, `remove`, `names`, `show_names`, `show_params`, iteration, duplicate-name handling. |
1337
- | **Calculator / Minimizer** | `can_handle()` with compatible and incompatible experiment types, `_compute()` stub or mock. |
1338
- | **Display / IO** | Input → output for representative cases; file-not-found and malformed-input error paths. |
1382
+ | Source module type | Required tests |
1383
+ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
1384
+ | **Core base class** (`core/`) | Instantiation, public properties, validation edge cases, identity wiring. |
1385
+ | **Factory** (`factory.py`) | Registration check, `supported_tags()`, `default_tag()`, `create()` for each tag, `show_supported()` output, invalid-tag handling. |
1386
+ | **Category** (`default.py`) | Instantiation, all public properties (read + write where applicable), CIF round-trip (`as_cif` → `from_cif`), parameter enumeration. |
1387
+ | **Enum** (`enums.py`) | Membership of all members, `default()` method, `description()` for every member, `StrEnum` string equality. |
1388
+ | **Datablock item** (`base.py`) | Construction, switchable-category full API (`<cat>`, `<cat>_type` get/set, `show_<cat>_types`), `show`/`show_as_cif`. |
1389
+ | **Collection** (`collection.py`) | `create`, `add`, `remove`, `names`, `show_names`, `show_params`, iteration, duplicate-name handling. |
1390
+ | **Calculator / Minimizer** | `can_handle()` with compatible and incompatible experiment types, `_compute()` stub or mock. |
1391
+ | **Display / IO** | Input → output for representative cases; file-not-found and malformed-input error paths. |
1339
1392
 
1340
1393
  ### 10.4 Test Conventions
1341
1394
 
@@ -117,9 +117,19 @@ to an incompatible data class and silently discarding loaded data.
117
117
 
118
118
  Added `SEQUENTIAL = 'sequential'` to `FitModeEnum`. `fit_sequential()`
119
119
  now sets `fit_mode.mode = 'sequential'` internally so the mode is
120
- persisted in CIF. Added `show_supported_fit_mode_types()` (filters by
121
- experiment count: ≤1 → only `single`; >1 → all three) and
122
- `show_current_fit_mode_type()` on `Analysis`. If `fit()` is called while
123
- mode is `'sequential'`, it logs an error directing the user to
124
- `fit_sequential()`. Promoted `fit_mode` from a pure single-type category
125
- to one with show methods.
120
+ persisted in CIF. Added `show_fit_mode_types()` (filters by experiment
121
+ count: ≤1 → only `single`; >1 → all three) and `show_fit_mode_types()`
122
+ on `Analysis`. If `fit()` is called while mode is `'sequential'`, it
123
+ logs an error directing the user to `fit_sequential()`. Promoted
124
+ `fit_mode` from a pure single-type category to one with show methods.
125
+
126
+ ---
127
+
128
+ ## Persist Per-Experiment Calculator Selection
129
+
130
+ Calculator selection now lives in the experiment-side `calculation`
131
+ category and is persisted in experiment CIF via
132
+ `_calculation.calculator_type`. Loading restores the explicit backend
133
+ selection before dependent experiment categories are populated, so saved
134
+ projects keep the exact active calculator configuration instead of
135
+ falling back to auto-resolution.
@@ -14,7 +14,7 @@ needed.
14
14
 
15
15
  **Type:** Fragility
16
16
 
17
- `joint_fit_experiments` is created once when `fit_mode` becomes
17
+ `joint_fit_experiments` is created once when `fit.mode` becomes
18
18
  `'joint'`. If experiments are added, removed, or renamed afterwards, the
19
19
  weight collection is stale. Joint fitting can fail with missing keys or
20
20
  run with incorrect weights.
@@ -180,25 +180,6 @@ minimiser.
180
180
 
181
181
  ---
182
182
 
183
- ## 16. 🟡 Persist Per-Experiment `calculator_type`
184
-
185
- **Type:** Completeness
186
-
187
- The current architecture moved calculator selection to the experiment
188
- level via `calculator_type`, but this selection is not written to CIF
189
- during `save()` / `show_as_cif()`. Reloading or exporting a project
190
- therefore loses explicit calculator choices and falls back to
191
- auto-resolution.
192
-
193
- **Fix:** serialise `calculator_type` as part of the experiment or
194
- analysis state, and make sure `load()` restores it. The saved project
195
- should represent the exact active calculator configuration, not just a
196
- re-derivable default.
197
-
198
- **Depends on:** nothing.
199
-
200
- ---
201
-
202
183
  ## 17. 🟢 Use PDF-Specific CIF Names for Total Scattering
203
184
 
204
185
  **Type:** Naming
@@ -1191,9 +1172,9 @@ check. Options:
1191
1172
 
1192
1173
  **Type:** API completeness
1193
1174
 
1194
- `show_supported_calculator_types()` exists per-experiment, but there is
1195
- no project/analysis-level method to list all available calculator
1196
- engines. Users exploring the API have no single entry point to see what
1175
+ `show_calculator_types()` exists per-experiment, but there is no
1176
+ project/analysis-level method to list all available calculator engines.
1177
+ Users exploring the API have no single entry point to see what
1197
1178
  calculators are installed.
1198
1179
 
1199
1180
  **Depends on:** nothing.
@@ -1206,8 +1187,8 @@ calculators are installed.
1206
1187
 
1207
1188
  The switchable-category naming convention prescribes `<category>_type`
1208
1189
  (getter/setter) and `show_supported_<category>_types()`. But some names
1209
- deviate: e.g. `show_supported_minimizers()` instead of
1210
- `show_supported_minimizer_types()`, and `current_minimizer` instead of
1190
+ deviate: e.g. `show_minimizer_types()` instead of
1191
+ `show_supported_minimizer_types()`, and `minimizer_type` instead of
1211
1192
  `minimizer_type`. Audit and align all switchable-category APIs.
1212
1193
 
1213
1194
  **Depends on:** nothing.
@@ -1446,7 +1427,6 @@ operation is possible (e.g. in automated pipelines or tests).
1446
1427
  | 13 | Suppress redundant dirty-flag sets | 🟢 Low | Performance |
1447
1428
  | 14 | Finer-grained change tracking | 🟢 Low | Performance |
1448
1429
  | 15 | Validate joint-fit weights | 🟡 Med | Correctness |
1449
- | 16 | Persist per-experiment `calculator_type` | 🟡 Med | Completeness |
1450
1430
  | 17 | Use PDF-specific CIF names | 🟢 Low | Naming |
1451
1431
  | 18 | Move CIF v2→v1 conversion out of calculator | 🟢 Low | Maintainability |
1452
1432
  | 19 | Debug-mode logging for calculator imports | 🟢 Low | Diagnostics |
@@ -30,14 +30,14 @@
30
30
  │ │ │ │ └── 🏷️ class Constraints
31
31
  │ │ │ └── 📄 factory.py
32
32
  │ │ │ └── 🏷️ class ConstraintsFactory
33
- │ │ ├── 📁 fit_mode
33
+ │ │ ├── 📁 fit
34
34
  │ │ │ ├── 📄 __init__.py
35
+ │ │ │ ├── 📄 default.py
36
+ │ │ │ │ └── 🏷️ class Fit
35
37
  │ │ │ ├── 📄 enums.py
36
38
  │ │ │ │ └── 🏷️ class FitModeEnum
37
- │ │ │ ├── 📄 factory.py
38
- │ │ │└── 🏷️ class FitModeFactory
39
- │ │ │ └── 📄 fit_mode.py
40
- │ │ │ └── 🏷️ class FitMode
39
+ │ │ │ └── 📄 factory.py
40
+ │ │ │ └── 🏷️ class FitFactory
41
41
  │ │ ├── 📁 joint_fit_experiments
42
42
  │ │ │ ├── 📄 __init__.py
43
43
  │ │ │ ├── 📄 default.py
@@ -152,6 +152,12 @@
152
152
  │ │ │ │ └── 📄 line_segment.py
153
153
  │ │ │ │ ├── 🏷️ class LineSegment
154
154
  │ │ │ │ └── 🏷️ class LineSegmentBackground
155
+ │ │ │ ├── 📁 calculation
156
+ │ │ │ │ ├── 📄 __init__.py
157
+ │ │ │ │ ├── 📄 default.py
158
+ │ │ │ │ │ └── 🏷️ class Calculation
159
+ │ │ │ │ └── 📄 factory.py
160
+ │ │ │ │ └── 🏷️ class CalculationFactory
155
161
  │ │ │ ├── 📁 data
156
162
  │ │ │ │ ├── 📄 __init__.py
157
163
  │ │ │ │ ├── 📄 bragg_pd.py
@@ -238,6 +244,7 @@
238
244
  │ │ │ │ ├── 📄 factory.py
239
245
  │ │ │ │ │ └── 🏷️ class PeakFactory
240
246
  │ │ │ │ ├── 📄 tof.py
247
+ │ │ │ │ │ ├── 🏷️ class TofPseudoVoigt
241
248
  │ │ │ │ │ ├── 🏷️ class TofJorgensen
242
249
  │ │ │ │ │ ├── 🏷️ class TofJorgensenVonDreele
243
250
  │ │ │ │ │ └── 🏷️ class TofDoubleJorgensenVonDreele
@@ -360,6 +367,14 @@
360
367
  │ ├── 📄 __init__.py
361
368
  │ └── 📄 ascii.py
362
369
  ├── 📁 project
370
+ │ ├── 📁 categories
371
+ │ │ ├── 📁 display
372
+ │ │ │ ├── 📄 __init__.py
373
+ │ │ │ ├── 📄 default.py
374
+ │ │ │ │ └── 🏷️ class Display
375
+ │ │ │ └── 📄 factory.py
376
+ │ │ │ └── 🏷️ class DisplayFactory
377
+ │ │ └── 📄 __init__.py
363
378
  │ ├── 📄 __init__.py
364
379
  │ ├── 📄 project.py
365
380
  │ │ └── 🏷️ class Project