Skip to content

Commit 79b4a0c

Browse files
committed
CLN: remove obsolete MultiIndex engines
1 parent 34df695 commit 79b4a0c

File tree

3 files changed

+0
-211
lines changed

3 files changed

+0
-211
lines changed

pandas/_libs/hashtable.pxd

-9
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,6 @@ cdef class PyObjectHashTable(HashTable):
3131
cpdef get_item(self, object val)
3232
cpdef set_item(self, object key, Py_ssize_t val)
3333

34-
cdef class MultiIndexHashTable(HashTable):
35-
cdef:
36-
kh_uint64_t *table
37-
object mi
38-
39-
cpdef get_item(self, object val)
40-
cpdef set_item(self, object key, Py_ssize_t val)
41-
cdef inline void _check_for_collision(self, Py_ssize_t loc, object label)
42-
4334

4435
cdef class StringHashTable(HashTable):
4536
cdef kh_str_t *table

pandas/_libs/hashtable_class_helper.pxi.in

-136
Original file line numberDiff line numberDiff line change
@@ -899,139 +899,3 @@ cdef class PyObjectHashTable(HashTable):
899899
count += 1
900900

901901
return np.asarray(labels)
902-
903-
904-
cdef class MultiIndexHashTable(HashTable):
905-
906-
def __init__(self, size_hint=1):
907-
self.table = kh_init_uint64()
908-
self.mi = None
909-
kh_resize_uint64(self.table, size_hint)
910-
911-
def __dealloc__(self):
912-
if self.table is not NULL:
913-
kh_destroy_uint64(self.table)
914-
self.table = NULL
915-
916-
def __len__(self):
917-
return self.table.size
918-
919-
def sizeof(self, deep=False):
920-
""" return the size of my table in bytes """
921-
return self.table.n_buckets * (sizeof(uint64_t) + # keys
922-
sizeof(size_t) + # vals
923-
sizeof(uint32_t)) # flags
924-
925-
def _check_for_collisions(self, int64_t[:] locs, object mi):
926-
# validate that the locs map to the actual values
927-
# provided in the mi
928-
# we can only check if we *don't* have any missing values
929-
# :<
930-
cdef:
931-
ndarray[int64_t] alocs
932-
933-
alocs = np.asarray(locs)
934-
if (alocs != -1).all():
935-
936-
result = self.mi.take(locs)
937-
if isinstance(mi, tuple):
938-
from pandas import Index
939-
mi = Index([mi])
940-
if not result.equals(mi):
941-
raise AssertionError(
942-
"hash collision\nlocs:\n{}\n"
943-
"result:\n{}\nmi:\n{}".format(alocs, result, mi))
944-
945-
cdef inline void _check_for_collision(self, Py_ssize_t loc, object label):
946-
# validate that the loc maps to the actual value
947-
# version of _check_for_collisions above for single label (tuple)
948-
949-
result = self.mi[loc]
950-
951-
if not all(l == r or (is_null_datetimelike(l)
952-
and is_null_datetimelike(r))
953-
for l, r in zip(result, label)):
954-
raise AssertionError(
955-
"hash collision\nloc:\n{}\n"
956-
"result:\n{}\nmi:\n{}".format(loc, result, label))
957-
958-
def __contains__(self, object key):
959-
try:
960-
self.get_item(key)
961-
return True
962-
except (KeyError, ValueError, TypeError):
963-
return False
964-
965-
cpdef get_item(self, object key):
966-
cdef:
967-
khiter_t k
968-
uint64_t value
969-
int64_t[:] locs
970-
Py_ssize_t loc
971-
972-
value = self.mi._hashed_indexing_key(key)
973-
k = kh_get_uint64(self.table, value)
974-
if k != self.table.n_buckets:
975-
loc = self.table.vals[k]
976-
self._check_for_collision(loc, key)
977-
return loc
978-
else:
979-
raise KeyError(key)
980-
981-
cpdef set_item(self, object key, Py_ssize_t val):
982-
raise NotImplementedError
983-
984-
@cython.boundscheck(False)
985-
def map_locations(self, object mi):
986-
cdef:
987-
Py_ssize_t i, n
988-
ndarray[uint64_t] values
989-
uint64_t val
990-
int ret = 0
991-
khiter_t k
992-
993-
self.mi = mi
994-
n = len(mi)
995-
values = mi._hashed_values
996-
997-
with nogil:
998-
for i in range(n):
999-
val = values[i]
1000-
k = kh_put_uint64(self.table, val, &ret)
1001-
self.table.vals[k] = i
1002-
1003-
@cython.boundscheck(False)
1004-
def lookup(self, object mi):
1005-
# look up with a target mi
1006-
cdef:
1007-
Py_ssize_t i, n
1008-
ndarray[uint64_t] values
1009-
int ret = 0
1010-
uint64_t val
1011-
khiter_t k
1012-
int64_t[:] locs
1013-
1014-
n = len(mi)
1015-
values = mi._hashed_values
1016-
1017-
locs = np.empty(n, dtype=np.int64)
1018-
1019-
with nogil:
1020-
for i in range(n):
1021-
val = values[i]
1022-
k = kh_get_uint64(self.table, val)
1023-
if k != self.table.n_buckets:
1024-
locs[i] = self.table.vals[k]
1025-
else:
1026-
locs[i] = -1
1027-
1028-
self._check_for_collisions(locs, mi)
1029-
return np.asarray(locs)
1030-
1031-
def unique(self, object mi):
1032-
raise NotImplementedError
1033-
1034-
def get_labels(self, object mi, ObjectVector uniques,
1035-
Py_ssize_t count_prior, int64_t na_sentinel,
1036-
bint check_null=True):
1037-
raise NotImplementedError

pandas/_libs/index.pyx

-66
Original file line numberDiff line numberDiff line change
@@ -686,71 +686,5 @@ cdef class BaseMultiIndexCodesEngine(object):
686686
return False
687687

688688

689-
690-
cdef class MultiIndexObjectEngine(ObjectEngine):
691-
"""
692-
provide the same interface as the MultiIndexEngine
693-
but use the IndexEngine for computation
694-
695-
This provides good performance with samller MI's
696-
"""
697-
def get_indexer(self, values):
698-
# convert a MI to an ndarray
699-
if hasattr(values, 'values'):
700-
values = values.values
701-
return super(MultiIndexObjectEngine, self).get_indexer(values)
702-
703-
cpdef get_loc(self, object val):
704-
705-
# convert a MI to an ndarray
706-
if hasattr(val, 'values'):
707-
val = val.values
708-
return super(MultiIndexObjectEngine, self).get_loc(val)
709-
710-
711-
cdef class MultiIndexHashEngine(ObjectEngine):
712-
"""
713-
Use a hashing based MultiIndex impl
714-
but use the IndexEngine for computation
715-
716-
This provides good performance with larger MI's
717-
"""
718-
719-
def _call_monotonic(self, object mi):
720-
# defer these back to the mi iteself
721-
return (mi.is_monotonic_increasing,
722-
mi.is_monotonic_decreasing,
723-
mi.is_unique)
724-
725-
def get_backfill_indexer(self, other, limit=None):
726-
# we coerce to ndarray-of-tuples
727-
values = np.array(self._get_index_values())
728-
return algos.backfill_object(values, other, limit=limit)
729-
730-
def get_pad_indexer(self, other, limit=None):
731-
# we coerce to ndarray-of-tuples
732-
values = np.array(self._get_index_values())
733-
return algos.pad_object(values, other, limit=limit)
734-
735-
cpdef get_loc(self, object val):
736-
if is_definitely_invalid_key(val):
737-
raise TypeError("'{val}' is an invalid key".format(val=val))
738-
739-
self._ensure_mapping_populated()
740-
if not self.unique:
741-
return self._get_loc_duplicates(val)
742-
743-
try:
744-
return self.mapping.get_item(val)
745-
except TypeError:
746-
raise KeyError(val)
747-
748-
def get_indexer(self, values):
749-
self._ensure_mapping_populated()
750-
return self.mapping.lookup(values)
751-
752-
cdef _make_hash_table(self, n):
753-
return _hash.MultiIndexHashTable(n)
754-
755689
# Generated from template.
756690
include "index_class_helper.pxi"

0 commit comments

Comments
 (0)