summaryrefslogtreecommitdiff
path: root/numpy/core/arrayprint.py
diff options
context:
space:
mode:
authorcookedm <cookedm@localhost>2006-05-17 08:55:00 +0000
committercookedm <cookedm@localhost>2006-05-17 08:55:00 +0000
commitc3f83e91f1e60e5c01d02bf6d6f2f9e58677f252 (patch)
treec0488baa90ed95cc59aeead13e45890f7cc901d7 /numpy/core/arrayprint.py
parent2733a07a2c0cbe08af8f6e30d75fa032a416bb60 (diff)
downloadnumpy-c3f83e91f1e60e5c01d02bf6d6f2f9e58677f252.tar.gz
Better handling of string representation of longfloat and clongfloat arrays.
Diffstat (limited to 'numpy/core/arrayprint.py')
-rw-r--r--numpy/core/arrayprint.py28
1 files changed, 22 insertions, 6 deletions
diff --git a/numpy/core/arrayprint.py b/numpy/core/arrayprint.py
index 9d06d82ca..613f89ed9 100644
--- a/numpy/core/arrayprint.py
+++ b/numpy/core/arrayprint.py
@@ -16,6 +16,7 @@ import sys
import numeric as _gen
import numerictypes as _nt
import umath as _uf
+from multiarray import format_longfloat
from oldnumeric import ravel
_nc = _gen
@@ -155,19 +156,19 @@ def _array2string(a, max_line_width, precision, suppress_small, separator=' ',
format_function = lambda x: _formatInteger(x, format)
elif issubclass(dtype, _nt.floating):
if issubclass(dtype, _nt.longfloat):
- format_function = str
+ format_function = _longfloatFormatter(precision)
else:
format = _floatFormat(data, precision, suppress_small)
format_function = lambda x: _formatFloat(x, format)
elif issubclass(dtype, _nt.complexfloating):
if issubclass(dtype, _nt.clongfloat):
- real_format = imag_format = '%s'
+ format_function = _clongfloatFormatter(precision)
else:
real_format = _floatFormat(
data.real, precision, suppress_small, sign=0)
imag_format = _floatFormat(
data.imag, precision, suppress_small, sign=1)
- format_function = lambda x: \
+ format_function = lambda x: \
_formatComplex(x, real_format, imag_format)
elif issubclass(dtype, _nt.unicode_):
format = "%s"
@@ -300,9 +301,8 @@ def _floatFormat(data, precision, suppress_small, sign = 0):
if large_exponent: format = format + '3'
else:
format = '%.' + str(precision) + 'f'
- precision = min(precision, max(tuple(map(lambda x, p=precision,
- f=format: _digits(x,p,f),
- data))))
+ precision = min(precision, max([_digits(x, precision, format)
+ for x in data]))
max_str_len = len(str(int(max_val))) + precision + 2
if sign: format = '%#+'
else: format = '%#'
@@ -324,6 +324,11 @@ def _formatInteger(x, format):
else:
return "%s" % x
+def _longfloatFormatter(precision):
+ def formatter(x):
+ return format_longfloat(x, precision)
+ return formatter
+
def _formatFloat(x, format, strip_zeros = 1):
if format[-1] == '3':
# 3-digit exponent
@@ -347,6 +352,17 @@ def _formatFloat(x, format, strip_zeros = 1):
s = format % x
return s
+def _clongfloatFormatter(precision):
+ def formatter(x):
+ r = format_longfloat(x.real, precision)
+ i = format_longfloat(x.imag, precision)
+ if x.imag < 0:
+ i = '-' + i
+ else:
+ i = '+' + i
+ return r + i + 'j'
+ return formatter
+
def _formatComplex(x, real_format, imag_format):
r = _formatFloat(x.real, real_format)
i = _formatFloat(x.imag, imag_format, 0)