code: def order_pseudotime(self):
          
          # within segs_tips, order tips according to pseudotime
          if self.iroot is not None:
              for itips, tips in enumerate(self.segs_tips):
                  if tips[0] != -1:
                      indices = np.argsort(self.pseudotime[tips])
                      self.segs_tips[itips] = self.segs_tips[itips][indices]
                  else:
                      logg.m('    group', itips, 'is very small', v=4)
          # sort indices according to segments
          indices = np.argsort(self.segs_names)
          segs_names = self.segs_names[indices]
          # find changepoints of segments
          changepoints = np.arange(indices.size-1)[np.diff(segs_names) == 1] + 1
          if self.iroot is not None:
              pseudotime = self.pseudotime[indices]
              for iseg, seg in enumerate(self.segs):
                  # only consider one segment, it's already ordered by segment
                  seg_sorted = seg[indices]
                  # consider the pseudotime on this segment and sort them
                  seg_indices = np.argsort(pseudotime[seg_sorted])
                  # within the segment, order indices according to increasing pseudotime
                  indices[seg_sorted] = indices[seg_sorted][seg_indices]
          # define class members
          self.indices = indices
          self.changepoints = changepoints
docs: Define indices that reflect segment and pseudotime order.
  
          Writes
          ------
          indices : np.ndarray
              Index array of shape n, which stores an ordering of the data points
              with respect to increasing segment index and increasing pseudotime.
          changepoints : np.ndarray
              Index array of shape len(ssegs)-1, which stores the indices of
              points where the segment index changes, with respect to the ordering
              of indices.