Skip to content

Commit decf605

Browse files
authored
Merge pull request #177 from yfukai/score_fix
Score fix
2 parents 4cf4fa1 + 994fd41 commit decf605

File tree

3 files changed

+54
-13
lines changed

3 files changed

+54
-13
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "laptrack"
3-
version = "0.3.1"
3+
version = "0.3.2"
44
description = "LapTrack"
55
authors = ["Yohsuke Fukai <ysk@yfukai.net>"]
66
license = "BSD-3-Clause"

src/laptrack/scores.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,23 +109,30 @@ def calc_scores(
109109
target_effectiveness = _calc_overlap_score(gt_edgess, pred_edgess)
110110

111111
def get_children(m):
112-
return [n for n in gt_tree.neighbors(m) if n[0] > m[0]]
112+
return list(gt_tree.successors(m))
113113

114114
dividing_nodes = [m for m in gt_tree.nodes() if len(get_children(m)) > 1]
115115
division_recovery_count = 0
116+
total_count = 0
116117
for m in dividing_nodes:
117118
children = get_children(m)
118-
if all(
119-
[
120-
(n, m) in predicted_edges or (m, n) in predicted_edges
121-
for n in children
122-
]
123-
):
119+
120+
def check_in(edges):
121+
return all([(n, m) in edges or (m, n) in edges for n in children])
122+
123+
excluded = check_in(exclude_true_edges)
124+
if check_in(predicted_edges) and not excluded:
124125
division_recovery_count += 1
125-
division_recovery = division_recovery_count / len(dividing_nodes)
126+
if not excluded:
127+
total_count += 1
128+
if total_count > 0:
129+
division_recovery = division_recovery_count / total_count
130+
else:
131+
division_recovery = -1
126132

127133
te = set(true_edges) - set(exclude_true_edges)
128134
pe = set(predicted_edges) - set(exclude_true_edges)
135+
print(len(true_edges), len(exclude_true_edges), len(te))
129136
return {
130137
"union_ratio": len(te & pe) / len(te | pe),
131138
"true_ratio": len(te & pe) / len(te),

tests/test_scores.py

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import networkx as nx
2+
import pytest
23

34
from laptrack.scores import calc_scores
45

56

6-
def test_scores() -> None:
7+
@pytest.fixture
8+
def test_trees():
79
true_tree = nx.from_edgelist(
810
[
911
((0, 0), (1, 0)),
@@ -20,8 +22,7 @@ def test_scores() -> None:
2022
]
2123
)
2224

23-
pred_tree = nx.Graph()
24-
pred_tree.add_edges_from(
25+
pred_tree = nx.from_edgelist(
2526
[
2627
((0, 0), (1, 0)),
2728
((1, 0), (2, 0)),
@@ -34,7 +35,11 @@ def test_scores() -> None:
3435
((4, 1), (5, 1)),
3536
]
3637
)
38+
return true_tree, pred_tree
3739

40+
41+
def test_scores(test_trees) -> None:
42+
true_tree, pred_tree = test_trees
3843
score = {
3944
"union_ratio": 8 / 12,
4045
"true_ratio": 8 / 11,
@@ -43,5 +48,34 @@ def test_scores() -> None:
4348
"target_effectiveness": 6 / 11,
4449
"division_recovery": 1,
4550
}
46-
4751
assert score == calc_scores(true_tree.edges, pred_tree.edges)
52+
53+
54+
def test_scores_exclude(test_trees) -> None:
55+
true_tree, pred_tree = test_trees
56+
exclude_edges = [((2, 0), (3, 0)), ((2, 0), (3, 1))]
57+
score = {
58+
"union_ratio": 6 / 10,
59+
"true_ratio": 6 / 9,
60+
"predicted_ratio": 6 / 7,
61+
"track_purity": 7 / 9,
62+
"target_effectiveness": 6 / 11,
63+
"division_recovery": -1,
64+
}
65+
assert score == calc_scores(true_tree.edges, pred_tree.edges, exclude_edges)
66+
67+
68+
def test_scores_exclude2(test_trees) -> None:
69+
true_tree, pred_tree = test_trees
70+
exclude_edges = [
71+
((2, 0), (3, 0)),
72+
]
73+
score = {
74+
"union_ratio": 7 / 11,
75+
"true_ratio": 7 / 10,
76+
"predicted_ratio": 7 / 8,
77+
"track_purity": 7 / 9,
78+
"target_effectiveness": 6 / 11,
79+
"division_recovery": 1,
80+
}
81+
assert score == calc_scores(true_tree.edges, pred_tree.edges, exclude_edges)

0 commit comments

Comments
 (0)