MB wrote:
> Using Robert's suggestion of repr() got me pretty close. The biggest
> remaining issue is that Sage writes a^x whereas C needs pow(a,x). For
> simple cases, I was able to fix this with regular expression
> substitution as follows:
>
> import re
> p = re.compile("([a-zA-Z0-9]+?)\\^([a-zA-Z0-9]+)")
>
> o = open("mycode.c", "w")
> o.write("E1 = "
> o.write(p.subn("pow(\\1,\\2)", repr(E1))[0])
> o.write(";\n")
>
> Here E1 is the expression to be written out.
>
> Unfortunately, my regular expression is too simple to handle cases
> like (a+b)^2.
For various objects and various software systems (like mathematica,
magma, maxima, etc.), we have a _mathematica_init_, _magma_init_, etc,
which convert an expression into syntax for the target system. A lot of
these are defined in calculus.py for converting symbolic expressions to
syntax for other systems. I don't think we have an "interface" to C
code; can anyone think of a reason why we shouldn't? (or do we already
have one?)
That said, can you modify either the _repr_ function or the _latex_
function for your needs? For example, in the _latex_ function, there is
a place in the code where it clearly does the power string (line 5081 in
devel/sage/sage/calculus/calculus.py in my current sage files).
For that matter, it looks like if you just add two lines in _sys_init_
(line 5111 in calculus.py for me), so it looks like this:
def _sys_init_(self, system):
ops = self._operands
if self._operator is operator.neg:
return '-(%s)' % sys_init(ops[0], system)
elif self._operator is operator.pow:
return 'pow(%s, %s)' % (sys_init(ops[0], system),
sys_init(ops[1], system))
else:
return '(%s) %s (%s)' % (sys_init(ops[0], system),
infixops[self._operator],
sys_init(ops[1], system))
or something like that, it would be a quick hackjob to do what you want,
maybe.
Thanks,
Jason
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---