Releases: microsoft/Qcodes
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.AMI430
module. UseAMIModel4303D
fromqcodes.instrument_drivers.american_magnetics
instead. - Removed the deprecated
qcodes.utils.spyder_utils
module containing theadd_to_spyder_UMR_excludelist
function. This utility was known to not work with latest Spyder versions and was unused in QCoDeS.
Removed classes:
- Removed the deprecated
AMI430_3D
andAMI430
classes fromqcodes.instrument_drivers.american_magnetics.AMI430
. UseAMIModel4303D
andAMIModel430
fromqcodes.instrument_drivers.american_magnetics
instead. - Removed deprecated methods from
AMI430SwitchHeater
- Removed deprecated
AMI430_VISA
class fromip_to_visa.py
. - Removed the deprecated
ConnectionPlus
class fromqcodes.dataset.sqlite.connection
. UseAtomicConnection
class instead. - Removed the deprecated
AlazarTech_ATS
class. UseAlazarTechATS
instead. - Removed the deprecated
WaveformGenerator_33XXX
class. UseKeysight33xxx
instead. - Removed the following deprecated Keysight classes:
Keysight_34410A
, useKeysight34410A
insteadKeysight_34411A
, useKeysight34411A
insteadKeysight_34460A
, useKeysight34460A
insteadKeysight_34461A
, useKeysight344xxA
insteadKeysight_34465A
, useKeysight34465A
insteadKeysight_34470A
, useKeysight34470A
insteadN51x1
, useKeysightN51x1
insteadPNABase
, useKeysightPNABase
insteadPNAxBase
, useKeysightPNAxBase
insteadKeysightSubModule
, useKeysight34980ASwitchMatrixSubModule
insteadKeysightSwitchMatrixSubModule
, useKeysight34980ASwitchMatrixSubModule
insteadB1500Module
, useKeysightB1500Module
instead_Keysight_344xxA
, useKeysight344xxA
instead
- Removed the deprecated Keysight submodules:
Trigger
, useKeysight344xxATrigger
insteadSample
, useKeysight344xxASample
insteadDisplay
, useKeysight344xxADisplay
instead
- Removed the deprecated MiniCircuits classes:
SwitchChannelBase
, useMiniCircuitsSPDTSwitchChannelBase
insteadSPDT_Base
, useMiniCircuitsSPDTBase
instead
- Removed the deprecated
USBHIDMixin
class
Removed functions:
- Removed from
qcodes.utils.deprecate
:deprecation_message
issue_deprecation_warning
deprecate
decorator (usetyping_extensions.deprecated
instead)_catch_deprecation_warnings
assert_not_deprecated
assert_deprecated
- Removed
make_connection_plus_from
function 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_parameter
qcodes.instrument.function
qcodes.instrument.group_parameter
qcodes.instrument.specialized_parameters
qcodes.instrument.sweep_values
qcodes.instrument.base
qcodes.instrument.parameter
qcodes.utils.command
qcodes.utils.dataset
qcodes.utils.installation
qcodes.utils.helpers
qcodes.utils.metadata
qcodes.utils.plotting
qcodes.utils.threading
qcodes.utils.validators
Please consult the API documentation at :ref:
Api
for alternatives and migration paths. (:pr:7262
) -
The methods
InstrumentBase.__getitem__
,InstrumentBase.get
,InstrumentBase.set
,InstrumentBase.call
are 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
ParameterBase
now 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
setpoints
no 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_result
signature has changed from*res_tuple
to*result_tuples
(:pr:7346
)
- A dependent parameter registered with an independent parameter as its
-
The method
to_xarray_dataarray_dict
on the classesDataSet
andDataSetInMem
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_name
support for getting more than one channel has been deprecated. To get more than one channel useget_channels_by_name
.
get_channels_by_name
is 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_name
will be updated to ensure that it always returns a single channel. The Exception raised when
no argument is given toget_channel_by_name
has changed fromException
toTypeError
in 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_netcdf
failing for non-completed datasets due to missingcompleted_timestamp_raw
orrun_timestamp_raw
attribute. (: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_data
but 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_dependencies
has been deprecated and replaced byInterDependencies_.top_level_parameters
that correctly includes inferred parameters.
TheInterDependencies_
object has gained two additional methodsfind_all_parameters_in_tree
andall_parameters_in_tree_by_group
.The not documented but publicly importable functions
qcodes.dataset.exporters.export_to_pandas.load_to_concatenated_dataframe
andqcodes.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 asdond
or 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
) -
ChannelList
andAutoLoadableChannelList
can now correctly infer the type of channels in the list
when indexed using__get_item
e.g.mychannellist[0]
For consistency with the base classes the parent type
inAutoLoadableChannelList
has changed fromInstrument
toInstrumentBase
which 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_base
have been removed.
The aliases to lakeshore drivers inqcodes.instrument_drivers.Lakeshore.Model_325
,qcodes.instrument_drivers.Lakeshore.Model_336
andqcodes.instrument_drivers.Lakeshore.Model_372
have been removed. Please make sure that all Lakeshore related imports are fromqcodes.instrument_drivers.Lakeshore
avoiding any submodules. #7187
Improved:
-
The implementation of
do0d
anddo1d
have been replaced with a wrapper arounddond
.
This aligns the keyword arguments withdond
and ensures that these function support
the same features asdond
. The same change is planned fordo2d
in the future. #7065 -
InstrumentLoggerAdapter
now 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_shapes
andqcodes.dataset.dond.do_nd_utils
have been updated
to useparameter.register_name
when creating shape dictionaries for storage in the datasetPreviously, these methods used
parameter.full_name
which 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_time
and ```apature_modeparameters use the correct instrument commends for the sense mode selected by the
sense_function`` parameter. #6723
New:
InstrumentBase.add_submodule
now returns the added submodule. This similar to changes made inadd_parameter
earlier.
This makes it possible to assign this to an attribute which enables static code checkers, IDEs and documentation to
discover submodules. TheGalil
drivers have been updated to make use of this. Consult theGalil
driver 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.py
script and all package config is done inpyproject.toml
A version ofpip
or other package manager supportingPEP621
is required to build from source. #6919 - The QCoDeS dataset sqlite connection class
ConnectionPlus
has been deprecated and replace withAtomicConnection
.
UnlikeConnectionPlus
AtomicConnection
is a direct subclass ofsqlite3.Connection
which enables better type checking
and will allow QCoDeS to drop the dependency onwrapt
. The functionmake_connection_plus_from
is 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.deprecate
qcodes.utils.deprecate.assert_not_deprecated
andqcodes.utils.deprecate.assert_deprecated
along with their reexports inqcodes
,qcodes.utils
andqcodes.utils.helpers
are all deprecated and will be removed in QCoDeS 0.54.0. We recommend usingtyping_extensions.deprecate
as 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_name
key in the parameters snapshot in datasets (not the station snapshot), to avoid overwritting the snapshot multiple parameters have identicalshort_name
s.
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_switch
parameter 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_temp
parameters for reading temperatures
from different sensors, utilizing the new_temp_parser
function.
Currently, the addresses of temperature sensors are written statically in the driver. #6889
New:
- Added a global callback mechanism to
ParameterBase
that 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
LiteralValidator
was 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:
DelegateParameter
now 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 theDelegateParameter
it 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=False
toInstrumentBase.add_parameter
a 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
QCoDeS 0.50.0
QCoDeS 0.50.0 (2024-11-22)
Breaking Changes:
- QCoDeS no longer attempts to automatically disable Sypders User module reloader (UMR).
The code was no longer working correctly with the latest version of Spyder and is not
maintainable since Spyder does not have a public api to disable UMR. If you use
QCoDeS from an editable install it is strongly recommended to disable UMR for QCoDeS.
See :ref:gettingstarted
for more details. (#6647)
Improved:
- Improves the DataSetDefinition class to allow users to specify metadata to be added to the resulting dataset (#6643)
- DelegateParameter now reads delegated properties from source rather than setting them at source change.
This resolves an issue when delegating from another delegate parameter may result in incorrect attributes. (#6648)
New:
QCoDeS 0.49.0
QCoDeS 0.49.0 (2024-10-15)
Breaking Changes:
- The methods
get
,set
,call
and__getitem__
on theInstrumentBase
class have been deprecated.
Parameters can be looked up by name using theInstrument.parameters
dict and functions usinginstrument.functions
which is cleaner and fully equivalent. #6086 - The deprecated
qcodes.tests
module has been removed. Mock instruments can be found inqcodes.instrument_drivers.mock_instruments
and
DriverTestCase asqcodes.extensions.DriverTestCase
. #6480
Improved:
- The deprecated support for enabling OpenCensus based telemetry has been removed.
QCoDeS will now warn if you try to enable OpenCensus based telemetry in the config.
Users are encouraged to roll out their own telemetry solution if they need it based
on OpenTelemetry. This also means that theqcodes[opencensus]
install target has been removed.
The unused methodfilter_out_telemetry_log_records
has been deprecated and will be removed in a future release. #6439 - Parameters registered in a qcodes Measurement are now snapshotted and stored in the resulting dataset under
dataset.snapshot["parameters"]
#6487 - Group parmeter now accepts a callable that returns a string command as its
get_cmd
.
This is useful for the cases where the command string is dynamic; for example,
lambda: f"CMD {get_id_that_specifies_the_command()} ?"
. #6520
Improved Drivers:
- LakeShore335: Fix typo in setpoint_ramp parameter group #6430
- Add curve header parameters to Lakeshore model 336 that allows query of the input channel curve header.
This is useful to verify remotely if the correct temperature calibration curve is selected. #6520 - Fix Rigol DG4000 value mappings for
output_polarity
parameters. #6345
QCoDeS 0.48.0
QCoDeS 0.48.0 (2024-09-09)
Improved:
- Improve handling of corner cases where
Instrument.remove_parameter
could raise an exception. #6394 dond
now takes an optionalsqueeze
flag as input. Inspired by Matplotlib'splt.subplots
argument
of the same name, this allows the user to always get the same type returned from the function if set to False.
This makes it easier to write type checked code that usesdond
as a function. #6422
QCoDeS 0.47.0
QCoDeS 0.47.0 (2024-08-07)
Breaking Changes:
This release supports Python 3.10 and later.
Improved Drivers:
- Fixed the Harvard DecaDAC range not including the highest bit. #6076
- Fixed Keysight 34465A DMM firmware version parsing. #6076
- Fixed Oxford Instruments Triton section parsing. #6076
- The long deprecated aliases to channels on MiniCircuits UsbSPDT drivers have been removed. This means that
channel_a
should be replaced bya
and so on in any call to this driver. #6207 - Added power output parameters to LakeShore335 driver, allowing configuration of the maximum heater current. #6248
- Added input coupling and impedance parameters for channels in the Keysight Infiniium oscilloscope driver. #6293
- Added 'offset' parameter to Tektronix AWG Channels. #6303
- The
qcodes.instrument_drivers.american_magnetics.AMIModel430
driver can now be snapshotted with the heater missing or not enabled
without triggering warnings. Furthermore confusing aliases for parameters on the switch module have been deprecated since use of these would
lead to incorrect state of the parameters.
The aliasesqcodes.instrument_drivers.american_magnetics.AMI_430_visa.AMI430_3D
andqcodes.instrument_drivers.american_magnetics.AMI_430_visa.AMI430
have been deprecated. #6306 - Add setpoint ramp rate parameters to LakeShore335 driver,
this allows to configure the setpoint ramp rate. #6322 - Add setpoint ramp status parameter to LakeShore335 driver,
this allows to monitor a ongoing setpoint ramp. #6322
Other Changes:
- Improved error handling when checking experiment IDs in the experiment list. #6305