docs: def get_inter_tree_distances(self, metric, jobhandler=default_jobhandler,
                                   normalise=False, min_overlap=4, overlap_fail_value=0,
                                   batchsize=1, show_progress=True):
          """ Generate a distance matrix from a fully-populated Collection.
              Can silence progressbars with show_progress=False option
          :param metric: str. Tree distance metric to use. Choice of 'euc', 'geo', 'rf', 'wrf'.
          :param jobhandler: treeCl.Jobhandler. Choice of SequentialJobHandler, ThreadpoolJobHandler, or
              ProcesspoolJobHandler.
          :param normalise:  Bool. Whether to normalise the tree distance to the size of the leaf set.
          :param min_overlap: int. Trees with fewer leaves in common than this threshold will not have their distance
              calculated, but instead the distance returned will be the value in `overlap_fail_value`.
          :param overlap_fail_value: Any. The distance between trees with fewer leaves in common than `min_overlap`
              is set to this value.
          :param batchsize: int. Number of jobs to process in a batch when using a ProcesspoolJobHandler or a
              ThreadpoolJobHandler.
          :return: treeCl.DistanceMatrix.
          """
          metrics = {'euc': tasks.EuclideanTreeDistance,
                     'geo': tasks.GeodesicTreeDistance,
                     'rf': tasks.RobinsonFouldsTreeDistance,
                     'wrf': tasks.WeightedRobinsonFouldsTreeDistance,
                     'fasteuc': tasks.EqualLeafSetEuclideanTreeDistance,
                     'fastgeo': tasks.EqualLeafSetGeodesicTreeDistance,
                     'fastrf': tasks.EqualLeafSetRobinsonFouldsTreeDistance,
                     'fastwrf': tasks.EqualLeafSetWeightedRobinsonFouldsTreeDistance}
          optioncheck(metric, list(metrics.keys()))
          task_interface = metrics[metric]()
          if metric.startswith('fast'):
              trees = (PhyloTree(newick, False) for newick in self.trees)
          else:
              trees = self.trees
          args = task_interface.scrape_args(trees, normalise, min_overlap, overlap_fail_value)
          logger.debug('{}'.format(args))
          msg = task_interface.name if show_progress else ''
          array = jobhandler(task_interface.get_task(), args, msg, batchsize, nargs=binom_coeff(len(trees)))
          return DistanceMatrix.from_array(squareform(array), self.names)