numba jitclass是否支持泛型?

时间:2018-06-07 15:15:11

标签: python generics numba

查看numba示例中的堆栈代码:https://github.com/numba/numba/blob/master/examples/stack.py Stack类看起来像是独立于堆栈的元素类型编写的,但是最终的堆栈被实例化为一个int的堆栈,看起来像是不能重用于其他类型。

是这种情况,还是Stack可以重用来包含其他类型?

1 个答案:

答案 0 :(得分:0)

我发现最好的是将它包装在一个函数中。我不是特别喜欢这个:

@numba.jit
def make_stack_class(typ):
    linkednode_spec = OrderedDict()
    linkednode_type = deferred_type()
    linkednode_spec['data'] = data_type = deferred_type()
    linkednode_spec['next'] = optional(linkednode_type)

    @jitclass(linkednode_spec)
    class LinkedNode(object):
        def __init__(self, data):
            self.data = data
            self.next = None


    linkednode_type.define(LinkedNode.class_type.instance_type)

    stack_spec = OrderedDict()
    stack_spec['head'] = optional(linkednode_type)
    stack_spec['size'] = intp


    @jitclass(stack_spec)
    class Stack(object):
        def __init__(self):
            self.head = None
            self.size = 0

        def push(self, data):
            new = LinkedNode(data)
            new.next = self.head
            self.head = new
            self.size += 1

        def pop(self):
            old = self.head
            if old is None:
                raise ValueError("empty")
            else:
                self.head = old.next
                self.size -= 1
                return old.data



    data_type.define(typ)
    return Stack