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

Priority:  major  Milestone:  sage9.2 
Component:  calculus  Keywords:  symbolics giac integration 
Cc:  Frédéric Chapoton, Markus Wageringel, Jakob Kroeker, KarlDieter Crisman, Peter Bruin, Ralf Stephan, Sébastien Labbé, Samuel Lelièvre, Thierry Monteil, Vincent Delecroix, vklein, Paul Zimmermann, Marcelo Forets, Marc Mezzarobba  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 3 years ago by
Cc:  Frédéric Chapoton added 

comment:2 Changed 3 years ago by
Keywords:  symbolics giac integration added 

comment:3 followup: 4 Changed 3 years 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 Changed 3 years 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 3 years ago by
Milestone:  sage9.0 → sage9.1 

Ticket retargeted after milestone closed
comment:6 followup: 16 Changed 2 years 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 2 years ago by
Milestone:  sage9.1 → sage9.2 

comment:8 Changed 2 years ago by
Authors:  → Frédéric Chapoton 

Branch:  → u/chapoton/28913 
Commit:  → 203f9eb6b8624111047656a4ffd805aa53809b73 
Status:  new → needs_review 
comment:10 Changed 2 years 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 2 years ago by
Commit:  203f9eb6b8624111047656a4ffd805aa53809b73 → 297033a040583cc934757c4c94376d5146054265 

Branch pushed to git repo; I updated commit sha1. New commits:
297033a  trac 28913 adding yet another doctest

comment:14 Changed 2 years ago by
Reviewers:  → Thierry Monteil 

Status:  needs_review → positive_review 
comment:15 Changed 2 years ago by
Branch:  u/chapoton/28913 → 297033a040583cc934757c4c94376d5146054265 

Resolution:  → fixed 
Status:  positive_review → closed 
comment:16 Changed 2 years ago by
Commit:  297033a040583cc934757c4c94376d5146054265 

Forgot Frederic Chapoton in the
Cc
list...