# Changelog ## Pre-Release ### Breaking Changes None ### Bugfixes - Fixed the correct assignment of `metadata` and `general` when loading data with `NpyDataStorage`, in line with the other storage classes ### New Features - Added type hinting in `FitConfiguration` - Added optional parameters `estimator` and `custom_parameters` to `FitConfigurationsModel.add_configuration` to enable adding of new fit configuration with custom parameters and selectable estimator ### Other None ## Version 1.6.0 Released on 03.02.2025 ### Breaking Changes None ### Bugfixes - Fixed a bug where qudi would deadlock when starting a GUI module via the ipython terminal - Fixed a bug with the `qtconsole` package no longer being part of `jupyter`. It is now listed explicitly in the dependencies. - Fixed SystemTrayIcon error when activating GUI modules - Fixed `TextDataStorage.load_data` to load all lines of data and not skip the first line of data - Fixed `CsvDataStorage.load_data` to load all lines of data and not skip the first line of data - Fixed `NpyDataStorage.load_data` exception when loading metadata ### New Features None ### Other - Removed `setup.py` and moved fully to `pyproject.toml` instead ## Version 1.5.1 Released on 18.08.2024 ### Breaking Changes None ### Bugfixes - Fixed deprecated import path for `windows` module from `scipy.signal` in `qudi.util.math` - Fixed decay parameter estimation in `qudi.util.fit_models.exp_decay.ExponentialDecay` fit model - Fixed syntax error in `qudi.util.fit_models.lorentzian.LorentzianLinear` fit model ### New Features - Introduced `DiscreteScalarConstraint` that expands the functionality of `ScalarConstraint` to check whether a value is in a set of discrete values ### Other - Improved documentation [`getting_started.md`](getting_started/getting_started.md) - Added documentation [`programming_guidelines/data_fitting_integration.md`](programming_guidelines/data_fitting_integration.md) ## Version 1.5.0 Released on 16.11.2023 ### Breaking Changes None ### Bugfixes - Fixes a bug where all fit configurations for a fit model/container fail to load upon activation of a module because the fit model saved in AppData is no longer available. Throws a warning now instead and ignores the respective fit configuration. - Fixed a bug that caused `qudi.util.models.DictTableModel` to raise `IndexError` when used in a `ListView` and/or when data at index zero is requested. ### New Features - Added helper functions in util/linear_transform.py to allow transformations (rotations and shifts) using the affine transformation matrix formalism. ### Other - Fine-tuning of string output of fit results from qudi.util.units.create_formatted_output(): Failed fits should provide error= np.nan. Fixed parameters are marked as such. Brackets introduced, eg. (2.67 ± 0.01) GHz. ## Version 1.4.1 Released on 21.06.2023 ### Breaking Changes None ### Bugfixes None ### New Features - Added utility descriptor objects to new module `qudi.util.descriptors`. Can be used to facilitate smart instance attribute handling. ### Other - Support for Python 3.10 - Better backwards compatibility of `qudi.util.constraints.ScalarConstraint` with the deprecated `qudi.core.interface.ScalarConstraint` object ## Version 1.3.0 Released on 20.12.2022 ### Breaking Changes None ### Bugfixes - NULL bytes in log messages are handled now and no longer lead to crashes of qudi. They are replaced by the corresponding hex literal "\x00". - Rubberband selection of utility plot widgets now works for `pyqtgraph != 0.12.4`. This specific version is broken in that regard and a comprehensive error is thrown if it is detected. - Adjusted 2D gaussian fit arguments to be compatible with the datafitting toolchain. ### New Features - Multiple qudi sessions can now be run in parallel locally. However, the user must ensure non-conflicting socket server settings for namespace server and remote module server in the configs to load. ### Other - Bumped minimum package requirement `pyqtgraph >= 0.13.0`. - Introduced properties to make `qudi.util.constraints.ScalarConstraint` mostly backwards compatible with the deprecated `qudi.core.interface.ScalarConstraint`. Only exception is `unit` which should not be supported anymore. ## Version 1.2.0 Released on 30.09.2022 ### Breaking Changes None ### Bugfixes None ### New Features - New general-purpose interactive data display widget `qudi.util.widgets.plotting.interactive_curve.InteractiveCurvesWidget` providing multiple optional features: - Legend creation and generic dataset naming - Linking of fit curve to dataset and synchronous handling of both - Rubberband zooming in 1 and 2 dimensions - Data markers in 1 and 2 dimensions - Data range selections in 1 and 2 dimensions - Checkbox-based toggling of dataset visibility - Plot editor for setting axis labels, units and view ranges - Mouse cursor tracking and display in data coordinates - Various signals to interface with the above-mentioned features ### Other None ## Version 1.1.0 Released on 25.07.2022 ### Breaking Changes - Changed event handling of qudi module state machine. `on_deactivate` will be run BEFORE the state machine actually changes into state `deactivated`. - `ConfigOption` meta-attributes of qudi modules are no longer set in config under the module name section directly, but must be specified in an `options` subsection instead. So something like ```python my_module_name: module.Class: 'qudi.hardware.my_module.MyModule' first_option: 42 second_option: 'hello world' ``` must become now ```python my_module_name: module.Class: 'qudi.hardware.my_module.MyModule' options: first_option: 42 second_option: 'hello world' ``` ### Bugfixes - Qudi logging facility active during startup procedure - Reduced RPyC related errors in qudi IPython kernel ### New Features - Support for `enum.Enum` types in `qudi.util.yaml`, enabling use of enums in qudi config and status variables. - `qudi.util.constraints.ScalarConstraint` data class to easily define bounds for, check and clip scalar values. - Added qudi logger object to qudi IPython kernels to give users the possibility to directly log messages into qudi from e.g. a jupyter notebook. ### Other - Structure and type checking as well as default value handling in the qudi configuration file is now done via JSON Schema (Draft-07). The applied schema is defined in `qudi.core.config.schema`. Every time you load/dump a configuration from/to file or add/remove a module config or set a global config option using `qudi.core.config.Configuration`, the config is validated against this JSON schema.