У меня есть следующий код Python, который я переношу в Numba:
class NODE(object):
def __init__(self):
self.left = self
self.right = self
print(self)
print(self.left)
print(self.right)
if __name__ == "__main__":
n = NODE()
print(n)
print(n.left)
print(n.right)
Для всех шести операторов печати я получаю одну и ту же строку, напечатанную шесть раз, что ожидается:
<__main__.NODE object at 0x1040aa668>
<__main__.NODE object at 0x1040aa668>
<__main__.NODE object at 0x1040aa668>
<__main__.NODE object at 0x1040aa668>
<__main__.NODE object at 0x1040aa668>
<__main__.NODE object at 0x1040aa668>
Однако, перенося это на Numba:
from numba import deferred_type, jitclass
node_type = deferred_type()
node_spec = [("left", node_type),
("right", node_type),
]
@jitclass(node_spec)
class NODE(object):
def __init__(self):
self.left = self
self.right = self
print(self)
print(self.left)
print(self.right)
node_type.define(NODE.class_type.instance_type)
if __name__ == "__main__":
n = NODE()
print(n)
print(n.left)
print(n.right)
Я получаю следующие операторы печати:
<numba.jitclass.boxing.NODE object at 0x1101df0f0>
<numba.jitclass.boxing.NODE object at 0x1101df0d0>
<numba.jitclass.boxing.NODE object at 0x1101df0f0>
<numba.jitclass.boxing.NODE object at 0x1101df0d0>
<numba.jitclass.boxing.NODE object at 0x1101df0f0>
<numba.jitclass.boxing.NODE object at 0x1101df0f0>
Обратите внимание, что:
- Они нене все одинаковые (я ожидаю, что они будут идентичны, как в примере только с Python)
n
равно self
и n.left
не равно self.left
- только
n.right
равно self.right
, но оба они должны быть равны другим