report.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """Progress report printers."""
  2. from __future__ import annotations
  3. from typing import List
  4. class ReportBase:
  5. COLUMN_NAMES: List[str] = NotImplemented
  6. COLUMN_WIDTHS: List[int] = NotImplemented
  7. ITERATION_FORMATS: List[str] = NotImplemented
  8. @classmethod
  9. def print_header(cls):
  10. fmt = ("|"
  11. + "|".join(["{{:^{}}}".format(x) for x in cls.COLUMN_WIDTHS])
  12. + "|")
  13. separators = ['-' * x for x in cls.COLUMN_WIDTHS]
  14. print(fmt.format(*cls.COLUMN_NAMES))
  15. print(fmt.format(*separators))
  16. @classmethod
  17. def print_iteration(cls, *args):
  18. iteration_format = ["{{:{}}}".format(x) for x in cls.ITERATION_FORMATS]
  19. fmt = "|" + "|".join(iteration_format) + "|"
  20. print(fmt.format(*args))
  21. @classmethod
  22. def print_footer(cls):
  23. print()
  24. class BasicReport(ReportBase):
  25. COLUMN_NAMES = ["niter", "f evals", "CG iter", "obj func", "tr radius",
  26. "opt", "c viol"]
  27. COLUMN_WIDTHS = [7, 7, 7, 13, 10, 10, 10]
  28. ITERATION_FORMATS = ["^7", "^7", "^7", "^+13.4e",
  29. "^10.2e", "^10.2e", "^10.2e"]
  30. class SQPReport(ReportBase):
  31. COLUMN_NAMES = ["niter", "f evals", "CG iter", "obj func", "tr radius",
  32. "opt", "c viol", "penalty", "CG stop"]
  33. COLUMN_WIDTHS = [7, 7, 7, 13, 10, 10, 10, 10, 7]
  34. ITERATION_FORMATS = ["^7", "^7", "^7", "^+13.4e", "^10.2e", "^10.2e",
  35. "^10.2e", "^10.2e", "^7"]
  36. class IPReport(ReportBase):
  37. COLUMN_NAMES = ["niter", "f evals", "CG iter", "obj func", "tr radius",
  38. "opt", "c viol", "penalty", "barrier param", "CG stop"]
  39. COLUMN_WIDTHS = [7, 7, 7, 13, 10, 10, 10, 10, 13, 7]
  40. ITERATION_FORMATS = ["^7", "^7", "^7", "^+13.4e", "^10.2e", "^10.2e",
  41. "^10.2e", "^10.2e", "^13.2e", "^7"]