There is the python() function, which I guess does Python code generation. For lambdify(), I guess you may just need to call it multiple times.
And yeah, I guess _print_Mul makes more sense. Aaron Meurer On Mon, Jun 9, 2014 at 11:28 AM, Anton Akhmerov <anton.akhme...@gmail.com> wrote: > Hi Aaron, > > Thanks for the advice. Do you perhaps mean _print_Mul (since I need to > replace 0.5 * I with 0.5j)? I checked lambdify, however I will most likely > need a multi-statement function, and hence lambdify seems insufficient for > me. codegen seems appealing, but there is no python code generation there. > > Best, > Anton Akhmerov > > > On Monday, June 9, 2014 5:20:54 PM UTC+2, Aaron Meurer wrote: >> >> I guess you'll need to subclass whatever printer you are using >> (StrPrinter or LambdaPrinter probably) and override _print_Add to get >> this behavior. See http://docs.sympy.org/latest/modules/printing.html. >> >> By the way, what you are doing might be simplified by using >> lambdify(). And I think the LambdaPrinter should perform the >> translation you suggest automatically, if you want to submit a patch. >> >> Aaron Meurer >> >> On Mon, Jun 9, 2014 at 10:09 AM, Anton Akhmerov >> <anton.a...@gmail.com> wrote: >> > Hi everyone, >> > >> > I'm using sympy to automatically apply a certain transformation to >> > symbolic >> > input and to generate a reasonably efficient numerical function as an >> > output >> > (I'm creating a finite difference Hamiltonian from a continuum one). My >> > current plan is to define a bunch of strings containing function >> > definitions >> > that I'd feed to exec(). The problem that I have currently is with >> > numerical >> > prefactors and imaginary unit. Sympy functions that generate string form >> > of >> > expressions like to keep it as 'I', thus turning e.g. "(0.5 + .5j)" into >> > "(0.5 + 0.5 * I)". I could replace every I with 1j in the output, or >> > modify >> > the value assigned to I, but this is not really robust, and not >> > efficient, >> > since at least there's an extra multiplication. So here's my question: >> > how >> > to generate a string form of an expression where all the numerical >> > coefficients would be evaluated into float/complex numbers? >> > >> > I have found a somewhat suboptimal solution similar to the one described >> > over here: >> > http://www.mail-archive.com/sympy@googlegroups.com/msg05139.html >> > . The reason why it is suboptimal is because terms like 0.5 * I will >> > transform into 0.5 * 1.j instead of 0.5j (and thus an extra unnecessary >> > multiplication is performed). >> > >> > Thanks, >> > Anton Akhmerov >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups >> > "sympy" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> > an >> > email to sympy+un...@googlegroups.com. >> > To post to this group, send email to sy...@googlegroups.com. >> > Visit this group at http://groups.google.com/group/sympy. >> > To view this discussion on the web visit >> > >> > https://groups.google.com/d/msgid/sympy/8586a91c-e70a-43e3-ba70-6a918a6589e7%40googlegroups.com. >> > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > Visit this group at http://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/1d67e7a5-59ec-47c0-9b8b-7c03c7a342f5%40googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6%2B8qwvh7p2wB%2BhdO6yBBt5eskmr4vxzYSxvnvZ2kMVMXA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.