.. _changes: # Changelog This document lists changes to ``ionics_fits``. Changes are divided into four categories: * Bugfixes * API changes - changes to the user-facing API. These will often be **breaking** (not backwards-compatible), requiring changes to code using ``ionics_fits``. * Other - small changes, such as tweaks to internals, which most users will not need to be aware of * New models ## 1.3.0.11 ### Bug fixes * Fix ``Lorentzian`` model. ## 1.3.0.9 ### Bug fixes * Fix calling ``func`` on ``RabiFlop`` ## 1.3.0.8 Fitting to datasets with an arbitrary number x-axis dimensions is now supported! ### API changes * **New feature**: Fitters now support datasets with multiple x-axis dimensions * **Breaking change**: scale function definitions have been moved from ``fits.common`` to ``fits.utils`` * **Breaking change**: "y channels" have been renamed to "y axes" * **Breaking change**: models must now provide a ``get_num_x_axes`` method * **Breaking change**: we now use lists of x and y axis scale factors for the various dimensions instead of a single boolean to cover all dimensions in each axis * **Breaking change**: "containers" have been renamed "transformations" * **Breaking change**: we no longer export classes inside ``_init__.py`` files ## 1.3.0.5 ### API changes * **New feature**: Added ``ReparametrizedModel`` container * **New feature**: Added ``SineMinMax`` model * **New feature**: Added ``Sine2`` model * **Breaking change**: ``rescale_model_x`` has been replaced with `ScaledModel`` to make this feature consistent with the rest of the toolkit. ### API changes * **New feature**: Added a sigmoid model ## 1.3.00 This release includes some invasive refactoring of ``ionics_fits`` internals to simplify dataflow. This requires small changes to how models are defined (see breaking changes) but will otherwise be transparent to users. A major feature addition in this release is ``ionics_fits`` first foray into the world of multi-dimensional fitting. ### Bugfixes * Incorrect calculation of pi times in the Rabi model ### API changes * **Breaking**: ``estimate_parameters`` no longer takes a dictionary of model parameters as an input. Instead, it acts directly on the model's parameter dictionary. * **Breaking**: all model parameters must now specify a scale function. This changes the previous behaviour where parameters with no scale function specified were treated as invariant. * **Breaking**: scale functions are no longer passed the model as an input argument * **New feature**: helper functions were introduced to ``ionics_fits.common`` to make specifying scale functions easier and more readable. * **Breaking**: whether or not a model can be rescaled is now determined by the model's ``can_rescale`` method. All models must provide this method. Scale functions must now always return a float value. This replaces the previous behaviour where scale functions returning ``None`` was used to indicate a model that cannot be rescaled. * **New feature**: enabling rescaling can now be set independently for the x and y axes * **Breaking**: ``Model``'s ``get_initial_values`` method has been removed * **New feature**: ``ModelParameter`` s now raise exceptions if any fixed parameters have user estimates. This behaviour was previously allowed but was generally indicative of a bug * **Breaking**: heuristics have now been moved into ``ionics_fits.models.heuristics``. This includes functions, such as ``param_min_srs``, which were previously methods of ``Model`` * **Breaking**: removed a sampling heuristic which wasn't particularly useful * **New feature**: solver arguments are now exposed via fitters * **Breaking**: ``AggregateModel`` now takes a dictionary of models rather than a list of tuples. * **Breaking**: ``AggregateModel`` now names parameters ``{param_name}_{model_name}`` instead of ``{model_name}_{param_name}`` ### New models * ``ConeSegment`` model has been added ### Other changes * Added a change log! * Models now have ``internal_parameters`` as well as ``parameters``. Internal parameters represent parameters which are not exposed directly to the user, but which still need to be stored and rescaled. They are used, for example, in the container models. * Improved documentation * The way rescaling is handled has been overhauled to improve dataflow. The ``get_scaled_model`` mechanism has been removed in favour of using ``internal_parameters``. ``ModelParameter``s and ``Model``s now provide ``rescale`` and ``unscale`` methods to control rescaling. When a ``ModelParameter`` is rescaled, querying its attributes returns scaled values. * ``qt`` is now a development dependency * replaced ``np.power`` with the more pythonic (and faster) ``**`` operator where suitable * ownership / copying has been tidied up and documented better * ``LaserRabi``: improved heuristic for estimating ``eta`` when ``omega`` is known * Improved parameter estimator for ``RepeatedModel`` * `RepeatedModel` now has the ability to aggregate derived parameter values, reporting only the values that are the same for all repetitions. ## Previous versions Changes were not tracked prior to ``v1.3``.