Coverage for cuda/bindings/_internal/_fast_enum.py: 100.00%

43 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-29 01:38 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# SPDX-License-Identifier: Apache-2.0 

3 

4 

5# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=581469c1fadb5f72c43b478d73f2b905562136c8723a25e2f4240b5b681e2894 

6""" 

7This is a replacement for the stdlib enum.IntEnum. 

8 

9Notably, it has much better import time performance, since it doesn't generate 

10and evaluate Python code at startup time. 

11 

12It supports the most important subset of the IntEnum API. See `test_enum` in 

13`cuda_bindings/tests/test_basics.py` for details. 

14""" 

15 

16from typing import Any, Iterator 

17 

18 

19class FastEnumMetaclass(type): 

20 def __init__(cls, name, bases, namespace): 

21 super().__init__(name, bases, namespace) 1ab

22 

23 cls.__singletons__ = {} 1ab

24 cls.__members__ = {} 1ab

25 for name, value in cls.__dict__.items(): 1ab

26 if name.startswith("__") and name.endswith("__"): 1ab

27 continue 1ab

28 

29 if isinstance(value, tuple): 1ab

30 value, doc = value 1ab

31 elif isinstance(value, int): 

32 doc = None 

33 else: 

34 continue 

35 

36 singleton = int.__new__(cls, value) 1ab

37 singleton.__doc__ = doc 1ab

38 singleton._name = name 1ab

39 cls.__singletons__[value] = singleton 1ab

40 cls.__members__[name] = singleton 1ab

41 

42 for name, member in cls.__members__.items(): 1ab

43 setattr(cls, name, member) 1ab

44 

45 def __repr__(cls) -> str: 

46 return f"<enum '{cls.__name__}'>" 1c

47 

48 def __len__(cls) -> int: 

49 return len(cls.__members__) 1cd

50 

51 def __iter__(cls) -> Iterator["FastEnum"]: 

52 return iter(cls.__members__.values()) 2a c e d f =i

53 

54 def __contains__(cls, item: Any) -> bool: 

55 return item in cls.__singletons__ 1c

56 

57 

58class FastEnum(int, metaclass=FastEnumMetaclass): 

59 def __new__(cls, value: int) -> "FastEnum": 

60 singleton: FastEnum = cls.__singletons__.get(value) 2a -b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3cJ K L M N O P Q R S T U V W X Y Z 0 1 4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwd2 3 4 5 6 7 8 9 ! # $ xdydzdAdBdCd% ' DdEdFdGd( HdIdJdKdLdMdNdOdPdQdRdSdTdUd) VdWdXdYdZd0d1d2d3dg h 4d5di 6d7d8d9d!d#d$d%d'd(d)d*dj k +d,d-d.d/d:d;d=d?d@d* [d]d^d+ _d`d{d|d}d~daebecedeeefegeheieje, kelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUe- VeWe. Xe/ Ye: ; = Ze? 0e1e2e3e4e5e6e@ [ ] ^ _ ` 7e8e9e!e#e$e{ %e| 'e} ~ ab(ebb)ecbdb*e+e,e-e.e/e:e;e=eeb?efb@egbhbibjbkblb[e]e^e_e`e{embnbob|epb}e~eqbrbsbafc bfcfdfefe ffgfhfifjfkflfmfnfofpfqfrfsftfuftbvfubl vbwfwbxfyfzfAfm BfCfDfd xbybf EfFfzbGfHfIfJfKfLfMfNfOfPfQfRfSfn TfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f`f{fo |f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0gp 1g2g3g4gq 5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[gAbBbCb]g^g_g`g{g|g}gDb~gahbhchdhehfhghhhihjhkhEblhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhr s FbGbHbShThIbUhJbKbVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bCi,bDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1it u 2iv 3i4i5iw 6ix 7i8i9i!iy z A B C #iD E F $i%i'i(i)iG *i+iH I ,i-i.i/i:i

61 if singleton is None: 2a -b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3cJ K L M N O P Q R S T U V W X Y Z 0 1 4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwd2 3 4 5 6 7 8 9 ! # $ xdydzdAdBdCd% ' DdEdFdGd( HdIdJdKdLdMdNdOdPdQdRdSdTdUd) VdWdXdYdZd0d1d2d3dg h 4d5di 6d7d8d9d!d#d$d%d'd(d)d*dj k +d,d-d.d/d:d;d=d?d@d* [d]d^d+ _d`d{d|d}d~daebecedeeefegeheieje, kelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUe- VeWe. Xe/ Ye: ; = Ze? 0e1e2e3e4e5e6e@ [ ] ^ _ ` 7e8e9e!e#e$e{ %e| 'e} ~ ab(ebb)ecbdb*e+e,e-e.e/e:e;e=eeb?efb@egbhbibjbkblb[e]e^e_e`e{embnbob|epb}e~eqbrbsbafc bfcfdfefe ffgfhfifjfkflfmfnfofpfqfrfsftfuftbvfubl vbwfwbxfyfzfAfm BfCfDfd xbybf EfFfzbGfHfIfJfKfLfMfNfOfPfQfRfSfn TfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f`f{fo |f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0gp 1g2g3g4gq 5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[gAbBbCb]g^g_g`g{g|g}gDb~gahbhchdhehfhghhhihjhkhEblhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhr s FbGbHbShThIbUhJbKbVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bCi,bDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1it u 2iv 3i4i5iw 6ix 7i8i9i!iy z A B C #iD E F $i%i'i(i)iG *i+iH I ,i-i.i/i:i

62 raise ValueError(f"{value} is not a valid {cls.__name__}") 1cem

63 return singleton 2a -b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3cJ K L M N O P Q R S T U V W X Y Z 0 1 4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwd2 3 4 5 6 7 8 9 ! # $ xdydzdAdBdCd% ' DdEdFdGd( HdIdJdKdLdMdNdOdPdQdRdSdTdUd) VdWdXdYdZd0d1d2d3dg h 4d5di 6d7d8d9d!d#d$d%d'd(d)d*dj k +d,d-d.d/d:d;d=d?d@d* [d]d^d+ _d`d{d|d}d~daebecedeeefegeheieje, kelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUe- VeWe. Xe/ Ye: ; = Ze? 0e1e2e3e4e5e6e@ [ ] ^ _ ` 7e8e9e!e#e$e{ %e| 'e} ~ ab(ebb)ecbdb*e+e,e-e.e/e:e;e=eeb?efb@egbhbibjbkblb[e]e^e_e`e{embnbob|epb}e~eqbrbsbafc bfcfdfefe ffgfhfifjfkflfmfnfofpfqfrfsftfuftbvfubl vbwfwbxfyfzfAfm BfCfDfd xbybf EfFfzbGfHfIfJfKfLfMfNfOfPfQfRfSfn TfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f`f{fo |f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0gp 1g2g3g4gq 5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[gAbBbCb]g^g_g`g{g|g}gDb~gahbhchdhehfhghhhihjhkhEblhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhr s FbGbHbShThIbUhJbKbVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bCi,bDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1it u 2iv 3i4i5iw 6ix 7i8i9i!iy z A B C #iD E F $i%i'i(i)iG *i+iH I ,i-i.i/i:i

64 

65 def __repr__(self) -> str: 

66 return f"<{self.__class__.__name__}.{self._name}: {int(self)}>" 2a c l m d xb?izbn Db@i

67 

68 @property 

69 def name(self) -> str: 

70 return self._name 2a J K L M N O P Q R S T U V W X Y Z 0 1 % ' ( g h i j k ;i[i]i^i{ | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbc ybf o p q r s t u v w x y z A B C D E F G H I

71 

72 @property 

73 def value(self) -> int: 

74 return int(self) 2a 2 3 4 5 6 7 8 9 ! # $ ) g h i j k _i`i{i|i}i;i~iajbjcj* djejfjgjhjij+ jjkjljmjnj, oj- pj. / : ; = ? @ [ ] ^ _ ` c tbubl vbwbqjn o p q AbBbCbEbr s FbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,bt u v w x y z A B C D E F G H I rjsj