如何在 class' 属性包含 self 实例时指定 numba jitclass
How to specify numba jitclass when the class' attribute contains an instance of self
我有一个简单的 Python class:
class Node(object):
def __init__(self):
self._left = self
self._right = self
@property
def left(self):
return self._left
@left.setter
def left(self, value):
self._left = value
@property
def right(self):
return self._right
@right.setter
def right(self, value):
self._right = value
我想 jit 这个 class 但不清楚当 self._left
和 self._right
是 Node
对象类型时如何定义类型。我遇到了这个使用 .class_type.instance_type
的 答案,但该示例仅引用了包含 different class 实例的 class 属性.就我而言,由于尚未定义 Node
,因此我无法声明以下规范:
spec=[("_left", Node.class_type.instance_type),
("_right", Node.class_type.instance_type),
]
@jitclass(spec)
class Node(object):
基于此 example - numba 在这种情况下有一个 deferred_type
函数。
node_type = numba.deferred_type()
spec=[
("_left", node_type),
("_right", node_type),
]
@jitclass(spec)
class Node:
# omitted
# define the deferred type
node_type.define(Node.class_type.instance_type)
# class can be used!
a = Node()
b = Node()
a.left = b
我有一个简单的 Python class:
class Node(object):
def __init__(self):
self._left = self
self._right = self
@property
def left(self):
return self._left
@left.setter
def left(self, value):
self._left = value
@property
def right(self):
return self._right
@right.setter
def right(self, value):
self._right = value
我想 jit 这个 class 但不清楚当 self._left
和 self._right
是 Node
对象类型时如何定义类型。我遇到了这个使用 .class_type.instance_type
的 Node
,因此我无法声明以下规范:
spec=[("_left", Node.class_type.instance_type),
("_right", Node.class_type.instance_type),
]
@jitclass(spec)
class Node(object):
基于此 example - numba 在这种情况下有一个 deferred_type
函数。
node_type = numba.deferred_type()
spec=[
("_left", node_type),
("_right", node_type),
]
@jitclass(spec)
class Node:
# omitted
# define the deferred type
node_type.define(Node.class_type.instance_type)
# class can be used!
a = Node()
b = Node()
a.left = b