diff --git a/src/sage/symbolic/integration/external.py b/src/sage/symbolic/integration/external.py index 92574424fb0..84de69c5b30 100644 --- a/src/sage/symbolic/integration/external.py +++ b/src/sage/symbolic/integration/external.py @@ -256,6 +256,16 @@ def libgiac_integrator(expression, v, a=None, b=None): if a is None: result = libgiac.integrate(Pygen(expression), v) else: + # We use _giac_() in the endpoints if they are infinite because + # for some reason, passing them straight to libgiac() gives us + # a different kind of infinity back that doesn't work as well, + # at least for integration. + from sage.rings.infinity import PlusInfinity, MinusInfinity + if isinstance(a, PlusInfinity) or isinstance(a, MinusInfinity): + a = a._giac_() + if isinstance(b, PlusInfinity) or isinstance(b, MinusInfinity): + b = b._giac_() + result = libgiac.integrate(Pygen(expression), v, a, b) if 'integrate' in format(result) or 'integration' in format(result): return expression.integrate(v, a, b, hold=True) diff --git a/src/sage/symbolic/integration/integral.py b/src/sage/symbolic/integration/integral.py index fdd722c1f30..a7d38b6ec55 100644 --- a/src/sage/symbolic/integration/integral.py +++ b/src/sage/symbolic/integration/integral.py @@ -206,7 +206,9 @@ def __init__(self): sage: ex = 1/max_symbolic(x, 1)**2 sage: integral(ex, x, 0, 2, algorithm='giac') 3/2 - sage: integral(1/max_symbolic(x, 1)**2, x, 0, oo, algorithm='giac') + sage: result = integral(ex, x, 0, oo, algorithm='giac') + ... + sage: result 2 """ # The automatic evaluation routine will try these integrators