easydiffraction 0.13.0__tar.gz → 0.14.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 (504) hide show
  1. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/PKG-INFO +2 -1
  2. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/ROADMAP.md +81 -57
  3. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/architecture.md +118 -76
  4. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/issues_closed.md +16 -6
  5. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/issues_open.md +6 -26
  6. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/package-structure-full.md +20 -5
  7. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/package-structure-short.md +13 -3
  8. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-1.ipynb +3 -3
  9. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-1.py +3 -3
  10. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-10.ipynb +2 -2
  11. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-10.py +2 -2
  12. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-11.ipynb +5 -6
  13. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-11.py +5 -6
  14. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-12.ipynb +15 -25
  15. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-12.py +6 -9
  16. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-13.ipynb +104 -85
  17. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-13.py +71 -54
  18. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-14.ipynb +4 -4
  19. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-14.py +4 -4
  20. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-15.ipynb +29 -19
  21. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-15.py +8 -5
  22. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-16.ipynb +21 -39
  23. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-16.py +6 -12
  24. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-17.ipynb +48 -18
  25. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-17.py +48 -18
  26. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-18.ipynb +4 -20
  27. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-18.py +2 -8
  28. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-2.ipynb +17 -6
  29. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-2.py +8 -4
  30. easydiffraction-0.14.0/docs/docs/tutorials/ed-20.ipynb +816 -0
  31. easydiffraction-0.14.0/docs/docs/tutorials/ed-20.py +381 -0
  32. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-3.ipynb +138 -228
  33. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-3.py +25 -55
  34. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-4.ipynb +11 -19
  35. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-4.py +8 -9
  36. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-5.ipynb +142 -41
  37. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-5.py +48 -11
  38. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-6.ipynb +75 -105
  39. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-6.py +24 -30
  40. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-7.ipynb +64 -72
  41. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-7.py +23 -19
  42. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-8.ipynb +28 -63
  43. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-8.py +9 -20
  44. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-9.ipynb +12 -33
  45. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/ed-9.py +4 -13
  46. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/index.json +7 -0
  47. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/tutorials/index.md +8 -3
  48. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/analysis-workflow/analysis.md +10 -11
  49. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/analysis-workflow/project.md +13 -18
  50. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/first-steps.md +7 -8
  51. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/mkdocs.yml +3 -1
  52. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/pixi.lock +886 -802
  53. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/pyproject.toml +1 -0
  54. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/__main__.py +4 -1
  55. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/analysis.py +13 -66
  56. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/calculators/crysfml.py +125 -39
  57. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/calculators/cryspy.py +77 -50
  58. easydiffraction-0.14.0/src/easydiffraction/analysis/categories/fit/__init__.py +6 -0
  59. easydiffraction-0.14.0/src/easydiffraction/analysis/categories/fit/default.py +200 -0
  60. {easydiffraction-0.13.0/src/easydiffraction/analysis/categories/fit_mode → easydiffraction-0.14.0/src/easydiffraction/analysis/categories/fit}/enums.py +2 -2
  61. {easydiffraction-0.13.0/src/easydiffraction/analysis/categories/fit_mode → easydiffraction-0.14.0/src/easydiffraction/analysis/categories/fit}/factory.py +3 -3
  62. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/fit_helpers/reporting.py +8 -3
  63. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/base.py +2 -2
  64. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/enums.py +1 -1
  65. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/sequential.py +3 -5
  66. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/background/chebyshev.py +1 -4
  67. easydiffraction-0.14.0/src/easydiffraction/datablocks/experiment/categories/calculation/__init__.py +8 -0
  68. easydiffraction-0.14.0/src/easydiffraction/datablocks/experiment/categories/calculation/default.py +106 -0
  69. easydiffraction-0.14.0/src/easydiffraction/datablocks/experiment/categories/calculation/factory.py +17 -0
  70. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_pd.py +1 -1
  71. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_sc.py +1 -1
  72. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/data/total_pd.py +1 -1
  73. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/extinction/becker_coppens.py +5 -0
  74. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/instrument/tof.py +1 -1
  75. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/__init__.py +1 -0
  76. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl.py +7 -6
  77. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl_mixins.py +2 -2
  78. easydiffraction-0.14.0/src/easydiffraction/datablocks/experiment/categories/peak/factory.py +148 -0
  79. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof.py +38 -12
  80. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/total.py +7 -3
  81. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/item/base.py +147 -97
  82. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/item/bragg_pd.py +25 -10
  83. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/item/enums.py +35 -27
  84. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/item/factory.py +2 -0
  85. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/atom_site_aniso/default.py +3 -45
  86. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/default.py +4 -1
  87. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/item/base.py +17 -10
  88. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/io/cif/serialize.py +69 -36
  89. easydiffraction-0.14.0/src/easydiffraction/project/categories/display/__init__.py +8 -0
  90. easydiffraction-0.14.0/src/easydiffraction/project/categories/display/default.py +117 -0
  91. easydiffraction-0.14.0/src/easydiffraction/project/categories/display/factory.py +17 -0
  92. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/project/project.py +17 -20
  93. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/summary/summary.py +62 -32
  94. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/utils.py +34 -11
  95. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/functional/test_adp_switching.py +5 -7
  96. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/functional/test_switchable_categories.py +5 -5
  97. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/conftest.py +1 -1
  98. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_analysis_display.py +5 -6
  99. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_aniso_adp_fitting.py +2 -3
  100. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_exploration_help.py +4 -7
  101. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_multi.py +3 -3
  102. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_plotting.py +5 -5
  103. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_powder-diffraction_constant-wavelength.py +3 -3
  104. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_powder-diffraction_joint-fit.py +4 -4
  105. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_powder-diffraction_time-of-flight.py +2 -2
  106. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_project_load.py +2 -2
  107. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_switch-calculator.py +3 -3
  108. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/scipp-analysis/dream/test_analyze_reduced_data.py +5 -15
  109. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/scipp-analysis/dream/test_package_import.py +6 -0
  110. easydiffraction-0.14.0/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +116 -0
  111. easydiffraction-0.14.0/tests/unit/easydiffraction/analysis/categories/test_fit.py +92 -0
  112. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps.py +2 -2
  113. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_enums.py +1 -1
  114. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/test_analysis.py +10 -10
  115. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/test_analysis_coverage.py +3 -3
  116. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_parameters.py +2 -2
  117. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_base.py +2 -2
  118. easydiffraction-0.14.0/tests/unit/easydiffraction/datablocks/experiment/categories/calculation/test_default.py +90 -0
  119. easydiffraction-0.14.0/tests/unit/easydiffraction/datablocks/experiment/categories/calculation/test_factory.py +27 -0
  120. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_tof.py +1 -1
  121. easydiffraction-0.14.0/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py +89 -0
  122. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof.py +13 -0
  123. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_base_coverage.py +15 -15
  124. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc_coverage.py +4 -4
  125. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_enums_coverage.py +24 -12
  126. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_total_pd.py +3 -2
  127. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/test_collection.py +1 -0
  128. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_atom_site_aniso.py +48 -87
  129. easydiffraction-0.14.0/tests/unit/easydiffraction/display/tablers/__init__.py +2 -0
  130. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/tablers/test_pandas.py +2 -0
  131. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/io/cif/test_serialize.py +39 -1
  132. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/io/cif/test_serialize_more.py +5 -7
  133. easydiffraction-0.14.0/tests/unit/easydiffraction/project/categories/display/test_default.py +55 -0
  134. easydiffraction-0.14.0/tests/unit/easydiffraction/project/categories/display/test_factory.py +23 -0
  135. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/project/test_project_load.py +16 -5
  136. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/summary/test_summary.py +4 -1
  137. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/summary/test_summary_details.py +26 -12
  138. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/test___init__.py +2 -2
  139. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/test___main__.py +33 -11
  140. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_utils_coverage.py +19 -12
  141. easydiffraction-0.13.0/docs/docs/tutorials/data/MAT005500.BS.bin02Double_0_int_c.histogramIgor +0 -12638
  142. easydiffraction-0.13.0/docs/docs/tutorials/data/MAT005500.SE.bin02Double_0_int_c.histogramIgor +0 -9813
  143. easydiffraction-0.13.0/docs/docs/tutorials/data/ed-7.xye +0 -5600
  144. easydiffraction-0.13.0/docs/docs/tutorials/data/lbco_project/summary.cif +0 -1
  145. easydiffraction-0.13.0/src/easydiffraction/analysis/categories/fit_mode/__init__.py +0 -6
  146. easydiffraction-0.13.0/src/easydiffraction/analysis/categories/fit_mode/fit_mode.py +0 -65
  147. easydiffraction-0.13.0/src/easydiffraction/datablocks/experiment/categories/peak/factory.py +0 -30
  148. easydiffraction-0.13.0/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +0 -28
  149. easydiffraction-0.13.0/tests/unit/easydiffraction/analysis/categories/test_fit_mode.py +0 -85
  150. easydiffraction-0.13.0/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py +0 -57
  151. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.badgery.yaml +0 -0
  152. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.codefactorignore +0 -0
  153. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.copier-answers.yml +0 -0
  154. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/actions/download-artifact/action.yml +0 -0
  155. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/actions/github-script/action.yml +0 -0
  156. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/actions/setup-easyscience-bot/action.yml +0 -0
  157. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/actions/setup-pixi/action.yml +0 -0
  158. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/actions/upload-artifact/action.yml +0 -0
  159. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/actions/upload-codecov/action.yml +0 -0
  160. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/configs/pages-deployment.json +0 -0
  161. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/configs/rulesets-develop.json +0 -0
  162. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/configs/rulesets-gh-pages.json +0 -0
  163. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/configs/rulesets-master.json +0 -0
  164. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/copilot-instructions.md +0 -0
  165. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/scripts/backmerge-conflict-issue.js +0 -0
  166. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/backmerge.yml +0 -0
  167. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/cleanup.yml +0 -0
  168. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/coverage.yml +0 -0
  169. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/dashboard.yml +0 -0
  170. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/docs.yml +0 -0
  171. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/issues-labels.yml +0 -0
  172. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/lint-format.yml +0 -0
  173. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/pr-labels.yml +0 -0
  174. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/pypi-publish.yml +0 -0
  175. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/pypi-test.yml +0 -0
  176. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/release-notes.yml +0 -0
  177. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/release-pr.yml +0 -0
  178. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/security.yml +0 -0
  179. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/test-trigger.yml +0 -0
  180. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/test.yml +0 -0
  181. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/tutorial-tests-colab.yaml +0 -0
  182. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/tutorial-tests-trigger.yml +0 -0
  183. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.github/workflows/tutorial-tests.yml +0 -0
  184. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.gitignore +0 -0
  185. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.pre-commit-config.yaml +0 -0
  186. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/.prettierignore +0 -0
  187. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/CONTRIBUTING.md +0 -0
  188. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/LICENSE +0 -0
  189. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/README.md +0 -0
  190. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/codecov.yml +0 -0
  191. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/adp_implementation.md +0 -0
  192. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/architecture/cryspy-dwf-bug.md +0 -0
  193. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/analysis.md +0 -0
  194. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/core.md +0 -0
  195. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/crystallography.md +0 -0
  196. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/datablocks/experiment.md +0 -0
  197. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/datablocks/structure.md +0 -0
  198. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/display.md +0 -0
  199. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/index.md +0 -0
  200. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/io.md +0 -0
  201. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/project.md +0 -0
  202. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/summary.md +0 -0
  203. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/api-reference/utils.md +0 -0
  204. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/favicon.png +0 -0
  205. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/logo_dark.svg +0 -0
  206. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/logo_light.svg +0 -0
  207. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
  208. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
  209. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/user-guide/data-analysis_model.png +0 -0
  210. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
  211. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
  212. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/javascripts/extra.js +0 -0
  213. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/javascripts/mathjax.js +0 -0
  214. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/assets/stylesheets/extra.css +0 -0
  215. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/cli/index.md +0 -0
  216. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/index.md +0 -0
  217. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/installation-and-setup/index.md +0 -0
  218. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/introduction/index.md +0 -0
  219. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/analysis-workflow/experiment.md +0 -0
  220. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/analysis-workflow/index.md +0 -0
  221. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/analysis-workflow/model.md +0 -0
  222. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/analysis-workflow/summary.md +0 -0
  223. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/concept.md +0 -0
  224. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/data-format.md +0 -0
  225. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/glossary.md +0 -0
  226. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/index.md +0 -0
  227. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
  228. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
  229. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/_exptl_crystal.md +0 -0
  230. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/_extinction.md +0 -0
  231. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/_pd_calib.md +0 -0
  232. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/atom_site.md +0 -0
  233. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/background.md +0 -0
  234. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/cell.md +0 -0
  235. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/expt_type.md +0 -0
  236. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/instrument.md +0 -0
  237. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/linked_phases.md +0 -0
  238. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/pd_meas.md +0 -0
  239. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/peak.md +0 -0
  240. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters/space_group.md +0 -0
  241. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/docs/user-guide/parameters.md +0 -0
  242. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/includes/abbreviations.md +0 -0
  243. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/overrides/.icons/app.svg +0 -0
  244. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/overrides/.icons/easydiffraction.svg +0 -0
  245. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/overrides/.icons/easyscience.svg +0 -0
  246. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/overrides/.icons/google-colab.svg +0 -0
  247. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/overrides/main.html +0 -0
  248. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/docs/overrides/partials/logo.html +0 -0
  249. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/pixi.toml +0 -0
  250. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/prettierrc.toml +0 -0
  251. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/__init__.py +0 -0
  252. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/__init__.py +0 -0
  253. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/calculators/__init__.py +0 -0
  254. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/calculators/base.py +0 -0
  255. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/calculators/factory.py +0 -0
  256. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/calculators/pdffit.py +0 -0
  257. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/__init__.py +0 -0
  258. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/aliases/__init__.py +0 -0
  259. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/aliases/default.py +0 -0
  260. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/aliases/factory.py +0 -0
  261. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/constraints/__init__.py +0 -0
  262. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/constraints/default.py +0 -0
  263. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/constraints/factory.py +0 -0
  264. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/__init__.py +0 -0
  265. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/default.py +0 -0
  266. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/factory.py +0 -0
  267. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/fit_helpers/__init__.py +0 -0
  268. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/fit_helpers/metrics.py +0 -0
  269. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/fit_helpers/tracking.py +0 -0
  270. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/fitting.py +0 -0
  271. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/__init__.py +0 -0
  272. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/bumps.py +0 -0
  273. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/bumps_amoeba.py +0 -0
  274. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/bumps_de.py +0 -0
  275. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/bumps_lm.py +0 -0
  276. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/dfols.py +0 -0
  277. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/factory.py +0 -0
  278. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/lmfit.py +0 -0
  279. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/lmfit_least_squares.py +0 -0
  280. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/analysis/minimizers/lmfit_leastsq.py +0 -0
  281. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/__init__.py +0 -0
  282. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/category.py +0 -0
  283. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/collection.py +0 -0
  284. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/datablock.py +0 -0
  285. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/diagnostic.py +0 -0
  286. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/factory.py +0 -0
  287. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/guard.py +0 -0
  288. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/identity.py +0 -0
  289. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/metadata.py +0 -0
  290. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/singleton.py +0 -0
  291. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/validation.py +0 -0
  292. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/core/variable.py +0 -0
  293. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/crystallography/__init__.py +0 -0
  294. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/crystallography/crystallography.py +0 -0
  295. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
  296. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/crystallography/space_groups.py +0 -0
  297. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/__init__.py +0 -0
  298. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/__init__.py +0 -0
  299. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/__init__.py +0 -0
  300. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/background/__init__.py +0 -0
  301. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/background/base.py +0 -0
  302. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/background/enums.py +0 -0
  303. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/background/factory.py +0 -0
  304. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/background/line_segment.py +0 -0
  305. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/data/__init__.py +0 -0
  306. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/data/factory.py +0 -0
  307. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/__init__.py +0 -0
  308. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/default.py +0 -0
  309. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/factory.py +0 -0
  310. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/__init__.py +0 -0
  311. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/default.py +0 -0
  312. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/factory.py +0 -0
  313. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/__init__.py +0 -0
  314. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/default.py +0 -0
  315. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/factory.py +0 -0
  316. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/extinction/__init__.py +0 -0
  317. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/extinction/factory.py +0 -0
  318. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/instrument/__init__.py +0 -0
  319. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/instrument/base.py +0 -0
  320. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/instrument/cwl.py +0 -0
  321. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/instrument/factory.py +0 -0
  322. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/__init__.py +0 -0
  323. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/default.py +0 -0
  324. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/factory.py +0 -0
  325. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/__init__.py +0 -0
  326. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/default.py +0 -0
  327. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/factory.py +0 -0
  328. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/base.py +0 -0
  329. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof_mixins.py +0 -0
  330. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/categories/peak/total_mixins.py +0 -0
  331. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/collection.py +0 -0
  332. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/item/__init__.py +0 -0
  333. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/item/bragg_sc.py +0 -0
  334. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/experiment/item/total_pd.py +0 -0
  335. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/__init__.py +0 -0
  336. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/__init__.py +0 -0
  337. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/atom_site_aniso/__init__.py +0 -0
  338. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/atom_site_aniso/factory.py +0 -0
  339. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/__init__.py +0 -0
  340. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/enums.py +0 -0
  341. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/factory.py +0 -0
  342. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/cell/__init__.py +0 -0
  343. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/cell/default.py +0 -0
  344. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/cell/factory.py +0 -0
  345. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/space_group/__init__.py +0 -0
  346. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/space_group/default.py +0 -0
  347. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/categories/space_group/factory.py +0 -0
  348. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/collection.py +0 -0
  349. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/item/__init__.py +0 -0
  350. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/datablocks/structure/item/factory.py +0 -0
  351. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/__init__.py +0 -0
  352. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/base.py +0 -0
  353. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/plotters/__init__.py +0 -0
  354. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/plotters/ascii.py +0 -0
  355. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/plotters/base.py +0 -0
  356. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/plotters/plotly.py +0 -0
  357. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/plotting.py +0 -0
  358. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/tablers/__init__.py +0 -0
  359. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/tablers/base.py +0 -0
  360. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/tablers/pandas.py +0 -0
  361. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/tablers/rich.py +0 -0
  362. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/tables.py +0 -0
  363. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/display/utils.py +0 -0
  364. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/io/__init__.py +0 -0
  365. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/io/ascii.py +0 -0
  366. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/io/cif/__init__.py +0 -0
  367. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/io/cif/handler.py +0 -0
  368. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/io/cif/parse.py +0 -0
  369. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/project/__init__.py +0 -0
  370. {easydiffraction-0.13.0/src/easydiffraction/summary → easydiffraction-0.14.0/src/easydiffraction/project/categories}/__init__.py +0 -0
  371. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/project/project_info.py +0 -0
  372. {easydiffraction-0.13.0/tests/unit/easydiffraction/datablocks/structure/categories → easydiffraction-0.14.0/src/easydiffraction/summary}/__init__.py +0 -0
  373. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/__init__.py +0 -0
  374. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/_vendored/__init__.py +0 -0
  375. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/__init__.py +0 -0
  376. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/detector.py +0 -0
  377. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/_vendored/theme_detect.py +0 -0
  378. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/enums.py +0 -0
  379. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/environment.py +0 -0
  380. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/src/easydiffraction/utils/logging.py +0 -0
  381. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/functional/conftest.py +0 -0
  382. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/functional/test_experiment_workflow.py +0 -0
  383. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/functional/test_fitting_workflow.py +0 -0
  384. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/functional/test_project_lifecycle.py +0 -0
  385. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/functional/test_structure_workflow.py +0 -0
  386. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_cif_round_trip.py +0 -0
  387. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_pair-distribution-function.py +0 -0
  388. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_sequential.py +0 -0
  389. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_single-crystal-diffraction.py +0 -0
  390. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/fitting/test_summary_report.py +0 -0
  391. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/scipp-analysis/dream/conftest.py +0 -0
  392. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/scipp-analysis/dream/test_read_reduced_data.py +0 -0
  393. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/scipp-analysis/dream/test_validate_meta_data.py +0 -0
  394. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/integration/scipp-analysis/dream/test_validate_physical_data.py +0 -0
  395. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/calculators/test_base.py +0 -0
  396. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/calculators/test_crysfml.py +0 -0
  397. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/calculators/test_factory.py +0 -0
  398. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +0 -0
  399. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/categories/test_aliases.py +0 -0
  400. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/categories/test_constraints.py +0 -0
  401. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/categories/test_joint_fit_experiments.py +0 -0
  402. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_metrics.py +0 -0
  403. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py +0 -0
  404. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_tracking.py +0 -0
  405. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_base.py +0 -0
  406. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps_amoeba.py +0 -0
  407. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps_de.py +0 -0
  408. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_bumps_lm.py +0 -0
  409. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_dfols.py +0 -0
  410. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_factory.py +0 -0
  411. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit.py +0 -0
  412. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit_least_squares.py +0 -0
  413. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit_leastsq.py +0 -0
  414. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/test_analysis_access_params.py +0 -0
  415. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/test_analysis_show_empty.py +0 -0
  416. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/test_fitting.py +0 -0
  417. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/analysis/test_sequential.py +0 -0
  418. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_category.py +0 -0
  419. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_collection.py +0 -0
  420. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_datablock.py +0 -0
  421. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_diagnostic.py +0 -0
  422. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_factory.py +0 -0
  423. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_guard.py +0 -0
  424. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_identity.py +0 -0
  425. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_metadata.py +0 -0
  426. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_singletons.py +0 -0
  427. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/core/test_validation.py +0 -0
  428. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/crystallography/test_crystallography.py +0 -0
  429. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/crystallography/test_crystallography_coverage.py +0 -0
  430. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/crystallography/test_crystallography_wyckoff.py +0 -0
  431. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/crystallography/test_space_groups.py +0 -0
  432. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/crystallography/test_space_groups_coverage.py +0 -0
  433. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_chebyshev.py +0 -0
  434. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_enums.py +0 -0
  435. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_factory.py +0 -0
  436. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_line_segment.py +0 -0
  437. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_pd.py +0 -0
  438. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_sc.py +0 -0
  439. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_factory.py +0 -0
  440. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_total_pd.py +0 -0
  441. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_base.py +0 -0
  442. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_cwl.py +0 -0
  443. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_factory.py +0 -0
  444. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_base.py +0 -0
  445. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl.py +0 -0
  446. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl_mixins.py +0 -0
  447. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof_mixins.py +0 -0
  448. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total.py +0 -0
  449. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total_mixins.py +0 -0
  450. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_diffrn.py +0 -0
  451. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_excluded_regions.py +0 -0
  452. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_experiment_type.py +0 -0
  453. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_extinction.py +0 -0
  454. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_crystal.py +0 -0
  455. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_phases.py +0 -0
  456. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_base.py +0 -0
  457. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_pd.py +0 -0
  458. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc.py +0 -0
  459. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_enums.py +0 -0
  460. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_factory.py +0 -0
  461. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_factory_coverage.py +0 -0
  462. {easydiffraction-0.13.0/tests/unit/easydiffraction/display/tablers → easydiffraction-0.14.0/tests/unit/easydiffraction/datablocks/structure/categories}/__init__.py +0 -0
  463. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_atom_sites.py +0 -0
  464. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_cell.py +0 -0
  465. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_space_group.py +0 -0
  466. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/item/test_base.py +0 -0
  467. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/item/test_base_coverage.py +0 -0
  468. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/item/test_factory.py +0 -0
  469. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/test_collection.py +0 -0
  470. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/datablocks/structure/test_collection_coverage.py +0 -0
  471. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/plotters/test_ascii.py +0 -0
  472. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/plotters/test_base.py +0 -0
  473. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/plotters/test_plotly.py +0 -0
  474. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/tablers/test_base.py +0 -0
  475. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/tablers/test_rich.py +0 -0
  476. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/test_base.py +0 -0
  477. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/test_plotting.py +0 -0
  478. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/test_plotting_coverage.py +0 -0
  479. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/test_tables.py +0 -0
  480. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/display/test_utils.py +0 -0
  481. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/io/cif/test_handler.py +0 -0
  482. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/io/cif/test_parse.py +0 -0
  483. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/io/test_ascii.py +0 -0
  484. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/project/test_project.py +0 -0
  485. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/project/test_project_info.py +0 -0
  486. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/project/test_project_load_and_summary_wrap.py +0 -0
  487. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/project/test_project_save.py +0 -0
  488. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_enums.py +0 -0
  489. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_environment.py +0 -0
  490. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_environment_coverage.py +0 -0
  491. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_logging.py +0 -0
  492. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_logging_coverage.py +0 -0
  493. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_theme_detect.py +0 -0
  494. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tests/unit/easydiffraction/utils/test_utils.py +0 -0
  495. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/gen_tests_scaffold.py +0 -0
  496. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/generate_package_docs.py +0 -0
  497. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/license_headers.py +0 -0
  498. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/naming_check.py +0 -0
  499. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/param_consistency.py +0 -0
  500. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/test_scripts.py +0 -0
  501. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/test_structure_check.py +0 -0
  502. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/tweak_notebooks.py +0 -0
  503. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/update_docs_assets.py +0 -0
  504. {easydiffraction-0.13.0 → easydiffraction-0.14.0}/tools/update_github_labels.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easydiffraction
3
- Version: 0.13.0
3
+ Version: 0.14.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
@@ -69,6 +69,7 @@ Requires-Dist: nbstripout; extra == 'dev'
69
69
  Requires-Dist: pre-commit; extra == 'dev'
70
70
  Requires-Dist: pydoclint; extra == 'dev'
71
71
  Requires-Dist: pytest; extra == 'dev'
72
+ Requires-Dist: pytest-benchmark; extra == 'dev'
72
73
  Requires-Dist: pytest-cov; extra == 'dev'
73
74
  Requires-Dist: pytest-xdist; extra == 'dev'
74
75
  Requires-Dist: pyyaml; extra == 'dev'
@@ -18,9 +18,9 @@ Legend:
18
18
 
19
19
  ---
20
20
 
21
- # 1. Sample Model
21
+ # 1. Structure Model
22
22
 
23
- ## 1.1 Crystal Structure Parameters
23
+ ## 1.1 Crystal Structure
24
24
 
25
25
  ### Space Group
26
26
 
@@ -48,35 +48,51 @@ Legend:
48
48
  | Occupancy | ✅ | ✅ |
49
49
  | Symmetry _wyckoff_letter_ | ✅ | ✅ |
50
50
 
51
- ### Atomic Displacement Parameters (ADP)
51
+ ### Atomic Displacement (ADP)
52
52
 
53
- | Feature | LIB | APP |
54
- | ----------------------------------------------- | --- | --- |
55
- | Isotropic Biso | ✅ | 🗓 |
56
- | Isotropic Uiso | 🚧 | ✅ |
57
- | Anisotropic Bani _B11, B22, B33, B12, B13, B23_ | 🚧 | 🗓 |
58
- | Anisotropic Uani _U11, U22, U33, U12, U13, U23_ | 🚧 | 🗓 |
53
+ | Feature | LIB | APP |
54
+ | --------------------------------------------------- | --- | --- |
55
+ | Isotropic _Biso_ | ✅ | 🗓 |
56
+ | Isotropic _Uiso_ | 🚧 | ✅ |
57
+ | Anisotropic _Bani_ (_B11, B22, B33, B12, B13, B23_) | 🚧 | 🗓 |
58
+ | Anisotropic _Uani_ (_U11, U22, U33, U12, U13, U23_) | 🚧 | 🗓 |
59
59
 
60
60
  ---
61
61
 
62
- ## 1.2 Magnetic Structure Parameters
62
+ ## 1.2 Magnetic Structure - EPIC
63
63
 
64
- | Feature | LIB | APP |
65
- | ------------------------------------------------------- | --- | --- |
66
- | EPIC (Magnetic space groups, unpolarized and polarized) | 🗓 | 🗓 |
64
+ | Feature | LIB | APP |
65
+ | ----------------------------------------------------- | --- | --- |
66
+ | Magnetic Space Groups | 🗓 | 🗓 |
67
+ | Irreducible representations | 🗓 | 🗓 |
68
+ | Magnetic propagation vector (_kx, ky, kz_) | 🗓 | 🗓 |
69
+ | Magnetic moments (_mx, my, mz_) | 🗓 | 🗓 |
70
+ | Local Susceptibility (_𝜒11, 𝜒22, 𝜒33, 𝜒12, 𝜒13, 𝜒23_) | 🗓 | 🗓 |
67
71
 
68
72
  ---
69
73
 
70
74
  # 2. Experiment Model
71
75
 
72
- ## 2.1 Powder Diffraction
73
-
74
- ### Fitting Methods
75
-
76
- | Feature | LIB | APP |
77
- | ------------------------------------- | --- | --- |
78
- | Rietveld refinement (full pattern) | | |
79
- | Le Bail refinement (profile matching) | 🗓 | 🗓 |
76
+ | Techniques | LIB | APP |
77
+ | ---------------------------------------------------- | ----- | ----- |
78
+ | 2.1. Powder Diffraction | ✅/🗓 | ✅/🗓 |
79
+ | 2.1.1. Common features | ✅/🗓 | ✅/🗓 |
80
+ | 2.1.2. Standard Bragg diffraction (CWL) | ✅/🗓 | ✅/🗓 |
81
+ | 2.1.2. Standard Bragg diffraction (TOF) | ✅/🗓 | ✅/🗓 |
82
+ | 2.1.3. Total Scattering (Pair-Distribution Function) | ✅/🗓 | 🗓 |
83
+ | 2.2. Single-Crystal Diffraction (CWL) | ✅/🗓 | ✅/🗓 |
84
+ | 2.2. Single-Crystal Diffraction (TOF) | ✅/🗓 | ✅/🗓 |
85
+ | 2.3. Polarized Powder Diffraction | 🗓 | 🗓 |
86
+ | 2.3.1. Flipping-rathio method (TOF) | 🗓 | 🗓 |
87
+ | 2.3.1. Flipping-rathio method (CWL) | 🗓 | 🗓 |
88
+ | 2.4. Polarized Single-Crystal Diffraction | 🗓 | 🗓 |
89
+ | 2.4.1. Flipping-rathio method (CWL) | 🗓 | 🗓 |
90
+ | 2.4.2. Flipping-rathio method (TOF) | 🗓 | 🗓 |
91
+ | 2.4.3. Spherical neutron polarimetry | 🗓 | 🗓 |
92
+
93
+ ## 2.1. Powder Diffraction
94
+
95
+ ## 2.1.1 Common features
80
96
 
81
97
  ### Linked Phases
82
98
 
@@ -90,7 +106,14 @@ Legend:
90
106
  | ----------------------------------------- | --- | --- |
91
107
  | Multiple regions<br>_start/end positions_ | ✅ | 🗓 |
92
108
 
93
- ---
109
+ ## 2.1.1 Standard Bragg diffraction
110
+
111
+ ### Fitting Methods
112
+
113
+ | Feature | LIB | APP |
114
+ | ------------------------------------- | --- | --- |
115
+ | Rietveld refinement (full pattern) | ✅ | ✅ |
116
+ | Le Bail refinement (profile matching) | 🗓 | 🗓 |
94
117
 
95
118
  ### Background
96
119
 
@@ -130,20 +153,12 @@ Legend:
130
153
 
131
154
  ### Peak Profile — Time-of-Flight
132
155
 
133
- CrysPy peak_shape options:
134
-
135
- - "Gauss": Jorgensen (back-to-back exponentials ⊗ Gaussian)
136
- - "pseudo-Voigt": Jorgensen-Von Dreele (back-to-back exponentials ⊗
137
- pseudo-Voigt)
138
- - "type0m": Double back-to-back exponentials ⊗ pseudo-Voigt (Z-Rietveld
139
- type 0m)
140
-
141
- | Feature | LIB | APP |
142
- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | --- |
143
- | Jorgensen (back-to-back exponentials ⊗ Gaussian)<br>_Gaussian broadening σ₀, σ₁, σ₂<br>Back-to-back exponential rise α₀, α₁. Back-to-back exponential decay β₀, β₁_<br>(CrysPy) | ✅ | ✅ |
144
- | Jorgensen-Von Dreele (back-to-back exponentials ⊗ pseudo-Voigt)<br>_Gaussian broadening σ₀, σ₁, σ₂. Lorentzian broadening γ₀, γ₁, γ₂<br>Back-to-back exponential rise α₀, α₁. Back-to-back exponential decay β₀, β₁_<br>(CrysPy) | ✅ | ✅ |
145
- | Double back-to-back exponentials ⊗ pseudo-Voigt [Z-Rietveld type0m]<br>_Gaussian broadening σ₀, σ₁, σ₂. Lorentzian broadening γ₀, γ₁, γ₂<br>Rise α₁, α₂. Fast decay β₀₀, β₀₁. Slow decay β₁₀. Switching r₀₁, r₀₂, r₀₃_<br>(CrysPy) | ✅ | 🗓 |
146
- | Ikeda-Carpenter ⊗ pseudo-Voigt<br>_Moderator pulse α₀, α₁, β₀, κ<br>Gaussian broadening σ². Lorentzian broadening γ_<br>(CrysFML) | 🗓 | 🗓 |
156
+ | Feature | LIB | APP |
157
+ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | --- |
158
+ | Jorgensen (back-to-back exponentials ⊗ Gaussian)<br>_Gaussian broadening σ₀, σ₁, σ₂<br>Back-to-back exponential rise α₀, α₁. Back-to-back exponential decay β₀, β₁_<br>(CrysPy "Gauss") | ✅ | ✅ |
159
+ | Jorgensen-Von Dreele (back-to-back exponentials ⊗ pseudo-Voigt)<br>_Gaussian broadening σ₀, σ₁, σ₂. Lorentzian broadening γ₀, γ₁, γ₂<br>Back-to-back exponential rise α₀, α₁. Back-to-back exponential decay β₀, β₁_<br>(CrysPy "pseudo-Voigt") | ✅ | ✅ |
160
+ | Double back-to-back exponentials ⊗ pseudo-Voigt [Z-Rietveld type0m]<br>_Gaussian broadening σ₀, σ₁, σ₂. Lorentzian broadening γ₀, γ₁, γ₂<br>Rise α₁, α₂. Fast decay β₀₀, β₀₁. Slow decay β₁₀. Switching r₀₁, r₀₂, r₀₃_<br>(CrysPy "type0m") | ✅ | 🗓 |
161
+ | Ikeda-Carpenter ⊗ pseudo-Voigt<br>_Moderator pulse α₀, α₁, β₀, κ<br>Gaussian broadening σ². Lorentzian broadening γ_<br>(CrysFML) | 🗓 | 🗓 |
147
162
 
148
163
  | TOF profile | TOF source | Performance |
149
164
  | ------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------- |
@@ -154,13 +169,13 @@ CrysPy peak_shape options:
154
169
 
155
170
  ---
156
171
 
157
- ## 2.1.2 Total Scattering (Pair Distribution Function)
172
+ ## 2.1.3 Total Scattering (Pair Distribution Function)
158
173
 
159
174
  ### Peak Profile
160
175
 
161
- | Feature | LIB | APP |
162
- | ------------------------------------------------------------------------------------------------------ | --- | --- |
163
- | GaussianDampedSinc type<br>_cutoff q. broadening q. sharpening δ₁, δ₂<br>damping q, particle diameter_ | ✅ | 🗓 |
176
+ | Feature | LIB | APP |
177
+ | ------------------------------------------------------------------------------------------------------------------------ | --- | --- |
178
+ | Gaussian-damped sinc termination function<br>_cutoff q. broadening q. sharpening δ₁, δ₂<br>damping q, particle diameter_ | ✅ | 🗓 |
164
179
 
165
180
  ---
166
181
 
@@ -196,11 +211,20 @@ Gauss or Lorentz mosaicity distribution
196
211
  | ------------------------------------ | --- | --- |
197
212
  | Individual wavelength per reflection | ✅ | 🗓 |
198
213
 
199
- ## 2.3. Polarized Neutron Diffraction
214
+ ## 2.3. Polarized Neutron Powder Diffraction - EPIC
200
215
 
201
- | Feature | LIB | APP |
202
- | ---------------------------------------------- | --- | --- |
203
- | EPIC (powders and single crystals, FR and SNP) | 🗓 | 🗓 |
216
+ | Feature | LIB | APP |
217
+ | ---------------------------- | --- | --- |
218
+ | Flipping-rathio method (TOF) | 🗓 | 🗓 |
219
+ | Flipping-rathio method (CWL) | 🗓 | 🗓 |
220
+
221
+ ## 2.3. Polarized Neutron Single Crystal Diffraction - EPIC
222
+
223
+ | Feature | LIB | APP |
224
+ | ----------------------------- | --- | --- |
225
+ | Flipping-rathio method (TOF) | 🗓 | 🗓 |
226
+ | Flipping-rathio method (CWL) | 🗓 | 🗓 |
227
+ | Spherical neutron polarimetry | 🗓 | 🗓 |
204
228
 
205
229
  ---
206
230
 
@@ -215,19 +239,21 @@ Gauss or Lorentz mosaicity distribution
215
239
 
216
240
  # 4. Analysis (Fitting)
217
241
 
218
- ### Refinement Algorithms
242
+ ### Refinement Algorithms (numerical derivatives)
219
243
 
220
- | Feature | LIB | APP |
221
- | --------------------------------------------------------------- | --- | --- |
222
- | Levenberg–Marquardt (numerical derivatives)<br>LMFIT minimizer | ✅ | ✅ |
223
- | Levenberg–Marquardt (analytical derivatives)<br>LMFIT minimizer | 🗓 | 🗓 |
224
- | Derivative-free minimization<br>DFO-LS minimizer | | |
225
- | Bayesian analysis<br>BUMPS minimizer | 🗓 | 🗓 |
244
+ | Feature | LIB | APP |
245
+ | ---------------------------------------------------- | --- | --- |
246
+ | Levenberg–Marquardt<br>LMFIT minimizer | ✅ | ✅ |
247
+ | Levenberg–Marquardt<br>LMFIT minimizer (scipy-based) | | |
248
+ | Levenberg–Marquardt<br>BUMPS minimizer | 🚧 | 🗓 |
249
+ | Derivative-free minimization<br>DFO-LS minimizer | | |
250
+ | Bayesian analysis<br>BUMPS minimizer | 🗓 | 🗓 |
226
251
 
227
252
  ### Fit Strategies
228
253
 
229
254
  | Feature | LIB | APP |
230
255
  | ---------------------------------------------------------------------------------------------------- | --- | --- |
256
+ | Single fit of one experimental data block to one/multiple structural data block | ✅ | ✅ |
231
257
  | Sequential fit of experimental data blocks | ✅ | 🗓 |
232
258
  | Joint fit of experimental data blocks within the same calculation engine | ✅ | 🗓 |
233
259
  | Joint fit of experimental data blocks using different calculation engines<br>(e.g. CrysPy + Pdffit2) | ✅ | 🗓 |
@@ -292,8 +318,8 @@ Gauss or Lorentz mosaicity distribution
292
318
 
293
319
  | Feature | LIB | APP | CLI |
294
320
  | --------------------------------- | --- | --- | --- |
295
- | List available tutorial notebooks | | — | ✅ |
296
- | Download tutorial notebooks | | — | ✅ |
321
+ | List available tutorial notebooks | | — | ✅ |
322
+ | Download tutorial notebooks | | — | ✅ |
297
323
 
298
324
  ---
299
325
 
@@ -371,12 +397,10 @@ Gauss or Lorentz mosaicity distribution
371
397
 
372
398
  ---
373
399
 
374
- # 10. Future Topics
375
-
376
- Here, we list features that are not sorted into the above categories,
377
- but are still on our radar for future development.
400
+ # 10. Unsorted features
378
401
 
379
402
  - Restrains (soft constraints, e.g. bond lengths, angles)
403
+ - Refinement using analytical derivatives
380
404
  - Global optimization algorithms (e.g. simulated annealing)
381
405
  - Incommensurate structures
382
406
  - 2D Rietveld refinement
@@ -389,14 +389,14 @@ class PeakFactory(FactoryBase):
389
389
  frozenset({
390
390
  ('scattering_type', ScatteringTypeEnum.BRAGG),
391
391
  ('beam_mode', BeamModeEnum.CONSTANT_WAVELENGTH),
392
- }): PeakProfileTypeEnum.PSEUDO_VOIGT,
392
+ }): PeakProfileTypeEnum.CWL_PSEUDO_VOIGT,
393
393
  frozenset({
394
394
  ('scattering_type', ScatteringTypeEnum.BRAGG),
395
395
  ('beam_mode', BeamModeEnum.TIME_OF_FLIGHT),
396
- }): PeakProfileTypeEnum.JORGENSEN,
396
+ }): PeakProfileTypeEnum.TOF_JORGENSEN,
397
397
  frozenset({
398
398
  ('scattering_type', ScatteringTypeEnum.TOTAL),
399
- }): PeakProfileTypeEnum.GAUSSIAN_DAMPED_SINC,
399
+ }): PeakProfileTypeEnum.TOTAL_GAUSSIAN_DAMPED_SINC,
400
400
  }
401
401
  ```
402
402
 
@@ -413,8 +413,8 @@ attributes:
413
413
  @PeakFactory.register
414
414
  class CwlPseudoVoigt(PeakBase, CwlBroadeningMixin):
415
415
  type_info = TypeInfo(
416
- tag='pseudo-voigt',
417
- description='Pseudo-Voigt profile',
416
+ tag=PeakProfileTypeEnum.CWL_PSEUDO_VOIGT.value,
417
+ description=PeakProfileTypeEnum.CWL_PSEUDO_VOIGT.description(),
418
418
  )
419
419
  compatibility = Compatibility(
420
420
  scattering_type=frozenset({ScatteringTypeEnum.BRAGG}),
@@ -478,7 +478,11 @@ from .line_segment import LineSegmentBackground
478
478
 
479
479
  ### 5.6 Tag Naming Convention
480
480
 
481
- Tags are the user-facing identifiers for selecting types. They must be:
481
+ Canonical tags are the stable identifiers for factory lookup and
482
+ serialisation. User-facing APIs may expose context-local aliases when
483
+ the owner object already provides enough context to disambiguate the
484
+ choice (for example, `experiment.peak_profile_type = 'pseudo-voigt'`
485
+ inside a CWL or TOF experiment). Canonical tags must be:
482
486
 
483
487
  - **Consistent** — use the same abbreviations everywhere.
484
488
  - **Hyphen-separated** — all lowercase, words joined by hyphens.
@@ -507,15 +511,22 @@ Tags are the user-facing identifiers for selecting types. They must be:
507
511
 
508
512
  **Peak tags**
509
513
 
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` |
514
+ Canonical peak tags are globally unique within `PeakFactory`. The
515
+ experiment-facing `peak_profile_type` getter, setter, and supported-type
516
+ display use context-local aliases so users do not need to type `cwl-`,
517
+ `tof-`, or `total-` when the experiment context already disambiguates
518
+ the choice.
519
+
520
+ | Canonical tag | Local alias | Class |
521
+ | -------------------------------------- | ------------------------------------ | ---------------------------------- |
522
+ | `cwl-pseudo-voigt` | `pseudo-voigt` | `CwlPseudoVoigt` |
523
+ | `cwl-pseudo-voigt-empirical-asymmetry` | `pseudo-voigt + empirical asymmetry` | `CwlPseudoVoigtEmpiricalAsymmetry` |
524
+ | `cwl-thompson-cox-hastings` | `thompson-cox-hastings` | `CwlThompsonCoxHastings` |
525
+ | `tof-pseudo-voigt` | `pseudo-voigt` | `TofPseudoVoigt` |
526
+ | `tof-jorgensen` | `jorgensen` | `TofJorgensen` |
527
+ | `tof-jorgensen-von-dreele` | `jorgensen-von-dreele` | `TofJorgensenVonDreele` |
528
+ | `tof-double-jorgensen-von-dreele` | `double-jorgensen-von-dreele` | `TofDoubleJorgensenVonDreele` |
529
+ | `total-gaussian-damped-sinc` | `gaussian-damped-sinc` | `TotalGaussianDampedSinc` |
519
530
 
520
531
  **Instrument tags**
521
532
 
@@ -684,14 +695,14 @@ category's `calculator_support` metadata and
684
695
  registry by `engine_imported` (whether the third-party library is
685
696
  available in the environment).
686
697
 
687
- The experiment exposes the standard switchable-category API:
698
+ The experiment exposes a dedicated `calculation` category:
688
699
 
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()`
700
+ - `calculation.calculator_type` — getter + setter for the calculator
701
+ backend tag
702
+ - `calculation.calculator` — read-only access to the live backend
703
+ instance
704
+ - `calculation.show_calculator_types()` — filtered by data category
705
+ support and marks the current type
695
706
 
696
707
  ### 6.2 Minimiser
697
708
 
@@ -713,22 +724,19 @@ workflow:
713
724
 
714
725
  `Analysis` is bound to a `Project` and provides the high-level API:
715
726
 
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.
727
+ - Fit configuration: `fit` (`CategoryItem` with `minimizer_type` and
728
+ `mode` descriptors). `fit.minimizer_type` selects the minimizer
729
+ backend. `fit.mode` stores whether fitting is `'single'`, `'joint'`,
730
+ or `'sequential'`. `fit.show_minimizer_types()` lists supported
731
+ minimizers; `fit.show_modes()` filters modes by experiment count (≤1 →
732
+ only `single`; >1 all three).
725
733
  - Joint-fit weights: `joint_fit_experiments` (`CategoryCollection` of
726
- per-experiment weight entries); sibling of `fit_mode`, not a child.
734
+ per-experiment weight entries); sibling of `fit`, not a child.
727
735
  - Parameter tables: `show_all_params()`, `show_fittable_params()`,
728
736
  `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.
737
+ - Fitting: `fit()` dispatches single/joint through the callable `fit`
738
+ category; `fit_sequential()` handles sequential mode (sets `fit.mode`
739
+ to `'sequential'` internally). `display.fit_results()` shows results.
732
740
  - Aliases and constraints (single-type categories; no public `_type`
733
741
  getter or setter)
734
742
 
@@ -751,9 +759,9 @@ It owns and coordinates all components:
751
759
  | `project.info` | `ProjectInfo` | Metadata: name, title, description, path |
752
760
  | `project.structures` | `Structures` | Collection of structure datablocks |
753
761
  | `project.experiments` | `Experiments` | Collection of experiment datablocks |
754
- | `project.analysis` | `Analysis` | Calculator, minimiser, fitting |
762
+ | `project.display` | `Display` | Plot/table engine selection and facades |
763
+ | `project.analysis` | `Analysis` | Minimiser, fitting, aliases, constraints |
755
764
  | `project.summary` | `Summary` | Report generation |
756
- | `project.plotter` | `Plotter` | Visualisation |
757
765
  | `project.verbosity` | `str` | Console output level (full/short/silent) |
758
766
 
759
767
  ### 7.1 Data Flow
@@ -778,7 +786,7 @@ Projects are saved as a directory of CIF files:
778
786
 
779
787
  ```shell
780
788
  project_dir/
781
- ├── project.cif # ProjectInfo
789
+ ├── project.cif # ProjectInfo + Display preferences
782
790
  ├── summary.cif # Summary report
783
791
  ├── structures/
784
792
  │ └── lbco.cif # One file per structure
@@ -788,6 +796,13 @@ project_dir/
788
796
  └── analysis.cif # Analysis settings
789
797
  ```
790
798
 
799
+ `project.cif` carries both the `_project.*` metadata and the
800
+ `_display.*` engine preferences (`plotter_type`, `tabler_type`), so a
801
+ saved project re-opens with the same display backends. Per-experiment
802
+ calculator selection (`_calculation.calculator_type`) lives in each
803
+ experiment file, and fit configuration (`_fit.minimizer_type`,
804
+ `_fit.mode`) lives in `analysis/analysis.cif`.
805
+
791
806
  ### 7.3 Verbosity
792
807
 
793
808
  `Project.verbosity` controls how much console output operations produce.
@@ -894,7 +909,7 @@ project.experiments['hrpt'].instrument.setup_wavelength = 1.494
894
909
  project.experiments['hrpt'].instrument.calib_twotheta_offset = 0.6
895
910
 
896
911
  # Browse and select peak profile type
897
- project.experiments['hrpt'].show_supported_peak_profile_types()
912
+ project.experiments['hrpt'].show_peak_profile_types()
898
913
  project.experiments['hrpt'].peak_profile_type = 'pseudo-voigt'
899
914
 
900
915
  # Set peak profile parameters
@@ -902,7 +917,7 @@ project.experiments['hrpt'].peak.broad_gauss_u = 0.1
902
917
  project.experiments['hrpt'].peak.broad_gauss_v = -0.1
903
918
 
904
919
  # Browse and select background type
905
- project.experiments['hrpt'].show_supported_background_types()
920
+ project.experiments['hrpt'].show_background_types()
906
921
  project.experiments['hrpt'].background_type = 'line-segment'
907
922
 
908
923
  # Add background points
@@ -917,12 +932,12 @@ project.experiments['hrpt'].linked_phases.create(id='lbco', scale=10.0)
917
932
 
918
933
  ```python
919
934
  # 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'
935
+ project.experiments['hrpt'].calculation.show_calculator_types()
936
+ project.experiments['hrpt'].calculation.calculator_type = 'cryspy'
937
+ project.analysis.fit.minimizer_type = 'lmfit'
923
938
 
924
939
  # Plot before fitting
925
- project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
940
+ project.display.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
926
941
 
927
942
  # Select free parameters
928
943
  project.structures['lbco'].cell.length_a.free = True
@@ -938,7 +953,7 @@ project.analysis.fit()
938
953
  project.analysis.display.fit_results()
939
954
 
940
955
  # Plot after fitting
941
- project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
956
+ project.display.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
942
957
 
943
958
  # Save
944
959
  project.save()
@@ -1030,13 +1045,12 @@ exposes the full switchable API:
1030
1045
  | --------------- | -------------------------------------------- | ------------------------------------------------ |
1031
1046
  | Current object | `<category>` property (read-only) | `expt.background`, `expt.peak` |
1032
1047
  | 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()` |
1048
+ | Show types | `show_<category>_types()` | `expt.show_background_types()` |
1035
1049
 
1036
1050
  Multi-type categories:
1037
1051
 
1038
- - **Experiment:** `calculator_type`, `background_type`,
1039
- `peak_profile_type`, `extinction_type`.
1052
+ - **Experiment:** `background_type`, `peak_profile_type`,
1053
+ `extinction_type`.
1040
1054
 
1041
1055
  Categories that are **fixed at creation** (determined by the experiment
1042
1056
  type and never changed) expose only a read-only `<category>` property
@@ -1056,10 +1070,15 @@ Single-type categories (no public `_type` property):
1056
1070
  - **Structure:** `cell`, `space_group`, `atom_sites`, `atom_site_aniso`.
1057
1071
  - **Analysis:** `aliases`, `constraints`.
1058
1072
 
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.
1073
+ `fit` is a dedicated analysis category. Its public selector surface is
1074
+ `fit.minimizer_type` and `fit.mode`; there is no separate owner-level
1075
+ proxy API. Likewise, `calculation` is a dedicated experiment category
1076
+ that owns calculator selection —
1077
+ `experiment.calculation.calculator_type` and
1078
+ `experiment.calculation.show_calculator_types()` — instead of the
1079
+ selector being exposed at the experiment owner level. The same pattern
1080
+ applies to `display` on `Project`, which owns `plotter_type` and
1081
+ `tabler_type` (see §9.4.1).
1063
1082
 
1064
1083
  **Design decisions:**
1065
1084
 
@@ -1074,17 +1093,39 @@ the `fit_mode.mode` descriptor directly.
1074
1093
  displaying the current content (not on the base
1075
1094
  `CategoryItem`/`CategoryCollection`).
1076
1095
 
1096
+ #### 9.4.1 Selector Families
1097
+
1098
+ Not every `_type` attribute represents the same kind of choice. The API
1099
+ recognises three distinct selector families. They share a similar
1100
+ `<name>_type` shape so the user can inspect and set them uniformly, but
1101
+ their intent and ownership differ:
1102
+
1103
+ | Family | User intent | Examples | CIF |
1104
+ | ---------------------------------- | ------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
1105
+ | Backend selector | Pick an execution backend | `fit.minimizer_type`, `calculation.calculator_type`, `display.plotter_type` | `_fit.minimizer_type`, `_calculation.calculator_type`, `_display.plotter_type` |
1106
+ | Switchable-category impl. selector | Swap a category implementation | `experiment.background_type`, `experiment.peak_profile_type` | category-owned type tag such as `_peak.profile_type` |
1107
+ | Semantic value selector | Pick a scientific/analysis mode | `fit.mode` | `_fit.mode` |
1108
+
1109
+ Backend selectors and semantic value selectors live on a dedicated
1110
+ configuration category (`fit`, `calculation`, `display`). Switchable-
1111
+ category implementation selectors are owned by the host (typically the
1112
+ experiment) because switching them replaces the category instance, as
1113
+ described in §9.3.
1114
+
1077
1115
  ### 9.5 Discoverable Supported Options
1078
1116
 
1079
1117
  The user can always discover what is supported for the current
1080
1118
  experiment:
1081
1119
 
1082
1120
  ```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()
1121
+ expt.show_peak_profile_types()
1122
+ expt.show_background_types()
1123
+ expt.calculation.show_calculator_types()
1124
+ expt.show_extinction_types()
1125
+ project.analysis.fit.show_minimizer_types()
1126
+ project.analysis.fit.show_modes()
1127
+ project.display.show_plotter_types()
1128
+ project.display.show_tabler_types()
1088
1129
  ```
1089
1130
 
1090
1131
  Available calculators are filtered by `engine_imported` (whether the
@@ -1122,10 +1163,10 @@ but internal dispatch always uses the enum:
1122
1163
 
1123
1164
  ```python
1124
1165
  # ✅ Correct — compare with enum
1125
- if self._fit_mode.mode.value == FitModeEnum.JOINT:
1166
+ if self._fit.mode.value == FitModeEnum.JOINT:
1126
1167
 
1127
1168
  # ❌ Wrong — compare with raw string
1128
- if self._fit_mode.mode.value == 'joint':
1169
+ if self._fit.mode.value == 'joint':
1129
1170
  ```
1130
1171
 
1131
1172
  ### 9.7 Flat Category Structure — No Nested Categories
@@ -1150,25 +1191,26 @@ Owner
1150
1191
  └── CategoryB ← WRONG: CategoryB is a child of CategoryA
1151
1192
  ```
1152
1193
 
1153
- **Example — `fit_mode` and `joint_fit_experiments`:** `fit_mode` is a
1154
- `CategoryItem` holding the active strategy (`'single'` or `'joint'`).
1194
+ **Example — `fit` and `joint_fit_experiments`:** `fit` is a
1195
+ `CategoryItem` holding the active minimizer and fitting mode.
1155
1196
  `joint_fit_experiments` is a separate `CategoryCollection` holding
1156
1197
  per-experiment weights. Both are direct children of `Analysis`, not
1157
1198
  nested:
1158
1199
 
1159
1200
  ```python
1160
1201
  # ✅ Correct — sibling categories on Analysis
1161
- project.analysis.fit_mode.mode = 'joint'
1202
+ project.analysis.fit.mode = 'joint'
1162
1203
  project.analysis.joint_fit_experiments['npd'].weight = 0.7
1163
1204
 
1164
- # ❌ Wrong — joint_fit_experiments as a child of fit_mode
1165
- project.analysis.fit_mode.joint_fit_experiments['npd'].weight = 0.7
1205
+ # ❌ Wrong — joint_fit_experiments as a child of fit
1206
+ project.analysis.fit.joint_fit_experiments['npd'].weight = 0.7
1166
1207
  ```
1167
1208
 
1168
1209
  In CIF output, sibling categories appear as independent blocks:
1169
1210
 
1170
1211
  ```
1171
- _analysis.fit_mode joint
1212
+ _fit.minimizer_type lmfit
1213
+ _fit.mode joint
1172
1214
 
1173
1215
  loop_
1174
1216
  _joint_fit_experiment.id
@@ -1326,16 +1368,16 @@ in `KNOWN_ALIASES` inside the tool script.
1326
1368
 
1327
1369
  ### 10.3 What to Test per Source Module Type
1328
1370
 
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. |
1371
+ | Source module type | Required tests |
1372
+ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
1373
+ | **Core base class** (`core/`) | Instantiation, public properties, validation edge cases, identity wiring. |
1374
+ | **Factory** (`factory.py`) | Registration check, `supported_tags()`, `default_tag()`, `create()` for each tag, `show_supported()` output, invalid-tag handling. |
1375
+ | **Category** (`default.py`) | Instantiation, all public properties (read + write where applicable), CIF round-trip (`as_cif` → `from_cif`), parameter enumeration. |
1376
+ | **Enum** (`enums.py`) | Membership of all members, `default()` method, `description()` for every member, `StrEnum` string equality. |
1377
+ | **Datablock item** (`base.py`) | Construction, switchable-category full API (`<cat>`, `<cat>_type` get/set, `show_<cat>_types`), `show`/`show_as_cif`. |
1378
+ | **Collection** (`collection.py`) | `create`, `add`, `remove`, `names`, `show_names`, `show_params`, iteration, duplicate-name handling. |
1379
+ | **Calculator / Minimizer** | `can_handle()` with compatible and incompatible experiment types, `_compute()` stub or mock. |
1380
+ | **Display / IO** | Input → output for representative cases; file-not-found and malformed-input error paths. |
1339
1381
 
1340
1382
  ### 10.4 Test Conventions
1341
1383
 
@@ -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.