Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't snapshot array and multiparameters per default #800

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 37 additions & 10 deletions qcodes/instrument/parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -886,15 +886,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)

Expand Down Expand Up @@ -1048,15 +1061,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)

Expand Down
7 changes: 0 additions & 7 deletions qcodes/instrument_drivers/Keysight/Infiniium.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion qcodes/instrument_drivers/ithaco/Ithaco_1211.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion qcodes/instrument_drivers/oxford/mercuryiPS.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 0 additions & 9 deletions qcodes/instrument_drivers/rohde_schwarz/ZNB.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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


Expand Down Expand Up @@ -345,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
Expand Down
3 changes: 2 additions & 1 deletion qcodes/instrument_drivers/stanford_research/SR560.py
Original file line number Diff line number Diff line change
Expand Up @@ -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=((), ()))
Expand Down
7 changes: 0 additions & 7 deletions qcodes/instrument_drivers/tektronix/Keithley_2600_channels.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
26 changes: 13 additions & 13 deletions qcodes/tests/test_parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,19 +287,18 @@ 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,
'unit': '',
'value': [[1, 2, 3], [4, 5, 6]]
'unit': ''
}
for k, v in snap_expected.items():
self.assertEqual(snap[k], v)

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'
Expand All @@ -313,7 +312,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)
Expand All @@ -326,14 +325,15 @@ 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,
'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)
Expand Down Expand Up @@ -423,13 +423,12 @@ 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,
'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)
Expand All @@ -456,7 +455,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)
Expand All @@ -471,15 +470,16 @@ 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,
'labels': labels,
'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)
Expand Down