There is the hold context for symbolic expressions:
sage: with hold:
....: latex(integrate(sin(x), x))
....:
\int \sin\left(x\right)\,{d x}
The short docs are at
https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html#sage.symbolic.expression.hold_class
but it looks like it does not work well together with
algorithm="maxima". Quick search about this gives the tickets #10035,
#10169, #23304 and #31554.
Even without the hold context, there is the argument "hold":
sage: integrate(sin(x), x)
-cos(x)
sage: integrate(sin(x), x, hold=True)
integrate(sin(x), x)
sage: latex(_)
\int \sin\left(x\right)\,{d x}
sage: integrate(sin(x), x, algorithm="maxima", hold=True) # Bug?
-cos(x)
Regards,
TB
On 27/07/2023 0:59, 'Nasser M. Abbasi' via sage-devel wrote:
" I think it would be reasonable for Sage to do what the original poster
suggested, and turn integrals into \int in latex rather than trying to
evaluate them."
Yes, this is what I am asking. If there is a way to prevent evaluation
of an expression being passed to latex() command.
In Mathematica for example, this is done by wrapping the expression in
HoldForm, like this
TeXForm[Integrate[Sin[x], x]]
-\cos (x)
TeXForm[HoldForm[Integrate[Sin[x], x]]]
\int \sin (x) \, dx
In Maple this is done by wrapping the expression by ' ' like this
latex(int(sin(x),x))
-\cos \! \left(x \right)
latex('int(sin(x),x)')
\int \sin \! \left(x \right)d x
I just wanted to know how to do the same in sagemath. Many times there
is a need to obtain the latex of an expression without it being evaluated,
--Nasser
On Wednesday, July 26, 2023 at 9:34:34 AM UTC-5 David Roe wrote:
Even if adding some assumptions makes this particular integral
evaluate fully, the underlying problem may still show up in other
cases. I haven't tracked it down fully (and probably won't spend
more time on this), but the error messages are coming from Sage's
interface to Giac, via this function in expression.pyx:
cpdef _latex_Expression(x):
return char_to_str(GEx_to_str_latex(&(<Expression>x)._gobj))
I think it would be reasonable for Sage to do what the original
poster suggested, and turn integrals into \int in latex rather than
trying to evaluate them.
David
On Wed, Jul 26, 2023 at 7:14 AM Dima Pasechnik <dim...@gmail.com> wrote:
On Wed, Jul 26, 2023 at 6:17 AM 'Nasser M. Abbasi' via sage-devel
<sage-...@googlegroups.com> wrote:
>
> Sometimes when calling integrate using algorithm such as
maxima, it returns result which is not fully resolved but still
have an integrate inside it.
>
> Next, when calling latex() on the anti-derivative this cause
problems, because sage tried to calls maxima again on the
integrate command inside the result.
>
> Is there a way to make latex() just convert the result
without calling integrate again?
> This results in problems like the following
>
> sage: latex(anti)
> Not invertible Error: Bad Argument Value
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
>
> Here is an example
for this integral, I think you'd like to add
assume(n,"integer")
assume(n>0)
Do you really want to work in the complex domain, not also
assume(x>0)
assume(c>0)
?
Anyhow, this looks like a Maxima bug to me.
Dima
>
> >sage
> │ SageMath version 10.0, Release Date: 2023-05-20
│
> │ Using Python 3.11.3. Type "help()" for help.
│
> sage: var('f x e n a p h g b c d q')
> sage: anti=integrate(x*sec(a+b*log(c*x^n))^2,x,
algorithm="maxima");
> sage: latex(anti)
>
> Not invertible Error: Bad Argument Value
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
>
> The result of maxima in this case has unresolved integrate
inside it. This is the actual antiderivative
>
> sage: integrate(x*sec(a+b*log(c*x^n))^2,x, algorithm="maxima")
> 2*(x^2*cos(2*b*log(x^n) + 2*a)*sin(2*b*log(c)) +
x^2*cos(2*b*log(c))*sin(2*b*log(x^n) + 2*a) -
2*(2*b^2*n^2*cos(2*b*log(c))*cos(2*b*log(x^n) + 2*a) -
2*b^2*n^2*sin(2*b*log(c))*sin(2*b*log(x^n) + 2*a) +
(b^2*cos(2*b*log(c))^2 +
b^2*sin(2*b*log(c))^2)*n^2*cos(2*b*log(x^n) + 2*a)^2 +
(b^2*cos(2*b*log(c))^2 +
b^2*sin(2*b*log(c))^2)*n^2*sin(2*b*log(x^n) + 2*a)^2 +
b^2*n^2)*integrate((x*cos(2*b*log(x^n) + 2*a)*sin(2*b*log(c)) +
x*cos(2*b*log(c))*sin(2*b*log(x^n) +
2*a))/(2*b^2*n^2*cos(2*b*log(c))*cos(2*b*log(x^n) + 2*a) -
2*b^2*n^2*sin(2*b*log(c))*sin(2*b*log(x^n) + 2*a) +
(b^2*cos(2*b*log(c))^2 +
b^2*sin(2*b*log(c))^2)*n^2*cos(2*b*log(x^n) + 2*a)^2 +
(b^2*cos(2*b*log(c))^2 +
b^2*sin(2*b*log(c))^2)*n^2*sin(2*b*log(x^n) + 2*a)^2 + b^2*n^2),
x))/(2*b*n*cos(2*b*log(c))*cos(2*b*log(x^n) + 2*a) +
(b*cos(2*b*log(c))^2 + b*sin(2*b*log(c))^2)*n*cos(2*b*log(x^n) +
2*a)^2 - 2*b*n*sin(2*b*log(c))*sin(2*b*log(x^n) + 2*a) +
(b*cos(2*b*log(c))^2 + b*sin(2*b*log(c))^2)*n*sin(2*b*log(x^n) +
2*a)^2 + b*n)
>
> Notice there is an integrate(...) command inside the above
output. So maxima found it can't integrate that part and left
the integrate command there. So I do not want this to be
evaluated. I just need the latex conversion done keeping
integrate as "\int{.....}" without evaluating.
>
> This happens because sage was calling
>
> integrate((x*cos(2*b*log(x^n) + 2*a)*sin(2*b*log(c)) +
x*cos(2*b*log(c))*sin(2*b*log(x^n) +
2*a))/(2*b^2*n^2*cos(2*b*log(c))*cos(2*b*log(x^n) + 2*a) -
2*b^2*n^2*sin(2*b*log(c))*sin(2*b*log(x^n) + 2*a) +
(b^2*cos(2*b*log(c))^2 +
b^2*sin(2*b*log(c))^2)*n^2*cos(2*b*log(x^n) + 2*a)^2 +
(b^2*cos(2*b*log(c))^2 +
b^2*sin(2*b*log(c))^2)*n^2*sin(2*b*log(x^n) + 2*a)^2 + b^2*n^2), x)
> Not invertible Error: Bad Argument Value
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Not invertible Error: Bad Argument Value
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> Undef/Unsigned Inf encountered in limit
> and these go on forever it seems
>
> And getting these error. The strange thing, is calling the
above exact command inside Maxima just returns the input back,
without these errors!
>
> So these errors are generated by sagemath and not by maxima
from the latex() command.
>
> I am using Maxima 5.47 with sagemath 10.0
>
> >which maxima
> /usr/bin/maxima
> >maxima --version
> ;;; Loading #P"/usr/lib/ecl-21.2.1/sb-bsd-sockets.fas"
> ;;; Loading #P"/usr/lib/ecl-21.2.1/sockets.fas"
> Maxima 5.47.0
> >
> And
>
> >which sage
> /home/me/TMP/sage-10.0/sage
> >sage --version
> SageMath version 10.0, Release Date: 2023-05-20
> >
>
> Thanks
> --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/43c4f68d-4be8-4cbc-a68a-d54321969ab7n%40googlegroups.com
<https://groups.google.com/d/msgid/sage-devel/43c4f68d-4be8-4cbc-a68a-d54321969ab7n%40googlegroups.com>.
--
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/CAAWYfq30oD1XdVmcCNZtkZfXVAwOKZimb%3D59hMi7ug6FpYYTFA%40mail.gmail.com
<https://groups.google.com/d/msgid/sage-devel/CAAWYfq30oD1XdVmcCNZtkZfXVAwOKZimb%3D59hMi7ug6FpYYTFA%40mail.gmail.com>.
--
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
<mailto:sage-devel+unsubscr...@googlegroups.com>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-devel/f3acc34c-a9eb-475f-bd64-710c3241af91n%40googlegroups.com <https://groups.google.com/d/msgid/sage-devel/f3acc34c-a9eb-475f-bd64-710c3241af91n%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/fe8077da-9077-237f-a3c6-7c746a8bc2bd%40gmail.com.