On Wed, Feb 19, 2014 at 7:14 PM, Matthew Rocklin <[email protected]> wrote: > My guess is that Mul and Add will always just create Add and Mul objects. > Other functions will then be used to perform various simplifications on > these lists. > > This is how sets work with Union and Intersection. You call Union(a, b, c, > d) where a, b, c, d are all sets. This makes a Union object containing > these four sets. If evaluate=True then Union asks all of a, b, c, d if they > know how to simplify themselves against any of the others. This might not > be maximally efficient but it works surprisingly well and is very > extensible. The organization of methods would definitely improve through > multiple dispatch.
Efficiency does matter in the core, though. We may need to make tradeoffs, or else somehow heavily optimize the common case. > > Regarding MatrixMul, QMul, I think that multiple dispatch would allow us to > get rid of op_priority. I think that need MatrixMul and QMul for as long as > Mul assumes its arguments are scalars. Although maybe multiple dispatch > helps to isolate some of that logic. Yes, getting rid of op_priority is a goal. Aaron Meurer > > > On Wed, Feb 19, 2014 at 5:01 PM, Aaron Meurer <[email protected]> wrote: >> >> SymPy already has a pretty widely used single dispatch system (the >> _eval_* methods). Multiple dispatch would be useful for any operation >> that has more than one argument. I hardly have to convince you of the >> advantage of this approach. >> >> The challenge is operations like Add and Mul that take an arbitrary >> number of arguments. How can we reasonably dispatch the logic in >> Mul.flatten so that it's not such a mess (and also so that we don't >> need things like MatrixMul or QMul)? >> >> I haven't looked at the upapjojr pull request. My understanding is >> that it doesn't handle the Mul case, which is the one that most >> interests me. >> >> Aaron Meurer >> >> On Wed, Feb 19, 2014 at 2:04 PM, Matthew Rocklin <[email protected]> >> wrote: >> > I've recently become interested in multiple dispatch. I know that this >> > has >> > been a topic of conversation before. Can anyone point me to relevant >> > threads? I've gone through the recent PR by @Upapjojr >> > https://github.com/sympy/sympy/pull/2680 . >> > >> > In particular: >> > >> > 1. What are the strong use cases for multiple dispatch within SymPy? >> > >> > 2. What particular challenges does SymPy pose? >> > >> > 3. What are expected benefits/drawbacks? >> > >> > >> > >> > -Matt >> > >> > -- >> > 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. > > > -- > 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.
