docs: def process_sels(self):
          """
              A redefined version of :func:`RC2.process_sels`. The only
              modification affects the clauses whose weight after
              splitting becomes less than the weight of the current
              optimization level. Such clauses are deactivated and to be
              reactivated at a later stage.
          """
  
          # new relaxation variables
          self.rels = []
  
          # selectors that should be deactivated (but not removed completely)
          to_deactivate = set([])
  
          for l in self.core_sels:
              if self.wght[l] == self.minw:
                  # marking variable as being a part of the core
                  # so that next time it is not used as an assump
                  self.garbage.add(l)
  
                  # reuse assumption variable as relaxation
                  self.rels.append(-l)
              else:
                  # do not remove this variable from assumps
                  # since it has a remaining non-zero weight
                  self.wght[l] -= self.minw
  
                  # deactivate this assumption and put at a lower level
                  if self.wght[l] < self.blop[self.levl]:
                      self.wstr[self.wght[l]].append(l)
                      to_deactivate.add(l)
  
                  # it is an unrelaxed soft clause,
                  # a new relaxed copy of which we add to the solver
                  self.topv += 1
                  self.oracle.add_clause([l, self.topv])
                  self.rels.append(self.topv)
  
          # deactivating unnecessary selectors
          self.sels = list(filter(lambda x: x not in to_deactivate, self.sels))