Dear all.
I would like to remove an element from a doubly linked list. But it happens that, I can not assign an element pointer to another one, e.x element.next = another_element.
So it mean I cannot edit any linked/doubly linked list.
LoweringError: Failed in nopython mode pipeline (step: native lowering)
No definition for lowering DeferredType#140568068944656.next = OptionalType(DeferredType#140568068944656) i.e. the type ‘DeferredType#140568068944656 or None’
I came across to this bug report
Lowering error when removing element from the middle of linked list · Issue #2606 · numba/numba (github.com)
but even if it was told to be sold, I still can not get it worked.
I use numba 0.54.1
node_type = numba.deferred_type()
DoubleLinkedNode_spec = [
('data', int32),
('prev', numba.optional(node_type)),
('next', numba.optional(node_type))
]
@jitclass(DoubleLinkedNode_spec)
class LinkedNode(object):
def __init__(self, data, next, prev):
self.data = data
self.next = next
self.prev = prev
def nextpend(self, data):
self.next = LinkedNode(data, None, self)
return self.next
def prepend(self, data):
self.prev = LinkedNode(data, self, None)
return self.next
@njit
def create_first_node(data):
return LinkedNode(data, None, None)
node_type.define(LinkedNode.class_type.instance_type)
@njit
def convert_np_array_to_DLL(arr):
last = create_first_node(arr[0])
head=last
for i in range(1, arr.size):
last = last.nextpend(arr[i])
return head, last
head, last = convert_np_array_to_DLL(np.array(list(range(20))))
@ njit
def delete_DLL( element, head,last):
if element.prev==None:
head = head.next
element.prev = None
elif element.next==None:
last = last.prev
element.prev.next = None
else:
x= element.prev
element.prev= x
y = x.next
y.prev = x
return head, last
trip_head, last = convert_np_array_to_DLL(np.array(range(10))
trip_head.data
head=trip_head.next
head=head.next
delete_DLL(trip_head, trip_head, last)