On Fri, Jun 20, 2008 at 10:31 AM, Ondrej Certik <[EMAIL PROTECTED]> wrote:
> On Thu, Jun 19, 2008 at 3:20 PM, Riccardo Gori <[EMAIL PROTECTED]> wrote:
>>
>> Hello,
>> I'm working at fixing issue 888. It is easy to fix but I don't understand why
>> in sympy/utilities/lambdify.py I found that lambdastr function does use
>> __str__ for expr.
>>
>> def lambdastr(args, expr):
>>    """
>>    Returns a string that can be evaluated to a lambda function.
>>
>>    >>> from sympy import symbols
>>    >>> x,y,z = symbols('xyz')
>>    >>> lambdastr(x, x**2)
>>    'lambda x: (x**2)'
>>    >>> lambdastr((x,y,z), [z,y,x])
>>    'lambda x,y,z: ([z, y, x])'
>>    """
>>    # Transform everything to strings.
>>    expr = str(expr)
>>    if isinstance(args, str):
>>        pass
>>    elif hasattr(args, "__iter__"):
>>        args = ",".join(str(a) for a in args)
>>    else:
>>        args = str(args)
>>
>>    return "lambda %s: (%s)" % (args, expr)
>>
>> But in python doc we can read:
>>
>> (http://docs.python.org/ref/customization.html)
>> ################################
>> __repr__(       self)
>>    Called by the repr() built-in function and by string conversions (reverse
>> quotes) to compute the ``official'' string representation of an object. If at
>> all possible, this should look like a valid Python expression that could be
>> used to recreate an object with the same value (given an appropriate
>> environment). If this is not possible, a string of the form "<...some useful
>> description...>" should be returned. The return value must be a string
>> object. If a class defines __repr__() but not __str__(), then __repr__() is
>> also used when an ``informal'' string representation of instances of that
>> class is required.
>>
>>    This is typically used for debugging, so it is important that the
>> representation is information-rich and unambiguous.
>>
>> __str__(        self)
>>    Called by the str() built-in function and by the print statement to
>> compute the ``informal'' string representation of an object. This differs
>> from __repr__() in that it does not have to be a valid Python expression: a
>> more convenient or concise representation may be used instead. The return
>> value must be a string object.
>> ################################
>>
>> As I understand __repr__ should be used to have a pythonic valid expression
>> and __str__ should be a normal string. But sympy Basic __repr__
>> implementation returns unicode text with repr_level_2 so we can't use it in
>> eval().
>>
>> This is also discussed in issue 697.
>>
>> I suggest to change this behaviour, so we can make lambdify more robust. Is
>> someone working at this?
>
> Hi Riccardo,
>
> sorry for a late reply, I am at a PMAA08[1] conference now, so I get
> to emails sporadically.

[1] http://www.dcs.bbk.ac.uk/pmaa08/

--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sympy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to