title: Inner workings of NumPy's logical_and.reduce
body: <p>I'm wondering how does <code>np.logical_and.reduce()</code> work.</p>
  
  <p>If I look at <a href="https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.logical_and.html" rel="nofollow noreferrer">logical_and</a> documentation it presents it as a function with certain parameters. But when it is used with <em>reduce</em> it doesn't get any arguments.</p>
  
  <p>When I look at <a href="https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.ufunc.reduce.html" rel="nofollow noreferrer">reduce</a> documentation I can see it has <em>ufunc.reduce</em> as it's definition. So I'm left wondering, what kind of mechanisms are used when I call <code>np.logical_and.reduce()</code>? What does <em>logical_and</em> as a <em>ufunc</em> represent in that snippet: a function, an object, or something else?</p>