diff --git a/include/pocketpy/collections.h b/include/pocketpy/collections.h index 83543a1a..e983de8e 100644 --- a/include/pocketpy/collections.h +++ b/include/pocketpy/collections.h @@ -12,7 +12,7 @@ namespace pkpy // STARTING HERE struct PyDeque { - PY_CLASS(PyDeque, mycollections, deque); + PY_CLASS(PyDeque, collections, deque); PyDeque(VM *vm, PyObject *iterable, PyObject* maxlen); @@ -51,5 +51,5 @@ namespace pkpy void _gc_mark() const; // needed for container types, mark all objects in the deque for gc }; - void add_module_mycollections(VM *vm); + void add_module_collections(VM *vm); } // namespace pkpy \ No newline at end of file diff --git a/python/collections.py b/python/collections.py index 75d99567..9a6571df 100644 --- a/python/collections.py +++ b/python/collections.py @@ -1,110 +1,110 @@ -class _LinkedListNode: - def __init__(self, prev, next, value) -> None: - self.prev = prev - self.next = next - self.value = value +# class _LinkedListNode: +# def __init__(self, prev, next, value) -> None: +# self.prev = prev +# self.next = next +# self.value = value -class deque: - def __init__(self, iterable=None) -> None: - self.head = _LinkedListNode(None, None, None) - self.tail = _LinkedListNode(None, None, None) - self.head.next = self.tail - self.tail.prev = self.head - self.size = 0 - if iterable is not None: - for value in iterable: - self.append(value) +# class deque: +# def __init__(self, iterable=None) -> None: +# self.head = _LinkedListNode(None, None, None) +# self.tail = _LinkedListNode(None, None, None) +# self.head.next = self.tail +# self.tail.prev = self.head +# self.size = 0 +# if iterable is not None: +# for value in iterable: +# self.append(value) - def __getitem__(self, index): - assert 0 <= index < len(self) - node = self.head.next - for _ in range(index): - node = node.next - return node.value +# def __getitem__(self, index): +# assert 0 <= index < len(self) +# node = self.head.next +# for _ in range(index): +# node = node.next +# return node.value - def __setitem__(self, index, value): - assert 0 <= index < len(self) - node = self.head.next - for _ in range(index): - node = node.next - node.value = value +# def __setitem__(self, index, value): +# assert 0 <= index < len(self) +# node = self.head.next +# for _ in range(index): +# node = node.next +# node.value = value - def __delitem__(self, index): - assert 0 <= index < len(self) - node = self.head.next - for _ in range(index): - node = node.next - node.prev.next = node.next - node.next.prev = node.prev - self.size -= 1 +# def __delitem__(self, index): +# assert 0 <= index < len(self) +# node = self.head.next +# for _ in range(index): +# node = node.next +# node.prev.next = node.next +# node.next.prev = node.prev +# self.size -= 1 - def clear(self): - self.head.next = self.tail - self.tail.prev = self.head - self.size = 0 +# def clear(self): +# self.head.next = self.tail +# self.tail.prev = self.head +# self.size = 0 - def extend(self, iterable): - for value in iterable: - self.append(value) +# def extend(self, iterable): +# for value in iterable: +# self.append(value) - def append(self, value): - node = _LinkedListNode(self.tail.prev, self.tail, value) - self.tail.prev.next = node - self.tail.prev = node - self.size += 1 +# def append(self, value): +# node = _LinkedListNode(self.tail.prev, self.tail, value) +# self.tail.prev.next = node +# self.tail.prev = node +# self.size += 1 - def appendleft(self, value): - node = _LinkedListNode(self.head, self.head.next, value) - self.head.next.prev = node - self.head.next = node - self.size += 1 +# def appendleft(self, value): +# node = _LinkedListNode(self.head, self.head.next, value) +# self.head.next.prev = node +# self.head.next = node +# self.size += 1 - def pop(self): - assert self.size > 0 - node = self.tail.prev - node.prev.next = self.tail - self.tail.prev = node.prev - self.size -= 1 - return node.value +# def pop(self): +# assert self.size > 0 +# node = self.tail.prev +# node.prev.next = self.tail +# self.tail.prev = node.prev +# self.size -= 1 +# return node.value - def popleft(self): - assert self.size > 0 - node = self.head.next - node.next.prev = self.head - self.head.next = node.next - self.size -= 1 - return node.value +# def popleft(self): +# assert self.size > 0 +# node = self.head.next +# node.next.prev = self.head +# self.head.next = node.next +# self.size -= 1 +# return node.value - def copy(self): - new_list = deque() - for value in self: - new_list.append(value) - return new_list +# def copy(self): +# new_list = deque() +# for value in self: +# new_list.append(value) +# return new_list - def __len__(self): - return self.size +# def __len__(self): +# return self.size - def __iter__(self): - node = self.head.next - while node is not self.tail: - yield node.value - node = node.next +# def __iter__(self): +# node = self.head.next +# while node is not self.tail: +# yield node.value +# node = node.next - def __repr__(self) -> str: - a = list(self) - return f"deque({a})" +# def __repr__(self) -> str: +# a = list(self) +# return f"deque({a})" - def __eq__(self, __o: object) -> bool: - if not isinstance(__o, deque): - return False - if len(self) != len(__o): - return False - t1, t2 = self.head.next, __o.head.next - while t1 is not self.tail: - if t1.value != t2.value: - return False - t1, t2 = t1.next, t2.next - return True +# def __eq__(self, __o: object) -> bool: +# if not isinstance(__o, deque): +# return False +# if len(self) != len(__o): +# return False +# t1, t2 = self.head.next, __o.head.next +# while t1 is not self.tail: +# if t1.value != t2.value: +# return False +# t1, t2 = t1.next, t2.next +# return True def Counter(iterable): a = {} diff --git a/src/collections.cpp b/src/collections.cpp index 9907fc7e..456a964f 100644 --- a/src/collections.cpp +++ b/src/collections.cpp @@ -574,9 +574,11 @@ namespace pkpy } /// @brief registers the PyDeque class /// @param vm is needed for the new_module and register_class - void add_module_mycollections(VM *vm) + void add_module_collections(VM *vm) { - PyObject *mycollections = vm->new_module("mycollections"); // TODO: change this to collections - PyDeque::register_class(vm, mycollections); + PyObject* mod = vm->new_module("collections"); + PyDeque::register_class(vm, mod); + CodeObject_ code = vm->compile(kPythonLibs["collections"], "collections.py", EXEC_MODE); + vm->_exec(code, mod); } } // namespace pkpypkpy diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index 5a265906..1058c12c 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -1722,7 +1722,7 @@ void VM::post_init(){ add_module_base64(this); add_module_timeit(this); - for(const char* name: {"this", "functools", "collections", "heapq", "bisect", "pickle", "_long", "colorsys", "typing", "datetime"}){ + for(const char* name: {"this", "functools", "heapq", "bisect", "pickle", "_long", "colorsys", "typing", "datetime"}){ _lazy_modules[name] = kPythonLibs[name]; } @@ -1745,7 +1745,7 @@ void VM::post_init(){ add_module_linalg(this); add_module_easing(this); - add_module_mycollections(this); + add_module_collections(this); #ifdef PK_USE_BOX2D add_module_box2d(this);