NumPy 1.16.4 Release Notes

The NumPy 1.16.4 release fixes bugs reported against the 1.16.3 release, and also backports several enhancements from master that seem appropriate for a release series that is the last to support Python 2.7. The wheels on PyPI are linked with OpenBLAS v0.3.7-dev, which should fix issues on Skylake series cpus.

Downstream developers building this release should use Cython >= 0.29.2 and, if using OpenBLAS, OpenBLAS > v0.3.7. The supported Python versions are 2.7 and 3.5-3.7.

New deprecations

Writeable flag of C-API wrapped arrays

When an array is created from the C-API to wrap a pointer to data, the only indication we have of the read-write nature of the data is the writeable flag set during creation. It is dangerous to force the flag to writeable. In the future it will not be possible to switch the writeable flag to True from python. This deprecation should not affect many users since arrays created in such a manner are very rare in practice and only available through the NumPy C-API.

Compatibility notes

Potential changes to the random stream

Due to bugs in the application of log to random floating point numbers, the stream may change when sampling from np.random.beta, np.random.binomial, np.random.laplace, np.random.logistic, np.random.logseries or np.random.multinomial if a 0 is generated in the underlying MT19937 random stream. There is a 1 in 10^{53} chance of this occurring, and so the probability that the stream changes for any given seed is extremely small. If a 0 is encountered in the underlying generator, then the incorrect value produced (either np.inf or np.nan) is now dropped.


numpy.lib.recfunctions.structured_to_unstructured does not squeeze single-field views

Previously structured_to_unstructured(arr[['a']]) would produce a squeezed result inconsistent with structured_to_unstructured(arr[['a', b']]). This was accidental. The old behavior can be retained with structured_to_unstructured(arr[['a']]).squeeze(axis=-1) or far more simply, arr['a'].


A total of 10 people contributed to this release. People with a “+” by their names contributed a patch for the first time.

  • Charles Harris

  • Eric Wieser

  • Dennis Zollo +

  • Hunter Damron +

  • Jingbei Li +

  • Kevin Sheppard

  • Matti Picus

  • Nicola Soranzo +

  • Sebastian Berg

  • Tyler Reddy

Pull requests merged

A total of 16 pull requests were merged for this release.

  • #13392: BUG: Some PyPy versions lack PyStructSequence_InitType2.

  • #13394: MAINT, DEP: Fix deprecated assertEquals()

  • #13396: BUG: Fix structured_to_unstructured on single-field types (backport)

  • #13549: BLD: Make CI pass again with pytest 4.5

  • #13552: TST: Register markers in

  • #13559: BUG: Removes ValueError for empty kwargs in arraymultiter_new

  • #13560: BUG: Add TypeError to accepted exceptions in crackfortran.

  • #13561: BUG: Handle subarrays in descr_to_dtype

  • #13562: BUG: Protect generators from log(0.0)

  • #13563: BUG: Always return views from structured_to_unstructured when…

  • #13564: BUG: Catch stderr when checking compiler version

  • #13565: BUG: longdouble(int) does not work

  • #13587: BUG: distutils/ fix missing subprocess import (#13523)

  • #13620: BUG,DEP: Fix writeable flag setting for arrays without base

  • #13641: MAINT: Prepare for the 1.16.4 release.

  • #13644: BUG: special case object arrays when printing rel-, abs-error