Hi again,

On Tue, 2022-10-25 at 11:41 +0200, Sebastian Berg wrote:
> Hi all,
> 
> I would like to expose more of the ufunc internals in the following
> PR:
> 
>     https://github.com/numpy/numpy/pull/22422/


Just to note that this PR is now merged and scheduled for release
(without any serious changes from the old announcement).  That is
adding a new function which can be called with: 

    np.add.resolve_dtypes((np.dtype("f8"), np.dtype("f4"), None))

and then returns the actual dtypes used (most importantly the output
one that is passed as `None` there).

I hope the new API will be useful, but any last-minute concerns are of
course welcome.  We can always make it a bit more convenient later.  It
is really targeted at libraries or users like Numba.

Cheers,

Sebastian


> 
> There are three new proposed functions.  I hope the first one can be
> generally useful while the last two are very specific (and thus
> underscored), but will hopefully become useful e.g. for Numba or
> numexpr.
> 
> 
> ufunc.resolve_dtypes(dtypes, *, signature=None, casting=None,
> reduction=False)
> -----------------------------------------------------------
> 
> Allows you to find out what dtypes NumPy's implementation will use
> without executing a ufunc.  For the full docs, see:
> 
>     
> https://output.circle-artifacts.com/output/job/c8f72dd5-f8fb-448c-8fd8-d618258aedcb/artifacts/0/doc/build/html/reference/generated/numpy.ufunc.resolve_dtypes.html
> 
> Example from the docs:
> 
>     >>> int32 = np.dtype("int32")
>     >>> float32 = np.dtype("float32")
> 
>     The typical ufunc call does not pass an output dtype.  `np.add`
> has two
>     inputs and one output, so leave the output as ``None`` (not
> provided):
> 
>     >>> np.add.resolve_dtypes((int32, float32, None))
>     (dtype('float64'), dtype('float64'), dtype('float64'))
> 
>     The loop found uses "float64" for all operands (including the
> output), the
>     first input would be cast.
> 
>     ``resolve_dtypes`` supports "weak" handling for Python scalars by
> passing
>     ``int``, ``float``, or ``complex``:
> 
>     >>> np.add.resolve_dtypes((float32, float, None))
>     (dtype('float32'), dtype('float32'), dtype('float32'))
> 
>     Where the Python ``float`` behaves samilar to a Python value
> ``0.0``
>     in a ufunc call.  (See :ref:`NEP 50 <NEP50>` for details.)
> 
> 
> ufunc._resolve_dtypes_and_context(dtypes, *, signature=None,
> casting=None, reduction=False)
> -------------------------------------------------------------
> Identical to the above, but it additionally returns a "call_info"
> which
> allows access to the actual ufunc implmentation.
> 
> 
> ufunc._get_loop(call_info, /, *, fixed_strides=None)
> ----------------------------------------------------
> Second function that is passed the `call_info` from the previous one.
> Both would normally be called (this is because it is the way NumPy
> must
> do it internally and allows most flexibility).
> 
> After doing both calls, `call_info` can be used from C to directly
> access the C implementation.  Flux in the C-API are expected (for
> now).
> But for example Numba already releases new versions when NumPy
> releases
> a new version.
> 
> 
> Cheers,
> 
> Sebastian
> 
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: sebast...@sipsolutions.net
> 


_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to