docs: protected static void merge(int size, MatrixParadigm mat, DBIDArrayMIter prots, PointerHierarchyRepresentationBuilder builder, Int2ObjectOpenHashMap<ModifiableDBIDs> clusters, DistanceQuery<?> dq, int x, int y) {
      assert (y < x);
      final DBIDArrayIter ix = mat.ix.seek(x), iy = mat.iy.seek(y);
      final double[] distances = mat.matrix;
      int offset = MatrixParadigm.triangleSize(x) + y;
  
      if(LOG.isDebuggingFine()) {
        LOG.debugFine("Merging: " + DBIDUtil.toString(ix) + " -> " + DBIDUtil.toString(iy) + " " + distances[offset]);
      }
  
      ModifiableDBIDs cx = clusters.get(x), cy = clusters.get(y);
  
      // Keep y
      if(cy == null) {
        cy = DBIDUtil.newHashSet();
        cy.add(iy);
      }
      if(cx == null) {
        cy.add(ix);
      }
      else {
        cy.addDBIDs(cx);
        clusters.remove(x);
      }
      clusters.put(y, cy);
  
      // parent of x is set to y
      builder.add(ix, distances[offset], iy, prots.seek(offset));
  
      updateMatrices(size, mat, prots, builder, clusters, dq, y);
    }