looks like Piecewise () is another non-implemented conversion - although it's probably easy to fix.
On Wed, 26 Apr 2023, 19:55 'Nasser M. Abbasi' via sage-devel, < sage-devel@googlegroups.com> wrote: > Not all failed one is due to RootSum. Here is one that fails in sagemage > but works in sympy and does not generate RootSum but Piecewise > > var('A B a alpha b beta m n x ') > integrate(x^(1/2)/(b*x+a),x, algorithm="sympy") > > --------------------------------------------------------------------------- > NotImplementedError Traceback (most recent call last) > Cell In [7], line 1 > ----> 1 integrate(x**(Integer(1)/Integer(2))/(b*x+a),x, algorithm="sympy") > > File ~/TMP/sage-9.8/src/sage/misc/functional.py:773, in integral(x, *args, > **kwds) > 648 """ > 649 Return an indefinite or definite integral of an object ``x``. > 650 > (...) > 770 > 771 """ > 772 if hasattr(x, 'integral'): > --> 773 return x.integral(*args, **kwds) > 774 else: > 775 from sage.symbolic.ring import SR > > File ~/TMP/sage-9.8/src/sage/symbolic/expression.pyx:13211, in > sage.symbolic.expression.Expression.integral() > 13209 R = SR > 13210 return R(integral(f, v, a, b, **kwds)) > > 13211 return integral(self, *args, **kwds) > 13212 > 13213 integrate = integral > > File ~/TMP/sage-9.8/src/sage/symbolic/integration/integral.py:1063, in > integrate(expression, v, a, b, algorithm, hold) > 1061 if not integrator: > 1062 raise ValueError("Unknown algorithm: %s" % algorithm) > -> 1063 return integrator(expression, v, a, b) > 1064 if a is None: > 1065 return indefinite_integral(expression, v, hold=hold) > > File ~/TMP/sage-9.8/src/sage/symbolic/integration/external.py:69, in > sympy_integrator(expression, v, a, b) > 67 else: > 68 result = sympy.integrate(ex, (v, a._sympy_(), b._sympy_())) > ---> 69 return result._sage_() > > File ~/TMP/sage-9.8/src/sage/interfaces/sympy.py:603, in > _sympysage_piecewise(self) > 588 """ > 589 EXAMPLES:: > 590 > (...) > 600 -y*z + cases(((log(x) != 0, x^y/log(x)), (1, y))) > 601 """ > 602 from sage.functions.other import cases > --> 603 return cases([(p.cond._sage_(),p.expr._sage_()) for p in > self.args]) > > File ~/TMP/sage-9.8/src/sage/interfaces/sympy.py:603, in <listcomp>(.0) > 588 """ > 589 EXAMPLES:: > 590 > (...) > 600 -y*z + cases(((log(x) != 0, x^y/log(x)), (1, y))) > 601 """ > 602 from sage.functions.other import cases > --> 603 return cases([(p.cond._sage_(),p.expr._sage_()) for p in > self.args]) > > File > ~/TMP/sage-9.8/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sympy/core/basic.py:1959, > in Basic._sage_(self) > 1957 sympy_init() # may monkey-patch _sage_ method into self's class > or superclasses > 1958 if old_method == self._sage_: > -> 1959 raise NotImplementedError('conversion to SageMath is not > implemented') > 1960 else: > 1961 # call the freshly monkey-patched method > 1962 return self._sage_() > > NotImplementedError: conversion to SageMath is not implemented > sage: > > > > Here is same integral in sympy > > >>> A,B,a,alpha,b,beta,m,n,x= symbols('A B a alpha b beta m n x ') > >>> integrate(S("x**(1/2)/(b*x+a)"),x) > Piecewise((zoo*sqrt(x), Eq(a, 0) & Eq(b, 0)), (2*x**(3/2)/(3*a), Eq(b, > 0)), (2*sqrt(x)/b, Eq(a, 0)), (-a*log(sqrt(x) - > sqrt(-a/b))/(b**2*sqrt(-a/b)) + a*log(sqrt(x) + > sqrt(-a/b))/(b**2*sqrt(-a/b)) + 2*sqrt(x)/b, True)) > >>> > > Or without using S > > >>> integrate(x**Rational(1/2)/(b*x+a),x) > Piecewise((zoo*sqrt(x), Eq(a, 0) & Eq(b, 0)), (2*x**(3/2)/(3*a), Eq(b, > 0)), (2*sqrt(x)/b, Eq(a, 0)), (-a*log(sqrt(x) - > sqrt(-a/b))/(b**2*sqrt(-a/b)) + a*log(sqrt(x) + > sqrt(-a/b))/(b**2*sqrt(-a/b)) + 2*sqrt(x)/b, True)) > > I did not have the time to check each integral to find why it fails but > will post list of all failed ones from this one file next. > > --Nasser > > On Wednesday, April 26, 2023 at 1:26:55 PM UTC-5 Dima Pasechnik wrote: > >> Thanks for showing this. As far as I know, the problem is that Sage does >> not support RootSum expressions - although they are very useful for >> integration in particular. >> >> >> On Wed, 26 Apr 2023, 19:22 'Nasser M. Abbasi' via sage-devel, < >> sage-...@googlegroups.com> wrote: >> >>> I use sagemath to run the independent CAS integrations tests for Fricas, >>> Giac and Maxima, since it is much easier to use the same script to all CAS >>> systems instead of learning how to use each separate CAS. The result is put >>> on this page >>> <https://12000.org/my_notes/CAS_integration_tests/index.htm>. >>> >>> I found that sympy now can be used from sagemath. >>> >>> So I said, great. Instead of having separate script for sympy in python >>> will use the same sagemath script and just change the name of the algorithm >>> to 'sympy'. Makes life easier. >>> >>> But when I tried this on one test file, I found many integrals now fail, >>> where they work using sympy directly in Python. >>> >>> I am not sure if this is because sympy is not yet fully yet supported in >>> sagemath or if this is just a bug and overlooked support. >>> >>> For example, on this one file, sympy used to score 84.66% passing score >>> when used directly, but now in sagemath it scores 65.64%. >>> >>> This translates to about 30 more integrals failing in this file of 163 >>> integrals. >>> >>> Below will give one example. All seem to give the same exception >>> >>> NotImplementedError('conversion to SageMath is not implemented') >>> >>> Here is one example in sagemath 9.8 >>> >>> var('A B a alpha b beta m n x ') >>> integrate(x/((b*x^2+a)^m),x, algorithm='sympy') >>> >>> >>> --------------------------------------------------------------------------- >>> NotImplementedError Traceback (most recent call >>> last) >>> Cell In [2], line 1 >>> ----> 1 integrate(x/(b*x**Integer(3)+a)**Integer(2),x, algorithm='sympy') >>> >>> File ~/TMP/sage-9.8/src/sage/misc/functional.py:773, in integral(x, >>> *args, **kwds) >>> 648 """ >>> 649 Return an indefinite or definite integral of an object ``x``. >>> 650 >>> (...) >>> 770 >>> 771 """ >>> 772 if hasattr(x, 'integral'): >>> --> 773 return x.integral(*args, **kwds) >>> 774 else: >>> 775 from sage.symbolic.ring import SR >>> >>> File ~/TMP/sage-9.8/src/sage/symbolic/expression.pyx:13211, in >>> sage.symbolic.expression.Expression.integral() >>> 13209 R = SR >>> 13210 return R(integral(f, v, a, b, **kwds)) >>> > 13211 return integral(self, *args, **kwds) >>> 13212 >>> 13213 integrate = integral >>> >>> File ~/TMP/sage-9.8/src/sage/symbolic/integration/integral.py:1063, in >>> integrate(expression, v, a, b, algorithm, hold) >>> 1061 if not integrator: >>> 1062 raise ValueError("Unknown algorithm: %s" % algorithm) >>> -> 1063 return integrator(expression, v, a, b) >>> 1064 if a is None: >>> 1065 return indefinite_integral(expression, v, hold=hold) >>> >>> File ~/TMP/sage-9.8/src/sage/symbolic/integration/external.py:69, in >>> sympy_integrator(expression, v, a, b) >>> 67 else: >>> 68 result = sympy.integrate(ex, (v, a._sympy_(), b._sympy_())) >>> ---> 69 return result._sage_() >>> >>> File ~/TMP/sage-9.8/src/sage/interfaces/sympy.py:216, in >>> _sympysage_add(self) >>> 214 s = 0 >>> 215 for x in self.args: >>> --> 216 s += x._sage_() >>> 217 return s >>> >>> File >>> ~/TMP/sage-9.8/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sympy/core/basic.py:1959, >>> in Basic._sage_(self) >>> 1957 sympy_init() # may monkey-patch _sage_ method into self's class >>> or superclasses >>> 1958 if old_method == self._sage_: >>> -> 1959 raise NotImplementedError('conversion to SageMath is not >>> implemented') >>> 1960 else: >>> 1961 # call the freshly monkey-patched method >>> 1962 return self._sage_() >>> >>> >>> Here is same integral in sympy itself. You see it works. >>> >>> >python >>> Python 3.10.9 (main, Dec 19 2022, 17:35:49) [GCC 12.2.0] on linux >>> >>> from sympy import * >>> >>> A,B,a,alpha,b,beta,m,n,x= symbols('A B a alpha b beta m n x ') >>> >>> integrate(x/(b*x**3+a)**2,x) >>> >>> x**2/(3*a**2 + 3*a*b*x**3) + RootSum(729*_t**3*a**4*b**2 + 1, Lambda(_t, >>> _t*log(81*_t**2*a**3*b + x))) >>> >>> >>> The sympy version is 1.11.1 in both cases, all on Linux. >>> >>> age: ver = installed_packages() >>> sage: ver['sympy'] >>> '1.11.1' >>> >>> Will give the list of failed integrals in this one file in a follow up >>> post. >>> >>> --Nasser >>> >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sage-devel" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to sage-devel+...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sage-devel/f756dced-6c0b-41cd-b510-6df90906629an%40googlegroups.com >>> <https://groups.google.com/d/msgid/sage-devel/f756dced-6c0b-41cd-b510-6df90906629an%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "sage-devel" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sage-devel+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sage-devel/38d80cba-9e43-4f8b-afde-5d971f159121n%40googlegroups.com > <https://groups.google.com/d/msgid/sage-devel/38d80cba-9e43-4f8b-afde-5d971f159121n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/CAAWYfq10Xf5baAJ%2BjxGXpX-dak9Tj5xFE-HFFO1RkJUP6mNKWQ%40mail.gmail.com.