docs: @Override
    public <N extends SpatialComparable> List<List<N>> partition(List<N> spatialObjects, int minEntries, int maxEntries) {
      List<List<N>> partitions = new ArrayList<>();
      List<N> objects = new ArrayList<>(spatialObjects);
  
      while (!objects.isEmpty()) {
        StringBuilder msg = new StringBuilder();
  
        // get the split axis and split point
        int splitAxis = chooseMaximalExtendedSplitAxis(objects);
        int splitPoint = chooseBulkSplitPoint(objects.size(), minEntries, maxEntries);
        if (LOG.isDebugging()) {
          msg.append("\nsplitAxis ").append(splitAxis);
          msg.append("\nsplitPoint ").append(splitPoint);
        }
  
        // sort in the right dimension
        Collections.sort(objects, new SpatialSingleMinComparator(splitAxis));
  
        // insert into partition
        List<N> partition1 = new ArrayList<>();
        for (int i = 0; i < splitPoint; i++) {
          N o = objects.remove(0);
          partition1.add(o);
        }
        partitions.add(partition1);
  
        // copy array
        if (LOG.isDebugging()) {
          msg.append("\ncurrent partition ").append(partition1);
          msg.append("\nremaining objects # ").append(objects.size());
          LOG.debugFine(msg.toString());
        }
      }
  
      if (LOG.isDebugging()) {
        LOG.debugFine("partitions " + partitions);
      }
      return partitions;
    }