Skip to content

Commit 52ae84e

Browse files
committed
Force compilation of different code paths
1 parent 9918d52 commit 52ae84e

File tree

1 file changed

+36
-3
lines changed

1 file changed

+36
-3
lines changed

pandas/_libs/hashtable_class_helper.pxi.in

+36-3
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,19 @@ cdef class {{name}}HashTable(HashTable):
419419
return uniques.to_array()
420420

421421
def unique(self, const {{dtype}}_t[:] values, bint return_inverse=False):
422+
# define separate functions with/without inverse to force compilation
423+
# of the different code paths for boolean "return_inverse"
424+
if return_inverse:
425+
return self._unique_with_inverse(values)
426+
return self._unique_no_inverse(values)
427+
428+
def _unique_no_inverse(self, const {{dtype}}_t[:] values):
429+
return self._unique(values, uniques={{name}}Vector(), ignore_na=False,
430+
return_inverse=False)
431+
432+
def _unique_with_inverse(self, const {{dtype}}_t[:] values):
422433
return self._unique(values, uniques={{name}}Vector(), ignore_na=False,
423-
return_inverse=return_inverse)
434+
return_inverse=True)
424435

425436
def factorize(self, {{dtype}}_t[:] values):
426437
return self._unique(values, uniques={{name}}Vector(), ignore_na=True,
@@ -685,8 +696,19 @@ cdef class StringHashTable(HashTable):
685696
return uniques.to_array()
686697

687698
def unique(self, ndarray[object] values, bint return_inverse=False):
699+
# define separate functions with/without inverse to force compilation
700+
# of the different code paths for boolean "return_inverse"
701+
if return_inverse:
702+
return self._unique_with_inverse(values)
703+
return self._unique_no_inverse(values)
704+
705+
def _unique_no_inverse(self, ndarray[object] values):
688706
return self._unique(values, uniques=ObjectVector(), ignore_na=False,
689-
return_inverse=return_inverse)
707+
return_inverse=False)
708+
709+
def _unique_with_inverse(self, ndarray[object] values):
710+
return self._unique(values, uniques=ObjectVector(), ignore_na=False,
711+
return_inverse=True)
690712

691713
def factorize(self, ndarray[object] values):
692714
return self._unique(values, uniques=ObjectVector(), ignore_na=True,
@@ -831,8 +853,19 @@ cdef class PyObjectHashTable(HashTable):
831853
return uniques.to_array()
832854

833855
def unique(self, ndarray[object] values, bint return_inverse=False):
856+
# define separate functions with/without inverse to force compilation
857+
# of the different code paths for boolean "return_inverse"
858+
if return_inverse:
859+
return self._unique_with_inverse(values)
860+
return self._unique_no_inverse(values)
861+
862+
def _unique_no_inverse(self, ndarray[object] values):
834863
return self._unique(values, uniques=ObjectVector(), ignore_na=False,
835-
return_inverse=return_inverse)
864+
return_inverse=False)
865+
866+
def _unique_with_inverse(self, ndarray[object] values):
867+
return self._unique(values, uniques=ObjectVector(), ignore_na=False,
868+
return_inverse=True)
836869

837870
def factorize(self, ndarray[object] values):
838871
return self._unique(values, uniques=ObjectVector(), ignore_na=True,

0 commit comments

Comments
 (0)