Example #1
0
 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,
                       )
Example #2
0
 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,
     )
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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,
     )
Example #6
0
 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,
     )
Example #7
0
 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)
Example #9
0
 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,
     )
Example #10
0
 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)