Skip to content

Commit bcab73a

Browse files
Fix(graph): Allow any Line subclass as edge_type in Graph/DiGraph (#4251)
* Fix(graph) : fix Line subclass usage for Graph and DiGraph Fix(graph): LabeledLine can now be used in _add_edge * Test(test_graph.py): add tests for LabeledLine as edge_type in Graph and DiGraph Fix(test_graph): Fixed test_graph_accepts_labeledline_as_edge_type() always failing.
1 parent fdc496c commit bcab73a

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

manim/mobject/graph.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,7 +1035,10 @@ def _add_edge(
10351035
self._edge_config[(u, v)] = edge_config
10361036

10371037
edge_mobject = edge_type(
1038-
self[u].get_center(), self[v].get_center(), z_index=-1, **edge_config
1038+
start=self[u].get_center(),
1039+
end=self[v].get_center(),
1040+
z_index=-1,
1041+
**edge_config,
10391042
)
10401043
self.edges[(u, v)] = edge_mobject
10411044

@@ -1543,8 +1546,8 @@ def _populate_edge_dict(
15431546
):
15441547
self.edges = {
15451548
(u, v): edge_type(
1546-
self[u].get_center(),
1547-
self[v].get_center(),
1549+
start=self[u].get_center(),
1550+
end=self[v].get_center(),
15481551
z_index=-1,
15491552
**self._edge_config[(u, v)],
15501553
)
@@ -1750,8 +1753,8 @@ def _populate_edge_dict(
17501753
):
17511754
self.edges = {
17521755
(u, v): edge_type(
1753-
self[u],
1754-
self[v],
1756+
start=self[u],
1757+
end=self[v],
17551758
z_index=-1,
17561759
**self._edge_config[(u, v)],
17571760
)

tests/module/mobject/test_graph.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pytest
44

5-
from manim import DiGraph, Graph, Scene, Text, tempconfig
5+
from manim import DiGraph, Graph, LabeledLine, Scene, Text, tempconfig
66
from manim.mobject.graph import _layouts
77

88

@@ -91,6 +91,29 @@ def test_graph_remove_edges():
9191
assert set(G.edges.keys()) == set()
9292

9393

94+
def test_graph_accepts_labeledline_as_edge_type():
95+
vertices = [1, 2, 3, 4]
96+
edges = [(1, 2), (2, 3), (3, 4), (4, 1)]
97+
edge_config = {
98+
(1, 2): {"label": "A"},
99+
(2, 3): {"label": "B"},
100+
(3, 4): {"label": "C"},
101+
(4, 1): {"label": "D"},
102+
}
103+
G_manual = Graph(vertices, edges, edge_type=LabeledLine, edge_config=edge_config)
104+
G_directed = DiGraph(
105+
vertices, edges, edge_type=LabeledLine, edge_config=edge_config
106+
)
107+
108+
for _edge_key, edge_obj in G_manual.edges.items():
109+
assert isinstance(edge_obj, LabeledLine)
110+
assert hasattr(edge_obj, "label")
111+
112+
for _edge_key, edge_obj in G_directed.edges.items():
113+
assert isinstance(edge_obj, LabeledLine)
114+
assert hasattr(edge_obj, "label")
115+
116+
94117
def test_custom_animation_mobject_list():
95118
G = Graph([1, 2, 3], [(1, 2), (2, 3)])
96119
scene = Scene()

0 commit comments

Comments
 (0)