Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve performance for :meth:.Mobject.become #2508

Merged
merged 25 commits into from Jan 29, 2022
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
447cd9d
Improve become method
Darylgolden Jan 29, 2022
07ea5ea
Merge branch 'main' into performance-speedup
Darylgolden Jan 29, 2022
20b4dd3
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 29, 2022
1def0e5
Make match_num_points kwarg
Darylgolden Jan 29, 2022
44d46d9
Merge branch 'performance-speedup' of https://github.com/Darylgolden/…
Darylgolden Jan 29, 2022
5fa2f54
fix test
Darylgolden Jan 29, 2022
98e2577
typehint and kwarg
Darylgolden Jan 29, 2022
1f5cc82
Add tests for become
Darylgolden Jan 29, 2022
3354667
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 29, 2022
fa66dbd
experiment
Darylgolden Jan 29, 2022
d838b45
Merge branch 'performance-speedup' of https://github.com/Darylgolden/…
Darylgolden Jan 29, 2022
90295b2
Undo match_num_points
Darylgolden Jan 29, 2022
95e8579
readd return self
Darylgolden Jan 29, 2022
811784c
test fix
Darylgolden Jan 29, 2022
6adc0a2
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 29, 2022
9c1ad07
undo changes to match points
Darylgolden Jan 29, 2022
a9517cc
use skip point alignment
Darylgolden Jan 29, 2022
1050dca
Merge branch 'performance-speedup' of https://github.com/Darylgolden/…
Darylgolden Jan 29, 2022
d9867ee
delete accidental inclusion
Darylgolden Jan 29, 2022
13d4a6b
Added documentation
Darylgolden Jan 29, 2022
f7c47d3
Minor correction
Darylgolden Jan 29, 2022
e216ce4
fix indentation
Darylgolden Jan 29, 2022
669a203
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 29, 2022
613e6e9
fix formatting
Darylgolden Jan 29, 2022
5a1cd62
Merge branch 'performance-speedup' of https://github.com/Darylgolden/…
Darylgolden Jan 29, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions manim/mobject/mobject.py
Expand Up @@ -2471,10 +2471,11 @@ def construct(self):
return self.shuffle(*args, **kwargs)

# Alignment
def align_data(self, mobject: "Mobject"):
def align_data(self, mobject: "Mobject", skip_point_alignment: bool = False):
Darylgolden marked this conversation as resolved.
Show resolved Hide resolved
self.null_point_align(mobject)
self.align_submobjects(mobject)
self.align_points(mobject)
if not skip_point_alignment:
self.align_points(mobject)
# Recurse
for m1, m2 in zip(self.submobjects, mobject.submobjects):
m1.align_data(m2)
Expand Down Expand Up @@ -2644,7 +2645,7 @@ def construct(self):
if match_center:
mobject.move_to(self.get_center())

self.align_data(mobject)
self.align_data(mobject, skip_point_alignment=True)
for sm1, sm2 in zip(self.get_family(), mobject.get_family()):
sm1.points = np.array(sm2.points)
sm1.interpolate_color(sm1, sm2, 1)
Expand All @@ -2667,7 +2668,6 @@ def construct(self):
self.play(circ.animate.match_points(square))
self.wait(0.5)
"""
self.align_data(mobject)
for sm1, sm2 in zip(self.get_family(), mobject.get_family()):
sm1.points = np.array(sm2.points)
return self
Expand Down
26 changes: 25 additions & 1 deletion tests/test_vectorized_mobject.py
Expand Up @@ -3,7 +3,7 @@
import numpy as np
import pytest

from manim import Circle, Line, Mobject, Square, VDict, VGroup, VMobject
from manim import Circle, Line, Mobject, RegularPolygon, Square, VDict, VGroup, VMobject
from manim.constants import PI


Expand Down Expand Up @@ -265,3 +265,27 @@ def draw_circle(m: VMobject, n_points, x=0, y=0, r=1):

# The number of points should be similar to the size of a and b
assert len(o.points) <= (20 + 15 + 15) * 4


def test_vmobject_same_points_become():
a = Square()
b = Circle()
a.become(b)
assert np.array_equal(a.points, b.points)
assert len(a.submobjects) == len(b.submobjects)


def test_vmobject_same_num_submobjects_become():
a = Square()
b = RegularPolygon(n=6)
a.become(b)
assert np.array_equal(a.points, b.points)
assert len(a.submobjects) == len(b.submobjects)


def test_vmobject_different_num_points_and_submobjects_become():
a = Square()
b = VGroup(Circle(), Square())
a.become(b)
assert np.array_equal(a.points, b.points)
assert len(a.submobjects) == len(b.submobjects)