alchemist-nrel 0.2.1__tar.gz → 0.3.1__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 (161) hide show
  1. alchemist_nrel-0.3.1/MANIFEST.in +40 -0
  2. alchemist_nrel-0.3.1/PKG-INFO +185 -0
  3. alchemist_nrel-0.3.1/README.md +126 -0
  4. alchemist_nrel-0.3.1/alchemist-web/eslint.config.js +23 -0
  5. alchemist_nrel-0.3.1/alchemist-web/index.html +13 -0
  6. alchemist_nrel-0.3.1/alchemist-web/package-lock.json +7788 -0
  7. alchemist_nrel-0.3.1/alchemist-web/package.json +52 -0
  8. alchemist_nrel-0.3.1/alchemist-web/postcss.config.js +6 -0
  9. alchemist_nrel-0.3.1/alchemist-web/public/NEW_ICON.ico +0 -0
  10. alchemist_nrel-0.3.1/alchemist-web/public/NEW_ICON.png +0 -0
  11. alchemist_nrel-0.3.1/alchemist-web/public/NEW_LOGO_DARK.png +0 -0
  12. alchemist_nrel-0.3.1/alchemist-web/public/NEW_LOGO_LIGHT.png +0 -0
  13. alchemist_nrel-0.3.1/alchemist-web/public/vite.svg +1 -0
  14. alchemist_nrel-0.3.1/alchemist-web/src/App.css +42 -0
  15. alchemist_nrel-0.3.1/alchemist-web/src/App.tsx +527 -0
  16. alchemist_nrel-0.3.1/alchemist-web/src/api/client.ts +64 -0
  17. alchemist_nrel-0.3.1/alchemist-web/src/api/endpoints/acquisition.ts +19 -0
  18. alchemist_nrel-0.3.1/alchemist-web/src/api/endpoints/experiments.ts +96 -0
  19. alchemist_nrel-0.3.1/alchemist-web/src/api/endpoints/models.ts +46 -0
  20. alchemist_nrel-0.3.1/alchemist-web/src/api/endpoints/sessions.ts +85 -0
  21. alchemist_nrel-0.3.1/alchemist-web/src/api/endpoints/variables.ts +157 -0
  22. alchemist_nrel-0.3.1/alchemist-web/src/api/endpoints/visualizations.ts +103 -0
  23. alchemist_nrel-0.3.1/alchemist-web/src/api/types.ts +345 -0
  24. alchemist_nrel-0.3.1/alchemist-web/src/assets/react.svg +1 -0
  25. alchemist_nrel-0.3.1/alchemist-web/src/components/AddPointDialog.tsx +210 -0
  26. alchemist_nrel-0.3.1/alchemist-web/src/components/AuditLockDialog.tsx +47 -0
  27. alchemist_nrel-0.3.1/alchemist-web/src/components/PendingSuggestionsPanel.tsx +84 -0
  28. alchemist_nrel-0.3.1/alchemist-web/src/components/SessionMetadata.tsx +54 -0
  29. alchemist_nrel-0.3.1/alchemist-web/src/components/SessionMetadataDialog.tsx +143 -0
  30. alchemist_nrel-0.3.1/alchemist-web/src/components/api.ts +23 -0
  31. alchemist_nrel-0.3.1/alchemist-web/src/components/session-components.md +98 -0
  32. alchemist_nrel-0.3.1/alchemist-web/src/components/ui/CollapsibleSection.tsx +49 -0
  33. alchemist_nrel-0.3.1/alchemist-web/src/components/ui/FormField.tsx +111 -0
  34. alchemist_nrel-0.3.1/alchemist-web/src/components/ui/SegmentedButton.tsx +46 -0
  35. alchemist_nrel-0.3.1/alchemist-web/src/components/ui/TabView.tsx +60 -0
  36. alchemist_nrel-0.3.1/alchemist-web/src/components/ui/index.ts +7 -0
  37. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/CalibrationCurve.tsx +209 -0
  38. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/ContourPlot.tsx +570 -0
  39. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/ContourPlotSimple.tsx +21 -0
  40. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/HyperparametersDisplay.tsx +42 -0
  41. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/MetricsPlot.tsx +142 -0
  42. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/ParityPlot.tsx +174 -0
  43. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/QQPlot.tsx +221 -0
  44. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/VisualizationsPanel.tsx +190 -0
  45. alchemist_nrel-0.3.1/alchemist-web/src/components/visualizations/index.ts +10 -0
  46. alchemist_nrel-0.3.1/alchemist-web/src/features/acquisition/AcquisitionPanel.tsx +644 -0
  47. alchemist_nrel-0.3.1/alchemist-web/src/features/acquisition/index.ts +4 -0
  48. alchemist_nrel-0.3.1/alchemist-web/src/features/experiments/ExperimentsPanel.tsx +193 -0
  49. alchemist_nrel-0.3.1/alchemist-web/src/features/experiments/InitialDesignPanel.tsx +191 -0
  50. alchemist_nrel-0.3.1/alchemist-web/src/features/models/GPRPanel.tsx +428 -0
  51. alchemist_nrel-0.3.1/alchemist-web/src/features/models/README.md +130 -0
  52. alchemist_nrel-0.3.1/alchemist-web/src/features/models/index.ts +4 -0
  53. alchemist_nrel-0.3.1/alchemist-web/src/features/monitoring/MonitoringDashboard.tsx +189 -0
  54. alchemist_nrel-0.3.1/alchemist-web/src/features/variables/VariableForm.tsx +310 -0
  55. alchemist_nrel-0.3.1/alchemist-web/src/features/variables/VariableList.tsx +116 -0
  56. alchemist_nrel-0.3.1/alchemist-web/src/features/variables/VariablesPanel.tsx +126 -0
  57. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useAcquisition.ts +54 -0
  58. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useDeleteVariable.ts +28 -0
  59. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useExperiments.ts +87 -0
  60. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useFileOperations.ts +36 -0
  61. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useModels.ts +54 -0
  62. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useSessions.ts +174 -0
  63. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useVariables.ts +57 -0
  64. alchemist_nrel-0.3.1/alchemist-web/src/hooks/api/useVisualizations.ts +123 -0
  65. alchemist_nrel-0.3.1/alchemist-web/src/hooks/useLockStatus.ts +164 -0
  66. alchemist_nrel-0.3.1/alchemist-web/src/hooks/useTheme.tsx +34 -0
  67. alchemist_nrel-0.3.1/alchemist-web/src/index.css +121 -0
  68. alchemist_nrel-0.3.1/alchemist-web/src/lib/utils.ts +44 -0
  69. alchemist_nrel-0.3.1/alchemist-web/src/main.tsx +10 -0
  70. alchemist_nrel-0.3.1/alchemist-web/src/providers/QueryProvider.tsx +43 -0
  71. alchemist_nrel-0.3.1/alchemist-web/src/providers/VisualizationProvider.tsx +53 -0
  72. alchemist_nrel-0.3.1/alchemist-web/tailwind.config.js +53 -0
  73. alchemist_nrel-0.3.1/alchemist-web/tsconfig.app.json +28 -0
  74. alchemist_nrel-0.3.1/alchemist-web/tsconfig.json +7 -0
  75. alchemist_nrel-0.3.1/alchemist-web/tsconfig.node.json +26 -0
  76. alchemist_nrel-0.3.1/alchemist-web/vite.config.ts +21 -0
  77. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/__init__.py +14 -7
  78. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/acquisition/botorch_acquisition.py +15 -6
  79. alchemist_nrel-0.3.1/alchemist_core/audit_log.py +594 -0
  80. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/data/experiment_manager.py +76 -5
  81. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/models/botorch_model.py +6 -4
  82. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/models/sklearn_model.py +74 -8
  83. alchemist_nrel-0.3.1/alchemist_core/session.py +1352 -0
  84. alchemist_nrel-0.3.1/alchemist_core/utils/doe.py +200 -0
  85. alchemist_nrel-0.3.1/alchemist_nrel.egg-info/PKG-INFO +185 -0
  86. alchemist_nrel-0.3.1/alchemist_nrel.egg-info/SOURCES.txt +146 -0
  87. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_nrel.egg-info/entry_points.txt +1 -0
  88. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_nrel.egg-info/requires.txt +1 -0
  89. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/example_client.py +7 -2
  90. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/main.py +21 -4
  91. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/models/requests.py +95 -1
  92. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/models/responses.py +167 -0
  93. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/routers/acquisition.py +25 -0
  94. alchemist_nrel-0.3.1/api/routers/experiments.py +282 -0
  95. alchemist_nrel-0.3.1/api/routers/sessions.py +574 -0
  96. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/routers/visualizations.py +10 -5
  97. alchemist_nrel-0.3.1/api/routers/websocket.py +132 -0
  98. alchemist_nrel-0.3.1/api/run_api.py +56 -0
  99. alchemist_nrel-0.3.1/api/services/session_store.py +522 -0
  100. alchemist_nrel-0.3.1/api/static/NEW_ICON.ico +0 -0
  101. alchemist_nrel-0.3.1/api/static/NEW_ICON.png +0 -0
  102. alchemist_nrel-0.3.1/api/static/NEW_LOGO_DARK.png +0 -0
  103. alchemist_nrel-0.3.1/api/static/NEW_LOGO_LIGHT.png +0 -0
  104. alchemist_nrel-0.3.1/api/static/assets/api-vcoXEqyq.js +1 -0
  105. alchemist_nrel-0.3.1/api/static/assets/index-DWfIKU9j.js +4094 -0
  106. alchemist_nrel-0.3.1/api/static/assets/index-sMIa_1hV.css +1 -0
  107. alchemist_nrel-0.3.1/api/static/index.html +14 -0
  108. alchemist_nrel-0.3.1/api/static/vite.svg +1 -0
  109. alchemist_nrel-0.3.1/build_tools/__init__.py +1 -0
  110. alchemist_nrel-0.3.1/build_tools/build_hooks.py +118 -0
  111. alchemist_nrel-0.3.1/build_tools/setup.py +23 -0
  112. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/pyproject.toml +9 -3
  113. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/gpr_panel.py +7 -2
  114. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/notifications.py +197 -10
  115. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/ui.py +1117 -68
  116. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/variables_setup.py +47 -2
  117. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/visualizations.py +60 -3
  118. alchemist_nrel-0.2.1/PKG-INFO +0 -206
  119. alchemist_nrel-0.2.1/README.md +0 -148
  120. alchemist_nrel-0.2.1/alchemist_core/models/ax_model.py +0 -159
  121. alchemist_nrel-0.2.1/alchemist_core/session.py +0 -603
  122. alchemist_nrel-0.2.1/alchemist_nrel.egg-info/PKG-INFO +0 -206
  123. alchemist_nrel-0.2.1/alchemist_nrel.egg-info/SOURCES.txt +0 -61
  124. alchemist_nrel-0.2.1/api/routers/experiments.py +0 -154
  125. alchemist_nrel-0.2.1/api/routers/sessions.py +0 -146
  126. alchemist_nrel-0.2.1/api/services/session_store.py +0 -291
  127. alchemist_nrel-0.2.1/tests/test_core_data.py +0 -177
  128. alchemist_nrel-0.2.1/tests/test_event_system.py +0 -336
  129. alchemist_nrel-0.2.1/tests/test_logging.py +0 -70
  130. alchemist_nrel-0.2.1/tests/test_session_api.py +0 -209
  131. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/LICENSE +0 -0
  132. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/acquisition/__init__.py +0 -0
  133. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/acquisition/base_acquisition.py +0 -0
  134. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/acquisition/skopt_acquisition.py +0 -0
  135. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/config.py +0 -0
  136. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/data/__init__.py +0 -0
  137. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/data/search_space.py +0 -0
  138. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/events.py +0 -0
  139. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/models/__init__.py +0 -0
  140. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/models/base_model.py +0 -0
  141. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_core/utils/__init__.py +0 -0
  142. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_nrel.egg-info/dependency_links.txt +0 -0
  143. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/alchemist_nrel.egg-info/top_level.txt +0 -0
  144. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/__init__.py +0 -0
  145. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/dependencies.py +0 -0
  146. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/middleware/__init__.py +0 -0
  147. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/middleware/error_handlers.py +0 -0
  148. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/models/__init__.py +0 -0
  149. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/routers/__init__.py +0 -0
  150. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/routers/models.py +0 -0
  151. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/routers/variables.py +0 -0
  152. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/api/services/__init__.py +0 -0
  153. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/main.py +0 -0
  154. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/setup.cfg +0 -0
  155. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/__init__.py +0 -0
  156. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/acquisition_panel.py +0 -0
  157. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/custom_widgets.py +0 -0
  158. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/experiment_logger.py +0 -0
  159. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/pool_viz.py +0 -0
  160. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/ui_utils.py +0 -0
  161. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.1}/ui/utils.py +0 -0
@@ -0,0 +1,40 @@
1
+ # MANIFEST.in - Include additional files in source distribution (sdist)
2
+
3
+ # Include documentation
4
+ include README.md
5
+ include LICENSE
6
+ include RELEASE_BUILD_GUIDE.md
7
+
8
+ # Include build tools
9
+ include build_tools/build_hooks.py
10
+ include build_tools/setup.py
11
+ include build_tools/__init__.py
12
+
13
+ # Include frontend source (for building from sdist) - but NOT node_modules or build artifacts
14
+ recursive-include alchemist-web/src *
15
+ recursive-include alchemist-web/public *
16
+ include alchemist-web/package.json
17
+ include alchemist-web/package-lock.json
18
+ include alchemist-web/tsconfig.json
19
+ include alchemist-web/tsconfig.*.json
20
+ include alchemist-web/vite.config.ts
21
+ include alchemist-web/tailwind.config.js
22
+ include alchemist-web/postcss.config.js
23
+ include alchemist-web/eslint.config.js
24
+ include alchemist-web/index.html
25
+
26
+ # Include run scripts
27
+ include main.py
28
+
29
+ # Exclude unnecessary files from sdist
30
+ global-exclude __pycache__
31
+ global-exclude *.py[co]
32
+ global-exclude .DS_Store
33
+ global-exclude node_modules
34
+ recursive-exclude tests *
35
+ recursive-exclude docs *
36
+ recursive-exclude memory *
37
+ recursive-exclude .github *
38
+ recursive-exclude alchemist-web/node_modules *
39
+ recursive-exclude alchemist-web/dist *
40
+ recursive-exclude alchemist-web/.vite *
@@ -0,0 +1,185 @@
1
+ Metadata-Version: 2.4
2
+ Name: alchemist-nrel
3
+ Version: 0.3.1
4
+ Summary: Active learning and optimization toolkit for chemical and materials research
5
+ Author-email: Caleb Coatney <caleb.coatney@nrel.gov>
6
+ License: BSD-3-Clause
7
+ Project-URL: Homepage, https://github.com/NREL/ALchemist
8
+ Project-URL: Documentation, https://nrel.github.io/ALchemist/
9
+ Project-URL: Source, https://github.com/NREL/ALchemist
10
+ Project-URL: Bug Tracker, https://github.com/NREL/ALchemist/issues
11
+ Project-URL: Changelog, https://github.com/NREL/ALchemist/releases
12
+ Keywords: active learning,bayesian optimization,gaussian processes,materials science,chemistry
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: BSD License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Scientific/Engineering
21
+ Classifier: Topic :: Scientific/Engineering :: Chemistry
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: numpy
26
+ Requires-Dist: pandas
27
+ Requires-Dist: scipy
28
+ Requires-Dist: matplotlib
29
+ Requires-Dist: mplcursors
30
+ Requires-Dist: scikit-learn
31
+ Requires-Dist: scikit-optimize
32
+ Requires-Dist: botorch
33
+ Requires-Dist: torch
34
+ Requires-Dist: gpytorch
35
+ Requires-Dist: ax-platform
36
+ Requires-Dist: customtkinter
37
+ Requires-Dist: tksheet
38
+ Requires-Dist: tabulate
39
+ Requires-Dist: ctkmessagebox
40
+ Requires-Dist: joblib
41
+ Requires-Dist: fastapi>=0.109.0
42
+ Requires-Dist: uvicorn[standard]>=0.27.0
43
+ Requires-Dist: pydantic>=2.5.0
44
+ Requires-Dist: python-multipart>=0.0.6
45
+ Requires-Dist: requests
46
+ Provides-Extra: test
47
+ Requires-Dist: pytest>=8.0.0; extra == "test"
48
+ Requires-Dist: pytest-cov>=4.0.0; extra == "test"
49
+ Requires-Dist: pytest-anyio>=0.0.0; extra == "test"
50
+ Requires-Dist: httpx>=0.25.0; extra == "test"
51
+ Requires-Dist: requests>=2.31.0; extra == "test"
52
+ Provides-Extra: dev
53
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
54
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
55
+ Requires-Dist: pytest-anyio>=0.0.0; extra == "dev"
56
+ Requires-Dist: httpx>=0.25.0; extra == "dev"
57
+ Requires-Dist: requests>=2.31.0; extra == "dev"
58
+ Dynamic: license-file
59
+
60
+ <img src="docs/assets/NEW_LOGO_LIGHT.png" alt="ALchemist" width="50%" />
61
+
62
+ **ALchemist: Active Learning Toolkit for Chemical and Materials Research**
63
+
64
+ ALchemist is a modular Python toolkit that brings active learning and Bayesian optimization to experimental design in chemical and materials research. It is designed for scientists and engineers who want to efficiently explore or optimize high-dimensional variable spaces—using intuitive graphical interfaces, programmatic APIs, or autonomous optimization workflows.
65
+
66
+ **NLR Software Record:** SWR-25-102
67
+
68
+ ---
69
+
70
+ ## Documentation
71
+
72
+ Full user guide and documentation:
73
+ [https://nrel.github.io/ALchemist/](https://nrel.github.io/ALchemist/)
74
+
75
+ ---
76
+
77
+ ## Overview
78
+
79
+ **Key Features:**
80
+
81
+ - **Flexible variable space definition**: Real, integer, and categorical variables with bounds or discrete values
82
+ - **Probabilistic surrogate modeling**: Gaussian process regression via BoTorch or scikit-learn backends
83
+ - **Advanced acquisition strategies**: Efficient sampling using qEI, qPI, qUCB, and qNegIntegratedPosteriorVariance
84
+ - **Modern web interface**: React-based UI with FastAPI backend for seamless active learning workflows
85
+ - **Desktop GUI**: CustomTkinter desktop application for offline optimization
86
+ - **Session management**: Save/load optimization sessions with audit logs for reproducibility
87
+ - **Multiple interfaces**: No-code GUI, Python Session API, or REST API for different use cases
88
+ - **Autonomous optimization**: Human-out-of-the-loop operation for real-time process control
89
+ - **Experiment tracking**: CSV logging, reproducible random seeds, and comprehensive audit trails
90
+ - **Extensibility**: Abstract interfaces for models and acquisition functions enable future backend and workflow expansion
91
+ **Architecture:**
92
+
93
+ ALchemist is built on a clean, modular architecture:
94
+
95
+ - **Core Session API**: Headless Bayesian optimization engine (`alchemist_core`) that powers all interfaces
96
+ - **Desktop Application**: CustomTkinter GUI using the Core Session API, designed for human-in-the-loop and offline optimization
97
+ - **REST API**: FastAPI server providing a thin wrapper around the Core Session API for remote access
98
+ - **Web Application**: React UI consuming the REST API, supporting both interactive and autonomous optimization workflows
99
+
100
+ Session files (JSON format) are fully interoperable between desktop and web applications, enabling seamless workflow transitions.
101
+
102
+ ---
103
+
104
+ ## Use Cases
105
+
106
+ - **Interactive Optimization**: Use desktop or web GUI for manual experiment design and human-in-the-loop optimization
107
+ - **Programmatic Workflows**: Import the Session API in Python scripts or Jupyter notebooks for batch processing
108
+ - **Autonomous Optimization**: Use the REST API to integrate ALchemist with automated laboratory equipment for real-time process control
109
+ - **Remote Monitoring**: Web dashboard provides read-only monitoring mode when ALchemist is being remote-controlled
110
+
111
+ For detailed application examples, see [Use Cases](https://nrel.github.io/ALchemist/use_cases/) in the documentation.
112
+
113
+ ---
114
+
115
+ ## Installation
116
+
117
+ **Requirements:** Python 3.11 or higher
118
+
119
+ **Recommended (Optional):** We recommend using [Anaconda](https://www.anaconda.com/products/distribution) to manage Python environments:
120
+
121
+ ```bash
122
+ conda create -n alchemist-env python=3.11
123
+ conda activate alchemist-env
124
+ ```
125
+
126
+ **Basic Installation:**
127
+
128
+ ```bash
129
+ pip install alchemist-nrel
130
+ ```
131
+
132
+ **From GitHub:**
133
+ > *Note: This installs the latest unreleased version. The web application is not pre-built with this method because static build files are not included in the repository.*
134
+
135
+ ```bash
136
+ pip install git+https://github.com/NREL/ALchemist.git
137
+ ```
138
+
139
+ For advanced installation options, Docker deployment, and development setup, see the [Advanced Installation Guide](https://nrel.github.io/ALchemist/#advanced-installation) in the documentation.
140
+
141
+ ---
142
+
143
+ ## Running ALchemist
144
+
145
+ **Web Application:**
146
+ ```bash
147
+ alchemist-web
148
+ ```
149
+ Opens at [http://localhost:8000/app](http://localhost:8000/app)
150
+
151
+ **Desktop Application:**
152
+ ```bash
153
+ alchemist
154
+ ```
155
+
156
+ For detailed usage instructions, see [Getting Started](https://nrel.github.io/ALchemist/) in the documentation.
157
+
158
+ ---
159
+
160
+ ## Development Status
161
+
162
+ ALchemist is under active development at NLR as part of the DataHub project within the ChemCatBio consortium.
163
+
164
+ ---
165
+
166
+ ## Issues & Troubleshooting
167
+
168
+ If you encounter any issues or have questions, please [open an issue on GitHub](https://github.com/NREL/ALchemist/issues) or contact ccoatney@nrel.gov.
169
+
170
+ For the latest known issues and troubleshooting tips, see the [Issues & Troubleshooting Log](docs/ISSUES_LOG.md).
171
+
172
+ We appreciate your feedback and bug reports to help improve ALchemist!
173
+
174
+ ---
175
+
176
+ ## License
177
+
178
+ This project is licensed under the BSD 3-Clause License. See the [LICENSE](LICENSE) file for details.
179
+
180
+ ---
181
+
182
+ ## Repository
183
+
184
+ [https://github.com/NREL/ALchemist](https://github.com/NREL/ALchemist)
185
+
@@ -0,0 +1,126 @@
1
+ <img src="docs/assets/NEW_LOGO_LIGHT.png" alt="ALchemist" width="50%" />
2
+
3
+ **ALchemist: Active Learning Toolkit for Chemical and Materials Research**
4
+
5
+ ALchemist is a modular Python toolkit that brings active learning and Bayesian optimization to experimental design in chemical and materials research. It is designed for scientists and engineers who want to efficiently explore or optimize high-dimensional variable spaces—using intuitive graphical interfaces, programmatic APIs, or autonomous optimization workflows.
6
+
7
+ **NLR Software Record:** SWR-25-102
8
+
9
+ ---
10
+
11
+ ## Documentation
12
+
13
+ Full user guide and documentation:
14
+ [https://nrel.github.io/ALchemist/](https://nrel.github.io/ALchemist/)
15
+
16
+ ---
17
+
18
+ ## Overview
19
+
20
+ **Key Features:**
21
+
22
+ - **Flexible variable space definition**: Real, integer, and categorical variables with bounds or discrete values
23
+ - **Probabilistic surrogate modeling**: Gaussian process regression via BoTorch or scikit-learn backends
24
+ - **Advanced acquisition strategies**: Efficient sampling using qEI, qPI, qUCB, and qNegIntegratedPosteriorVariance
25
+ - **Modern web interface**: React-based UI with FastAPI backend for seamless active learning workflows
26
+ - **Desktop GUI**: CustomTkinter desktop application for offline optimization
27
+ - **Session management**: Save/load optimization sessions with audit logs for reproducibility
28
+ - **Multiple interfaces**: No-code GUI, Python Session API, or REST API for different use cases
29
+ - **Autonomous optimization**: Human-out-of-the-loop operation for real-time process control
30
+ - **Experiment tracking**: CSV logging, reproducible random seeds, and comprehensive audit trails
31
+ - **Extensibility**: Abstract interfaces for models and acquisition functions enable future backend and workflow expansion
32
+ **Architecture:**
33
+
34
+ ALchemist is built on a clean, modular architecture:
35
+
36
+ - **Core Session API**: Headless Bayesian optimization engine (`alchemist_core`) that powers all interfaces
37
+ - **Desktop Application**: CustomTkinter GUI using the Core Session API, designed for human-in-the-loop and offline optimization
38
+ - **REST API**: FastAPI server providing a thin wrapper around the Core Session API for remote access
39
+ - **Web Application**: React UI consuming the REST API, supporting both interactive and autonomous optimization workflows
40
+
41
+ Session files (JSON format) are fully interoperable between desktop and web applications, enabling seamless workflow transitions.
42
+
43
+ ---
44
+
45
+ ## Use Cases
46
+
47
+ - **Interactive Optimization**: Use desktop or web GUI for manual experiment design and human-in-the-loop optimization
48
+ - **Programmatic Workflows**: Import the Session API in Python scripts or Jupyter notebooks for batch processing
49
+ - **Autonomous Optimization**: Use the REST API to integrate ALchemist with automated laboratory equipment for real-time process control
50
+ - **Remote Monitoring**: Web dashboard provides read-only monitoring mode when ALchemist is being remote-controlled
51
+
52
+ For detailed application examples, see [Use Cases](https://nrel.github.io/ALchemist/use_cases/) in the documentation.
53
+
54
+ ---
55
+
56
+ ## Installation
57
+
58
+ **Requirements:** Python 3.11 or higher
59
+
60
+ **Recommended (Optional):** We recommend using [Anaconda](https://www.anaconda.com/products/distribution) to manage Python environments:
61
+
62
+ ```bash
63
+ conda create -n alchemist-env python=3.11
64
+ conda activate alchemist-env
65
+ ```
66
+
67
+ **Basic Installation:**
68
+
69
+ ```bash
70
+ pip install alchemist-nrel
71
+ ```
72
+
73
+ **From GitHub:**
74
+ > *Note: This installs the latest unreleased version. The web application is not pre-built with this method because static build files are not included in the repository.*
75
+
76
+ ```bash
77
+ pip install git+https://github.com/NREL/ALchemist.git
78
+ ```
79
+
80
+ For advanced installation options, Docker deployment, and development setup, see the [Advanced Installation Guide](https://nrel.github.io/ALchemist/#advanced-installation) in the documentation.
81
+
82
+ ---
83
+
84
+ ## Running ALchemist
85
+
86
+ **Web Application:**
87
+ ```bash
88
+ alchemist-web
89
+ ```
90
+ Opens at [http://localhost:8000/app](http://localhost:8000/app)
91
+
92
+ **Desktop Application:**
93
+ ```bash
94
+ alchemist
95
+ ```
96
+
97
+ For detailed usage instructions, see [Getting Started](https://nrel.github.io/ALchemist/) in the documentation.
98
+
99
+ ---
100
+
101
+ ## Development Status
102
+
103
+ ALchemist is under active development at NLR as part of the DataHub project within the ChemCatBio consortium.
104
+
105
+ ---
106
+
107
+ ## Issues & Troubleshooting
108
+
109
+ If you encounter any issues or have questions, please [open an issue on GitHub](https://github.com/NREL/ALchemist/issues) or contact ccoatney@nrel.gov.
110
+
111
+ For the latest known issues and troubleshooting tips, see the [Issues & Troubleshooting Log](docs/ISSUES_LOG.md).
112
+
113
+ We appreciate your feedback and bug reports to help improve ALchemist!
114
+
115
+ ---
116
+
117
+ ## License
118
+
119
+ This project is licensed under the BSD 3-Clause License. See the [LICENSE](LICENSE) file for details.
120
+
121
+ ---
122
+
123
+ ## Repository
124
+
125
+ [https://github.com/NREL/ALchemist](https://github.com/NREL/ALchemist)
126
+
@@ -0,0 +1,23 @@
1
+ import js from '@eslint/js'
2
+ import globals from 'globals'
3
+ import reactHooks from 'eslint-plugin-react-hooks'
4
+ import reactRefresh from 'eslint-plugin-react-refresh'
5
+ import tseslint from 'typescript-eslint'
6
+ import { defineConfig, globalIgnores } from 'eslint/config'
7
+
8
+ export default defineConfig([
9
+ globalIgnores(['dist']),
10
+ {
11
+ files: ['**/*.{ts,tsx}'],
12
+ extends: [
13
+ js.configs.recommended,
14
+ tseslint.configs.recommended,
15
+ reactHooks.configs['recommended-latest'],
16
+ reactRefresh.configs.vite,
17
+ ],
18
+ languageOptions: {
19
+ ecmaVersion: 2020,
20
+ globals: globals.browser,
21
+ },
22
+ },
23
+ ])
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/NEW_ICON.png" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>ALchemist - Active Learning Toolkit</title>
8
+ </head>
9
+ <body>
10
+ <div id="root"></div>
11
+ <script type="module" src="/src/main.tsx"></script>
12
+ </body>
13
+ </html>