#28913 closed defect (fixed)
integrate(..., algorithm="giac"): Incorrect conversion to Sage
Reported by:  charpent  Owned by:  

Priority:  major  Milestone:  sage9.2 
Component:  calculus  Keywords:  symbolics giac integration 
Cc:  chapoton, ghmwageringel, jakobkroeker, kcrisman, pbruin, rws, slabbe, slelievre, tmonteil, vdelecroix, vklein, zimmerma, mforets, mmezzarobba  Merged in:  
Authors:  Frédéric Chapoton  Reviewers:  Thierry Monteil 
Report Upstream:  N/A  Work issues:  
Branch:  297033a (Commits, GitHub, GitLab)  Commit:  
Dependencies:  Stopgaps: 
Description
Seen in this ask.sagemath question:
sage: Ex=(12*x^(1/3))^(3/4)/x sage: integrate(Ex, x, algorithm="giac")  SyntaxError Traceback (most recent call last) /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/interfaces/giac.py in _sage_(self, locals) 1100 return symbolic_expression_from_string(result, lsymbols, > 1101 accept_sequence=True) 1102 /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/calculus/calculus.py in symbolic_expression_from_string(s, syms, accept_sequence) 2384 _augmented_syms = syms > 2385 return parse_func(s) 2386 finally: /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/misc/parser.pyx in sage.misc.parser.Parser.parse_sequence (build/cythonized/sage/misc/parser.c:5479)() 538 > 539 cpdef parse_sequence(self, s): 540 """ /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/misc/parser.pyx in sage.misc.parser.Parser.parse_sequence (build/cythonized/sage/misc/parser.c:5369)() 556 if tokens.next() != EOS: > 557 self.parse_error(tokens) 558 if len(all) == 1 and isinstance(all, list): /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/misc/parser.pyx in sage.misc.parser.Parser.parse_error (build/cythonized/sage/misc/parser.c:9742)() 1007 cdef parse_error(self, Tokenizer tokens, msg="Malformed expression"): > 1008 raise SyntaxError(msg, tokens.s, tokens.pos) 1009 SyntaxError: Malformed expression During handling of the above exception, another exception occurred: NotImplementedError Traceback (most recent call last) <ipythoninput22617e71e52902> in <module>() > 1 integrate(Ex, x, algorithm="giac") /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/misc/functional.py in integral(x, *args, **kwds) 751 """ 752 if hasattr(x, 'integral'): > 753 return x.integral(*args, **kwds) 754 else: 755 from sage.symbolic.ring import SR /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression.integral (build/cythonized/sage/symbolic/expression.cpp:64575)() 12389 R = ring.SR 12390 return R(integral(f, v, a, b, **kwds)) > 12391 return integral(self, *args, **kwds) 12392 12393 integrate = integral /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/symbolic/integration/integral.py in integrate(expression, v, a, b, algorithm, hold) 925 if not integrator: 926 raise ValueError("Unknown algorithm: %s" % algorithm) > 927 return integrator(expression, v, a, b) 928 if a is None: 929 return indefinite_integral(expression, v, hold=hold) /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/symbolic/integration/external.py in giac_integrator(expression, v, a, b) 430 return expression.integrate(v, a, b, hold=True) 431 else: > 432 return result._sage_() /usr/local/sageP32/local/lib/python3.7/sitepackages/sage/interfaces/giac.py in _sage_(self, locals) 1102 1103 except Exception: > 1104 raise NotImplementedError("Unable to parse Giac output: %s" % result) 1105 else: 1106 return [entry.sage() for entry in self] NotImplementedError: Unable to parse Giac output: Evaluation time: 2.82 12*(1/4*ln(abs((2*x^(1/3)+1)^(1/4)1))1/4*ln((2*x^(1/3)+1)^(1/4)+1)+1/2*atan((2*x^(1/3)+1)^(1/4))+1/3*((2*x^(1/3)+1)^(1/4))^3)
However, the following workaround works:
sage: from giacpy_sage import * // Giac share rootdirectory:/usr/local/sageP32/local/share/giac/ // Giac share rootdirectory:/usr/local/sageP32/local/share/giac/ Help file /usr/local/sageP32/local/share/giac/doc/fr/aide_cas not found Added 0 synonyms sage: libgiac.integrate(Ex,x).sage() 4*(2*x^(1/3) + 1)^(3/4) + 6*arctan((2*x^(1/3) + 1)^(1/4))  3*log((2*x^(1/3) + 1)^(1/4) + 1) + 3*log(abs((2*x^(1/3) + 1)^(1/4)  1))
This seems to point to the (unwelcome) timing information added by Giac before its results... It's probably more of a booboo than a (realhard) bug, but might defeat a whole problem if this error is raised before other algorithms has had a chance to report their results.
I'm not sure that this should be reported upstream (it should if there is no way to cleanly suppress the timing information).
Cc
ing the participants to #27958, which introduced this particular wolf in the general Sage integration sheepshed...
Change History (16)
comment:1 Changed 21 months ago by
 Cc chapoton added
comment:2 Changed 21 months ago by
 Keywords symbolics giac integration added
comment:3 followup: ↓ 4 Changed 21 months ago by
I think it would make sense to use giacpy_sage for this in general, rather than the pexpect interface. Perhaps giacpy_sage could be turned into a standard package.
comment:4 in reply to: ↑ 3 Changed 21 months ago by
Replying to ghmwageringel:
I think it would make sense to use giacpy_sage for this in general, rather than the pexpect interface. Perhaps giacpy_sage could be turned into a standard package.
comment:5 Changed 21 months ago by
 Milestone changed from sage9.0 to sage9.1
Ticket retargeted after milestone closed
comment:6 followup: ↓ 16 Changed 17 months ago by
Is the following
sage: integrate(sqrt(x + sqrt(x)), x, algorithm='giac')
an other instance of the problem described in this ticket? See https://ask.sagemath.org/question/50885/isthereawaytointegratesqrtxsqrtxinsage/
The result is:
Traceback (most recent call last): ... AttributeError: ... During handling of the above exception, another exception occurred: ... RuntimeError: An error occurred running a Giac command: INPUT: sage2 OUTPUT: Warning, choosing root of [1,0,0,%%%{4,[1]%%%},%%%{4,[2]%%%}+%%%{1,[1]%%%}] at parameters values [97] Warning, need to choose a branch for the root of a polynomial with parameters. This might be wrong. The choice was done assuming [x]=[9] Warning, need to choose a branch for the root of a polynomial with parameters. This might be wrong. The choice was done assuming [x]=[54] *** bug in PARI/GP (Bus Error), please report.sym2poly exception caught Error in PARI subsystem Error: Bad Argument Value Warning, need to choose a branch for the root of a polynomial with parameters. This might be wrong. The choice was done assuming [x]=[64] *** bug in PARI/GP (Segmentation Fault), please report.sym2poly exception caught Error in PARI subsystem Error: Bad Argument Value *** bug in PARI/GP (Segmentation Fault), please report.sym2poly exception caught Error in PARI subsystem Error: Bad Argument Value *** Warning: normalizing a polynomial with 0 leading term. *** Warning: normalizing a polynomial with 0 leading term. Warning, choosing root of [1,0,0,%%%{4,[1]%%%},%%%{4,[2]%%%}+%%%{1,[1]%%%}] at parameters values [6.38357630698] *** Warning: normalizing a polynomial with 0 leading term. *** Warning: normalizing a polynomial with 0 leading term. Warning, choosing root of [1,0,0,%%%{4,[1]%%%},%%%{4,[2]%%%}+%%%{1,[1]%%%}] at parameters values [82.1195442914] 2*(2*((1/6*sqrt(x)+1/24)*sqrt(x)1/16)*sqrt(x+sqrt(x))1/16*ln(sqrt(4*sqrt(x)+14*sqrt(x)*cos((pi*sign(im(sqrt(x)))*sign(x+re(sqrt(x)))pi*sign(im(sqrt(x)))2*atan(im(sqrt(x))/(x+re(sqrt(x)))))/2)+rootof([[4,4,0],[1,0,0,4*x,4*x^2x]])*cos(1/2*(atan(im(sqrt(x))/(x+re(sqrt(x))))+(1sign(x+re(sqrt(x))))*sign(im(sqrt(x)))*pi/2)))))
comment:7 Changed 17 months ago by
 Milestone changed from sage9.1 to sage9.2
comment:8 Changed 17 months ago by
 Branch set to u/chapoton/28913
 Commit set to 203f9eb6b8624111047656a4ffd805aa53809b73
 Status changed from new to needs_review
comment:9 Changed 17 months ago by
green bot, please review
comment:10 Changed 17 months ago by
The fix looks good. How wbout adding a direct doctest in SAGE_ROOT/src/sage/symbolic/integration/integral.py
pointing to this ticket ?
comment:11 Changed 17 months ago by
 Commit changed from 203f9eb6b8624111047656a4ffd805aa53809b73 to 297033a040583cc934757c4c94376d5146054265
Branch pushed to git repo; I updated commit sha1. New commits:
297033a  trac 28913 adding yet another doctest

comment:12 Changed 17 months ago by
Doctest ajouté
comment:13 Changed 17 months ago by
bot is morally green, please review
comment:14 Changed 17 months ago by
 Reviewers set to Thierry Monteil
 Status changed from needs_review to positive_review
comment:15 Changed 16 months ago by
 Branch changed from u/chapoton/28913 to 297033a040583cc934757c4c94376d5146054265
 Resolution set to fixed
 Status changed from positive_review to closed
comment:16 in reply to: ↑ 6 Changed 15 months ago by
 Commit 297033a040583cc934757c4c94376d5146054265 deleted
Forgot Frederic Chapoton in the
Cc
list...