Releases: microsoft/Qcodes
QCoDeS 0.55.0
QCoDeS 0.55.0 (2026-02-25)
Breaking Changes:
-
The functionality to export qcodes datasets to XArray/netcdf4 has been significantly improved for datasets where the shape of the data is known from metadata e.g. using dond or similar:
- The memory overhead of exporting the data has been reduced.
- The coordinate order is maintained such that data is stored in the order it was measured. Previously data was implicitly sorted by coordinates during the export.
- When exporting Datasets to xarray where the shape is known, either by the use of utilities such as
dondor manually specified, inferred parameters related to the setpoints and measured parameters are now included in the XArray Dataset.
These changed were previously part of
0.54.0but reverted in0.54.1since the change in coordinate sorting was not announced. (#7546)
Improved:
-
The
InstrumentModuleand its aliasInstrumentChannelnow take an optional generic argument allowing you to specify the type of the parent instrument for type checking. (#7659`) -
The
ChannelTupleclass now hasmulti_parameterandmulti_functionmethods that
provide type-safe access to parameters and functions on all channels in the tuple. These methods
allow accessing attributes with proper type information, improving IDE integration and type checking.
The return type annotation of__getattr__has been changed toAnyreflecting the fact that
this is not a type safe interface and it is impossible for a static type checker to infer the type
of the dynamic attribute.multi_parameter,multi_functionandget_channel_by_nameshould
be used when a more specific type is requested. (#7686) -
The
InterDependencies_class is now frozen during the performance of a measurement so it cannot be modified.
This enables caching of attributes on the class significantly reducing the overhead of measurements. (#7712`) -
The QCoDeS Parameter classes
ParameterBase,Parameter,ParameterWithSetpoints,DelegateParameter,ArrayParameterandMultiParameternow
takes two Optional Generic arguments to allow the data type and the type of the instrument the parameter is bound to to be fixed statically. This enables
the type of the output ofparameter.get(), input ofparameter.set()and value ofparameter.instrumentto be known statically such that type
checkers and IDE's can make use of this information. (#7730) -
The table created by experiments_widget() now has a column of buttons by which individual datasets can be exported as ASCII files. This is a user-friendly way to use the qcode.dataset.export() method.
To demo this feature, run
experiments_widget(sort_by="timestamp")
in Jupyter, and click on one of the cells in the "Export" column. (#7772`) -
All arguments to
ParameterBase.__init__exceptnameare now keyword-only.
For backwards compatibility, passing them as positional arguments is still allowed
but will emit aFutureWarning. Passing the same argument both positionally and
as a keyword argument raises aTypeError. (#7839)
Improved Drivers:
-
Added blocking function to DynaCool PPMS driver that waits for temperature
state to be stable before allowing other functions to be called when
setting the temperature. (#7534) -
The
KeysightE4980Adriver now names thecorrectionsubmodule correctly ascorrectionreflecting the public attribute to access the module.
This also means that in the snapshotcorrectionis used as the module name rather than_correction(#7659`) -
Improved sim YAML for Cryomagnetics TM620 and added default terminator. (#7666)
-
The
RohdeSchwarzZNBBase,MiniCircuitsRCSPDT, andTektronixTPS2012drivers now have
explicit type annotations on theirchannelssubmodule, enabling better type checking and
IDE integration. (#7686) -
In the Rohde Schwarz ZNB drivers QCoDeS functions have been converted to regular methods. This ensures that methods are type checked and can be discovered by IDEs. (#7715`)
-
On Keithly3706A, allow users to cache forbidden channels in order to bypass unnecessary
_validator()calls when closing channels.
Added a cache for_validator()results. Both of these changes results in significant time savings when running measurements
with repeated calls toclose_channel(). (#7771) -
Fixed bug in Lakeshore driver that was causing blocking_t
to periodically hang indefinitely: a 0.5 seconds post delay was added to
setpoint parameter to ensure that the setpoint value propagated to the
instrument when the set of the setpoint parameter returns. (#7796) -
Several instrument drivers now make better use of the newly added generic datatype and instrument arguments to ParameterBase and subclasses.
- AlazarTech ATS:
TraceParameternow uses generic type parameters. - CopperMountain M5xxx:
FrequencySweepMagPhase,PointMagPhase, andPointIQnow use generic type parameters. Removed unnecessaryassert isinstancecalls. Fixed timeout handling when timeout isNone. - Keysight 344xxA:
Keysight344xxATrigger,Keysight344xxASample,Keysight344xxADisplayandTimeTracenow use generic type parameters. Refactored_acquire_time_traceto use explicit context managers instead of a list of parameter settings. .. gitleaks:allow - Keysight B1500: Added
MeasurementModeDictTypedDict.IVSweepMeasurementcorrected instrument type and now uses generic type parameters.KeysightB1500Modulenow uses generic type parameters. - Keysight B1517A:
KeysightB1500IVSweeper,_ParameterWithStatus,_SpotMeasurementVoltageParameter, and_SpotMeasurementCurrentParameternow use generic type parameters. Removed unnecessarycastcalls. .. gitleaks:allow - Keysight B1520A:
KeysightB1500CVSweeperandKeysightB1500CVSweepMeasurementnow use generic type parameters. Addedroot_instrumentproperty toKeysightB1500CVSweepMeasurement. .. gitleaks:allow - Keysight B1500 sampling measurement:
SamplingMeasurementnow uses generic type parameters and has aroot_instrumentproperty. Fixed timeout handling when timeout isNone. - Keysight B1500 message builder: Improved type annotations using
ParamSpecandTypeVar. MadeCommandListgeneric. - Keysight KtM960x:
Measureparameter now uses generic type parameters. - Keysight N9030B:
FrequencyAxis,Trace,KeysightN9030BSpectrumAnalyzerMode, andKeysightN9030BPhaseNoiseModenow use generic type parameters. Replacedassertstatements with proper error handling. - QuantumDesign DynaCool: Improved type annotation for
_pick_onemethod. Removed unnecessarycastcall. - Rohde & Schwarz ZNB:
FixedFrequencyTraceIQ,FixedFrequencyPointIQ,FixedFrequencyPointMagPhase,FrequencySweepMagPhase,FrequencySweepDBPhase, andFrequencySweepnow use generic type parameters. Removed unnecessaryassert isinstancecalls. - Tektronix DPO7200xx:
TektronixDPOMeasurementParameternow uses generic type parameters. Removed unnecessarycastcall. - Yokogawa GS200:
source_modeandcurrent_limitparameters now use generic type parameters. Replaced if-else statements with match statements for source mode handling. (#7822)
- AlazarTech ATS:
-
Add hold parameter, force_jump parameter, and set_event_jump method to the Tektronix AWG70000A driver for improved sequence control. (#7837)
-
Add TektronixDPOAcquisition, TektronixDPOCursor, and TektronixDPOMeasurementImmediate modules to the Tektronix DPO7200xx driver. Enhanced TektronixDPOTrigger with ready, state, and level parameters. Added coupling parameter to TektronixDPOChannel. (#7838)
New Drivers:
- Added Keysight 33611A driver. (#7644)
QCoDeS 0.54.4 (2025-12-12)
What's Changed
- Start testing with python 3.14 by @jenshnielsen in #7612
- Tektronix DPO7200xx assign modules to types by @jenshnielsen in #7611
- Use Mapping rather than dict in DataSetDefinition by @jenshnielsen in #7616
- Update LakeshoreModel3xx pyvisa-sim YAMLs and tests by @trlemon in #7606
- Backport speed improvements by @jenshnielsen in #7714
Full Changelog: v0.54.2...v0.54.4
QCoDeS 0.54.3 (2025-11-11)
What's Changed
- Start testing with python 3.14 by @jenshnielsen in #7612
- Tektronix DPO7200xx assign modules to types by @jenshnielsen in #7611
- Use Mapping rather than dict in DataSetDefinition by @jenshnielsen in #7616
- Update LakeshoreModel3xx pyvisa-sim YAMLs and tests by @trlemon in #7606
Full Changelog: v0.54.2...v0.54.3
QCoDeS 0.54.2 (2025-10-27)
What's Changed
- Assign sr86x submodules to static attributes by @jenshnielsen in #7542
- Small cleanup by @jenshnielsen in #7582
- Fix simulated mode of CopperMoutain VNA, CryoMagetics 4g and tm620 by @picarro-yren in #7595
- Update pyvisa-sim yaml for CryomagneticsModel4G by @picarro-yren in #7602
Full Changelog: v0.54.1...v0.54.2
QCoDeS 0.54.1
QCoDeS 0.54.1 (2025-10-02)
New:
- Exporting of data using xarray directly bypassing Pandas introduced in 0.54.0 has been temporarily disabled
due to changes in output format with parameters measured in decreasing order. This will be revisited in a future release. (:pr:7546)
QCoDeS 0.54.0
QCoDeS 0.54.0 (2025-10-01)
Breaking Changes:
-
Removal of deprecated code
Removed modules:
- Removed the deprecated
qcodes.instrument_drivers.american_magnetics.AMI430module. UseAMIModel4303Dfromqcodes.instrument_drivers.american_magneticsinstead. - Removed the deprecated
qcodes.utils.spyder_utilsmodule containing theadd_to_spyder_UMR_excludelistfunction. This utility was known to not work with latest Spyder versions and was unused in QCoDeS.
Removed classes:
- Removed the deprecated
AMI430_3DandAMI430classes fromqcodes.instrument_drivers.american_magnetics.AMI430. UseAMIModel4303DandAMIModel430fromqcodes.instrument_drivers.american_magneticsinstead. - Removed deprecated methods from
AMI430SwitchHeater - Removed deprecated
AMI430_VISAclass fromip_to_visa.py. - Removed the deprecated
ConnectionPlusclass fromqcodes.dataset.sqlite.connection. UseAtomicConnectionclass instead. - Removed the deprecated
AlazarTech_ATSclass. UseAlazarTechATSinstead. - Removed the deprecated
WaveformGenerator_33XXXclass. UseKeysight33xxxinstead. - Removed the following deprecated Keysight classes:
Keysight_34410A, useKeysight34410AinsteadKeysight_34411A, useKeysight34411AinsteadKeysight_34460A, useKeysight34460AinsteadKeysight_34461A, useKeysight344xxAinsteadKeysight_34465A, useKeysight34465AinsteadKeysight_34470A, useKeysight34470AinsteadN51x1, useKeysightN51x1insteadPNABase, useKeysightPNABaseinsteadPNAxBase, useKeysightPNAxBaseinsteadKeysightSubModule, useKeysight34980ASwitchMatrixSubModuleinsteadKeysightSwitchMatrixSubModule, useKeysight34980ASwitchMatrixSubModuleinsteadB1500Module, useKeysightB1500Moduleinstead_Keysight_344xxA, useKeysight344xxAinstead
- Removed the deprecated Keysight submodules:
Trigger, useKeysight344xxATriggerinsteadSample, useKeysight344xxASampleinsteadDisplay, useKeysight344xxADisplayinstead
- Removed the deprecated MiniCircuits classes:
SwitchChannelBase, useMiniCircuitsSPDTSwitchChannelBaseinsteadSPDT_Base, useMiniCircuitsSPDTBaseinstead
- Removed the deprecated
USBHIDMixinclass
Removed functions:
- Removed from
qcodes.utils.deprecate:deprecation_messageissue_deprecation_warningdeprecatedecorator (usetyping_extensions.deprecatedinstead)_catch_deprecation_warningsassert_not_deprecatedassert_deprecated
- Removed
make_connection_plus_fromfunction fromqcodes.dataset.sqlite.connection(:pr:7122)
- Removed the deprecated
-
The following modules have been deprecated in this release and will be removed in a future version:
qcodes.instrument.delegate.grouped_parameterqcodes.instrument.functionqcodes.instrument.group_parameterqcodes.instrument.specialized_parametersqcodes.instrument.sweep_valuesqcodes.instrument.baseqcodes.instrument.parameterqcodes.utils.commandqcodes.utils.datasetqcodes.utils.installationqcodes.utils.helpersqcodes.utils.metadataqcodes.utils.plottingqcodes.utils.threadingqcodes.utils.validators
Please consult the API documentation at :ref:
Apifor alternatives and migration paths. (:pr:7262) -
The methods
InstrumentBase.__getitem__,InstrumentBase.get,InstrumentBase.set,InstrumentBase.callare now deprecated
with a PendingDeprecationWarning rather than a QCoDeSDeprecationWarning. This better reflects the state where there is no plan to remove
them but usage is discouraged. The PendingDeprecationWarning is not printed to console by default. (:pr:7318) -
Registration and Unpacking interfaces created in ParameterBse
ParameterBasenow implements new `depends_on,is_controlled_by``, and ``has_control_of``properties that allow subclasses to define ``InterDependencies_`` relationships directly
``ParameterBase.unpack_self`` allows subclasses to unpack themselves during ``DataSaver.add_result``, which removes the requirement for users to add pre-defined ``InterDependencies_`` results explicitly
``Measurement.register_parameter`` has been refactored to follow the relationship links defined in parameter subclasses and automatically register related parameters with the appropriate relationships
``DataSaver.add_result`` has been refactored to take advantage of the new ``unpack_self`` methodBreaking Changes
- A dependent parameter registered with an independent parameter as its
setpointsno longer requires that the independent parameter be registered first, if the independent parameter is ParameterBase subclass and not a str - Previously, a ParameterWithSetpoints whose setpoints values were explicitly added in add_result would use the explicit version. Now, an error is raised if the explicit values are not within some tolerance of the internal values (as with other duplication).
DataSaver.add_resultsignature has changed from*res_tupleto*result_tuples(:pr:7346)
- A dependent parameter registered with an independent parameter as its
-
The method
to_xarray_dataarray_dicton the classesDataSetandDataSetInMem
have been deprecated and replaced byto_xarray_dataset_dict. This new method allows
export of datasets that still only contain one measured parameter but can contain
related coordinates such as these given by an inferred relationship. (:pr:7432) -
ChannelTuple/ChannelList.get_channel_by_namesupport for getting more than one channel has been deprecated. To get more than one channel useget_channels_by_name.
get_channels_by_nameis guaranteed to always return an instance of the class it was called on independently of the number of channels supplied. In the future
get_channel_by_namewill be updated to ensure that it always returns a single channel. The Exception raised when
no argument is given toget_channel_by_namehas changed fromExceptiontoTypeErrorin line with how functions behave when an argument is missing. (:pr:7486)
Improved:
-
Add a read-only option to sqlite connection (:pr:
4783) -
Fix
load_from_netcdffailing for non-completed datasets due to missingcompleted_timestamp_raworrun_timestamp_rawattribute. (:pr:7221) -
The QCoDeS dataset now correctly captures data for inferred parameters when added via
datasaver.add_result. Previously these were discarded due to an oversight.
Any parameters added in this way are available viaDataSetProtocol.get_parameter_databut not exported to xarray or pandas.
Future improvements to these parameters are planned and trackedhere <https://github.com/microsoft/Qcodes/issues/7060>_.The property
InterDependencies_.non_dependencieshas been deprecated and replaced byInterDependencies_.top_level_parametersthat correctly includes inferred parameters.
TheInterDependencies_object has gained two additional methodsfind_all_parameters_in_treeandall_parameters_in_tree_by_group.The not documented but publicly importable functions
qcodes.dataset.exporters.export_to_pandas.load_to_concatenated_dataframeandqcodes.dataset.exporters.export_to_pandas.load_to_dataframe_dict
now require an extra argument in the form of anInterDependencies_object. Users are discouraged from using anything not documented inthe QCoDeS API documentation <https://microsoft.github.io/Qcodes/api/index.html>_ outside QCoDeS. (:pr:7240) -
Fix NetCDF export for datasets with None timestamp_raw values by using sentinel values (-1) during export and converting them back to None on import. This ensures NetCDF compatibility while preserving the original None values through round-trip export/import operations. (:pr:
7333) -
When exporting Datasets to xarray where the shape is known, either by the use
of utilities such asdondor manually specified, inferred parameters related
to the setpoints and measured parameters are now included in the XArray Dataset. (:pr:7432) -
Exporting datasets to XArray no longer warns if two or more variables are exported with different setpoint names and/or values.
No functionality of the export has changed.
If the setpoints for different measured parameters have the same name, missing values will be replaced by NaN such that the
measured parameters have the same coordinates in XArray. If different setpoint names
are used, the exporter will automatically handle merging coordinates so each data variable is assigned its own coordinates. (:pr:7442) -
Fixed a bug where omitting data for one or more variables could result in an inconsistent dataset cache. Missing data is now filled with appropriate empty values (0, "" or NaN depending on the data type) (:pr:
7502) -
ChannelListandAutoLoadableChannelListcan now correctly infer the type of channels in the list
when indexed using__get_iteme.g.mychannellist[0]For consistency with the base classes the parent type
inAutoLoadableChannelListhas changed fromInstrumenttoInstrumentBasewhich may require downstream
changes for type checking to work correctly. (:pr:7520)
Improved Drivers:
-
Added operation mode in the SGS100A instrument to be able to change between NORMal and BBBYpass operation modes. Defaults to NORMal. (:pr:
7344) -
Corrected power range for Keysight P5004B (:pr:
7360) -
Changes to Cryomagnetics 4G Driver
- Added missing ...
QCoDeS 0.53.0
QCoDeS 0.53.0 (2025-06-16)
Breaking Changes:
- QCoDeS has dropped support for python 3.10. QCoDeS now supports Python 3.11, 3.12 and 3.13. #7038
- The deprecated aliases to Lakeshore modules in
qcodes.instrument_drivers.Lakeshore.lakeshore_basehave been removed.
The aliases to lakeshore drivers inqcodes.instrument_drivers.Lakeshore.Model_325,qcodes.instrument_drivers.Lakeshore.Model_336andqcodes.instrument_drivers.Lakeshore.Model_372
have been removed. Please make sure that all Lakeshore related imports are fromqcodes.instrument_drivers.Lakeshoreavoiding any submodules. #7187
Improved:
-
The implementation of
do0danddo1dhave been replaced with a wrapper arounddond.
This aligns the keyword arguments withdondand ensures that these function support
the same features asdond. The same change is planned fordo2din the future. #7065 -
InstrumentLoggerAdapternow merges the extra dict from the log record with information
inserted by the LoggerAdapter. This makes it possible to add additional information to a
log message logged via the instruments log attribute e.g.myinst.visa_log.info("message", extra={"this": "that"})#7186 -
qcodes.dataset.descriptions.detect_shapesandqcodes.dataset.dond.do_nd_utilshave been updated
to useparameter.register_namewhen creating shape dictionaries for storage in the datasetPreviously, these methods used
parameter.full_namewhich could result in shapes not being stored
or used correctly for parameters that useparameter.register_name
Improved Drivers:
- The Keysight 344xxA drivers have been updated to ensure that
NPLC,autorange,autozero,apature_timeand ```apature_modeparameters use the correct instrument commends for the sense mode selected by thesense_function`` parameter. #6723
New:
InstrumentBase.add_submodulenow returns the added submodule. This similar to changes made inadd_parameterearlier.
This makes it possible to assign this to an attribute which enables static code checkers, IDEs and documentation to
discover submodules. TheGalildrivers have been updated to make use of this. Consult theGalildriver orCreating-Instrument-Drivers
notebook for examples of how to use this. It is planed that QCoDeS in the future will ship with a tool to automatically perform this refactor
and updates to all included drivers. #7017
QCoDeS 0.52.0
QCoDeS 0.52.0 (2025-04-03)
Note This will be the last version of QCoDeS to support Python 3.10.
Breaking Changes:
- QCoDeS no longer ships a
setup.pyscript and all package config is done inpyproject.toml
A version ofpipor other package manager supportingPEP621is required to build from source. #6919 - The QCoDeS dataset sqlite connection class
ConnectionPlushas been deprecated and replace withAtomicConnection.
UnlikeConnectionPlusAtomicConnectionis a direct subclass ofsqlite3.Connectionwhich enables better type checking
and will allow QCoDeS to drop the dependency onwrapt. The functionmake_connection_plus_fromis also deprecated and
it is no longer supported to convert a connection from a sqlite3 connection to a QCoDeS specific connection. #6942 - The QCoDeS deprecation utils including
qcodes.utils.deprecate.deprecation_message,
qcodes.utils.deprecate.issue_deprecation_warning,qcodes.utils.deprecate.deprecateqcodes.utils.deprecate.assert_not_deprecated
andqcodes.utils.deprecate.assert_deprecatedalong with their reexports inqcodes,qcodes.utilsandqcodes.utils.helpers
are all deprecated and will be removed in QCoDeS 0.54.0. We recommend usingtyping_extensions.deprecateas an alternative. #6946
Improved:
- Added 'parameters' argument to the 'plot_dataset' (and 'plot_by_id')
functions. This enables a choice of which dependent parameters to plot
(in the case that the plotting of all dependent parameters is not
desired). #6931 - Save the parameter snapshot under the
register_namekey in the parameters snapshot in datasets (not the station snapshot), to avoid overwritting the snapshot multiple parameters have identicalshort_names.
The parameter snapshot saved under the short name key is kept for backwards compatibility, but will be removed at a later time. #7012
Improved Drivers:
- Added several parameters into the oxford MercuryiPS driver,
enabling the control of the heaters and the sensing of internal temperatures
(magnet, PT1, and PT2 stage of cryogenic system).
Addedheater_switchparameter to manage the heater switch status and settings.
The heater switch control is bound to each WorkerPS, accepting "ON" and "OFF" as inputs.
Addedmagnet_temp,pt1_temp, andpt2_tempparameters for reading temperatures
from different sensors, utilizing the new_temp_parserfunction.
Currently, the addresses of temperature sensors are written statically in the driver. #6889
New:
- Added a global callback mechanism to
ParameterBasethat enables users to
supply custom callback functions to handle parameter changes. This new feature
allows for flexible integrations—such as logging changes, updating dashboards, or
other custom processing—without modifying full snapshot behavior.
See the PR for details on a usage example. #6934 - A new Validator
LiteralValidatorwas added. This allows validating against the members of atyping.Literal. #7009
QCoDeS 0.51.0
QCoDeS 0.51.0 (2025-02-14)
Breaking Changes:
- The deprecated and non functional function
qcodes.test()has been removed. (#6665)
Improved:
DelegateParameternow includes validators of its source Parameter into its validators. This ensures that aDelegateParameter
with a non numeric source parameter is registered correctly in a measurement when theDelegateParameterit self does not
set a validator. (#6585)- Fix a regression introduced in 0.50.0 where a DelegateParameter initialized with a None source
would not correctly call get/set on the source parameter when this has been set. (#6671) - When passing
bind_to_instrument=FalsetoInstrumentBase.add_parametera warning that
recommends not doing this is now raised suggesting a better alternative.
This replaces an existing inconsistent warning which was misleading. (#6722) - Only add magnet parameters if a magnet is detected in the Oxford Triton driver. (#6792)
Improved Drivers:
- Enabled use of ZNLE R&S VNA by recognizing the model name in RohdeSchwarzZNBBase, and creating an ZNLE## class as an alias (#6796)
QCoDeS 0.50.1
QCoDeS 0.50.1 (2024-11-28)
Improved:
- Fix a regression introduced in 0.50.0 where a DelegateParameter initialized with a None source
would not correctly call get/set on the source parameter when this has been set. #6671