Skip to content

Commit aab7beb

Browse files
committed
fixing sizeof for PyObjectHashTable
1 parent 77903ad commit aab7beb

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

pandas/_libs/hashtable_class_helper.pxi.in

+5-3
Original file line numberDiff line numberDiff line change
@@ -996,9 +996,11 @@ cdef class PyObjectHashTable(HashTable):
996996

997997
def sizeof(self, deep=False):
998998
""" return the size of my table in bytes """
999-
return self.table.n_buckets * (sizeof(PyObject *) + # keys
1000-
sizeof(Py_ssize_t) + # vals
1001-
sizeof(uint32_t)) # flags
999+
overhead = 4 * sizeof(uint32_t) + 3 * sizeof(uint32_t*)
1000+
for_flags = max(1, self.table.n_buckets >> 5) * sizeof(uint32_t)
1001+
for_pairs = self.table.n_buckets * (sizeof(PyObject *) + # keys
1002+
sizeof(Py_ssize_t)) # vals
1003+
return overhead + for_flags + for_pairs
10021004

10031005
cpdef get_item(self, object val):
10041006
cdef:

pandas/tests/libs/test_hashtable.py

+10-7
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def get_allocated_khash_memory():
2929
@pytest.mark.parametrize(
3030
"table_type, dtype",
3131
[
32+
(ht.PyObjectHashTable, np.object),
3233
(ht.Int64HashTable, np.int64),
3334
(ht.UInt64HashTable, np.uint64),
3435
(ht.Float64HashTable, np.float64),
@@ -73,13 +74,15 @@ def test_get_set_contains_len(self, table_type, dtype):
7374
assert str(index + 2) in str(excinfo.value)
7475

7576
def test_map(self, table_type, dtype):
76-
N = 77
77-
table = table_type()
78-
keys = np.arange(N).astype(dtype)
79-
vals = np.arange(N).astype(np.int64) + N
80-
table.map(keys, vals)
81-
for i in range(N):
82-
assert table.get_item(keys[i]) == i + N
77+
# PyObjectHashTable has no map-method
78+
if table_type != ht.PyObjectHashTable:
79+
N = 77
80+
table = table_type()
81+
keys = np.arange(N).astype(dtype)
82+
vals = np.arange(N).astype(np.int64) + N
83+
table.map(keys, vals)
84+
for i in range(N):
85+
assert table.get_item(keys[i]) == i + N
8386

8487
def test_map_locations(self, table_type, dtype):
8588
N = 8

0 commit comments

Comments
 (0)