From dab199cc2a12e2b20f6f1c82db9278204eff9466 Mon Sep 17 00:00:00 2001 From: Oskar Weser Date: Wed, 4 Dec 2024 13:55:07 -0500 Subject: [PATCH] added comment to explain reason for covariant type --- src/quemb/shared/typing.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/quemb/shared/typing.py b/src/quemb/shared/typing.py index 643eeb97..8457420d 100644 --- a/src/quemb/shared/typing.py +++ b/src/quemb/shared/typing.py @@ -11,12 +11,18 @@ import numpy as np -T_co = TypeVar("T_co", bound=np.generic, covariant=True) +# We want the dtype to behave covariant, i.e. if a +# Vector[float] is allowed, then the more specific +# Vector[float64] should also be allowed. +# +# Also see here: +# https://stackoverflow.com/questions/61568462/what-does-typevara-b-covariant-true-mean +T_dtype_co = TypeVar("T_dtype_co", bound=np.generic, covariant=True) -Vector = np.ndarray[Tuple[int], np.dtype[T_co]] -Matrix = np.ndarray[Tuple[int, int], np.dtype[T_co]] -Tensor3D = np.ndarray[Tuple[int, int, int], np.dtype[T_co]] -Tensor4D = np.ndarray[Tuple[int, int, int, int], np.dtype[T_co]] -Tensor5D = np.ndarray[Tuple[int, int, int, int, int], np.dtype[T_co]] -Tensor6D = np.ndarray[Tuple[int, int, int, int, int, int], np.dtype[T_co]] -Tensor = np.ndarray[Tuple[int, ...], np.dtype[T_co]] +Vector = np.ndarray[Tuple[int], np.dtype[T_dtype_co]] +Matrix = np.ndarray[Tuple[int, int], np.dtype[T_dtype_co]] +Tensor3D = np.ndarray[Tuple[int, int, int], np.dtype[T_dtype_co]] +Tensor4D = np.ndarray[Tuple[int, int, int, int], np.dtype[T_dtype_co]] +Tensor5D = np.ndarray[Tuple[int, int, int, int, int], np.dtype[T_dtype_co]] +Tensor6D = np.ndarray[Tuple[int, int, int, int, int, int], np.dtype[T_dtype_co]] +Tensor = np.ndarray[Tuple[int, ...], np.dtype[T_dtype_co]]