示例#1
0
def _show_metrics(metrics,
                  all_branches=False,
                  all_tags=False,
                  all_commits=False):
    from dvc.utils.diff import format_dict
    from dvc.utils.flatten import flatten

    # When `metrics` contains a `None` key, it means that some files
    # specified as `targets` in `repo.metrics.show` didn't contain any metrics.
    missing = metrics.pop(None, None)

    lines = []
    for branch, val in metrics.items():
        if all_branches or all_tags or all_commits:
            lines.append(f"{branch}:")

        for fname, metric in val.items():
            if not isinstance(metric, dict):
                lines.append("\t{}: {}".format(fname, str(metric)))
                continue

            lines.append(f"\t{fname}:")
            for key, value in flatten(format_dict(metric)).items():
                lines.append(f"\t\t{key}: {value}")

    if missing:
        raise BadMetricError(missing)

    return "\n".join(lines)
示例#2
0
文件: metrics.py 项目: rogervaas/dvc
def show_metrics(metrics,
                 all_branches=False,
                 all_tags=False,
                 all_commits=False):
    from flatten_json import flatten
    from dvc.utils.diff import format_dict

    # When `metrics` contains a `None` key, it means that some files
    # specified as `targets` in `repo.metrics.show` didn't contain any metrics.
    missing = metrics.pop(None, None)

    for branch, val in metrics.items():
        if all_branches or all_tags or all_commits:
            logger.info("{branch}:".format(branch=branch))

        for fname, metric in val.items():
            if not isinstance(metric, dict):
                logger.info("\t{}: {}".format(fname, str(metric)))
                continue

            logger.info("\t{}:".format(fname))
            for key, value in flatten(format_dict(metric), ".").items():
                logger.info("\t\t{}: {}".format(key, value))

    if missing:
        raise BadMetricError(missing)
示例#3
0
文件: metrics.py 项目: yk/dvc
def show_metrics(metrics, all_branches=False, all_tags=False):
    """
    Args:
        metrics (list): Where each element is either a `list`
            if an xpath was specified, otherwise a `str`
    """
    # When `metrics` contains a `None` key, it means that some files
    # specified as `targets` in `repo.metrics.show` didn't contain any metrics.
    missing = metrics.pop(None, None)

    for branch, val in metrics.items():
        if all_branches or all_tags:
            logger.info("{branch}:".format(branch=branch))

        for fname, metric in val.items():
            lines = metric if type(metric) is list else metric.splitlines()

            if len(lines) > 1:
                logger.info("\t{fname}:".format(fname=fname))

                for line in lines:
                    logger.info("\t\t{content}".format(content=line))

            else:
                logger.info("\t{}: {}".format(fname, metric))

    if missing:
        raise BadMetricError(missing)
示例#4
0
文件: metrics.py 项目: jheister/dvc
def _show_metrics(
    metrics,
    markdown=False,
    all_branches=False,
    all_tags=False,
    all_commits=False,
    precision=None,
):
    from dvc.utils.diff import format_dict, table
    from dvc.utils.flatten import flatten

    # When `metrics` contains a `None` key, it means that some files
    # specified as `targets` in `repo.metrics.show` didn't contain any metrics.
    missing = metrics.pop(None, None)
    with_rev = any([all_branches, all_tags, all_commits])
    header_set = set()
    rows = []

    if precision is None:
        precision = DEFAULT_PRECISION

    def _round(val):
        if isinstance(val, float):
            return round(val, precision)
        return val

    for _branch, val in metrics.items():
        for _fname, metric in val.items():
            if not isinstance(metric, dict):
                header_set.add("")
                continue
            for key, _val in flatten(format_dict(metric)).items():
                header_set.add(key)
    header = sorted(header_set)
    for branch, val in metrics.items():
        for fname, metric in val.items():
            row = []
            if with_rev:
                row.append(branch)
            row.append(fname)
            if not isinstance(metric, dict):
                row.append(str(metric))
                rows.append(row)
                continue
            flattened_val = flatten(format_dict(metric))

            for i in header:
                row.append(_round(flattened_val.get(i)))
            rows.append(row)
    header.insert(0, "Path")
    if with_rev:
        header.insert(0, "Revision")

    if missing:
        raise BadMetricError(missing)
    return table(header, rows, markdown)
示例#5
0
文件: metrics.py 项目: stjordanis/dvc
    def run(self):
        try:
            metrics = self.repo.metrics.show(
                self.args.targets,
                all_branches=self.args.all_branches,
                all_tags=self.args.all_tags,
                all_commits=self.args.all_commits,
                recursive=self.args.recursive,
            )
        except DvcException:
            logger.exception("")
            return 1

        if self.args.show_json:
            import json

            logger.info(json.dumps(metrics))
        else:
            from dvc.compare import show_metrics

            # When `metrics` contains a `None` key, it means that some files
            # specified as `targets` in `repo.metrics.show` didn't contain any
            # metrics.
            missing = metrics.pop(None, None)
            if missing:
                raise BadMetricError(missing)

            show_metrics(
                metrics,
                markdown=self.args.show_md,
                all_branches=self.args.all_branches,
                all_tags=self.args.all_tags,
                all_commits=self.args.all_commits,
                precision=self.args.precision or DEFAULT_PRECISION,
                round_digits=True,
            )

        return 0
示例#6
0
文件: show.py 项目: brbarkley/dvc
def show(
    self,
    path=None,
    typ=None,
    xpath=None,
    all_branches=False,
    all_tags=False,
    recursive=False,
):
    res = {}

    for branch in self.brancher(all_branches=all_branches, all_tags=all_tags):
        entries = _collect_metrics(self, path, recursive, typ, xpath, branch)
        metrics = _read_metrics(self, entries, branch)
        if metrics:
            res[branch] = metrics

    if not res:
        if path:
            raise BadMetricError(path)
        raise NoMetricsError()

    return res