QCoDeS 0.62.0 (2026-10-26)

Improved:

  • qcodes.utils.is_qcodes_installed_editably no longer shells out to pip to detect an editable install. The editable status is now read directly from the installed package metadata (the PEP 610 direct_url.json file), which both pip and uv write. This means the check also works in environments where pip is not installed, such as environments managed by uv, and it no longer requires spawning a subprocess. (#8580)

  • Add qcodes.dataset.get_open_connections() and qcodes.dataset.close_all_connections() to inspect and close tracked database connections. Connections owned by the exiting thread are also closed automatically at interpreter shutdown. Test cleanup closes connections opened during each test without closing connections owned by broader-scoped fixtures or other threads. (#8626)

  • The type annotations of Station.load_all_instruments now accept calling it without arguments or with only one of only_names and only_types. Previously these valid calls matched none of the overloads and were rejected by static type checkers. (#8644)

Improved Drivers:

  • Allow the Yokogawa GS200 driver to use the documented generated output ranges, including 12 V on the 10 V source range, while retaining the 32 V and 200 mA maximum output limits for direct output and ramps. (#8577)

  • AlazarTechATS.acquire is now annotated to accept any AcquisitionInterface as acquisition_controller, not only an AcquisitionController, matching what it supports at runtime. AcquisitionController now passes its type parameter on to AcquisitionInterface, so the return type of acquire is inferred from the post_acquire return type of the controller. Subclasses of AcquisitionController[T] whose post_acquire does not return T will now be reported by static type checkers. (#8644)

  • Added missing type annotations to the optional arguments of the Keysight B1500 MessageBuilder methods ercmaio, lst_query, pch_query, sprm, tc and wat. (#8644)

  • The Galil DMC-41x3 driver now retries empty or malformed controller replies when polling motion status and axis positions, and waiting for motion to complete is bounded by a timeout (300 s by default) that raises TimeoutError. Each motion-status query is limited by the remaining motion timeout, with millisecond resolution, and restores the original I/O timeout afterward. Connecting now falls back through the --direct -s ALL and -s ALL options before using the bare address. Pressing Ctrl-C while waiting for motion now calls abort() and then turns the axes off with MO. (#8647)

Under the hood:

  • QCoDeS is now tested against Python 3.15 on Linux. The zhinst-qcodes test dependency is not installed on Python 3.15 since zhinst-core does not yet provide wheels for it. (#8581)

  • The minimum supported version of typing_extensions is now 4.12.0. Older versions do not apply the default of a TypeVar, so subscripting a parameter with only its value type at runtime, e.g. Parameter[int], failed with TypeError: Too few arguments on Python 3.12. (#8644)