docs: def score(self, full_report=False):
          """
          Returns a number between 0 and 1, indicating how suboptimal the tree
          is. The lower, the better. Roughly, this number represents the
          fraction of flawed Intervals in the tree.
          :rtype: float
          """
          if len(self) <= 2:
              return 0.0
  
          n = len(self)
          m = self.top_node.count_nodes()
  
          def s_center_score():
              """
              Returns a normalized score, indicating roughly how many times
              intervals share s_center with other intervals. Output is full-scale
              from 0 to 1.
              :rtype: float
              """
              raw = n - m
              maximum = n - 1
              return raw / float(maximum)
  
          report = {
              "depth": self.top_node.depth_score(n, m),
              "s_center": s_center_score(),
          }
          cumulative = max(report.values())
          report["_cumulative"] = cumulative
          if full_report:
              return report
          return cumulative