On Dec 28, 10:12 am, "Ondrej Certik" <[EMAIL PROTECTED]> wrote:
> On Dec 28, 2007 10:18 AM, Pearu Peterson <[EMAIL PROTECTED]> wrote:
>
>
> > Try deriving Foo from sympy.Basic. Actually the __mul__ code in sympy
> > is broken as it should return NotImplemented when it gets an
> > unknown (to sympy) object as an right hand side.
>
> It raises:
>
> Traceback (most recent call last):
> File "t.py", line 21, in ?
> y*f # does not work
> File "/home/ondra/sympy/sympy/core/methods.py", line 32, in __mul__
> return Basic.Mul(self, other)
> File "sympy/core/basic_methods.py", line 122, in wrapper
> func_cache_it_cache[k] = r = func(*args, **kw_args)
> File "/home/ondra/sympy/sympy/core/operations.py", line 19, in __new__
> c_part, nc_part, lambda_args, order_symbols =
> cls.flatten(map(Basic.sympify, args))
> File "sympy/core/basic.py", line 270, in sympify
> raise ValueError("%r is NOT a valid SymPy expression" % a)
> ValueError: '<__main__.Foo instance at 0xb7dbf14c>' is NOT a valid
> SymPy expression
>
> So maybe we could check in the mul, if a ValueError exception gets
> raised in sympify and reraise NotImplemented instead?
sympify(obj) should try obj.__sympy__() if obj is unknown to sympy.
If that fails then sympify should raise TypeError.
For __mul__ method the sympify should take an optional argument,
say `return_on_unsuccess=NotImplemented`, and return NotImplemented.
Note that returning NotImplemented is not raising
NotImplementedError.
Pearu
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---