From 522162252ed3302d544bc6adf76d474a15a85f86 Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Tue, 23 Apr 2024 08:44:38 +0200 Subject: [PATCH] revert changes to _get / _set_wrapper in ParameterBase This private api is used in zhinst qcodes https://github.com/zhinst/zhinst-qcodes/blob/main/src/zhinst/qcodes/qcodes_adaptions.py#L202 --- src/qcodes/parameters/parameter.py | 8 ++++++-- src/qcodes/parameters/parameter_base.py | 19 +++++++++---------- tests/parameter/test_get_latest.py | 2 +- tests/parameter/test_parameter_cache.py | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/qcodes/parameters/parameter.py b/src/qcodes/parameters/parameter.py index 8ad522a87036..422cae0055bb 100644 --- a/src/qcodes/parameters/parameter.py +++ b/src/qcodes/parameters/parameter.py @@ -287,7 +287,9 @@ def _set_manual_parameter( exec_str=exec_str_ask, ) self._gettable = True - self.get = self._wrap_get() + # mypy resolves the type of self.get_raw to object here. + # this may be resolvable if Command above is correctly wrapped in MethodType + self.get = self._wrap_get(self.get_raw) # type: ignore[arg-type] if self.settable and set_cmd not in (None, False): raise TypeError( @@ -317,7 +319,9 @@ def _set_manual_parameter( arg_count=1, cmd=set_cmd, exec_str=exec_str_write ) self._settable = True - self.set = self._wrap_set() + # mypy resolves the type of self.get_raw to object here. + # this may be resolvable if Command above is correctly wrapped in MethodType + self.set = self._wrap_set(self.set_raw) # type: ignore[arg-type] self._meta_attrs.extend(["label", "unit", "vals"]) diff --git a/src/qcodes/parameters/parameter_base.py b/src/qcodes/parameters/parameter_base.py index 9c3e6c323d15..d67d11f1d906 100644 --- a/src/qcodes/parameters/parameter_base.py +++ b/src/qcodes/parameters/parameter_base.py @@ -258,7 +258,7 @@ def __init__( ) self._gettable = False if implements_get_raw: - self.get = self._wrap_get() + self.get = self._wrap_get(self.get_raw) self._gettable = True elif hasattr(self, "get"): raise RuntimeError( @@ -273,7 +273,7 @@ def __init__( ) self._settable: bool = False if implements_set_raw: - self.set = self._wrap_set() + self.set = self._wrap_set(self.set_raw) self._settable = True elif hasattr(self, "set"): raise RuntimeError( @@ -647,9 +647,10 @@ def _from_raw_value_to_value(self, raw_value: ParamRawDataType) -> ParamDataType return value def _wrap_get( - self, + self, get_function: Callable[..., ParamRawDataType] ) -> Callable[..., ParamDataType]: - @wraps(self.get_raw) + + @wraps(get_function) def get_wrapper(*args: Any, **kwargs: Any) -> ParamDataType: if not self.gettable: raise TypeError("Trying to get a parameter that is not gettable.") @@ -659,7 +660,7 @@ def get_wrapper(*args: Any, **kwargs: Any) -> ParamDataType: ) try: # There might be cases where a .get also has args/kwargs - raw_value = self.get_raw(*args, **kwargs) + raw_value = get_function(*args, **kwargs) value = self._from_raw_value_to_value(raw_value) @@ -676,10 +677,8 @@ def get_wrapper(*args: Any, **kwargs: Any) -> ParamDataType: return get_wrapper - def _wrap_set( - self, - ) -> Callable[..., None]: - @wraps(self.set_raw) + def _wrap_set(self, set_function: Callable[..., None]) -> Callable[..., None]: + @wraps(set_function) def set_wrapper(value: ParamDataType, **kwargs: Any) -> None: try: if not self.settable: @@ -712,7 +711,7 @@ def set_wrapper(value: ParamDataType, **kwargs: Any) -> None: # Start timer to measure execution time of set_function t0 = time.perf_counter() - self.set_raw(raw_val_step, **kwargs) + set_function(raw_val_step, **kwargs) # Update last set time (used for calculating delays) self._t_last_set = time.perf_counter() diff --git a/tests/parameter/test_get_latest.py b/tests/parameter/test_get_latest.py index f0763c8087f0..bef50531bc46 100644 --- a/tests/parameter/test_get_latest.py +++ b/tests/parameter/test_get_latest.py @@ -170,7 +170,7 @@ class LocalParameter(ParameterBase): def __init__(self, *args: Any, **kwargs: Any): super().__init__(*args, **kwargs) self.set_raw = lambda x: x # type: ignore[method-assign] - self.set = self._wrap_set() + self.set = self._wrap_set(self.set_raw) localparameter = LocalParameter('test_param', None, diff --git a/tests/parameter/test_parameter_cache.py b/tests/parameter/test_parameter_cache.py index bd37cbd14138..552f84c8f323 100644 --- a/tests/parameter/test_parameter_cache.py +++ b/tests/parameter/test_parameter_cache.py @@ -232,7 +232,7 @@ class LocalParameter(ParameterBase): def __init__(self, *args: Any, **kwargs: Any): super().__init__(*args, **kwargs) self.set_raw = lambda x: x # type: ignore[method-assign] - self.set = self._wrap_set() + self.set = self._wrap_set(self.set_raw) local_parameter = LocalParameter('test_param', None,