diff options
Diffstat (limited to 'numpy/polynomial/polyutils.py')
-rw-r--r-- | numpy/polynomial/polyutils.py | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/numpy/polynomial/polyutils.py b/numpy/polynomial/polyutils.py index a2bc75a4d..482913892 100644 --- a/numpy/polynomial/polyutils.py +++ b/numpy/polynomial/polyutils.py @@ -32,9 +32,13 @@ import warnings import numpy as np +from numpy.core.multiarray import dragon4_positional, dragon4_scientific +from numpy.core.umath import absolute + __all__ = [ 'RankWarning', 'as_series', 'trimseq', - 'trimcoef', 'getdomain', 'mapdomain', 'mapparms'] + 'trimcoef', 'getdomain', 'mapdomain', 'mapparms', + 'format_float'] # # Warnings and Exceptions @@ -748,3 +752,38 @@ def _deprecate_as_int(x, desc): return ix raise TypeError(f"{desc} must be an integer") from e + + +def format_float(x, parens=False): + if not np.issubdtype(type(x), np.floating): + return str(x) + + opts = np.get_printoptions() + + if np.isnan(x): + return opts['nanstr'] + elif np.isinf(x): + return opts['infstr'] + + exp_format = False + if x != 0: + a = absolute(x) + if a >= 1.e8 or a < 10**min(0, -(opts['precision']-1)//2): + exp_format = True + + trim, unique = '0', True + if opts['floatmode'] == 'fixed': + trim, unique = 'k', False + + if exp_format: + s = dragon4_scientific(x, precision=opts['precision'], + unique=unique, trim=trim, + sign=opts['sign'] == '+') + if parens: + s = '(' + s + ')' + else: + s = dragon4_positional(x, precision=opts['precision'], + fractional=True, + unique=unique, trim=trim, + sign=opts['sign'] == '+') + return s |