def __init__(self, pltf_dir, exts=None): self.base_dir = pltf_dir from collections import defaultdict self.cur_key = curent_date() self.plot_dicts = {self.cur_key: defaultdict(draw_dict)} self.plot_dict = self.plot_dicts[self.cur_key] self.cur_dir = self.savedir()
def __init__(self, pltf_dir, exts=None): self.base_dir = pltf_dir from collections import defaultdict self.cur_key = curent_date() self.plot_dict = defaultdict(draw_dict) self.cur_dir = None self.ftags = [] self.tags = set()
def _initial(self): """初始化,会在实例被创建完成后调用""" if self._start_time is None: self._start_time = curent_date(self._time_fmt) sys.excepthook = self.exc_end atexit.register(self.end) gitutils().regist_exps(self.exp_repo, self._exp_name, self.exp_dir) self.exp_repo.check_commit() # 在regist_exp 后运行,因为该方法可能导致 repo.json 文件修改 self._write() else: warnings.warn("start the same experiment twice is not suggested.")
def mark(self, key, add_now=False): if self.ends: warnings.warn( "called end method, please use start to restart timeit") return key = str(key) offset, now = self.offset() if add_now: self.times[key] = curent_date("%H:%M:%S") else: self.times.setdefault(key, 0) self.times[key] += offset self.times.setdefault("use", 0) self.times["use"] += offset
def end(self, end_code=0, **extra): """ 手动结束试验时调用该方法可以传入其他信息写入文件, 该方法同时还通过 atexit 注册了退出钩子,如果不调用该方法,则在程序正常退出前会自动调用该方法写入结束文件。 通过pycharm等IDE结束时,由于其结束机制不是通过抛出 KeyboardInterrupt 异常停止的,所以该方法存在没有正常调 用的情况,此时文件中不会记录结束用时和退出状态码,也可以做为实验失败的判断条件。 注意,结束状态仅会调用一次,无论是正常结束(对应方法end())还是异常结束(对应方法exc_end()), 在调用后的任何对实验的操作均不会写入到文件中 :param end_code: 退出状态码,表明程序是否正常结束,以免引起数据混乱 :param extra: :return: """ self._write( end_time=curent_date(self._time_fmt), end_code=end_code, **extra ) self._end_state = True
def report(self, every=20, otherinfo=None): every = max(every, 1) from thexp.utils.markdown_writer import Markdown md = Markdown() md.add_title(curent_date("%y-%m-%d-%H:%M:%S")) if otherinfo is not None: md.extends(otherinfo) for k, v in self.plot_dict.items(): md.add_title(k, level=2) if "fn" in v: md.add_picture("./{}".format(v["fn"]), k, False) lines = [] head = ["step"] vars = ["values"] for x, y in zip(v["x"][::every], v["y"][::every]): head.append("**{}**".format(x)) vars.append("{:.4f}".format(y)) if len(head) > 10: lines.append(head) lines.append(vars) head = ["**step**"] vars = ["values"] if len(head) != 1: lines.append(head) lines.append(vars) md.add_table(lines) dir = self.cur_dir fn = os.path.join(dir, self.reportfile) md.to_file(fn) return fn
def report(self, every=20, otherinfo=None): every = max(every, 1) from thexp.utils.markdown_writer import Markdown md = Markdown() md.add_title(curent_date("%y-%m-%d-%H:%M:%S")) with md.code() as code: for tag in self.tags: code.add_line(tag) if otherinfo is not None: md.extends(otherinfo) md.add_title("Vars", level=2) self.savefig() for k, v in self.plot_dict.items(): md.add_title(k, level=3) if "fn" in v: md.add_picture("./{}".format(v["fn"]), k, False) lines = [] head = ["step"] vars = ["values"] xs = [] ys = [] for x, y in zip(v["x"][::every], v["y"][::every]): head.append("**{}**".format(x)) vars.append("{:.4f}".format(y)) xs.append(x) ys.append(y) if len(head) > 10: lines.append(head) lines.append(vars) head = ["**step**"] vars = ["values"] if len(head) != 1: lines.append(head) lines.append(vars) ys = [float("{:.4f}".format(y)) for y in v["y"]] md.add_table(lines) code = """ every = {} xs = {} ys = {} plt.plot(xs[::every],ys[::every]) plt.title({}) """.format(every, v["x"], ys, k) md.add_code(code, "python") md.add_title("Files", level=2) with md.quote() as q: q.add_text("PWD : {}".format(os.getcwd())) with md.table() as table: table.head(["index", "tag", "file"]) for i, (file, tag) in enumerate(self.ftags): table.append([i, tag, file]) dir = self.savedir fn = os.path.join(dir, self.reportfile) md.to_file(fn) return fn