Coverage for C:\Users\hjanssen\HOME\pyCharmProjects\ethz_hvl\hvl_ccb\hvl_ccb\utils\typing.py : 86%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# Copyright (c) 2019-2020 ETH Zurich, SIS ID and HVL D-ITET
2#
3"""
4Additional Python typing module utilities
5"""
6import sys
7from typing import Union
9from typeguard import origin_type_checkers # type: ignore
11if sys.version_info >= (3, 9):
12 from types import GenericAlias # PEP 585
15def is_generic_type_hint(type_):
16 """
17 Check if class is a generic type, for example `Union[int, float]`, `List[int]`, or
18 `List`.
20 :param type_: type to check
21 """
23 if not (sys.version_info >= (3, 9) and isinstance(type_, GenericAlias)):
25 if not hasattr(type_, "__module__"):
26 return False
28 # check if the class inherits from any `typing` class
29 if type_.__module__ != "typing":
30 if not any(t.__module__ == "typing" for t in type_.mro()):
31 return False
33 origin = getattr(type_, "__origin__", type_) # Note: List.__origin__ == list
35 return origin in origin_type_checkers
38def check_generic_type(value, type_, name="instance"):
39 """
40 Check if `value` is of a generic type `type_`. Raises `TypeError` if it's not.
42 :param name: name to report in case of an error
43 :param value: value to check
44 :param type_: generic type to check against
45 """
46 if not hasattr(type_, "__origin__") or type_.__origin__ not in origin_type_checkers:
47 raise ValueError("Type {} is not a generic type.".format(type_))
48 origin_type_checkers[type_.__origin__](name, value, type_, None)
51Number = Union[int, float]
52"""Typing hint auxiliary for a Python base number types: `int` or `float`."""