Skip to content

Commit c3f866b

Browse files
committed
Automate optional, attempt to get MoleculeAndAxisWidget working
1 parent 7ca05c4 commit c3f866b

32 files changed

Lines changed: 93 additions & 955 deletions

MDANSE/Src/MDANSE/Framework/Parameters/Choices.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,10 @@ def choices(self) -> set[T]:
162162
def choices(self, value: Any) -> None:
163163
self._choices = set()
164164

165-
def get_choices(self, deps) -> set[T]:
165+
def get_choices(self, deps: Depends) -> set[T]:
166+
if not deps:
167+
raise ConfigError("Misconfigured deps")
168+
166169
choices = set(get_deep_attr(deps["choices"], self.getter))
167170
if not choices:
168171
raise ConfigError(f"No valid choices at deps['choices'].{self.getter}")

MDANSE/Src/MDANSE/Framework/Parameters/Molecules.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,15 @@ def __set__(
7979
) -> None:
8080
self.last_deps = self._get_deps(owner)
8181

82-
if isinstance(value, tuple):
83-
self.set(*value)
84-
return
85-
86-
if isinstance(value, dict):
87-
self.configuration = value
88-
return
89-
90-
if isinstance(value, str):
91-
self.molecule = value
92-
return
93-
94-
super().__set__(owner, value)
82+
match value:
83+
case [*args]:
84+
self.set(*args)
85+
case dict():
86+
self.configuration = value
87+
case str():
88+
self.molecule = value
89+
case _:
90+
super().__set__(owner, value)
9591

9692
@property
9793
def details(self) -> str:

MDANSE/Src/MDANSE/Framework/Parameters/Parameters.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,11 @@ def raw_values(self) -> dict[DescID, Any]:
160160
Mapping of descriptor name to Values before validation.
161161
"""
162162
return {
163-
name: desc.raw_values
164-
if isinstance(desc, Configurable)
165-
else getattr(self, desc.raw_name)
163+
name: (
164+
desc.raw_values
165+
if isinstance(desc, Configurable)
166+
else getattr(self, desc.raw_name)
167+
)
166168
for name, desc in self.descriptors.items()
167169
}
168170

@@ -449,26 +451,28 @@ def _get_deps(
449451
ConfigError
450452
Dependencies are invalid.
451453
"""
452-
deps = depends if depends is not None else self.depends
454+
dependencies = depends if depends is not None else self.depends
453455

454-
if any(self._bad_deps(owner, deps)):
456+
if any(self._bad_deps(owner, dependencies)):
455457
raise ConfigError(
456-
f"Dependencies ({cjoin(compress(deps, self._bad_deps(owner)))}) "
458+
f"Dependencies ({cjoin(compress(dependencies, self._bad_deps(owner)))}) "
457459
"are not correctly defined."
458460
)
459461

460-
deps = {
461-
dep: getattr(owner, key) for dep, key in deps.items() if key != "parent"
462+
dep_values = {
463+
dep: getattr(owner, key)
464+
for dep, key in dependencies.items()
465+
if key != "parent"
462466
}
463467

464-
if "parent" in deps.values() and isinstance(owner, CustomConfig):
465-
deps |= {
466-
key: owner.last_deps[key]
467-
for key, val in deps.items()
468-
if val == "parent"
468+
if "parent" in dependencies.values() and isinstance(owner, CustomConfig):
469+
dep_values |= {
470+
dep: owner.last_deps[dep]
471+
for dep, key in dependencies.items()
472+
if key == "parent"
469473
}
470474

471-
return cast("Depends", deps)
475+
return cast("Depends", dep_values)
472476

473477
def required_deps(self) -> set[DescID]:
474478
return set()
@@ -496,7 +500,6 @@ class CustomConfig(Parameter, HasDependencies, Configurable):
496500

497501
def __get__(self, owner: Configurable, objtype: type | None = None):
498502
self.last_deps = self._get_deps(owner)
499-
500503
return self
501504

502505
def __set__(self, owner: Configurable, value):
@@ -627,7 +630,7 @@ def __get__(
627630
return out
628631

629632
def __set__(self, owner: Configurable, value: P) -> None:
630-
setattr(owner, self.configured_var, False)
633+
setattr(owner, self.configured_var, self.has_default)
631634
setattr(owner, self.private_name, SENTINEL)
632635
raw = value
633636

@@ -650,7 +653,6 @@ def _verify_on_set(self: Self, owner: Configurable, value: P) -> T | CB:
650653
)
651654

652655
deps = self._get_deps(owner)
653-
654656
proc = self.validate(value, deps)
655657

656658
# For grouped config descriptors

MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/ArrayWidget.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def __init__(self, *args, parameter: Array | Vector, **kwargs):
5555
self._model.appendRow(items)
5656

5757
self._layout.addWidget(self._view)
58-
self._apply_box.setChecked(True)
58+
self.toggle_widgets()
5959
self._model.itemChanged.connect(self.updateValue)
6060

6161
@Slot()

MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/AseInputFileWidget.py

Lines changed: 0 additions & 93 deletions
This file was deleted.

MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/BackupWidget.py

Lines changed: 0 additions & 42 deletions
This file was deleted.

MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/BooleanWidget.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,18 @@ def __init__(self, *args, parameter: Boolean, **kwargs):
3131
super().__init__(*args, parameter=parameter, **kwargs)
3232
default_option = self.parameter.default
3333

34-
field = QCheckBox(self._base)
35-
field.setTristate(False)
36-
field.setChecked(default_option)
37-
field.stateChanged.connect(self.updateValue)
34+
self._field = QCheckBox(self._base)
35+
self._field.setTristate(False)
36+
self._field.setChecked(default_option)
37+
self._field.stateChanged.connect(self.updateValue)
3838

3939
if self._tooltip:
4040
tooltip_text = self._tooltip
4141
else:
4242
tooltip_text = "A single logical value that can be True of False"
43-
field.setToolTip(tooltip_text)
43+
self._field.setToolTip(tooltip_text)
4444

45-
self._field = field
46-
self._layout.addWidget(field)
45+
self._layout.addWidget(self._field)
4746

4847
self.default_labels()
4948
self.update_labels()
@@ -59,3 +58,6 @@ def default_labels(self):
5958
if not self._tooltip:
6059
self._tooltip = "A single logical value that can be True of False"
6160
self._field.setToolTip(self._tooltip)
61+
62+
def get_widget_value(self):
63+
return self._field.checkState() == Qt.CheckState.Checked

MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/ComboWidget.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,20 @@ def __init__(self, *args, parameter: Choice, choices: Sequence = (), **kwargs):
4747

4848
self._field = QComboBox(self._base)
4949

50+
self._field.currentTextChanged.connect(self.updateValue)
51+
self._field.setToolTip(tooltip_text)
52+
self._layout.addWidget(self._field)
53+
5054
if option_list:
5155
self._field.addItems(sorted(map(str, option_list)))
5256
self._field.setCurrentText(str(default))
5357
highlight_default_value(self._field)
5458
else:
5559
self.get_choices()
5660

57-
self._field.currentTextChanged.connect(self.updateValue)
58-
self._field.setToolTip(tooltip_text)
59-
self._layout.addWidget(self._field)
60-
6161
self.default_labels()
6262
self.update_labels()
63-
self.updateValue()
63+
self.toggle_widgets()
6464

6565
def get_choices(self):
6666
self._field.clear()

MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/CorrelationFramesWidget.py

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)