Skip to content

integrate(..., algorithm="giac"): Incorrect conversion to Sage #28913

@EmmanuelCharpentier

Description

@EmmanuelCharpentier

Seen in this ask.sagemath question:

sage: Ex=(1-2*x^(1/3))^(3/4)/x
sage: integrate(Ex, x, algorithm="giac")
---------------------------------------------------------------------------
SyntaxError                               Traceback (most recent call last)
/usr/local/sage-P3-2/local/lib/python3.7/site-packages/sage/interfaces/giac.py in _sage_(self, locals)
   1100                 return symbolic_expression_from_string(result, lsymbols,
-> 1101                     accept_sequence=True)
   1102 

/usr/local/sage-P3-2/local/lib/python3.7/site-packages/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/sage-P3-2/local/lib/python3.7/site-packages/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/sage-P3-2/local/lib/python3.7/site-packages/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/sage-P3-2/local/lib/python3.7/site-packages/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)
<ipython-input-22-617e71e52902> in <module>()
----> 1 integrate(Ex, x, algorithm="giac")

/usr/local/sage-P3-2/local/lib/python3.7/site-packages/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/sage-P3-2/local/lib/python3.7/site-packages/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/sage-P3-2/local/lib/python3.7/site-packages/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/sage-P3-2/local/lib/python3.7/site-packages/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/sage-P3-2/local/lib/python3.7/site-packages/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 root-directory:/usr/local/sage-P3-2/local/share/giac/
// Giac share root-directory:/usr/local/sage-P3-2/local/share/giac/
Help file /usr/local/sage-P3-2/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 (real|hard) 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).

Ccing the participants to #27958, which introduced this particular wolf in the general Sage integration sheepshed...

CC: @fchapoton @mwageringel @sagetrac-jakobkroeker @kcrisman @pjbruin @rwst @seblabbe @slel @sagetrac-tmonteil @videlec @vinklein @zimmermann6 @mforets @mezzarobba

Component: calculus

Keywords: symbolics giac integration

Author: Frédéric Chapoton

Branch: 297033a

Reviewer: Thierry Monteil

Issue created by migration from https://trac.sagemath.org/ticket/28913

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions