Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions manim/mobject/value_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,21 +118,45 @@ def __iadd__(self, d_value: float | Mobject) -> Self:
self.increment_value(d_value)
return self

def __floordiv__(self, d_value: float) -> ValueTracker:
"""Return a new :class:`ValueTracker` whose value is the floor division of the current
tracker's value by ``d_value``.
"""
return ValueTracker(self.get_value() // d_value)

def __ifloordiv__(self, d_value: float) -> Self:
"""Set the value of this ValueTracker to the floor division of the current value by ``d_value``."""
self.set_value(self.get_value() // d_value)
return self

def __mod__(self, d_value: float) -> ValueTracker:
"""Return a new :class:`ValueTracker` whose value is the current tracker's value
modulo ``d_value``.
"""
return ValueTracker(self.get_value() % d_value)

def __imod__(self, d_value: float) -> Self:
"""Set the value of this ValueTracker to the current value modulo ``d_value``."""
self.set_value(self.get_value() % d_value)
return self

def __mul__(self, d_value: float) -> ValueTracker:
"""Return a new :class:`ValueTracker` whose value is the current tracker's value multiplied by
``d_value``.
"""
return ValueTracker(self.get_value() * d_value)

def __imul__(self, d_value: float) -> Self:
"""Set the value of this ValueTracker to the product of the current value and ``d_value``."""
self.set_value(self.get_value() * d_value)
return self

def __pow__(self, d_value: float) -> ValueTracker:
"""Return a new :class:`ValueTracker` whose value is the current tracker's value raised to the
power of ``d_value``.
"""
return ValueTracker(self.get_value() ** d_value)

def __ipow__(self, d_value: float) -> Self:
"""Set the value of this ValueTracker to the current value raised to the power of ``d_value``."""
self.set_value(self.get_value() ** d_value)
Expand All @@ -157,6 +181,12 @@ def __isub__(self, d_value: float | Mobject) -> Self:
self.increment_value(-d_value)
return self

def __truediv__(self, d_value: float) -> ValueTracker:
"""Return a new :class:`ValueTracker` whose value is the current tracker's value
divided by ``d_value``.
"""
return ValueTracker(self.get_value() / d_value)

def __itruediv__(self, d_value: float) -> Self:
"""Sets the value of this ValueTracker to the current value divided by ``d_value``."""
self.set_value(self.get_value() / d_value)
Expand Down
49 changes: 49 additions & 0 deletions tests/module/mobject/test_value_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,48 +39,97 @@ def test_value_tracker_bool():
assert tracker


def test_value_tracker_add():
"""Test ValueTracker.__add__()"""
tracker = ValueTracker(0.0)
tracker2 = tracker + 10.0
assert tracker2.get_value() == 10.0


def test_value_tracker_iadd():
"""Test ValueTracker.__iadd__()"""
tracker = ValueTracker(0.0)
tracker += 10.0
assert tracker.get_value() == 10.0


def test_value_tracker_floordiv():
"""Test ValueTracker.__floordiv__()"""
tracker = ValueTracker(5.0)
tracker2 = tracker // 2.0
assert tracker2.get_value() == 2.0


def test_value_tracker_ifloordiv():
"""Test ValueTracker.__ifloordiv__()"""
tracker = ValueTracker(5.0)
tracker //= 2.0
assert tracker.get_value() == 2.0


def test_value_tracker_mod():
"""Test ValueTracker.__mod__()"""
tracker = ValueTracker(20.0)
tracker2 = tracker % 3.0
assert tracker2.get_value() == 2.0


def test_value_tracker_imod():
"""Test ValueTracker.__imod__()"""
tracker = ValueTracker(20.0)
tracker %= 3.0
assert tracker.get_value() == 2.0


def test_value_tracker_mul():
"""Test ValueTracker.__mul__()"""
tracker = ValueTracker(3.0)
tracker2 = tracker * 4.0
assert tracker2.get_value() == 12.0


def test_value_tracker_imul():
"""Test ValueTracker.__imul__()"""
tracker = ValueTracker(3.0)
tracker *= 4.0
assert tracker.get_value() == 12.0


def test_value_tracker_pow():
"""Test ValueTracker.__pow__()"""
tracker = ValueTracker(3.0)
tracker2 = tracker**3.0
assert tracker2.get_value() == 27.0


def test_value_tracker_ipow():
"""Test ValueTracker.__ipow__()"""
tracker = ValueTracker(3.0)
tracker **= 3.0
assert tracker.get_value() == 27.0


def test_value_tracker_sub():
"""Test ValueTracker.__sub__()"""
tracker = ValueTracker(20.0)
tracker2 = tracker - 10.0
assert tracker2.get_value() == 10.0


def test_value_tracker_isub():
"""Test ValueTracker.__isub__()"""
tracker = ValueTracker(20.0)
tracker -= 10.0
assert tracker.get_value() == 10.0


def test_value_tracker_truediv():
"""Test ValueTracker.__truediv__()"""
tracker = ValueTracker(5.0)
tracker2 = tracker / 2.0
assert tracker2.get_value() == 2.5


def test_value_tracker_itruediv():
"""Test ValueTracker.__itruediv__()"""
tracker = ValueTracker(5.0)
Expand Down