summaryrefslogtreecommitdiff
path: root/numpy/core/arrayprint.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/core/arrayprint.py')
-rw-r--r--numpy/core/arrayprint.py73
1 files changed, 48 insertions, 25 deletions
diff --git a/numpy/core/arrayprint.py b/numpy/core/arrayprint.py
index f996aa394..e8cea05f7 100644
--- a/numpy/core/arrayprint.py
+++ b/numpy/core/arrayprint.py
@@ -66,11 +66,12 @@ _format_options = {
'nanstr': 'nan',
'infstr': 'inf',
'sign': '-',
- 'formatter': None }
+ 'formatter': None,
+ 'legacy': False}
def _make_options_dict(precision=None, threshold=None, edgeitems=None,
linewidth=None, suppress=None, nanstr=None, infstr=None,
- sign=None, formatter=None, floatmode=None):
+ sign=None, formatter=None, floatmode=None, legacy=None):
""" make a dictionary out of the non-None arguments, plus sanity checks """
options = {k: v for k, v in locals().items() if v is not None}
@@ -78,20 +79,19 @@ def _make_options_dict(precision=None, threshold=None, edgeitems=None,
if suppress is not None:
options['suppress'] = bool(suppress)
- if sign not in [None, '-', '+', ' ', 'legacy']:
- raise ValueError("sign option must be one of "
- "' ', '+', '-', or 'legacy'")
-
modes = ['fixed', 'unique', 'maxprec', 'maxprec_equal']
if floatmode not in modes + [None]:
raise ValueError("floatmode option must be one of " +
", ".join('"{}"'.format(m) for m in modes))
+ if sign not in [None, '-', '+', ' ']:
+ raise ValueError("sign option must be one of ' ', '+', or '-'")
+
return options
def set_printoptions(precision=None, threshold=None, edgeitems=None,
linewidth=None, suppress=None, nanstr=None, infstr=None,
- formatter=None, sign=None, floatmode=None):
+ formatter=None, sign=None, floatmode=None, **kwarg):
"""
Set printing options.
@@ -121,12 +121,11 @@ def set_printoptions(precision=None, threshold=None, edgeitems=None,
String representation of floating point not-a-number (default nan).
infstr : str, optional
String representation of floating point infinity (default inf).
- sign : string, either '-', '+', ' ' or 'legacy', optional
+ sign : string, either '-', '+', or ' ', optional
Controls printing of the sign of floating-point types. If '+', always
print the sign of positive values. If ' ', always prints a space
(whitespace character) in the sign position of positive values. If
- '-', omit the sign character of positive values. If 'legacy', print a
- space for positive values except in 0d arrays. (default '-')
+ '-', omit the sign character of positive values. (default '-')
formatter : dict of callables, optional
If not None, the keys should indicate the type(s) that the respective
formatting function applies to. Callables should return a string.
@@ -170,6 +169,11 @@ def set_printoptions(precision=None, threshold=None, edgeitems=None,
but if every element in the array can be uniquely
represented with an equal number of fewer digits, use that
many digits for all elements.
+ legacy : boolean, optional
+ If True, enables legacy printing mode, which overrides the `sign`
+ option. Legacy printing mode approximates numpy 1.13 print output,
+ which includes a space in the sign position of floats and different
+ behavior for 0d arrays.
See Also
--------
@@ -219,9 +223,14 @@ def set_printoptions(precision=None, threshold=None, edgeitems=None,
... linewidth=75, nanstr='nan', precision=8,
... suppress=False, threshold=1000, formatter=None)
"""
+ legacy = kwarg.pop('legacy', None)
+ if kwarg:
+ msg = "set_printoptions() got unexpected keyword argument '{}'"
+ raise TypeError(msg.format(kwarg.popitem()[0]))
+
opt = _make_options_dict(precision, threshold, edgeitems, linewidth,
suppress, nanstr, infstr, sign, formatter,
- floatmode)
+ floatmode, legacy)
# formatter is always reset
opt['formatter'] = formatter
_format_options.update(opt)
@@ -286,15 +295,16 @@ def repr_format(x):
def _get_formatdict(data, **opt):
prec, fmode = opt['precision'], opt['floatmode']
supp, sign = opt['suppress'], opt['sign']
+ legacy = opt['legacy']
# wrapped in lambdas to avoid taking a code path with the wrong type of data
formatdict = {
'bool': lambda: BoolFormat(data),
'int': lambda: IntegerFormat(data),
'float': lambda:
- FloatingFormat(data, prec, fmode, supp, sign),
+ FloatingFormat(data, prec, fmode, supp, sign, legacy=legacy),
'complexfloat': lambda:
- ComplexFloatingFormat(data, prec, fmode, supp, sign),
+ ComplexFloatingFormat(data, prec, fmode, supp, sign, legacy=legacy),
'datetime': lambda: DatetimeFormat(data),
'timedelta': lambda: TimedeltaFormat(data),
'object': lambda: _object_format,
@@ -417,7 +427,7 @@ def _array2string(a, options, separator=' ', prefix=""):
def array2string(a, max_line_width=None, precision=None,
suppress_small=None, separator=' ', prefix="",
style=None, formatter=None, threshold=None,
- edgeitems=None, sign=None):
+ edgeitems=None, sign=None, **kwarg):
"""
Return a string representation of an array.
@@ -477,12 +487,11 @@ def array2string(a, max_line_width=None, precision=None,
edgeitems : int, optional
Number of array items in summary at beginning and end of
each dimension.
- sign : string, either '-', '+', ' ' or 'legacy', optional
+ sign : string, either '-', '+', or ' ', optional
Controls printing of the sign of floating-point types. If '+', always
print the sign of positive values. If ' ', always prints a space
(whitespace character) in the sign position of positive values. If
- '-', omit the sign character of positive values. If 'legacy', print a
- space for positive values except in 0d arrays.
+ '-', omit the sign character of positive values.
floatmode : str, optional
Controls the interpretation of the `precision` option for
floating-point types. Can take the following values:
@@ -500,6 +509,11 @@ def array2string(a, max_line_width=None, precision=None,
but if every element in the array can be uniquely
represented with an equal number of fewer digits, use that
many digits for all elements.
+ legacy : boolean, optional
+ If True, enables legacy printing mode, which overrides the `sign`
+ option. Legacy printing mode approximates numpy 1.13 print output,
+ which includes a space in the sign position of floats and different
+ behavior for 0d arrays.
Returns
-------
@@ -540,12 +554,22 @@ def array2string(a, max_line_width=None, precision=None,
'[0x0L 0x1L 0x2L]'
"""
+ legacy = kwarg.pop('legacy', None)
+ if kwarg:
+ msg = "array2string() got unexpected keyword argument '{}'"
+ raise TypeError(msg.format(kwarg.popitem()[0]))
+
overrides = _make_options_dict(precision, threshold, edgeitems,
max_line_width, suppress_small, None, None,
- sign, formatter, floatmode)
+ sign, formatter, floatmode, legacy)
options = _format_options.copy()
options.update(overrides)
+ if options['legacy'] and a.shape == () and not a.dtype.names:
+ if style is None:
+ style = repr
+ return style(a.item())
+
if style is not None and a.shape == ():
return style(a[()])
elif a.size == 0:
@@ -634,14 +658,13 @@ def _formatArray(a, format_function, rank, max_line_len,
class FloatingFormat(object):
""" Formatter for subtypes of np.floating """
-
- def __init__(self, data, precision, floatmode, suppress_small, sign=False):
+ def __init__(self, data, precision, floatmode, suppress_small, sign=False, **kwarg):
# for backcompatibility, accept bools
if isinstance(sign, bool):
sign = '+' if sign else '-'
self._legacy = False
- if sign == 'legacy':
+ if kwarg.get('legacy', False):
self._legacy = True
sign = '-' if data.shape == () else ' '
@@ -939,16 +962,16 @@ class BoolFormat(object):
class ComplexFloatingFormat(object):
""" Formatter for subtypes of np.complexfloating """
-
- def __init__(self, x, precision, floatmode, suppress_small, sign=False):
+ def __init__(self, x, precision, floatmode, suppress_small,
+ sign=False, **kwarg):
# for backcompatibility, accept bools
if isinstance(sign, bool):
sign = '+' if sign else '-'
self.real_format = FloatingFormat(x.real, precision, floatmode,
- suppress_small, sign=sign)
+ suppress_small, sign=sign, **kwarg)
self.imag_format = FloatingFormat(x.imag, precision, floatmode,
- suppress_small, sign='+')
+ suppress_small, sign='+', **kwarg)
def __call__(self, x):
r = self.real_format(x.real)