# 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 `r[X]` 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 `c[X]` 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 C++ 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 `c[X]` within individual data fixed.
- Fixed bugs in standard error computation, now more reliable.

## PoPy v1.0.3

Release date = 05/09/2020

### Improvements

- Added implementation of an FOCE Fitting Method to complement the previous JOE Fitting Method. 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() distribution for fitting to BLQ data, using JOE or FOCE methods without using the more computationally expensive LAPLACE objective value. See Generate BLQ observations and fit different error models.
- Also new BLQ related ~cennorm() distribution and ~truncnorm() distribution.
- New ~binomial() distribution likelihood.
- Improved the speed and quality of the noise `f[X]` parameter estimates for JOE fitting.
- New plots show the final `f[X]` population fit (same for all individuals, with `r[X]` zero) and the individual fit (i.e. empirical bayes estimates for `r[X]` optimised for each individual). Previously we plotted only the initial unoptimised `f[X]` fit and the final `f[X]` 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 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 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 PARALLEL. This speeds up computation time for models with a large number of individuals and takes advantage of multi-core computers.
- Created POSTPROCESS section to allow filtering of data create by a PoPy model. For example with a Gen Script
- Added ability to process multiple files in a directory with one command using ‘*’ syntax, see Running multiple scripts, Checking multiple scripts, Format multiple scripts, Edit multiple scripts, Open multiple html files
- Speed improvements to core JOE algorithm, Standard Errors computation and plotting using Grph Script.
- MFit Script now outputs a summary of the fitting results for all populations to a single .csv file.
- Displaying the diagonal elements of `f[X]` variance matrices at each iteration. The off diagonal `f[X]` elements are only displayed at the end of fitting, due to space considerations.

### Format Changes

- Simplified the structure of old ‘LEVEL_PARAMS’, replaced with EFFECTS which removes the redundant ‘split_field’ and ‘split_dict’ attributes.
- Renamed the ‘output_mode’ values in OUTPUT_SCRIPTS, using shorter names ‘gen_script_and_run’ -> ‘run’, ‘gen_script_only’ -> ‘create’, ‘no_output’ -> ‘none’.
- Renamed the ‘FINITE_DIFF’ method in COVARIANCE to ‘SANDWICH’.

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

### Bug Fixes

- Made float_format 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 Objective function at each iteration for simple PopPK example

## PoPy v1.0.1

Release date = 28/06/2019

This is mainly a bug fix release of PoPy

### Improvements

- The 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 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 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!