code: def calc_distances(self, indices=None, task_interface=None, jobhandler=default_jobhandler, batchsize=1,
                         show_progress=True):
          
          if indices is None:
              indices = list(range(len(self)))
  
          if task_interface is None:
              task_interface = tasks.MLDistanceTaskInterface()
  
          records = [self[i] for i in indices]
  
          # Assemble argument lists
          args, to_delete = task_interface.scrape_args(records)
  
          # Dispatch
          msg = '{} estimation'.format(task_interface.name) if show_progress else ''
          map_result = jobhandler(task_interface.get_task(), args, msg, batchsize)
  
          # Process results
          with fileIO.TempFileList(to_delete):
              # pbar = setup_progressbar('Processing results', len(map_result))
              # j = 0
              # pbar.start()
              for rec, result in zip(records, map_result):
                  rec.parameters.partitions.distances = result['partitions'][0]['distances']
                  rec.parameters.partitions.variances = result['partitions'][0]['variances']
                  rec.parameters.nj_tree = result['nj_tree']
docs: Calculate fast approximate intra-alignment pairwise distances and variances using
          ML (requires ML models to have been set up using `calc_trees`).
          :return: None (all side effects)