code: def similarity(self, track):
          
          idx = index.Index()
          i = 0
          for i, segment in enumerate(self.segments):
              idx.insert(i, segment.bounds(), obj=segment)
  
          final_siml = []
          final_diff = []
          for i, segment in enumerate(track.segments):
              query = idx.intersection(segment.bounds(), objects=True)
  
              res_siml = []
              res_diff = []
              for result in query:
                  siml, diff = segment_similarity(segment, result.object)
                  res_siml.append(siml)
                  res_diff.append((result.id, i, diff))
  
              if len(res_siml) > 0:
                  final_siml.append(max(res_siml))
                  final_diff.append(res_diff[np.argmax(res_siml)])
              else:
                  final_siml.append(0)
                  final_diff.append([])
  
          return np.mean(final_siml), final_diff
docs: Compares two tracks based on their topology
  
          This method compares the given track against this
          instance. It only verifies if given track is close
          to this one, not the other way arround
  
          Args:
              track (:obj:`Track`)
          Returns:
              Two-tuple with global similarity between tracks
              and an array the similarity between segments