code: def select_segment(self, segs, segs_tips, segs_undecided) -> Tuple[int, int]:
          scores_tips = np.zeros((len(segs), 4))
          allindices = np.arange(self._adata.shape[0], dtype=int)
          for iseg, seg in enumerate(segs):
              if segs_tips[iseg][0] == -1: continue
              if not isinstance(self.distances_dpt, OnFlySymMatrix):
                  Dseg = self.distances_dpt[np.ix_(seg, seg)]
              else:
                  Dseg = self.distances_dpt.restrict(seg)
              third_maximizer = None
              if segs_undecided[iseg]:
                  for jseg in range(len(segs)):
                      if jseg != iseg:
                          for itip in range(2):
                              if (self.distances_dpt[segs_tips[jseg][1], segs_tips[iseg][itip]]
                                  < 0.5 * self.distances_dpt[segs_tips[iseg][~itip], segs_tips[iseg][itip]]):
                                  third_maximizer = itip
              tips = [np.where(allindices[seg] == tip)[0][0]
                      for tip in segs_tips[iseg]]
              dseg = Dseg[tips[0]] + Dseg[tips[1]]
              if not np.isfinite(dseg).any():
                  continue
              third_tip = np.argmax(dseg)
              if third_maximizer is not None:
                  dseg += Dseg[third_tip]
                  fourth_tip = np.argmax(dseg)
                  if fourth_tip != tips[0] and fourth_tip != third_tip:
                      tips[1] = fourth_tip
                      dseg -= Dseg[tips[1]]
                  else:
                      dseg -= Dseg[third_tip]
              tips3 = np.append(tips, third_tip)
              score = dseg[tips3[2]] / Dseg[tips3[0], tips3[1]]
              score = len(seg) if self.choose_largest_segment else score
              logg.m('    group', iseg, 'score', score, 'n_points', len(seg),
                     '(too small)' if len(seg) < self.min_group_size else '', v=4)
              if len(seg) <= self.min_group_size: score = 0
              scores_tips[iseg, 0] = score
              scores_tips[iseg, 1:] = tips3
          iseg = np.argmax(scores_tips[:, 0])
          if scores_tips[iseg, 0] == 0: return -1, None
          tips3 = scores_tips[iseg, 1:].astype(int)
          return iseg, tips3