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.