From cc702436c38f7e957d473bc7ca359c064318f384 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Tue, 27 Feb 2018 11:55:11 +0000 Subject: [PATCH] deprecated imagewrapper.naninfrange --- fsl/data/imagewrapper.py | 57 +++++++++------------------------------- 1 file changed, 13 insertions(+), 44 deletions(-) diff --git a/fsl/data/imagewrapper.py b/fsl/data/imagewrapper.py index d2aae5540..edb4df4e4 100644 --- a/fsl/data/imagewrapper.py +++ b/fsl/data/imagewrapper.py @@ -41,11 +41,14 @@ import logging import collections import itertools as it +import deprecation + import numpy as np import nibabel as nib -import fsl.utils.notifier as notifier -import fsl.utils.idle as idle +import fsl.utils.notifier as notifier +import fsl.utils.naninfrange as nir +import fsl.utils.idle as idle log = logging.getLogger(__name__) @@ -137,7 +140,6 @@ class ImageWrapper(notifier.Notifier): .. autosummary:: :nosignatures: - naninfrange isValidFancySliceObj canonicalSliceObj sliceObjToSliceTuple @@ -469,7 +471,7 @@ class ImageWrapper(notifier.Notifier): oldvlo, oldvhi = self.__volRanges[vol, :] voldata = data[..., vi] - newvlo, newvhi = naninfrange(voldata) + newvlo, newvhi = nir.naninfrange(voldata) if np.isnan(newvlo) or \ (not np.isnan(oldvlo) and oldvlo < newvlo): @@ -487,7 +489,7 @@ class ImageWrapper(notifier.Notifier): # Calculate the new known data # range over the entire image # (i.e. over all volumes). - newmin, newmax = naninfrange(self.__volRanges) + newmin, newmax = nir.naninfrange(self.__volRanges) oldmin, oldmax = self.__range self.__range = (newmin, newmax) @@ -713,47 +715,14 @@ class ImageWrapper(notifier.Notifier): self.__updateDataRangeOnWrite(slices, values) +@deprecation.deprecated(deprecated_in='1.7.0', + removed_in='2.0.0', + details='Moved to fsl.utils.naninfrange') def naninfrange(data): - """Returns the minimum and maximum values in the given ``numpy`` array, - ignoring ``nan`` and ``inf`` values. - - The ``numpy.nanmin``/``numpy.nanmax`` functions do not handle - positive/negative infinity, so if such values are in the data, we need to - use an alternate approach to calculating the minimum/maximum. - """ + """Deprecated - moved to :mod:`fsl.utils.naninfrange`. """ - if not np.issubdtype(data.dtype, np.floating): - return data.min(), data.max() - - # But np.nanmin/nanmax are substantially - # faster than the alternate, so we try it - # first. - dmin = np.nanmin(data) - dmax = np.nanmax(data) - - # If there are no nans/infs in the data, - # we can just use nanmin/nanmax - if np.isfinite(dmin) and np.isfinite(dmax): - return dmin, dmax - - # The entire array contains nans - if np.isnan(dmin): - return dmin, dmin - - # Otherwise we need to calculate min/max - # only on finite values. This is the slow - # option. - - # Find all finite values - finite = np.isfinite(data) - - # Try to calculate min/max on those values. - # An error will be raised if there are no - # finite values in the array - try: - return data[finite].min(), data[finite].max() - except Exception: - return np.nan, np.nan + from fsl.utils.naninfrange import naninfrange + return naninfrange(data) def isValidFancySliceObj(sliceobj, shape): -- GitLab