On Thu, Apr 20, 2017 at 6:12 AM, Francesco Bonazzi <franz.bona...@gmail.com> wrote: > > > On Wednesday, 19 April 2017 21:51:08 UTC+2, Aaron Meurer wrote: >> >> Performance is a valid concern. We should definitely check that. >> >> The __slots__ part I don't know. That could probably be done differently. >> > > I didn't like that part too. Has anyone a better idea? > >> Regarding the implementation itself, how would you do it? The ability >> to make Mul or Add do custom stuff for custom objects is a very >> commonly requested feature. Would you keep it unimplemented, or do it >> some other way? > > > Yes, we really need this feature. > > Ideally we want to extend such mechanism to functions as well.
For functions, dispatch works nicely. In fact, most functions are single-argument, so you only need single dispatch, which is basically SymPy's _eval_*thing* mechanism. We could extend Function so that it dispatches before eval() is called on the subclass (say, sin(x) could call x._eval_function(sin)). At least, that should work when nargs = 1. For nargs > 1, you need something more complicated. The problem with Add and Mul is that they not only take multiple arguments, but an arbitrary number, so a true multiple dispatch system becomes unwieldy. Francesco's solution maybe isn't the most general, but it seems simple, and capable of handling the use-cases I know of. Aaron Meurer > > >> >> Aaron Meurer >> >> On Wed, Apr 19, 2017 at 3:46 PM, Ronan Lamy <ronan...@gmail.com> wrote: >> > Le 19/04/17 à 19:00, Francesco Bonazzi a écrit : >> >> >> >> >> >> >> >> On Wednesday, 19 April 2017 17:05:08 UTC+2, Ronan Lamy wrote: >> >> >> >> Le 18/04/17 à 21:28, Francesco Bonazzi a écrit : >> >> > I'm gonna merge this PR soon: >> >> > >> >> > https://github.com/sympy/sympy/pull/12508 >> >> <https://github.com/sympy/sympy/pull/12508> >> >> >> >> Wow, that's horrifying! Good luck maintaining it! >> >> >> >> >> >> Why is it horrifying? >> > >> > >> > Well, using __new__ in the first place is a big WTF (and yes, I know >> > that >> > sympy is pretty much stuck with it forever), but layering a hook to a >> > whole >> > new programming paradigm inside it is evil genius. Bonus horror points >> > for >> > introspecting __slots__ and doing such fundamental changes to solve a >> > minor >> > issue. >> > >> > And BTW, has anybody checked the impact on performance? IIUC, that adds >> > a >> > non-trivial amount of work to every Add or Mul instantiation. >> > >> > That being said, don't mind me. As long as I don't have to debug it, >> > that >> > code won't bother me. >> > >> > -- >> > 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+un...@googlegroups.com. >> > To post to this group, send email to sy...@googlegroups.com. >> > Visit this group at https://groups.google.com/group/sympy. >> > To view this discussion on the web visit >> > >> > https://groups.google.com/d/msgid/sympy/086034c8-3ad1-4059-7424-d358f3de9b92%40gmail.com . >> > >> > For more options, visit https://groups.google.com/d/optout. > > -- > 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 https://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/03cf6d1f-83f6-4844-9b5c-753e947f90ce%40googlegroups.com . > > For more options, visit https://groups.google.com/d/optout. -- 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 https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6JE_1tF9GnYv6eJY8enBnLBT5K82dBKx0FHhvC%2BxKOzOg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.