From 85cc4b289705d938c701398075b8eb61a3cfc46f Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 14:38:33 +0100 Subject: [PATCH 1/8] Change all `from` `typing` imports --- glass/_array_api_utils.py | 5 +++-- glass/_rng.py | 4 ++-- glass/_types.py | 30 +++++++++++++++----------- glass/algorithm.py | 4 ++-- glass/arraytools.py | 4 ++-- glass/cosmology.py | 4 ++-- glass/fields.py | 6 +++--- glass/galaxies.py | 4 ++-- glass/grf/_core.py | 6 +++--- glass/grf/_solver.py | 4 ++-- glass/grf/_transformations.py | 4 ++-- glass/harmonics.py | 4 ++-- glass/healpix.py | 4 ++-- glass/jax.py | 4 ++-- glass/lensing.py | 21 +++++++++--------- glass/observations.py | 4 ++-- glass/points.py | 5 +++-- glass/shapes.py | 4 ++-- glass/shells.py | 4 ++-- glass/user.py | 4 ++-- tests/benchmarks/test_arraytools.py | 4 ++-- tests/benchmarks/test_fields.py | 4 ++-- tests/benchmarks/test_galaxies.py | 4 ++-- tests/benchmarks/test_harmonics.py | 4 ++-- tests/benchmarks/test_lensing.py | 4 ++-- tests/benchmarks/test_points.py | 4 ++-- tests/benchmarks/test_shapes.py | 4 ++-- tests/benchmarks/test_shells.py | 4 ++-- tests/core/grf/test_core.py | 4 ++-- tests/core/grf/test_solver.py | 4 ++-- tests/core/grf/test_transformations.py | 4 ++-- tests/core/test_algorithm.py | 4 ++-- tests/core/test_arraytools.py | 4 ++-- tests/core/test_fields.py | 4 ++-- tests/core/test_galaxies.py | 4 ++-- tests/core/test_harmonics.py | 4 ++-- tests/core/test_healpix.py | 4 ++-- tests/core/test_lensing.py | 4 ++-- tests/core/test_observations.py | 4 ++-- tests/core/test_points.py | 4 ++-- tests/core/test_shapes.py | 4 ++-- tests/core/test_shells.py | 4 ++-- tests/core/test_user.py | 4 ++-- tests/fixtures/array_backends.py | 4 ++-- tests/fixtures/domain.py | 4 ++-- tests/fixtures/generators.py | 4 ++-- tests/fixtures/helper_classes.py | 4 ++-- 47 files changed, 122 insertions(+), 115 deletions(-) diff --git a/glass/_array_api_utils.py b/glass/_array_api_utils.py index 4e16c53ce..1f1683e0e 100644 --- a/glass/_array_api_utils.py +++ b/glass/_array_api_utils.py @@ -17,13 +17,14 @@ from __future__ import annotations import functools -from typing import TYPE_CHECKING, Any +import typing import array_api_compat -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Callable, Sequence from types import ModuleType + from typing import Any import numpy as np diff --git a/glass/_rng.py b/glass/_rng.py index 86be54586..65b93e67c 100644 --- a/glass/_rng.py +++ b/glass/_rng.py @@ -10,9 +10,9 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import DTypeLike, FloatArray, IntArray, UnifiedGenerator diff --git a/glass/_types.py b/glass/_types.py index 910268f1a..d5750dac0 100644 --- a/glass/_types.py +++ b/glass/_types.py @@ -1,8 +1,8 @@ -from typing import TYPE_CHECKING, Any +import typing +from typing import Any -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Sequence - from typing import ParamSpec, TypeAlias, TypeVar import jaxtyping import numpy as np @@ -13,20 +13,24 @@ import glass.jax from glass import _rng - P = ParamSpec("P") - R = TypeVar("R") - T = TypeVar("T") + P = typing.ParamSpec("P") + R = typing.TypeVar("R") + T = typing.TypeVar("T") - AnyArray: TypeAlias = np.typing.NDArray[Any] | jaxtyping.Array | Array - ComplexArray: TypeAlias = np.typing.NDArray[np.complex128] | jaxtyping.Array | Array - DTypeLike: TypeAlias = np.typing.DTypeLike | jaxtyping.DTypeLike | DType - FloatArray: TypeAlias = np.typing.NDArray[np.float64] | jaxtyping.Array | Array - IntArray: TypeAlias = np.typing.NDArray[np.int64] | jaxtyping.Array | Array - UnifiedGenerator: TypeAlias = ( + AnyArray: typing.TypeAlias = np.typing.NDArray[Any] | jaxtyping.Array | Array + ComplexArray: typing.TypeAlias = ( + np.typing.NDArray[np.complex128] | jaxtyping.Array | Array + ) + DTypeLike: typing.TypeAlias = np.typing.DTypeLike | jaxtyping.DTypeLike | DType + FloatArray: typing.TypeAlias = ( + np.typing.NDArray[np.float64] | jaxtyping.Array | Array + ) + IntArray: typing.TypeAlias = np.typing.NDArray[np.int64] | jaxtyping.Array | Array + UnifiedGenerator: typing.TypeAlias = ( np.random.Generator | glass.jax.Generator | _rng.Generator ) - AngularPowerSpectra: TypeAlias = Sequence[AnyArray] + AngularPowerSpectra: typing.TypeAlias = Sequence[AnyArray] else: # Runtime fallbacks (for Sphinx / autodoc) # https://github.com/sphinx-doc/sphinx/issues/11991 diff --git a/glass/algorithm.py b/glass/algorithm.py index cac245d08..a497ddc18 100644 --- a/glass/algorithm.py +++ b/glass/algorithm.py @@ -2,13 +2,13 @@ from __future__ import annotations +import typing import warnings -from typing import TYPE_CHECKING import array_api_compat import array_api_extra as xpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from glass._types import FloatArray diff --git a/glass/arraytools.py b/glass/arraytools.py index 49a27221a..c73489dcf 100644 --- a/glass/arraytools.py +++ b/glass/arraytools.py @@ -2,14 +2,14 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import array_api_compat import array_api_extra as xpx from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import AnyArray, FloatArray, IntArray diff --git a/glass/cosmology.py b/glass/cosmology.py index cf2d2aa85..40e0cb1d2 100644 --- a/glass/cosmology.py +++ b/glass/cosmology.py @@ -1,6 +1,6 @@ """Module for cosmology.api utilities.""" -from typing import Protocol +import typing import cosmology.api @@ -18,6 +18,6 @@ class Cosmology( cosmology.api.HasOmegaM0[AnyArray], # ty: ignore[invalid-type-arguments] cosmology.api.HasOmegaM[AnyArray, AnyArray], # ty: ignore[invalid-type-arguments] cosmology.api.HasTransverseComovingDistance[AnyArray, AnyArray], # ty: ignore[invalid-type-arguments] - Protocol, + typing.Protocol, ): """Cosmology protocol for GLASS.""" diff --git a/glass/fields.py b/glass/fields.py index 3a561937c..09ee3f869 100644 --- a/glass/fields.py +++ b/glass/fields.py @@ -5,9 +5,9 @@ import itertools import math import sys +import typing import warnings from collections.abc import Sequence -from typing import TYPE_CHECKING import numpy as np import transformcl @@ -23,7 +23,7 @@ from glass import _rng from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Callable, Generator, Iterable, Iterator, Sequence from types import ModuleType from typing import Literal @@ -41,7 +41,7 @@ if sys.version_info >= (3, 13): from warnings import deprecated else: - if TYPE_CHECKING: + if typing.TYPE_CHECKING: from glass._types import P, R def deprecated(msg: str, /) -> Callable[[Callable[P, R]], Callable[P, R]]: diff --git a/glass/galaxies.py b/glass/galaxies.py index 63f855400..494be1b3f 100644 --- a/glass/galaxies.py +++ b/glass/galaxies.py @@ -20,8 +20,8 @@ from __future__ import annotations import math +import typing import warnings -from typing import TYPE_CHECKING import array_api_compat import array_api_extra as xpx @@ -32,7 +32,7 @@ from glass import _rng from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import FloatArray, UnifiedGenerator diff --git a/glass/grf/_core.py b/glass/grf/_core.py index f82262c7e..01d0de647 100644 --- a/glass/grf/_core.py +++ b/glass/grf/_core.py @@ -1,16 +1,16 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Protocol +import typing import transformcl -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import NotImplementedType from glass._types import AnyArray -class Transformation(Protocol): +class Transformation(typing.Protocol): """Protocol for transformations of Gaussian random fields.""" def __call__(self, x: AnyArray, var: float, /) -> AnyArray: diff --git a/glass/grf/_solver.py b/glass/grf/_solver.py index 131927b01..93ad30978 100644 --- a/glass/grf/_solver.py +++ b/glass/grf/_solver.py @@ -1,13 +1,13 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import numpy as np from transformcl import cltocorr, corrtocl import glass.grf -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from glass._types import AnyArray diff --git a/glass/grf/_transformations.py b/glass/grf/_transformations.py index a4813121e..9b356961e 100644 --- a/glass/grf/_transformations.py +++ b/glass/grf/_transformations.py @@ -1,9 +1,9 @@ from __future__ import annotations +import typing from dataclasses import dataclass -from typing import TYPE_CHECKING -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import NotImplementedType from glass._types import AnyArray diff --git a/glass/harmonics.py b/glass/harmonics.py index 651fd761e..5befaab5d 100644 --- a/glass/harmonics.py +++ b/glass/harmonics.py @@ -2,11 +2,11 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import array_api_compat -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from glass._types import ComplexArray, FloatArray diff --git a/glass/healpix.py b/glass/healpix.py index 0d321837f..6298d20ea 100644 --- a/glass/healpix.py +++ b/glass/healpix.py @@ -2,8 +2,8 @@ from __future__ import annotations +import typing from collections.abc import Sequence -from typing import TYPE_CHECKING import healpix import healpy @@ -14,7 +14,7 @@ import glass._array_api_utils as _utils from glass import _rng -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import ComplexArray, DTypeLike, FloatArray, IntArray diff --git a/glass/jax.py b/glass/jax.py index eab52e587..e8df97619 100644 --- a/glass/jax.py +++ b/glass/jax.py @@ -4,7 +4,7 @@ import math import threading -from typing import TYPE_CHECKING +import typing import jax.dtypes import jax.numpy as jnp @@ -12,7 +12,7 @@ import jax.scipy import jax.typing -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from typing import Self from jaxtyping import PRNGKeyArray diff --git a/glass/lensing.py b/glass/lensing.py index aa21d31f9..19bfe5ce2 100644 --- a/glass/lensing.py +++ b/glass/lensing.py @@ -31,7 +31,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Literal, overload +import typing import numpy as np @@ -41,16 +41,17 @@ import glass.healpix as hp from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Sequence from types import ModuleType + from typing import Literal from glass._types import AnyArray, ComplexArray, FloatArray from glass.cosmology import Cosmology from glass.shells import RadialWindow -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, @@ -64,7 +65,7 @@ def from_convergence( ... -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, @@ -78,7 +79,7 @@ def from_convergence( ... -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, @@ -92,7 +93,7 @@ def from_convergence( ... -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, @@ -106,7 +107,7 @@ def from_convergence( ... -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, @@ -123,7 +124,7 @@ def from_convergence( ... -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, @@ -140,7 +141,7 @@ def from_convergence( ... -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, @@ -157,7 +158,7 @@ def from_convergence( ... -@overload +@typing.overload def from_convergence( kappa: FloatArray, lmax: int | None = None, diff --git a/glass/observations.py b/glass/observations.py index 376462463..481ecf0a5 100644 --- a/glass/observations.py +++ b/glass/observations.py @@ -29,7 +29,7 @@ import itertools import math -from typing import TYPE_CHECKING +import typing import array_api_compat @@ -38,7 +38,7 @@ import glass.healpix as hp from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import FloatArray diff --git a/glass/points.py b/glass/points.py index 999a0d040..55c29ee78 100644 --- a/glass/points.py +++ b/glass/points.py @@ -40,7 +40,8 @@ import itertools import math -from typing import TYPE_CHECKING, Any +import typing +from typing import Any import array_api_compat import array_api_extra as xpx @@ -51,7 +52,7 @@ from glass import _rng from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Callable, Generator from types import ModuleType diff --git a/glass/shapes.py b/glass/shapes.py index dec0ad11f..4a3457179 100644 --- a/glass/shapes.py +++ b/glass/shapes.py @@ -25,7 +25,7 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING +import typing import array_api_compat import array_api_extra as xpx @@ -33,7 +33,7 @@ from glass import _rng from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import ComplexArray, FloatArray, IntArray, UnifiedGenerator diff --git a/glass/shells.py b/glass/shells.py index 40334d331..65108a35e 100644 --- a/glass/shells.py +++ b/glass/shells.py @@ -48,8 +48,8 @@ import dataclasses import itertools import math +import typing import warnings -from typing import TYPE_CHECKING import array_api_compat import array_api_extra as xpx @@ -59,7 +59,7 @@ import glass.arraytools from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Callable, Iterator, Sequence from types import ModuleType diff --git a/glass/user.py b/glass/user.py index 3c5a9627a..b0db0551d 100644 --- a/glass/user.py +++ b/glass/user.py @@ -19,12 +19,12 @@ from __future__ import annotations +import typing from contextlib import contextmanager -from typing import TYPE_CHECKING import numpy as np -if TYPE_CHECKING: +if typing.TYPE_CHECKING: import importlib.util from collections.abc import Generator from os import PathLike diff --git a/tests/benchmarks/test_arraytools.py b/tests/benchmarks/test_arraytools.py index 63409f379..344ac9a7c 100644 --- a/tests/benchmarks/test_arraytools.py +++ b/tests/benchmarks/test_arraytools.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass.arraytools -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_benchmark.fixture import BenchmarkFixture diff --git a/tests/benchmarks/test_fields.py b/tests/benchmarks/test_fields.py index ef5042c6a..e859bebdc 100644 --- a/tests/benchmarks/test_fields.py +++ b/tests/benchmarks/test_fields.py @@ -1,7 +1,7 @@ from __future__ import annotations import random -from typing import TYPE_CHECKING +import typing import pytest @@ -11,7 +11,7 @@ import glass.fields import glass.healpix as hp -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from typing import Any diff --git a/tests/benchmarks/test_galaxies.py b/tests/benchmarks/test_galaxies.py index 26058efcb..fce2c71d4 100644 --- a/tests/benchmarks/test_galaxies.py +++ b/tests/benchmarks/test_galaxies.py @@ -1,12 +1,12 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_benchmark.fixture import BenchmarkFixture diff --git a/tests/benchmarks/test_harmonics.py b/tests/benchmarks/test_harmonics.py index d0953bd6a..258d84156 100644 --- a/tests/benchmarks/test_harmonics.py +++ b/tests/benchmarks/test_harmonics.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -12,7 +12,7 @@ ) -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_benchmark.fixture import BenchmarkFixture diff --git a/tests/benchmarks/test_lensing.py b/tests/benchmarks/test_lensing.py index 1684ae4d0..a51403f55 100644 --- a/tests/benchmarks/test_lensing.py +++ b/tests/benchmarks/test_lensing.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from typing import Never diff --git a/tests/benchmarks/test_points.py b/tests/benchmarks/test_points.py index 396b5aa55..6da1f9cc0 100644 --- a/tests/benchmarks/test_points.py +++ b/tests/benchmarks/test_points.py @@ -1,13 +1,13 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING +import typing import pytest import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Callable from types import ModuleType from typing import Any diff --git a/tests/benchmarks/test_shapes.py b/tests/benchmarks/test_shapes.py index e24ddfe6d..dff599247 100644 --- a/tests/benchmarks/test_shapes.py +++ b/tests/benchmarks/test_shapes.py @@ -1,12 +1,12 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_benchmark.fixture import BenchmarkFixture diff --git a/tests/benchmarks/test_shells.py b/tests/benchmarks/test_shells.py index 859a7d4e4..fd5958c0a 100644 --- a/tests/benchmarks/test_shells.py +++ b/tests/benchmarks/test_shells.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_benchmark.fixture import BenchmarkFixture diff --git a/tests/core/grf/test_core.py b/tests/core/grf/test_core.py index 88d5c214c..427974f05 100644 --- a/tests/core/grf/test_core.py +++ b/tests/core/grf/test_core.py @@ -1,12 +1,12 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest import glass.grf -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_mock import MockerFixture diff --git a/tests/core/grf/test_solver.py b/tests/core/grf/test_solver.py index d3f3e8ce7..b55f98782 100644 --- a/tests/core/grf/test_solver.py +++ b/tests/core/grf/test_solver.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import numpy as np import pytest @@ -9,7 +9,7 @@ import glass.grf -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from glass._types import FloatArray diff --git a/tests/core/grf/test_transformations.py b/tests/core/grf/test_transformations.py index a24ad4921..87655eb0d 100644 --- a/tests/core/grf/test_transformations.py +++ b/tests/core/grf/test_transformations.py @@ -1,12 +1,12 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import array_api_extra as xpx import glass.grf -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import UnifiedGenerator diff --git a/tests/core/test_algorithm.py b/tests/core/test_algorithm.py index 83c1e4333..1de509991 100644 --- a/tests/core/test_algorithm.py +++ b/tests/core/test_algorithm.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass.algorithm -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_mock import MockerFixture diff --git a/tests/core/test_arraytools.py b/tests/core/test_arraytools.py index 841a29b88..25378f3d4 100644 --- a/tests/core/test_arraytools.py +++ b/tests/core/test_arraytools.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass.arraytools -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType diff --git a/tests/core/test_fields.py b/tests/core/test_fields.py index 2c07ebcd1..9efe41e2f 100644 --- a/tests/core/test_fields.py +++ b/tests/core/test_fields.py @@ -1,7 +1,7 @@ from __future__ import annotations import importlib.util -from typing import TYPE_CHECKING +import typing import numpy as np import pytest @@ -13,7 +13,7 @@ import glass.healpix as hp from glass import _rng -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_mock import MockerFixture diff --git a/tests/core/test_galaxies.py b/tests/core/test_galaxies.py index 9e1088648..b3eccd32b 100644 --- a/tests/core/test_galaxies.py +++ b/tests/core/test_galaxies.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from pytest_mock import MockerFixture diff --git a/tests/core/test_harmonics.py b/tests/core/test_harmonics.py index e00d2b913..62b9cffc9 100644 --- a/tests/core/test_harmonics.py +++ b/tests/core/test_harmonics.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass.harmonics -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType diff --git a/tests/core/test_healpix.py b/tests/core/test_healpix.py index 116e7f4f0..5e2eb6d2d 100644 --- a/tests/core/test_healpix.py +++ b/tests/core/test_healpix.py @@ -2,7 +2,7 @@ import importlib.util import math -from typing import TYPE_CHECKING +import typing import healpix import healpy @@ -14,7 +14,7 @@ import glass.healpix as hp from glass import _rng -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import UnifiedGenerator diff --git a/tests/core/test_lensing.py b/tests/core/test_lensing.py index 6ff56dbb7..e253e8376 100644 --- a/tests/core/test_lensing.py +++ b/tests/core/test_lensing.py @@ -1,7 +1,7 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING +import typing import pytest @@ -11,7 +11,7 @@ import glass.healpix as hp from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import FloatArray, UnifiedGenerator diff --git a/tests/core/test_observations.py b/tests/core/test_observations.py index cac05ccf4..18032d29c 100644 --- a/tests/core/test_observations.py +++ b/tests/core/test_observations.py @@ -1,7 +1,7 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING +import typing import numpy as np import pytest @@ -11,7 +11,7 @@ import glass import glass.healpix as hp -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import UnifiedGenerator diff --git a/tests/core/test_points.py b/tests/core/test_points.py index 5e7fbe5dc..a0696a330 100644 --- a/tests/core/test_points.py +++ b/tests/core/test_points.py @@ -1,7 +1,7 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING +import typing import pytest @@ -12,7 +12,7 @@ import glass.points from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Callable from types import ModuleType from typing import Any diff --git a/tests/core/test_shapes.py b/tests/core/test_shapes.py index 554cba2e0..cc1792493 100644 --- a/tests/core/test_shapes.py +++ b/tests/core/test_shapes.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest @@ -8,7 +8,7 @@ import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import UnifiedGenerator diff --git a/tests/core/test_shells.py b/tests/core/test_shells.py index 298959156..27225a548 100644 --- a/tests/core/test_shells.py +++ b/tests/core/test_shells.py @@ -2,7 +2,7 @@ import dataclasses import math -from typing import TYPE_CHECKING +import typing import numpy as np import pytest @@ -12,7 +12,7 @@ import glass from glass._array_api_utils import xp_additions as uxpx -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass.cosmology import Cosmology diff --git a/tests/core/test_user.py b/tests/core/test_user.py index ecf6956a4..014a16447 100644 --- a/tests/core/test_user.py +++ b/tests/core/test_user.py @@ -2,14 +2,14 @@ import importlib.util import pathlib -from typing import TYPE_CHECKING +import typing import numpy as np import pytest import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from glass._types import AngularPowerSpectra, FloatArray # check if available for testing diff --git a/tests/fixtures/array_backends.py b/tests/fixtures/array_backends.py index 03c8a8344..81edf08bf 100644 --- a/tests/fixtures/array_backends.py +++ b/tests/fixtures/array_backends.py @@ -10,13 +10,13 @@ import importlib.metadata import os -from typing import TYPE_CHECKING +import typing import numpy as np import packaging.version import pytest -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType # environment variable to specify array backends for testing diff --git a/tests/fixtures/domain.py b/tests/fixtures/domain.py index 29485409f..e8769e70f 100644 --- a/tests/fixtures/domain.py +++ b/tests/fixtures/domain.py @@ -2,14 +2,14 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import numpy as np import pytest import glass -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import FloatArray diff --git a/tests/fixtures/generators.py b/tests/fixtures/generators.py index f4a59047b..faf3fbc2b 100644 --- a/tests/fixtures/generators.py +++ b/tests/fixtures/generators.py @@ -2,14 +2,14 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import numpy as np import pytest from glass import _rng -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from types import ModuleType from glass._types import UnifiedGenerator diff --git a/tests/fixtures/helper_classes.py b/tests/fixtures/helper_classes.py index bf83bbb37..fce737f14 100644 --- a/tests/fixtures/helper_classes.py +++ b/tests/fixtures/helper_classes.py @@ -2,11 +2,11 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import typing import pytest -if TYPE_CHECKING: +if typing.TYPE_CHECKING: from collections.abc import Generator from types import ModuleType from typing import Any From 9ef6634bfc0c6c5e8c499ce2318c10a50040a8c8 Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 14:44:03 +0100 Subject: [PATCH 2/8] Restore `TypeAlias` --- glass/_types.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/glass/_types.py b/glass/_types.py index d5750dac0..83af80813 100644 --- a/glass/_types.py +++ b/glass/_types.py @@ -3,6 +3,7 @@ if typing.TYPE_CHECKING: from collections.abc import Sequence + from typing import TypeAlias import jaxtyping import numpy as np @@ -17,20 +18,16 @@ R = typing.TypeVar("R") T = typing.TypeVar("T") - AnyArray: typing.TypeAlias = np.typing.NDArray[Any] | jaxtyping.Array | Array - ComplexArray: typing.TypeAlias = ( - np.typing.NDArray[np.complex128] | jaxtyping.Array | Array - ) - DTypeLike: typing.TypeAlias = np.typing.DTypeLike | jaxtyping.DTypeLike | DType - FloatArray: typing.TypeAlias = ( - np.typing.NDArray[np.float64] | jaxtyping.Array | Array - ) - IntArray: typing.TypeAlias = np.typing.NDArray[np.int64] | jaxtyping.Array | Array - UnifiedGenerator: typing.TypeAlias = ( + AnyArray: TypeAlias = np.typing.NDArray[Any] | jaxtyping.Array | Array + ComplexArray: TypeAlias = np.typing.NDArray[np.complex128] | jaxtyping.Array | Array + DTypeLike: TypeAlias = np.typing.DTypeLike | jaxtyping.DTypeLike | DType + FloatArray: TypeAlias = np.typing.NDArray[np.float64] | jaxtyping.Array | Array + IntArray: TypeAlias = np.typing.NDArray[np.int64] | jaxtyping.Array | Array + UnifiedGenerator: TypeAlias = ( np.random.Generator | glass.jax.Generator | _rng.Generator ) - AngularPowerSpectra: typing.TypeAlias = Sequence[AnyArray] + AngularPowerSpectra: TypeAlias = Sequence[AnyArray] else: # Runtime fallbacks (for Sphinx / autodoc) # https://github.com/sphinx-doc/sphinx/issues/11991 From ba57abf86b9e977cc91e1ed588745dfb74c34c99 Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 15:01:03 +0100 Subject: [PATCH 3/8] Use `typing.cast` --- glass/fields.py | 5 +++-- glass/lensing.py | 2 +- glass/shapes.py | 4 ++-- glass/shells.py | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/glass/fields.py b/glass/fields.py index 09ee3f869..033cf514c 100644 --- a/glass/fields.py +++ b/glass/fields.py @@ -8,6 +8,7 @@ import typing import warnings from collections.abc import Sequence +from typing import Any import numpy as np import transformcl @@ -551,7 +552,7 @@ def getcl( cl = cl[: lmax + 1] else: cl = xpx.pad(cl, (0, lmax + 1 - cl.shape[0])) - return cl # ty: ignore[invalid-return-type] + return typing.cast("FloatArray", cl) def enumerate_spectra( @@ -1023,7 +1024,7 @@ def cov_from_spectra( cov = xpx.at(cov)[:size, i, j].set(cl_flat[:size]) cov = xpx.at(cov)[:size, j, i].set(cl_flat[:size]) - return cov # ty: ignore[invalid-return-type] + return typing.cast("Any", cov) def check_posdef_spectra(spectra: AngularPowerSpectra) -> bool: diff --git a/glass/lensing.py b/glass/lensing.py index 19bfe5ce2..7a1e9f9e6 100644 --- a/glass/lensing.py +++ b/glass/lensing.py @@ -626,7 +626,7 @@ def multi_plane_matrix( for i, w in enumerate(shells): mpc.add_window(xp.asarray(wmat[i, :], copy=True), w) wmat = xpx.at(wmat)[i, :].set(mpc.kappa) - return wmat # ty: ignore[invalid-return-type] + return typing.cast("FloatArray", wmat) def multi_plane_weights( diff --git a/glass/shapes.py b/glass/shapes.py index 4a3457179..bafdac887 100644 --- a/glass/shapes.py +++ b/glass/shapes.py @@ -282,7 +282,7 @@ def ellipticity_gaussian( eps = xpx.at(eps)[i : i + count_broadcasted[k]].set(e) i += count_broadcasted[k] - return eps # ty: ignore[invalid-return-type] + return typing.cast("ComplexArray", eps) def ellipticity_intnorm( @@ -361,4 +361,4 @@ def ellipticity_intnorm( eps = xpx.at(eps)[i : i + count_broadcasted[k]].set(e) i += count_broadcasted[k] - return eps # ty: ignore[invalid-return-type] + return typing.cast("ComplexArray", eps) diff --git a/glass/shells.py b/glass/shells.py index 65108a35e..02073643c 100644 --- a/glass/shells.py +++ b/glass/shells.py @@ -526,7 +526,7 @@ def restrict( left=0.0, right=0.0, ) * glass.arraytools.ndinterp(zr, w.za, w.wa) - return zr, fr # ty: ignore[invalid-return-type] + return typing.cast("FloatArray", zr), typing.cast("FloatArray", fr) def partition( From 4a76e4643bd3499469fe9ef655011f262cc58464 Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 15:05:32 +0100 Subject: [PATCH 4/8] `invalid-assignment` --- glass/arraytools.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/glass/arraytools.py b/glass/arraytools.py index c73489dcf..72fe0162a 100644 --- a/glass/arraytools.py +++ b/glass/arraytools.py @@ -175,9 +175,12 @@ def trapezoid_product( x: FloatArray x, _ = f for x_, _ in ff: - x = xpx.union1d( # ty: ignore[invalid-assignment] - x[(x >= x_[0]) & (x <= x_[-1])], - x_[(x_ >= x[0]) & (x_ <= x[-1])], + x = typing.cast( + "FloatArray", + xpx.union1d( + x[(x >= x_[0]) & (x <= x_[-1])], + x_[(x_ >= x[0]) & (x_ <= x[-1])], + ), ) y = uxpx.interp(x, *f) for f_ in ff: From 3e5dedb10d6dce0581f9b9f408e4ea45edb7acce Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 17:07:53 +0100 Subject: [PATCH 5/8] no-matching-overload --- tests/core/test_lensing.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/core/test_lensing.py b/tests/core/test_lensing.py index e253e8376..11c09a76f 100644 --- a/tests/core/test_lensing.py +++ b/tests/core/test_lensing.py @@ -29,7 +29,12 @@ def test_from_convergence(urng: UnifiedGenerator) -> None: # check with all False - results = glass.from_convergence(kappa) # ty: ignore[no-matching-overload] + results = glass.from_convergence( + kappa, + potential=False, + deflection=False, + shear=False, + ) assert results == () # check all combinations of potential, deflection, shear being True From 8befe9eca4278195624a2887c58cf1567cb90644 Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 17:23:50 +0100 Subject: [PATCH 6/8] Final fixes --- glass/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glass/fields.py b/glass/fields.py index 033cf514c..11a2a6fdd 100644 --- a/glass/fields.py +++ b/glass/fields.py @@ -227,7 +227,7 @@ def cls2cov( cov = xpx.at(cov)[:n, i].set(cl) cov = xpx.at(cov)[n:, i].set(0.0) cov /= 2 - yield cov # ty: ignore[invalid-yield] + yield typing.cast("FloatArray", cov) def discretized_cls( From 344919f7b2bfa7fa25f70bf10f1ba824f16da6ef Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 17:25:42 +0100 Subject: [PATCH 7/8] Convert to `AnyArray` --- glass/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glass/fields.py b/glass/fields.py index 11a2a6fdd..b102f18a6 100644 --- a/glass/fields.py +++ b/glass/fields.py @@ -1024,7 +1024,7 @@ def cov_from_spectra( cov = xpx.at(cov)[:size, i, j].set(cl_flat[:size]) cov = xpx.at(cov)[:size, j, i].set(cl_flat[:size]) - return typing.cast("Any", cov) + return typing.cast("AnyArray", cov) def check_posdef_spectra(spectra: AngularPowerSpectra) -> bool: From 3cc6789dd56e28e5602bac9d20be3eaca5373cae Mon Sep 17 00:00:00 2001 From: "Patrick J. Roddy" Date: Fri, 29 May 2026 17:34:51 +0100 Subject: [PATCH 8/8] Suggestions from review --- glass/fields.py | 1 - glass/lensing.py | 6 +++--- tests/core/test_lensing.py | 7 +------ 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/glass/fields.py b/glass/fields.py index b102f18a6..1c017023b 100644 --- a/glass/fields.py +++ b/glass/fields.py @@ -8,7 +8,6 @@ import typing import warnings from collections.abc import Sequence -from typing import Any import numpy as np import transformcl diff --git a/glass/lensing.py b/glass/lensing.py index 7a1e9f9e6..7723c832f 100644 --- a/glass/lensing.py +++ b/glass/lensing.py @@ -56,9 +56,9 @@ def from_convergence( kappa: FloatArray, lmax: int | None = None, *, - potential: Literal[False], - deflection: Literal[False], - shear: Literal[False], + potential: Literal[False] = False, + deflection: Literal[False] = False, + shear: Literal[False] = False, discretized: bool = True, ) -> tuple[()]: # returns empty tuple diff --git a/tests/core/test_lensing.py b/tests/core/test_lensing.py index 11c09a76f..63c1dee0a 100644 --- a/tests/core/test_lensing.py +++ b/tests/core/test_lensing.py @@ -29,12 +29,7 @@ def test_from_convergence(urng: UnifiedGenerator) -> None: # check with all False - results = glass.from_convergence( - kappa, - potential=False, - deflection=False, - shear=False, - ) + results = glass.from_convergence(kappa) assert results == () # check all combinations of potential, deflection, shear being True