.. _release_notes:


Release Notes
###############

This page lists the various |popy| releases to date:-


|popy| v1.1.0
================

Release date = 22/09/2021

Improvements
-------------

* Reduced RAM usage when running |popy| in parallel using |mpi|. Previous version shared all subject data on all processors. New parallel code spreads subject data across all processors and avoids unnecessary duplication. Improves performance on large multi-core machines.

* Increased number of parameters that the |nd| fitting method and |bobyqa| optimiser can process, previously restricted to 35, now increased to 200.

* Change the colour of the dosing lines in individual subject plots to yellow (formerly black), this enables more informative graphs for subjects who have a lot of separate doses.

* Improved the speed and accuracy of the |rx| optimisation using more analytic gradient results.

* Added ability to create prediction corrected (pred_corr) and prediction variance corrected (predvar_corr) |vpc| output via the "norm_method" parameter of a |vpc_script|. 

* Added ability to create stratified |vpc| output via the "split_field" parameter of a |vpc_script|. A separate vpc is output for each unique value in a specified |cx| data variable.

* Made the |msim_script| and |vpc_script| code more RAM efficient.

* Made models with a large number of dosing events per subject run more efficiently.

Bug Fixes
----------

* Fixed bug when passing string data into |cython| functions.

|popy| v1.0.5
================

Release date = 13/05/2021

Improvements
-------------

* Added new |nd| fitting method, the latest and most robust |popy| estimation approach.

* Improved fitting and lower |objv| using |nd| method.

* Upgraded base |python| distribution of |popy| from version 3.5 to version 3.8. This allows us access to more up-to-date |python| packages and functionality.

* Improved automatic compartment diagram generation with "in" and "out" nodes.

* Improved automatic checking of input scripts.


Bug Fixes
----------

* Improvements in error catching and reporting when running |popy| in parallel using |mpi|.

* Fixed bug when using backslashes in |derivatives| section.

|popy| v1.0.4
================

Release date = 23/12/2020

Improvements
-------------

* Added |cpplsoda| |cpp| based implementation of |lsoda| |ode_solver|, which runs faster than |scipy_odeint| within |popy| and returns similar results.

* Improved |parallel| performance of |foce| algorithm.

* Improved fitting of |foce| method to achieve lower |objv| in many models.

* Revised documentation.

Bug Fixes
----------

* Bugs in gradient computation due to variable |cx| within individual data fixed.

* Fixed bugs in :ref:`standard error<uncertainty>` computation, now more reliable.


|popy| v1.0.3
================

Release date = 05/09/2020

Improvements
-------------

* Added implementation of an :ref:`fit_methods_foce` to complement the previous :ref:`fit_methods_joe`. Note we now recommend running the |joe| fitter, then the |foce| fitter in serial to get the best parameter fitting results in |popy|.

* New |rectnorm_dist| for fitting to |blq| data, using |joe| or |foce| methods without using the more computationally expensive |laplace| objective value. See :ref:`blq_example`. 

* Also new |blq| related |cennorm_dist| and |truncnorm_dist|.

* New |bin_dist| likelihood.

* Improved the speed and quality of the noise |fx| parameter estimates for |joe| fitting.

* New plots show the final |fx| population fit (same for all individuals, with |rx| zero) and the individual fit (|ie| empirical bayes estimates for |rx| optimised for each individual). Previously we plotted only the initial unoptimised |fx| fit and the final |fx| individual fits.

* The temporary functions generated by |popy| (based on the config file) are now written into a single module on disk. This single module compiles quicker using |cython|, compared to having each temporary function in it's own module.

Format Changes
---------------

* Added |preprocess| section to multiple scripts, for example a :ref:`fit_script`. This allows the user to easily filter and alter the data set, using simple |python| code, before fitting a model, without changing the |data_file| on disk.

* Added |postprocess| section for multiple scripts, for example a :ref:`gen_script`. This allows the user to easily alter or filter a synthetically generated data set, before saving to disk.

Bug Fixes
----------

* Fixed bug in |predictions| section that did not handle multiple observations correctly in some instances, when some rows should be ignored due to |python| 'if' statements.

* Fixed interpretation of '+inf' and '-inf' labels in |effects|.

|popy| v1.0.2
================

Release date = 18/09/2019

Improvements
-------------

* Added ability to process scripts in :ref:`parallel`. This speeds up computation time for models with a large number of individuals and takes advantage of multi-core computers.
* Created :ref:`postprocess` section to allow filtering of data create by a |popy| model. For example with a :ref:`gen_script`
* Added ability to process multiple files in a directory with one command using '*' syntax, see :ref:`popy_run_multi_scripts`, :ref:`popy_check_multi_scripts`, :ref:`popy_format_multi_scripts`, :ref:`popy_edit_multi_scripts`,  :ref:`popy_view_multi_html`
* Speed improvements to core |joe| algorithm, :ref:`standard_errors` computation and plotting using :ref:`grph_script`.
* :ref:`mfit_script` now outputs a summary of the fitting results for all populations to a single .csv file.  
* Displaying the diagonal elements of |fx| variance matrices at each iteration. The off diagonal |fx| elements are only displayed at the end of fitting, due to space considerations.

Format Changes
---------------

* Simplified the structure of old 'LEVEL_PARAMS', replaced with :ref:`effects` which removes the redundant 'split_field' and 'split_dict' attributes.
* Renamed the 'output_mode' values in :ref:`output_scripts`, using shorter names 'gen_script_and_run' -> 'run', 'gen_script_only' -> 'create', 'no_output' -> 'none'.
* Renamed the 'FINITE_DIFF' method in :ref:`covariance` to 'SANDWICH'.

Note scripts in v1.0.1 and v1.0.0 format can be automatically updated to v1.0.2 using the :ref:`popy_format` tool.

Bug Fixes
----------

* Made :ref:`method_options_float_format_spec` change format of all float values in output scripts and summary html outputs. Only applied to subset before.
* Fixed bug in iteration number when displaying |objv| over time :ref:`obj_vs_time_fit_example1`

|popy| v1.0.1
================

Release date = 28/06/2019

This is mainly a bug fix release of |popy| 

Improvements
-------------

* The :ref:`standard_errors` are now output in an easy to read format, instead of the whole hessian matrix.
* Changed the configuration file entry required to compute standard errors see |covariance|.
* Log files apart from the main log file are now stored in a '_log' sub directory. 
* The :ref:`popy_run` tool now asks the user if they want to proceed if the main log file already exist for a given script. Previously only the existence of the output folder was checked. The can still skip this check using the '-o' option.

Bug Fixes
----------

* Licence manager was giving a date error in North American time zones.
* Bug in configuration file parser for |derivatives| section when encountering round brackets (as opposed to expected curly brackets) in :ref:`dosing_functions`. 
* Documentation contents page indexing in PDF was incorrect.


|popy| v1.0.0
===============

Release date = 24/05/2019

This is the first version of |popy|, so there are no bug fixes or new features
only the initial implementation.

Or in other words, all the features and bugs are new!