Numba Jitclass поддерживает дженерики? - PullRequest
0 голосов
/ 07 июня 2018

Глядя на код Stack в примерах numba: https://github.com/numba/numba/blob/master/examples/stack.py класс Stack выглядит так, как будто он написан независимо от типа элемента стека, однако конечный стек создается как стек int и выглядит как can 'не может быть повторно использован для других типов.

Это случаи, или Stack может быть повторно использован, чтобы содержать другие типы?

1 Ответ

0 голосов
/ 07 июня 2018

Лучшее, что я нашел, - это обернуть его в функцию.Мне не особенно нравится это:

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