diff --git a/src/python_spectrometer/core.py b/src/python_spectrometer/core.py index 97beff051070cf4476f0add39ff5f648f7cc054f..3ae8ef417b8f7fd26ca528e15a01461772a53441 100644 --- a/src/python_spectrometer/core.py +++ b/src/python_spectrometer/core.py @@ -1084,6 +1084,8 @@ class Spectrometer: keys = self.keys() return '\n'.join((str(key) for key in sorted(self.keys()) if key in keys)) + @mock.patch.multiple('numpy.compat.py3k.pickle', + Unpickler=dill.Unpickler, Pickler=dill.Pickler) def _savefn(self, file: _pathT, **kwargs): file = io.check_path_length(file) if self.compress: diff --git a/src/python_spectrometer/daq/settings.py b/src/python_spectrometer/daq/settings.py index 600053a9511ba1aec321f3ae70c2b1f11ba8826e..235817c6fe94ea6358e2778c630a20c38c66a15d 100644 --- a/src/python_spectrometer/daq/settings.py +++ b/src/python_spectrometer/daq/settings.py @@ -57,7 +57,7 @@ from typing import Any, Callable, Dict, Tuple, TypeVar from numpy import finfo from packaging import version from qutil.domains import BoundedSet, ContinuousInterval, DiscreteInterval, Domain, Interval -from qutil.functools import cached_property, wraps +from qutil.functools import wraps _T = TypeVar("_T") _KT = TypeVar("_KT") @@ -351,53 +351,53 @@ class DAQSettings(dict): # The _domain_* properties cannot be cached because in principle both ALLOWED_* and Interval # can be dynamic. - @cached_property + @property def _domain_fs(self) -> Domain[float]: return self.ALLOWED_FS & ContinuousInterval(self._lower_bound_fs, self._upper_bound_fs, self.PRECISION) - @cached_property + @property def _domain_df(self) -> Domain[float]: return self.ALLOWED_DF & ContinuousInterval(self._lower_bound_df, self._upper_bound_df, self.PRECISION) - @cached_property + @property def _domain_f_max(self) -> Domain[float]: return self.ALLOWED_F_MAX & ContinuousInterval(self._lower_bound_f_max, self._upper_bound_f_max, self.PRECISION) - @cached_property + @property def _domain_f_min(self) -> Domain[float]: return self.ALLOWED_F_MIN & ContinuousInterval(self._lower_bound_f_min, self._upper_bound_f_min, self.PRECISION) - @cached_property + @property def _domain_nperseg(self) -> Domain[int]: return self.ALLOWED_NPERSEG & DiscreteInterval(self._lower_bound_nperseg, self._upper_bound_nperseg, self.PRECISION) - @cached_property + @property def _domain_noverlap(self) -> Domain[int]: return self.ALLOWED_NOVERLAP & DiscreteInterval(self._lower_bound_noverlap, self._upper_bound_noverlap, self.PRECISION) - @cached_property + @property def _domain_n_pts(self) -> Domain[int]: return self.ALLOWED_N_PTS & DiscreteInterval(self._lower_bound_n_pts, self._upper_bound_n_pts, self.PRECISION) - @cached_property + @property def _domain_n_seg(self) -> Domain[int]: return self.ALLOWED_N_SEG & DiscreteInterval(self._lower_bound_n_seg, self._upper_bound_n_seg, self.PRECISION) - @cached_property + @property def _domain_n_avg(self) -> Domain[int]: return self.ALLOWED_N_AVG & DiscreteInterval(self._lower_bound_n_avg, self._upper_bound_n_avg,