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.

Reply via email to