Good catch, I think the latter failing is because np.add.reduce ends up calling np.ufunc.reduce.__get__(np.add), and builtin_function.__get__ doesn’t appear to do any caching. I suppose caching bound methods would just be a waste of time. == would work just fine in my suggestion above, it seems - irrespective of the resolution of the discussion on python-dev.
Eric On Fri, 29 Jun 2018 at 18:24 Stephan Hoyer <sho...@gmail.com> wrote: > On Thu, Jun 28, 2018 at 5:36 PM Eric Wieser <wieser.eric+nu...@gmail.com> > wrote: > >> Another option would be to directly compare the methods against known >> ones: >> >> obj = func.__self__ >> if isinstance(obj, np.ufunc): >> if func is obj.reduce: >> got_reduction() >> >> I'm not quite sure why, but this doesn't seem to work with current ufunc > objects: > > >>> np.add.reduce == np.add.reduce # OK > True > > >>> np.add.reduce is np.add.reduce # what?!? > False > > Maybe this is a bug? There's been some somewhat related discussion > recently on python-dev: > https://mail.python.org/pipermail/python-dev/2018-June/153959.html > > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@python.org > https://mail.python.org/mailman/listinfo/numpy-discussion >
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion