On Wed, Jul 3, 2013 at 7:58 PM, Ronan Lamy <[email protected]> wrote: > 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.
It's not enough to just use the mro order? That's what everything else uses (i.e., attribute lookup), so it seems to me that that should be the correct way. But you've probably thought about it more than I have, so I wouldn't be surprised if I am missing something with it. Aaron Meurer > > -- > 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. > > -- 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.
