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
« 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
5# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=581469c1fadb5f72c43b478d73f2b905562136c8723a25e2f4240b5b681e2894
6"""
7This is a replacement for the stdlib enum.IntEnum.
9Notably, it has much better import time performance, since it doesn't generate
10and evaluate Python code at startup time.
12It supports the most important subset of the IntEnum API. See `test_enum` in
13`cuda_bindings/tests/test_basics.py` for details.
14"""
16from typing import Any, Iterator
19class FastEnumMetaclass(type):
20 def __init__(cls, name, bases, namespace):
21 super().__init__(name, bases, namespace) 1ab
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
29 if isinstance(value, tuple): 1ab
30 value, doc = value 1ab
31 elif isinstance(value, int):
32 doc = None
33 else:
34 continue
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
42 for name, member in cls.__members__.items(): 1ab
43 setattr(cls, name, member) 1ab
45 def __repr__(cls) -> str:
46 return f"<enum '{cls.__name__}'>" 1c
48 def __len__(cls) -> int:
49 return len(cls.__members__) 1cd
51 def __iter__(cls) -> Iterator["FastEnum"]:
52 return iter(cls.__members__.values()) 2a c e d f =i
54 def __contains__(cls, item: Any) -> bool:
55 return item in cls.__singletons__ 1c
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
65 def __repr__(self) -> str:
66 return f"<{self.__class__.__name__}.{self._name}: {int(self)}>" 2a c l m d xb?izbn Db@i
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
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