From 557f53b74ad4ffb08dc4226c9ff65361dcf67af5 Mon Sep 17 00:00:00 2001 From: Blampey Quentin Date: Fri, 5 Dec 2025 16:51:08 +0100 Subject: [PATCH 1/4] lazy torch import --- src/spatialdata/dataloader/__init__.py | 30 ++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/spatialdata/dataloader/__init__.py b/src/spatialdata/dataloader/__init__.py index 819ab58ee..e6232f7dc 100644 --- a/src/spatialdata/dataloader/__init__.py +++ b/src/spatialdata/dataloader/__init__.py @@ -1,4 +1,26 @@ -try: - from spatialdata.dataloader.datasets import ImageTilesDataset -except ImportError: - ImageTilesDataset = None # type: ignore[assignment, misc] +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: + from spatialdata.dataloader.datasets import ImageTilesDataset as _ImageTilesDataset + + +class ImageTilesDataset: # noqa: D101 + _target_class: type[_ImageTilesDataset] | None = None + + def __new__(cls, *args: Any, **kwargs: Any) -> _ImageTilesDataset: # noqa: D102 + if cls._target_class is None: + try: + from spatialdata.dataloader.datasets import ( + ImageTilesDataset as ActualImageTilesDataset, + ) + + cls._target_class = ActualImageTilesDataset + + except ImportError as error: + raise ImportError( + "ImageTilesDataset could not be imported. This usually means the 'torch' dependency is missing." + ) from error + + return cls._target_class(*args, **kwargs) From 56c9e7e0c4d27321b44aec92cdb73fb3f0523e03 Mon Sep 17 00:00:00 2001 From: Quentin Blampey Date: Tue, 23 Dec 2025 10:57:33 +0100 Subject: [PATCH 2/4] use @Zethson implementation --- src/spatialdata/dataloader/__init__.py | 27 +++++++++++--------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/spatialdata/dataloader/__init__.py b/src/spatialdata/dataloader/__init__.py index e6232f7dc..a0196f92f 100644 --- a/src/spatialdata/dataloader/__init__.py +++ b/src/spatialdata/dataloader/__init__.py @@ -2,25 +2,20 @@ from typing import TYPE_CHECKING, Any -if TYPE_CHECKING: - from spatialdata.dataloader.datasets import ImageTilesDataset as _ImageTilesDataset +import spatialdata +if TYPE_CHECKING: + from spatialdata.dataloader.datasets import ImageTilesDataset -class ImageTilesDataset: # noqa: D101 - _target_class: type[_ImageTilesDataset] | None = None +__all__ = [ + "ImageTilesDataset", +] - def __new__(cls, *args: Any, **kwargs: Any) -> _ImageTilesDataset: # noqa: D102 - if cls._target_class is None: - try: - from spatialdata.dataloader.datasets import ( - ImageTilesDataset as ActualImageTilesDataset, - ) - cls._target_class = ActualImageTilesDataset +def __getattr__(attr_name: str) -> ImageTilesDataset | Any: + if attr_name == "ImageTilesDataset": + from spatialdata.dataloader.datasets import ImageTilesDataset - except ImportError as error: - raise ImportError( - "ImageTilesDataset could not be imported. This usually means the 'torch' dependency is missing." - ) from error + return ImageTilesDataset - return cls._target_class(*args, **kwargs) + return getattr(spatialdata.dataloader, attr_name) From eceb6d02a5090d822b38e36233468327ecaf3d70 Mon Sep 17 00:00:00 2001 From: Quentin Blampey Date: Tue, 23 Dec 2025 11:00:02 +0100 Subject: [PATCH 3/4] remove import from future --- src/spatialdata/dataloader/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/spatialdata/dataloader/__init__.py b/src/spatialdata/dataloader/__init__.py index a0196f92f..e8524a2b4 100644 --- a/src/spatialdata/dataloader/__init__.py +++ b/src/spatialdata/dataloader/__init__.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import TYPE_CHECKING, Any import spatialdata From 360fdc475233bbff15420dd0712ce1a39eecdaf6 Mon Sep 17 00:00:00 2001 From: Quentin Blampey Date: Tue, 23 Dec 2025 11:13:30 +0100 Subject: [PATCH 4/4] add again from __future__ import annotations --- src/spatialdata/dataloader/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/spatialdata/dataloader/__init__.py b/src/spatialdata/dataloader/__init__.py index e8524a2b4..a0196f92f 100644 --- a/src/spatialdata/dataloader/__init__.py +++ b/src/spatialdata/dataloader/__init__.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING, Any import spatialdata