Skip to content

Commit e88cd64

Browse files
committed
Fixed _init_curve_memory and _update_curve_memory using references instead of copies, and other mistakes
1 parent 3fdb54a commit e88cd64

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

manim/mobject/types/vectorized_mobject.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,7 +1342,7 @@ def _init_curve_memory(self, sample_points: int = 10):
13421342
)
13431343

13441344
self.memory["piece_curves"] = {
1345-
"points": self.points,
1345+
"points": self.points.copy(),
13461346
"sample_points": sample_points,
13471347
"lengths": lengths,
13481348
"acc_lengths": np.add.accumulate(lengths),
@@ -1371,38 +1371,48 @@ def _update_curve_memory(self, sample_points: int = 10):
13711371
neq2 = neq[:, 0]
13721372
for i in range(1, self.dim):
13731373
neq2 |= neq[:, i]
1374-
# Collapse every group of 4 values into a single value per curve.
1374+
# Collapse every group of 4 (or nppcc) values into a single value per curve.
13751375
neq2 = neq2.reshape(-1, nppcc)
13761376
differences = neq2[:, 0]
13771377
for i in range(1, nppcc):
13781378
differences |= neq2[:, i]
13791379
differences = np.arange(n_curves)[differences]
13801380

13811381
# If the amount of points has changed, adjust lengths
1382-
curr_n_curves = curr_n_points / nppcc
1383-
memo_n_curves = memo_n_points / nppcc
1384-
if curr_n_points < memo_n_points:
1385-
new_lengths = self.memory["piece_curves"]["lengths"][:curr_n_curves]
1386-
self.memory["piece_curves"]["lengths"] = new_lengths
1387-
elif curr_n_points > memo_n_points:
1382+
curr_n_curves = curr_n_points // nppcc
1383+
memo_n_curves = memo_n_points // nppcc
1384+
if curr_n_points > memo_n_points:
13881385
new_lengths = np.empty(curr_n_curves)
1389-
new_lengths[:memo_n_curves] = self.memory["piece_curves"]
1386+
new_lengths[:memo_n_curves] = self.memory["piece_curves"]["lengths"]
13901387
new_lengths[memo_n_curves:] = [
13911388
self.get_nth_curve_length(n, sample_points)
13921389
for n in range(memo_n_curves, curr_n_curves)
13931390
]
1391+
new_lengths[differences] = [
1392+
self.get_nth_curve_length(n, sample_points) for n in differences
1393+
]
13941394
self.memory["piece_curves"]["lengths"] = new_lengths
1395-
1396-
# Update memo, recalculating only the lengths which have changed
1397-
self.memory["piece_curves"]["points"] = curr_points
1398-
self.memory["piece_curves"]["lengths"][differences] = [
1399-
self.get_nth_curve_length(n) for n in differences
1400-
]
1401-
if differences.shape[0] > 0:
14021395
self.memory["piece_curves"]["acc_lengths"] = np.add.accumulate(
14031396
self.memory["piece_curves"]["lengths"]
14041397
)
14051398

1399+
else:
1400+
new_lengths = self.memory["piece_curves"]["lengths"][:curr_n_curves]
1401+
new_lengths[differences] = [
1402+
self.get_nth_curve_length(n, sample_points) for n in differences
1403+
]
1404+
self.memory["piece_curves"]["lengths"] = new_lengths
1405+
if differences.shape[0] == 0:
1406+
self.memory["piece_curves"]["acc_lengths"] = self.memory[
1407+
"piece_curves"
1408+
]["acc_lengths"][:curr_n_curves]
1409+
else:
1410+
self.memory["piece_curves"]["acc_lengths"] = np.add.accumulate(
1411+
self.memory["piece_curves"]["lengths"]
1412+
)
1413+
1414+
self.memory["piece_curves"]["points"] = curr_points.copy()
1415+
14061416
def get_nth_curve_points(self, n: int) -> np.ndarray:
14071417
"""Returns the points defining the nth curve of the vmobject.
14081418

0 commit comments

Comments
 (0)