Bring an already optimized index into a complete sorted state.
(self)
| 942 | return |
| 943 | |
| 944 | def do_complete_sort(self) -> None: |
| 945 | """Bring an already optimized index into a complete sorted state.""" |
| 946 | if self.verbose: |
| 947 | t1 = clock() |
| 948 | c1 = cpuclock() |
| 949 | ss = self.slicesize |
| 950 | tmp = self.tmp |
| 951 | ranges = tmp.ranges[:] |
| 952 | nslices = self.nslices |
| 953 | |
| 954 | nelements_lr = self.nelementsILR |
| 955 | if nelements_lr > 0: |
| 956 | # Add the ranges corresponding to the last row |
| 957 | rangeslr = np.array([self.bebounds[0], self.bebounds[-1]]) |
| 958 | ranges = np.concatenate((ranges, [rangeslr])) |
| 959 | nslices += 1 |
| 960 | |
| 961 | sorted_ = tmp.sorted |
| 962 | indices = tmp.indices |
| 963 | sorted_lr = tmp.sortedLR |
| 964 | indices_lr = tmp.indicesLR |
| 965 | sremain = np.array([], dtype=self.dtype) |
| 966 | iremain = np.array([], dtype="u%d" % self.indsize) |
| 967 | starts = np.zeros(shape=nslices, dtype=np.int_) |
| 968 | for i in range(nslices): |
| 969 | # Find the overlapping elements for slice i |
| 970 | sover = np.array([], dtype=self.dtype) |
| 971 | iover = np.array([], dtype="u%d" % self.indsize) |
| 972 | prev_end = ranges[i, 1] |
| 973 | for j in range(i + 1, nslices): |
| 974 | stj = starts[j] |
| 975 | if (j < self.nslices and stj == ss) or ( |
| 976 | j == self.nslices and stj == nelements_lr |
| 977 | ): |
| 978 | # This slice has been already dealt with |
| 979 | continue |
| 980 | if j < self.nslices: |
| 981 | assert ( |
| 982 | stj < ss |
| 983 | ), "Two slices cannot overlap completely at this stage!" |
| 984 | next_beg = sorted_[j, stj] |
| 985 | else: |
| 986 | assert ( |
| 987 | stj < nelements_lr |
| 988 | ), "Two slices cannot overlap completely at this stage!" |
| 989 | next_beg = sorted_lr[stj] |
| 990 | next_end = ranges[j, 1] |
| 991 | if prev_end > next_end: |
| 992 | # Complete overlapping case |
| 993 | if j < self.nslices: |
| 994 | sover = np.concatenate((sover, sorted_[j, stj:])) |
| 995 | iover = np.concatenate((iover, indices[j, stj:])) |
| 996 | starts[j] = ss |
| 997 | else: |
| 998 | n = nelements_lr |
| 999 | sover = np.concatenate((sover, sorted_lr[stj:n])) |
| 1000 | iover = np.concatenate((iover, indices_lr[stj:n])) |
| 1001 | starts[j] = nelements_lr |
no test coverage detected