The numpy devs did a bad thing. Don't be like the numpy devs.
The current (version 1.24) docs for numpy.percentile
say this about
the method
keyword argument:
Changed in version 1.22.0: This argument was previously called "interpolation" ...
They renamed a keyword argument. So if you had working code that did
np.percentile( ...., interpolation=xxx, ....)
then running it in the most recent numpy would throw lots of Deprecation warnings at you, and presumably eventually it will stop working completely. This isn't great. The obvious answer is to change the code to
np.percentile( ...., method=xxx, ....)
But then if you run it on a machine with an older numpy install, then
it won't work at all! There isn't a trivial method for users of numpy
to conform to this change without breaking stuff. In other words, the
numpy devs gave their users pointless homework. I just did this
homework with this commit to mrcal. It creates a percentile_compat()
function that figures out which flavor of argument we should use, and
uses it. Here it is:
def percentile_compat(*args, **kwargs): r'''Wrapper for np.percentile() to handle their API change In numpy 1.24 the "interpolation" kwarg was renamed to "method". I need to pass the right thing to work with both old and new numpy. This function tries the newer method, and if that fails, uses the old one. The test is only done the first time. It is assumed that this is called with the old 'interpolation' key. ''' if not 'interpolation' in kwargs or \ percentile_compat.which == 'interpolation': return np.percentile(*args, **kwargs) kwargs_no_interpolation = dict(kwargs) del kwargs_no_interpolation['interpolation'] if percentile_compat.which == 'method': return np.percentile(*args, **kwargs_no_interpolation, method = kwargs['interpolation']) # Need to detect try: result = np.percentile(*args, **kwargs_no_interpolation, method = kwargs['interpolation']) percentile_compat.which = 'method' return result except: percentile_compat.which = 'interpolation' return np.percentile(*args, **kwargs) percentile_compat.which = None
Please take it and use it. I give up all copyright.