QCoDeS 0.59.0 #8438
Jens Hedegaard Nielsen (jenshnielsen)
announced in
Announcements
QCoDeS 0.59.0
#8438
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
QCoDeS 0.59.0 (2026-08-24)
Breaking Changes:
Legacy backwards-compatibility aliases across the
instrument_driversmodule that weredeprecated in QCoDeS 0.57.0 have been removed. This includes deprecated class aliases and
deprecated module shims for AlazarTech, Basel, Galil, HP, Ithaco, Keithley, Keysight,
Mini-Circuits, Oxford Instruments, Rigol, Rohde & Schwarz, Signal Hound,
Stanford Research Systems, Tektronix, Weinschel, and Yokogawa drivers. Users should
migrate to the canonical class names listed in the 0.57.0 changelog. Bump certifi from 2026.2.25 to 2026.4.22 #8060
Several module-level
TypeVardefinitions and type aliases that are no longer usedinternally have been deprecated. Importing them will emit a
QCoDeSDeprecationWarning.They will be removed in a future version. Convert to PEP 695 type parameters and deprecate removed TypeVars + type aliases #8096
Removed deprecated VISA-related APIs from
:class:
~qcodes.instrument.visa.VisaInstrument: the_addressproperty(use
addressinstead) and thevisalibproperty (usevisabackendinstead). The unused and deprecated
MockAMI430mocker class has also beenremoved. Cleanup deprecated apis #8103
Importing the short hand aliases (such as
Parameter,Measurement,Instrument,MonitorandStation) from the top levelqcodesnamespace is now deprecated and emits a
QCoDeSDeprecationWarning. Importthese names from their respective submodules (for example
qcodes.parameters,qcodes.datasetorqcodes.station) instead. The submodules themselves(such as
qcodes.datasetandqcodes.instrument) remain accessible from thetop level
qcodesnamespace and are not deprecated.Similarly, importing the parameter classes (such as
Parameter,ManualParameterandDelegateParameter) fromqcodes.instrumentis now deprecated and emits aQCoDeSDeprecationWarning. Import these names fromqcodes.parametersinstead. The names remain available from
qcodes.instrumentat runtime forbackwards compatibility but are hidden from static type checkers, so importing
them from
qcodes.instrumentis reported as an unknown attribute. Bump j178/prek-action from 2.0.4 to 2.0.5 #8252The default format of
DataSetProtocol.run_timestamp,DataSetProtocol.completed_timestampandqcodes.dataset.sqlite.queries.raw_time_to_str_timechanged from"%Y-%m-%d %H:%M:%S"to"%Y-%m-%d %H:%M:%S%z", i.e. the renderedtimestamps now include the UTC offset of the local timezone, e.g.
"2026-07-31 10:27:25+0200".Timestamps are stored in the QCoDeS database as POSIX timestamps, which do not
capture the timezone in which the measurement was performed. They are therefore
still rendered in the local timezone of the machine reading the dataset, but
the resulting string is no longer ambiguous. This also applies to the
run_timestampandcompleted_timestampattributes written when exportinga dataset to NetCDF or xarray.
Pass an explicit
fmtargument to restore the previous behaviour.Parameter cache timestamps are now timezone aware.
ParameterBase.cache.timestamp(and therefore
Parameter.get_latest.get_timestamp()) returns adatetimewithtzinfoset to the local timezone rather than a naivedatetime. Code that compares these timestamps to naivedatetimeobjectswill raise
TypeErrorand must be updated to use timezone aware datetimes.Consequently the
"ts"field of a parameter snapshot changed from"%Y-%m-%d %H:%M:%S"to ISO 8601 format including the UTC offset, e.g."2026-07-31 10:27:25+02:00". Snapshots can be parsed withdatetime.datetime.fromisoformat. Bump tqdm from 4.69.1 to 4.70.0 #8345The default value of the
updateargument ofsnapshot,snapshot_baseand
print_readable_snapshot(on every :class:.Metadatable, includinginstruments, channels and parameters) is now
"Only_invalid". Previouslycalling e.g.
instrument.snapshot()orparameter.snapshot()without anargument effectively defaulted to the equivalent of
"Never"and neverrefreshed anything. As a result,
snapshot()(andprint_readable_snapshot())will now call
get()on parameters whose cache is invalid, which may query theunderlying instrument. Pass
update="Never"explicitly to restore the previous"do not update" behavior, or
update="All"to force a full update.Relatedly, the station snapshot that :class:
.Measurementstores before ameasurement starts is now taken with
update="Only_invalid"(previously theequivalent of
"Never"), so parameters with an invalid cache are refreshed viaa single
getwhile parameters with a valid cache keep their cached value.The legacy
True/None/Falsevalues of theupdateargument arenow deprecated aliases for
"All"/"Only_invalid"/"Never". They keepworking (no runtime warning is raised), but type checkers will flag their use;
prefer the string values instead. Add well-named snapshot update modes, at measurement start do only-invalid snapshot, a few driver fixes of snapshotting #8354
Improved:
.Instrument.close_allgained anonly_subclasseskeyword argument. Whenset to
True, only instruments that are instances of the class (or its subclasses)on which
close_allis called are closed, leaving other registered instruments open.The
log_statusandonly_subclassesarguments are now keyword-only. Instrument Add option to only close specific subclass #8312Improved Drivers:
Fixed three bugs in :class:
qcodes.instrument_drivers.QuantumDesign.DynaCoolPPMS.DynaCool.DynaCoolthat prevented the driver from instantiating and from updating the
temperature_setpointcache:block_while_ramping_temperatureis now created withset_cmd=None/get_cmd=Noneso it behaves as a settable cache-only parameter, instead ofset_cmd=False/get_cmd=Falsewhich made it read-only and rejectedthe supplied
initial_value.instrument=selfargument from theblocking_t_state_check_intervalparameter creation, which is suppliedautomatically by
add_parameterand was raising on construction.AttributeErrorwhen setting the temperature: the cache updatein
_set_temperature_and_statenow correctly referencesself.temperature_setpointrather than the non-existentself.setpoint. Fix DynaCool driver init and temperature_setpoint cache update #8097Correct the lower bound of the span parameter validator of the KeysightPNABase driver to 0 Hz. Fix lower bound of the span parameter validator of the KeysightPNABase #8195
Referring to the:
Keysight Trueform Series Operating and Service Guide_Agilent 33210A 10 MHz Function / Arbitrary Waveform Generator User's Guide_Agilent 33250A 80 MHz Function / Arbitrary Waveform Generator_Improvements:
.. _
Keysight Trueform Series Operating and Service Guide: https://www.keysight.com/us/en/assets/9018-03714/service-manuals/9018-03714.pdf.. _
Agilent 33210A 10 MHz Function / Arbitrary Waveform Generator User's Guide: https://www.keysight.com/us/en/support/33210A/33210a-waveform-and-function-generator.html.. _
Agilent 33250A 80 MHz Function / Arbitrary Waveform Generator: https://www.keysight.com/us/en/support/33250A/function--arbitrary-waveform-generator-80-mhz.html feature: KeysightAgilent_33XXX.py improvements #8254Fixed the timezone offset written into the waveform and sequence files
generated by the Tektronix AWG70000A drivers. The offset was computed manually
from
time.timezone, which gave the offset the wrong sign and ignoreddaylight saving time, so e.g. a machine in UTC+02:00 wrote
-02:00. Theoffset is now taken from the local timezone of the timestamp itself. Bump tqdm from 4.69.1 to 4.70.0 #8345
The QDev QDac driver now honors the
"Only_invalid"snapshotupdatemode:when snapshotting, the bulk status read that refreshes the channel
v/i/irange/vrangecaches is only performed forupdate="All",or for
update="Only_invalid"when one of those channel caches is actuallyinvalid. Previously the bulk read was performed on every snapshot that was not
"Never", which made repeated snapshots unnecessarily expensive even when thechannel caches were already valid. Add well-named snapshot update modes, at measurement start do only-invalid snapshot, a few driver fixes of snapshotting #8354
New:
Added :func:
qcodes.dataset.get_db_overview, a fast way to list the runs in aQCoDeS database. It fetches run metadata (experiment/sample names, timestamps,
record counts and guids) via a single
JOINquery on therunsandexperimentstables, without instantiating aDataSetobject per run,making it possible to list databases with many thousands of runs almost
instantly. The returned :class:
qcodes.dataset.RunOverviewDictis also exportedon the public
qcodes.datasetnamespace. The function does not returnsnapshots as they can be large and slow down building the database overview.
The number of results in each dataset is taken from shape information when
available, and otherwise falls back to a best-effort count of the rows in the
so-called results table that exists for every dataset, which may NOT be as
precise as
DataSet.number_of_results. Add get_db_overview for fast, lightweight run listing #8266The
updateargument ofsnapshotandsnapshot_base(available on every:class:
.Metadatable, including instruments, channels and parameters) now acceptsthe explicit string values
"All","Only_invalid"and"Never":"All"forces an update of every value (callsget()on each parameter)."Only_invalid"only refreshes parameters whose cache is invalid, via asingle
get(cache.get(get_if_invalid=True)), and uses the cached valuefor everything else.
"Never"never updates and uses the latest values already in memory.The new public helper :func:
qcodes.metadatable.normalize_snapshot_updateand the:data:
qcodes.metadatable.SnapshotUpdatetype are exported for drivers thatoverride
snapshot_baseand need to interpret theupdateargument. Add well-named snapshot update modes, at measurement start do only-invalid snapshot, a few driver fixes of snapshotting #8354Under the hood:
qcodesnamespace no longer eagerly imports thedataset,instrument,parameters,monitor,stationandvalidatorssubmodules. The discouraged short hand aliases (such asqcodes.Parameterandqcodes.Measurement) as well asqcodes.validatorsare still available at runtime via a lazy module level
__getattr__, but theyare intentionally hidden from static type checkers and are now reported as
unknown attributes rather than typed as
Any; import the names from theirrespective submodules to retain type information. This breaks a large import
cycle spanning the parameters, dataset and instrument packages that triggered an
internal error in
mypy2.2. Bump j178/prek-action from 2.0.4 to 2.0.5 #8252This discussion was created from the release QCoDeS 0.59.0.
All reactions