Package: python3-sympy
Version: 1.12-6
Severity: normal
Thanks for maintaining Debian's cool python3-sympy
package.
If you happen to have the time, and are so
inclined, feel free to share any thoughts you may
happen to have on whether it might be improved to
not crash when asked to nsimplify() the
following...
(1/(1 - (0.5*Y + 1)**1.5583266249))**6.5
I can replicate the crash with
python3-sympy 1.12-6
python3 3.11.4-5+b1
by copying and pasting the following line to a
bash shell prompt....
$ python3 -c 'import sympy ; sympy.nsimplify(sympy.sympify("(1/(1 - (0.5*Y
+ 1)**1.5583266249))**6.5"))'
It seems to me it should not crash, but it fails
with
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sympy/core/assumptions.py", line
499, in getit
return self._assumptions[fact]
~~~~~~~~~~~~~~~~~^^^^^^
KeyError: 'extended_nonnegative'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3/dist-packages/sympy/simplify/simplify.py", line
1446, in nsimplify
return _real_to_rational(expr, tolerance, rational_conversion)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/simplify/simplify.py", line
1582, in _real_to_rational
return p.subs(reps, simultaneous=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/basic.py", line 1036, in
subs
return rv.xreplace(reps)
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/basic.py", line 1230, in
xreplace
value, _ = self._xreplace(rule)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/basic.py", line 1252, in
_xreplace
return self.func(*args), True
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/cache.py", line 72, in
wrapper
retval = cfunc(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/power.py", line 371, in
__new__
obj = b._eval_power(e)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/power.py", line 471, in
_eval_power
elif re(b).is_extended_nonnegative and (abs(e) < 2) == True:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/assumptions.py", line
503, in getit
return _ask(fact, self)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/assumptions.py", line
559, in _ask
fact_i_value = handler_i(obj)
^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/add.py", line 863, in
_eval_is_extended_negative
v = _monotonic_sign(a)
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/exprtools.py", line 76,
in _monotonic_sign
if not self.is_Add and self.as_numer_denom()[1].is_number:
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/mul.py", line 1234, in
as_numer_denom
numers, denoms = list(zip(*[f.as_numer_denom() for f in self.args]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/mul.py", line 1234, in
<listcomp>
numers, denoms = list(zip(*[f.as_numer_denom() for f in self.args]))
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/power.py", line 1584, in
as_numer_denom
return self.func(n, exp), self.func(d, exp)
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/cache.py", line 72, in
wrapper
retval = cfunc(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/power.py", line 371, in
__new__
obj = b._eval_power(e)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/numbers.py", line 2351,
in _eval_power
x, xexact = integer_nthroot(abs(self.p), expt.q)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sympy/core/power.py", line 83, in
integer_nthroot
x, t = gmpy.iroot(y, n)
^^^^^^^^^^^^^^^^
ValueError: n must be > 0
I think it's possible to do better.
Version 16.0.5-4 of another computer algebra
package called "mathomatic" does not crash on the
same example:
$ mathomatic -e "(1/(1 - (0.5*Y + 1)**1.5583266249))**6.5" simplify
1-> (1/(1 - (0.5*Y + 1)**1.5583266249))**6.5
1 13
#1: ----------------------------^--
Y 2
(1 - ((- + 1)^1.5583266249))
2
1-> simplify
1
#1: ---------------------------------
Y 13
((1 - ((- + 1)^1.5583266249))^--)
2 2
Thank you and kind regards,
Kingsley
-- System Information:
Debian Release: trixie/sid
APT prefers unstable-debug
APT policy: (500, 'unstable-debug'), (500, 'unstable')
merged-usr: no
Architecture: i386 (i686)
Kernel: Linux 6.5.0-1-686-pae (SMP w/2 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages python3-sympy depends on:
ii python3 3.11.4-5+b1
ii python3-mpmath 1.2.1-1
Versions of packages python3-sympy recommends:
ii isympy-common 1.7.1-2
ii python3-numpy 1:1.24.2-1
ii python3-pil 9.4.0-1.1+b1
Versions of packages python3-sympy suggests:
pn dvipng <none>
pn python-sympy-doc <none>
pn texlive-fonts-extra <none>
-- no debconf information