|
1 | 1 | """ |
2 | 2 | observers... |
3 | 3 | """ |
4 | | -from __future__ import print_function |
5 | | -import os |
6 | | -import json |
7 | 4 | from datetime import datetime |
8 | | - |
9 | 5 | from .event import Events |
10 | | -from .util import Colours |
11 | 6 |
|
12 | 7 |
|
13 | 8 | class Observer: |
@@ -51,124 +46,3 @@ def _time_metrics(self): |
51 | 46 | time_elapsed.total_seconds(), |
52 | 47 | time_delta.total_seconds() |
53 | 48 | ) |
54 | | - |
55 | | - |
56 | | -def _get_default_logger(verbose): |
57 | | - return ScreenLogger(verbose=verbose) |
58 | | - |
59 | | - |
60 | | -class ScreenLogger(_Tracker): |
61 | | - _default_cell_size = 9 |
62 | | - _default_precision = 4 |
63 | | - |
64 | | - def __init__(self, verbose=2): |
65 | | - self._verbose = verbose |
66 | | - self._header_length = None |
67 | | - super(ScreenLogger, self).__init__() |
68 | | - |
69 | | - @property |
70 | | - def verbose(self): |
71 | | - return self._verbose |
72 | | - |
73 | | - @verbose.setter |
74 | | - def verbose(self, v): |
75 | | - self._verbose = v |
76 | | - |
77 | | - def _format_number(self, x): |
78 | | - if isinstance(x, int): |
79 | | - s = "{x:< {s}}".format( |
80 | | - x=x, |
81 | | - s=self._default_cell_size, |
82 | | - ) |
83 | | - else: |
84 | | - s = "{x:< {s}.{p}}".format( |
85 | | - x=x, |
86 | | - s=self._default_cell_size, |
87 | | - p=self._default_precision, |
88 | | - ) |
89 | | - |
90 | | - if len(s) > self._default_cell_size: |
91 | | - if "." in s: |
92 | | - return s[:self._default_cell_size] |
93 | | - else: |
94 | | - return s[:self._default_cell_size - 3] + "..." |
95 | | - return s |
96 | | - |
97 | | - def _format_key(self, key): |
98 | | - s = "{key:^{s}}".format( |
99 | | - key=key, |
100 | | - s=self._default_cell_size |
101 | | - ) |
102 | | - if len(s) > self._default_cell_size: |
103 | | - return s[:self._default_cell_size - 3] + "..." |
104 | | - return s |
105 | | - |
106 | | - def _step(self, instance, colour=Colours.black): |
107 | | - res = instance.res[-1] |
108 | | - cells = [] |
109 | | - |
110 | | - cells.append(self._format_number(self._iterations + 1)) |
111 | | - cells.append(self._format_number(res["target"])) |
112 | | - |
113 | | - for key in instance.space.keys: |
114 | | - cells.append(self._format_number(res["params"][key])) |
115 | | - |
116 | | - return "| " + " | ".join(map(colour, cells)) + " |" |
117 | | - |
118 | | - def _header(self, instance): |
119 | | - cells = [] |
120 | | - cells.append(self._format_key("iter")) |
121 | | - cells.append(self._format_key("target")) |
122 | | - for key in instance.space.keys: |
123 | | - cells.append(self._format_key(key)) |
124 | | - |
125 | | - line = "| " + " | ".join(cells) + " |" |
126 | | - self._header_length = len(line) |
127 | | - return line + "\n" + ("-" * self._header_length) |
128 | | - |
129 | | - def _is_new_max(self, instance): |
130 | | - if self._previous_max is None: |
131 | | - self._previous_max = instance.max["target"] |
132 | | - return instance.max["target"] > self._previous_max |
133 | | - |
134 | | - def update(self, event, instance): |
135 | | - if event == Events.OPTMIZATION_START: |
136 | | - line = self._header(instance) + "\n" |
137 | | - elif event == Events.OPTMIZATION_STEP: |
138 | | - is_new_max = self._is_new_max(instance) |
139 | | - if self._verbose == 1 and not is_new_max: |
140 | | - line = "" |
141 | | - else: |
142 | | - colour = Colours.purple if is_new_max else Colours.black |
143 | | - line = self._step(instance, colour=colour) + "\n" |
144 | | - elif event == Events.OPTMIZATION_END: |
145 | | - line = "=" * self._header_length + "\n" |
146 | | - |
147 | | - if self._verbose: |
148 | | - print(line, end="") |
149 | | - self._update_tracker(event, instance) |
150 | | - |
151 | | -class JSONLogger(_Tracker): |
152 | | - def __init__(self, path): |
153 | | - self._path = path if path[-5:] == ".json" else path + ".json" |
154 | | - try: |
155 | | - os.remove(self._path) |
156 | | - except OSError: |
157 | | - pass |
158 | | - super(JSONLogger, self).__init__() |
159 | | - |
160 | | - def update(self, event, instance): |
161 | | - if event == Events.OPTMIZATION_STEP: |
162 | | - data = dict(instance.res[-1]) |
163 | | - |
164 | | - now, time_elapsed, time_delta = self._time_metrics() |
165 | | - data["datetime"] = { |
166 | | - "datetime": now, |
167 | | - "elapsed": time_elapsed, |
168 | | - "delta": time_delta, |
169 | | - } |
170 | | - |
171 | | - with open(self._path, "a") as f: |
172 | | - f.write(json.dumps(data) + "\n") |
173 | | - |
174 | | - self._update_tracker(event, instance) |
0 commit comments