QCoDeS [UNRELEASED DRAFT] (2026-07-24)

Breaking Changes:

  • Legacy backwards-compatibility aliases across the instrument_drivers module that were deprecated 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. (#8060)

  • Several module-level TypeVar definitions and type aliases that are no longer used internally have been deprecated. Importing them will emit a QCoDeSDeprecationWarning. They will be removed in a future version. (#8096)

  • Removed deprecated VISA-related APIs from VisaInstrument: the _address property (use address instead) and the visalib property (use visabackend instead). The unused and deprecated MockAMI430 mocker class has also been removed. (#8103)

  • Importing the short hand aliases (such as Parameter, Measurement, Instrument, Monitor and Station) from the top level qcodes namespace is now deprecated and emits a QCoDeSDeprecationWarning. Import these names from their respective submodules (for example qcodes.parameters, qcodes.dataset or qcodes.station) instead. The submodules themselves (such as qcodes.dataset and qcodes.instrument) remain accessible from the top level qcodes namespace and are not deprecated.

    Similarly, importing the parameter classes (such as Parameter, ManualParameter and DelegateParameter) from qcodes.instrument is now deprecated and emits a QCoDeSDeprecationWarning. Import these names from qcodes.parameters instead. The names remain available from qcodes.instrument at runtime for backwards compatibility but are hidden from static type checkers, so importing them from qcodes.instrument is reported as an unknown attribute. (#8252)

Improved Drivers:

  • Fixed three bugs in qcodes.instrument_drivers.QuantumDesign.DynaCoolPPMS.DynaCool.DynaCool that prevented the driver from instantiating and from updating the temperature_setpoint cache:

    • block_while_ramping_temperature is now created with set_cmd=None / get_cmd=None so it behaves as a settable cache-only parameter, instead of set_cmd=False / get_cmd=False which made it read-only and rejected the supplied initial_value.

    • Removed the duplicate instrument=self argument from the blocking_t_state_check_interval parameter creation, which is supplied automatically by add_parameter and was raising on construction.

    • Fixed an AttributeError when setting the temperature: the cache update in _set_temperature_and_state now correctly references self.temperature_setpoint rather than the non-existent self.setpoint. (#8097)

  • Correct the lower bound of the span parameter validator of the KeysightPNABase driver to 0 Hz. (#8195)

  • Referring to the:

    Improvements:

    • Expanded the list of supported devices for the KeysightAgilent_33XXX driver

    • Added implementations of SCPI commands for working with: ARB signals, edges of Pulse function, output termination, voltage autoranging

    • Created tests for new commands and update sim file

New:

  • Added qcodes.dataset.get_db_overview(), a fast way to list the runs in a QCoDeS database. It fetches run metadata (experiment/sample names, timestamps, record counts and guids) via a single JOIN query on the runs and experiments tables, without instantiating a DataSet object per run, making it possible to list databases with many thousands of runs almost instantly. The returned qcodes.dataset.RunOverviewDict is also exported on the public qcodes.dataset namespace. The function does not return snapshots 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. (#8266)

Under the hood:

  • Importing the top level qcodes namespace no longer eagerly imports the dataset, instrument, parameters, monitor, station and validators submodules. The discouraged short hand aliases (such as qcodes.Parameter and qcodes.Measurement) as well as qcodes.validators are still available at runtime via a lazy module level __getattr__, but they are intentionally hidden from static type checkers and are now reported as unknown attributes rather than typed as Any; import the names from their respective submodules to retain type information. This breaks a large import cycle spanning the parameters, dataset and instrument packages that triggered an internal error in mypy 2.2. (#8252)