From 8c69d1bb1bc698632888cc24a297a99b3e92a3ee Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Fri, 20 Aug 2021 16:05:12 +0100 Subject: [PATCH] MNT: Improve imglob performance by avoiding expensive imports (numpy/nibabel/etc) --- fsl/scripts/imglob.py | 27 +++++++++++++++++---------- fsl/utils/path.py | 3 +-- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/fsl/scripts/imglob.py b/fsl/scripts/imglob.py index 9aafce906..8c8c631e2 100644 --- a/fsl/scripts/imglob.py +++ b/fsl/scripts/imglob.py @@ -10,14 +10,10 @@ NIFTI/ANALYZE image files. import sys -import warnings +import glob +import itertools as it import fsl.utils.path as fslpath -# See atlasq.py for explanation -with warnings.catch_warnings(): - warnings.filterwarnings("ignore", category=FutureWarning) - import fsl.data.image as fslimage - usage = """ Usage: imglob [-extension/extensions] <list of names> @@ -25,8 +21,17 @@ Usage: imglob [-extension/extensions] <list of names> -extensions for image list with full extensions """.strip() -exts = fslimage.ALLOWED_EXTENSIONS -groups = fslimage.FILE_GROUPS + +# The lists below are defined in the +# fsl.data.image class, but are duplicated +# here for performance (to avoid import of +# nibabel/numpy/etc). +exts = ['.nii.gz', '.nii', '.img', '.hdr', '.img.gz', '.hdr.gz'] +"""List of supported image file extensions. """ + + +groups = [('.hdr', '.img'), ('.hdr.gz', '.img.gz')] +"""List of known image file groups (image/header file pairs). """ def imglob(paths, output=None): @@ -76,8 +81,10 @@ def imglob(paths, output=None): # hdr and img and otherwise) that match for path in paths: try: - path = fslimage.removeExt(path) - imgfiles.extend(fslimage.addExt(path, unambiguous=False)) + path = fslpath.removeExt(path, allowedExts=exts) + imgfiles.extend(fslpath.addExt(path, + allowedExts=exts, + unambiguous=False)) except fslpath.PathError: continue diff --git a/fsl/utils/path.py b/fsl/utils/path.py index 09546f4b2..bbaaa206f 100644 --- a/fsl/utils/path.py +++ b/fsl/utils/path.py @@ -37,8 +37,6 @@ import re from typing import Sequence, Tuple, Union -from fsl.utils.platform import platform - PathLike = Union[str, pathlib.Path] @@ -596,6 +594,7 @@ def winpath(path): This requires WSL2 which supports the ``\\wsl$\\`` network path. wslpath is assumed to be an absolute path. """ + from fsl.utils.platform import platform # pylint: disable=import-outside-toplevel # noqa: E501 if not platform.fslwsl: return path else: -- GitLab