Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以将Python枚举编译成numba JITA类吗?_Python_Enums_Numba - Fatal编程技术网

我可以将Python枚举编译成numba JITA类吗?

我可以将Python枚举编译成numba JITA类吗?,python,enums,numba,Python,Enums,Numba,我试图找到如何将@jitclass与枚举类一起使用。参考手册明确指出它们是,但我无法理解,而且我在任何地方都找不到代码示例 当我试着跑步的时候 from numba import jitclass from numba.types import string from enum import Enum type_spec = [ ('A', string), ('B', string) ] @jitclass(type_spec) class Type(Enum):

我试图找到如何将@jitclass与枚举类一起使用。参考手册明确指出它们是,但我无法理解,而且我在任何地方都找不到代码示例

当我试着跑步的时候

from numba import jitclass
from numba.types import string

from enum import Enum

type_spec = [
    ('A', string),
    ('B', string)
]


@jitclass(type_spec)
class Type(Enum):
    A = 'A'
    B = 'B'
我得到
TypeError:类成员还不受支持:\缺少\名称,值,\转换,\成员\名称,\成员\映射,\成员\类型,\值2成员\映射,A,B

当我尝试在没有规范的情况下编译时,如下所示:

from numba import jitclass

from enum import Enum


@jitclass
class Type(Enum):
    A = 'A'
    B = 'B'

当我调用构造函数时,我得到一个
AttributeError:items
。我似乎找不到正确的语法来将我的枚举类转换为JIT类。如何实现这一点?

我目前面临同样的问题(无法
jitclass
Python枚举)。从@user2357112对Monica的支持来看,似乎可以对Numba文档进行重大改进


添加了对枚举的“支持”,但在文档方面严重缺少该请求。

我目前面临同样的问题(无法
jitclass
Python枚举)。从@user2357112对Monica的支持来看,似乎可以对Numba文档进行重大改进


添加了对Enum的“支持”,但在文档方面严重缺少该请求。

您可以在
njit
函数中使用
Enum
,而无需在Enum类上使用
jitclass

import numba
from enum import Enum, IntEnum

class MyEnum(Enum):
    Red = 123
    Blue = 456

class IEnum(IntEnum):
    one = 1
    two = 2

@numba.njit
def check_isblue(e):
    assert e == MyEnum.Blue

@numba.njit
def use_cases(a):
    """The following use-cases are supported"""
    # comparison
    a == MyEnum.Red
    a != MyEnum.Red
    a is MyEnum.Red
    a is not MyEnum.Red
    # getitem
    a is MyEnum["Red"]
    # conditional
    MyEnum.Red if True else MyEnum.Blue
    # coersion to int
    IEnum.one + 1


check_isblue(MyEnum.Blue)
use_cases(MyEnum.Red)
其他用例,例如与
IntEnum
值的矢量化比较(也支持通过
@vectorize
装饰器)


这是包含在中的测试模块中的“记录”。

您可以在
njit
函数中使用
Enum
/
IntEnum
,而无需在Enum类上使用
jitclass

import numba
from enum import Enum, IntEnum

class MyEnum(Enum):
    Red = 123
    Blue = 456

class IEnum(IntEnum):
    one = 1
    two = 2

@numba.njit
def check_isblue(e):
    assert e == MyEnum.Blue

@numba.njit
def use_cases(a):
    """The following use-cases are supported"""
    # comparison
    a == MyEnum.Red
    a != MyEnum.Red
    a is MyEnum.Red
    a is not MyEnum.Red
    # getitem
    a is MyEnum["Red"]
    # conditional
    MyEnum.Red if True else MyEnum.Blue
    # coersion to int
    IEnum.one + 1


check_isblue(MyEnum.Blue)
use_cases(MyEnum.Red)
其他用例,例如与
IntEnum
值的矢量化比较(也支持通过
@vectorize
装饰器)


这在包含在中的测试模块中“记录在案”。

在您可以在nopython模式下使用枚举的意义上支持它们。我不认为你可以编写它们。你能详细说明一下它们的区别吗?它们是受支持的,因为你可以在nopython模式下使用枚举。我认为你写不出来。你能详细说明一下区别吗?