def test_apply_over_attr_arrays(): m = Mobject() for attr in m.get_array_attrs(): setattr(m, attr, np.zeros((3, 3))) m.apply_over_attr_arrays(lambda x: x + 1) for attr in m.get_array_attrs(): assert getattr(m, attr) == approx(np.ones((3, 3)))
def test_generate_target(): m1 = Mobject() for attr in m1.get_array_attrs(): setattr(m1, attr, np.zeros((3, 3))) m1.submobjects = [Mobject()] m1.mob_attr = m1.submobjects[0] m1.submobjects[0].points = np.zeros((3, 3)) m1.arr = [0] # test shallow copy m1.generate_target() for attr in m1.target.get_array_attrs(): setattr(m1.target, attr, np.ones((3, 3))) m1.target.add(Mobject()) m1.target.mob_attr = None m1.target.arr[0] = 1 assert np.allclose(m1.points, np.zeros((3, 3))) assert len(m1.submobjects) == 1 assert m1.mob_attr is not None assert m1.arr[0] == 1 # test deep copy m1.generate_target(use_deepcopy=True) m1.target = m1.deepcopy() for attr in m1.target.get_array_attrs(): setattr(m1.target, attr, np.full((3, 3), 2)) m1.target.add(Mobject()) m1.target.mob_attr = None m1.target.arr[0] = 2 assert np.allclose(m1.points, np.zeros((3, 3))) assert len(m1.submobjects) == 1 assert m1.mob_attr is not None assert m1.arr[0] == 1
def test_deepcopy(): m1 = Mobject() for attr in m1.get_array_attrs(): setattr(m1, attr, np.zeros((3, 3))) m1.submobjects = [Mobject()] m1.mob_attr = m1.submobjects[0] m1.submobjects[0].points = np.zeros((3, 3)) m1.arr = [0] m2 = m1.deepcopy() for attr in m2.get_array_attrs(): setattr(m2, attr, np.ones((3, 3))) m2.add(Mobject()) m2.mob_attr = None m2.arr[0] = 1 # no attributes are shared assert np.allclose(m1.points, np.zeros((3, 3))) assert len(m1.submobjects) == 1 assert m1.mob_attr is not None assert m1.arr[0] == 0
def test_copy(): m1 = Mobject() for attr in m1.get_array_attrs(): setattr(m1, attr, np.zeros((3, 3))) m1.submobjects = [Mobject()] m1.mob_attr = m1.submobjects[0] m1.submobjects[0].points = np.zeros((3, 3)) m1.arr = [0] m2 = m1.copy() for attr in m2.get_array_attrs(): setattr(m2, attr, np.ones((3, 3))) m2.add(Mobject()) m2.mob_attr = None m2.arr[0] = 1 # mobjects attributes, (nd)array attributes, and # submobjects should not be shared assert np.allclose(m1.points, np.zeros((3, 3))) assert len(m1.submobjects) == 1 assert m1.mob_attr is not None # other attributes are shared assert m1.arr[0] == 1
def get_array_attrs(self): return Mobject.get_array_attrs(self) + ["rgbas"]