# Changelog
All notable changes to the PDFO project will be documented in this file.

## [0.9] - 2020-04-19

Public beta release of PDFO.

## [1.0] - 2020-06-01

### Added
- Add the 'honour_x0' option when the solver is BOBYQA to indicate whether
  the user-provided x0 can be changed.
- Include rosenbrock_example to illustrate the usage.
- Python version: Bounds, LinearConstraint and NonlinearConstraint more
  flexible with None and [].
- Python version: the constr_value output when there are constraints
  other than bounds.
- MATLAB version: add 'uninstall' and 'clean' options to setup.m.

### Changed
- Licence modified from GNU GPLv3+ to GNU LGPLv3+.
- The Fortran source code is refactored to remove the obsolete non-block
  DO loops and comparison operators.
- All constraint violations are computed absolutely (instead of relatively)
- Modify the scaling behavior. Scaling is performed only if all variables
  have both upper and lower bounds. 
- Change the default rhobeg to 0.5 when the problem is scaled. 
- Change the default rhobeg to min(ub-lb)/4 when the solver is BOBYQA.
- Previously, if rhobeg is revised to be different from the default value, 
  then rhoend is set to min(rhobeg*rhoend_default/rhobeg_default, rhoend),
  where rhobeg_default = 1 and rhoend_default = 1e-6; now it is set to
  min(0.1*rhobeg, rhoend).
- Revise x0 or rhobeg for BOBYQA to make sure that the distance between x0
  and inactive bounds is at least rhobeg.
- Python version: make PDFO available on PyPI.
- Python version: test files for PDFO have been added as a subpackage of pdfo.
- MATLAB version: improve the interfaces of prepdfo and postpdfo.

### Removed
- Warning about scaling.
- The fhist output when PDFO receives a feasibility problem.
- Python version: numpy.set_printoptions statement in __init__.py.
- MATLAB version: interactions when modifying the user's startup script.

### Fixed
- In last version, the linear constraints passed to the Fortran backend can
  have zero gradients due to reduction when some variables are fixed by the
  bound constraints. Constraint validation and reduction are merged in order to
  avoid such a situation.
- In last version, the user-specified npt, rhobeg, and rhoend are ignored if
  the solver selection function is invoked. They are taken into account now.
- Python version: previously, the nonlinear constraints defined as a dictionary 
  cannot include NumPy functions of type <ufunc>. It is fixed now.

## [1.1] - 2021-08-13

### Added
- Python version: the linear equality constraints are now eliminated explicitly
  using a QR factorization with column pivoting (or an SVD factorization if
  SciPy is not installed).
- Python version: wheel distributions of the package are now available on PyPI
  to ease the installation. The wheel distributions are generated automatically
  using GitHub Actions.

### Changed
- If rhobeg is not provided but rhoend is available, the default value of rhobeg
  is set to 10 * rhoend. Previously, it was rhoend.
- Python version: undefined constraint bounds for Bounds, LinearConstraint, and
  NonlinearConstraint can now be declared as numpy.inf with an appropriate sign.

### Removed
- Python version: Replaced deprecated numpy.bool calls by numpy.bool_.

### Fixed
- Python version: the call to the objective function during the debugging
  mechanism did not include the extra arguments, which are added now.
