From 5e72fa5a43ea865e2b1ae8c00f26b981dfc24cb9 Mon Sep 17 00:00:00 2001 From: FQT Date: Mon, 6 Nov 2017 17:04:16 +1100 Subject: [PATCH 1/2] fix: use latest value instead of raw value in ramp --- qcodes/instrument/parameter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qcodes/instrument/parameter.py b/qcodes/instrument/parameter.py index 0f5e6428e630..2bc5880f1612 100644 --- a/qcodes/instrument/parameter.py +++ b/qcodes/instrument/parameter.py @@ -437,7 +437,7 @@ def get_ramp_values(self, value: Union[float, int], raise RuntimeError("Don't know how to step a parameter with more than one value") if self.get_latest() is None: self.get() - start_value = self.raw_value + start_value = self.get_latest() if not (isinstance(start_value, (int, float)) and isinstance(value, (int, float))): From ec9df44a9be2a55447e3eed624b6a469e6025fe5 Mon Sep 17 00:00:00 2001 From: Jens Hedegaard Nielsen Date: Mon, 6 Nov 2017 13:22:50 +0100 Subject: [PATCH 2/2] add testing of scaling and parsing steped parameters --- qcodes/tests/test_parameter.py | 57 +++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/qcodes/tests/test_parameter.py b/qcodes/tests/test_parameter.py index 0c4dc37e5c73..ee27d12b0814 100644 --- a/qcodes/tests/test_parameter.py +++ b/qcodes/tests/test_parameter.py @@ -6,7 +6,8 @@ from time import sleep import numpy as np - +from hypothesis import given +import hypothesis.strategies as hst from qcodes import Function from qcodes.instrument.parameter import ( Parameter, ArrayParameter, MultiParameter, @@ -680,6 +681,60 @@ def test_val_mapping_with_parsers(self): self._p = 'PVAL: 1' self.assertEqual(p(), 'on') + @given(scale=hst.integers(1, 100), + value=hst.floats(min_value=1e-9, max_value=10)) + def test_ramp_scaled(self, scale, value): + p = Parameter('p', set_cmd=self.set_p, get_cmd=self.get_p, scale=scale, + initial_value=0) + assert p() == 0.0 + # first set a step size + p.step = 0.1 + # and a wait time + p.inter_delay = 1e-9 # in seconds + expected_output =np.linspace(0.1,10,100) + np.testing.assert_allclose(p.get_ramp_values(10, p.step), + expected_output) + p.set(value) + np.testing.assert_allclose(p.get(), value) + assert p.raw_value == value * scale + + @given(value=hst.floats(min_value=1e-9, max_value=10)) + def test_ramp_parser(self, value): + p = Parameter('p', set_cmd=self.set_p, get_cmd=self.get_p, + set_parser=lambda x: -x, + get_parser=lambda x: -x, + initial_value=0) + assert p() == 0.0 + # first set a step size + p.step = 0.1 + # and a wait time + p.inter_delay = 1e-9 # in seconds + expected_output =np.linspace(0.1,10,100) + np.testing.assert_allclose(p.get_ramp_values(10, p.step), + expected_output) + p.set(value) + assert p.get() == value + assert p.raw_value == -value + + @given(scale=hst.integers(1, 100), + value=hst.floats(min_value=1e-9, max_value=10)) + def test_ramp_parsed_scaled(self, scale, value): + p = Parameter('p', set_cmd=self.set_p, get_cmd=self.get_p, scale=scale, + set_parser=lambda x: -x, + get_parser=lambda x: -x, + initial_value=0) + assert p() == 0.0 + # first set a step size + p.step = 0.1 + # and a wait time + p.inter_delay = 1e-9 # in seconds + expected_output =np.linspace(0.1,10,100) + np.testing.assert_allclose(p.get_ramp_values(10, p.step), + expected_output) + p.set(value) + np.testing.assert_allclose(p.get(), value) + assert p.raw_value == -scale * value + class TestManualParameterValMapping(TestCase): def setUp(self): self.instrument = DummyInstrument('dummy_holder')