# NAG Library for Python CHANGELOG

## 1 Changes in version 26.0.0

### 1.1 Enhancements

#### 1.1.1 Example Scripts

Example scripts are now first-class Python modules.

New example scripts e04stce.py and e04svce.py for the IPOPT and Pennon solvers, respectively.

New example script e05usce.py for the multistart global sum of squares optimizer.

#### 1.1.2 Package API

The existing nag4py.util type-checking functions nag_char_type_check_and_cast, nag_double_type_check_and_cast and nag_integer_type_check_and_cast now allow the incoming entity for casting to be None. This enables access to the facility in some parts of the NAG C Library where default behaviour may be requested by passing NULL.

The facility in some parts of the NAG C Library where default callback functions may be requested by passing a null function pointer is now available by passing in None for the respective callback.

New function nag4py.util.nag_opt_handle_object for declaring 'handle' arguments required by some functions in the underlying C Library.

New function nag4py.util.nag_char2array_type_check_and_cast for massaging arrays of strings to the correct ctypes format required by char[][] entities in the underlying C Library.

The dummy monfun for g02efc has been renamed to g02efg from g02efh, as in the underlying NAG C Library.

#### 1.1.3 Package Installation

The package now installs its own copy of the NAG C Library.

The preferred mode of installation is now into a Conda-created virtual environment.

Wheel is now used instead of egg for the package distribution.

Windows Installer (.msi) files are no longer distributed.

#### 1.1.4 Package Metacontents

The numbering scheme used by the package is now extended to three parts, following the established 'semantic versioning' system.

The main package README is now a reStructuredText (.rst) file and has been moved down into the package itself.

setup.py now explicitly lists NumPy as a prerequisite.

#### 1.1.5 Platform Support

The 32-bit Windows NAG C Library (CLW32…) is no longer supported.

Supported Python versions bumped to 2.7.13 and 3.5.2 on all platforms.

Bumped Linux OS support to Fedora 25.

Bumped macOS support to 10.11 (El Capitan).

Bumped Windows OS support to Windows 10.

Now supporting NumPy enabled with MKL 11.3.3.

## 2 Changes in version 25.1 (unreleased)

### 2.1 Enhancements

#### 2.1.1 Example Scripts

New example script e04unce.py for the constrained nonlinear least squares optimizer.

New example script g02mace.py for least angle regression.

New example script h02bbce.py for the branch and bound integer programming solver.

#### 2.1.2 Package API

Enumeration-valued arrays are now type checked and cast in their respective wrappers.

Arrays of strings are now type checked and cast in their respective wrappers. For example, in nag_opt_sparse_nlp_solve (e04vhc), instead of

xnames = np.empty(nxname, dtype=str).ctypes.data_as(c_char_p)

one should now use

xnames = [b""]*nxname


RuntimeError is now raised if the underlying NAG C Library could not be loaded.

New function nag4py.util.nag_char_cast for massaging arrays of strings to the correct ctypes format required by char ** entities in the underlying C Library.

#### 2.1.3 Package Metacontents

CHANGELOG introduced.

Usage note added about the requirement for correctly casting enumerated types.

#### 2.1.4 Platform Support

Bumped Linux support to Fedora 24 with Pythons 2.7.11 and 3.5.1.

### 2.2 Fixes

#### 2.2.1 Package API

Mismatch in the size of some fields of the Nag_H02_Opt structure on 64-bit Windows, which led to incorrect values being received for the crnames field (amongst other undesirable runtime behaviour).

ctypes signature of the MPS reader e04mxc corrected.

Nag_FileID is now defined correctly as Integer.

#### 2.2.2 Package Metacontents

README text for executing pydoc fixed to work better on Windows.

Some doc strings for enum-valued array arguments made more precise.