From 8296df4c1c252af470830b36737928933d88b129 Mon Sep 17 00:00:00 2001 From: Jens Hedegaard Nielsen Date: Thu, 19 Oct 2017 11:23:35 +0200 Subject: [PATCH 1/6] Change default value of snapshot_value for array and Multiparameters This is an API Change but mostly restores the behaviour \n prior to the merge of the parameter improvements --- qcodes/instrument/parameter.py | 47 ++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/qcodes/instrument/parameter.py b/qcodes/instrument/parameter.py index 8152e04c13e..c0915104cea 100644 --- a/qcodes/instrument/parameter.py +++ b/qcodes/instrument/parameter.py @@ -884,15 +884,28 @@ class ArrayParameter(_BaseParameter): snapshot_get (bool): Prevent any update to the parameter, for example if it takes too long to update. Default True. + snapshot_value: Should the value of the parameter be stored in the + snapshot. Unlike Parameter this defaults to False as + ArrayParameters are potentially huge. + metadata (Optional[dict]): extra information to include with the JSON snapshot of the parameter """ - def __init__(self, name, shape, instrument=None, - label=None, unit=None, - setpoints=None, setpoint_names=None, setpoint_labels=None, - setpoint_units=None, docstring=None, - snapshot_get=True, snapshot_value=True, metadata=None): + def __init__(self, + name: str, + shape: Sequence[int], + instrument: Optional['Instrument']=None, + label: Optional[str]=None, + unit: Optional[str]=None, + setpoints: Optional[Sequence]=None, + setpoint_names: Optional[Sequence[str]]=None, + setpoint_labels: Optional[Sequence[str]]=None, + setpoint_units: Optional[Sequence[str]]=None, + docstring: Optional[str]=None, + snapshot_get: bool=True, + snapshot_value: bool=False, + metadata: bool=None): super().__init__(name, instrument, snapshot_get, metadata, snapshot_value=snapshot_value) @@ -1046,15 +1059,29 @@ class MultiParameter(_BaseParameter): snapshot_get (bool): Prevent any update to the parameter, for example if it takes too long to update. Default True. + snapshot_value: Should the value of the parameter be stored in the + snapshot. Unlike Parameter this defaults to False as + MultiParameters are potentially huge. + metadata (Optional[dict]): extra information to include with the JSON snapshot of the parameter """ - def __init__(self, name, names, shapes, instrument=None, - labels=None, units=None, - setpoints=None, setpoint_names=None, setpoint_labels=None, - setpoint_units=None, docstring=None, - snapshot_get=True, snapshot_value=True, metadata=None): + def __init__(self, + name: str, + names: Sequence[str], + shapes: Sequence[Sequence[Optional[int]]], + instrument: Optional['Instrument']=None, + labels: Optional[Sequence[str]]=None, + units: Optional[Sequence[str]]=None, + setpoints: Optional[Sequence[Sequence]]=None, + setpoint_names: Optional[Sequence[Sequence[str]]]=None, + setpoint_labels: Optional[Sequence[Sequence[str]]]=None, + setpoint_units: Optional[Sequence[Sequence[str]]]=None, + docstring: str=None, + snapshot_get: bool=True, + snapshot_value: bool=False, + metadata: Optional[dict]=None): super().__init__(name, instrument, snapshot_get, metadata, snapshot_value=snapshot_value) From a5024522f70bd01b5f122c74800f65447f4deb30 Mon Sep 17 00:00:00 2001 From: Jens Hedegaard Nielsen Date: Thu, 19 Oct 2017 11:29:19 +0200 Subject: [PATCH 2/6] for these drivers we really want to store the multiparameters --- qcodes/instrument_drivers/ithaco/Ithaco_1211.py | 3 ++- qcodes/instrument_drivers/oxford/mercuryiPS.py | 2 +- qcodes/instrument_drivers/stanford_research/SR560.py | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/qcodes/instrument_drivers/ithaco/Ithaco_1211.py b/qcodes/instrument_drivers/ithaco/Ithaco_1211.py index 25812b01e6e..709a537b12c 100644 --- a/qcodes/instrument_drivers/ithaco/Ithaco_1211.py +++ b/qcodes/instrument_drivers/ithaco/Ithaco_1211.py @@ -30,7 +30,8 @@ class CurrentParameter(MultiParameter): def __init__(self, measured_param, c_amp_ins, name='curr'): p_name = measured_param.name - super().__init__(name=name, names=(p_name+'_raw', name), shapes=((), ())) + super().__init__(name=name, names=(p_name+'_raw', name), shapes=((), ()), + snapshot_value=True) self._measured_param = measured_param self._instrument = c_amp_ins diff --git a/qcodes/instrument_drivers/oxford/mercuryiPS.py b/qcodes/instrument_drivers/oxford/mercuryiPS.py index c311bb7bef8..cdad5e9ae88 100644 --- a/qcodes/instrument_drivers/oxford/mercuryiPS.py +++ b/qcodes/instrument_drivers/oxford/mercuryiPS.py @@ -13,7 +13,7 @@ class MercuryiPSArray(MultiParameter): """ def __init__(self, name, instrument, names, units, get_cmd, set_cmd, **kwargs): shapes = tuple(() for i in names) - super().__init__(name, names, shapes, **kwargs) + super().__init__(name, names, shapes, snapshot_value=True, **kwargs) self._get = get_cmd self._set = set_cmd self._instrument = instrument diff --git a/qcodes/instrument_drivers/stanford_research/SR560.py b/qcodes/instrument_drivers/stanford_research/SR560.py index 317e50d9c52..1fb9f03b3f2 100644 --- a/qcodes/instrument_drivers/stanford_research/SR560.py +++ b/qcodes/instrument_drivers/stanford_research/SR560.py @@ -29,7 +29,8 @@ class VoltageParameter(MultiParameter): name (str): the name of the current output. Default 'curr'. Also used as the name of the whole parameter. """ - def __init__(self, measured_param, v_amp_ins, name='volt'): + def __init__(self, measured_param, v_amp_ins, name='volt', + snapshot_value=True): p_name = measured_param.name super().__init__(name=name, names=(p_name+'_raw', name), shapes=((), ())) From b0af16e03df01f4264bd308c6aea6929bf64f035 Mon Sep 17 00:00:00 2001 From: Jens Hedegaard Nielsen Date: Thu, 19 Oct 2017 11:30:24 +0200 Subject: [PATCH 3/6] ZNB this saveval is now redundant --- qcodes/instrument_drivers/rohde_schwarz/ZNB.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/qcodes/instrument_drivers/rohde_schwarz/ZNB.py b/qcodes/instrument_drivers/rohde_schwarz/ZNB.py index 2c98b4f2dfb..44f47b408c3 100644 --- a/qcodes/instrument_drivers/rohde_schwarz/ZNB.py +++ b/qcodes/instrument_drivers/rohde_schwarz/ZNB.py @@ -83,7 +83,6 @@ def get(self): mag_array.append(abs(complex_num)) phase_array.append(phase(complex_num)) self._instrument._parent.cont_meas_on() - self._save_val((mag_array, phase_array)) return mag_array, phase_array @@ -150,7 +149,6 @@ def get(self): "values. Will discard the imaginary part.") data = data[0::2] + 1j*data[1::2] self._instrument._parent.cont_meas_on() - self._save_val(data) return data From 70e17c509bb9c5b6f3e825500924fc86c682a9d8 Mon Sep 17 00:00:00 2001 From: Jens Hedegaard Nielsen Date: Thu, 19 Oct 2017 11:34:13 +0200 Subject: [PATCH 4/6] These skip updates are now redundant As we default to skipping array and multiparameters --- qcodes/instrument_drivers/Keysight/Infiniium.py | 7 ------- qcodes/instrument_drivers/rohde_schwarz/ZNB.py | 7 ------- .../instrument_drivers/tektronix/Keithley_2600_channels.py | 7 ------- 3 files changed, 21 deletions(-) diff --git a/qcodes/instrument_drivers/Keysight/Infiniium.py b/qcodes/instrument_drivers/Keysight/Infiniium.py index e36196a52a5..3599e7f1047 100644 --- a/qcodes/instrument_drivers/Keysight/Infiniium.py +++ b/qcodes/instrument_drivers/Keysight/Infiniium.py @@ -207,13 +207,6 @@ def __init__(self, parent, name, channel): parameter_class=RawTrace ) - def snapshot_base(self, update: bool=False) -> Dict: - skip_update = ['trace'] - snap = super().snapshot_base(update=update, - params_to_skip_update=skip_update) - return snap - - class Infiniium(VisaInstrument): """ This is the QCoDeS driver for the Keysight Infiniium oscilloscopes from the diff --git a/qcodes/instrument_drivers/rohde_schwarz/ZNB.py b/qcodes/instrument_drivers/rohde_schwarz/ZNB.py index 44f47b408c3..6369e362902 100644 --- a/qcodes/instrument_drivers/rohde_schwarz/ZNB.py +++ b/qcodes/instrument_drivers/rohde_schwarz/ZNB.py @@ -343,13 +343,6 @@ def _set_center(self, val): self.trace.set_sweep(start, stop, npts) self.trace_mag_phase.set_sweep(start, stop, npts) - def snapshot_base(self, update=False, params_to_skip_update=None): - if params_to_skip_update is None: - params_to_skip_update = ('trace', 'trace_mag_phase') - snap = super().snapshot_base(update=update, - params_to_skip_update=params_to_skip_update) - return snap - class ZNB(VisaInstrument): """ qcodes driver for the Rohde & Schwarz ZNB8 and ZNB20 diff --git a/qcodes/instrument_drivers/tektronix/Keithley_2600_channels.py b/qcodes/instrument_drivers/tektronix/Keithley_2600_channels.py index 1c675245d4c..c164ba49786 100644 --- a/qcodes/instrument_drivers/tektronix/Keithley_2600_channels.py +++ b/qcodes/instrument_drivers/tektronix/Keithley_2600_channels.py @@ -194,13 +194,6 @@ def __init__(self, parent: Instrument, name: str, channel: str) -> None: self.channel = channel - # We need to avoid updating the sweep parameter - def snapshot_base(self, update: bool=False) -> Dict: - params_to_skip_update = ['fastsweep'] - dct = super().snapshot_base(update=update, - params_to_skip_update=params_to_skip_update) - return dct - def reset(self): """ Reset instrument to factory defaults. From 94f6d776141b5f7c4edcb9f608d2153a046c79b2 Mon Sep 17 00:00:00 2001 From: Jens Hedegaard Nielsen Date: Thu, 19 Oct 2017 12:44:44 +0200 Subject: [PATCH 5/6] Update tests to match new behaviour --- qcodes/tests/test_parameter.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/qcodes/tests/test_parameter.py b/qcodes/tests/test_parameter.py index 2b8872169be..6f9f502f98b 100644 --- a/qcodes/tests/test_parameter.py +++ b/qcodes/tests/test_parameter.py @@ -260,7 +260,7 @@ def test_default_attributes(self): self.assertEqual(p._get_count, 0) snap = p.snapshot(update=True) - self.assertEqual(p._get_count, 1) + self.assertEqual(p._get_count, 0) snap_expected = { 'name': name, 'label': name, @@ -272,7 +272,7 @@ def test_default_attributes(self): self.assertIn(name, p.__doc__) - def test_explicit_attrbutes(self): + def test_explicit_attributes(self): name = 'tiny_array' shape = (2,) label = 'it takes two to tango' @@ -286,7 +286,7 @@ def test_explicit_attrbutes(self): setpoints=setpoints, setpoint_names=setpoint_names, setpoint_labels=setpoint_labels, - docstring=docstring, snapshot_get=False, + docstring=docstring, snapshot_value=True, metadata=metadata) self.assertEqual(p.name, name) @@ -299,7 +299,7 @@ def test_explicit_attrbutes(self): self.assertEqual(p._get_count, 0) snap = p.snapshot(update=True) - self.assertEqual(p._get_count, 0) + self.assertEqual(p._get_count, 1) snap_expected = { 'name': name, 'label': label, @@ -396,7 +396,7 @@ def test_default_attributes(self): self.assertEqual(p._get_count, 0) snap = p.snapshot(update=True) - self.assertEqual(p._get_count, 1) + self.assertEqual(p._get_count, 0) snap_expected = { 'name': name, 'names': names, @@ -429,7 +429,7 @@ def test_explicit_attributes(self): setpoints=setpoints, setpoint_names=setpoint_names, setpoint_labels=setpoint_labels, - docstring=docstring, snapshot_get=False, + docstring=docstring, snapshot_value=True, metadata=metadata) self.assertEqual(p.name, name) @@ -444,7 +444,7 @@ def test_explicit_attributes(self): self.assertEqual(p._get_count, 0) snap = p.snapshot(update=True) - self.assertEqual(p._get_count, 0) + self.assertEqual(p._get_count, 1) snap_expected = { 'name': name, 'names': names, From 6510a080198067f23211c6d7056b356022c19e37 Mon Sep 17 00:00:00 2001 From: Jens Hedegaard Nielsen Date: Thu, 19 Oct 2017 13:08:40 +0200 Subject: [PATCH 6/6] move expected result data --- qcodes/tests/test_parameter.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/qcodes/tests/test_parameter.py b/qcodes/tests/test_parameter.py index 6f9f502f98b..e7640404a5b 100644 --- a/qcodes/tests/test_parameter.py +++ b/qcodes/tests/test_parameter.py @@ -264,8 +264,7 @@ def test_default_attributes(self): snap_expected = { 'name': name, 'label': name, - 'unit': '', - 'value': [[1, 2, 3], [4, 5, 6]] + 'unit': '' } for k, v in snap_expected.items(): self.assertEqual(snap[k], v) @@ -306,7 +305,8 @@ def test_explicit_attributes(self): 'unit': unit, 'setpoint_names': setpoint_names, 'setpoint_labels': setpoint_labels, - 'metadata': metadata + 'metadata': metadata, + 'value': [6, 7] } for k, v in snap_expected.items(): self.assertEqual(snap[k], v) @@ -401,8 +401,7 @@ def test_default_attributes(self): 'name': name, 'names': names, 'labels': names, - 'units': [''] * 3, - 'value': [0, [1, 2, 3], [[4, 5], [6, 7]]] + 'units': [''] * 3 } for k, v in snap_expected.items(): self.assertEqual(snap[k], v) @@ -452,7 +451,8 @@ def test_explicit_attributes(self): 'units': units, 'setpoint_names': setpoint_names, 'setpoint_labels': setpoint_labels, - 'metadata': metadata + 'metadata': metadata, + 'value': [0, [1, 2, 3], [[4, 5], [6, 7]]] } for k, v in snap_expected.items(): self.assertEqual(snap[k], v)