MCPcopy Create free account
hub / github.com/PyTables/PyTables / do_complete_sort

Method do_complete_sort

tables/index.py:944–1063  ·  view source on GitHub ↗

Bring an already optimized index into a complete sorted state.

(self)

Source from the content-addressed store, hash-verified

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

Callers 1

optimizeMethod · 0.95

Calls 3

search_item_ltMethod · 0.95
update_cachesMethod · 0.95
compute_overlapsMethod · 0.95

Tested by

no test coverage detected