@@ -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
6167class 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
0 commit comments