Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
42149ad
Add init file
hannahlanzrath Sep 16, 2025
3d7db8e
[WIP] Add Adapter to CADET-Process
hannahlanzrath Sep 16, 2025
6e68e96
Add widget class
hannahlanzrath Sep 16, 2025
4760762
Add gitignore
hannahlanzrath Sep 22, 2025
6bd9c2a
Update pyproject.toml
hannahlanzrath Sep 22, 2025
4f26341
[WIP] Create Widget Prototype
hannahlanzrath Sep 22, 2025
8f5c572
[WIP] Working on Package
hannahlanzrath Sep 23, 2025
a5d935c
Chore: update meta files
hannahlanzrath Sep 7, 2026
cdbdb85
Move old widgets to legacy folder
hannahlanzrath Sep 7, 2026
6de7fc5
Transfer ipywidgets to anywidgets
hannahlanzrath Sep 7, 2026
a37653d
Update tests
hannahlanzrath Sep 7, 2026
fa41575
Add anywidget renderer
hannahlanzrath Sep 7, 2026
6922d47
Test forms
hannahlanzrath Sep 7, 2026
6564a7f
Allow reactive form
hannahlanzrath Sep 7, 2026
d6192ae
Transfer configuration widget to anywidget
hannahlanzrath Sep 7, 2026
6f10676
Add configuration widget test
hannahlanzrath Sep 7, 2026
a6e28c5
Transfer solution widget to anywidget
hannahlanzrath Sep 7, 2026
53769b4
Add shared stylesheet
hannahlanzrath Sep 7, 2026
540f7d1
Add example notebook
hannahlanzrath Sep 7, 2026
5519cd8
Add solution widget test
hannahlanzrath Sep 7, 2026
6d3dd85
Add webapp prototype
hannahlanzrath Sep 7, 2026
6567a38
Update Layout
hannahlanzrath Sep 7, 2026
761bc96
Add run_history widget
hannahlanzrath Sep 7, 2026
ca9a329
Test run_history widget
hannahlanzrath Sep 7, 2026
7825c51
Add data import widget
hannahlanzrath Sep 7, 2026
1dc11b7
Extend examples and add example data
hannahlanzrath Sep 7, 2026
4e87daa
Add data import tests
hannahlanzrath Sep 7, 2026
0f56113
Add export script funtionality to configuration widget
hannahlanzrath Sep 7, 2026
03fcc55
Remove legacy widgets
hannahlanzrath Sep 7, 2026
7387870
Rename fields in configuration widget
hannahlanzrath Sep 7, 2026
8d30829
Add tab structure for web app view
hannahlanzrath Sep 7, 2026
58da442
Add binding model picker to configuration widget
hannahlanzrath Sep 7, 2026
885f2c8
Add component picker
hannahlanzrath Sep 7, 2026
04758f0
Add interface.json
hannahlanzrath Sep 7, 2026
84cb00a
Wire through interface.json
hannahlanzrath Sep 7, 2026
12c5ab7
Test parameter readouts from interface.json
hannahlanzrath Sep 7, 2026
f781665
Add units to fields
hannahlanzrath Sep 7, 2026
9766337
Source units from json
hannahlanzrath Sep 7, 2026
c0d9044
Test units
hannahlanzrath Sep 7, 2026
4ab6746
[WIP] Switch to configurable tooltips, some are still broken
hannahlanzrath Sep 7, 2026
461f872
Rearrange sections
hannahlanzrath Sep 7, 2026
ee01b5e
Add Multiplexing and Multi Component Config Options for Binding
hannahlanzrath Sep 7, 2026
ed44f63
Remove comments
hannahlanzrath Sep 8, 2026
6ab40c9
Add event sliders
hannahlanzrath Sep 8, 2026
a04c173
Remove "Ready" and activate auto submit on form
hannahlanzrath Sep 9, 2026
a3e6d5d
Update Notebook
hannahlanzrath Sep 9, 2026
3deb1b6
Add workbench widget
hannahlanzrath Sep 9, 2026
07ae92d
Fix sliders clipping into fields
hannahlanzrath Sep 9, 2026
68f6b93
Fix multi component Fields Display
hannahlanzrath Sep 9, 2026
b671730
Put cycle time to minutes in Process Settings
hannahlanzrath Sep 9, 2026
b6ea6fc
Add is_kenetic tickbox to Binding model widget
hannahlanzrath Sep 9, 2026
f846e9e
Add interactive event timeline
hannahlanzrath Sep 9, 2026
6aafaf5
Widen drop down fields
hannahlanzrath Sep 9, 2026
9a6fc56
Clean up and ruff linter run
hannahlanzrath Sep 9, 2026
d8808f8
Add own Process Template "Pulse Feed"
hannahlanzrath Sep 9, 2026
bcb8326
Fix whitespace issue for multiple components
hannahlanzrath Sep 9, 2026
00d485e
Force minimum number of components for LWE and BE
hannahlanzrath Sep 9, 2026
10cd1fa
Add optional column-parameter visibility toggle
hannahlanzrath Sep 9, 2026
67a2f59
Change Default Models
hannahlanzrath Sep 11, 2026
01036a8
Fix total porosity missing from LRM as parameter
hannahlanzrath Sep 11, 2026
38d2d67
Enable Save and Import of Configurations
hannahlanzrath Sep 11, 2026
c40589e
Clean up
hannahlanzrath Sep 11, 2026
5f15488
Add parameter Estimation Widget
hannahlanzrath Sep 11, 2026
aa96ad6
Add example data explanation file
hannahlanzrath Sep 15, 2026
b62aa92
Add live plot to parameter estimation widget
hannahlanzrath Sep 15, 2026
d4e3439
Add additional analysis data to parameter estimation widget
hannahlanzrath Sep 15, 2026
5d276da
Refactor, Naming conventions
hannahlanzrath Sep 15, 2026
225cc73
Fix Ruff Errors
hannahlanzrath Sep 15, 2026
4131a86
Make sidebar configurable
hannahlanzrath Sep 21, 2026
722f7e7
Update gitignore
hannahlanzrath Sep 21, 2026
0731bcf
Add instruments and switch to phased process
hannahlanzrath Sep 22, 2026
3cc24a0
Add inno4vac examples
hannahlanzrath Sep 22, 2026
2e9811f
Sync SolutionWidget's run-history storage folder from ConfigurationWi…
hannahlanzrath Sep 22, 2026
436e0df
Nest saved configurations and run outputs under one per-configuration…
hannahlanzrath Sep 23, 2026
56a1b00
Extract a generalized optimizer-runner from ParameterEstimationWidget
hannahlanzrath Sep 23, 2026
723991f
Add a local sensitivity/identifiability diagnostic module
hannahlanzrath Sep 23, 2026
b9df876
Redesign SolutionWidget's storage folder and output-saving UX
hannahlanzrath Sep 23, 2026
9e1e7ac
Prefix stored files and use readable run ids; merge save UI into one …
hannahlanzrath Sep 23, 2026
f0f45ce
Save-outputs polish: results subfolder, correct icons, layout order
hannahlanzrath Sep 23, 2026
0bb0e06
Align the run picker and Load configuration button on the same row
hannahlanzrath Sep 23, 2026
fa63276
Follow the bound configuration's name for the run history storage folder
hannahlanzrath Sep 23, 2026
a77bb97
Rework column/binding parameter metadata resolution
hannahlanzrath Sep 23, 2026
2f056b2
Fix ChoiceField.set_options losing selection when the value is gone
hannahlanzrath Sep 23, 2026
6a1e1f3
Redesign boolean field checkboxes as toggle switches
hannahlanzrath Sep 23, 2026
f49cfe7
Make ConfigurationState's instrument attachment optional; add unit_va…
hannahlanzrath Sep 23, 2026
c16ee1b
Give InstrumentWidget's flow-path units real per-unit parameter forms
hannahlanzrath Sep 23, 2026
6cd4d82
Default "Use LC system" off, and only "column" checked once it's on
hannahlanzrath Sep 23, 2026
fd13c52
Adapt ConfigurationWidget to optional-instrument state; rename tab to…
hannahlanzrath Sep 23, 2026
fcd6caa
Add test_instrument.py for InstrumentWidget's per-unit parameter forms
hannahlanzrath Sep 23, 2026
51c38b3
Update test_instrument.py for the new leaner InstrumentWidget defaults
hannahlanzrath Sep 23, 2026
616eb93
Update test_configuration.py for optional-instrument ConfigurationState
hannahlanzrath Sep 23, 2026
0c22936
Update test_configuration.py for the new leaner InstrumentWidget defa…
hannahlanzrath Sep 23, 2026
6a3d396
Update test_workbench.py for the System tab rename and optional instr…
hannahlanzrath Sep 23, 2026
2ed32a9
Update test_workbench_builds_and_wires_the_four_widgets for LC-system…
hannahlanzrath Sep 23, 2026
8aff2ec
Add .cadetgui-subsection styling and plain-Checkbox toggle-switch look
hannahlanzrath Sep 23, 2026
4ae0b08
Replace .cadetgui-subsection's vertical bar with a horizontal separator
hannahlanzrath Sep 23, 2026
d58c36b
Add built_process_with_instrument() for tests needing the LCFlowSheet…
hannahlanzrath Sep 23, 2026
70ee1db
Fix flaky test_run_optimization_stops_promptly_once_cancelled
hannahlanzrath Sep 23, 2026
e0f8072
Add CharacterizationWidget: joint multi-experiment CADETProcess.chara…
hannahlanzrath Sep 23, 2026
70eccc7
Add examples/characterization.ipynb: staged Lonza-workflow-features p…
hannahlanzrath Sep 23, 2026
3e539f1
Give the characterization pipeline WorkbenchWidget-style chrome, clar…
hannahlanzrath Sep 23, 2026
58d795e
Drop interface.json: consume unit/description live off CADET-Process
hannahlanzrath Sep 23, 2026
801458c
Merge branch 'worktree-agent-aa073a5577326a253' into add_widget_class
hannahlanzrath Sep 23, 2026
ec9d5d4
Add ParameterHistoryWidget, a provenance log modeled on RunHistoryWidget
hannahlanzrath Sep 23, 2026
8d9d816
Wire ParameterHistoryWidget into the characterization pipeline; read …
hannahlanzrath Sep 23, 2026
42f721d
Add synthetic example data for the characterization pipeline
hannahlanzrath Sep 24, 2026
e9799fb
Add PID images
hannahlanzrath Sep 24, 2026
4b9d2af
Ruff
hannahlanzrath Sep 24, 2026
b8feba9
Add shared status helper and theme-aware status/chip styles
hannahlanzrath Sep 24, 2026
7f58186
Flag not-yet-usable sidebar steps with a warning icon and tooltip
hannahlanzrath Sep 24, 2026
8985e53
Add interactive LineChart and use it for the simulation solution plot
hannahlanzrath Sep 24, 2026
4330a6a
Render unit strings as LaTeX in the form fields and timeline chart
hannahlanzrath Sep 24, 2026
aca5f99
Show run and parameter history as a selectable table with status chips
hannahlanzrath Sep 24, 2026
6244fa5
Merge LaTeX unit rendering into add_widget_class
hannahlanzrath Sep 24, 2026
1d763e5
Centralize design tokens and add an accent color
hannahlanzrath Sep 24, 2026
aa28119
Restyle sections as cards on a tinted workbench page
hannahlanzrath Sep 24, 2026
06c4e86
Use font, size and mono tokens everywhere; tabular numerals in inputs
hannahlanzrath Sep 24, 2026
f0c9ca0
Modernize the workbench top bar and sidebar
hannahlanzrath Sep 24, 2026
0eb6ac6
Restyle buttons and inputs: accent primary, outlined secondary, share…
hannahlanzrath Sep 24, 2026
50358f0
Make the parameter-estimation chromatogram and live plot interactive
hannahlanzrath Sep 24, 2026
202b0b6
Open the Solution history fresh and add run deletion
hannahlanzrath Sep 24, 2026
6c8295a
Add collapsible groups to the sidebar; nest Periphery steps; drop wor…
hannahlanzrath Sep 24, 2026
a93ac1d
Raise text and control contrast to WCAG AA and enlarge the type scale
hannahlanzrath Sep 24, 2026
fb5491c
Populate the parameter-estimation signal picker without simulating
hannahlanzrath Sep 24, 2026
84c5e70
Update workbench test: estimation signal options exist before any pre…
hannahlanzrath Sep 24, 2026
ed95c1c
Fix sidebar icon spacing, widen name field and process fields column,…
hannahlanzrath Sep 24, 2026
ddfc89a
Replace the estimation Preview button with an auto-refreshing section…
hannahlanzrath Sep 24, 2026
50dc397
Remove the Use LC system toggle; an InstrumentWidget always applies t…
hannahlanzrath Sep 24, 2026
b0ecbb0
Validate System inputs inline and withhold the flow sheet while any i…
hannahlanzrath Sep 24, 2026
8bb4fe5
Start on Step with no sample loop; templates that need a loop switch …
hannahlanzrath Sep 24, 2026
7979cc8
Offer only measurable signal positions in CharacterizationWidget, wit…
hannahlanzrath Sep 25, 2026
f78895a
Narrow the Simulation signal dropdown to measurable positions
hannahlanzrath Sep 25, 2026
9375544
Add a live flow-path diagram to the System pane showing only the unit…
hannahlanzrath Sep 25, 2026
a4a1a3a
Label the Simulation and Characterization signal dropdowns with the d…
hannahlanzrath Sep 25, 2026
642162e
Compose the System diagram from the committed P&ID symbols and ship t…
hannahlanzrath Sep 25, 2026
e42e945
Make Breakthrough the default process template
hannahlanzrath Sep 25, 2026
daa1e6e
Show feed and buffer paths in the System diagram with unused inlets m…
hannahlanzrath Sep 25, 2026
bd4d2c6
Route the feed into the column inlet and label the final outlet plain…
hannahlanzrath Sep 25, 2026
8400088
Show Step as equilibrating with buffer A before switching to buffer B
hannahlanzrath Sep 25, 2026
6dcc92c
Add a Process template dropdown to the System pane synced with the Co…
hannahlanzrath Sep 25, 2026
5a7c421
Caption the selected column model under the column in the System diagram
hannahlanzrath Sep 25, 2026
6d336ee
Offer the column inlet and the driven inlets in the signal dropdowns
hannahlanzrath Sep 25, 2026
72656f4
Wrap component names under the inlets and widen the inlet column so c…
hannahlanzrath Sep 25, 2026
a445747
Rename the sidebar steps to System Configuration and Process Configur…
hannahlanzrath Sep 25, 2026
3831e5b
Keep each configuration's runs in a runs subfolder and move existing …
hannahlanzrath Sep 25, 2026
59f3a4f
Add a backend version widget showing the CADET-Process and CADET-Core…
hannahlanzrath Sep 25, 2026
1fc1846
Add a WorkspaceHeader with save summary and backend versions, embedde…
hannahlanzrath Sep 25, 2026
bea9944
Hoist the workspace header into the workbench shells above the sidebar
hannahlanzrath Sep 25, 2026
5ffec12
Make the workspace header a slim single-row strip
hannahlanzrath Sep 25, 2026
2e5d516
Put the details toggle left of the versions and tint the workspace he…
hannahlanzrath Sep 25, 2026
2e4dfa1
Tint the workbench page background with the sidebar highlight colour
hannahlanzrath Sep 25, 2026
6e73a1e
Revert "Tint the workbench page background with the sidebar highlight…
hannahlanzrath Sep 25, 2026
b1cde47
Fail with a clear message when CADET-Process lacks descriptor unit/de…
hannahlanzrath Sep 25, 2026
979e20c
Offer only measurable, plainly named signal positions in the paramete…
hannahlanzrath Sep 25, 2026
6b5c8bf
Run Parameter Estimation and the characterization stages through one …
hannahlanzrath Sep 25, 2026
70c6591
Draw phase bands and event markers in the event timeline chart
hannahlanzrath Sep 25, 2026
b05d6b9
Plot per-inlet flow rates in mL/min with phase bands and injection ma…
hannahlanzrath Sep 25, 2026
ef1c24c
Make the flow-path hardware a collapsible advanced section with a sum…
hannahlanzrath Sep 25, 2026
7bc257d
Offer the column toggle in every flow-path hardware section
hannahlanzrath Sep 25, 2026
e9e27f7
Grey out the column and binding model controls while the column is by…
hannahlanzrath Sep 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
__pycache__/
*.py[cod]
.pytest_cache/
.ipynb_checkpoints
debug*
log/
diskcache_*
results_*
*.egg-info
.vscode

# AI-assisted development notes (local working docs, not for the repo yet)
ai-docs/

presentations/
5 changes: 5 additions & 0 deletions cadetgui/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"""Widget-based GUI layer on top of CADET-Process."""

# Version information
name = "CADET-GUI"
__version__ = "0.0.1"
56 changes: 56 additions & 0 deletions cadetgui/_record_store.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from __future__ import annotations

import json
from dataclasses import asdict
from pathlib import Path
from typing import List, Type, TypeVar

__all__ = ["save_record", "load_record", "list_records", "delete_record"]

T = TypeVar("T")


def _manifest_path(prefix: str, id_: str, store_dir: Path) -> Path:
return store_dir / f"{prefix}_{id_}.json"


def save_record(prefix: str, id_: str, state: object, store_dir: Path) -> None:
"""Write one dataclass instance as `<store_dir>/<prefix>_<id_>.json`.

Shared by `cadetgui.run_store` and `cadetgui.parameter_history_store` --
both are the same shape (one JSON manifest per record, a `<prefix>_*`
glob to list them, newest-by-mtime first) over a different dataclass.
"""
store_dir.mkdir(parents=True, exist_ok=True)
_manifest_path(prefix, id_, store_dir).write_text(json.dumps(asdict(state), indent=2))


def load_record(prefix: str, id_: str, cls: Type[T], store_dir: Path) -> T:
"""Read one record by id, raising `FileNotFoundError` if it isn't there."""
path = _manifest_path(prefix, id_, store_dir)
if not path.exists():
raise FileNotFoundError(f"No recorded {prefix} {id_!r} in {store_dir}.")
return cls(**json.loads(path.read_text()))


def list_records(prefix: str, cls: Type[T], store_dir: Path) -> List[T]:
"""List every recorded `<prefix>_*` manifest, newest first. Skips unreadable ones."""
paths = sorted(
store_dir.glob(f"{prefix}_*.json"), key=lambda p: p.stat().st_mtime, reverse=True
)
records = []
for path in paths:
try:
records.append(cls(**json.loads(path.read_text())))
except Exception: # noqa: BLE001
continue
return records


def delete_record(prefix: str, id_: str, store_dir: Path) -> bool:
"""Remove one record's manifest; return whether it existed."""
path = _manifest_path(prefix, id_, store_dir)
if not path.exists():
return False
path.unlink()
return True
4 changes: 4 additions & 0 deletions cadetgui/assets/pid/Column.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions cadetgui/assets/pid/CondSensor.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions cadetgui/assets/pid/Inlet.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading