def test_get_updaters(self): obj = Mobject() obj.add_updater(__func__) obj.add_updater(__func__) obj.add_updater(__func__) self.assertListEqual([__func__, __func__, __func__], obj.get_updaters())
def test_add_updater(self): obj = Mobject() self.assertListEqual([], obj.updaters) obj.add_updater(__func__) self.assertListEqual([__func__], obj.updaters) obj.add_updater(__dt_func__) self.assertListEqual([__func__, __dt_func__], obj.updaters)
def test_update_children(self): a, b, c, obj = Mobject(), Mobject(), Mobject(), Mobject() a.add_updater(__func__) b.add_updater(__func__) c.add_updater(__func__) obj.add(a, b, c) obj.update() for sub in obj.submobjects: self.assertEqual("lambda", str(sub))
def test_match_updater_2(self): a, b = Mobject(), Mobject() a.add_updater(__func__) a.add_updater(__dt_func__) self.assertListEqual([__func__, __dt_func__], a.updaters) self.assertListEqual([], b.updaters) a.match_updaters(b) self.assertListEqual([], a.updaters) self.assertListEqual([], b.updaters)
def test_get_family_updater(self): a, b, c, obj = Mobject(), Mobject(), Mobject(), Mobject() obj.add(a, b, c) obj.add_updater(__func__) a.add_updater(__func__) b.add_updater(__func__) c.add_updater(__func__) self.assertListEqual([__func__, __func__, __func__, __func__], obj.get_family_updaters())
def move_along_vector_field( mobject: Mobject, func: Callable[[np.ndarray], np.ndarray] ) -> Mobject: mobject.add_updater( lambda m, dt: m.shift( func(m.get_center()) * dt ) ) return mobject
def move_submobjects_along_vector_field( mobject: Mobject, func: Callable[[np.ndarray], np.ndarray]) -> Mobject: def apply_nudge(mob, dt): for submob in mob: x, y = submob.get_center()[:2] if abs(x) < FRAME_WIDTH and abs(y) < FRAME_HEIGHT: submob.shift(func(submob.get_center()) * dt) mobject.add_updater(apply_nudge) return mobject
def test_clear_updaters_in_children(self): a, b, c, obj = Mobject(), Mobject(), Mobject(), Mobject() obj.add(a, b, c) obj.add_updater(__func__) a.add_updater(__func__) b.add_updater(__func__) c.add_updater(__func__) self.assertListEqual([__func__, __func__, __func__, __func__], obj.get_family_updaters()) obj.clear_updaters() self.assertListEqual([], obj.get_family_updaters())
def move_points_along_vector_field( mobject: Mobject, func: Callable[[float, float], Iterable[float]], coordinate_system: CoordinateSystem) -> Mobject: cs = coordinate_system origin = cs.get_origin() def apply_nudge(self, dt): mobject.apply_function(lambda p: p + (cs.c2p(*func(*cs.p2c(p))) - origin) * dt) mobject.add_updater(apply_nudge) return mobject
def test_update_suspended(self): obj = Mobject(name="obj") obj.updating_suspended = True obj.add_updater(__func__) obj.update() self.assertEqual("obj", str(obj))
def always_rotate(mobject: Mobject, rate: float = 20 * DEGREES, **kwargs) -> Mobject: mobject.add_updater(lambda m, dt: m.rotate(dt * rate, **kwargs)) return mobject
def always_shift(mobject: Mobject, direction: np.ndarray = RIGHT, rate: float = 0.1) -> Mobject: mobject.add_updater(lambda m, dt: m.shift(dt * rate * direction)) return mobject
def test_update_no_dt(self): obj = Mobject() obj.add_updater(__func__) obj.update() self.assertEqual("lambda", obj.name)
def test_remove_no_updater(self): obj = Mobject() obj.add_updater(__func__) self.assertListEqual([__func__], obj.updaters) obj.remove_updater(__dt_func__) self.assertListEqual([__func__], obj.updaters)
def test_update_dt(self): obj = Mobject() obj.add_updater(__dt_func__) obj.update(dt=0.1) self.assertEqual("0.1", str(obj))
def test_add_updater_returns_self(self): obj = Mobject() self.assertEqual(obj, obj.add_updater(__func__))
def test_has_no_dt_updater(self): obj = Mobject() obj.add_updater(__func__) self.assertFalse(obj.has_time_based_updater())