Path 1: 14 calls (0.56)

ClassDiagram (14)

1def write_classes(self, diagram: ClassDiagram) -> None:
2        """Write a class diagram."""
3        # sorted to get predictable (hence testable) results
4        for obj in sorted(diagram.objects, key=lambda x: x.title):  # type: ignore[no-any-return]
5            obj.fig_id = obj.node.qname()
6            type_ = NodeType.INTERFACE if obj.shape == "interface" else NodeType.CLASS
7            self.printer.emit_node(
8                obj.fig_id, type_=type_, properties=self.get_class_properties(obj)
9            )
10        # inheritance links
11        for rel in diagram.get_relationships("specialization"):
12            self.printer.emit_edge(
13                rel.from_object.fig_id,
14                rel.to_object.fig_id,
15                type_=EdgeType.INHERITS,
16            )
17        # implementation links
18        for rel in diagram.get_relationships("implements"):
19            self.printer.emit_edge(
20                rel.from_object.fig_id,
21                rel.to_object.fig_id,
22                type_=EdgeType.IMPLEMENTS,
23            )
24        # generate associations
25        for rel in diagram.get_relationships("association"):
26            self.printer.emit_edge(
27                rel.from_object.fig_id,
28                rel.to_object.fig_id,
29                label=rel.name,
30                type_=EdgeType.ASSOCIATION,
31            )
32        # generate aggregations
33        for rel in diagram.get_relationships("aggregation"):
34            self.printer.emit_edge(
35                rel.from_object.fig_id,
36                rel.to_object.fig_id,
37                label=rel.name,
38                type_=EdgeType.AGGREGATION,
39            )
            

Path 2: 9 calls (0.36)

ClassDiagram (9)

1def write_classes(self, diagram: ClassDiagram) -> None:
2        """Write a class diagram."""
3        # sorted to get predictable (hence testable) results
4        for obj in sorted(diagram.objects, key=lambda x: x.title):  # type: ignore[no-any-return]
5            obj.fig_id = obj.node.qname()
6            type_ = NodeType.INTERFACE if obj.shape == "interface" else NodeType.CLASS
7            self.printer.emit_node(
8                obj.fig_id, type_=type_, properties=self.get_class_properties(obj)
9            )
10        # inheritance links
11        for rel in diagram.get_relationships("specialization"):
12            self.printer.emit_edge(
13                rel.from_object.fig_id,
14                rel.to_object.fig_id,
15                type_=EdgeType.INHERITS,
16            )
17        # implementation links
18        for rel in diagram.get_relationships("implements"):
19            self.printer.emit_edge(
20                rel.from_object.fig_id,
21                rel.to_object.fig_id,
22                type_=EdgeType.IMPLEMENTS,
23            )
24        # generate associations
25        for rel in diagram.get_relationships("association"):
26            self.printer.emit_edge(
27                rel.from_object.fig_id,
28                rel.to_object.fig_id,
29                label=rel.name,
30                type_=EdgeType.ASSOCIATION,
31            )
32        # generate aggregations
33        for rel in diagram.get_relationships("aggregation"):
34            self.printer.emit_edge(
35                rel.from_object.fig_id,
36                rel.to_object.fig_id,
37                label=rel.name,
38                type_=EdgeType.AGGREGATION,
39            )
            

Path 3: 1 calls (0.04)

ClassDiagram (1)

1def write_classes(self, diagram: ClassDiagram) -> None:
2        """Write a class diagram."""
3        # sorted to get predictable (hence testable) results
4        for obj in sorted(diagram.objects, key=lambda x: x.title):  # type: ignore[no-any-return]
5            obj.fig_id = obj.node.qname()
6            type_ = NodeType.INTERFACE if obj.shape == "interface" else NodeType.CLASS
7            self.printer.emit_node(
8                obj.fig_id, type_=type_, properties=self.get_class_properties(obj)
9            )
10        # inheritance links
11        for rel in diagram.get_relationships("specialization"):
12            self.printer.emit_edge(
13                rel.from_object.fig_id,
14                rel.to_object.fig_id,
15                type_=EdgeType.INHERITS,
16            )
17        # implementation links
18        for rel in diagram.get_relationships("implements"):
19            self.printer.emit_edge(
20                rel.from_object.fig_id,
21                rel.to_object.fig_id,
22                type_=EdgeType.IMPLEMENTS,
23            )
24        # generate associations
25        for rel in diagram.get_relationships("association"):
26            self.printer.emit_edge(
27                rel.from_object.fig_id,
28                rel.to_object.fig_id,
29                label=rel.name,
30                type_=EdgeType.ASSOCIATION,
31            )
32        # generate aggregations
33        for rel in diagram.get_relationships("aggregation"):
34            self.printer.emit_edge(
35                rel.from_object.fig_id,
36                rel.to_object.fig_id,
37                label=rel.name,
38                type_=EdgeType.AGGREGATION,
39            )
            

Path 4: 1 calls (0.04)

ClassDiagram (1)

1def write_classes(self, diagram: ClassDiagram) -> None:
2        """Write a class diagram."""
3        # sorted to get predictable (hence testable) results
4        for obj in sorted(diagram.objects, key=lambda x: x.title):  # type: ignore[no-any-return]
5            obj.fig_id = obj.node.qname()
6            type_ = NodeType.INTERFACE if obj.shape == "interface" else NodeType.CLASS
7            self.printer.emit_node(
8                obj.fig_id, type_=type_, properties=self.get_class_properties(obj)
9            )
10        # inheritance links
11        for rel in diagram.get_relationships("specialization"):
12            self.printer.emit_edge(
13                rel.from_object.fig_id,
14                rel.to_object.fig_id,
15                type_=EdgeType.INHERITS,
16            )
17        # implementation links
18        for rel in diagram.get_relationships("implements"):
19            self.printer.emit_edge(
20                rel.from_object.fig_id,
21                rel.to_object.fig_id,
22                type_=EdgeType.IMPLEMENTS,
23            )
24        # generate associations
25        for rel in diagram.get_relationships("association"):
26            self.printer.emit_edge(
27                rel.from_object.fig_id,
28                rel.to_object.fig_id,
29                label=rel.name,
30                type_=EdgeType.ASSOCIATION,
31            )
32        # generate aggregations
33        for rel in diagram.get_relationships("aggregation"):
34            self.printer.emit_edge(
35                rel.from_object.fig_id,
36                rel.to_object.fig_id,
37                label=rel.name,
38                type_=EdgeType.AGGREGATION,
39            )