Drop sign from nstr(mpf('inf')) output

Closes #827
This commit is contained in:
Sergey B Kirpichev
2024-08-01 12:20:16 +03:00
parent bf27e80ae2
commit 5a155f8e09
8 changed files with 79 additions and 79 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ The ``mpf`` type is analogous to Python's built-in ``float``. It holds a real nu
>>> mpf(mpf(2))
mpf('2.0')
>>> mpf("inf")
mpf('+inf')
mpf('inf')
The ``mpc`` type represents a complex number in rectangular form as a pair of ``mpf`` instances. It can be constructed from a Python ``complex``, a real number, or a pair of real numbers:
+3 -3
View File
@@ -193,12 +193,12 @@ Some transcendental functions are supported::
>>> iv.exp(0)
[1.0, 1.0]
>>> iv.exp(['-inf','inf'])
[0.0, +inf]
[0.0, inf]
>>>
>>> iv.exp(['-inf',0])
[0.0, 1.0]
>>> iv.exp([0,'inf'])
[1.0, +inf]
[1.0, inf]
>>> iv.exp([0,1])
[1.0, 2.7182818284590455349]
>>>
@@ -207,7 +207,7 @@ Some transcendental functions are supported::
>>> iv.log([0,1])
[-inf, 0.0]
>>> iv.log([0,'inf'])
[-inf, +inf]
[-inf, inf]
>>> iv.log(2)
[0.69314718055994528623, 0.69314718055994539725]
>>>
+1 -1
View File
@@ -1095,7 +1095,7 @@ class PythonMPContext:
>>> mag(0.01), int(ceil(log(0.01,2)))
(-6, -6)
>>> mag(0), mag(inf), mag(-inf), mag(nan)
(-inf, +inf, +inf, nan)
(-inf, inf, inf, nan)
"""
if hasattr(x, "_mpf_"):
+52 -52
View File
@@ -420,7 +420,7 @@ Basic examples and limits::
>>> sqrt(1+1j)
(1.09868411346781 + 0.455089860562227j)
>>> sqrt(inf)
+inf
inf
Square root evaluation is fast at huge precision::
@@ -489,7 +489,7 @@ Some values of the exponential function::
>>> exp(-1)
0.3678794411714423215955238
>>> exp(inf)
+inf
inf
>>> exp(-inf)
0.0
@@ -565,7 +565,7 @@ Computes the hyperbolic cosine of `x`,
>>> cosh(1)
1.543080634815243778477906
>>> cosh(-inf), cosh(+inf)
(+inf, +inf)
(inf, inf)
The hyperbolic cosine is an even, convex function with
a global minimum at `x = 0`, having a Maclaurin series
@@ -595,7 +595,7 @@ Computes the hyperbolic sine of `x`,
>>> sinh(1)
1.175201193643801456882382
>>> sinh(-inf), sinh(+inf)
(-inf, +inf)
(-inf, inf)
The hyperbolic sine is an odd function, with a Maclaurin
series that starts::
@@ -718,7 +718,7 @@ Intervals are supported via ``mpmath.iv.tan()``::
>>> iv.tan([0,1])
[0.0, 1.55740772465490223050697482944]
>>> iv.tan([0,2]) # Interval includes a singularity
[-inf, +inf]
[-inf, inf]
"""
sec = r"""
@@ -746,7 +746,7 @@ Intervals are supported via ``mpmath.iv.sec()``::
>>> iv.sec([0,1])
[1.0, 1.85081571768092561791175326276]
>>> iv.sec([0,2]) # Interval includes a singularity
[-inf, +inf]
[-inf, inf]
"""
csc = r"""
@@ -771,9 +771,9 @@ Intervals are supported via ``mpmath.iv.csc()``::
>>> iv.dps = 25; iv.pretty = True
>>> iv.csc([0,1]) # Interval includes a singularity
[1.18839510577812121626159943988, +inf]
[1.18839510577812121626159943988, inf]
>>> iv.csc([0,2])
[1.0, +inf]
[1.0, inf]
"""
cot = r"""
@@ -799,9 +799,9 @@ Intervals are supported via ``mpmath.iv.cot()``::
>>> iv.dps = 25; iv.pretty = True
>>> iv.cot([0,1]) # Interval includes a singularity
[0.642092615934330703006419974862, +inf]
[0.642092615934330703006419974862, inf]
>>> iv.cot([1,2])
[-inf, +inf]
[-inf, inf]
"""
acos = r"""
@@ -1627,7 +1627,7 @@ Some basic values and limits::
>>> log(0)
-inf
>>> log(inf)
+inf
inf
The natural logarithm is the antiderivative of `1/x`::
@@ -1957,7 +1957,7 @@ Basic values and limits::
4 24.0
5 120.0
>>> fac(inf)
+inf
inf
>>> fac(0.5), sqrt(pi)/2
(0.886226925452758, 0.886226925452758)
@@ -2013,7 +2013,7 @@ Basic values and limits::
4 6.0
5 24.0
>>> gamma(inf)
+inf
inf
>>> gamma(0)
Traceback (most recent call last):
...
@@ -2100,7 +2100,7 @@ The digamma function diverges logarithmically as `z \to \infty`,
while higher orders tend to zero::
>>> psi(0,inf), psi(1,inf), psi(2,inf)
(+inf, 0.0, 0.0)
(inf, 0.0, 0.0)
Evaluation for a complex argument::
@@ -2181,7 +2181,7 @@ The first few harmonic numbers are::
The infinite harmonic series `1 + 1/2 + 1/3 + \ldots` diverges::
>>> harmonic(inf)
+inf
inf
:func:`~mpmath.harmonic` is evaluated using the digamma function rather
than by summing the harmonic series term by term. It can therefore
@@ -2462,7 +2462,7 @@ of the beta function is taken to result in ``+inf``::
>>> beta(-3, 3)
-0.333333333333333
>>> beta(-2, 3)
+inf
inf
>>> beta(inf, 1)
0.0
>>> beta(inf, 0)
@@ -2868,7 +2868,7 @@ but functions of higher degree are also supported via :func:`~mpmath.hyper`::
>>> hyper([1,2,3,4], [5,6,7], 1) # 4F3 at finite-valued branch point
1.141783505526870731311423
>>> hyper([4,5,6,7], [1,2,3], 1) # 4F3 at pole
+inf
inf
>>> hyper([1,2,3,4,5], [6,7,8,9], 10) # 5F4
(1.543998916527972259717257 - 0.5876309929580408028816365j)
>>> hyper([1,2,3,4,5,6], [7,8,9,10,11], 1j) # 6F5
@@ -2879,7 +2879,7 @@ Near `z = 1` with noninteger parameters::
>>> hyper(['1/3',1,'3/2',2], ['1/5','11/6','41/8'], 1)
2.219433352235586121250027
>>> hyper(['1/3',1,'3/2',2], ['1/5','11/6','5/4'], 1)
+inf
inf
>>> eps1 = extradps(6)(lambda: 1 - mpf('1e-6'))()
>>> hyper(['1/3',1,'3/2',2], ['1/5','11/6','5/4'], eps1)
2923978034.412973409330956
@@ -3268,7 +3268,7 @@ Evaluation with `z = 1`::
>>> hyp2f1(-2.5, 3, 4, 1)
0.06926406926406926406926407
>>> hyp2f1(2, 3, 4, 1)
+inf
inf
Evaluation for huge arguments::
@@ -3395,7 +3395,7 @@ Evaluation for arbitrary complex arguments::
The `U` function may be singular at `z = 0`::
>>> hyperu(1.5, 2, 0)
+inf
inf
>>> hyperu(1.5, -2, 0)
0.1719434921288400112603671
@@ -3588,7 +3588,7 @@ Evaluation at integers and poles::
>>> gammainc(-3, -4, -5)
(-0.2214577048967798566234192 + 0.0j)
>>> lower_gamma(-3, 5)
+inf
inf
If `z` is an integer, the recurrence reduces the incomplete gamma
function to `P(a) \exp(-a) + Q(b) \exp(-b)` where `P` and
@@ -3768,7 +3768,7 @@ Basic values and limits::
>>> erfi(-1)
-1.65042575879754
>>> erfi(inf)
+inf
inf
>>> erfi(-inf)
-inf
@@ -3820,7 +3820,7 @@ Special values include::
>>> erfinv(0)
0.0
>>> erfinv(1)
+inf
inf
>>> erfinv(-1)
-inf
@@ -4023,7 +4023,7 @@ Some basic values and limits are::
>>> ei(1)
1.89511781635594
>>> ei(inf)
+inf
inf
>>> ei(-inf)
0.0
@@ -4130,7 +4130,7 @@ Some basic values and limits::
>>> findroot(li, 2)
1.45136923488338105028396848589
>>> li(inf)
+inf
inf
>>> li(2, offset=True)
0.0
>>> li(1, offset=True)
@@ -4335,7 +4335,7 @@ Some values and limits::
>>> chi(1)
0.8378669409802082408946786
>>> chi(inf)
+inf
inf
>>> findroot(chi, 0.5)
0.5238225713898644064509583
>>> chi(2+3j)
@@ -4367,7 +4367,7 @@ Some values and limits::
>>> shi(-1)
-1.057250875375728514571842
>>> shi(inf)
+inf
inf
>>> shi(2+3j)
(-0.1931890762719198291678095 + 2.645432555362369624818525j)
@@ -4650,11 +4650,11 @@ Integrals of the Ai-function can be evaluated at limit points::
0.3333333332991690159427932
0.3333333333333333333333333
>>> airyai(+inf,-2); airyai(+inf,-3)
+inf
+inf
inf
inf
>>> airyai(-1000000,-2); airyai(-inf,-2)
666666.4078472650651209742
+inf
inf
>>> airyai(-1000000,-3); airyai(-inf,-3)
-333333074513.7520264995733
-inf
@@ -4714,7 +4714,7 @@ Limits and values include::
>>> airybi(-1)
0.10399738949694461188869
>>> airybi(inf); airybi(-inf)
+inf
inf
0.0
Evaluation is supported for large magnitudes of the argument::
@@ -4832,10 +4832,10 @@ Integrals of the Bi-function can be evaluated at limit points::
0.0
>>> airybi(10,-1); airybi(+inf,-1)
147809803.1074067161675853
+inf
inf
>>> airybi(+inf,-2); airybi(+inf,-3)
+inf
+inf
inf
inf
>>> airybi(-1000000,-2); airybi(-inf,-2)
0.4482883750599908479851085
0.4482883573538263579148237
@@ -4846,7 +4846,7 @@ Integrals of the Bi-function can be evaluated at limit points::
-inf
>>> airybi(-100000,-4); airybi(-inf,-4)
2241411040.437759489540248
+inf
inf
"""
@@ -5013,7 +5013,7 @@ Values and limits include::
>>> ellipk(-inf)
0.0
>>> ellipk(1)
+inf
inf
>>> ellipk(-1)
1.31102877714605990523242
>>> ellipk(2)
@@ -6158,9 +6158,9 @@ Arguments may be large::
The point `x = 0` is a singularity (logarithmic if `n = 0`)::
>>> besselk(0,0)
+inf
inf
>>> besselk(1,0)
+inf
inf
>>> for n in range(-4, 5):
... print(besselk(n, '1e-1000'))
...
@@ -6326,17 +6326,17 @@ Some special values and limits are::
>>> lambertw(e)
1.0
>>> lambertw(inf)
+inf
inf
>>> lambertw(0, k=-1)
-inf
>>> lambertw(0, k=3)
-inf
>>> lambertw(inf, k=2)
(+inf + 12.56637061435917295385057j)
(inf + 12.56637061435917295385057j)
>>> lambertw(inf, k=3)
(+inf + 18.84955592153875943077586j)
(inf + 18.84955592153875943077586j)
>>> lambertw(-inf, k=3)
(+inf + 21.9911485751285526692385j)
(inf + 21.9911485751285526692385j)
The `k = 0` and `k = -1` branches join at `z = -1/e` where
`W(z) = -1` for both branches. Since `-1/e` can only be represented
@@ -6401,7 +6401,7 @@ Some elementary values and limits of the Barnes G-function::
>>> barnesg(8)
24883200.0
>>> barnesg(inf)
+inf
inf
>>> barnesg(0), barnesg(-1), barnesg(-2)
(0.0, 0.0, 0.0)
@@ -6730,7 +6730,7 @@ Some special values::
1.200973602347074224816022
1.200973602347074224816022
>>> loggamma(inf)
+inf
inf
Huge arguments are permitted::
@@ -6802,7 +6802,7 @@ complex arguments::
>>> siegeltheta(0)
0.0
>>> siegeltheta(inf)
+inf
inf
>>> siegeltheta(-inf)
-inf
>>> siegeltheta(1)
@@ -7174,7 +7174,7 @@ with residue equal to the difference of the Mertens and
Euler constants::
>>> primezeta(1)
+inf
inf
>>> extradps(25)(lambda x: primezeta(1+x)+log(x))(+eps)
-0.31571845205389007685
>>> mertens-euler
@@ -8104,7 +8104,7 @@ Evaluation for arbitrary real and complex arguments is supported::
Evaluation at zero::
>>> whitm(1,-1,0); whitm(1,-0.5,0); whitm(1,0,0)
+inf
inf
nan
0.0
@@ -8158,11 +8158,11 @@ Evaluation at zero::
>>> for m in [-1, -0.5, 0, 0.5, 1]:
... whitw(1, m, 0)
...
+inf
inf
nan
0.0
nan
+inf
inf
We can verify that :func:`~mpmath.whitw` numerically satisfies the
differential equation for arbitrarily chosen values::
@@ -9154,7 +9154,7 @@ The ordinary Riemann zeta function::
1.202056903159594285399738
1.202056903159594285399738
>>> dirichlet(1, [1])
+inf
inf
The alternating zeta function::
@@ -9753,7 +9753,7 @@ Evaluation for arbitrary `z`::
>>> eulerpoly(5, -inf)
-inf
>>> eulerpoly(6, -inf)
+inf
inf
Computing Euler numbers::
@@ -9997,7 +9997,7 @@ Some values and limits::
0.2988589049025509052765491
0.2988589049025509052765491
>>> scorerhi(+inf); scorerhi(-inf)
+inf
inf
0.0
>>> scorerhi(1)
0.9722051551424333218376886
+19 -19
View File
@@ -241,7 +241,7 @@ def kfrom(ctx, q=None, m=None, k=None, tau=None, qbar=None):
>>> kfrom(q=1)
1
>>> kfrom(q=-1)
(0.0 + +infj)
(0.0 + infj)
"""
if k is not None:
return ctx.convert(k)
@@ -662,10 +662,10 @@ def elliprf(ctx, x, y, z):
>>> elliprf(2,2,2)**2
0.5
>>> elliprf(1,0,0); elliprf(0,0,1); elliprf(0,1,0); elliprf(0,0,0)
+inf
+inf
+inf
+inf
inf
inf
inf
inf
Representing complete elliptic integrals in terms of `R_F`::
@@ -783,7 +783,7 @@ def elliprc(ctx, x, y, pv=True):
3.141592653589793238462643
3.141592653589793238462643
>>> elliprc(1,0)
+inf
inf
>>> elliprc(5,5)**2
0.2
>>> elliprc(1,inf); elliprc(inf,1); elliprc(inf,inf)
@@ -856,9 +856,9 @@ def elliprj(ctx, x, y, z, p, integration=1):
1.380226776765915172432054
1.380226776765915172432054
>>> elliprj(1,3,2,0); elliprj(0,1,1,0); elliprj(0,0,0,0)
+inf
+inf
+inf
inf
inf
inf
>>> elliprj(1,inf,1,0); elliprj(1,1,1,inf)
0.0
0.0
@@ -1050,8 +1050,8 @@ def ellipf(ctx, phi, m):
1.415737208425956198892166
1.415737208425956198892166
>>> ellipf(pi/2+eps, 1); ellipf(-pi/2-eps, 1)
+inf
+inf
inf
inf
>>> ellipf(1.5, 1)
3.340677542798311003320813
@@ -1166,9 +1166,9 @@ def ellipe(ctx, *args):
>>> ellipe(2)
(0.5990701173677961037199612 + 0.5990701173677961037199612j)
>>> ellipe(inf)
(0.0 + +infj)
(0.0 + infj)
>>> ellipe(-inf)
+inf
inf
Verifying the defining integral and hypergeometric
representation::
@@ -1325,9 +1325,9 @@ def ellippi(ctx, *args):
>>> ellippi(2,inf)
0.0
>>> abs(ellippi(1,5))
+inf
inf
>>> abs(ellippi(0.25,1))
+inf
inf
Evaluation in terms of simpler functions::
@@ -1373,13 +1373,13 @@ def ellippi(ctx, *args):
Some degenerate cases::
>>> ellippi(1,1)
+inf
inf
>>> ellippi(1,0)
+inf
inf
>>> ellippi(1,2,0)
+inf
inf
>>> ellippi(1,2,1)
+inf
inf
>>> ellippi(1,0,1)
0.0
+1 -1
View File
@@ -953,7 +953,7 @@ def secondzeta(ctx, s, a = 0.015, **kwargs):
>>> secondzeta(-8)
-0.67236328125
>>> secondzeta(-7)
+inf
inf
**Implementation notes**
+1 -1
View File
@@ -1195,7 +1195,7 @@ def to_str(s, dps, strip_zeros=True, min_fixed=None, max_fixed=None,
if show_zero_exponent:
t += sep + '+0'
return prefix + t
if s == finf: return '+inf'
if s == finf: return 'inf'
if s == fninf: return '-inf'
if s == fnan: return 'nan'
raise ValueError
+1 -1
View File
@@ -41,7 +41,7 @@ def test_basic_string():
assert str(mpf("-2163048125l")) == '-2163048125.0'
assert str(mpf("-2163048125L/1088391168")) == '-1.98738118113799'
assert str(mpf("2163048125/1088391168l")) == '1.98738118113799'
assert str(mpf('inf')) == '+inf'
assert str(mpf('inf')) == 'inf'
# issue 613
assert str(mpf('2_5_0_0.0')) == '2500.0'