2013/7/4 Aaron Meurer <[email protected]>

> On Wed, Jul 3, 2013 at 7:27 PM, Ronan Lamy <[email protected]> wrote:
> > 2013/7/4 Aaron Meurer <[email protected]>
> >>
> >> On Wed, Jul 3, 2013 at 5:40 PM, Ronan Lamy <[email protected]>
> wrote:
> >> > 2013/7/3 Ondřej Čertík <[email protected]>
> >> >>
> >> >> On Wed, Jul 3, 2013 at 1:48 PM, Aaron Meurer <[email protected]>
> >> >> wrote:
> >> >>
> >> >> Why wouldn't simple type based dispatch work?
> >> >> You might be right, I just want to understand the problem more.
> >> >>
> >> >> To answer Aaron's question:
> >> >>
> >> >> On Wed, Jul 3, 2013 at 12:58 PM, Aaron Meurer <[email protected]>
> >> >> wrote:
> >> >> > So, going back to what we discussed the first time we met in Los
> >> >> > Alamos, how would you reimplement something like the oo logic so
> that
> >> >> > it lives entirely in the Infinity class, not in Add.flatten (say
> for
> >> >> > simplicity, oo + 3 should go to oo, but oo + 3*I should remain as
> oo
> >> >> > +
> >> >> > 3*I)?
> >> >>
> >> >> This, and another example is x + O(x). Let's stick to oo + 3.
> >> >
> >> >
> >> > x + O(x) is a bad example, because it should really not be represented
> >> > by an
> >> > Add.
> >> >
> >> >> This is a very good question and it is one of the details that I
> don't
> >> >> know the answer 100% yet.
> >> >> But I feel it is solvable.
> >> >>
> >> >> I think the best would be to create a demo (from scratch) where we
> can
> >> >> play with these ideas. Hopefully I'll get to this eventually.
> >> >
> >> >
> >> > How about this: https://github.com/rlamy/sympy/commits/binop ?
> >>
> >> It's tough to mull through a list of commits,
> >
> >
> > You could just look at sympy/core/binop.py, it's quite short.
>
> OK, this is what you really want to look at
> https://github.com/rlamy/sympy/compare/binop.
>
> >
> >>
> >> so let me just ask you
> >> some questions about it (I know you posted this branch a while ago,
> >> but I forgot the details).
> >>
> >> - Does it handle nary operations or just binary?
> >
> >
> > Just binary.
>
> Any thoughts how to extend it to nary?
>

The algorithm can trivially be extended to higher arities, by doing a
triple (or quadruple, or ...) loop. Making it work for arbitrary (fixed)
arity wouldn't be hard either. The only issue is that complexity is
O(len(mro)**n).

>> - What about *args like Mul.flatten?
> >
> >
> > It doesn't do anything about it.
>
> Ditto here.
>
 I guess that Mul.flatten should just do the equivalent of reduce(mul,
args).

>
> >> - If two types register dispatchers against one another, what are the
> >> precedence rules?
> >
> >
> > There are no precedence rules. If the dispatcher doesn't find a unique
> most
> > derived implementation (e.g. if it finds implementations for types (A1,
> A2)
> > and (B1, B2) such that A1 strictly subclasses B1 and B2 strictly
> subclasses
> > A2) then it raises an error.
>
> OK, but there is some kind of precedence on subclasses, right?
>

No, it just tries all possible combinations of superclasses of the
arguments, and finds the minimum of the set of registered implementations
for the partial order "is a subclass of". It's hard to be more clever than
that and still do the right thing wrt. multiple inheritance.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to