From d831aa6e516fe2c5445d6cfa40b37499f43ffe1e Mon Sep 17 00:00:00 2001 From: leotrs Date: Wed, 11 Nov 2020 10:18:56 -0500 Subject: [PATCH 01/16] first attempt --- manim/renderer/cairo_renderer.py | 6 ++++-- manim/scene/scene_file_writer.py | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index 0d83993679..7173c6e0ca 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -38,9 +38,9 @@ def handle_play_like_call(func): def wrapper(self, scene, *args, **kwargs): allow_write = not config["skip_animations"] + self.file_writer.end_animation(allow_write) self.file_writer.begin_animation(allow_write) func(self, scene, *args, **kwargs) - self.file_writer.end_animation(allow_write) self.num_plays += 1 return wrapper @@ -202,7 +202,9 @@ def revert_to_original_skipping_status(self): def finish(self, scene): config["skip_animations"] = False + self.update_frame(scene, ignore_skipping=False) + self.add_frame(self.camera.pixel_array) + self.file_writer.end_animation(not config["skip_animations"]) self.file_writer.finish() if config["save_last_frame"]: - self.update_frame(scene, ignore_skipping=False) self.file_writer.save_final_image(self.camera.get_image()) diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 7de052e96d..b9824fb4ef 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -383,6 +383,8 @@ def close_movie_pipe(self): input buffer, and move the temporary files into their permananant locations """ + if not hasattr(self, 'writing_process'): + return self.writing_process.stdin.close() self.writing_process.wait() shutil.move( From 02fe66cf11677a795b41497af32adaa497e5a88f Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 14 Nov 2020 12:29:22 -0500 Subject: [PATCH 02/16] update all mobjects each time we update the frame --- manim/renderer/cairo_renderer.py | 5 ++++- manim/scene/scene.py | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index 7173c6e0ca..479b9207a9 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -93,6 +93,7 @@ def play(self, scene, *args, **kwargs): def update_frame( # TODO Description in Docstring self, scene, + dt, mobjects=None, background=None, include_submobjects=True, @@ -116,6 +117,8 @@ def update_frame( # TODO Description in Docstring **kwargs """ + scene.update_mobjects(dt) + if config["skip_animations"] and not ignore_skipping: return if mobjects is None: @@ -202,7 +205,7 @@ def revert_to_original_skipping_status(self): def finish(self, scene): config["skip_animations"] = False - self.update_frame(scene, ignore_skipping=False) + self.update_frame(scene, 1/config.frame_rate, ignore_skipping=False) self.add_frame(self.camera.pixel_array) self.file_writer.end_animation(not config["skip_animations"]) self.file_writer.finish() diff --git a/manim/scene/scene.py b/manim/scene/scene.py index ee6983feb1..84db421158 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -807,7 +807,7 @@ def play_internal(self, *args, **kwargs): moving_mobjects, stationary_mobjects, ) = self.get_moving_and_stationary_mobjects(animations) - self.renderer.update_frame(self, mobjects=stationary_mobjects) + self.renderer.update_frame(self, 1/config.frame_rate, mobjects=stationary_mobjects) self.static_image = self.renderer.get_frame() time_progression = self.get_animation_time_progression(animations) @@ -819,8 +819,8 @@ def play_internal(self, *args, **kwargs): animation.update_mobjects(dt) alpha = t / animation.run_time animation.interpolate(alpha) - self.update_mobjects(dt) - self.renderer.update_frame(self, moving_mobjects, self.static_image) + + self.renderer.update_frame(self, dt, moving_mobjects, self.static_image) self.renderer.add_frame(self.renderer.get_frame()) if stop_condition is not None and stop_condition(): time_progression.close() @@ -831,7 +831,7 @@ def play_internal(self, *args, **kwargs): animation.clean_up_from_scene(self) def add_static_frames(self, duration): - self.renderer.update_frame(self) + self.renderer.update_frame(self, 1/config.frame_rate) dt = 1 / self.renderer.camera.frame_rate self.renderer.add_frame( self.renderer.get_frame(), From a1a7fa593dc01cc0e0dd4fce03a522ad5032c32a Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 14 Nov 2020 18:36:32 -0500 Subject: [PATCH 03/16] add changes from #710 --- manim/mobject/mobject.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 4bd94de859..f7ed3c1f77 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -244,13 +244,13 @@ def get_updaters(self): def get_family_updaters(self): return list(it.chain(*[sm.get_updaters() for sm in self.get_family()])) - def add_updater(self, update_function, index=None, call_updater=True): + def add_updater(self, update_function, index=None, call_updater=False): if index is None: self.updaters.append(update_function) else: self.updaters.insert(index, update_function) if call_updater: - self.update(0) + update_function(self, 0) return self def remove_updater(self, update_function): From 116429bf06cd949878766366aa885c65bd02c0cf Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 14 Nov 2020 18:37:02 -0500 Subject: [PATCH 04/16] mobjects should be updated each time the frame is updated, not only when an animation is being played --- manim/renderer/cairo_renderer.py | 4 ++-- manim/scene/scene.py | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index 479b9207a9..e6dc0de0f2 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -117,8 +117,6 @@ def update_frame( # TODO Description in Docstring **kwargs """ - scene.update_mobjects(dt) - if config["skip_animations"] and not ignore_skipping: return if mobjects is None: @@ -126,6 +124,8 @@ def update_frame( # TODO Description in Docstring scene.mobjects, scene.foreground_mobjects, ) + scene.update_mobjects(dt, mobjects) + if background is not None: self.camera.set_frame_to_background(background) else: diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 84db421158..432aec8501 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -139,16 +139,17 @@ def get_attrs(self, *keys): """ return [getattr(self, key) for key in keys] - def update_mobjects(self, dt): - """ - Begins updating all mobjects in the Scene. + def update_mobjects(self, dt, mobjects=None): + """Update all mobjects in the Scene. Parameters ---------- dt: int or float Change in time between updates. Defaults (mostly) to 1/frames_per_second """ - for mobject in self.mobjects: + if mobjects is None: + mobjects = self.mobjects + for mobject in mobjects: mobject.update(dt) def should_update_mobjects(self): From 15f033ae6467b05ae4e2bbc974b6b9d52b984591 Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 14 Nov 2020 18:37:16 -0500 Subject: [PATCH 05/16] use the camera frame rate, not the config frame rate --- manim/scene/scene.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 432aec8501..af8eb9307d 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -808,7 +808,7 @@ def play_internal(self, *args, **kwargs): moving_mobjects, stationary_mobjects, ) = self.get_moving_and_stationary_mobjects(animations) - self.renderer.update_frame(self, 1/config.frame_rate, mobjects=stationary_mobjects) + self.renderer.update_frame(self, self.renderer.camera.frame_rate, mobjects=stationary_mobjects) self.static_image = self.renderer.get_frame() time_progression = self.get_animation_time_progression(animations) @@ -832,7 +832,7 @@ def play_internal(self, *args, **kwargs): animation.clean_up_from_scene(self) def add_static_frames(self, duration): - self.renderer.update_frame(self, 1/config.frame_rate) + self.renderer.update_frame(self, self.renderer.camera.frame_rate) dt = 1 / self.renderer.camera.frame_rate self.renderer.add_frame( self.renderer.get_frame(), From 1d0858b806a87e8bc3a71391f3dbd8d288ab5c69 Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 14 Nov 2020 18:42:52 -0500 Subject: [PATCH 06/16] black --- manim/renderer/cairo_renderer.py | 2 +- manim/scene/scene.py | 4 +++- manim/scene/scene_file_writer.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index e6dc0de0f2..7632251f9d 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -205,7 +205,7 @@ def revert_to_original_skipping_status(self): def finish(self, scene): config["skip_animations"] = False - self.update_frame(scene, 1/config.frame_rate, ignore_skipping=False) + self.update_frame(scene, self.camera.frame_rate, ignore_skipping=False) self.add_frame(self.camera.pixel_array) self.file_writer.end_animation(not config["skip_animations"]) self.file_writer.finish() diff --git a/manim/scene/scene.py b/manim/scene/scene.py index af8eb9307d..b8ae9ac098 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -808,7 +808,9 @@ def play_internal(self, *args, **kwargs): moving_mobjects, stationary_mobjects, ) = self.get_moving_and_stationary_mobjects(animations) - self.renderer.update_frame(self, self.renderer.camera.frame_rate, mobjects=stationary_mobjects) + self.renderer.update_frame( + self, self.renderer.camera.frame_rate, mobjects=stationary_mobjects + ) self.static_image = self.renderer.get_frame() time_progression = self.get_animation_time_progression(animations) diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index b9824fb4ef..a762433a68 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -383,7 +383,7 @@ def close_movie_pipe(self): input buffer, and move the temporary files into their permananant locations """ - if not hasattr(self, 'writing_process'): + if not hasattr(self, "writing_process"): return self.writing_process.stdin.close() self.writing_process.wait() From 69f5465a5b93b6516441c898da5015d7fd004001 Mon Sep 17 00:00:00 2001 From: leotrs Date: Thu, 19 Nov 2020 22:14:07 -0500 Subject: [PATCH 07/16] add conditional --- manim/renderer/cairo_renderer.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index 214be0763c..d6ce9e4dfa 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -191,8 +191,12 @@ def update_skipping_status(self): def finish(self, scene): self.skip_animations = self.original_skipping_status - self.update_frame(scene, self.camera.frame_rate, ignore_skipping=False) - self.add_frame(self.camera.pixel_array) + + # if there was an animation being played, render the last frame + if hasattr(self.file_writer, 'writing_process'): + self.update_frame(scene, self.camera.frame_rate, ignore_skipping=False) + self.add_frame(self.camera.pixel_array) + self.file_writer.end_animation(not self.skip_animations) self.file_writer.finish() if config["save_last_frame"]: From 5dfd51ae30bb33e4acf55f9740c284b3b702e100 Mon Sep 17 00:00:00 2001 From: leotrs Date: Thu, 19 Nov 2020 23:22:30 -0500 Subject: [PATCH 08/16] fix play count --- manim/renderer/cairo_renderer.py | 10 ++++++---- manim/scene/scene_file_writer.py | 6 ++++-- manim/utils/caching.py | 6 ++++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index d6ce9e4dfa..bbedeeee02 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -39,9 +39,9 @@ def handle_play_like_call(func): def wrapper(self, scene, *args, **kwargs): allow_write = not self.skip_animations self.file_writer.end_animation(allow_write) + self.num_plays += 1 self.file_writer.begin_animation(allow_write) func(self, scene, *args, **kwargs) - self.num_plays += 1 return wrapper @@ -75,7 +75,7 @@ def __init__(self, camera_class=None, skip_animations=False, **kwargs): self.original_skipping_status = skip_animations self.skip_animations = skip_animations self.animations_hashes = [] - self.num_plays = 0 + self.num_plays = -1 self.time = 0 def init(self, scene): @@ -182,10 +182,10 @@ def update_skipping_status(self): raises an EndSceneEarlyException if they don't correspond. """ if config["from_animation_number"]: - if self.num_plays < config["from_animation_number"]: + if self.num_plays < config["from_animation_number"] - 1: self.skip_animations = True if config["upto_animation_number"]: - if self.num_plays > config["upto_animation_number"]: + if self.num_plays > config["upto_animation_number"] - 1: self.skip_animations = True raise EndSceneEarlyException() @@ -198,6 +198,8 @@ def finish(self, scene): self.add_frame(self.camera.pixel_array) self.file_writer.end_animation(not self.skip_animations) + self.num_plays += 1 + self.file_writer.finish() if config["save_last_frame"]: self.file_writer.save_final_image(self.camera.get_image()) diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index a762433a68..5f8b166e4e 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -121,8 +121,10 @@ def add_partial_movie_file(self, hash_animation): if not hasattr(self, "partial_movie_directory"): return - # None has to be added to partial_movie_files to keep the right index with scene.num_plays. - # i.e if an animation is skipped, scene.num_plays is still incremented and we add an element to partial_movie_file be even with num_plays. + # None has to be added to partial_movie_files to keep the right index + # with scene.num_plays. i.e if an animation is skipped, + # scene.num_plays is still incremented and we add an element to + # partial_movie_file be even with num_plays. if hash_animation is None: self.partial_movie_files.append(None) return diff --git a/manim/utils/caching.py b/manim/utils/caching.py index 29f66506a5..26e95f625e 100644 --- a/manim/utils/caching.py +++ b/manim/utils/caching.py @@ -23,11 +23,13 @@ def wrapper(self, scene, *args, **kwargs): self.update_skipping_status() animations = scene.compile_play_args_to_animation_list(*args, **kwargs) scene.add_mobjects_from_animations(animations) + if self.skip_animations: logger.debug(f"Skipping animation {self.num_plays}") func(self, scene, *args, **kwargs) - # If the animation is skipped, we mark its hash as None. - # When sceneFileWriter will start combining partial movie files, it won't take into account None hashes. + # If the animation is skipped, we mark its hash as None. When + # Scenefilewriter starts combining partial movie files, it won't take into + # account None hashes. self.animations_hashes.append(None) self.file_writer.add_partial_movie_file(None) return From 207afdb4730dba64c5730f01134ed69b32a24fcb Mon Sep 17 00:00:00 2001 From: leotrs Date: Thu, 19 Nov 2020 23:22:39 -0500 Subject: [PATCH 09/16] update tests --- .../videos_data/SceneWithMultipleCallsWithNFlag.json | 6 +++--- .../videos_data/SceneWithMultiplePlayCallsWithNFlag.json | 6 +++--- .../videos_data/SceneWithMultipleWaitCallsWithNFlag.json | 6 +++--- .../videos_data/SquareToCircleWithDefaultValues.json | 6 +++--- tests/control_data/videos_data/SquareToCircleWithlFlag.json | 6 +++--- tests/test_color.py | 6 +++--- tests/test_scene_rendering/test_caching_related.py | 4 ++-- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json b/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json index 2e125f125c..f4a780367b 100644 --- a/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json +++ b/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json @@ -5,7 +5,7 @@ "width": 1920, "height": 1080, "avg_frame_rate": "60/1", - "duration": "4.000000", - "nb_frames": "240" + "duration": "4.016667", + "nb_frames": "241" } -} \ No newline at end of file +} diff --git a/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json b/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json index ad2ea0fac9..623eb7604e 100644 --- a/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json +++ b/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json @@ -5,7 +5,7 @@ "width": 854, "height": 480, "avg_frame_rate": "15/1", - "duration": "7.000000", - "nb_frames": "105" + "duration": "7.066667", + "nb_frames": "106" } -} \ No newline at end of file +} diff --git a/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json b/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json index 05ae9e0384..fa0008f75b 100644 --- a/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json +++ b/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json @@ -5,7 +5,7 @@ "width": 854, "height": 480, "avg_frame_rate": "15/1", - "duration": "5.000000", - "nb_frames": "75" + "duration": "5.066667", + "nb_frames": "76" } -} \ No newline at end of file +} diff --git a/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json b/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json index 0f02b3d060..4175f1973c 100644 --- a/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json +++ b/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json @@ -5,7 +5,7 @@ "width": 1920, "height": 1080, "avg_frame_rate": "60/1", - "duration": "1.000000", - "nb_frames": "60" + "duration": "1.016667", + "nb_frames": "61" } -} \ No newline at end of file +} diff --git a/tests/control_data/videos_data/SquareToCircleWithlFlag.json b/tests/control_data/videos_data/SquareToCircleWithlFlag.json index 0c5182ca36..0db0a6dd81 100644 --- a/tests/control_data/videos_data/SquareToCircleWithlFlag.json +++ b/tests/control_data/videos_data/SquareToCircleWithlFlag.json @@ -5,7 +5,7 @@ "width": 854, "height": 480, "avg_frame_rate": "15/1", - "duration": "1.000000", - "nb_frames": "15" + "duration": "1.066667", + "nb_frames": "16" } -} \ No newline at end of file +} diff --git a/tests/test_color.py b/tests/test_color.py index 354d512e80..92cf98e69f 100644 --- a/tests/test_color.py +++ b/tests/test_color.py @@ -13,14 +13,14 @@ def test_import_color(): def test_background_color(): S = Scene() S.camera.background_color = "#ff0000" - S.renderer.update_frame(S) + S.renderer.update_frame(S, 0) assert np.all(S.renderer.get_frame()[0, 0] == np.array([255, 0, 0, 255])) S.camera.background_color = "#436f80" - S.renderer.update_frame(S) + S.renderer.update_frame(S, 0) assert np.all(S.renderer.get_frame()[0, 0] == np.array([67, 111, 128, 255])) S.camera.background_color = "#bbffbb" S.camera.background_opacity = 0.5 - S.renderer.update_frame(S) + S.renderer.update_frame(S, 0) assert np.all(S.renderer.get_frame()[0, 0] == np.array([187, 255, 187, 127])) diff --git a/tests/test_scene_rendering/test_caching_related.py b/tests/test_scene_rendering/test_caching_related.py index 03395571ab..11a3ef98d8 100644 --- a/tests/test_scene_rendering/test_caching_related.py +++ b/tests/test_scene_rendering/test_caching_related.py @@ -19,7 +19,7 @@ def test_wait_skip(tmp_path, manim_cfg_file, simple_scenes_path): "manim", simple_scenes_path, scene_name, - "-l", + "-ql", "--media_dir", str(tmp_path), "-n", @@ -42,7 +42,7 @@ def test_play_skip(tmp_path, manim_cfg_file, simple_scenes_path): "manim", simple_scenes_path, scene_name, - "-l", + "-ql", "--media_dir", str(tmp_path), "-n", From 2582b38de7ed9498340cbb7a379b7b9048bb2f80 Mon Sep 17 00:00:00 2001 From: leotrs Date: Thu, 19 Nov 2020 23:26:28 -0500 Subject: [PATCH 10/16] black --- manim/renderer/cairo_renderer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index bbedeeee02..6e9cfec2f8 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -193,7 +193,7 @@ def finish(self, scene): self.skip_animations = self.original_skipping_status # if there was an animation being played, render the last frame - if hasattr(self.file_writer, 'writing_process'): + if hasattr(self.file_writer, "writing_process"): self.update_frame(scene, self.camera.frame_rate, ignore_skipping=False) self.add_frame(self.camera.pixel_array) From 34449925bff95729a587224b40999b6ab418ca15 Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 21 Nov 2020 14:25:21 -0500 Subject: [PATCH 11/16] add better comparison of floats --- tests/utils/video_tester.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/utils/video_tester.py b/tests/utils/video_tester.py index 6978e551bf..320f7dd8f3 100644 --- a/tests/utils/video_tester.py +++ b/tests/utils/video_tester.py @@ -3,6 +3,8 @@ from functools import wraps import os +import numpy as np + from ..utils.commands import capture @@ -28,6 +30,14 @@ def _load_video_data(path_to_data): return json.load(open(path_to_data, "r")) +def _keys_are_different(v1, v2): + try: + v1, v2 = float(v1), float(v2) + return not np.isclose(v1, v2) + except ValueError: + return v1 != v2 + + def _check_video_data(path_control_data, path_to_video_generated): control_data = _load_video_data(path_control_data) config_generated = _get_config_from_video(path_to_video_generated) @@ -35,7 +45,7 @@ def _check_video_data(path_control_data, path_to_video_generated): diff_keys = [ d1[0] for d1, d2 in zip(config_expected.items(), config_generated.items()) - if d1[1] != d2[1] + if _keys_are_different(d1[1], d2[1]) ] # \n does not work in f-strings. newline = "\n" From bd19fa207f536660779da5422282395a5bb64ae7 Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 21 Nov 2020 14:36:01 -0500 Subject: [PATCH 12/16] be more lenient when comparing floats --- tests/utils/video_tester.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils/video_tester.py b/tests/utils/video_tester.py index 320f7dd8f3..f83c4befeb 100644 --- a/tests/utils/video_tester.py +++ b/tests/utils/video_tester.py @@ -33,7 +33,7 @@ def _load_video_data(path_to_data): def _keys_are_different(v1, v2): try: v1, v2 = float(v1), float(v2) - return not np.isclose(v1, v2) + return not np.isclose(v1, v2, atol=1e-3, rtol=1e-3) except ValueError: return v1 != v2 From d7fa9bd1e4f2ec050576b12e5e186312ce6294a4 Mon Sep 17 00:00:00 2001 From: leotrs Date: Sat, 21 Nov 2020 17:18:03 -0500 Subject: [PATCH 13/16] add new test --- .../last_frame/LastFrame.npz | Bin 0 -> 5361 bytes tests/test_graphical_units/test_last_frame.py | 36 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 tests/control_data/graphical_units_data/last_frame/LastFrame.npz create mode 100644 tests/test_graphical_units/test_last_frame.py diff --git a/tests/control_data/graphical_units_data/last_frame/LastFrame.npz b/tests/control_data/graphical_units_data/last_frame/LastFrame.npz new file mode 100644 index 0000000000000000000000000000000000000000..18e2052eda3d67816cd4771a7a8914e99c482677 GIT binary patch literal 5361 zcmeHLYgAKL7QSc^stB&Bz*Ng)9GAMNg|cvj62fEDqJsjph7=)0!C(cF6aoY$CKt=X zIt&Gr0Yro_R!|d3N`-_Zg!m{Ag$jb`A|YgKgAkZYH|^j2W8R=`{;u`g^1t4-|Ime9-d>O8r`MdbNk*5H z7>!qT)Oo=_?i}1paai`x50#GH^i&ai;9s z%JNLKo*WTm@B)W5v-s**y-q?~WHPg-xuCH-2yNg-7&JY;L|uP<%wB`4kQlRoQQoZn)YQ3G$eFLN134g-JGbPm~Sp~*5ssa9Kf)HjH7xn za6MX|;u4P-4lLBNftqzV>s~LMHSmWqj~s@|1GpK2wVDmXS_N+uuCKwvl1aT7K;MS} zB6B%w#>!!JThbkaCFzd9(;D`wivI^J47NOyT&h(o6!xwGeiwFDXT?t{-UICra%_)@ zjZG0z)uhlOR~O~u2MOdrb~l(WOI*1%*)sE3JJsRlkfxASbK;{A>KvpP=12J> zBO{qV|M-^>l8#@;zU+wb@X`=y)I(ifk`I)1AX%6n{bZSa+wRqt$4Rx5a#ZI>T!N|j zny?B*<*l``w@d3tt}^Mrne^cNMrfoQ@2X@(P|ea;^78U{jg3$3-2wwTp>Q8u+wHMs z)_?X;^Bk`j{_{kA2uXX`Y>kKC=v7L%fuZ<)XrWyi_q4yM#}iQuS==O^8>ZzBsUrI^ z-TBCj#s2D+nNN-S*8Xs;_lF2dvtyGYHHpbsP`UFzX-{{&b8UI;9f3`U8^OJ3^Vr=F;BY3bB)5Lj3H_8{8X>+c3Y4fhIFYm{$l%v0|H(XfeAJT1hv{?j zkV)dOd1eWyxgm<|PEVk$&=u|9S+Dun1crB=Xi~_gPe0t5JM=|_MVIE+KmS!$jix1P zb#w<8|2-vKN|M=zFC7A21?$Gy+;sx>p%{oKrp@tOP?_DziK;6mU;g${DK>6U3(0&t z(e(r-T^lVLt)_)Dpcs;Xkcg*dnDyDBsFNuQ*l>6Lo--XqZse}6uARo9g3s}I?8QGJ zQ28{Rd~ja-=tHhu+P>sL8@IE)Jfchs4*#8f5Q&Iwdz_q{qxCcsV)7pdwh8FNR3`Nt5q-yRs3I6}i>k$!Qe zCwHj(x=Y~MW=Pt^uF7~8{hp%Er0V!kri=*b=M-+rsAoSskE7M&Xi!r!gUQ)eim<9A zW$=gED!rWRAb_Z{~* ziX;c`hsC&z#n)5XAxclv2G8aby_WAHaT*vh9%`~V;cu4h6`9LM#9j4X=#{` zilx`h@nPe#XDz$z!D;#=DJ2OPLo7na){!h!w z%B1)2-|w~rCt1b9;^|E|x@Levv*@xIho$QvJ_MUxt+SZCk}pgm5NaVApNnJ6k5E8` z2kw9e5}XJF}5ZO%}uZn9D*GL)GuxH`_lGv;d{xrmR;dXYx~`?)GJbV*qH?2}Mp zN1+P^>@tR$z2GSvyT)Va7X*@D=EmO0Uko-0yklb2_TD!>-FD72?7MK7T?wl-Z}@Ov zjmh5Mtg2kaQkcI=BFyUQ;jD&@bjSZuyliW9%~oFIwX_W7!6!0CF)D6iIO~^h1z-<2 zaV42kp+kRck7SfO&HW8tc4?^0m$Fv6Zb*GD71@+}e}o(8Nym7uNY%0zDmaf;HYtti zn4o@)U?o|XamG&zJyy Date: Sun, 22 Nov 2020 18:21:20 -0500 Subject: [PATCH 14/16] add useless lines - these are overwritten by how GraphicalUnitsTester works --- tests/test_graphical_units/test_last_frame.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/test_graphical_units/test_last_frame.py b/tests/test_graphical_units/test_last_frame.py index 6ab657fb8b..52f3874c5e 100644 --- a/tests/test_graphical_units/test_last_frame.py +++ b/tests/test_graphical_units/test_last_frame.py @@ -4,10 +4,6 @@ from ..utils.testing_utils import get_scenes_to_test from ..utils.GraphicalUnitTester import GraphicalUnitTester -mn.config.frame_rate = 5 -mn.config.pixel_height = 150 -mn.config.pixel_width = 150 - def make_lbl(num): text = mn.Text(f"{num}").scale(7) From b9d8f465bc8c465e078e5a111ec1f8f56583ba0b Mon Sep 17 00:00:00 2001 From: leotrs Date: Mon, 23 Nov 2020 19:02:54 -0500 Subject: [PATCH 15/16] change test to use colors, not Text --- .../last_frame/LastFrame.npz | Bin 5361 -> 2453 bytes tests/test_graphical_units/test_last_frame.py | 30 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/control_data/graphical_units_data/last_frame/LastFrame.npz b/tests/control_data/graphical_units_data/last_frame/LastFrame.npz index 18e2052eda3d67816cd4771a7a8914e99c482677..bbc521641148789d2de21d597f074b20e8043060 100644 GIT binary patch literal 2453 zcmWIWW@Zs#U|`??Vnv4C=dxI($hsu>63doJ2YogOC>wi9m5SzR-aZj^ z?2J%Q4bMIsdz+*6w~A+dzb_yE@57_#k01Vhxc>9%*SF*I&)uJYu73aTZ#9Kh`|FB7 ze|z?-KmOjGJ-hbJx8MKk@3&u<|9soN+J3$L-~GF4zMVb#@@DyT@#Ux2>-+tmWB1?I zPKK`>;;d0}Gz6#=0tfz|`B?G&#mV49@5=u?C}(3}NQ|%f`QzPketFK__dhz{mt>`gJm>13`90CD6_d|TlHzm zhTpRGKjt!0sZ1C(W;6sKAu#`~eSkM3lL#}eMie5T8o;R!wMiA=%?hkg7#J9V&<035 HgPTH|^j2W8R=`{;u`g^1t4-|Ime9-d>O8r`MdbNk*5H z7>!qT)Oo=_?i}1paai`x50#GH^i&ai;9s z%JNLKo*WTm@B)W5v-s**y-q?~WHPg-xuCH-2yNg-7&JY;L|uP<%wB`4kQlRoQQoZn)YQ3G$eFLN134g-JGbPm~Sp~*5ssa9Kf)HjH7xn za6MX|;u4P-4lLBNftqzV>s~LMHSmWqj~s@|1GpK2wVDmXS_N+uuCKwvl1aT7K;MS} zB6B%w#>!!JThbkaCFzd9(;D`wivI^J47NOyT&h(o6!xwGeiwFDXT?t{-UICra%_)@ zjZG0z)uhlOR~O~u2MOdrb~l(WOI*1%*)sE3JJsRlkfxASbK;{A>KvpP=12J> zBO{qV|M-^>l8#@;zU+wb@X`=y)I(ifk`I)1AX%6n{bZSa+wRqt$4Rx5a#ZI>T!N|j zny?B*<*l``w@d3tt}^Mrne^cNMrfoQ@2X@(P|ea;^78U{jg3$3-2wwTp>Q8u+wHMs z)_?X;^Bk`j{_{kA2uXX`Y>kKC=v7L%fuZ<)XrWyi_q4yM#}iQuS==O^8>ZzBsUrI^ z-TBCj#s2D+nNN-S*8Xs;_lF2dvtyGYHHpbsP`UFzX-{{&b8UI;9f3`U8^OJ3^Vr=F;BY3bB)5Lj3H_8{8X>+c3Y4fhIFYm{$l%v0|H(XfeAJT1hv{?j zkV)dOd1eWyxgm<|PEVk$&=u|9S+Dun1crB=Xi~_gPe0t5JM=|_MVIE+KmS!$jix1P zb#w<8|2-vKN|M=zFC7A21?$Gy+;sx>p%{oKrp@tOP?_DziK;6mU;g${DK>6U3(0&t z(e(r-T^lVLt)_)Dpcs;Xkcg*dnDyDBsFNuQ*l>6Lo--XqZse}6uARo9g3s}I?8QGJ zQ28{Rd~ja-=tHhu+P>sL8@IE)Jfchs4*#8f5Q&Iwdz_q{qxCcsV)7pdwh8FNR3`Nt5q-yRs3I6}i>k$!Qe zCwHj(x=Y~MW=Pt^uF7~8{hp%Er0V!kri=*b=M-+rsAoSskE7M&Xi!r!gUQ)eim<9A zW$=gED!rWRAb_Z{~* ziX;c`hsC&z#n)5XAxclv2G8aby_WAHaT*vh9%`~V;cu4h6`9LM#9j4X=#{` zilx`h@nPe#XDz$z!D;#=DJ2OPLo7na){!h!w z%B1)2-|w~rCt1b9;^|E|x@Levv*@xIho$QvJ_MUxt+SZCk}pgm5NaVApNnJ6k5E8` z2kw9e5}XJF}5ZO%}uZn9D*GL)GuxH`_lGv;d{xrmR;dXYx~`?)GJbV*qH?2}Mp zN1+P^>@tR$z2GSvyT)Va7X*@D=EmO0Uko-0yklb2_TD!>-FD72?7MK7T?wl-Z}@Ov zjmh5Mtg2kaQkcI=BFyUQ;jD&@bjSZuyliW9%~oFIwX_W7!6!0CF)D6iIO~^h1z-<2 zaV42kp+kRck7SfO&HW8tc4?^0m$Fv6Zb*GD71@+}e}o(8Nym7uNY%0zDmaf;HYtti zn4o@)U?o|XamG&zJyy Date: Mon, 23 Nov 2020 19:03:22 -0500 Subject: [PATCH 16/16] black --- tests/test_graphical_units/test_last_frame.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/test_graphical_units/test_last_frame.py b/tests/test_graphical_units/test_last_frame.py index a60dd275d8..9b976c8dbd 100644 --- a/tests/test_graphical_units/test_last_frame.py +++ b/tests/test_graphical_units/test_last_frame.py @@ -17,7 +17,11 @@ def construct(self): cols = mn.color_gradient([C.RED, C.WHITE, C.BLUE], num_colors) def col_uptater(mob): - integ = int((val_tracker.get_value() - tick_start) / (tick_end - tick_start) * (num_colors - 1)) + integ = int( + (val_tracker.get_value() - tick_start) + / (tick_end - tick_start) + * (num_colors - 1) + ) mob.set_color(cols[integ]) square.add_updater(col_uptater)