docs: private void twoWayMergeInternalWeighted(final ReservoirLongsSketch source) {
      // gadget_ capable of accepting (light) general weights
      assert (gadget_.getN() >= gadget_.getK());
  
      final int numSourceSamples = source.getK();
  
      final double sourceItemWeight = (source.getN() / (double) numSourceSamples);
      final double rescaled_prob = gadget_.getK() * sourceItemWeight; // K * weight
      double targetTotal = gadget_.getN(); // assumes fractional values during merge
  
      final int tgtK = gadget_.getK();
  
      for (int i = 0; i < numSourceSamples; ++i) {
        // inlining the update procedure, using targetTotal for the fractional N values
        // similar to ReservoirLongsSketch.update()
        // p(keep_new_item) = (k * w) / newTotal
        // require p(keep_new_item) < 1.0, meaning strict lightness
  
        targetTotal += sourceItemWeight;
  
        final double rescaled_one = targetTotal;
        assert (rescaled_prob < rescaled_one); // Use an exception to enforce strict lightness?
        final double rescaled_flip = rescaled_one * SamplingUtil.rand.nextDouble();
        if (rescaled_flip < rescaled_prob) {
          // Intentionally NOT doing optimization to extract slot number from rescaled_flip.
          // Grabbing new random bits to ensure all slots in play
          final int slotNo = SamplingUtil.rand.nextInt(tgtK);
          gadget_.insertValueAtPosition(source.getValueAtPosition(i), slotNo);
        } // end of inlined weight update
      } // end of loop over source samples
  
  
      // targetTotal was fractional but should now be an integer again. Could validate with
      // low tolerance, but for now just round to check.
      final long checkN = (long) Math.floor(0.5 + targetTotal);
      gadget_.forceIncrementItemsSeen(source.getN());
      assert (checkN == gadget_.getN());
    }