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

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 Ci

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@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

64 

65 def __repr__(self) -> str: 

66 return f"<{self.__class__.__name__}.{self._name}: {int(self)}>" 2a c g h d obDiqbi ubEi

67 

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

71 

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