easydiffraction 0.11.1__tar.gz → 0.12.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 (552) hide show
  1. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.copier-answers.yml +3 -3
  2. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/copilot-instructions.md +37 -1
  3. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/backmerge.yml +5 -0
  4. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/cleanup.yml +5 -0
  5. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/coverage.yml +9 -4
  6. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/dashboard.yml +3 -0
  7. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/docs.yml +3 -0
  8. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/issues-labels.yml +11 -0
  9. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/lint-format.yml +3 -0
  10. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/pypi-publish.yml +5 -0
  11. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/pypi-test.yml +20 -9
  12. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/release-notes.yml +5 -0
  13. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/release-pr.yml +3 -0
  14. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/security.yml +5 -0
  15. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/test-trigger.yml +5 -0
  16. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/test.yml +13 -3
  17. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/tutorial-tests-trigger.yml +5 -0
  18. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/tutorial-tests.yml +3 -0
  19. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.gitignore +5 -0
  20. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.pre-commit-config.yaml +14 -0
  21. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/PKG-INFO +3 -5
  22. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/architecture.md +135 -9
  23. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/issues_closed.md +50 -0
  24. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/issues_open.md +15 -80
  25. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/package-structure-full.md +98 -35
  26. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/architecture/package-structure-short.md +61 -16
  27. easydiffraction-0.12.0/docs/architecture/sequential_fitting_design.md +1269 -0
  28. easydiffraction-0.12.0/docs/docs/cli/index.md +90 -0
  29. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/index.md +5 -2
  30. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/installation-and-setup/index.md +87 -127
  31. easydiffraction-0.12.0/docs/docs/introduction/index.md +74 -0
  32. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-1.ipynb +84 -23
  33. easydiffraction-0.12.0/docs/docs/tutorials/ed-1.py +110 -0
  34. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-10.ipynb +3 -3
  35. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-10.py +2 -2
  36. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-11.ipynb +3 -3
  37. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-11.py +2 -2
  38. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-12.ipynb +3 -3
  39. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-12.py +2 -2
  40. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-13.ipynb +30 -30
  41. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-13.py +28 -28
  42. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-14.ipynb +4 -4
  43. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-14.py +3 -3
  44. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-15.ipynb +4 -4
  45. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-15.py +3 -3
  46. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-16.ipynb +8 -18
  47. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-16.py +6 -9
  48. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-17.ipynb +203 -118
  49. easydiffraction-0.12.0/docs/docs/tutorials/ed-17.py +364 -0
  50. easydiffraction-0.12.0/docs/docs/tutorials/ed-18.ipynb +178 -0
  51. easydiffraction-0.12.0/docs/docs/tutorials/ed-18.py +56 -0
  52. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-2.ipynb +4 -4
  53. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-2.py +3 -3
  54. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-3.ipynb +66 -118
  55. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-3.py +35 -52
  56. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-4.ipynb +4 -4
  57. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-4.py +3 -3
  58. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-5.ipynb +18 -34
  59. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-5.py +7 -12
  60. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-6.ipynb +19 -19
  61. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-6.py +18 -18
  62. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-7.ipynb +19 -19
  63. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-7.py +18 -18
  64. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-8.ipynb +6 -6
  65. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-8.py +5 -5
  66. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-9.ipynb +5 -5
  67. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/ed-9.py +4 -4
  68. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/index.json +7 -0
  69. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/tutorials/index.md +12 -8
  70. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/analysis.md +2 -2
  71. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/first-steps.md +12 -11
  72. easydiffraction-0.12.0/docs/docs/user-guide/index.md +24 -0
  73. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters.md +1 -1
  74. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/mkdocs.yml +4 -1
  75. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/pixi.lock +5009 -5799
  76. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/pixi.toml +22 -10
  77. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/pyproject.toml +64 -43
  78. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/__init__.py +1 -0
  79. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/__main__.py +24 -3
  80. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/analysis.py +594 -398
  81. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/base.py +0 -4
  82. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/crysfml.py +31 -21
  83. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/cryspy.py +357 -234
  84. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/factory.py +3 -4
  85. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/pdffit.py +4 -5
  86. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/aliases/default.py +61 -19
  87. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/aliases/factory.py +3 -1
  88. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/constraints/default.py +17 -7
  89. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/constraints/factory.py +3 -1
  90. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/enums.py +3 -3
  91. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/factory.py +3 -1
  92. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/factory.py +3 -1
  93. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/metrics.py +13 -12
  94. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/reporting.py +84 -77
  95. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/tracking.py +19 -21
  96. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fitting.py +47 -67
  97. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/base.py +26 -33
  98. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/dfols.py +5 -7
  99. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/factory.py +3 -1
  100. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/lmfit.py +9 -11
  101. easydiffraction-0.12.0/src/easydiffraction/analysis/sequential.py +887 -0
  102. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/category.py +6 -8
  103. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/collection.py +11 -15
  104. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/datablock.py +26 -5
  105. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/diagnostic.py +5 -3
  106. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/factory.py +11 -13
  107. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/guard.py +8 -5
  108. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/identity.py +1 -1
  109. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/metadata.py +6 -7
  110. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/singleton.py +31 -70
  111. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/validation.py +3 -2
  112. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/variable.py +14 -26
  113. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/crystallography/crystallography.py +76 -41
  114. easydiffraction-0.12.0/src/easydiffraction/crystallography/space_groups.py +98 -0
  115. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/base.py +0 -1
  116. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/chebyshev.py +2 -5
  117. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/enums.py +4 -4
  118. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/factory.py +5 -1
  119. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/line_segment.py +2 -4
  120. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_pd.py +10 -8
  121. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/factory.py +5 -1
  122. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/total_pd.py +2 -3
  123. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/factory.py +3 -1
  124. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/default.py +2 -4
  125. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/factory.py +3 -1
  126. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/factory.py +3 -1
  127. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/extinction/factory.py +3 -1
  128. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/extinction/shelx.py +2 -2
  129. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/factory.py +5 -1
  130. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/tof.py +8 -8
  131. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/factory.py +3 -1
  132. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/factory.py +3 -1
  133. easydiffraction-0.12.0/src/easydiffraction/datablocks/experiment/categories/peak/base.py +39 -0
  134. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl.py +3 -3
  135. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/cwl_mixins.py +5 -5
  136. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/factory.py +5 -1
  137. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof.py +1 -1
  138. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/tof_mixins.py +14 -14
  139. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/collection.py +8 -10
  140. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/base.py +78 -21
  141. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/bragg_pd.py +15 -8
  142. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/bragg_sc.py +18 -16
  143. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/enums.py +17 -17
  144. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/factory.py +7 -13
  145. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/total_pd.py +22 -10
  146. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/factory.py +3 -1
  147. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/cell/factory.py +3 -1
  148. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/space_group/default.py +2 -2
  149. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/space_group/factory.py +3 -1
  150. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/item/base.py +4 -4
  151. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/base.py +5 -6
  152. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/plotters/ascii.py +6 -3
  153. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/plotters/base.py +52 -20
  154. easydiffraction-0.12.0/src/easydiffraction/display/plotters/plotly.py +699 -0
  155. easydiffraction-0.12.0/src/easydiffraction/display/plotting.py +1362 -0
  156. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/base.py +4 -3
  157. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/pandas.py +10 -6
  158. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/rich.py +9 -6
  159. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tables.py +4 -4
  160. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/utils.py +3 -3
  161. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/__init__.py +1 -0
  162. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/ascii.py +92 -19
  163. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/cif/parse.py +36 -0
  164. easydiffraction-0.12.0/src/easydiffraction/io/cif/serialize.py +659 -0
  165. easydiffraction-0.12.0/src/easydiffraction/project/project.py +473 -0
  166. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/project/project_info.py +0 -1
  167. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/summary/summary.py +7 -8
  168. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/theme_detect.py +2 -4
  169. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/enums.py +2 -2
  170. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/environment.py +16 -20
  171. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/logging.py +41 -27
  172. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/utils.py +48 -33
  173. easydiffraction-0.12.0/tests/functional/conftest.py +29 -0
  174. easydiffraction-0.12.0/tests/functional/test_experiment_workflow.py +130 -0
  175. easydiffraction-0.12.0/tests/functional/test_fitting_workflow.py +185 -0
  176. easydiffraction-0.12.0/tests/functional/test_project_lifecycle.py +118 -0
  177. easydiffraction-0.12.0/tests/functional/test_structure_workflow.py +139 -0
  178. easydiffraction-0.12.0/tests/functional/test_switchable_categories.py +65 -0
  179. easydiffraction-0.12.0/tests/integration/fitting/conftest.py +89 -0
  180. easydiffraction-0.12.0/tests/integration/fitting/test_analysis_display.py +95 -0
  181. easydiffraction-0.12.0/tests/integration/fitting/test_cif_round_trip.py +322 -0
  182. easydiffraction-0.12.0/tests/integration/fitting/test_exploration_help.py +163 -0
  183. easydiffraction-0.12.0/tests/integration/fitting/test_plotting.py +29 -0
  184. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_powder-diffraction_constant-wavelength.py +55 -7
  185. easydiffraction-0.12.0/tests/integration/fitting/test_project_load.py +246 -0
  186. easydiffraction-0.12.0/tests/integration/fitting/test_sequential.py +369 -0
  187. easydiffraction-0.12.0/tests/integration/fitting/test_summary_report.py +36 -0
  188. easydiffraction-0.12.0/tests/integration/fitting/test_switch-calculator.py +71 -0
  189. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_analyze_reduced_data.py +13 -14
  190. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_factory.py +4 -1
  191. easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +111 -0
  192. easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/categories/test_aliases.py +27 -0
  193. easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/categories/test_fit_mode.py +85 -0
  194. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_metrics.py +9 -8
  195. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_base.py +4 -2
  196. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_dfols.py +8 -4
  197. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_factory.py +8 -6
  198. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/minimizers/test_lmfit.py +6 -3
  199. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_analysis.py +10 -9
  200. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_analysis_access_params.py +2 -2
  201. easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/test_analysis_coverage.py +290 -0
  202. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_analysis_show_empty.py +6 -6
  203. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/test_fitting.py +8 -16
  204. easydiffraction-0.12.0/tests/unit/easydiffraction/analysis/test_sequential.py +302 -0
  205. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_category.py +5 -2
  206. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_collection.py +5 -3
  207. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_diagnostic.py +1 -1
  208. easydiffraction-0.12.0/tests/unit/easydiffraction/core/test_factory.py +246 -0
  209. easydiffraction-0.12.0/tests/unit/easydiffraction/core/test_metadata.py +101 -0
  210. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_parameters.py +11 -5
  211. easydiffraction-0.12.0/tests/unit/easydiffraction/core/test_singletons.py +10 -0
  212. easydiffraction-0.12.0/tests/unit/easydiffraction/crystallography/test_crystallography_coverage.py +98 -0
  213. easydiffraction-0.12.0/tests/unit/easydiffraction/crystallography/test_crystallography_wyckoff.py +55 -0
  214. easydiffraction-0.12.0/tests/unit/easydiffraction/crystallography/test_space_groups_coverage.py +71 -0
  215. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_base.py +4 -1
  216. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_chebyshev.py +2 -1
  217. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_factory.py +4 -1
  218. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_line_segment.py +3 -5
  219. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_factory.py +4 -10
  220. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_factory.py +4 -1
  221. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_tof.py +2 -1
  222. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_base.py +48 -0
  223. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py +4 -1
  224. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/categories/test_diffrn.py +72 -0
  225. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_excluded_regions.py +3 -1
  226. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_phases.py +5 -2
  227. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_base.py +160 -0
  228. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_base_coverage.py +225 -0
  229. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_pd.py +2 -2
  230. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc_coverage.py +187 -0
  231. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_enums_coverage.py +178 -0
  232. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_factory.py +32 -1
  233. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/experiment/item/test_factory_coverage.py +92 -0
  234. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_total_pd.py +1 -1
  235. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/categories/test_atom_sites.py +132 -0
  236. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/categories/test_cell.py +83 -0
  237. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/item/test_base_coverage.py +179 -0
  238. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/test_collection.py +2 -0
  239. easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/test_collection_coverage.py +58 -0
  240. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/display/plotters/test_plotly.py +38 -1
  241. easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/__init__.py +2 -0
  242. easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/test_base.py +55 -0
  243. easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/test_pandas.py +33 -0
  244. easydiffraction-0.12.0/tests/unit/easydiffraction/display/tablers/test_rich.py +44 -0
  245. easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_base.py +37 -0
  246. easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_plotting.py +506 -0
  247. easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_plotting_coverage.py +521 -0
  248. easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_tables.py +61 -0
  249. easydiffraction-0.12.0/tests/unit/easydiffraction/display/test_utils.py +29 -0
  250. easydiffraction-0.12.0/tests/unit/easydiffraction/io/cif/test_parse.py +86 -0
  251. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/io/cif/test_serialize.py +5 -3
  252. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/io/cif/test_serialize_more.py +19 -10
  253. easydiffraction-0.12.0/tests/unit/easydiffraction/io/test_ascii.py +196 -0
  254. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project.py +1 -1
  255. easydiffraction-0.12.0/tests/unit/easydiffraction/project/test_project_load.py +142 -0
  256. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project_load_and_summary_wrap.py +17 -5
  257. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project_save.py +2 -2
  258. easydiffraction-0.12.0/tests/unit/easydiffraction/summary/test_summary_details.py +154 -0
  259. easydiffraction-0.12.0/tests/unit/easydiffraction/test___main__.py +153 -0
  260. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_enums.py +1 -1
  261. easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_environment.py +86 -0
  262. easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_environment_coverage.py +52 -0
  263. easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_logging_coverage.py +150 -0
  264. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_utils.py +10 -5
  265. easydiffraction-0.12.0/tests/unit/easydiffraction/utils/test_utils_coverage.py +461 -0
  266. easydiffraction-0.12.0/tmp/cli/lbco_hrpt/analysis/analysis.cif +15 -0
  267. easydiffraction-0.12.0/tmp/cli/lbco_hrpt/experiments/hrpt.cif +3156 -0
  268. easydiffraction-0.12.0/tmp/cli/lbco_hrpt/project.cif +5 -0
  269. easydiffraction-0.12.0/tmp/cli/lbco_hrpt/structures/lbco.cif +26 -0
  270. easydiffraction-0.12.0/tmp/cli/lbco_hrpt/summary.cif +1 -0
  271. {easydiffraction-0.11.1/docs/docs/tutorials → easydiffraction-0.12.0/tmp/correlations}/ed-1.py +43 -7
  272. easydiffraction-0.12.0/tmp/hep7c/data/HEP_7c_LaMe_riet.dat +9101 -0
  273. easydiffraction-0.12.0/tmp/hep7c/data/hep7c_4.dat +1469 -0
  274. easydiffraction-0.12.0/tmp/hep7c/hep7c_I/analysis/analysis.cif +25 -0
  275. easydiffraction-0.12.0/tmp/hep7c/hep7c_I/experiments/pd_xray_1.cif +1540 -0
  276. easydiffraction-0.12.0/tmp/hep7c/hep7c_I/project.cif +5 -0
  277. easydiffraction-0.12.0/tmp/hep7c/hep7c_I/structures/lam7o3.cif +32 -0
  278. easydiffraction-0.12.0/tmp/hep7c/hep7c_I/summary.cif +1 -0
  279. easydiffraction-0.12.0/tmp/hep7c/hep7c_I.py +514 -0
  280. easydiffraction-0.12.0/tmp/hep7c/hep7c_II/analysis/analysis.cif +25 -0
  281. easydiffraction-0.12.0/tmp/hep7c/hep7c_II/experiments/pd_xray_2.cif +9192 -0
  282. easydiffraction-0.12.0/tmp/hep7c/hep7c_II/project.cif +5 -0
  283. easydiffraction-0.12.0/tmp/hep7c/hep7c_II/structures/lam7o3.cif +32 -0
  284. easydiffraction-0.12.0/tmp/hep7c/hep7c_II/summary.cif +1 -0
  285. easydiffraction-0.12.0/tmp/hep7c/hep7c_II.py +534 -0
  286. easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/analysis/analysis.cif +31 -0
  287. easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/experiments/pd_xray_1.cif +1540 -0
  288. easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/experiments/pd_xray_2.cif +9192 -0
  289. easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/project.cif +5 -0
  290. easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/structures/lam7o3.cif +32 -0
  291. easydiffraction-0.12.0/tmp/hep7c/hep7c_joint/summary.cif +1 -0
  292. easydiffraction-0.12.0/tmp/hep7c/hep7c_joint.py +228 -0
  293. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/_read_cif.py +1 -1
  294. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/basic_single-fit_pd-neut-cwl_LBCO-HRPT.py +12 -12
  295. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short.py +1 -1
  296. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short2.py +1 -1
  297. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/gen_tests_scaffold.py +1 -1
  298. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/param_consistency.py +5 -2
  299. easydiffraction-0.12.0/tools/test_structure_check.py +199 -0
  300. easydiffraction-0.11.1/deps/pycrysfml-0.1.6-py312-none-macosx_14_0_arm64.whl +0 -0
  301. easydiffraction-0.11.1/deps/pycrysfml-0.1.6-py312-none-win_amd64.whl +0 -0
  302. easydiffraction-0.11.1/docs/docs/introduction/index.md +0 -76
  303. easydiffraction-0.11.1/docs/docs/tutorials/ed-17.py +0 -327
  304. easydiffraction-0.11.1/docs/docs/user-guide/index.md +0 -24
  305. easydiffraction-0.11.1/pycrysfml.md +0 -27
  306. easydiffraction-0.11.1/src/easydiffraction/crystallography/space_groups.py +0 -34
  307. easydiffraction-0.11.1/src/easydiffraction/datablocks/experiment/categories/peak/base.py +0 -13
  308. easydiffraction-0.11.1/src/easydiffraction/display/plotters/plotly.py +0 -413
  309. easydiffraction-0.11.1/src/easydiffraction/display/plotting.py +0 -688
  310. easydiffraction-0.11.1/src/easydiffraction/io/cif/serialize.py +0 -392
  311. easydiffraction-0.11.1/src/easydiffraction/project/project.py +0 -384
  312. easydiffraction-0.11.1/tests/unit/easydiffraction/analysis/calculators/test_pdffit.py +0 -98
  313. easydiffraction-0.11.1/tests/unit/easydiffraction/analysis/categories/test_aliases.py +0 -17
  314. easydiffraction-0.11.1/tests/unit/easydiffraction/core/test_factory.py +0 -2
  315. easydiffraction-0.11.1/tests/unit/easydiffraction/core/test_singletons.py +0 -12
  316. easydiffraction-0.11.1/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_base.py +0 -13
  317. easydiffraction-0.11.1/tests/unit/easydiffraction/datablocks/experiment/item/test_base.py +0 -38
  318. easydiffraction-0.11.1/tests/unit/easydiffraction/display/test_plotting.py +0 -155
  319. easydiffraction-0.11.1/tests/unit/easydiffraction/summary/test_summary_details.py +0 -135
  320. easydiffraction-0.11.1/tests/unit/easydiffraction/test___main__.py +0 -66
  321. easydiffraction-0.11.1/tools/convert_google_docstrings_to_numpy.py +0 -539
  322. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.badgery.yaml +0 -0
  323. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.codefactorignore +0 -0
  324. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/download-artifact/action.yml +0 -0
  325. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/github-script/action.yml +0 -0
  326. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/setup-easyscience-bot/action.yml +0 -0
  327. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/setup-pixi/action.yml +0 -0
  328. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/upload-artifact/action.yml +0 -0
  329. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/actions/upload-codecov/action.yml +0 -0
  330. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/pages-deployment.json +0 -0
  331. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/rulesets-develop.json +0 -0
  332. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/rulesets-gh-pages.json +0 -0
  333. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/configs/rulesets-master.json +0 -0
  334. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/scripts/backmerge-conflict-issue.js +0 -0
  335. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/pr-labels.yml +0 -0
  336. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.github/workflows/tutorial-tests-colab.yaml +0 -0
  337. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/.prettierignore +0 -0
  338. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/CONTRIBUTING.md +0 -0
  339. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/LICENSE +0 -0
  340. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/README.md +0 -0
  341. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/codecov.yml +0 -0
  342. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/analysis.md +0 -0
  343. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/core.md +0 -0
  344. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/crystallography.md +0 -0
  345. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/datablocks/experiment.md +0 -0
  346. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/datablocks/structure.md +0 -0
  347. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/display.md +0 -0
  348. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/index.md +0 -0
  349. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/io.md +0 -0
  350. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/project.md +0 -0
  351. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/summary.md +0 -0
  352. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/api-reference/utils.md +0 -0
  353. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/favicon.png +0 -0
  354. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/logo_dark.svg +0 -0
  355. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/logo_light.svg +0 -0
  356. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-acquisition_2d-raw-data.jpg +0 -0
  357. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-acquisition_instrument.png +0 -0
  358. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-analysis_model.png +0 -0
  359. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-analysis_refinement.png +0 -0
  360. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/images/user-guide/data-reduction_1d-pattern.png +0 -0
  361. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/javascripts/extra.js +0 -0
  362. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/javascripts/mathjax.js +0 -0
  363. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/assets/stylesheets/extra.css +0 -0
  364. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/experiment.md +0 -0
  365. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/index.md +0 -0
  366. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/model.md +0 -0
  367. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/project.md +0 -0
  368. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/analysis-workflow/summary.md +0 -0
  369. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/concept.md +0 -0
  370. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/data-format.md +0 -0
  371. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/glossary.md +0 -0
  372. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_diffrn_radiation.md +0 -0
  373. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_diffrn_radiation_wavelength.md +0 -0
  374. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_exptl_crystal.md +0 -0
  375. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_extinction.md +0 -0
  376. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/_pd_calib.md +0 -0
  377. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/atom_site.md +0 -0
  378. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/background.md +0 -0
  379. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/cell.md +0 -0
  380. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/expt_type.md +0 -0
  381. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/instrument.md +0 -0
  382. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/linked_phases.md +0 -0
  383. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/pd_meas.md +0 -0
  384. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/peak.md +0 -0
  385. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/docs/user-guide/parameters/space_group.md +0 -0
  386. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/includes/abbreviations.md +0 -0
  387. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/app.svg +0 -0
  388. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/easydiffraction.svg +0 -0
  389. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/easyscience.svg +0 -0
  390. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/.icons/google-colab.svg +0 -0
  391. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/main.html +0 -0
  392. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/docs/overrides/partials/logo.html +0 -0
  393. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/prettierrc.toml +0 -0
  394. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/__init__.py +0 -0
  395. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/calculators/__init__.py +0 -0
  396. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/__init__.py +0 -0
  397. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/aliases/__init__.py +0 -0
  398. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/constraints/__init__.py +0 -0
  399. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/__init__.py +0 -0
  400. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/fit_mode/fit_mode.py +0 -0
  401. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/__init__.py +0 -0
  402. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/categories/joint_fit_experiments/default.py +0 -0
  403. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/fit_helpers/__init__.py +0 -0
  404. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/analysis/minimizers/__init__.py +0 -0
  405. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/core/__init__.py +0 -0
  406. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/crystallography/__init__.py +0 -0
  407. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/crystallography/space_groups.pkl.gz +0 -0
  408. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/__init__.py +0 -0
  409. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/__init__.py +0 -0
  410. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/__init__.py +0 -0
  411. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/background/__init__.py +0 -0
  412. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/__init__.py +0 -0
  413. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/data/bragg_sc.py +0 -0
  414. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/__init__.py +0 -0
  415. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/diffrn/default.py +0 -0
  416. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/excluded_regions/__init__.py +0 -0
  417. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/__init__.py +0 -0
  418. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/experiment_type/default.py +0 -0
  419. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/extinction/__init__.py +0 -0
  420. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/__init__.py +0 -0
  421. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/base.py +0 -0
  422. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/instrument/cwl.py +0 -0
  423. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/__init__.py +0 -0
  424. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_crystal/default.py +0 -0
  425. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/__init__.py +0 -0
  426. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/linked_phases/default.py +0 -0
  427. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/__init__.py +0 -0
  428. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/total.py +0 -0
  429. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/categories/peak/total_mixins.py +0 -0
  430. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/experiment/item/__init__.py +0 -0
  431. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/__init__.py +0 -0
  432. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/__init__.py +0 -0
  433. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/__init__.py +0 -0
  434. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/atom_sites/default.py +0 -0
  435. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/cell/__init__.py +0 -0
  436. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/cell/default.py +0 -0
  437. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/categories/space_group/__init__.py +0 -0
  438. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/collection.py +0 -0
  439. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/item/__init__.py +0 -0
  440. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/datablocks/structure/item/factory.py +0 -0
  441. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/__init__.py +0 -0
  442. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/plotters/__init__.py +0 -0
  443. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/display/tablers/__init__.py +0 -0
  444. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/cif/__init__.py +0 -0
  445. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/io/cif/handler.py +0 -0
  446. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/project/__init__.py +0 -0
  447. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/summary/__init__.py +0 -0
  448. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/__init__.py +0 -0
  449. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/__init__.py +0 -0
  450. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/__init__.py +0 -0
  451. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/src/easydiffraction/utils/_vendored/jupyter_dark_detect/detector.py +0 -0
  452. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_multi.py +0 -0
  453. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_pair-distribution-function.py +0 -0
  454. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_powder-diffraction_joint-fit.py +0 -0
  455. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_powder-diffraction_time-of-flight.py +0 -0
  456. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/fitting/test_single-crystal-diffraction.py +0 -0
  457. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/conftest.py +0 -0
  458. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_package_import.py +0 -0
  459. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_read_reduced_data.py +0 -0
  460. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_validate_meta_data.py +0 -0
  461. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/integration/scipp-analysis/dream/test_validate_physical_data.py +0 -0
  462. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_base.py +0 -0
  463. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_crysfml.py +0 -0
  464. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +0 -0
  465. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/categories/test_constraints.py +0 -0
  466. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/categories/test_joint_fit_experiments.py +0 -0
  467. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py +0 -0
  468. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/analysis/fit_helpers/test_tracking.py +0 -0
  469. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_datablock.py +0 -0
  470. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_guard.py +0 -0
  471. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_identity.py +0 -0
  472. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/core/test_validation.py +0 -0
  473. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/crystallography/test_crystallography.py +0 -0
  474. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/crystallography/test_space_groups.py +0 -0
  475. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/background/test_enums.py +0 -0
  476. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_pd.py +0 -0
  477. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_bragg_sc.py +0 -0
  478. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/data/test_total_pd.py +0 -0
  479. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_base.py +0 -0
  480. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_cwl.py +0 -0
  481. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl.py +0 -0
  482. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_cwl_mixins.py +0 -0
  483. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof.py +0 -0
  484. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof_mixins.py +0 -0
  485. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total.py +0 -0
  486. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_total_mixins.py +0 -0
  487. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_experiment_type.py +0 -0
  488. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_extinction.py +0 -0
  489. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/categories/test_linked_crystal.py +0 -0
  490. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc.py +0 -0
  491. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/item/test_enums.py +0 -0
  492. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/experiment/test_collection.py +0 -0
  493. /easydiffraction-0.11.1/tests/unit/easydiffraction/datablocks/structure/test_collection.py → /easydiffraction-0.12.0/tests/unit/easydiffraction/datablocks/structure/categories/__init__.py +0 -0
  494. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/structure/categories/test_space_group.py +0 -0
  495. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/structure/item/test_base.py +0 -0
  496. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/datablocks/structure/item/test_factory.py +0 -0
  497. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/display/plotters/test_ascii.py +0 -0
  498. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/display/plotters/test_base.py +0 -0
  499. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/io/cif/test_handler.py +0 -0
  500. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/project/test_project_info.py +0 -0
  501. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/summary/test_summary.py +0 -0
  502. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/test___init__.py +0 -0
  503. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_logging.py +0 -0
  504. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tests/unit/easydiffraction/utils/test_theme_detect.py +0 -0
  505. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_cif.xye +0 -0
  506. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_cif_2.xye +0 -0
  507. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_nc.xye +0 -0
  508. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/DREAM_mantle_bc240_nist_nc_2.xye +0 -0
  509. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/Si_mp-149_symmetrized_mcstas.cif +0 -0
  510. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/hrpt.cif +0 -0
  511. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/hrpt_lbco.xye +0 -0
  512. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/large_structure.cif +0 -0
  513. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data/lbco.cif +0 -0
  514. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/mcstas_lbco-si.xys +0 -0
  515. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/mcstas_lbco-si_up-to-108k.xys +0 -0
  516. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/powder_reduced_Si_2large_bank.xye +0 -0
  517. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/reduced_LBCO.xye +0 -0
  518. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/reduced_Si.xye +0 -0
  519. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf.xye +0 -0
  520. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_2_9.xye +0 -0
  521. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_4_7.xye +0 -0
  522. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_4_7.xys +0 -0
  523. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ncaf_5_6.xye +0 -0
  524. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tmp/data_old/wish_ybcfo_5_6.xye +0 -0
  525. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled.ipynb +0 -0
  526. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled0.ipynb +0 -0
  527. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled1.ipynb +0 -0
  528. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/Untitled2.ipynb +0 -0
  529. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/__validator.py +0 -0
  530. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/_gemmi.py +0 -0
  531. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/_smart.py +0 -0
  532. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/cryst-struct_pd-neut-tof_multiphase-BSFTO-HRPT.py +0 -0
  533. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display.py +0 -0
  534. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display2.py +0 -0
  535. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display3-Copy1.py +0 -0
  536. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/display3.py +0 -0
  537. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/generate_overview_mermaid.py +0 -0
  538. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/hrpt_n_Bi0p88Sm0p12Fe0p94Ti0p06O3_DW_V_9x8x52_1p49_HI.xye +0 -0
  539. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short3.py +0 -0
  540. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short5.py +0 -0
  541. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short6.py +0 -0
  542. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/short7.py +0 -0
  543. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/show_d401.py +0 -0
  544. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/show_w505.py +0 -0
  545. {easydiffraction-0.11.1/tmp → easydiffraction-0.12.0/tmp/unsorted}/test_single-fit_pd-neut-tof_Si-DREAM_nc.py +0 -0
  546. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/generate_package_docs.py +0 -0
  547. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/license_headers.py +0 -0
  548. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/naming_check.py +0 -0
  549. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/test_scripts.py +0 -0
  550. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/tweak_notebooks.py +0 -0
  551. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/update_docs_assets.py +0 -0
  552. {easydiffraction-0.11.1 → easydiffraction-0.12.0}/tools/update_github_labels.py +0 -0
@@ -1,11 +1,11 @@
1
1
  # WARNING: Do not edit this file manually.
2
2
  # Any changes will be overwritten by Copier.
3
- _commit: v0.10.1-33-g0f85abf
3
+ _commit: v0.10.1-40-g29e2ccf
4
4
  _src_path: gh:easyscience/templates
5
5
  app_docs_url: https://easyscience.github.io/diffraction-app
6
6
  app_doi: 10.5281/zenodo.18163581
7
7
  app_package_name: easydiffraction_app
8
- app_python: '3.13'
8
+ app_python: '3.14'
9
9
  app_repo_name: diffraction-app
10
10
  home_page_url: https://easyscience.github.io/diffraction
11
11
  home_repo_name: diffraction
@@ -13,7 +13,7 @@ lib_docs_url: https://easyscience.github.io/diffraction-lib
13
13
  lib_doi: 10.5281/zenodo.18163581
14
14
  lib_package_name: easydiffraction
15
15
  lib_python_max: '3.14'
16
- lib_python_min: '3.11'
16
+ lib_python_min: '3.12'
17
17
  lib_repo_name: diffraction-lib
18
18
  project_contact_email: support@easydiffraction.org
19
19
  project_copyright_years: 2021-2026
@@ -42,7 +42,8 @@
42
42
  and UPPER_SNAKE_CASE for constants.
43
43
  - Use `from __future__ import annotations` in every module.
44
44
  - Type-annotate all public function signatures.
45
- - Docstrings on all public classes and methods (numpy style).
45
+ - Docstrings on all public classes and methods (numpy style). These must
46
+ include sections Parameters, Returns and Raises, where applicable.
46
47
  - Prefer flat over nested, explicit over clever.
47
48
  - Write straightforward code; do not add defensive checks for unlikely
48
49
  edge cases.
@@ -59,6 +60,19 @@
59
60
  with both getter and setter) or **read-only** (property with getter
60
61
  only). If internal code needs to mutate a read-only property, add a
61
62
  private `_set_<name>` method instead of exposing a public setter.
63
+ - Lint complexity thresholds (`max-args`, `max-branches`,
64
+ `max-statements`, `max-locals`, `max-nested-blocks`, etc. in
65
+ `pyproject.toml`) are intentional code-quality guardrails. They are
66
+ not arbitrary numbers — the project uses ruff's defaults (with
67
+ `max-args` and `max-positional-args` set to 6 instead of 5 to account
68
+ for ruff counting `self`/`cls`). When code violates a threshold, it is
69
+ a signal that the function or class needs refactoring — not that the
70
+ threshold needs raising. Do not raise thresholds, add `# noqa`
71
+ comments, or use any other mechanism to silence complexity violations.
72
+ Instead, refactor the code (extract helpers, introduce parameter
73
+ objects, flatten nesting, etc.). For complex refactors that touch many
74
+ lines or change public API, propose a refactoring plan and wait for
75
+ approval before proceeding.
62
76
 
63
77
  ## Architecture
64
78
 
@@ -107,6 +121,26 @@
107
121
  `*.py` script, then run `pixi run notebook-prepare` to regenerate the
108
122
  notebook.
109
123
 
124
+ ## Testing
125
+
126
+ - Every new module, class, or bug fix must ship with tests. See
127
+ `docs/architecture/architecture.md` §10 for the full test strategy.
128
+ - **Unit tests mirror the source tree:**
129
+ `src/easydiffraction/<pkg>/<mod>.py` →
130
+ `tests/unit/easydiffraction/<pkg>/test_<mod>.py`. Run
131
+ `pixi run test-structure-check` to verify.
132
+ - Category packages with only `default.py`/`factory.py` may use a single
133
+ parent-level `test_<package>.py` instead of per-file tests.
134
+ - Supplementary test files use the pattern `test_<mod>_coverage.py`.
135
+ - Tests that expect `log.error()` to raise must `monkeypatch` Logger to
136
+ RAISE mode (another test may have leaked WARN mode).
137
+ - `@typechecked` setters raise `typeguard.TypeCheckError`, not
138
+ `TypeError`.
139
+ - No test-ordering dependence, no network, no sleeping, no real
140
+ calculation engines in unit tests.
141
+ - After adding or modifying tests, run `pixi run unit-tests` and confirm
142
+ all tests pass.
143
+
110
144
  ## Changes
111
145
 
112
146
  - Before implementing any structural or design change (new categories,
@@ -147,6 +181,8 @@
147
181
  `docs/architecture/architecture.md`.
148
182
  - After changes, run linting and formatting fixes with `pixi run fix`.
149
183
  Do not check what was auto-fixed, just accept the fixes and move on.
184
+ Then, run linting and formatting checks with `pixi run check` and
185
+ address any remaining issues until the code is clean.
150
186
  - After changes, run unit tests with `pixi run unit-tests`.
151
187
  - After changes, run integration tests with
152
188
  `pixi run integration-tests`.
@@ -20,6 +20,11 @@ concurrency:
20
20
  group: backmerge-master-into-develop
21
21
  cancel-in-progress: false
22
22
 
23
+ # Opt into Node.js 24 for all JavaScript actions.
24
+ # Remove once all referenced actions natively target Node 24.
25
+ env:
26
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
27
+
23
28
  jobs:
24
29
  backmerge:
25
30
  runs-on: ubuntu-latest
@@ -61,6 +61,11 @@ on:
61
61
  - 'false'
62
62
  - 'true'
63
63
 
64
+ # Opt into Node.js 24 for all JavaScript actions.
65
+ # Remove once all referenced actions natively target Node 24.
66
+ env:
67
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
68
+
64
69
  jobs:
65
70
  del-runs:
66
71
  runs-on: ubuntu-latest
@@ -1,8 +1,10 @@
1
1
  name: Coverage checks
2
2
 
3
3
  on:
4
- # Trigger the workflow on push
4
+ # Trigger the workflow on push to develop
5
5
  push:
6
+ branches:
7
+ - develop
6
8
  # Do not run on version tags (those are handled by other workflows)
7
9
  tags-ignore: ['v*']
8
10
  # Trigger the workflow on pull request
@@ -15,15 +17,18 @@ permissions:
15
17
  actions: write
16
18
  contents: read
17
19
 
18
- # Allow only one concurrent workflow, skipping runs queued between the run
19
- # in-progress and latest queued. And cancel in-progress runs.
20
+ # Allow only one concurrent workflow per PR or branch ref.
21
+ # Cancel in-progress runs only for pull requests, but let branch push runs finish.
20
22
  concurrency:
21
23
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
22
- cancel-in-progress: true
24
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
23
25
 
24
26
  # Set the environment variables to be used in all jobs defined in this workflow
25
27
  env:
26
28
  CI_BRANCH: ${{ github.head_ref || github.ref_name }}
29
+ # Opt into Node.js 24 for all JavaScript actions.
30
+ # Remove once all referenced actions natively target Node 24.
31
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
27
32
 
28
33
  jobs:
29
34
  # Job 1: Run docstring coverage
@@ -14,6 +14,9 @@ env:
14
14
  DEVELOP_BRANCH: develop
15
15
  REPO_OWNER: ${{ github.repository_owner }}
16
16
  REPO_NAME: ${{ github.event.repository.name }}
17
+ # Opt into Node.js 24 for all JavaScript actions.
18
+ # Remove once all referenced actions natively target Node 24.
19
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
17
20
 
18
21
  jobs:
19
22
  dashboard:
@@ -48,6 +48,9 @@ env:
48
48
  IS_RELEASE_TAG: ${{ startsWith(github.ref, 'refs/tags/v') }}
49
49
  GITHUB_REPOSITORY: ${{ github.repository }}
50
50
  NOTEBOOKS_DIR: tutorials
51
+ # Opt into Node.js 24 for all JavaScript actions.
52
+ # Remove once all referenced actions natively target Node 24.
53
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
51
54
 
52
55
  jobs:
53
56
  # Single job that builds and deploys documentation.
@@ -11,10 +11,21 @@ on:
11
11
  permissions:
12
12
  issues: write
13
13
 
14
+ # Opt into Node.js 24 for all JavaScript actions.
15
+ # Remove once all referenced actions natively target Node 24.
16
+ env:
17
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
18
+
14
19
  jobs:
15
20
  check-labels:
21
+ if: github.actor != 'easyscience[bot]'
22
+
16
23
  runs-on: ubuntu-latest
17
24
 
25
+ concurrency:
26
+ group: issue-labels-${{ github.event.issue.number }}
27
+ cancel-in-progress: true
28
+
18
29
  steps:
19
30
  - name: Checkout repository
20
31
  uses: actions/checkout@v5
@@ -34,6 +34,9 @@ permissions:
34
34
  # Set the environment variables to be used in all jobs defined in this workflow
35
35
  env:
36
36
  CI_BRANCH: ${{ github.head_ref || github.ref_name }}
37
+ # Opt into Node.js 24 for all JavaScript actions.
38
+ # Remove once all referenced actions natively target Node 24.
39
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
37
40
 
38
41
  jobs:
39
42
  lint-format:
@@ -10,6 +10,11 @@ on:
10
10
  # Allows you to run this workflow manually from the Actions tab
11
11
  workflow_dispatch:
12
12
 
13
+ # Opt into Node.js 24 for all JavaScript actions.
14
+ # Remove once all referenced actions natively target Node 24.
15
+ env:
16
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
17
+
13
18
  jobs:
14
19
  pypi-publish:
15
20
  runs-on: ubuntu-latest
@@ -20,6 +20,9 @@ permissions:
20
20
  env:
21
21
  CI_BRANCH: ${{ github.head_ref || github.ref_name }}
22
22
  DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
23
+ # Opt into Node.js 24 for all JavaScript actions.
24
+ # Remove once all referenced actions natively target Node 24.
25
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
23
26
 
24
27
  jobs:
25
28
  # Job 1: Test installation from PyPI on multiple OS
@@ -45,30 +48,38 @@ jobs:
45
48
  - name: Init pixi project
46
49
  run: pixi init easydiffraction
47
50
 
51
+ - name: Set the minimum system requirements
52
+ run: pixi project system-requirements add macos 14.0
53
+
48
54
  - name: Add Python 3.14 from Conda
49
55
  working-directory: easydiffraction
50
56
  run: pixi add "python=3.14"
51
57
 
52
58
  - name: Add other Conda dependencies
53
59
  working-directory: easydiffraction
54
- run: pixi add gsl
55
-
56
- - name: Add easydiffraction from PyPI
57
- working-directory: easydiffraction
58
- run: pixi add --pypi "easydiffraction"
60
+ run: |
61
+ pixi add gsl
62
+ pixi add --platform osx-arm64 libcxx
59
63
 
60
- - name: Add dev dependencies from PyPI
64
+ - name: Add pycrysfml calculator from custom PyPI index
61
65
  working-directory: easydiffraction
62
- run: pixi add --pypi pytest pytest-xdist
66
+ run: |
67
+ echo '' >> pixi.toml
68
+ echo '[pypi-dependencies]' >> pixi.toml
69
+ echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
63
70
 
64
- - name: Add Pixi task as a shortcut
71
+ - name: Add easydiffraction (with dev dependencies) from PyPI
65
72
  working-directory: easydiffraction
66
- run: pixi task add easydiffraction "python -m easydiffraction"
73
+ run: pixi add --pypi "easydiffraction[dev]"
67
74
 
68
75
  - name: Run unit tests to verify the installation
69
76
  working-directory: easydiffraction
70
77
  run: pixi run python -m pytest ../tests/unit/ --color=yes -v
71
78
 
79
+ - name: Run functional tests to verify the installation
80
+ working-directory: easydiffraction
81
+ run: pixi run python -m pytest ../tests/functional/ --color=yes -v
82
+
72
83
  - name: Run integration tests to verify the installation
73
84
  working-directory: easydiffraction
74
85
  run: pixi run python -m pytest ../tests/integration/ --color=yes -n auto
@@ -10,6 +10,11 @@ on:
10
10
  # Allows you to run this workflow manually from the Actions tab
11
11
  workflow_dispatch:
12
12
 
13
+ # Opt into Node.js 24 for all JavaScript actions.
14
+ # Remove once all referenced actions natively target Node 24.
15
+ env:
16
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
17
+
13
18
  jobs:
14
19
  draft-release-notes:
15
20
  permissions:
@@ -24,6 +24,9 @@ permissions:
24
24
  env:
25
25
  DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
26
26
  SOURCE_BRANCH: ${{ inputs.source_branch || 'develop' }}
27
+ # Opt into Node.js 24 for all JavaScript actions.
28
+ # Remove once all referenced actions natively target Node 24.
29
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
27
30
 
28
31
  jobs:
29
32
  create-pull-request:
@@ -44,6 +44,11 @@ permissions:
44
44
  contents: read
45
45
  security-events: write
46
46
 
47
+ # Opt into Node.js 24 for all JavaScript actions.
48
+ # Remove once all referenced actions natively target Node 24.
49
+ env:
50
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
51
+
47
52
  jobs:
48
53
  codeql:
49
54
  name: Code scanning
@@ -10,6 +10,11 @@ on:
10
10
  permissions:
11
11
  contents: read
12
12
 
13
+ # Opt into Node.js 24 for all JavaScript actions.
14
+ # Remove once all referenced actions natively target Node 24.
15
+ env:
16
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
17
+
13
18
  jobs:
14
19
  code-tests-trigger:
15
20
  runs-on: ubuntu-latest
@@ -44,8 +44,11 @@ concurrency:
44
44
  # Set the environment variables to be used in all jobs defined in this workflow
45
45
  env:
46
46
  CI_BRANCH: ${{ github.head_ref || github.ref_name }}
47
- PY_VERSIONS: '3.11 3.14'
48
- PIXI_ENVS: 'py-311-env py-314-env'
47
+ PY_VERSIONS: '3.12 3.14'
48
+ PIXI_ENVS: 'py-312-env py-314-env'
49
+ # Opt into Node.js 24 for all JavaScript actions.
50
+ # Remove once all referenced actions natively target Node 24.
51
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
49
52
 
50
53
  jobs:
51
54
  # Job 1: Set up environment variables
@@ -214,7 +217,14 @@ jobs:
214
217
  # platform-specific deps so this is a no-op on Linux/Windows.
215
218
  echo "Adding libc++ for macOS (required by diffpy.pdffit2)"
216
219
  pixi add --platform osx-arm64 libcxx
217
- pixi add --platform osx-64 libcxx
220
+
221
+ # Doing this in a hacky way, as pixi does not support adding
222
+ # dependencies from a custom PyPI index with a CLI command without
223
+ # specifying full wheel name.
224
+ echo "Adding pycrysfml from custom PyPI index"
225
+ echo '' >> pixi.toml
226
+ echo '[pypi-dependencies]' >> pixi.toml
227
+ echo 'pycrysfml = { version = ">=0.2.1", index = "https://easyscience.github.io/pypi/" }' >> pixi.toml
218
228
 
219
229
  echo "Looking for wheel in ../dist/py$py_ver/"
220
230
  ls -l "../dist/py$py_ver/"
@@ -10,6 +10,11 @@ on:
10
10
  permissions:
11
11
  contents: read
12
12
 
13
+ # Opt into Node.js 24 for all JavaScript actions.
14
+ # Remove once all referenced actions natively target Node 24.
15
+ env:
16
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
17
+
13
18
  jobs:
14
19
  tutorial-tests-trigger:
15
20
  runs-on: ubuntu-latest
@@ -27,6 +27,9 @@ concurrency:
27
27
  # Set the environment variables to be used in all jobs defined in this workflow
28
28
  env:
29
29
  CI_BRANCH: ${{ github.head_ref || github.ref_name }}
30
+ # Opt into Node.js 24 for all JavaScript actions.
31
+ # Remove once all referenced actions natively target Node 24.
32
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
30
33
 
31
34
  jobs:
32
35
  # Job 1: Test tutorials as scripts and notebooks on multiple OS
@@ -44,3 +44,8 @@ CMakeLists.txt.user*
44
44
  .cache/
45
45
  *.log
46
46
  *.zip
47
+
48
+ # ED
49
+ # Used to fetch tutorials data during their runtime. Need to have '/' at
50
+ # the beginning to avoid ignoring 'data' module in the src/.
51
+ /data/
@@ -53,9 +53,23 @@ repos:
53
53
  pass_filenames: false
54
54
  stages: [manual]
55
55
 
56
+ - id: pixi-test-structure-check
57
+ name: pixi run test-structure-check
58
+ entry: pixi run test-structure-check
59
+ language: system
60
+ pass_filenames: false
61
+ stages: [manual]
62
+
56
63
  - id: pixi-unit-tests
57
64
  name: pixi run unit-tests
58
65
  entry: pixi run unit-tests
59
66
  language: system
60
67
  pass_filenames: false
61
68
  stages: [manual]
69
+
70
+ - id: pixi-functional-tests
71
+ name: pixi run functional-tests
72
+ entry: pixi run functional-tests
73
+ language: system
74
+ pass_filenames: false
75
+ stages: [manual]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easydiffraction
3
- Version: 0.11.1
3
+ Version: 0.12.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
@@ -15,12 +15,11 @@ Classifier: License :: OSI Approved :: BSD License
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Programming Language :: Python :: 3 :: Only
18
- Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
20
19
  Classifier: Programming Language :: Python :: 3.13
21
20
  Classifier: Programming Language :: Python :: 3.14
22
21
  Classifier: Topic :: Scientific/Engineering
23
- Requires-Python: >=3.11
22
+ Requires-Python: >=3.12
24
23
  Requires-Dist: asciichartpy
25
24
  Requires-Dist: asteval
26
25
  Requires-Dist: bumps
@@ -32,11 +31,9 @@ Requires-Dist: diffpy-pdffit2
32
31
  Requires-Dist: diffpy-utils
33
32
  Requires-Dist: essdiffraction
34
33
  Requires-Dist: gemmi
35
- Requires-Dist: jupyterlab
36
34
  Requires-Dist: lmfit
37
35
  Requires-Dist: numpy
38
36
  Requires-Dist: pandas
39
- Requires-Dist: pixi-kernel
40
37
  Requires-Dist: plotly
41
38
  Requires-Dist: pooch
42
39
  Requires-Dist: py3dmol
@@ -51,6 +48,7 @@ Requires-Dist: varname
51
48
  Provides-Extra: dev
52
49
  Requires-Dist: build; extra == 'dev'
53
50
  Requires-Dist: copier; extra == 'dev'
51
+ Requires-Dist: docstripy; extra == 'dev'
54
52
  Requires-Dist: format-docstring; extra == 'dev'
55
53
  Requires-Dist: gitpython; extra == 'dev'
56
54
  Requires-Dist: interrogate; extra == 'dev'
@@ -188,7 +188,7 @@ GuardedBase
188
188
  └── GenericDescriptorBase # name, value (validated via AttributeSpec), description
189
189
  ├── GenericStringDescriptor # _value_type = DataTypes.STRING
190
190
  └── GenericNumericDescriptor # _value_type = DataTypes.NUMERIC, + units
191
- └── GenericParameter # + free, uncertainty, fit_min, fit_max, constrained, uid
191
+ └── GenericParameter # + free, uncertainty, fit_min, fit_max, constrained
192
192
  ```
193
193
 
194
194
  CIF-bound concrete classes add a `CifHandler` for serialisation:
@@ -714,12 +714,13 @@ Projects are saved as a directory of CIF files:
714
714
  ```shell
715
715
  project_dir/
716
716
  ├── project.cif # ProjectInfo
717
- ├── analysis.cif # Analysis settings
718
717
  ├── summary.cif # Summary report
719
718
  ├── structures/
720
719
  │ └── lbco.cif # One file per structure
721
- └── experiments/
722
- └── hrpt.cif # One file per experiment
720
+ ├── experiments/
721
+ └── hrpt.cif # One file per experiment
722
+ └── analysis/
723
+ └── analysis.cif # Analysis settings
723
724
  ```
724
725
 
725
726
  ### 7.3 Verbosity
@@ -856,7 +857,7 @@ project.experiments['hrpt'].calculator_type = 'cryspy'
856
857
  project.analysis.current_minimizer = 'lmfit'
857
858
 
858
859
  # Plot before fitting
859
- project.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
860
+ project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
860
861
 
861
862
  # Select free parameters
862
863
  project.structures['lbco'].cell.length_a.free = True
@@ -865,14 +866,14 @@ project.experiments['hrpt'].instrument.calib_twotheta_offset.free = True
865
866
  project.experiments['hrpt'].background['10'].y.free = True
866
867
 
867
868
  # Inspect free parameters
868
- project.analysis.show_free_params()
869
+ project.analysis.display.free_params()
869
870
 
870
871
  # Fit and show results
871
872
  project.analysis.fit()
872
- project.analysis.show_fit_results()
873
+ project.analysis.display.fit_results()
873
874
 
874
875
  # Plot after fitting
875
- project.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
876
+ project.plotter.plot_meas_vs_calc(expt_name='hrpt', show_residual=True)
876
877
 
877
878
  # Save
878
879
  project.save()
@@ -919,6 +920,10 @@ project.experiments['xray_pdf'].peak_profile_type = 'gaussian-damped-sinc'
919
920
  - `DatablockItem` = one CIF `data_` block, `DatablockCollection` = set
920
921
  of blocks.
921
922
  - `CategoryItem` = one CIF category, `CategoryCollection` = CIF loop.
923
+ - **Free-flag encoding**: A parameter's free/fixed status is encoded in
924
+ CIF via uncertainty brackets. `3.89` = fixed, `3.89(2)` = free with
925
+ esd, `3.89()` = free without esd. There is no separate list of free
926
+ parameters; the brackets are the single source of truth.
922
927
 
923
928
  ### 9.2 Immutability of Experiment Type
924
929
 
@@ -1165,9 +1170,130 @@ def length_a(self) -> Parameter:
1165
1170
  - The CI tool `pixi run param-consistency-check` validates compliance;
1166
1171
  `pixi run param-consistency-fix` auto-fixes violations.
1167
1172
 
1173
+ ### 9.9 Lint Complexity Thresholds
1174
+
1175
+ The Pylint-style complexity limits in `pyproject.toml` are **intentional
1176
+ code-quality guardrails**, not arbitrary numbers. A violation is a
1177
+ signal that the function or class needs refactoring — not that the
1178
+ threshold needs raising.
1179
+
1180
+ The project uses **ruff's defaults** for all PLR thresholds, with one
1181
+ exception: `max-args` and `max-positional-args` are set to **6** instead
1182
+ of the ruff default of 5, because ruff counts `self`/`cls` while
1183
+ traditional pylint does not. Setting 6 in ruff matches pylint's standard
1184
+ limit of 5 real parameters per function.
1185
+
1186
+ | Threshold | Value | Rule |
1187
+ | --------------------- | ----- | ------- |
1188
+ | `max-args` | 6 | PLR0913 |
1189
+ | `max-positional-args` | 6 | PLR0917 |
1190
+ | `max-branches` | 12 | PLR0912 |
1191
+ | `max-statements` | 50 | PLR0915 |
1192
+ | `max-locals` | 15 | PLR0914 |
1193
+ | `max-nested-blocks` | 5 | PLR1702 |
1194
+ | `max-returns` | 6 | PLR0911 |
1195
+ | `max-public-methods` | 20 | PLR0904 |
1196
+
1197
+ **Rules:**
1198
+
1199
+ - **Do not raise thresholds.** The current values represent the
1200
+ project's design intent for maximum acceptable complexity.
1201
+ - **Do not add `# noqa` comments** (or any other mechanism) to silence
1202
+ complexity rules such as `PLR0912`, `PLR0913`, `PLR0914`, `PLR0915`,
1203
+ `PLR0917`, `PLR1702`.
1204
+ - **Refactor the code instead:** extract helper functions, introduce
1205
+ parameter objects, flatten nesting, use early returns, etc.
1206
+ - **For complex refactors** that touch many lines or change public API,
1207
+ propose a refactoring plan and wait for approval before proceeding.
1208
+
1209
+ ---
1210
+
1211
+ ## 10. Test Strategy
1212
+
1213
+ Every new feature, category, factory, or bug fix must ship with tests.
1214
+ The project enforces a multi-layered testing approach that catches
1215
+ regressions at different levels of abstraction.
1216
+
1217
+ ### 10.1 Test Layers
1218
+
1219
+ | Layer | Location | Runner command | Scope |
1220
+ | --------------------- | ----------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
1221
+ | **Unit** | `tests/unit/` | `pixi run unit-tests` | Single class or function in isolation. Fast, no I/O, no external engines. |
1222
+ | **Functional** | `tests/functional/` | `pixi run functional-tests` | Multi-component workflows (e.g. create experiment → load data → fit). No external data files beyond tiny test stubs. |
1223
+ | **Integration** | `tests/integration/` | `pixi run integration-tests` | End-to-end pipelines using real calculation engines (cryspy, crysfml, pdffit2) and real data files from `data/`. |
1224
+ | **Script (tutorial)** | `tools/test_scripts.py` | `pixi run script-tests` | Runs each tutorial `*.py` script under `docs/docs/tutorials/` as a subprocess and checks for a zero exit code. |
1225
+ | **Notebook** | `docs/docs/tutorials/` | `pixi run notebook-tests` | Executes every Jupyter notebook end-to-end via `nbmake`. |
1226
+
1227
+ ### 10.2 Directory Structure Convention
1228
+
1229
+ The unit-test tree **mirrors** the source tree:
1230
+
1231
+ ```
1232
+ src/easydiffraction/<pkg>/<module>.py
1233
+ → tests/unit/easydiffraction/<pkg>/test_<module>.py
1234
+ ```
1235
+
1236
+ Two additional patterns are recognised:
1237
+
1238
+ 1. **Supplementary coverage files** — `test_<module>_coverage.py`,
1239
+ `test_<module>_more.py`, etc. sit beside the main test file and add
1240
+ extra scenarios.
1241
+ 2. **Parent-level roll-up** — for category packages that contain only
1242
+ `default.py` and `factory.py`, a single `test_<package_name>.py` one
1243
+ directory up covers the whole package (e.g.
1244
+ `categories/test_experiment_type.py` covers
1245
+ `categories/experiment_type/default.py` and
1246
+ `categories/experiment_type/factory.py`).
1247
+
1248
+ The CI tool `pixi run test-structure-check` validates that every source
1249
+ module has a corresponding test file and reports any gaps. Explicit name
1250
+ aliases (e.g. `variable.py` tested by `test_parameters.py`) are declared
1251
+ in `KNOWN_ALIASES` inside the tool script.
1252
+
1253
+ ### 10.3 What to Test per Source Module Type
1254
+
1255
+ | Source module type | Required tests |
1256
+ | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
1257
+ | **Core base class** (`core/`) | Instantiation, public properties, validation edge cases, identity wiring. |
1258
+ | **Factory** (`factory.py`) | Registration check, `supported_tags()`, `default_tag()`, `create()` for each tag, `show_supported()` output, invalid-tag handling. |
1259
+ | **Category** (`default.py`) | Instantiation, all public properties (read + write where applicable), CIF round-trip (`as_cif` → `from_cif`), parameter enumeration. |
1260
+ | **Enum** (`enums.py`) | Membership of all members, `default()` method, `description()` for every member, `StrEnum` string equality. |
1261
+ | **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`. |
1262
+ | **Collection** (`collection.py`) | `create`, `add`, `remove`, `names`, `show_names`, `show_params`, iteration, duplicate-name handling. |
1263
+ | **Calculator / Minimizer** | `can_handle()` with compatible and incompatible experiment types, `_compute()` stub or mock. |
1264
+ | **Display / IO** | Input → output for representative cases; file-not-found and malformed-input error paths. |
1265
+
1266
+ ### 10.4 Test Conventions
1267
+
1268
+ - **No test-ordering dependence.** Each test must be self-contained. Use
1269
+ `monkeypatch` to set `Logger._reaction` when the test expects a raised
1270
+ exception (another test may have leaked WARN mode via the global
1271
+ `Logger` singleton).
1272
+ - **Error paths are tested explicitly.** Use `pytest.raises()` (with
1273
+ `monkeypatch` for Logger RAISE mode) for `log.error()` calls that
1274
+ specify `exc_type`.
1275
+ - **`@typechecked` setters raise `typeguard.TypeCheckError`**, not
1276
+ `TypeError`. Tests must catch the correct exception.
1277
+ - **Use `capsys` / `capfd`** for asserting console output from `show_*`
1278
+ methods.
1279
+ - **Prefer `tmp_path`** (pytest fixture) for file-system tests.
1280
+ - **No sleeping, no network calls, no real calculation engines** in unit
1281
+ tests.
1282
+ - Test files carry the SPDX license header and a module-level docstring.
1283
+ They are exempt from most lint rules (ANN, D, DOC, INP001, S101, etc.)
1284
+ per `pyproject.toml`.
1285
+
1286
+ ### 10.5 Coverage Threshold
1287
+
1288
+ The minimum line-coverage threshold is **70 %** (`fail_under = 70` in
1289
+ `pyproject.toml`). The project aspires to test every code path; the
1290
+ threshold is a safety net, not a target.
1291
+
1292
+ Run `pixi run unit-tests-coverage` for a per-module report.
1293
+
1168
1294
  ---
1169
1295
 
1170
- ## 10. Issues
1296
+ ## 11. Issues
1171
1297
 
1172
1298
  - **Open:** [`issues_open.md`](issues_open.md) — prioritised backlog.
1173
1299
  - **Closed:** [`issues_closed.md`](issues_closed.md) — resolved items