# Release Notes

This page lists the various PoPy releases to date:-

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