Skip to content

Commit

Permalink
make DelegateParameterWithSetpoints accept delegateparameters or none…
Browse files Browse the repository at this point in the history
…, a few fixes
  • Loading branch information
astafan8 authored Jan 20, 2022
1 parent c81ca93 commit 68d2870
Showing 1 changed file with 26 additions and 12 deletions.
38 changes: 26 additions & 12 deletions qcodes/instrument/parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -1727,21 +1727,29 @@ def __init__(
name: str,
*,
source: ParameterWithSetpoints,
new_names_for_setpoints: Sequence[str],
new_setpoints: Optional[Sequence[DelegateParameter]] = None,
**kwargs: Any,
) -> None:
self._source = source

super().__init__(name=name, vals=self._source.vals, **kwargs)
self._delegated_setpoints = tuple(
DelegateParameter(name=new_setpoint_name, source=cast(Parameter, setpoint))
for setpoint, new_setpoint_name in zip(
source.setpoints, new_names_for_setpoints
)
)

self._gettable = self._source.gettable
self._settable = self._source.settable
self._snapshot_value = self._source._snapshot_value

self._delegate_setpoints: Optional[Sequence[DelegateParameter]]
if new_setpoints is not None:
self._delegate_setpoints = tuple(new_setpoints)
for source_setpoint, delegate_setpoint in zip(self._source.setpoints, self._delegate_setpoints):
delegate_setpoint.source = cast(Parameter, source_setpoint)
else:
self._delegate_setpoints = None

self._update_validators()

@property
def source(self) -> Optional[Parameter]:
def source(self) -> ParameterWithSetpoints:
"""
The source parameter that this :class:`DelegateParameterWithSetpoints`
is bound to.
Expand All @@ -1752,14 +1760,20 @@ def source(self) -> Optional[Parameter]:

def _update_validators(self) -> None:
self.vals = self._source.vals
for setpoint in self._delegated_setpoints:
assert setpoint.source is not None
setpoint.vals = setpoint.source.vals
if self._delegate_setpoints is not None:
for delegate_setpoint in self._delegate_setpoints:
assert delegate_setpoint.source is not None
delegate_setpoint.vals = delegate_setpoint.source.vals

@property
def setpoints(self) -> Sequence[_BaseParameter]:
self._update_validators()
return self._delegated_setpoints
setpoints = (
self._delegate_setpoints
if self._delegate_setpoints is not None
else self._source.setpoints
)
return setpoints

@setpoints.setter
def setpoints(self, setpoints: Sequence[_BaseParameter]) -> None:
Expand Down

0 comments on commit 68d2870

Please sign in to comment.