# Print exp(x) instead of e^x in symbolic expressions

80 views

### Serge Torres

Nov 27, 2012, 5:23:01 AM11/27/12
Hi,

I'm pretty sure this question has been answered over and over but
despite intensive googling I could not find these answers.

I have expressions (say, f = exp(x)) that want to export to another
computing system.

str(f) is 'e^x' but the target system does not understand it.

Is there a way to have a string version of f with the exp() notation
preserved?

Thanks in advance and sorry for being so dumb.

--
Regards,

Serge Torres

### Burcin Erocal

Nov 27, 2012, 6:16:20 AM11/27/12
On Tue, 27 Nov 2012 11:23:01 +0100
Serge Torres <Serge....@laposte.net> wrote:

> I'm pretty sure this question has been answered over and over but
> despite intensive googling I could not find these answers.
>
> I have expressions (say, f = exp(x)) that want to export to another
> computing system.
>
> str(f) is 'e^x' but the target system does not understand it.
>
> Is there a way to have a string version of f with the exp() notation
> preserved?

This is #11428 on trac.

http://trac.sagemath.org/sage_trac/ticket/11428

The patch on the ticket does not work. It needs to go through the
registry of functions stored in Pynac and update the name or the
printing functions there. Unfortunately I don't have time to implement
that right now.

As a workaround in your case, you can modify the definition of
Function_exp in sage/functions/log.py to set a latex_name in the
initializer, or if that doesn't work, define a _print_latex_ method.

Cheers,
Burcin

### Burcin Erocal

Nov 27, 2012, 11:15:44 AM11/27/12
Here is a simpler solution:

Create a symbolic function fn that prints as '\exp', replace e^x in your
expression with fn, translate the new expression to latex:

# the top level function method injects the name of the function into
# the name space. I don't want to overwrite the exp method in the top
# level. Hence the import
sage: from sage.symbolic.function_factory import function
sage: fn = function('exp', latex_name='\exp')
sage: fn
exp
sage: type(exp)
<class 'sage.functions.log.Function_exp'>
sage: latex(fn(x))
\exp\left(x\right)

sage: t = exp(x^2) + (x+1)*exp(a^2+b)
sage: latex(t)
{\left(x + 1\right)} e^{\left(a^{2} + b\right)} + e^{\left(x^{2}\right)}
sage: latex(t.substitute_function(exp, myfn))
{\left(x + 1\right)} \exp\left(a^{2} + b\right) + \exp\left(x^{2}\right)

Cheers,
Burcin