docs: def report(self) -> None:
          """
          Finish and report to the log.
          """
          while self._stack:
              self.stop(self._stack[-1])
          now = get_now_utc_pendulum()
          grand_total = datetime.timedelta()
          overall_duration = now - self._overallstart
          for name, duration in self._totaldurations.items():
              grand_total += duration
  
          log.info("Timing summary:")
          summaries = []
          for name, duration in self._totaldurations.items():
              n = self._count[name]
              total_sec = duration.total_seconds()
              mean = total_sec / n if n > 0 else None
  
              summaries.append({
                  'total': total_sec,
                  'description': (
                      "- {}: {:.3f} s ({:.2f}%, n={}, mean={:.3f}s)".format(
                          name,
                          total_sec,
                          (100 * total_sec / grand_total.total_seconds()),
                          n,
                          mean)),
              })
          summaries.sort(key=lambda x: x['total'], reverse=True)
          for s in summaries:
              # noinspection PyTypeChecker
              log.info(s["description"])
          if not self._totaldurations:
              log.info("<no timings recorded>")
  
          unmetered = overall_duration - grand_total
          log.info(
              "Unmetered time: {:.3f} s ({:.2f}%)",
              unmetered.total_seconds(),
              100 * unmetered.total_seconds() / overall_duration.total_seconds()
          )
          log.info("Total time: {:.3f} s", grand_total.total_seconds())