On Thu, Apr 30, 2020 at 11:36 PM Andrew Nelson <andyfaff@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