@@ -419,8 +419,19 @@ cdef class {{name}}HashTable(HashTable):
419
419
return uniques.to_array()
420
420
421
421
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):
422
433
return self._unique(values, uniques={{name}}Vector(), ignore_na=False,
423
- return_inverse=return_inverse )
434
+ return_inverse=True )
424
435
425
436
def factorize(self, {{dtype}}_t[:] values):
426
437
return self._unique(values, uniques={{name}}Vector(), ignore_na=True,
@@ -685,8 +696,19 @@ cdef class StringHashTable(HashTable):
685
696
return uniques.to_array()
686
697
687
698
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):
688
706
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)
690
712
691
713
def factorize(self, ndarray[object] values):
692
714
return self._unique(values, uniques=ObjectVector(), ignore_na=True,
@@ -831,8 +853,19 @@ cdef class PyObjectHashTable(HashTable):
831
853
return uniques.to_array()
832
854
833
855
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):
834
863
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)
836
869
837
870
def factorize(self, ndarray[object] values):
838
871
return self._unique(values, uniques=ObjectVector(), ignore_na=True,
0 commit comments