Skip to content

Releases: QuTech-Delft/QMI

V0.53.0

11 May 14:47

Choose a tag to compare

[0.53.0] - 2026-05-11

Added

  • Functions to qmi.instruments.yokogawa.dlm4308 for obtaining trace data from the instrument waveform channels via Ethernet. All data formats are enabled.
  • Due to possibility of obtaining data in various data formats with Yokogawa device, and the fact that the returned data string decoding varies depending on the data format, an option for setting the decoder for ScpiProtocol.ask method was added. This enabled the trace adat acquisition in all data formats for Yokogawa.
  • Added a HDF5 file-to-QMI DataSet conversion function in qmi.data.dataset.
  • Added a possibility to add QMI DataSet into an existing HDF5 file.

Changed

  • Replace pylint linter with ruff.
  • DeprecationWarning warning on the start_stop context manager, as Context objects are now their own context managers.
    Usages of with start_stop(qmi, ...) can be replaced with with qmi.start(...) and
    with start_stop(<Context Object>) can be replaced with with <Context Object>.
  • Change reported port number in response to a QMI discovery broadcast message for unbound TCP listeners to -1.
  • QMI_Context.discover_peer_contexts() now returns NamedTuples called QMI_Context.PeerDescriptor instead of raw tuples to make the output easier to work with.
    All tuple-like usages of the output from discover_peer_contexts will still work.
  • Specifying an explicit None argument for the config_file parameter to qmi.start() will now always use an empty configuration.
    The default behavior when config_file is not specified has not changed.
  • Refactoring of QMI DataSet class so that it allows also raw (single) dataset column(s) without axis | axes definition.
  • QMI datasets has now clear QMI_Dataset: 1 attribute in dataset root.
  • qmi.data.datastore module to work with changes in QMI_DataSet class.

V0.52.0

01 Apr 12:51

Choose a tag to compare

Added

  • run method in QMI_Context class to accommodate for threading.Thread changes in Python 3.14.
  • standard-xdrlib from "dead batteries" as a dependency to fix issues coming from removal of xdrlib from standard library.
  • grouping=2 input parameter in the ZurichInstruments_Hdawg to enable initialization directly in wanted grouping mode.
  • Addition of new methods in Zurich Instruments HDAWG QMI driver. For example, now it is also possible to upload sequencer programs, command tables and waveforms to specific AWG channel or AWG (core) index. Also setting DIO VALID index and polarity is now possible.
  • Python 3.14 CI pipelines.
  • Dependency on h5netcdf package in pyproject.toml.
  • Base class for Thorlabs K10CRx instruments in qmi.instruments.thorlabs.k10crx module.
  • Driver for Thorlabs K10RC2 instrument. It is based on the new base class for K10CRx instruments.

Changed

  • API changing Zurich Instruments HDAWG QMI driver refactoring to be based mainly on the zhinst.toolkit package to allow easier 4x2 and 2x4 grouping modes and use. The driver now uses also zhinst-toolkit package as basis.
  • DeprecationWarning on the set|get_output_amplitude methods in the HDAWG driver, as the new firmware points to rather using outputs/n/gains/n. Use set|get_output_gain from now on.
  • All modules in qmi.data were made compatible also with h5netcdf package. It can now be used equivalently with the h5py-based HDF5 data files when providing backend="h5netcdf" input parameter on specific class initializations and calls.
  • Changed Thorlabs K10CR1 to derive from new base class for K10CRx instruments.

Fixed

  • Moving of _snicaddr in psutil package v2.7 from _common to _ntuples module, which caused an error with qmi_proc.
  • Process management logging path now resolves correctly also for cases where the config file path starts with the ~, indicating home directory location.
  • Issue with Python 3.14 compatibility in QMI_Context class. Addition of run method with specific input parameter fixes the issue.
  • Instrument drivers tsl_570.py, wltf_n.py and tfn.py have now default values in dataclasses which are initiated in the driver class constructor. This is done to avoid Mypy error: 'Cannot access instance-only attribute "" on class object [misc]"

Removed

  • Removed xdrlib-py import for Python 3.13 version, where it was needed for python-vxi11 package.
  • Removed deprecated get_velocity_params function in Thorlabs K10CRx driver, and the respective VelocityParams dataclass in the APT protocol.

V0.51.2

23 Feb 08:46

Choose a tag to compare

[0.51.2] - 2026-02-20

Added

  • run method in QMI_Context class as this is now required for Python 3.14, after changes in threading module.

Fixed

  • Log file location config for services in qmi_proc.py. Location string starting with tilde (~) is now interpreted correctly to be the user's home directory.
  • Minor edits in docstrings, tutorial and .gitignore file.

V0.51.1

26 Jan 09:08

Choose a tag to compare

[0.51.1] - 2026-01-26

Fixed

  • psutil._common does not contain snicaddr namedtuple since version 7.2.0. It has been moved to psutil._ntuples. Fixed this in proc.py.
  • Not setting ziDAQServer and AwgModule as global variables in qmi.instruments.zurich_instruments.hdawg caused them not to be available in the driver after importing them in the _import_modules. This is now fixed.

V0.51.0

09 Dec 09:06

Choose a tag to compare

[0.51.0] - 2025-12-09

Added

  • Thorlabs KDC101 controller QMI driver. It can at the moment control Z906, Z912 and Z925 actuators and PRMTZ8 rotation stage.
  • New QMI driver for Agiltron FF1x8 optical switch.
  • New QMI driver for Yokogawa DLM4038 oscilloscope.

Changed

  • The Agiltron FF optical switch QMI drivers have now common base class in qmi.instruments.agiltron._ff_optical_switch
  • Refactored also unit-tests for Agiltron FF optical switches.
  • Zurich Instruments HDAWG instrument driver now uses zhinst.core instead of zhinst.ziPython. Also the 'schema' is obtained now from the instrument itself, and not from a separate file.
  • Changed qmi_tool to be also an executable script like qmi_proc.

Fixed

  • In usbtmc.py now doing .strip() on dev.serial_number string to avoid SNs with whitespace character(s).
  • Fixed in pyproject.toml the executable qmi_proc and "adwin" scripts in "bin" to be in separate section w.r.t. the other scripts which should not be executable.

Removed

  • Zurich Instruments HDAWG instrument driver hdawg_command_table.schema file.

V0.50.0

01 Sep 08:00

Choose a tag to compare

[0.50.0] - 2025-09-01

Added

Changed

  • The Thorlabs APT protocol is now the same for both K10CR1 and MPC320 instruments.
  • The handling of discarding data and waiting for data during requests in APT protocol was improved. The waiting times are now directly from the class attribute DEFAULT_RESPONSE_TIMEOUT unless otherwise defined in calls.
  • The dummy instrument now requires to be opened before using the RPC methods, by additions of open-checks.

Fixed

  • Tenma power supply unit CLI read current and voltage calls fixed to be the correct get_... calls.
  • Critical fix on qmi.tools.proc where the main program should also have run as the main method, not main.
  • The is_move_completed in Thorlabs_Mpc320 is fixed to work now, providing a short wait is used if it is called continuously in a loop until the response is True
  • The unittests were fixed accordingly to changes for K10CR1 and MPC320 device driver tests.
  • Corrections in documentation.

v0.49.0

19 May 12:26

Choose a tag to compare

[0.49.0] - 2025-05-19

Added

  • The log file existence is checked and necessary folder structure is created if needed.
  • The log file maximum size and number of backups can now be set. Defaults are 10GB size and 5 backups (total of 60GB).
  • An example of how to define logging options, in the docstring of logging_init.py module.

Changed

  • All entry point functions in bin scripts from main to run to avoid unintended modifications of pyproject.toml when executing release procedure.
  • The configstruct wrapper from qmi.core.config_struct now accepts only modern typing for field. Most (but not all) of the typing.<Type> will not be parsed anymore by the type parser.
  • The obsoleted "python3" commands were replaced with "python" in tools.proc.

Fixed

  • In context_singleton.py, the QMI 'log_dir' path is now correctly retrieved from QMI configuration file, if it is defined.
  • For QMI configuration and log file locations, the path is made OS-independent and the ~ character, if at start of the path, is replaced with full path.
  • Fixed pyproject.toml not to point to incorrect qmi location for package installation, but to root by removing [tool.setuptools.packages.find] lines.
  • The 'venv' executable path was made OS-dependent ("win" or else) for creating 'venv' in tools.proc.

Removed

  • The support for most old typing.<Type> types for configstruct wrapper.

[0.48.0] - Accidental tag push for release, release removed

v0.47.1

15 Apr 14:11

Choose a tag to compare

[0.47.1] - 2025-04-15

Fixed

  • Fixed pyproject.toml not to point to incorrect qmi location for package installation, but to root by removing [tool.setuptools.packages.find] lines.

v0.47.0

14 Mar 14:14

Choose a tag to compare

[0.47.0] - 2025-03-14

Added

  • Python 3.12, 3.13 support.
  • installing of py-xdrlib from GitHub source for Python 3.13 unit-tests.
  • HighFinesse Wavelength Meter (Wlm) driver with unittests, and license terms in wlmConst.py and wlmData.py.
  • RELEASE.md release procedure using bump2version with multiple configuration files.

Changed

  • qmi_tool script entry point to be at main function.
  • Package management to be done via pyproject.toml instead of setup.py.
  • Digilent and PicoTech devices' typing fixed and modernized.

Fixed

  • Full CI-test to install qmi package correctly and run unit-tests with all supported Python versions.
  • Some new typing issues, due to Mypy and Numpy updates, were fixed and respective modules were updated to 3.10+ Python style.
  • Possible fix on the badges not showing on Pypi page.

Removed

  • Python 3.8, 3.9 and 3.10 support, numpy and scipy version restrictions in dependencies.
  • qmi_run_contexts script as unused.

v0.46.0

08 Jan 08:25

Choose a tag to compare

[0.46.0] - 2024-10-14

Added

  • The QMI_Instrument and QMI_TaskRunner (which inherit from QMI_RpcObject) are now equipped with specific __enter__ and __exit__ methods, which in the case of QMI_Instrument
    also open and close the instrument when run with a with context manager protocol. Meanwhile QMI_TaskRunner starts and stops then joins a QMI task thread. In practise, these context managers
    can be used instead of the to-be-obsoleted open_close and start_stop_join context managers. The context manager protocol cannot be used for QMI_RpcObject directly.
  • The Bristol FOS has now a QMI driver version that works on Windows PCs. Also the respective CLI has been added in bin/instruments.

Changed

  • The CI pipelines are now using reusable workflows, placed in reusable-ci-workflows.yml.
  • The file names for the different pipeline actions were also changed to be more descriptive.

Fixed

  • mypy error on config_struct.py by adding extra logic check and not isinstance(val, type) on L236.
  • Also made in config_struct.py in L186 also tuples to be recognized as "untyped values".
  • workflow artifacts to be of @v4 instead of @V3 that are to be deprecated. For setup-python @v5 even.
  • Implemented the rtscts keyword in TransportDescriptorParser for the (serial) transport factory.