docs: private void growCandidateSet(double wtCands, int numCands) {
      assert (h_ + m_ + r_) == (k_ + 1);
      assert numCands >= 2;       // essential
      assert numCands == (m_ + r_); // essential
      assert (m_ == 0) || (m_ == 1);
  
      while (h_ > 0) {
        final double nextWt = peekMin();
        final double nextTotWt = wtCands + nextWt;
  
        // test for strict lightness of next prospect (denominator multiplied through)
        // ideally: (nextWt * (nextNumCands-1) < nextTotWt) but can just
        //          use numCands directly
        if ((nextWt * numCands) < nextTotWt) {
          wtCands = nextTotWt;
          ++numCands;
          popMinToMRegion(); // adjusts h_ and m_
        } else {
          break;
        }
      }
  
      downsampleCandidateSet(wtCands, numCands);
    }