def _searchDepth(self, depth, len, isearch): li = self._lengthIndex; load = self._loadAux if depth >= 0: return load(li, len+depth) return setOperation('or', [load(li, d) for d in range(len, len-depth+1)], isearch, )
def _searchLength(self, level, depth, isearch): try: limit = self._depth + 1 except: limit = 0 if level is None: level = -limit if depth is None: depth = -limit lo = hi = 0 if level >= 0: lo += level hi += level else: hi += -level if depth >= 0: lo += depth hi += depth else: hi += -depth li = self._lengthIndex load = self._loadAux if lo == hi: return load(li, lo) return setOperation( 'or', [load(li, l) for l in range(lo, min(hi + 1, limit))], isearch, )
def _searchAt(self, path, pos, depth, isearch): '''search for *path* at *pos* restricted by *depth*.''' load = self._load sets = [load((i+pos, seg)) for (i,seg) in enumerate(path)] if depth is not None: sets.append(self._searchDepth(depth, pos + len(path), isearch)) return setOperation('and', sets, isearch)
def _searchAt(self, path, pos, depth, isearch): '''search for *path* at *pos* restricted by *depth*.''' load = self._load sets = [load((i + pos, seg)) for (i, seg) in enumerate(path)] if depth is not None: sets.append(self._searchDepth(depth, pos + len(path), isearch)) return setOperation('and', sets, isearch)
def _searchDepth(self, depth, len, isearch): li = self._lengthIndex load = self._loadAux if depth >= 0: return load(li, len + depth) return setOperation( 'or', [load(li, d) for d in range(len, len - depth + 1)], isearch, )
def _searchTerm(self, path, record): level = record.get('level', 0) depth = record.get('depth') isearch = record.get('isearch') if not path: return self._searchLength(level, depth, isearch) if level is not None and level >= 0: return self._searchAt(path, level, depth, isearch) try: limit = self._depth + 1 except ValueError: limit = 0 limit -= len(path) if level is not None: limit = min(limit, -level+1) return setOperation( 'or', [self._searchAt(path, l, depth, isearch) for l in range(limit)], isearch, )
def _searchLength(self, level, depth, isearch): try: limit = self._depth + 1 except: limit = 0 if level is None: level = -limit if depth is None: depth = -limit lo = hi = 0 if level >= 0: lo += level; hi += level else: hi += -level if depth >= 0: lo += depth; hi += depth else: hi += -depth li = self._lengthIndex; load = self._loadAux if lo == hi: return load(li, lo) return setOperation('or', [load(li,l) for l in range(lo, min(hi+1,limit))], isearch, )
def _load(self, term, isearch=False): '''return IISet for documents matching *term*.''' sets = []; mkSet = self._mkSet if self.OrganisationHighThenLow: for hi in self._index.values(term): for dl in hi.values(None, term): sets.append(mkSet(dl)) else: for li in self._index.values(None, term): for dl in li.values(term): sets.append(mkSet(dl)) min = self._minValue; max = self._maxValue if min is not None: for dl in self._upperOnly.values(term): sets.append(mkSet(dl)) if max is not None: for dl in self._lowerOnly.values(None, term): sets.append(mkSet(dl)) if min is not None: sets.append(mkSet(self._unrestricted.get(min))) return setOperation('or', sets, isearch)
def _searchTerm(self, path, record): level = record.get('level', 0) depth = record.get('depth') isearch = record.get('isearch') if not path: return self._searchLength(level, depth, isearch) if level is not None and level >= 0: return self._searchAt(path, level, depth, isearch) try: limit = self._depth + 1 except ValueError: limit = 0 limit -= len(path) if level is not None: limit = min(limit, -level + 1) return setOperation( 'or', [self._searchAt(path, l, depth, isearch) for l in range(limit)], isearch, )
def _load(self, term, isearch=False): '''return IISet for documents matching *term*.''' sets = [] mkSet = self._mkSet if self.OrganisationHighThenLow: for hi in self._index.values(term): for dl in hi.values(None, term): sets.append(mkSet(dl)) else: for li in self._index.values(None, term): for dl in li.values(term): sets.append(mkSet(dl)) min = self._minValue max = self._maxValue if min is not None: for dl in self._upperOnly.values(term): sets.append(mkSet(dl)) if max is not None: for dl in self._lowerOnly.values(None, term): sets.append(mkSet(dl)) if min is not None: sets.append(mkSet(self._unrestricted.get(min))) return setOperation('or', sets, isearch)