doe-analyzer 0.3.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 (216) hide show
  1. doe_analyzer-0.3.0/LICENSE +21 -0
  2. doe_analyzer-0.3.0/PKG-INFO +207 -0
  3. doe_analyzer-0.3.0/README.md +170 -0
  4. doe_analyzer-0.3.0/doe_analyzer/__init__.py +14 -0
  5. doe_analyzer-0.3.0/doe_analyzer/__main__.py +3 -0
  6. doe_analyzer-0.3.0/doe_analyzer/api.py +311 -0
  7. doe_analyzer-0.3.0/doe_analyzer/core/__init__.py +1 -0
  8. doe_analyzer-0.3.0/doe_analyzer/core/calibration.py +191 -0
  9. doe_analyzer-0.3.0/doe_analyzer/core/clustering.py +144 -0
  10. doe_analyzer-0.3.0/doe_analyzer/core/columns.py +264 -0
  11. doe_analyzer-0.3.0/doe_analyzer/core/correlation.py +190 -0
  12. doe_analyzer-0.3.0/doe_analyzer/core/csvio.py +366 -0
  13. doe_analyzer-0.3.0/doe_analyzer/core/dataset.py +351 -0
  14. doe_analyzer-0.3.0/doe_analyzer/core/demo.py +155 -0
  15. doe_analyzer-0.3.0/doe_analyzer/core/derived.py +141 -0
  16. doe_analyzer-0.3.0/doe_analyzer/core/design.py +1337 -0
  17. doe_analyzer-0.3.0/doe_analyzer/core/doe_quality.py +196 -0
  18. doe_analyzer-0.3.0/doe_analyzer/core/embedding.py +142 -0
  19. doe_analyzer-0.3.0/doe_analyzer/core/encoding.py +275 -0
  20. doe_analyzer-0.3.0/doe_analyzer/core/filters.py +142 -0
  21. doe_analyzer-0.3.0/doe_analyzer/core/fmt.py +88 -0
  22. doe_analyzer-0.3.0/doe_analyzer/core/infill.py +336 -0
  23. doe_analyzer-0.3.0/doe_analyzer/core/metrics.py +105 -0
  24. doe_analyzer-0.3.0/doe_analyzer/core/mixture.py +297 -0
  25. doe_analyzer-0.3.0/doe_analyzer/core/optimize.py +358 -0
  26. doe_analyzer-0.3.0/doe_analyzer/core/outliers.py +114 -0
  27. doe_analyzer-0.3.0/doe_analyzer/core/pareto.py +101 -0
  28. doe_analyzer-0.3.0/doe_analyzer/core/pce.py +210 -0
  29. doe_analyzer-0.3.0/doe_analyzer/core/project.py +214 -0
  30. doe_analyzer-0.3.0/doe_analyzer/core/reliability.py +58 -0
  31. doe_analyzer-0.3.0/doe_analyzer/core/report.py +134 -0
  32. doe_analyzer-0.3.0/doe_analyzer/core/runfiles.py +240 -0
  33. doe_analyzer-0.3.0/doe_analyzer/core/scales.py +260 -0
  34. doe_analyzer-0.3.0/doe_analyzer/core/sensitivity.py +550 -0
  35. doe_analyzer-0.3.0/doe_analyzer/core/session.py +189 -0
  36. doe_analyzer-0.3.0/doe_analyzer/core/som.py +109 -0
  37. doe_analyzer-0.3.0/doe_analyzer/core/space.py +240 -0
  38. doe_analyzer-0.3.0/doe_analyzer/core/stats.py +95 -0
  39. doe_analyzer-0.3.0/doe_analyzer/core/surrogates.py +1068 -0
  40. doe_analyzer-0.3.0/doe_analyzer/core/tasks.py +34 -0
  41. doe_analyzer-0.3.0/doe_analyzer/core/tolerance.py +49 -0
  42. doe_analyzer-0.3.0/doe_analyzer/data/__init__.py +0 -0
  43. doe_analyzer-0.3.0/doe_analyzer/data/help/calibration.md +88 -0
  44. doe_analyzer-0.3.0/doe_analyzer/data/help/clustering.md +96 -0
  45. doe_analyzer-0.3.0/doe_analyzer/data/help/compare.md +68 -0
  46. doe_analyzer-0.3.0/doe_analyzer/data/help/correlation.md +98 -0
  47. doe_analyzer-0.3.0/doe_analyzer/data/help/data.md +144 -0
  48. doe_analyzer-0.3.0/doe_analyzer/data/help/distributions.md +101 -0
  49. doe_analyzer-0.3.0/doe_analyzer/data/help/doe_quality.md +167 -0
  50. doe_analyzer-0.3.0/doe_analyzer/data/help/embedding.md +91 -0
  51. doe_analyzer-0.3.0/doe_analyzer/data/help/nextruns.md +98 -0
  52. doe_analyzer-0.3.0/doe_analyzer/data/help/optimisation.md +102 -0
  53. doe_analyzer-0.3.0/doe_analyzer/data/help/outliers.md +108 -0
  54. doe_analyzer-0.3.0/doe_analyzer/data/help/overview.md +354 -0
  55. doe_analyzer-0.3.0/doe_analyzer/data/help/parallel.md +49 -0
  56. doe_analyzer-0.3.0/doe_analyzer/data/help/pareto.md +103 -0
  57. doe_analyzer-0.3.0/doe_analyzer/data/help/scatter.md +75 -0
  58. doe_analyzer-0.3.0/doe_analyzer/data/help/sensitivity.md +140 -0
  59. doe_analyzer-0.3.0/doe_analyzer/data/help/som.md +43 -0
  60. doe_analyzer-0.3.0/doe_analyzer/data/help/surrogates.md +183 -0
  61. doe_analyzer-0.3.0/doe_analyzer/data/help/whatif.md +141 -0
  62. doe_analyzer-0.3.0/doe_analyzer/data/icons/LICENSE +202 -0
  63. doe_analyzer-0.3.0/doe_analyzer/data/icons/add.svg +1 -0
  64. doe_analyzer-0.3.0/doe_analyzer/data/icons/add_chart.svg +1 -0
  65. doe_analyzer-0.3.0/doe_analyzer/data/icons/bar_chart.svg +1 -0
  66. doe_analyzer-0.3.0/doe_analyzer/data/icons/bubble_chart.svg +1 -0
  67. doe_analyzer-0.3.0/doe_analyzer/data/icons/check.svg +1 -0
  68. doe_analyzer-0.3.0/doe_analyzer/data/icons/chevron_left.svg +1 -0
  69. doe_analyzer-0.3.0/doe_analyzer/data/icons/close.svg +1 -0
  70. doe_analyzer-0.3.0/doe_analyzer/data/icons/code.svg +1 -0
  71. doe_analyzer-0.3.0/doe_analyzer/data/icons/compare.svg +1 -0
  72. doe_analyzer-0.3.0/doe_analyzer/data/icons/content_copy.svg +1 -0
  73. doe_analyzer-0.3.0/doe_analyzer/data/icons/dark_mode.svg +1 -0
  74. doe_analyzer-0.3.0/doe_analyzer/data/icons/delete.svg +1 -0
  75. doe_analyzer-0.3.0/doe_analyzer/data/icons/description.svg +1 -0
  76. doe_analyzer-0.3.0/doe_analyzer/data/icons/deselect.svg +1 -0
  77. doe_analyzer-0.3.0/doe_analyzer/data/icons/download.svg +1 -0
  78. doe_analyzer-0.3.0/doe_analyzer/data/icons/edit.svg +1 -0
  79. doe_analyzer-0.3.0/doe_analyzer/data/icons/expand_less.svg +1 -0
  80. doe_analyzer-0.3.0/doe_analyzer/data/icons/expand_more.svg +1 -0
  81. doe_analyzer-0.3.0/doe_analyzer/data/icons/filter_alt.svg +1 -0
  82. doe_analyzer-0.3.0/doe_analyzer/data/icons/filter_list.svg +1 -0
  83. doe_analyzer-0.3.0/doe_analyzer/data/icons/folder_open.svg +1 -0
  84. doe_analyzer-0.3.0/doe_analyzer/data/icons/function.svg +1 -0
  85. doe_analyzer-0.3.0/doe_analyzer/data/icons/grid_4x4.svg +1 -0
  86. doe_analyzer-0.3.0/doe_analyzer/data/icons/grid_on.svg +1 -0
  87. doe_analyzer-0.3.0/doe_analyzer/data/icons/grid_view.svg +1 -0
  88. doe_analyzer-0.3.0/doe_analyzer/data/icons/help.svg +1 -0
  89. doe_analyzer-0.3.0/doe_analyzer/data/icons/history.svg +1 -0
  90. doe_analyzer-0.3.0/doe_analyzer/data/icons/image.svg +1 -0
  91. doe_analyzer-0.3.0/doe_analyzer/data/icons/info.svg +1 -0
  92. doe_analyzer-0.3.0/doe_analyzer/data/icons/ink_highlighter.svg +1 -0
  93. doe_analyzer-0.3.0/doe_analyzer/data/icons/insights.svg +1 -0
  94. doe_analyzer-0.3.0/doe_analyzer/data/icons/instant_mix.svg +1 -0
  95. doe_analyzer-0.3.0/doe_analyzer/data/icons/left_panel_close.svg +1 -0
  96. doe_analyzer-0.3.0/doe_analyzer/data/icons/left_panel_open.svg +1 -0
  97. doe_analyzer-0.3.0/doe_analyzer/data/icons/light_mode.svg +1 -0
  98. doe_analyzer-0.3.0/doe_analyzer/data/icons/menu.svg +1 -0
  99. doe_analyzer-0.3.0/doe_analyzer/data/icons/menu_book.svg +1 -0
  100. doe_analyzer-0.3.0/doe_analyzer/data/icons/model_training.svg +1 -0
  101. doe_analyzer-0.3.0/doe_analyzer/data/icons/more_vert.svg +1 -0
  102. doe_analyzer-0.3.0/doe_analyzer/data/icons/palette.svg +1 -0
  103. doe_analyzer-0.3.0/doe_analyzer/data/icons/play_arrow.svg +1 -0
  104. doe_analyzer-0.3.0/doe_analyzer/data/icons/refresh.svg +1 -0
  105. doe_analyzer-0.3.0/doe_analyzer/data/icons/report.svg +1 -0
  106. doe_analyzer-0.3.0/doe_analyzer/data/icons/save.svg +1 -0
  107. doe_analyzer-0.3.0/doe_analyzer/data/icons/scatter_plot.svg +1 -0
  108. doe_analyzer-0.3.0/doe_analyzer/data/icons/science.svg +1 -0
  109. doe_analyzer-0.3.0/doe_analyzer/data/icons/settings.svg +1 -0
  110. doe_analyzer-0.3.0/doe_analyzer/data/icons/speed.svg +1 -0
  111. doe_analyzer-0.3.0/doe_analyzer/data/icons/stacked_line_chart.svg +1 -0
  112. doe_analyzer-0.3.0/doe_analyzer/data/icons/stop.svg +1 -0
  113. doe_analyzer-0.3.0/doe_analyzer/data/icons/table_chart.svg +1 -0
  114. doe_analyzer-0.3.0/doe_analyzer/data/icons/tune.svg +1 -0
  115. doe_analyzer-0.3.0/doe_analyzer/data/icons/upload_file.svg +1 -0
  116. doe_analyzer-0.3.0/doe_analyzer/data/icons/warning.svg +1 -0
  117. doe_analyzer-0.3.0/doe_analyzer/data/icons/workspaces.svg +1 -0
  118. doe_analyzer-0.3.0/doe_analyzer/figures/__init__.py +28 -0
  119. doe_analyzer-0.3.0/doe_analyzer/figures/axes.py +123 -0
  120. doe_analyzer-0.3.0/doe_analyzer/figures/calibration.py +430 -0
  121. doe_analyzer-0.3.0/doe_analyzer/figures/clustering.py +195 -0
  122. doe_analyzer-0.3.0/doe_analyzer/figures/colorscales.py +129 -0
  123. doe_analyzer-0.3.0/doe_analyzer/figures/common.py +336 -0
  124. doe_analyzer-0.3.0/doe_analyzer/figures/compare.py +363 -0
  125. doe_analyzer-0.3.0/doe_analyzer/figures/correlation.py +166 -0
  126. doe_analyzer-0.3.0/doe_analyzer/figures/distributions.py +242 -0
  127. doe_analyzer-0.3.0/doe_analyzer/figures/doe_quality.py +318 -0
  128. doe_analyzer-0.3.0/doe_analyzer/figures/embedding.py +170 -0
  129. doe_analyzer-0.3.0/doe_analyzer/figures/figjson.py +82 -0
  130. doe_analyzer-0.3.0/doe_analyzer/figures/nextruns.py +204 -0
  131. doe_analyzer-0.3.0/doe_analyzer/figures/optimisation.py +445 -0
  132. doe_analyzer-0.3.0/doe_analyzer/figures/options.py +176 -0
  133. doe_analyzer-0.3.0/doe_analyzer/figures/outliers.py +138 -0
  134. doe_analyzer-0.3.0/doe_analyzer/figures/parallel.py +334 -0
  135. doe_analyzer-0.3.0/doe_analyzer/figures/pareto.py +347 -0
  136. doe_analyzer-0.3.0/doe_analyzer/figures/scatter.py +319 -0
  137. doe_analyzer-0.3.0/doe_analyzer/figures/sensitivity.py +415 -0
  138. doe_analyzer-0.3.0/doe_analyzer/figures/som.py +188 -0
  139. doe_analyzer-0.3.0/doe_analyzer/figures/surrogates.py +456 -0
  140. doe_analyzer-0.3.0/doe_analyzer/figures/theme.py +126 -0
  141. doe_analyzer-0.3.0/doe_analyzer/figures/whatif.py +1425 -0
  142. doe_analyzer-0.3.0/doe_analyzer/gui/__init__.py +0 -0
  143. doe_analyzer-0.3.0/doe_analyzer/gui/app_window.py +1043 -0
  144. doe_analyzer-0.3.0/doe_analyzer/gui/colorscale_edit.py +202 -0
  145. doe_analyzer-0.3.0/doe_analyzer/gui/column_panel.py +444 -0
  146. doe_analyzer-0.3.0/doe_analyzer/gui/data_table.py +223 -0
  147. doe_analyzer-0.3.0/doe_analyzer/gui/design_dialog.py +262 -0
  148. doe_analyzer-0.3.0/doe_analyzer/gui/errors.py +174 -0
  149. doe_analyzer-0.3.0/doe_analyzer/gui/export_dialog.py +251 -0
  150. doe_analyzer-0.3.0/doe_analyzer/gui/exporter.py +256 -0
  151. doe_analyzer-0.3.0/doe_analyzer/gui/form_dialog.py +37 -0
  152. doe_analyzer-0.3.0/doe_analyzer/gui/formula_dialog.py +96 -0
  153. doe_analyzer-0.3.0/doe_analyzer/gui/help_view.py +129 -0
  154. doe_analyzer-0.3.0/doe_analyzer/gui/icons.py +62 -0
  155. doe_analyzer-0.3.0/doe_analyzer/gui/import_dialog.py +93 -0
  156. doe_analyzer-0.3.0/doe_analyzer/gui/nav.py +87 -0
  157. doe_analyzer-0.3.0/doe_analyzer/gui/pages/__init__.py +0 -0
  158. doe_analyzer-0.3.0/doe_analyzer/gui/pages/base.py +662 -0
  159. doe_analyzer-0.3.0/doe_analyzer/gui/pages/data_page.py +229 -0
  160. doe_analyzer-0.3.0/doe_analyzer/gui/pages/form.py +173 -0
  161. doe_analyzer-0.3.0/doe_analyzer/gui/pages/whatif_page.py +262 -0
  162. doe_analyzer-0.3.0/doe_analyzer/gui/plotview.py +437 -0
  163. doe_analyzer-0.3.0/doe_analyzer/gui/qss.py +182 -0
  164. doe_analyzer-0.3.0/doe_analyzer/gui/range_dialog.py +62 -0
  165. doe_analyzer-0.3.0/doe_analyzer/gui/session.py +25 -0
  166. doe_analyzer-0.3.0/doe_analyzer/gui/settings.py +87 -0
  167. doe_analyzer-0.3.0/doe_analyzer/gui/settings_dialog.py +133 -0
  168. doe_analyzer-0.3.0/doe_analyzer/gui/space_dialog.py +53 -0
  169. doe_analyzer-0.3.0/doe_analyzer/gui/tasks.py +122 -0
  170. doe_analyzer-0.3.0/doe_analyzer/gui/theming.py +86 -0
  171. doe_analyzer-0.3.0/doe_analyzer/gui/web/bridge.js +218 -0
  172. doe_analyzer-0.3.0/doe_analyzer/gui/web/host.html +16 -0
  173. doe_analyzer-0.3.0/doe_analyzer/gui/web/titles.js +109 -0
  174. doe_analyzer-0.3.0/doe_analyzer/gui/widgets.py +376 -0
  175. doe_analyzer-0.3.0/doe_analyzer/help.py +54 -0
  176. doe_analyzer-0.3.0/doe_analyzer/logs.py +170 -0
  177. doe_analyzer-0.3.0/doe_analyzer/main.py +165 -0
  178. doe_analyzer-0.3.0/doe_analyzer/script.py +251 -0
  179. doe_analyzer-0.3.0/doe_analyzer/tokens.py +61 -0
  180. doe_analyzer-0.3.0/doe_analyzer/web/__init__.py +0 -0
  181. doe_analyzer-0.3.0/doe_analyzer/web/controller.py +1418 -0
  182. doe_analyzer-0.3.0/doe_analyzer/web/shims/moocore.py +61 -0
  183. doe_analyzer-0.3.0/doe_analyzer/web/shims/stubs.py +78 -0
  184. doe_analyzer-0.3.0/doe_analyzer.egg-info/PKG-INFO +207 -0
  185. doe_analyzer-0.3.0/doe_analyzer.egg-info/SOURCES.txt +214 -0
  186. doe_analyzer-0.3.0/doe_analyzer.egg-info/dependency_links.txt +1 -0
  187. doe_analyzer-0.3.0/doe_analyzer.egg-info/entry_points.txt +5 -0
  188. doe_analyzer-0.3.0/doe_analyzer.egg-info/requires.txt +26 -0
  189. doe_analyzer-0.3.0/doe_analyzer.egg-info/top_level.txt +1 -0
  190. doe_analyzer-0.3.0/pyproject.toml +91 -0
  191. doe_analyzer-0.3.0/setup.cfg +4 -0
  192. doe_analyzer-0.3.0/tests/test_analysis.py +1223 -0
  193. doe_analyzer-0.3.0/tests/test_calibration.py +176 -0
  194. doe_analyzer-0.3.0/tests/test_colours.py +147 -0
  195. doe_analyzer-0.3.0/tests/test_csvio.py +298 -0
  196. doe_analyzer-0.3.0/tests/test_dataset.py +714 -0
  197. doe_analyzer-0.3.0/tests/test_design.py +502 -0
  198. doe_analyzer-0.3.0/tests/test_fidelity.py +198 -0
  199. doe_analyzer-0.3.0/tests/test_figures.py +2024 -0
  200. doe_analyzer-0.3.0/tests/test_fmt_scales.py +139 -0
  201. doe_analyzer-0.3.0/tests/test_gui.py +3166 -0
  202. doe_analyzer-0.3.0/tests/test_help.py +69 -0
  203. doe_analyzer-0.3.0/tests/test_known_decisions.py +699 -0
  204. doe_analyzer-0.3.0/tests/test_known_models.py +705 -0
  205. doe_analyzer-0.3.0/tests/test_known_sensitivity.py +290 -0
  206. doe_analyzer-0.3.0/tests/test_known_statistics.py +494 -0
  207. doe_analyzer-0.3.0/tests/test_logs.py +126 -0
  208. doe_analyzer-0.3.0/tests/test_mixture.py +528 -0
  209. doe_analyzer-0.3.0/tests/test_pce.py +134 -0
  210. doe_analyzer-0.3.0/tests/test_reliability.py +56 -0
  211. doe_analyzer-0.3.0/tests/test_runfiles.py +323 -0
  212. doe_analyzer-0.3.0/tests/test_script.py +244 -0
  213. doe_analyzer-0.3.0/tests/test_som.py +38 -0
  214. doe_analyzer-0.3.0/tests/test_space.py +108 -0
  215. doe_analyzer-0.3.0/tests/test_web.py +890 -0
  216. doe_analyzer-0.3.0/tests/test_webengine.py +622 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Niklas Nordin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,207 @@
1
+ Metadata-Version: 2.4
2
+ Name: doe_analyzer
3
+ Version: 0.3.0
4
+ Summary: DOE Analyzer — desktop application for analysing design-of-experiments results from CSV.
5
+ Author-email: Niklas Nordin <niklas.nordin@nequam.se>, "Claude (Anthropic)" <noreply@anthropic.com>
6
+ License-Expression: MIT AND Apache-2.0
7
+ Project-URL: Repository, https://gitlab.com/niklas.nordin.swe/doe_analyzer
8
+ Project-URL: Issues, https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/issues
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Operating System :: POSIX :: Linux
11
+ Classifier: Operating System :: Microsoft :: Windows
12
+ Classifier: Environment :: X11 Applications :: Qt
13
+ Classifier: Topic :: Scientific/Engineering
14
+ Requires-Python: >=3.9
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ License-File: doe_analyzer/data/icons/LICENSE
18
+ Requires-Dist: PySide6<7,>=6.11; python_version >= "3.12"
19
+ Requires-Dist: PySide6<6.12,>=6.11; python_version >= "3.10" and python_version < "3.12"
20
+ Requires-Dist: PySide6<6.12,>=6.8; python_version < "3.10"
21
+ Requires-Dist: plotly<8,>=6.1
22
+ Requires-Dist: numpy<3,>=2.0
23
+ Requires-Dist: pandas<4,>=2.2
24
+ Requires-Dist: scipy<2,>=1.13
25
+ Requires-Dist: scikit-learn<2,>=1.5
26
+ Requires-Dist: SALib<2,>=1.5
27
+ Requires-Dist: pymoo<0.7,>=0.6.1
28
+ Requires-Dist: statsmodels<1,>=0.14
29
+ Requires-Dist: materialyoucolor<4,>=3.0
30
+ Provides-Extra: umap
31
+ Requires-Dist: umap-learn<1,>=0.5; extra == "umap"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest<10,>=8; extra == "dev"
34
+ Requires-Dist: pytest-timeout<3,>=2; extra == "dev"
35
+ Requires-Dist: ruff<1,>=0.4; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # DOE Analyzer
39
+
40
+ Desktop application for analysing design-of-experiments results stored in CSV:
41
+ one row per run, an ID column, the DOE parameters and the result functions,
42
+ with the names in the first line.
43
+
44
+ ![DOE Analyzer: Pareto front of the zdt_constrained demo](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/raw/master/docs/screenshot.png)
45
+
46
+ ## Install and run
47
+
48
+ Runs on Linux and Windows with Python 3.9 or newer. From PyPI:
49
+
50
+ ```bash
51
+ pip install doe_analyzer # or 'doe_analyzer[umap]' for UMAP embeddings (numba)
52
+ doe_analyzer # or: doe_analyzer file.csv | project.doeproj | --demo branin
53
+ doe_analyzer --gl software # WebGL in software, where the GPU driver draws blank plots
54
+ ```
55
+
56
+ On Windows `doe_analyzer-gui` starts it without a console window. A desktop Linux has the system libraries Qt needs;
57
+ a minimal one (a container, a server image) needs those the CI installs ([.gitlab-ci.yml](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/.gitlab-ci.yml)).
58
+
59
+ From a clone of the repository:
60
+
61
+ ```bash
62
+ python3 -m venv .venv
63
+ .venv/bin/pip install -e '.[dev,umap]' # umap is optional (UMAP embeddings)
64
+ ./doe_analyzer.sh # or: .venv/bin/doe_analyzer [file.csv | project.doeproj]
65
+ ./doe_analyzer.sh --demo zdt_constrained # synthetic datasets: branin, ishigami, zdt_constrained,
66
+ # mixed_categorical, large_20k
67
+ ./doe_analyzer.sh --diagnose # print the WebGL renderer in use
68
+ ```
69
+
70
+ On Windows: `py -3 -m venv .venv`, `.venv\Scripts\pip install -e .[dev]`, then
71
+ `.venv\Scripts\doe_analyzer-gui` (no console window).
72
+
73
+ ## In the browser
74
+
75
+ From a clone of the repository, `python scripts/build_web.py` writes `doe_analyzer.html`: the application as one file of about 70 MB that opens in
76
+ a current Chrome, Edge or Firefox with no server and no network. It is the same application, not a report of one:
77
+ open a CSV or a project, set the columns, and use every page (the Python analysis code runs in the page, in
78
+ WebAssembly). Nothing leaves the browser.
79
+
80
+ * Files are opened with the folder button or dropped on the page; what the application writes (projects, plots as
81
+ PNG, SVG or a zip, rows, reports) is downloaded. A project is the `.doeproj` file next to its CSV: give the page
82
+ both files to restore it.
83
+ * *Reload* (F5) reads the CSV again in Chrome and Edge; other browsers cannot read a file twice and ask for it.
84
+ * Files the CSV names per run (images, curves) are given to the page with More → *Add run files…*.
85
+ * The first start takes about ten seconds (the page unpacks Python and its libraries); the pages show at once.
86
+ Long computations (surrogates, optimisation) take about as long as in the desktop application, and *Cancel* stops
87
+ one by starting the engine again. Unlike the desktop application, pages compute one at a time (a page opened
88
+ while another computes waits for it, and says so), an option changed while a page computes takes effect when that
89
+ computation ends, Export all plots and the report have *Stop*, which stops after the current plot, and Export all
90
+ plots writes PNG or SVG (a PDF is made one plot at a time).
91
+ * Not in the browser: UMAP (PCA, t-SNE and MDS are; a project saved with UMAP opens with PCA), the PDF report
92
+ (the HTML report is), the log folder, recent files, *Save project as…* and the WebGL setting.
93
+ * The build downloads the pinned runtime once into `build/web-cache`. See [DEVELOPMENT.md](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/DEVELOPMENT.md).
94
+
95
+ ## Using it
96
+
97
+ 1. **Open a CSV** (Ctrl+O, or drop it on the window; the dialog's File name field takes a pasted
98
+ full path). The import preview shows the
99
+ detected encoding, delimiter and decimal separator (Swedish Excel `1,5;2,3`
100
+ works); override them if needed. No runs yet? *New design…* writes a design to
101
+ run: Latin hypercube or Sobol, full or two-level fractional factorial (highest
102
+ resolution), Plackett–Burman, Taguchi orthogonal arrays, central composite,
103
+ Box–Behnken, D-optimal, or for a mixture a simplex lattice, simplex centroid or
104
+ extreme vertices (with process variables); with a dataset open it also adds space-filling,
105
+ D-optimal, centre, replicate or axial runs to its design. *Reload* (F5)
106
+ reads the CSV again after new runs were added, keeping every setting.
107
+ 2. **Data page → Columns.** Tick the ID column and the result functions; every
108
+ other column is a DOE parameter (or tick Fidelity on the column that tells
109
+ cheap runs from expensive ones). Per column:
110
+ * type (continuous / discrete / categorical),
111
+ * scale — Linear, Log10 or Symlog (signed values spread over decades; C is the
112
+ half-width of the linear zone). The scale is suggested from the data and is
113
+ used everywhere: plot axes, binning, correlation, models, sampling;
114
+ * for results: goal (minimise / maximise / target), a constraint (≤ / ≥ limit or a range)
115
+ and an importance (1–5) for the overall desirability;
116
+ * for parameters: design-space bounds.
117
+ *Constraints* limits combinations of parameters (`x1 + x2 <= 10`): New design,
118
+ Next runs, Optimisation and What-if keep to them. A mixture is one with `=`
119
+ (`cement + water + sand = 100`; found on opening when the shares add up).
120
+ *Derived column* adds a result computed from others (`P_out / P_in`).
121
+ 3. **Explore** with the pages in the drawer. Lasso or box-select points in a
122
+ scatter, brush parallel-coordinate axes, select table rows, click a category
123
+ path: the selection is shared by every page. *Highlight* fades the rest;
124
+ *Filter* shows only the selection on the other pages. Chips under the title
125
+ clear it, turn it into a filter (keep only / exclude), hide failed runs or show
126
+ feasible runs only.
127
+ 4. **Export** (download icon / Ctrl+E): PNG with embedded DPI, SVG and PDF
128
+ (vector), with size presets, font size and theme (publication white, current UI,
129
+ dark). *Export all plots* writes every page; rows can be exported as CSV with
130
+ full precision. *Export plot as Python script* (code icon) writes the calls
131
+ of `doe_analyzer.api` that draw the plot without the app (see Scripting below).
132
+ 5. **Save the project** (Ctrl+S): `name.doeproj` next to the CSV keeps roles,
133
+ scales, goals and targets, constraints, importances, bounds, derived columns,
134
+ curve matches, constraints between parameters (a mixture's too), filters, page
135
+ settings and the neural network's shape, and is restored automatically when the
136
+ CSV is opened again.
137
+
138
+ Numbers are read and written exactly (round-trip), stored as doubles, and shown
139
+ with N significant digits (Settings → Numbers); a nonzero value never shows as 0.
140
+
141
+ ## Pages
142
+
143
+ Every page, plot, method and option is explained in [docs/HELP.md](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/docs/HELP.md); the same
144
+ text is in the app (help button or F1 for the open page, Help in the navigation drawer for all of it).
145
+
146
+ | Group | Page | What it does |
147
+ |---|---|---|
148
+ | Data | Data | Column roles, scales, goals (minimise, maximise, target), constraints (≤, ≥, range), importance, bounds, derived columns, constraints between parameters and mixtures (components adding up to a total); table; statistics |
149
+ | | DOE quality | Space filling (discrepancy, distances) against a random design, 1D/2D projections, parameter correlation and VIF; where runs fail: rate per bin, classifier AUC, drivers, P(fail) map |
150
+ | | Outliers | Robust z, robust Mahalanobis (MCD), isolation forest, LOF, cross-validated model residuals; select or exclude the flagged runs |
151
+ | Explore | Distributions | Histograms, density, box, violin, ECDF, normal QQ; split by selection or category |
152
+ | | Scatter | 2D (colour, size, trend), scatter matrix, 3D, ternary (three components' shares) |
153
+ | | Parallel coordinates | Brushable axes (brushing selects), parallel categories |
154
+ | | Correlation | Pearson (scale space), Spearman, Kendall, partial, mutual information, distance correlation |
155
+ | Structure | PCA / t-SNE / UMAP | PCA scree, loadings and biplot; t-SNE, UMAP, MDS maps |
156
+ | | Self-organizing map | Component planes (each column on the same map of the runs: correlated columns look alike) and the U-matrix with the runs (groups and the borders between them; lasso to select) |
157
+ | | Clustering | k-means, Gaussian mixture, Ward, HDBSCAN, DBSCAN; profiles, choice of k, dendrogram; click a run to select its cluster |
158
+ | Model | Sensitivity | SRC, SRRC, PRCC, RBD-FAST, PAWN, delta, type II ANOVA, main effects, interactions, half-normal plot and Pareto of effects; Sobol S1/ST and Morris on an automatic surrogate (its Q² shown); Sobol indices from a polynomial chaos expansion |
159
+ | | Surrogate models | Linear model, polynomial RSM (also with terms selected by AICc), Gaussian process, RBF, random forest, extra trees, gradient boosting, SVR, MLP, kNN, polynomial chaos, multi-fidelity GP (co-kriging of cheap and expensive runs, marked by a Fidelity column), Scheffé mixture polynomials; 5-fold CV leaderboard in scale space and original units; parity, residuals, response surface, partial dependence with ICE, importance, a neural network's training history; equations and model export |
160
+ | | What-if | Sliders per parameter (a mixture's keeping their total), every result predicted with a 90 % interval, prediction profiler, desirability with importance; maximise desirability; sweet spot (probability that every constraint is met over two parameters); design space (the largest box of parameter ranges around the point in which every setting meets every constraint with the required probability); robustness (Monte Carlo of parameter tolerances: P(met), ppm out, Cpk; FORM and importance sampling for small failure probabilities); predictions for a CSV of new settings; a whole curve predicted by a reduced-order model (POD) of the runs' curves; a mixture's triangle (a result, D or P(met) over three components) |
161
+ | | Calibration | Bayesian calibration of the parameters experiments cannot set: a CSV of experiments (known settings, measured results and curves), the posterior by an ensemble MCMC on the surrogates (corner plot, credible intervals, measured against predicted, chains), the samples exported |
162
+ | Decide | Pareto | Non-dominated runs, 2D/3D fronts, objective matrix, hypervolume, knee, TOPSIS ranking; progress over run order (best so far, hypervolume, feasible share); export the Pareto set |
163
+ | | Compare runs | The selected runs side by side (the best values in bold, unmet constraints marked), as a radar of their parameters and results, their images, the images of the best and worst runs by a result, and their curves among all runs' (columns of per-run image or curve files); match a measured curve (a result to minimise, for calibration). A run's picture also shows when hovering over its point on any plot |
164
+ | | Optimisation | Single objective (differential evolution + local polish) or NSGA-II on surrogates, with constraints; candidates with intervals and the nearest real run; robust design: the mean against the spread under parameter scatter, with reliability constraints and a limit on the spread (± 3σ), the best mean within it first |
165
+ | | Next runs | Expected improvement, probability of improvement, lower confidence bound, expected hypervolume improvement (2–3 objectives), maximum uncertainty or maximin space filling; respects constraints and avoids failure regions; exports a CSV in your column layout |
166
+
167
+ Model-based pages fit in each result's scale space (log10 of a Log10 result)
168
+ and report accuracy in both spaces. Long computations run in the background
169
+ with a progress bar and can be cancelled; GP fits use at most 1 500 runs, t-SNE
170
+ 3 000 and MDS 1 500 by default (always stated on the plot).
171
+
172
+ **Reports** (download icon): an interactive HTML report (plotly inlined, opens
173
+ offline) or a PDF report, with the column table, statistics and the chosen
174
+ pages.
175
+
176
+ ## Scripting
177
+
178
+ `doe_analyzer.api` is the same analysis without the window: each step a function, each returning a new dataset.
179
+ *Export plot as Python script* writes these calls for the plot on screen; they are kept working across versions.
180
+
181
+ ```python
182
+ import doe_analyzer.api as da
183
+
184
+ ds = da.read_csv("study.csv")
185
+ ds = da.set_column(ds, "y", role="result", goal="min")
186
+ runs = da.runs(ds, [da.hide_failed()])
187
+ snap = da.snapshot(ds, runs)
188
+ opts = da.options(ds, "scatter", x="x1", y="y")
189
+ result = da.compute(snap, "scatter", opts)
190
+ fig = da.figure(snap, "scatter", "scatter", opts, result, da.publication_theme(font_pt=9))
191
+ da.export(fig, "scatter.png", width=160, height=100, unit="mm", dpi=300) # offscreen: no display needed
192
+ ```
193
+
194
+ ## Tests
195
+
196
+ ```bash
197
+ .venv/bin/pytest # everything, headless (offscreen + software WebGL)
198
+ .venv/bin/pytest -m "not webengine" # without QtWebEngine
199
+ .venv/bin/python scripts/bench.py # responsiveness on 20 000 rows
200
+ .venv/bin/python scripts/export_all.py --demo all --out /tmp/plots
201
+ .venv/bin/python scripts/build_help.py # regenerate docs/HELP.md after editing doe_analyzer/data/help/*.md
202
+ ```
203
+
204
+ ## License
205
+
206
+ MIT, see [LICENSE](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/LICENSE). The icons are Google's Material Symbols, under
207
+ Apache-2.0: [doe_analyzer/data/icons/LICENSE](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/doe_analyzer/data/icons/LICENSE).
@@ -0,0 +1,170 @@
1
+ # DOE Analyzer
2
+
3
+ Desktop application for analysing design-of-experiments results stored in CSV:
4
+ one row per run, an ID column, the DOE parameters and the result functions,
5
+ with the names in the first line.
6
+
7
+ ![DOE Analyzer: Pareto front of the zdt_constrained demo](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/raw/master/docs/screenshot.png)
8
+
9
+ ## Install and run
10
+
11
+ Runs on Linux and Windows with Python 3.9 or newer. From PyPI:
12
+
13
+ ```bash
14
+ pip install doe_analyzer # or 'doe_analyzer[umap]' for UMAP embeddings (numba)
15
+ doe_analyzer # or: doe_analyzer file.csv | project.doeproj | --demo branin
16
+ doe_analyzer --gl software # WebGL in software, where the GPU driver draws blank plots
17
+ ```
18
+
19
+ On Windows `doe_analyzer-gui` starts it without a console window. A desktop Linux has the system libraries Qt needs;
20
+ a minimal one (a container, a server image) needs those the CI installs ([.gitlab-ci.yml](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/.gitlab-ci.yml)).
21
+
22
+ From a clone of the repository:
23
+
24
+ ```bash
25
+ python3 -m venv .venv
26
+ .venv/bin/pip install -e '.[dev,umap]' # umap is optional (UMAP embeddings)
27
+ ./doe_analyzer.sh # or: .venv/bin/doe_analyzer [file.csv | project.doeproj]
28
+ ./doe_analyzer.sh --demo zdt_constrained # synthetic datasets: branin, ishigami, zdt_constrained,
29
+ # mixed_categorical, large_20k
30
+ ./doe_analyzer.sh --diagnose # print the WebGL renderer in use
31
+ ```
32
+
33
+ On Windows: `py -3 -m venv .venv`, `.venv\Scripts\pip install -e .[dev]`, then
34
+ `.venv\Scripts\doe_analyzer-gui` (no console window).
35
+
36
+ ## In the browser
37
+
38
+ From a clone of the repository, `python scripts/build_web.py` writes `doe_analyzer.html`: the application as one file of about 70 MB that opens in
39
+ a current Chrome, Edge or Firefox with no server and no network. It is the same application, not a report of one:
40
+ open a CSV or a project, set the columns, and use every page (the Python analysis code runs in the page, in
41
+ WebAssembly). Nothing leaves the browser.
42
+
43
+ * Files are opened with the folder button or dropped on the page; what the application writes (projects, plots as
44
+ PNG, SVG or a zip, rows, reports) is downloaded. A project is the `.doeproj` file next to its CSV: give the page
45
+ both files to restore it.
46
+ * *Reload* (F5) reads the CSV again in Chrome and Edge; other browsers cannot read a file twice and ask for it.
47
+ * Files the CSV names per run (images, curves) are given to the page with More → *Add run files…*.
48
+ * The first start takes about ten seconds (the page unpacks Python and its libraries); the pages show at once.
49
+ Long computations (surrogates, optimisation) take about as long as in the desktop application, and *Cancel* stops
50
+ one by starting the engine again. Unlike the desktop application, pages compute one at a time (a page opened
51
+ while another computes waits for it, and says so), an option changed while a page computes takes effect when that
52
+ computation ends, Export all plots and the report have *Stop*, which stops after the current plot, and Export all
53
+ plots writes PNG or SVG (a PDF is made one plot at a time).
54
+ * Not in the browser: UMAP (PCA, t-SNE and MDS are; a project saved with UMAP opens with PCA), the PDF report
55
+ (the HTML report is), the log folder, recent files, *Save project as…* and the WebGL setting.
56
+ * The build downloads the pinned runtime once into `build/web-cache`. See [DEVELOPMENT.md](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/DEVELOPMENT.md).
57
+
58
+ ## Using it
59
+
60
+ 1. **Open a CSV** (Ctrl+O, or drop it on the window; the dialog's File name field takes a pasted
61
+ full path). The import preview shows the
62
+ detected encoding, delimiter and decimal separator (Swedish Excel `1,5;2,3`
63
+ works); override them if needed. No runs yet? *New design…* writes a design to
64
+ run: Latin hypercube or Sobol, full or two-level fractional factorial (highest
65
+ resolution), Plackett–Burman, Taguchi orthogonal arrays, central composite,
66
+ Box–Behnken, D-optimal, or for a mixture a simplex lattice, simplex centroid or
67
+ extreme vertices (with process variables); with a dataset open it also adds space-filling,
68
+ D-optimal, centre, replicate or axial runs to its design. *Reload* (F5)
69
+ reads the CSV again after new runs were added, keeping every setting.
70
+ 2. **Data page → Columns.** Tick the ID column and the result functions; every
71
+ other column is a DOE parameter (or tick Fidelity on the column that tells
72
+ cheap runs from expensive ones). Per column:
73
+ * type (continuous / discrete / categorical),
74
+ * scale — Linear, Log10 or Symlog (signed values spread over decades; C is the
75
+ half-width of the linear zone). The scale is suggested from the data and is
76
+ used everywhere: plot axes, binning, correlation, models, sampling;
77
+ * for results: goal (minimise / maximise / target), a constraint (≤ / ≥ limit or a range)
78
+ and an importance (1–5) for the overall desirability;
79
+ * for parameters: design-space bounds.
80
+ *Constraints* limits combinations of parameters (`x1 + x2 <= 10`): New design,
81
+ Next runs, Optimisation and What-if keep to them. A mixture is one with `=`
82
+ (`cement + water + sand = 100`; found on opening when the shares add up).
83
+ *Derived column* adds a result computed from others (`P_out / P_in`).
84
+ 3. **Explore** with the pages in the drawer. Lasso or box-select points in a
85
+ scatter, brush parallel-coordinate axes, select table rows, click a category
86
+ path: the selection is shared by every page. *Highlight* fades the rest;
87
+ *Filter* shows only the selection on the other pages. Chips under the title
88
+ clear it, turn it into a filter (keep only / exclude), hide failed runs or show
89
+ feasible runs only.
90
+ 4. **Export** (download icon / Ctrl+E): PNG with embedded DPI, SVG and PDF
91
+ (vector), with size presets, font size and theme (publication white, current UI,
92
+ dark). *Export all plots* writes every page; rows can be exported as CSV with
93
+ full precision. *Export plot as Python script* (code icon) writes the calls
94
+ of `doe_analyzer.api` that draw the plot without the app (see Scripting below).
95
+ 5. **Save the project** (Ctrl+S): `name.doeproj` next to the CSV keeps roles,
96
+ scales, goals and targets, constraints, importances, bounds, derived columns,
97
+ curve matches, constraints between parameters (a mixture's too), filters, page
98
+ settings and the neural network's shape, and is restored automatically when the
99
+ CSV is opened again.
100
+
101
+ Numbers are read and written exactly (round-trip), stored as doubles, and shown
102
+ with N significant digits (Settings → Numbers); a nonzero value never shows as 0.
103
+
104
+ ## Pages
105
+
106
+ Every page, plot, method and option is explained in [docs/HELP.md](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/docs/HELP.md); the same
107
+ text is in the app (help button or F1 for the open page, Help in the navigation drawer for all of it).
108
+
109
+ | Group | Page | What it does |
110
+ |---|---|---|
111
+ | Data | Data | Column roles, scales, goals (minimise, maximise, target), constraints (≤, ≥, range), importance, bounds, derived columns, constraints between parameters and mixtures (components adding up to a total); table; statistics |
112
+ | | DOE quality | Space filling (discrepancy, distances) against a random design, 1D/2D projections, parameter correlation and VIF; where runs fail: rate per bin, classifier AUC, drivers, P(fail) map |
113
+ | | Outliers | Robust z, robust Mahalanobis (MCD), isolation forest, LOF, cross-validated model residuals; select or exclude the flagged runs |
114
+ | Explore | Distributions | Histograms, density, box, violin, ECDF, normal QQ; split by selection or category |
115
+ | | Scatter | 2D (colour, size, trend), scatter matrix, 3D, ternary (three components' shares) |
116
+ | | Parallel coordinates | Brushable axes (brushing selects), parallel categories |
117
+ | | Correlation | Pearson (scale space), Spearman, Kendall, partial, mutual information, distance correlation |
118
+ | Structure | PCA / t-SNE / UMAP | PCA scree, loadings and biplot; t-SNE, UMAP, MDS maps |
119
+ | | Self-organizing map | Component planes (each column on the same map of the runs: correlated columns look alike) and the U-matrix with the runs (groups and the borders between them; lasso to select) |
120
+ | | Clustering | k-means, Gaussian mixture, Ward, HDBSCAN, DBSCAN; profiles, choice of k, dendrogram; click a run to select its cluster |
121
+ | Model | Sensitivity | SRC, SRRC, PRCC, RBD-FAST, PAWN, delta, type II ANOVA, main effects, interactions, half-normal plot and Pareto of effects; Sobol S1/ST and Morris on an automatic surrogate (its Q² shown); Sobol indices from a polynomial chaos expansion |
122
+ | | Surrogate models | Linear model, polynomial RSM (also with terms selected by AICc), Gaussian process, RBF, random forest, extra trees, gradient boosting, SVR, MLP, kNN, polynomial chaos, multi-fidelity GP (co-kriging of cheap and expensive runs, marked by a Fidelity column), Scheffé mixture polynomials; 5-fold CV leaderboard in scale space and original units; parity, residuals, response surface, partial dependence with ICE, importance, a neural network's training history; equations and model export |
123
+ | | What-if | Sliders per parameter (a mixture's keeping their total), every result predicted with a 90 % interval, prediction profiler, desirability with importance; maximise desirability; sweet spot (probability that every constraint is met over two parameters); design space (the largest box of parameter ranges around the point in which every setting meets every constraint with the required probability); robustness (Monte Carlo of parameter tolerances: P(met), ppm out, Cpk; FORM and importance sampling for small failure probabilities); predictions for a CSV of new settings; a whole curve predicted by a reduced-order model (POD) of the runs' curves; a mixture's triangle (a result, D or P(met) over three components) |
124
+ | | Calibration | Bayesian calibration of the parameters experiments cannot set: a CSV of experiments (known settings, measured results and curves), the posterior by an ensemble MCMC on the surrogates (corner plot, credible intervals, measured against predicted, chains), the samples exported |
125
+ | Decide | Pareto | Non-dominated runs, 2D/3D fronts, objective matrix, hypervolume, knee, TOPSIS ranking; progress over run order (best so far, hypervolume, feasible share); export the Pareto set |
126
+ | | Compare runs | The selected runs side by side (the best values in bold, unmet constraints marked), as a radar of their parameters and results, their images, the images of the best and worst runs by a result, and their curves among all runs' (columns of per-run image or curve files); match a measured curve (a result to minimise, for calibration). A run's picture also shows when hovering over its point on any plot |
127
+ | | Optimisation | Single objective (differential evolution + local polish) or NSGA-II on surrogates, with constraints; candidates with intervals and the nearest real run; robust design: the mean against the spread under parameter scatter, with reliability constraints and a limit on the spread (± 3σ), the best mean within it first |
128
+ | | Next runs | Expected improvement, probability of improvement, lower confidence bound, expected hypervolume improvement (2–3 objectives), maximum uncertainty or maximin space filling; respects constraints and avoids failure regions; exports a CSV in your column layout |
129
+
130
+ Model-based pages fit in each result's scale space (log10 of a Log10 result)
131
+ and report accuracy in both spaces. Long computations run in the background
132
+ with a progress bar and can be cancelled; GP fits use at most 1 500 runs, t-SNE
133
+ 3 000 and MDS 1 500 by default (always stated on the plot).
134
+
135
+ **Reports** (download icon): an interactive HTML report (plotly inlined, opens
136
+ offline) or a PDF report, with the column table, statistics and the chosen
137
+ pages.
138
+
139
+ ## Scripting
140
+
141
+ `doe_analyzer.api` is the same analysis without the window: each step a function, each returning a new dataset.
142
+ *Export plot as Python script* writes these calls for the plot on screen; they are kept working across versions.
143
+
144
+ ```python
145
+ import doe_analyzer.api as da
146
+
147
+ ds = da.read_csv("study.csv")
148
+ ds = da.set_column(ds, "y", role="result", goal="min")
149
+ runs = da.runs(ds, [da.hide_failed()])
150
+ snap = da.snapshot(ds, runs)
151
+ opts = da.options(ds, "scatter", x="x1", y="y")
152
+ result = da.compute(snap, "scatter", opts)
153
+ fig = da.figure(snap, "scatter", "scatter", opts, result, da.publication_theme(font_pt=9))
154
+ da.export(fig, "scatter.png", width=160, height=100, unit="mm", dpi=300) # offscreen: no display needed
155
+ ```
156
+
157
+ ## Tests
158
+
159
+ ```bash
160
+ .venv/bin/pytest # everything, headless (offscreen + software WebGL)
161
+ .venv/bin/pytest -m "not webengine" # without QtWebEngine
162
+ .venv/bin/python scripts/bench.py # responsiveness on 20 000 rows
163
+ .venv/bin/python scripts/export_all.py --demo all --out /tmp/plots
164
+ .venv/bin/python scripts/build_help.py # regenerate docs/HELP.md after editing doe_analyzer/data/help/*.md
165
+ ```
166
+
167
+ ## License
168
+
169
+ MIT, see [LICENSE](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/LICENSE). The icons are Google's Material Symbols, under
170
+ Apache-2.0: [doe_analyzer/data/icons/LICENSE](https://gitlab.com/niklas.nordin.swe/doe_analyzer/-/blob/master/doe_analyzer/data/icons/LICENSE).
@@ -0,0 +1,14 @@
1
+ """DOE Analyzer — analyse design-of-experiments results from CSV."""
2
+
3
+ import warnings as _warnings
4
+
5
+ __version__ = "0.3.0"
6
+
7
+ # scikit-learn's forests warn about joblib's `delayed` on every fit when run
8
+ # from worker threads; it is noise for this application.
9
+ _warnings.filterwarnings("ignore", message=r".*sklearn\.utils\.parallel\.delayed.*", category=UserWarning)
10
+ # MinCovDet (robust Mahalanobis outliers) warns on every fit when the data are
11
+ # (nearly) singular, as with few discrete levels; the estimate is still used.
12
+ _warnings.filterwarnings("ignore", message=r"Determinant has increased", category=RuntimeWarning)
13
+ _warnings.filterwarnings("ignore", message=r"The covariance matrix associated to your dataset is not full rank",
14
+ category=UserWarning)
@@ -0,0 +1,3 @@
1
+ from doe_analyzer.main import main
2
+
3
+ raise SystemExit(main())