I would like to understand why the union of float and np.float64 types is producing an [arg-type] typing error here but using the types separately is fine:
import numpy as np
from numpy.typing import ArrayLike
from typing import Any, Union
def as_float_array(a: ArrayLike) -> Any:
...
w: float = float(4)
as_float_array([w])
x: np.float64 = np.float64(4)
as_float_array([x])
y: Union[float, np.float64] = float(4)
as_float_array([y])
z: Union[float, np.float64] = np.float64(4)
as_float_array([z])
/.../scratch.py:17: error: Argument 1 to "as_float_array" has incompatible type "List[Union[float, floating[_64Bit]]]"; expected "Union[Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]], Union[Union[_SupportsArray[dtype[Any]], Sequence[_SupportsArray[dtype[Any]]], Sequence[Sequence[_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]], Union[bool, int, float, complex, str, bytes, Sequence[Union[bool, int, float, complex, str, bytes]], Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]], Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]], Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]]]]"
/.../scratch.py:20: error: Argument 1 to "as_float_array" has incompatible type "List[Union[float, floating[_64Bit]]]"; expected "Union[Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]], Union[Union[_SupportsArray[dtype[Any]], Sequence[_SupportsArray[dtype[Any]]], Sequence[Sequence[_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]], Union[bool, int, float, complex, str, bytes, Sequence[Union[bool, int, float, complex, str, bytes]], Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]], Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]], Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]]]]"
Found 2 errors in 1 file (checked 1 source file)
Expected formatted:
Union[
Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]],
Union[
Union[
_SupportsArray[dtype[Any]],
Sequence[_SupportsArray[dtype[Any]]],
Sequence[Sequence[_SupportsArray[dtype[Any]]]],
Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]],
Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]
],
Union[
bool, int, float, complex, str, bytes,
Sequence[Union[bool, int, float, complex, str, bytes]],
Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]],
Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]],
Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]
]
]
]
It is worth noting that defining a new type as follows removes the error:
import numpy as np
from numpy.typing import ArrayLike
from typing import Any, Sequence, Union
ArrayMostly = Union[ArrayLike, Sequence[Union[float, np.float64]]]
def as_float_array(a: ArrayMostly) -> Any:
...
x: Union[float, np.float64] = float(4)
as_float_array([x])