code: def assign_order(self):
          
          linkage_groups = self.linkage_groups
          for mlg in linkage_groups:
              mapname = mlg.mapname
              if mapname == self.pivot:
                  pivot_position = mlg.position
  
          for mlg in linkage_groups:
              position = mlg.position
              # Flip order if path goes in the opposite direction to the pivot
              common = []
              for a, ap in position.items():
                  if a not in pivot_position:
                      continue
                  pp = pivot_position[a]
                  common.append((ap, pp))
  
              mlg.rho = get_rho(common)
              if mlg.rho < 0:
                  mlg.path = mlg.path[::-1]
  
              mlg.populate_pairwise_distance()
  
          # Preparation of TSP
          distances = defaultdict(list)
          for mlg in linkage_groups:
              mapname = mlg.mapname
              position = mlg.position
              length = mlg.length
              path = mlg.path
              rho = mlg.rho
              dd = mlg.distances
              for a, b in combinations(path, 2):
                  d = dd[a, b]
                  distances[a, b].append((d, mapname))
              for p in path:
                  adist, bdist = position[p], length - position[p]
                  if rho < 0:
                      adist, bdist = bdist, adist
                  distances[START, p].append((adist, mapname))
                  distances[p, END].append((bdist, mapname))
  
          self.distances = distances
          tour = self.distances_to_tour()
          return tour
docs: The goal is to assign scaffold orders. To help order the scaffolds, two
          dummy node, START and END, mark the ends of the chromosome. We connect
          START to each scaffold (directed), and each scaffold to END.