mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-09 23:10:24 +01:00
Show target metric deltas
This commit is contained in:
+11
-1
@@ -14,6 +14,7 @@ class Commit(object):
|
||||
self._comment = comment
|
||||
self._is_target = is_target
|
||||
self._target_metric = target_metric
|
||||
self._target_metric_delta = None
|
||||
self._branch_tips = [] if branch_tips is None else branch_tips
|
||||
|
||||
self._is_collapsed = False
|
||||
@@ -41,11 +42,13 @@ class Commit(object):
|
||||
metric_text = ''
|
||||
if self._is_target and self._target_metric:
|
||||
metric_text = '\nTarget metric: {}'.format(self._target_metric)
|
||||
if self._target_metric_delta is not None:
|
||||
metric_text += ' ({:+f})'.format(self._target_metric_delta)
|
||||
|
||||
if self._is_collapsed:
|
||||
return branch_text + self.COLLAPSED_TEXT + metric_text
|
||||
|
||||
return branch_text + self._comment[:self.TEXT_LIMIT] + '\n' + self.hash + metric_text
|
||||
return branch_text + self._comment[:self.TEXT_LIMIT] + metric_text + '\n' + self.hash
|
||||
|
||||
@property
|
||||
def is_repro(self):
|
||||
@@ -73,3 +76,10 @@ class Commit(object):
|
||||
def add_branch_tips(self, tips):
|
||||
for tip in tips:
|
||||
self._branch_tips.append(tip)
|
||||
|
||||
def set_target_metric_delta(self, value):
|
||||
self._target_metric_delta = value
|
||||
|
||||
@property
|
||||
def target_metric_delta(self):
|
||||
return self._target_metric_delta
|
||||
|
||||
+34
-2
@@ -1,6 +1,7 @@
|
||||
import networkx as nx
|
||||
|
||||
from dvc.exceptions import DvcException
|
||||
from dvc.logger import Logger
|
||||
|
||||
|
||||
class WorkflowError(DvcException):
|
||||
@@ -9,13 +10,13 @@ class WorkflowError(DvcException):
|
||||
|
||||
|
||||
class Workflow(object):
|
||||
def __init__(self, target, merges_map, branches_map=None, root='', no_repro_commits=True):
|
||||
def __init__(self, target, merges_map, branches_map=None, no_repro_commits=True):
|
||||
self._target = target
|
||||
self._merges_map = merges_map
|
||||
self._branches_map = branches_map
|
||||
|
||||
self._commits = {}
|
||||
self._root = root
|
||||
self._root_hash = None
|
||||
|
||||
self._edges = {}
|
||||
self._back_edges = {}
|
||||
@@ -35,11 +36,16 @@ class Workflow(object):
|
||||
self._back_edges[commit.hash] = set()
|
||||
for p in commit.parent_hashes:
|
||||
self._back_edges[commit.hash].add(p)
|
||||
|
||||
if not commit.parent_hashes:
|
||||
self._root_hash = commit.hash
|
||||
pass
|
||||
|
||||
def build_graph(self):
|
||||
g = nx.DiGraph(name='DVC Workflow', directed=False)
|
||||
|
||||
self.derive_target_metric_deltas()
|
||||
|
||||
if self._no_repro_commits:
|
||||
self.collapse_repro_commits()
|
||||
|
||||
@@ -120,3 +126,29 @@ class Workflow(object):
|
||||
for h in commit_hashes:
|
||||
edges[h].remove(hash)
|
||||
edges[h] |= child_commit_hashes
|
||||
|
||||
def derive_target_metric_deltas(self):
|
||||
if not self._target:
|
||||
return
|
||||
|
||||
if self._root_hash not in self._commits:
|
||||
Logger.warn('Root commit cannot be found')
|
||||
|
||||
current_target_metric = None
|
||||
commit = self._commits[self._root_hash]
|
||||
self._traverse_target_metric(commit, current_target_metric)
|
||||
pass
|
||||
|
||||
def _traverse_target_metric(self, commit, current_target_metric):
|
||||
new_target_metric = current_target_metric
|
||||
if commit.target_metric is not None:
|
||||
new_target_metric = commit.target_metric
|
||||
if current_target_metric is None:
|
||||
commit.set_target_metric_delta(0.0)
|
||||
else:
|
||||
commit.set_target_metric_delta(new_target_metric - current_target_metric)
|
||||
|
||||
if commit.hash in self._edges:
|
||||
for hash in self._edges[commit.hash]:
|
||||
self._traverse_target_metric(self._commits[hash], new_target_metric)
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user