docs: def process_sums(self):
          """
              Process cardinality sums participating in a new core.
              Whenever necessary, some of the sum assumptions are
              removed or split (depending on the value of
              ``self.minw``). Deleted sums are marked as garbage and are
              dealt with in :func:`filter_assumps`.
  
              In some cases, the process involves updating the
              right-hand sides of the existing cardinality sums (see the
              call to :func:`update_sum`). The overall procedure is
              detailed in [1]_.
          """
  
          for l in self.core_sums:
              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)
              else:
                  # do not remove this variable from assumps
                  # since it has a remaining non-zero weight
                  self.wght[l] -= self.minw
  
              # increase bound for the sum
              t, b = self.update_sum(l)
  
              # updating bounds and weights
              if b < len(t.rhs):
                  lnew = -t.rhs[b]
                  if lnew in self.garbage:
                      self.garbage.remove(lnew)
                      self.wght[lnew] = 0
  
                  if lnew not in self.wght:
                      self.set_bound(t, b)
                  else:
                      self.wght[lnew] += self.minw
  
              # put this assumption to relaxation vars
              self.rels.append(-l)