Hi,

On 12 November 2011 17:16, [email protected] <
[email protected]> 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 <[email protected]> wrote:
>
>> Hi,
>>
>> On 12 November 2011 17:00, [email protected] <
>> [email protected]> 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 <[email protected]> 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 <[email protected]>
>>>> wrote:
>>>> > 12.11.2011 21:42, [email protected] пишет:
>>>> >> 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, [email protected] <
>>>> >> [email protected]> 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 [email protected].
>>>> > To unsubscribe from this group, send email to
>>>> [email protected].
>>>> > 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 [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected].
>>>> 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 [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> 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 [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> 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 [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to