Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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.")
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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