Skip to content

Commit be2beb5

Browse files
authored
Fix metrics report (#72)
1 parent 99346c6 commit be2beb5

3 files changed

Lines changed: 37 additions & 12 deletions

File tree

cli/commands/write_metrics.py

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ class LabelMetricsEntry(BaseModel):
1313
type: str
1414
count: int
1515
percentage: float
16+
17+
18+
class EdgeLabelMetricsEntry(LabelMetricsEntry): ...
19+
20+
21+
class NodeLabelMetricsEntry(LabelMetricsEntry):
1622
avg_degree: float | None = Field(
1723
default=None, description="Average degree for nodes of this type."
1824
)
@@ -53,13 +59,13 @@ class EdgeMetrics(BaseModel):
5359
topology_metrics: EdgeTopologyMetrics = Field(
5460
description="Metrics related to the traversal of edges."
5561
)
56-
label_type: list[LabelMetricsEntry] = Field(
62+
label_type: list[EdgeLabelMetricsEntry] = Field(
5763
description="Count and percentage of edges by their label"
5864
)
5965

6066

6167
class NodeMetrics(BaseModel):
62-
label_type: list[LabelMetricsEntry] = Field(
68+
label_type: list[NodeLabelMetricsEntry] = Field(
6369
description="List of node label combinations and their counts. The label combination is the sorted labels concatenated with '|'."
6470
)
6571

@@ -91,13 +97,32 @@ def _count_element_labels(labels_count: dict[str, int], element: Node | Edge) ->
9197
labels_count[label_key] = labels_count.get(label_key, 0) + 1
9298

9399

94-
def _get_element_metrics(
100+
def _get_edge_label_metrics(
101+
element_label_type: dict[str, int],
102+
num_elements: int,
103+
) -> list[EdgeLabelMetricsEntry]:
104+
"""Returns a list of EdgeLabelMetricsEntry objects sorted by label."""
105+
element_label_stats_list: list[EdgeLabelMetricsEntry] = []
106+
for labels, count in sorted(element_label_type.items()):
107+
percentage = (count / num_elements) * 100 if num_elements > 0 else 0
108+
109+
element_label_stats_list.append(
110+
EdgeLabelMetricsEntry(
111+
type=labels,
112+
count=count,
113+
percentage=round(percentage, 5),
114+
)
115+
)
116+
return element_label_stats_list
117+
118+
119+
def _get_node_label_metrics(
95120
element_label_type: dict[str, int],
96121
num_elements: int,
97-
degrees_by_label: dict[str, list[int]] | None = None,
98-
) -> list[LabelMetricsEntry]:
99-
"""Returns a list of LabelMetricsEntry objects sorted by label."""
100-
element_label_stats_list: list[LabelMetricsEntry] = []
122+
degrees_by_label: dict[str, list[int]],
123+
) -> list[NodeLabelMetricsEntry]:
124+
"""Returns a list of NodeLabelMetricsEntry objects sorted by label."""
125+
element_label_stats_list: list[NodeLabelMetricsEntry] = []
101126
for labels, count in sorted(element_label_type.items()):
102127
percentage = (count / num_elements) * 100 if num_elements > 0 else 0
103128

@@ -112,7 +137,7 @@ def _get_element_metrics(
112137
std_dev_degree = round(std_dev, 5)
113138

114139
element_label_stats_list.append(
115-
LabelMetricsEntry(
140+
NodeLabelMetricsEntry(
116141
type=labels,
117142
count=count,
118143
percentage=round(percentage, 5),
@@ -207,13 +232,13 @@ def _process_input_file(in_path: Path) -> Metrics: # noqa: PLR0915
207232
processed_lines=processed_lines,
208233
malformed_lines=malformed_lines,
209234
node_metrics=NodeMetrics(
210-
label_type=_get_element_metrics(
235+
label_type=_get_node_label_metrics(
211236
node_label_type, num_nodes, degrees_by_label
212237
)
213238
),
214239
edge_metrics=EdgeMetrics(
215240
topology_metrics=edge_topology_metrics,
216-
label_type=_get_element_metrics(edge_label_type, num_edges),
241+
label_type=_get_edge_label_metrics(edge_label_type, num_edges),
217242
),
218243
)
219244

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
66
requires-python = ">=3.12"
77
name = "optimuskg"
88
readme = "README.md"
9-
version = "0.24.0"
9+
version = "0.24.1"
1010
dependencies = [
1111
"ipython>=8.10",
1212
"jupyterlab>=3.0",

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)