If it is possible to catch warnings then we could catch an MD warning and raise an error in SymPy if we wanted. My PRs introducing MD into SymPy include a tiny sympy.dispatch module rather than using MD directly. There is little stopping us from tailoring some of the behavior to fit SymPy's priorities.
On Wed, Apr 2, 2014 at 3:33 PM, Matthew Rocklin <mrock...@gmail.com> wrote: > Not all of the ties result from ambiguities. For example the signatures >>> (int,) and (float,) tie. Which should come first in the toposort? >>> >> >> For what input? >> > > How MD operates now is that it forms a graph of signatures with an edge > between two signatures if one is more specific than the other. It then > topologically sorts this graph to form a linear ordering. When inputs come > in we get their types and then compare those types against each of the type > signatures in the linear ordering from most to least specific (by the > topological sort). Once we find a match we return the function that was > registered with the matching signature. In this way we get to use > issubclass and are also assured that we aren't missing a more specific > signature. > > So, in the float/int case our graph is just two disconnected nodes and our > ordering might look like > > [(int,), (float,)] > > When an input comes in, like 1.0, we get it's types, (float,), and then > ask issubclass(float, int), get no, and move on to ask if issubclass(float, > float). This works so we return the function associated with (float,). > > (Although actually we first just check in a dict to see if we have the > type signature exactly, which we do in this case, so we return in constant > time) > > >> I would definitely raise an exception here. You can maybe play with ways >> for people to tell the dispatcher how they want it to break ties, but the >> default implementation shouldn't take sides. >> > > I can see the reasoning here but slightly disagree. Often both > implementations are perfectly valid and you should just pick one. This is > also consistent with the standard set out by the Julia Language, from which > I'm stealing a good amount of inspiration. > > Couldn't you resolve the ambiguity by adding additional dispatch against >> (float, float)? >> > > Yes, this is what is suggested automatically by MD. Perhaps I don't > understand your comment. > > >> I don't think it's right to do this check at registry time. >> > > I'm not sure that I understand this either. When would you do the check? > > -- 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 sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAJ8oX-FZ%3DPFqaiePYfu%3Db8MpNdYEAxeuXFfMwpCJawh0SXwzgQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.