1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

"""Progress report printers.""" 

 

 

class ReportBase(object): 

COLUMN_NAMES = NotImplemented 

COLUMN_WIDTHS = NotImplemented 

ITERATION_FORMATS = NotImplemented 

 

@classmethod 

def print_header(cls): 

fmt = ("|" 

+ "|".join(["{{:^{}}}".format(x) for x in cls.COLUMN_WIDTHS]) 

+ "|") 

separators = ['-' * x for x in cls.COLUMN_WIDTHS] 

print(fmt.format(*cls.COLUMN_NAMES)) 

print(fmt.format(*separators)) 

 

@classmethod 

def print_iteration(cls, *args): 

iteration_format = ["{{:{}}}".format(x) for x in cls.ITERATION_FORMATS] 

fmt = "|" + "|".join(iteration_format) + "|" 

print(fmt.format(*args)) 

 

@classmethod 

def print_footer(cls): 

print() 

 

 

class BasicReport(ReportBase): 

COLUMN_NAMES = ["niter", "f evals", "CG iter", "obj func", "tr radius", 

"opt", "c viol"] 

COLUMN_WIDTHS = [7, 7, 7, 13, 10, 10, 10] 

ITERATION_FORMATS = ["^7", "^7", "^7", "^+13.4e", 

"^10.2e", "^10.2e", "^10.2e"] 

 

 

class SQPReport(ReportBase): 

COLUMN_NAMES = ["niter", "f evals", "CG iter", "obj func", "tr radius", 

"opt", "c viol", "penalty", "CG stop"] 

COLUMN_WIDTHS = [7, 7, 7, 13, 10, 10, 10, 10, 7] 

ITERATION_FORMATS = ["^7", "^7", "^7", "^+13.4e", "^10.2e", "^10.2e", 

"^10.2e", "^10.2e", "^7"] 

 

 

class IPReport(ReportBase): 

COLUMN_NAMES = ["niter", "f evals", "CG iter", "obj func", "tr radius", 

"opt", "c viol", "penalty", "barrier param", "CG stop"] 

COLUMN_WIDTHS = [7, 7, 7, 13, 10, 10, 10, 10, 13, 7] 

ITERATION_FORMATS = ["^7", "^7", "^7", "^+13.4e", "^10.2e", "^10.2e", 

"^10.2e", "^10.2e", "^13.2e", "^7"]