[SciPy-Dev] special.factorial accepting floats

Robert Kern robert.kern at gmail.com
Fri May 1 00:44:13 EDT 2020


On Thu, Apr 30, 2020 at 11:36 PM Andrew Nelson <andyfaff at gmail.com> wrote:

> I came across this because I was setting up a CI run against Python3.9. On
> Py3.9 there is a DeprecationWarning if `math.factorial` is supplied a float:
>
> On Py3.8:
> math.factorial(2.0) --> 2
>
> On Py3.9:
> math.factorial(2.0) --> 2 and emits a "DeprecationWarning: Using
> factorial() with floats is deprecated"
>
> Presumably with Py >> 3.9:
> math.factorial(2.0) will raise an Exception
>
> As you say, `math.factorial` is used by `special.factorial` for
> `exact=True`. When Python3.9 is released various tests will start to fail
> because of that DeprecationWarning.
> I know it's early days, I'm just trying to be proactive.
>
> - how to modify tests to account for that DeprecationWarning when
> `special.factorial` is supplied a float with `exact=True`
> - how test code and special.factorial code has to be modified for a post
> DeprecationWarning period.
>

I'd probably just wrap `math.factorial()` with something that does the
current `ValueError` check when a non-integral float is passed and just
casts to `int` otherwise before passing it onto `math.factorial()`. If
passing integral floats made it into our tests, it's surely made it into
real code.

-- 
Robert Kern
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20200501/28d03c90/attachment.html>


More information about the SciPy-Dev mailing list