code: def sort(self):
          
          if self.is_guaranteed_sorted:
              self.log(u"Already sorted, returning")
              return
          self.log(u"Sorting...")
          self.__fragments = sorted(self.__fragments)
          self.log(u"Sorting... done")
          self.log(u"Checking relative positions...")
          for i in range(len(self) - 1):
              current_interval = self[i].interval
              next_interval = self[i + 1].interval
              if current_interval.relative_position_of(next_interval) not in self.ALLOWED_POSITIONS:
                  self.log(u"Found overlapping fragments:")
                  self.log([u"  Index %d => %s", i, current_interval])
                  self.log([u"  Index %d => %s", i + 1, next_interval])
                  self.log_exc(u"The list contains two fragments overlapping in a forbidden way", None, True, ValueError)
          self.log(u"Checking relative positions... done")
          self.__sorted = True
docs: Sort the fragments in the list.
  
          :raises ValueError: if there is a fragment which violates
                              the list constraints