Coverage for cuda/bindings/_internal/_fast_enum.py: 100.00%
43 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-19 01:12 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-19 01:12 +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 Ci
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@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcE F G H I J K L M N O P Q R S T U V W UcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cX Y Z 0 1 2 3 4 5 6 7 {c|c}c~cadbdcddded8 fdgdhdidjdkdldmdnd9 odpdqd! rdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d# ,d$ -d% .d' ( ) /d* :d;d=d?d@d+ , - . / : [d]d^d_d`d{d; = ? |d}d~d@ [ ] ae^ be_ cedeeefegeheiejeke` leme{ neoepe| } ~ qeabbbcbreseteuedbebfbvegbwexehbibjbc yezeAeBee CeDeEeFeGeHeIeJeKeLeMeNeOePekbQeRelbg mbSenbTeUeVeWeh XeYeZe0ed obpbf 1e2eqb3e4e5e6e7e8e9e!e#e$e%e'ei (e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfj ufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:fk ;f=f?f@fl [f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgrbsbtbmgngogpgqgrgsgtgubugvgwgxgygzgAgBgCgDgEgFgvbGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#gm n wbxbyb$g%gzb'gAbBb(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bWh!bXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]ho p ^h_hq `h{h|h}h~haibicidieifigir s hiiijit u v w x y z A kiliminioipiB qirisiC D tiuiviwixiyiziAi
61 if singleton is None: 2a #b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcE F G H I J K L M N O P Q R S T U V W UcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cX Y Z 0 1 2 3 4 5 6 7 {c|c}c~cadbdcddded8 fdgdhdidjdkdldmdnd9 odpdqd! rdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d# ,d$ -d% .d' ( ) /d* :d;d=d?d@d+ , - . / : [d]d^d_d`d{d; = ? |d}d~d@ [ ] ae^ be_ cedeeefegeheiejeke` leme{ neoepe| } ~ qeabbbcbreseteuedbebfbvegbwexehbibjbc yezeAeBee CeDeEeFeGeHeIeJeKeLeMeNeOePekbQeRelbg mbSenbTeUeVeWeh XeYeZe0ed obpbf 1e2eqb3e4e5e6e7e8e9e!e#e$e%e'ei (e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfj ufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:fk ;f=f?f@fl [f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgrbsbtbmgngogpgqgrgsgtgubugvgwgxgygzgAgBgCgDgEgFgvbGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#gm n wbxbyb$g%gzb'gAbBb(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bWh!bXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]ho p ^h_hq `h{h|h}h~haibicidieifigir s hiiijit u v w x y z A kiliminioipiB qirisiC D tiuiviwixiyiziAi
62 raise ValueError(f"{value} is not a valid {cls.__name__}") 1ceh
63 return singleton 2a #b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcE F G H I J K L M N O P Q R S T U V W UcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cX Y Z 0 1 2 3 4 5 6 7 {c|c}c~cadbdcddded8 fdgdhdidjdkdldmdnd9 odpdqd! rdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d# ,d$ -d% .d' ( ) /d* :d;d=d?d@d+ , - . / : [d]d^d_d`d{d; = ? |d}d~d@ [ ] ae^ be_ cedeeefegeheiejeke` leme{ neoepe| } ~ qeabbbcbreseteuedbebfbvegbwexehbibjbc yezeAeBee CeDeEeFeGeHeIeJeKeLeMeNeOePekbQeRelbg mbSenbTeUeVeWeh XeYeZe0ed obpbf 1e2eqb3e4e5e6e7e8e9e!e#e$e%e'ei (e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfj ufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:fk ;f=f?f@fl [f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgrbsbtbmgngogpgqgrgsgtgubugvgwgxgygzgAgBgCgDgEgFgvbGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#gm n wbxbyb$g%gzb'gAbBb(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bWh!bXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]ho p ^h_hq `h{h|h}h~haibicidieifigir s hiiijit u v w x y z A kiliminioipiB qirisiC D tiuiviwixiyiziAi
65 def __repr__(self) -> str:
66 return f"<{self.__class__.__name__}.{self._name}: {int(self)}>" 2a c g h d obDiqbi ubEi
68 @property
69 def name(self) -> str:
70 return self._name 2a E F G H I J K L M N O P Q R S T U V W 8 BiFiGiHi; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbc pbf j k l m n o p q r s t u v w x y z A B C D
72 @property
73 def value(self) -> int:
74 return int(self) 2a X Y Z 0 1 2 3 4 5 6 7 IiJiKiLiMiBiNiOiPiQi9 RiSiTiUiViWi! XiYiZi0i1i2i3i4i# $ % ' ( ) * + , - . / : c kblbg mbnb5ii j k l rbsbtbvbm n wbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!bo p q r s t u v w x y z A B C D 6i7i