Releases: QuTech-Delft/QMI
Releases · QuTech-Delft/QMI
V0.53.0
[0.53.0] - 2026-05-11
Added
- Functions to
qmi.instruments.yokogawa.dlm4308for 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
decoderforScpiProtocol.askmethod was added. This enabled the trace adat acquisition in all data formats for Yokogawa. - Added a HDF5 file-to-QMI
DataSetconversion function inqmi.data.dataset. - Added a possibility to add QMI
DataSetinto an existing HDF5 file.
Changed
- Replace
pylintlinter withruff. - DeprecationWarning warning on the
start_stopcontext manager, asContextobjects are now their own context managers.
Usages ofwith start_stop(qmi, ...)can be replaced withwith qmi.start(...)and
with start_stop(<Context Object>)can be replaced withwith <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 returnsNamedTuples calledQMI_Context.PeerDescriptorinstead of raw tuples to make the output easier to work with.
All tuple-like usages of the output fromdiscover_peer_contextswill still work.- Specifying an explicit
Noneargument for theconfig_fileparameter toqmi.start()will now always use an empty configuration.
The default behavior whenconfig_fileis not specified has not changed. - Refactoring of QMI
DataSetclass so that it allows also raw (single) dataset column(s) without axis | axes definition. - QMI datasets has now clear
QMI_Dataset: 1attribute in dataset root. qmi.data.datastoremodule to work with changes inQMI_DataSetclass.
V0.52.0
Added
runmethod inQMI_Contextclass to accommodate forthreading.Threadchanges in Python 3.14.standard-xdrlibfrom "dead batteries" as a dependency to fix issues coming from removal ofxdrlibfrom standard library.grouping=2input parameter in theZurichInstruments_Hdawgto 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
h5netcdfpackage inpyproject.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-toolkitpackage as basis. - DeprecationWarning on the
set|get_output_amplitudemethods in the HDAWG driver, as the new firmware points to rather usingoutputs/n/gains/n. Useset|get_output_gainfrom now on. - All modules in
qmi.datawere made compatible also withh5netcdfpackage. It can now be used equivalently with theh5py-based HDF5 data files when providingbackend="h5netcdf"input parameter on specific class initializations and calls. - Changed Thorlabs K10CR1 to derive from new base class for K10CRx instruments.
Fixed
- Moving of
_snicaddrin psutil package v2.7 from_commonto_ntuplesmodule, which caused an error withqmi_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_Contextclass. Addition ofrunmethod with specific input parameter fixes the issue. - Instrument drivers
tsl_570.py,wltf_n.pyandtfn.pyhave 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-pyimport for Python 3.13 version, where it was needed for python-vxi11 package. - Removed deprecated
get_velocity_paramsfunction in Thorlabs K10CRx driver, and the respectiveVelocityParamsdataclass in the APT protocol.
V0.51.2
[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
[0.51.1] - 2026-01-26
Fixed
psutil._commondoes not containsnicaddrnamedtuple since version 7.2.0. It has been moved topsutil._ntuples. Fixed this inproc.py.- Not setting
ziDAQServerandAwgModuleas global variables inqmi.instruments.zurich_instruments.hdawgcaused them not to be available in the driver after importing them in the_import_modules. This is now fixed.
V0.51.0
[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.coreinstead ofzhinst.ziPython. Also the 'schema' is obtained now from the instrument itself, and not from a separate file. - Changed
qmi_toolto be also an executable script likeqmi_proc.
Fixed
- In
usbtmc.pynow doing.strip()ondev.serial_numberstring to avoid SNs with whitespace character(s). - Fixed in
pyproject.tomlthe executableqmi_procand "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.schemafile.
V0.50.0
[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.procwhere the main program should also haverunas the main method, notmain. - The
is_move_completedin 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
[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.pymodule.
Changed
- All entry point functions in
binscripts frommaintorunto avoid unintended modifications ofpyproject.tomlwhen executing release procedure. - The
configstructwrapper fromqmi.core.config_structnow accepts only modern typing for field. Most (but not all) of thetyping.<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.tomlnot 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 forconfigstructwrapper.
[0.48.0] - Accidental tag push for release, release removed
v0.47.1
v0.47.0
[0.47.0] - 2025-03-14
Added
- Python 3.12, 3.13 support.
- installing of
py-xdrlibfrom 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.mdrelease procedure usingbump2versionwith multiple configuration files.
Changed
qmi_toolscript entry point to be atmainfunction.- Package management to be done via
pyproject.tomlinstead ofsetup.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_contextsscript as unused.
v0.46.0
[0.46.0] - 2024-10-14
Added
- The
QMI_InstrumentandQMI_TaskRunner(which inherit fromQMI_RpcObject) are now equipped with specific__enter__and__exit__methods, which in the case ofQMI_Instrument
also open and close the instrument when run with awithcontext manager protocol. MeanwhileQMI_TaskRunnerstarts and stops then joins a QMI task thread. In practise, these context managers
can be used instead of the to-be-obsoletedopen_closeandstart_stop_joincontext managers. The context manager protocol cannot be used forQMI_RpcObjectdirectly. - 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.pyby adding extra logic checkand not isinstance(val, type)on L236. - Also made in
config_struct.pyin 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.