1
1
from collections import defaultdict
2
- import weakref
3
2
4
3
cimport cython
5
4
from cpython.pyport cimport PY_SSIZE_T_MAX
6
5
from cpython.slice cimport PySlice_GetIndicesEx
6
+ from cpython.weakref cimport PyWeakref_NewRef
7
7
from cython cimport Py_ssize_t
8
8
9
9
import numpy as np
@@ -746,7 +746,7 @@ cdef class BlockManager:
746
746
# -------------------------------------------------------------------
747
747
# Block Placement
748
748
749
- def _rebuild_blknos_and_blklocs (self ) -> None :
749
+ cpdef _rebuild_blknos_and_blklocs(self ):
750
750
"""
751
751
Update mgr._blknos / mgr._blklocs.
752
752
"""
@@ -890,12 +890,12 @@ cdef class BlockValuesRefs:
890
890
891
891
def __cinit__(self , blk: Block | None = None ) -> None:
892
892
if blk is not None:
893
- self.referenced_blocks = [weakref.ref (blk)]
893
+ self.referenced_blocks = [PyWeakref_NewRef (blk, None )]
894
894
else:
895
895
self.referenced_blocks = []
896
896
self.clear_counter = 500 # set reasonably high
897
897
898
- def _clear_dead_references(self , force = False ) -> None :
898
+ cdef _clear_dead_references(self , bint force = False ):
899
899
# Use exponential backoff to decide when we want to clear references
900
900
# if force=False. Clearing for every insertion causes slowdowns if
901
901
# all these objects stay alive, e.g. df.items() for wide DataFrames
@@ -910,7 +910,7 @@ cdef class BlockValuesRefs:
910
910
elif nr_of_refs > self .clear_counter:
911
911
self .clear_counter = max (self .clear_counter * 2 , nr_of_refs)
912
912
913
- def add_reference(self , blk: Block ) -> None :
913
+ cpdef add_reference(self , Block blk) :
914
914
""" Adds a new reference to our reference collection.
915
915
916
916
Parameters
@@ -919,7 +919,7 @@ cdef class BlockValuesRefs:
919
919
The block that the new references should point to.
920
920
"""
921
921
self ._clear_dead_references()
922
- self.referenced_blocks.append(weakref.ref (blk ))
922
+ self .referenced_blocks.append(PyWeakref_NewRef (blk, None ))
923
923
924
924
def add_index_reference (self , index: object ) -> None:
925
925
"""Adds a new reference to our reference collection when creating an index.
@@ -930,7 +930,7 @@ cdef class BlockValuesRefs:
930
930
The index that the new reference should point to.
931
931
"""
932
932
self._clear_dead_references()
933
- self.referenced_blocks.append(weakref.ref (index ))
933
+ self.referenced_blocks.append(PyWeakref_NewRef (index , None ))
934
934
935
935
def has_reference(self ) -> bool:
936
936
"""Checks if block has foreign references.
0 commit comments