[Numpy-discussion] proposed changes to array printing in 1.14

Marten van Kerkwijk m.h.vankerkwijk at gmail.com
Thu Jun 29 16:41:55 EDT 2017

To add to Allan's message: point (2), the printing of 0-d arrays, is
the one that is the most important in the sense that it rectifies a
really strange situation, where the printing cannot be logically
controlled by the same mechanism that controls >=1-d arrays (see PR).

While point 3 can also be considered a bug fix, 1 & 4 are at some
level matters of taste; my own reason for supporting their
implementation now is that the 0-d arrays already forces me (or,
specifically, astropy) to rewrite quite a few doctests, and I'd rather
have everything in one go -- in this respect, it is a pity that this
is separate from the earlier change in printing for structured arrays
(which was also much for the better, but broke a lot of doctests).

-- Marten

On Thu, Jun 29, 2017 at 3:38 PM, Allan Haldane <allanhaldane at gmail.com> wrote:
> Hello all,
> There are various updates to array printing in preparation for numpy
> 1.14. See https://github.com/numpy/numpy/pull/9139/
> Some are quite likely to break other projects' doc-tests which expect a
> particular str or repr of arrays, so I'd like to warn the list in case
> anyone has opinions.
> The current proposed changes, from most to least painful by my
> reckoning, are:
> 1.
> For float arrays, an extra space previously used for the sign position
> will now be omitted in many cases. Eg, `repr(arange(4.))` will now
> return 'array([0., 1., 2., 3.])' instead of 'array([ 0.,  1.,  2.,  3.])'.
> 2.
> The printing of 0d arrays is overhauled. This is a bit finicky to
> describe, please see the release note in the PR. As an example of the
> effect of this, the `repr(np.array(0.))` now prints as 'array(0.)`
> instead of 'array(0.0)'. Also the repr of 0d datetime arrays is now like
> "array('2005-04-04', dtype='datetime64[D]')" instead of
> "array(datetime.date(2005, 4, 4), dtype='datetime64[D]')".
> 3.
> User-defined dtypes which did not properly implement their `repr` (and
> `str`) should do so now. Otherwise it now falls back to
> `object.__repr__`, which will return something ugly like
> `<mytype object at 0x7f37f1b4e918>`. (Previously you could depend on
> only implementing the `item` method and the repr of that would be
> printed. But no longer, because this risks infinite recursions.).
> 4.
> Bool arrays of size 1 with a 'True' value will now omit a space, so that
> `repr(array([True]))` is now 'array([True])' instead of
> 'array([ True])'.
> Allan
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion

More information about the NumPy-Discussion mailing list