Thank you for the information. On 13 November 2011 02:34, Mateusz Paprocki <matt...@gmail.com> wrote:
> Hi, > > On 12 November 2011 17:25, krastanov.ste...@gmail.com < > krastanov.ste...@gmail.com> wrote: > >> Can the default printer be changed so lambdarepr(SomeClass(args)) and >> lambdarepr(SomeClass(args).func) give always the same thing. >> >> lambdarepr is using LambdaPrinter. What should be done there (or to a >> subclass of LambdaPrinter) to ensure the behavior that I desire? > > > So, the difference comes from StrPrinter.emptyPrinter and > FunctionClass.__repr__. You can override _print_FunctionClass or > emptyPrinter in LambdaReprPrinter to fix the problem. > > >> >> >> On 13 November 2011 02:21, Mateusz Paprocki <matt...@gmail.com> wrote: >> >>> Hi, >>> >>> On 12 November 2011 17:16, krastanov.ste...@gmail.com < >>> krastanov.ste...@gmail.com> wrote: >>> >>>> Then I suppose I can just call a function that returns a string. Here >>>> is the problem I have: >>>> >>>> In [42]: lambdarepr(Integral(x, (x,0,1)).func) >>>> Out[42]: <class 'sympy.integrals.integrals.Integral'> >>>> >>>> In [43]: lambdarepr(Integral(x, (x,0,1))) >>>> Out[43]: Integral(x, (x, 0, 1)) >>>> >>>> Why is out[42] not the same style as out[43]. This causes problems with >>>> lambdify, so I would be very happy if somebody explains this to me. With >>>> 'sin' it gives the same style for both inputs: >>>> >>>> In [46]: lambdarepr(sin(x).func) >>>> Out[46]: sin >>>> >>>> In [47]: lambdarepr(sin(x)) >>>> Out[47]: sin(x) >>>> >>> >>> Because sin is a Function and Function has a custom printer, which is >>> not true for Integral, which is just an ordinary type (default printer). >>> >>> >>>> >>>> Is this difference between function and integral expected? >>>> >>>> >>>> >>>> On 13 November 2011 02:09, Mateusz Paprocki <matt...@gmail.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> On 12 November 2011 17:00, krastanov.ste...@gmail.com < >>>>> krastanov.ste...@gmail.com> wrote: >>>>> >>>>>> Ok, but why are those printed differently (ipython --profile=sympy): >>>>>> >>>>>> In [34]: sin(x).func >>>>>> Out[34]: sympy.functions.elementary.trigonometric.sin >>>>>> >>>>>> In [35]: str(sin(x).func) >>>>>> Out[35]: sin >>>>>> >>>>>> In [39]: Integral(x, (x,0,1)).func >>>>>> Out[39]: sympy.integrals.integrals.Integral >>>>>> >>>>>> In [40]: str(Integral(x, (x,0,1)).func) >>>>>> Out[40]: <class 'sympy.integrals.integrals.Integral'> >>>>>> >>>>>> What should I do to have them print in the same manner? >>>>> >>>>> >>>>> This seems to be a problem with IPython's printing hooks. In CPython I >>>>> get: >>>>> >>>>> >>> from sympy import * >>>>> >>> init_printing() >>>>> >>> var('x') >>>>> x >>>>> >>> sin(x).func >>>>> sin >>>>> >>> str(sin(x).func) >>>>> sin >>>>> >>> Integral(x, (x, 0, 1)).func >>>>> <class 'sympy.integrals.integrals.Integral'> >>>>> >>> str(Integral(x, (x, 0, 1)).func) >>>>> <class 'sympy.integrals.integrals.Integral'> >>>>> >>>>> There reason for different output in IPython is that IPython not >>>>> always uses SymPy's pretty printer, but sometimes uses its own printing >>>>> hooks. It's better visible in the notebook where latex output is used >>>>> (e.g. >>>>> try to print data structures). >>>>> >>>>> >>>>>> >>>>>> >>>>>> On 13 November 2011 00:42, Aaron Meurer <asmeu...@gmail.com> wrote: >>>>>> >>>>>>> Hi. >>>>>>> >>>>>>> As far as I know, we don't have a function that does exactly that, >>>>>>> though I could be wrong. It would be nice to have one, though. >>>>>>> >>>>>>> On Sat, Nov 12, 2011 at 11:01 AM, Alexey U. Gudchenko < >>>>>>> pr...@goodok.ru> wrote: >>>>>>> > 12.11.2011 21:42, krastanov.ste...@gmail.com пишет: >>>>>>> >> This: >>>>>>> >> >>>>>>> >> import ast >>>>>>> >> ast.parse(repr(expression)) >>>>>>> >>>>>>> If you want a repr() representation, you should instead use srepr(). >>>>>>> (repr() is the same as str()). >>>>>>> >>>>>>> >> >>>>>>> >> will do the trick if repr is well coded. >>>>>>> >>>>>>> str() is coded so that it returns the same thing back from sympify(), >>>>>>> but it may not give the same thing directly, because you can have >>>>>>> int/int in an expression. srepr() should always give the same thing >>>>>>> back. >>>>>>> >>>>>>> >> >>>>>>> >> How much faith should I put in the repr strings in sympy? Or >>>>>>> there is >>>>>>> >> another way? >>>>>>> >> >>>>>>> >> On 12 November 2011 18:20, krastanov.ste...@gmail.com < >>>>>>> >> krastanov.ste...@gmail.com> wrote: >>>>>>> >> >>>>>>> >>> Is there any way to get the expression tree from an expression >>>>>>> (either >>>>>>> >>> using the python abstract syntax tree module or just some >>>>>>> tuples): >>>>>>> >>> >>>>>>> >>> for example >>>>>>> >>> >>>>>>> >>> get_tree( x+y*sin(z) ) would return >>>>>>> >>> >>>>>>> >>> (Add, x, (Mul, y, (Sin z))) >>>>>>> >>> >>>>>>> >>> or >>>>>>> >>> >>>>>>> >>> (BinOp, Add, ((Symbol, x), (BinOp, Mul, (blah blah blah)))) >>>>>>> >>> >>>>>>> >> >>>>>>> > >>>>>>> > I know only how to obtain the childes: >>>>>>> > >>>>>>> >>>> e = x+y*sin(z) + z >>>>>>> >>>> e.args >>>>>>> > (y*sin(z), z, x) >>>>>>> > >>>>>>> >>>> e.args[0] >>>>>>> >>>> y*sin(z) >>>>>>> > >>>>>>> >>>> e.args[0].args >>>>>>> > (y, sin(z)) >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > And test the classes: >>>>>>> > >>>>>>> >>>> e.is_Add >>>>>>> > True >>>>>>> > >>>>>>> >>>>>>> You can get the class name by using .func: >>>>>>> >>>>>>> In [25]: e = x + y >>>>>>> >>>>>>> In [26]: e.func >>>>>>> Out[26]: sympy.core.add.Add >>>>>>> >>>>>>> In [27]: e.func(*e.args) >>>>>>> Out[27]: x + y >>>>>>> >>>>>>> The invariant in [27] should always hold (except for possibly some >>>>>>> differences in assumptions). >>>>>>> >>>>>>> Aaron Meurer >>>>>>> >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > In other words, the somewhat tree of the expressions exists. >>>>>>> > >>>>>>> > How to represent expression-tree in other formats (strings or >>>>>>> > structures), I do not know. >>>>>>> > >>>>>>> > Regards. >>>>>>> > >>>>>>> > -- >>>>>>> > Alexey U. >>>>>>> > >>>>>>> > -- >>>>>>> > You received this message because you are subscribed to the Google >>>>>>> Groups "sympy" group. >>>>>>> > To post to this group, send email to sympy@googlegroups.com. >>>>>>> > To unsubscribe from this group, send email to >>>>>>> sympy+unsubscr...@googlegroups.com. >>>>>>> > For more options, visit this group at >>>>>>> http://groups.google.com/group/sympy?hl=en. >>>>>>> > >>>>>>> > >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "sympy" group. >>>>>>> To post to this group, send email to sympy@googlegroups.com. >>>>>>> To unsubscribe from this group, send email to >>>>>>> sympy+unsubscr...@googlegroups.com. >>>>>>> For more options, visit this group at >>>>>>> http://groups.google.com/group/sympy?hl=en. >>>>>>> >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "sympy" group. >>>>>> To post to this group, send email to sympy@googlegroups.com. >>>>>> To unsubscribe from this group, send email to >>>>>> sympy+unsubscr...@googlegroups.com. >>>>>> For more options, visit this group at >>>>>> http://groups.google.com/group/sympy?hl=en. >>>>>> >>>>> >>>>> Mateusz >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "sympy" group. >>>>> To post to this group, send email to sympy@googlegroups.com. >>>>> To unsubscribe from this group, send email to >>>>> sympy+unsubscr...@googlegroups.com. >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/sympy?hl=en. >>>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "sympy" group. >>>> To post to this group, send email to sympy@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> sympy+unsubscr...@googlegroups.com. >>>> For more options, visit this group at >>>> http://groups.google.com/group/sympy?hl=en. >>>> >>> >>> Mateusz >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sympy" group. >>> To post to this group, send email to sympy@googlegroups.com. >>> To unsubscribe from this group, send email to >>> sympy+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/sympy?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sympy" group. >> To post to this group, send email to sympy@googlegroups.com. >> To unsubscribe from this group, send email to >> sympy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sympy?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To post to this group, send email to sympy@googlegroups.com. > To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.