<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">Another option would be to directly compare the methods against known ones:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">obj = func.__self__
if isinstance(<span style="font-size:11.05px">obj</span>, np.ufunc):
    if func is obj.reduce:
        got_reduction()
</code></pre><p style="margin:0px 0px 1.2em!important">Eric</p>
<div title="MDH:QW5vdGhlciBvcHRpb24gd291bGQgYmUgdG8gZGlyZWN0bHkgY29tcGFyZSB0aGUgbWV0aG9kcyBh
Z2FpbnN0IGtub3duIG9uZXM6PGJyPjxicj5gYGA8YnI+c2VsZiA9IGZ1bmMuX19zZWxmX188ZGl2
PmlmIGlzaW5zdGFuY2Uoc2VsZiwgbnAudWZ1bmMpOjxicj4mbmJzcDsgJm5ic3A7IGlmIGZ1bmMg
aXMgc2VsZi5yZWR1Y2U6PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7IHBhc3M8L2Rpdj48ZGl2PmBg
YDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+RXJpYzwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">‚Äč</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, 28 Jun 2018 at 17:19 Stephan Hoyer <<a href="mailto:shoyer@gmail.com">shoyer@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Thu, Jun 28, 2018 at 1:12 PM Marten van Kerkwijk <<a href="mailto:m.h.vankerkwijk@gmail.com" target="_blank">m.h.vankerkwijk@gmail.com</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>For C classes like the ufuncs, it seems `__self__` is defined for methods as well (at least, `np.add.reduce.__self__` gives `np.add`), but not a `__func__`. There is a `__name__` (="reduce"), though, which means that I think one can still retrieve what is needed (obviously, this also means `__array_ufunc__` could have been simpler...)</div></div></div></div></blockquote><div><br></div></div></div><div dir="ltr"><div class="gmail_quote"><div>Good point!</div><div><br></div><div>I guess this means we should encourage using __name__ rather than __func__. I would not want to preclude refactoring classes from Python to C/Cython.</div></div></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div>