From e3b467720f30819c4c89123f972bc1ee95b536dc Mon Sep 17 00:00:00 2001 From: Devin Neal Date: Tue, 19 May 2020 20:55:17 -0700 Subject: [PATCH 1/2] Convert absolute imports to relative imports --- .gitignore | 2 +- manimlib/__init__.py | 14 +- manimlib/animation/animation.py | 8 +- manimlib/animation/composition.py | 16 +- manimlib/animation/creation.py | 20 +- manimlib/animation/fading.py | 16 +- manimlib/animation/growing.py | 6 +- manimlib/animation/indication.py | 40 +- manimlib/animation/movement.py | 6 +- manimlib/animation/numbers.py | 8 +- manimlib/animation/rotation.py | 14 +- manimlib/animation/specialized.py | 22 +- manimlib/animation/transform.py | 24 +- manimlib/animation/update.py | 4 +- manimlib/camera/camera.py | 30 +- manimlib/camera/mapping_camera.py | 10 +- manimlib/camera/moving_camera.py | 18 +- manimlib/camera/multi_camera.py | 6 +- manimlib/camera/three_d_camera.py | 26 +- manimlib/config.py | 44 +- manimlib/container/container.py | 4 +- manimlib/extract_scene.py | 39 +- manimlib/for_3b1b_videos/common_scenes.py | 50 +- manimlib/for_3b1b_videos/pi_class.py | 8 +- manimlib/for_3b1b_videos/pi_creature.py | 24 +- .../for_3b1b_videos/pi_creature_animations.py | 30 +- manimlib/for_3b1b_videos/pi_creature_scene.py | 42 +- manimlib/imports.py | 154 ++--- manimlib/mobject/changing.py | 12 +- manimlib/mobject/coordinate_systems.py | 24 +- manimlib/mobject/frame.py | 8 +- manimlib/mobject/functions.py | 8 +- manimlib/mobject/geometry.py | 34 +- manimlib/mobject/matrix.py | 18 +- manimlib/mobject/mobject.py | 29 +- manimlib/mobject/mobject_update_utils.py | 8 +- manimlib/mobject/number_line.py | 20 +- manimlib/mobject/numbers.py | 8 +- manimlib/mobject/probability.py | 22 +- manimlib/mobject/shape_matchers.py | 16 +- manimlib/mobject/svg/brace.py | 20 +- manimlib/mobject/svg/code_mobject.py | 620 +++++++++--------- manimlib/mobject/svg/drawings.py | 58 +- manimlib/mobject/svg/svg_mobject.py | 20 +- manimlib/mobject/svg/tex_mobject.py | 20 +- manimlib/mobject/svg/text_mobject.py | 19 +- manimlib/mobject/three_d_shading_utils.py | 6 +- manimlib/mobject/three_d_utils.py | 10 +- manimlib/mobject/three_dimensions.py | 14 +- manimlib/mobject/types/image_mobject.py | 16 +- manimlib/mobject/types/point_cloud_mobject.py | 20 +- manimlib/mobject/types/vectorized_mobject.py | 32 +- manimlib/mobject/value_tracker.py | 4 +- manimlib/mobject/vector_field.py | 32 +- manimlib/once_useful_constructs/arithmetic.py | 10 +- .../once_useful_constructs/combinatorics.py | 12 +- .../complex_transformation_scene.py | 16 +- manimlib/once_useful_constructs/counting.py | 24 +- manimlib/once_useful_constructs/fractals.py | 34 +- .../once_useful_constructs/graph_theory.py | 10 +- manimlib/once_useful_constructs/light.py | 30 +- .../matrix_multiplication.py | 24 +- manimlib/once_useful_constructs/region.py | 8 +- manimlib/scene/graph_scene.py | 38 +- manimlib/scene/moving_camera_scene.py | 8 +- manimlib/scene/reconfigurable_scene.py | 10 +- manimlib/scene/sample_space_scene.py | 18 +- manimlib/scene/scene.py | 18 +- manimlib/scene/scene_file_writer.py | 33 +- manimlib/scene/scene_from_video.py | 4 +- manimlib/scene/three_d_scene.py | 26 +- manimlib/scene/vector_space_scene.py | 60 +- manimlib/scene/zoomed_scene.py | 16 +- manimlib/utils/bezier.py | 4 +- manimlib/utils/color.py | 12 +- manimlib/utils/config_ops.py | 2 +- manimlib/utils/debug.py | 8 +- manimlib/utils/file_ops.py | 2 +- manimlib/utils/images.py | 4 +- manimlib/utils/iterables.py | 2 +- manimlib/utils/paths.py | 10 +- manimlib/utils/rate_functions.py | 6 +- manimlib/utils/simple_functions.py | 2 +- manimlib/utils/sounds.py | 4 +- manimlib/utils/space_ops.py | 14 +- manimlib/utils/strings.py | 2 +- manimlib/utils/tex_file_writing.py | 10 +- 87 files changed, 1125 insertions(+), 1139 deletions(-) diff --git a/.gitignore b/.gitignore index 5055cdfb13..deba21f372 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,4 @@ dist/ manim.egg-info/ primes.py -/media_dir.txt \ No newline at end of file +/media_dir.txt diff --git a/manimlib/__init__.py b/manimlib/__init__.py index f4274cb668..1185c9c3b0 100644 --- a/manimlib/__init__.py +++ b/manimlib/__init__.py @@ -1,11 +1,11 @@ #!/usr/bin/env python -import manimlib.config -import manimlib.constants -import manimlib.extract_scene +from . import config +from . import constants def main(): - args = manimlib.config.parse_cli() - config = manimlib.config.get_configuration(args) - manimlib.constants.initialize_directories(config) - manimlib.extract_scene.main(config) + args = config.parse_cli() + cfg = config.get_configuration(args) + constants.initialize_directories(cfg) + from . import extract_scene + extract_scene.main(cfg) diff --git a/manimlib/animation/animation.py b/manimlib/animation/animation.py index 17ea65fa9d..3abe8ee8fc 100644 --- a/manimlib/animation/animation.py +++ b/manimlib/animation/animation.py @@ -2,9 +2,9 @@ import numpy as np -from manimlib.mobject.mobject import Mobject -from manimlib.utils.config_ops import digest_config -from manimlib.utils.rate_functions import smooth +from ..mobject.mobject import Mobject +from ..utils.config_ops import digest_config +from ..utils.rate_functions import smooth DEFAULT_ANIMATION_RUN_TIME = 1.0 @@ -157,4 +157,4 @@ def set_name(self, name): return self def is_remover(self): - return self.remover + return self.remover \ No newline at end of file diff --git a/manimlib/animation/composition.py b/manimlib/animation/composition.py index 753f5111bc..b739707a9e 100644 --- a/manimlib/animation/composition.py +++ b/manimlib/animation/composition.py @@ -1,12 +1,12 @@ import numpy as np -from manimlib.animation.animation import Animation -from manimlib.mobject.mobject import Group -from manimlib.utils.bezier import integer_interpolate -from manimlib.utils.bezier import interpolate -from manimlib.utils.config_ops import digest_config -from manimlib.utils.iterables import remove_list_redundancies -from manimlib.utils.rate_functions import linear +from ..animation.animation import Animation +from ..mobject.mobject import Group +from ..utils.bezier import integer_interpolate +from ..utils.bezier import interpolate +from ..utils.config_ops import digest_config +from ..utils.iterables import remove_list_redundancies +from ..utils.rate_functions import linear DEFAULT_LAGGED_START_LAG_RATIO = 0.05 @@ -159,4 +159,4 @@ def __init__(self, AnimationClass, mobject, arg_creator=None, **kwargs): AnimationClass(*args, **anim_kwargs) for args in args_list ] - super().__init__(*animations, **kwargs) + super().__init__(*animations, **kwargs) \ No newline at end of file diff --git a/manimlib/animation/creation.py b/manimlib/animation/creation.py index 692e384ecb..4131c82883 100644 --- a/manimlib/animation/creation.py +++ b/manimlib/animation/creation.py @@ -1,12 +1,12 @@ -from manimlib.animation.animation import Animation -from manimlib.animation.composition import Succession -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.mobject.mobject import Group -from manimlib.utils.bezier import integer_interpolate -from manimlib.utils.config_ops import digest_config -from manimlib.utils.rate_functions import linear -from manimlib.utils.rate_functions import double_smooth -from manimlib.utils.rate_functions import smooth +from ..animation.animation import Animation +from ..animation.composition import Succession +from ..mobject.types.vectorized_mobject import VMobject +from ..mobject.mobject import Group +from ..utils.bezier import integer_interpolate +from ..utils.config_ops import digest_config +from ..utils.rate_functions import linear +from ..utils.rate_functions import double_smooth +from ..utils.rate_functions import smooth import numpy as np import itertools as it @@ -177,4 +177,4 @@ def __init__(self, text_mobject, **kwargs): ] for word in text_mobject ]) - super().__init__(*anims, **kwargs) + super().__init__(*anims, **kwargs) \ No newline at end of file diff --git a/manimlib/animation/fading.py b/manimlib/animation/fading.py index 9f5ea190d8..74edf5a3fd 100644 --- a/manimlib/animation/fading.py +++ b/manimlib/animation/fading.py @@ -1,10 +1,10 @@ -from manimlib.animation.animation import Animation -from manimlib.animation.animation import DEFAULT_ANIMATION_LAG_RATIO -from manimlib.animation.transform import Transform -from manimlib.constants import DOWN -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.bezier import interpolate -from manimlib.utils.rate_functions import there_and_back +from ..animation.animation import Animation +from ..animation.animation import DEFAULT_ANIMATION_LAG_RATIO +from ..animation.transform import Transform +from ..constants import DOWN +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.bezier import interpolate +from ..utils.rate_functions import there_and_back DEFAULT_FADE_LAG_RATIO = 0 @@ -156,4 +156,4 @@ class VFadeInThenOut(VFadeIn): CONFIG = { "rate_func": there_and_back, "remover": True, - } + } \ No newline at end of file diff --git a/manimlib/animation/growing.py b/manimlib/animation/growing.py index e2a53cb737..b6c880f58b 100644 --- a/manimlib/animation/growing.py +++ b/manimlib/animation/growing.py @@ -1,6 +1,6 @@ -from manimlib.animation.transform import Transform -# from manimlib.utils.paths import counterclockwise_path -from manimlib.constants import PI +from ..animation.transform import Transform +# from ..utils.paths import counterclockwise_path +from ..constants import PI class GrowFromPoint(Transform): diff --git a/manimlib/animation/indication.py b/manimlib/animation/indication.py index 268ad5f482..0daef10a57 100644 --- a/manimlib/animation/indication.py +++ b/manimlib/animation/indication.py @@ -1,24 +1,24 @@ import numpy as np -from manimlib.constants import * -from manimlib.animation.animation import Animation -from manimlib.animation.movement import Homotopy -from manimlib.animation.composition import AnimationGroup -from manimlib.animation.composition import Succession -from manimlib.animation.creation import ShowCreation -from manimlib.animation.creation import ShowPartial -from manimlib.animation.fading import FadeOut -from manimlib.animation.transform import Transform -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.mobject.geometry import Circle -from manimlib.mobject.geometry import Dot -from manimlib.mobject.shape_matchers import SurroundingRectangle -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.geometry import Line -from manimlib.utils.bezier import interpolate -from manimlib.utils.config_ops import digest_config -from manimlib.utils.rate_functions import there_and_back -from manimlib.utils.rate_functions import wiggle +from ..constants import * +from ..animation.animation import Animation +from ..animation.movement import Homotopy +from ..animation.composition import AnimationGroup +from ..animation.composition import Succession +from ..animation.creation import ShowCreation +from ..animation.creation import ShowPartial +from ..animation.fading import FadeOut +from ..animation.transform import Transform +from ..mobject.types.vectorized_mobject import VMobject +from ..mobject.geometry import Circle +from ..mobject.geometry import Dot +from ..mobject.shape_matchers import SurroundingRectangle +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.geometry import Line +from ..utils.bezier import interpolate +from ..utils.config_ops import digest_config +from ..utils.rate_functions import there_and_back +from ..utils.rate_functions import wiggle class FocusOn(Transform): @@ -275,4 +275,4 @@ class TurnInsideOut(Transform): } def create_target(self): - return self.mobject.copy().reverse_points() + return self.mobject.copy().reverse_points() \ No newline at end of file diff --git a/manimlib/animation/movement.py b/manimlib/animation/movement.py index f6a3ec055e..fee1bb9c35 100644 --- a/manimlib/animation/movement.py +++ b/manimlib/animation/movement.py @@ -1,5 +1,5 @@ -from manimlib.animation.animation import Animation -from manimlib.utils.rate_functions import linear +from ..animation.animation import Animation +from ..utils.rate_functions import linear class Homotopy(Animation): @@ -75,4 +75,4 @@ def __init__(self, mobject, path, **kwargs): def interpolate_mobject(self, alpha): point = self.path.point_from_proportion(alpha) - self.mobject.move_to(point) + self.mobject.move_to(point) \ No newline at end of file diff --git a/manimlib/animation/numbers.py b/manimlib/animation/numbers.py index e1f354d273..df3a373ae3 100644 --- a/manimlib/animation/numbers.py +++ b/manimlib/animation/numbers.py @@ -1,8 +1,8 @@ import warnings -from manimlib.animation.animation import Animation -from manimlib.mobject.numbers import DecimalNumber -from manimlib.utils.bezier import interpolate +from ..animation.animation import Animation +from ..mobject.numbers import DecimalNumber +from ..utils.bezier import interpolate class ChangingDecimal(Animation): @@ -49,4 +49,4 @@ def __init__(self, decimal_mob, target_number, **kwargs): decimal_mob, lambda a: interpolate(start_number, target_number, a), **kwargs - ) + ) \ No newline at end of file diff --git a/manimlib/animation/rotation.py b/manimlib/animation/rotation.py index 7578c4d6fe..232eb79d5c 100644 --- a/manimlib/animation/rotation.py +++ b/manimlib/animation/rotation.py @@ -1,9 +1,9 @@ -from manimlib.animation.animation import Animation -from manimlib.animation.transform import Transform -from manimlib.constants import OUT -from manimlib.constants import PI -from manimlib.constants import TAU -from manimlib.utils.rate_functions import linear +from ..animation.animation import Animation +from ..animation.transform import Transform +from ..constants import OUT +from ..constants import PI +from ..constants import TAU +from ..utils.rate_functions import linear class Rotating(Animation): @@ -49,4 +49,4 @@ def create_target(self): about_point=self.about_point, about_edge=self.about_edge, ) - return target + return target \ No newline at end of file diff --git a/manimlib/animation/specialized.py b/manimlib/animation/specialized.py index c4f5457d99..4438ead655 100644 --- a/manimlib/animation/specialized.py +++ b/manimlib/animation/specialized.py @@ -1,15 +1,15 @@ import operator as op -from manimlib.animation.composition import LaggedStart -from manimlib.animation.transform import ApplyMethod -from manimlib.animation.transform import Restore -from manimlib.constants import WHITE -from manimlib.constants import BLACK -from manimlib.mobject.geometry import Circle -from manimlib.mobject.svg.drawings import Car -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.utils.config_ops import digest_config -from manimlib.utils.space_ops import get_norm +from ..animation.composition import LaggedStart +from ..animation.transform import ApplyMethod +from ..animation.transform import Restore +from ..constants import WHITE +from ..constants import BLACK +from ..mobject.geometry import Circle +from ..mobject.svg.drawings import Car +from ..mobject.types.vectorized_mobject import VGroup +from ..utils.config_ops import digest_config +from ..utils.space_ops import get_norm class MoveCar(ApplyMethod): @@ -81,4 +81,4 @@ def __init__(self, focal_point, **kwargs): Restore(circle) for circle in circles ] - super().__init__(*animations, **kwargs) + super().__init__(*animations, **kwargs) \ No newline at end of file diff --git a/manimlib/animation/transform.py b/manimlib/animation/transform.py index ef07090cf5..9bf330a18e 100644 --- a/manimlib/animation/transform.py +++ b/manimlib/animation/transform.py @@ -2,17 +2,17 @@ import numpy as np -from manimlib.animation.animation import Animation -from manimlib.constants import DEFAULT_POINTWISE_FUNCTION_RUN_TIME -from manimlib.constants import OUT -from manimlib.constants import DEGREES -from manimlib.mobject.mobject import Group -from manimlib.mobject.mobject import Mobject -from manimlib.utils.config_ops import digest_config -from manimlib.utils.paths import path_along_arc -from manimlib.utils.paths import straight_path -from manimlib.utils.rate_functions import smooth -from manimlib.utils.rate_functions import squish_rate_func +from ..animation.animation import Animation +from ..constants import DEFAULT_POINTWISE_FUNCTION_RUN_TIME +from ..constants import OUT +from ..constants import DEGREES +from ..mobject.mobject import Group +from ..mobject.mobject import Mobject +from ..utils.config_ops import digest_config +from ..utils.paths import path_along_arc +from ..utils.paths import straight_path +from ..utils.rate_functions import smooth +from ..utils.rate_functions import squish_rate_func class Transform(Animation): @@ -321,4 +321,4 @@ def __init__(self, start_anim, end_anim, **kwargs): def interpolate(self, alpha): self.start_anim.interpolate(alpha) self.end_anim.interpolate(alpha) - Transform.interpolate(self, alpha) + Transform.interpolate(self, alpha) \ No newline at end of file diff --git a/manimlib/animation/update.py b/manimlib/animation/update.py index 57856a2ff8..4717076299 100644 --- a/manimlib/animation/update.py +++ b/manimlib/animation/update.py @@ -1,6 +1,6 @@ import operator as op -from manimlib.animation.animation import Animation +from ..animation.animation import Animation class UpdateFromFunc(Animation): @@ -38,4 +38,4 @@ def __init__(self, mobject, tracked_mobject, **kwargs): def interpolate_mobject(self, alpha): target = self.tracked_mobject.get_center() location = self.mobject.get_center() - self.mobject.shift(target - location + self.diff) + self.mobject.shift(target - location + self.diff) \ No newline at end of file diff --git a/manimlib/camera/camera.py b/manimlib/camera/camera.py index 94c111eb23..5812bc3e16 100644 --- a/manimlib/camera/camera.py +++ b/manimlib/camera/camera.py @@ -9,20 +9,20 @@ import cairo import numpy as np -from manimlib.constants import * -from manimlib.mobject.types.image_mobject import AbstractImageMobject -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.types.point_cloud_mobject import PMobject -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.color import color_to_int_rgba -from manimlib.utils.config_ops import digest_config -from manimlib.utils.images import get_full_raster_image_path -from manimlib.utils.iterables import batch_by_property -from manimlib.utils.iterables import list_difference_update -from manimlib.utils.iterables import remove_list_redundancies -from manimlib.utils.simple_functions import fdiv -from manimlib.utils.space_ops import angle_of_vector -from manimlib.utils.space_ops import get_norm +from ..constants import * +from ..mobject.types.image_mobject import AbstractImageMobject +from ..mobject.mobject import Mobject +from ..mobject.types.point_cloud_mobject import PMobject +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.color import color_to_int_rgba +from ..utils.config_ops import digest_config +from ..utils.images import get_full_raster_image_path +from ..utils.iterables import batch_by_property +from ..utils.iterables import list_difference_update +from ..utils.iterables import remove_list_redundancies +from ..utils.simple_functions import fdiv +from ..utils.space_ops import angle_of_vector +from ..utils.space_ops import get_norm class Camera(object): @@ -709,4 +709,4 @@ def display(self, *cvmobjects): else: curr_array = np.maximum(curr_array, new_array) self.reset_pixel_array() - return curr_array + return curr_array \ No newline at end of file diff --git a/manimlib/camera/mapping_camera.py b/manimlib/camera/mapping_camera.py index c80c91cfec..7b39954707 100644 --- a/manimlib/camera/mapping_camera.py +++ b/manimlib/camera/mapping_camera.py @@ -1,9 +1,9 @@ import numpy as np -from manimlib.camera.camera import Camera -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.config_ops import DictAsObject -from manimlib.utils.config_ops import digest_config +from ..camera.camera import Camera +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.config_ops import DictAsObject +from ..utils.config_ops import digest_config # TODO: Add an attribute to mobjects under which they can specify that they should just # map their centers but remain otherwise undistorted (useful for labels, etc.) @@ -110,4 +110,4 @@ def __init__(self, left_camera, right_camera, **kwargs): self, (left_camera, (0, 0)), (right_camera, (0, half_width)), - ) + ) \ No newline at end of file diff --git a/manimlib/camera/moving_camera.py b/manimlib/camera/moving_camera.py index c54a1e6b2b..4cd9fcde77 100644 --- a/manimlib/camera/moving_camera.py +++ b/manimlib/camera/moving_camera.py @@ -1,11 +1,11 @@ -from manimlib.camera.camera import Camera -from manimlib.constants import FRAME_HEIGHT -from manimlib.constants import FRAME_WIDTH -from manimlib.constants import ORIGIN -from manimlib.constants import WHITE -from manimlib.mobject.frame import ScreenRectangle -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.utils.config_ops import digest_config +from ..camera.camera import Camera +from ..constants import FRAME_HEIGHT +from ..constants import FRAME_WIDTH +from ..constants import ORIGIN +from ..constants import WHITE +from ..mobject.frame import ScreenRectangle +from ..mobject.types.vectorized_mobject import VGroup +from ..utils.config_ops import digest_config # TODO, think about how to incorporate perspective @@ -95,4 +95,4 @@ def get_mobjects_indicating_movement(self): Returns all mobjets whose movement implies that the camera should think of all other mobjects on the screen as moving """ - return [self.frame] + return [self.frame] \ No newline at end of file diff --git a/manimlib/camera/multi_camera.py b/manimlib/camera/multi_camera.py index 9283b0e79a..cac1852b07 100644 --- a/manimlib/camera/multi_camera.py +++ b/manimlib/camera/multi_camera.py @@ -1,5 +1,5 @@ -from manimlib.camera.moving_camera import MovingCamera -from manimlib.utils.iterables import list_difference_update +from ..camera.moving_camera import MovingCamera +from ..utils.iterables import list_difference_update class MultiCamera(MovingCamera): @@ -54,4 +54,4 @@ def get_mobjects_indicating_movement(self): return [self.frame] + [ imfc.camera.frame for imfc in self.image_mobjects_from_cameras - ] + ] \ No newline at end of file diff --git a/manimlib/camera/three_d_camera.py b/manimlib/camera/three_d_camera.py index 5cf4ba0d10..97b6182c7f 100644 --- a/manimlib/camera/three_d_camera.py +++ b/manimlib/camera/three_d_camera.py @@ -1,17 +1,17 @@ import numpy as np -from manimlib.camera.camera import Camera -from manimlib.constants import * -from manimlib.mobject.three_d_utils import get_3d_vmob_end_corner -from manimlib.mobject.three_d_utils import get_3d_vmob_end_corner_unit_normal -from manimlib.mobject.three_d_utils import get_3d_vmob_start_corner -from manimlib.mobject.three_d_utils import get_3d_vmob_start_corner_unit_normal -from manimlib.mobject.types.point_cloud_mobject import Point -from manimlib.mobject.value_tracker import ValueTracker -from manimlib.utils.color import get_shaded_rgb -from manimlib.utils.simple_functions import clip_in_place -from manimlib.utils.space_ops import rotation_about_z -from manimlib.utils.space_ops import rotation_matrix +from ..camera.camera import Camera +from ..constants import * +from ..mobject.three_d_utils import get_3d_vmob_end_corner +from ..mobject.three_d_utils import get_3d_vmob_end_corner_unit_normal +from ..mobject.three_d_utils import get_3d_vmob_start_corner +from ..mobject.three_d_utils import get_3d_vmob_start_corner_unit_normal +from ..mobject.types.point_cloud_mobject import Point +from ..mobject.value_tracker import ValueTracker +from ..utils.color import get_shaded_rgb +from ..utils.simple_functions import clip_in_place +from ..utils.space_ops import rotation_about_z +from ..utils.space_ops import rotation_matrix class ThreeDCamera(Camera): @@ -229,4 +229,4 @@ def remove_fixed_orientation_mobjects(self, *mobjects): def remove_fixed_in_frame_mobjects(self, *mobjects): for mobject in self.extract_mobject_family_members(mobjects): if mobject in self.fixed_in_frame_mobjects: - self.fixed_in_frame_mobjects.remove(mobject) + self.fixed_in_frame_mobjects.remove(mobject) \ No newline at end of file diff --git a/manimlib/config.py b/manimlib/config.py index b2a8ed82ea..1fb2e11ced 100644 --- a/manimlib/config.py +++ b/manimlib/config.py @@ -1,11 +1,10 @@ import argparse import colour -import importlib.util import os import sys import types -import manimlib.constants +from . import constants def parse_cli(): @@ -138,26 +137,7 @@ def parse_cli(): sys.exit(2) -def get_module(file_name): - if file_name == "-": - module = types.ModuleType("input_scenes") - code = "from manimlib.imports import *\n\n" + sys.stdin.read() - try: - exec(code, module.__dict__) - return module - except Exception as e: - print(f"Failed to render scene: {str(e)}") - sys.exit(2) - else: - module_name = file_name.replace(os.sep, ".").replace(".py", "") - spec = importlib.util.spec_from_file_location(module_name, file_name) - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - return module - - def get_configuration(args): - module = get_module(args.file) file_writer_config = { # By default, write to file "write_to_movie": args.write_to_movie or not args.save_last_frame, @@ -170,10 +150,8 @@ def get_configuration(args): "file_name": args.file_name, "input_file_path": args.file, } - if hasattr(module, "OUTPUT_DIRECTORY"): - file_writer_config["output_directory"] = module.OUTPUT_DIRECTORY config = { - "module": module, + "file": args.file, "scene_names": args.scene_names, "open_video_upon_completion": args.preview, "show_file_in_finder": args.show_file_in_finder, @@ -214,26 +192,26 @@ def get_configuration(args): def get_camera_configuration(args): camera_config = {} if args.low_quality: - camera_config.update(manimlib.constants.LOW_QUALITY_CAMERA_CONFIG) + camera_config.update(constants.LOW_QUALITY_CAMERA_CONFIG) elif args.medium_quality: - camera_config.update(manimlib.constants.MEDIUM_QUALITY_CAMERA_CONFIG) + camera_config.update(constants.MEDIUM_QUALITY_CAMERA_CONFIG) elif args.high_quality: - camera_config.update(manimlib.constants.HIGH_QUALITY_CAMERA_CONFIG) + camera_config.update(constants.HIGH_QUALITY_CAMERA_CONFIG) elif args.four_k: - camera_config.update(manimlib.constants.FOURK_CAMERA_CONFIG) + camera_config.update(constants.FOURK_CAMERA_CONFIG) else: - camera_config.update(manimlib.constants.PRODUCTION_QUALITY_CAMERA_CONFIG) + camera_config.update(constants.PRODUCTION_QUALITY_CAMERA_CONFIG) # If the resolution was passed in via -r if args.resolution: if args.resolution.lower() == "low": - camera_config.update(manimlib.constants.LOW_QUALITY_CAMERA_CONFIG) + camera_config.update(constants.LOW_QUALITY_CAMERA_CONFIG) elif args.resolution.lower() == "medium": - camera_config.update(manimlib.constants.MEDIUM_QUALITY_CAMERA_CONFIG) + camera_config.update(constants.MEDIUM_QUALITY_CAMERA_CONFIG) elif args.resolution.lower() == "high": - camera_config.update(manimlib.constants.HIGH_QUALITY_CAMERA_CONFIG) + camera_config.update(constants.HIGH_QUALITY_CAMERA_CONFIG) elif args.resolution.lower() == "4K": - camera_config.update(manimlib.constants.FOURK_CAMERA_CONFIG) + camera_config.update(constants.FOURK_CAMERA_CONFIG) elif "," in args.resolution: height_str, width_str = args.resolution.split(",") diff --git a/manimlib/container/container.py b/manimlib/container/container.py index 95cf004bbf..5f1274f03b 100644 --- a/manimlib/container/container.py +++ b/manimlib/container/container.py @@ -1,4 +1,4 @@ -from manimlib.utils.config_ops import digest_config +from ..utils.config_ops import digest_config # Currently, this is only used by both Scene and Mobject. # Still, we abstract its functionality here, albeit purely nominally. @@ -28,4 +28,4 @@ def remove(self, *items): Must be implemented by subclasses. """ raise Exception( - "Container.remove is not implemented; it is up to derived classes to implement") + "Container.remove is not implemented; it is up to derived classes to implement") \ No newline at end of file diff --git a/manimlib/extract_scene.py b/manimlib/extract_scene.py index 7185f6eb56..27f9e1fbd5 100644 --- a/manimlib/extract_scene.py +++ b/manimlib/extract_scene.py @@ -5,11 +5,12 @@ import subprocess as sp import sys import traceback +import importlib.util -from manimlib.scene.scene import Scene -from manimlib.utils.sounds import play_error_sound -from manimlib.utils.sounds import play_finish_sound -import manimlib.constants +from .scene.scene import Scene +from .utils.sounds import play_error_sound +from .utils.sounds import play_finish_sound +from . import constants def open_file_if_needed(file_writer, **config): @@ -76,15 +77,15 @@ def prompt_user_for_choice(scene_classes): print("%d: %s" % (count, name)) num_to_class[count] = scene_class try: - user_input = input(manimlib.constants.CHOOSE_NUMBER_MESSAGE) + user_input = input(constants.CHOOSE_NUMBER_MESSAGE) return [ num_to_class[int(num_str)] for num_str in user_input.split(",") ] except KeyError: - print(manimlib.constants.INVALID_NUMBER_MESSAGE) + print(constants.INVALID_NUMBER_MESSAGE) sys.exit(2) - user_input = input(manimlib.constants.CHOOSE_NUMBER_MESSAGE) + user_input = input(constants.CHOOSE_NUMBER_MESSAGE) return [ num_to_class[int(num_str)] for num_str in user_input.split(",") @@ -95,7 +96,7 @@ def prompt_user_for_choice(scene_classes): def get_scenes_to_render(scene_classes, config): if len(scene_classes) == 0: - print(manimlib.constants.NO_SCENE_MESSAGE) + print(constants.NO_SCENE_MESSAGE) return [] if config["write_all"]: return scene_classes @@ -109,7 +110,7 @@ def get_scenes_to_render(scene_classes, config): break if not found and (scene_name != ""): print( - manimlib.constants.SCENE_NOT_FOUND_MESSAGE.format( + constants.SCENE_NOT_FOUND_MESSAGE.format( scene_name ), file=sys.stderr @@ -132,8 +133,26 @@ def get_scene_classes_from_module(module): ] +def get_module(file_name): + if file_name == "-": + module = types.ModuleType("input_scenes") + code = sys.stdin.read() + try: + exec(code, module.__dict__) + return module + except Exception as e: + print(f"Failed to render scene: {str(e)}") + sys.exit(2) + else: + module_name = file_name.replace(os.sep, ".").replace(".py", "") + spec = importlib.util.spec_from_file_location(module_name, file_name) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + def main(config): - module = config["module"] + module = get_module(config["file"]) all_scene_classes = get_scene_classes_from_module(module) scene_classes_to_render = get_scenes_to_render(all_scene_classes, config) diff --git a/manimlib/for_3b1b_videos/common_scenes.py b/manimlib/for_3b1b_videos/common_scenes.py index da83fbb470..7a938a7d7f 100644 --- a/manimlib/for_3b1b_videos/common_scenes.py +++ b/manimlib/for_3b1b_videos/common_scenes.py @@ -1,29 +1,29 @@ import random -from manimlib.animation.composition import LaggedStartMap -from manimlib.animation.creation import DrawBorderThenFill -from manimlib.animation.creation import Write -from manimlib.animation.fading import FadeIn -from manimlib.animation.fading import FadeOut -from manimlib.constants import * -from manimlib.for_3b1b_videos.pi_creature import Mortimer -from manimlib.for_3b1b_videos.pi_creature import Randolph -from manimlib.for_3b1b_videos.pi_creature_animations import Blink -from manimlib.for_3b1b_videos.pi_creature_scene import PiCreatureScene -from manimlib.mobject.geometry import DashedLine -from manimlib.mobject.geometry import Line -from manimlib.mobject.geometry import Rectangle -from manimlib.mobject.geometry import Square -from manimlib.mobject.svg.drawings import Logo -from manimlib.mobject.svg.drawings import PatreonLogo -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.mobject_update_utils import always_shift -from manimlib.scene.moving_camera_scene import MovingCameraScene -from manimlib.scene.scene import Scene -from manimlib.utils.rate_functions import linear -from manimlib.utils.space_ops import get_norm -from manimlib.utils.space_ops import normalize +from ..animation.composition import LaggedStartMap +from ..animation.creation import DrawBorderThenFill +from ..animation.creation import Write +from ..animation.fading import FadeIn +from ..animation.fading import FadeOut +from ..constants import * +from ..for_3b1b_videos.pi_creature import Mortimer +from ..for_3b1b_videos.pi_creature import Randolph +from ..for_3b1b_videos.pi_creature_animations import Blink +from ..for_3b1b_videos.pi_creature_scene import PiCreatureScene +from ..mobject.geometry import DashedLine +from ..mobject.geometry import Line +from ..mobject.geometry import Rectangle +from ..mobject.geometry import Square +from ..mobject.svg.drawings import Logo +from ..mobject.svg.drawings import PatreonLogo +from ..mobject.svg.tex_mobject import TextMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.mobject_update_utils import always_shift +from ..scene.moving_camera_scene import MovingCameraScene +from ..scene.scene import Scene +from ..utils.rate_functions import linear +from ..utils.space_ops import get_norm +from ..utils.space_ops import normalize class OpeningQuote(Scene): @@ -392,4 +392,4 @@ def get_supporter_note(self): return TextMobject( "(Available to supporters for review now)", color="#F96854", - ) + ) \ No newline at end of file diff --git a/manimlib/for_3b1b_videos/pi_class.py b/manimlib/for_3b1b_videos/pi_class.py index 77a813e185..c3227eebf8 100644 --- a/manimlib/for_3b1b_videos/pi_class.py +++ b/manimlib/for_3b1b_videos/pi_class.py @@ -1,6 +1,6 @@ -from manimlib.constants import * -from manimlib.for_3b1b_videos.pi_creature import PiCreature -from manimlib.mobject.types.vectorized_mobject import VGroup +from ..constants import * +from ..for_3b1b_videos.pi_creature import PiCreature +from ..mobject.types.vectorized_mobject import VGroup class PiCreatureClass(VGroup): @@ -15,4 +15,4 @@ def __init__(self, **kwargs): for j in range(self.height): pi = PiCreature().scale(0.3) pi.move_to(i * DOWN + j * RIGHT) - self.add(pi) + self.add(pi) \ No newline at end of file diff --git a/manimlib/for_3b1b_videos/pi_creature.py b/manimlib/for_3b1b_videos/pi_creature.py index 4e02646341..6f865c1e67 100644 --- a/manimlib/for_3b1b_videos/pi_creature.py +++ b/manimlib/for_3b1b_videos/pi_creature.py @@ -3,17 +3,17 @@ import numpy as np -from manimlib.constants import * -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.geometry import Circle -from manimlib.mobject.svg.drawings import ThoughtBubble -from manimlib.mobject.svg.svg_mobject import SVGMobject -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.config_ops import digest_config -from manimlib.utils.space_ops import get_norm -from manimlib.utils.space_ops import normalize +from ..constants import * +from ..mobject.mobject import Mobject +from ..mobject.geometry import Circle +from ..mobject.svg.drawings import ThoughtBubble +from ..mobject.svg.svg_mobject import SVGMobject +from ..mobject.svg.tex_mobject import TextMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.config_ops import digest_config +from ..utils.space_ops import get_norm +from ..utils.space_ops import normalize pi_creature_dir_maybe = os.path.join(MEDIA_DIR, "assets", "PiCreature") if os.path.exists(pi_creature_dir_maybe): @@ -386,4 +386,4 @@ def blink(self, **kwargs): # TODO, change Blink submob.apply_function( lambda p: [p[0], bottom_y, p[2]] ) - return self + return self \ No newline at end of file diff --git a/manimlib/for_3b1b_videos/pi_creature_animations.py b/manimlib/for_3b1b_videos/pi_creature_animations.py index 91df37739a..4904bb67e0 100644 --- a/manimlib/for_3b1b_videos/pi_creature_animations.py +++ b/manimlib/for_3b1b_videos/pi_creature_animations.py @@ -1,17 +1,17 @@ -from manimlib.animation.animation import Animation -from manimlib.animation.composition import AnimationGroup -from manimlib.animation.fading import FadeOut -from manimlib.animation.creation import DrawBorderThenFill -from manimlib.animation.creation import Write -from manimlib.animation.transform import ApplyMethod -from manimlib.animation.transform import MoveToTarget -from manimlib.constants import * -from manimlib.for_3b1b_videos.pi_class import PiCreatureClass -from manimlib.mobject.mobject import Group -from manimlib.mobject.svg.drawings import SpeechBubble -from manimlib.utils.config_ops import digest_config -from manimlib.utils.rate_functions import squish_rate_func -from manimlib.utils.rate_functions import there_and_back +from ..animation.animation import Animation +from ..animation.composition import AnimationGroup +from ..animation.fading import FadeOut +from ..animation.creation import DrawBorderThenFill +from ..animation.creation import Write +from ..animation.transform import ApplyMethod +from ..animation.transform import MoveToTarget +from ..constants import * +from ..for_3b1b_videos.pi_class import PiCreatureClass +from ..mobject.mobject import Group +from ..mobject.svg.drawings import SpeechBubble +from ..utils.config_ops import digest_config +from ..utils.rate_functions import squish_rate_func +from ..utils.rate_functions import there_and_back class Blink(ApplyMethod): @@ -119,4 +119,4 @@ def interpolate_mobject(self, alpha): for pi in self.mobject: pi.set_color(BLUE_E) if index < self.mobject.height * self.mobject.width: - self.mobject[self.indices[index]].set_color(self.highlight_color) + self.mobject[self.indices[index]].set_color(self.highlight_color) \ No newline at end of file diff --git a/manimlib/for_3b1b_videos/pi_creature_scene.py b/manimlib/for_3b1b_videos/pi_creature_scene.py index def1216d7b..ff9d4ea4ef 100644 --- a/manimlib/for_3b1b_videos/pi_creature_scene.py +++ b/manimlib/for_3b1b_videos/pi_creature_scene.py @@ -1,26 +1,26 @@ import itertools as it import random -from manimlib.animation.transform import ReplacementTransform -from manimlib.animation.transform import Transform -from manimlib.animation.transform import ApplyMethod -from manimlib.animation.composition import LaggedStart -from manimlib.constants import * -from manimlib.for_3b1b_videos.pi_creature import Mortimer -from manimlib.for_3b1b_videos.pi_creature import PiCreature -from manimlib.for_3b1b_videos.pi_creature import Randolph -from manimlib.for_3b1b_videos.pi_creature_animations import Blink -from manimlib.for_3b1b_videos.pi_creature_animations import PiCreatureBubbleIntroduction -from manimlib.for_3b1b_videos.pi_creature_animations import RemovePiCreatureBubble -from manimlib.mobject.mobject import Group -from manimlib.mobject.frame import ScreenRectangle -from manimlib.mobject.svg.drawings import SpeechBubble -from manimlib.mobject.svg.drawings import ThoughtBubble -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.scene.scene import Scene -from manimlib.utils.rate_functions import squish_rate_func -from manimlib.utils.rate_functions import there_and_back -from manimlib.utils.space_ops import get_norm +from ..animation.transform import ReplacementTransform +from ..animation.transform import Transform +from ..animation.transform import ApplyMethod +from ..animation.composition import LaggedStart +from ..constants import * +from ..for_3b1b_videos.pi_creature import Mortimer +from ..for_3b1b_videos.pi_creature import PiCreature +from ..for_3b1b_videos.pi_creature import Randolph +from ..for_3b1b_videos.pi_creature_animations import Blink +from ..for_3b1b_videos.pi_creature_animations import PiCreatureBubbleIntroduction +from ..for_3b1b_videos.pi_creature_animations import RemovePiCreatureBubble +from ..mobject.mobject import Group +from ..mobject.frame import ScreenRectangle +from ..mobject.svg.drawings import SpeechBubble +from ..mobject.svg.drawings import ThoughtBubble +from ..mobject.types.vectorized_mobject import VGroup +from ..scene.scene import Scene +from ..utils.rate_functions import squish_rate_func +from ..utils.rate_functions import there_and_back +from ..utils.space_ops import get_norm class PiCreatureScene(Scene): @@ -378,4 +378,4 @@ def teacher_holds_up(self, mobject, target_mode="raise_right_hand", added_anims= ReplacementTransform(mobject_copy, mobject), self.teacher.change, target_mode, *added_anims - ) + ) \ No newline at end of file diff --git a/manimlib/imports.py b/manimlib/imports.py index 1020f8ce0a..5edab6cf31 100644 --- a/manimlib/imports.py +++ b/manimlib/imports.py @@ -14,89 +14,89 @@ """ -from manimlib.constants import * +from .constants import * -from manimlib.animation.animation import * -from manimlib.animation.composition import * -from manimlib.animation.creation import * -from manimlib.animation.fading import * -from manimlib.animation.growing import * -from manimlib.animation.indication import * -from manimlib.animation.movement import * -from manimlib.animation.numbers import * -from manimlib.animation.rotation import * -from manimlib.animation.specialized import * -from manimlib.animation.transform import * -from manimlib.animation.update import * +from .animation.animation import * +from .animation.composition import * +from .animation.creation import * +from .animation.fading import * +from .animation.growing import * +from .animation.indication import * +from .animation.movement import * +from .animation.numbers import * +from .animation.rotation import * +from .animation.specialized import * +from .animation.transform import * +from .animation.update import * -from manimlib.camera.camera import * -from manimlib.camera.mapping_camera import * -from manimlib.camera.moving_camera import * -from manimlib.camera.three_d_camera import * +from .camera.camera import * +from .camera.mapping_camera import * +from .camera.moving_camera import * +from .camera.three_d_camera import * -from manimlib.mobject.coordinate_systems import * -from manimlib.mobject.changing import * -from manimlib.mobject.frame import * -from manimlib.mobject.functions import * -from manimlib.mobject.geometry import * -from manimlib.mobject.matrix import * -from manimlib.mobject.mobject import * -from manimlib.mobject.number_line import * -from manimlib.mobject.numbers import * -from manimlib.mobject.probability import * -from manimlib.mobject.shape_matchers import * -from manimlib.mobject.svg.brace import * -from manimlib.mobject.svg.drawings import * -from manimlib.mobject.svg.svg_mobject import * -from manimlib.mobject.svg.tex_mobject import * -from manimlib.mobject.svg.text_mobject import * -from manimlib.mobject.svg.code_mobject import * -from manimlib.mobject.three_d_utils import * -from manimlib.mobject.three_dimensions import * -from manimlib.mobject.types.image_mobject import * -from manimlib.mobject.types.point_cloud_mobject import * -from manimlib.mobject.types.vectorized_mobject import * -from manimlib.mobject.mobject_update_utils import * -from manimlib.mobject.value_tracker import * -from manimlib.mobject.vector_field import * +from .mobject.coordinate_systems import * +from .mobject.changing import * +from .mobject.frame import * +from .mobject.functions import * +from .mobject.geometry import * +from .mobject.matrix import * +from .mobject.mobject import * +from .mobject.number_line import * +from .mobject.numbers import * +from .mobject.probability import * +from .mobject.shape_matchers import * +from .mobject.svg.brace import * +from .mobject.svg.drawings import * +from .mobject.svg.svg_mobject import * +from .mobject.svg.tex_mobject import * +from .mobject.svg.text_mobject import * +from .mobject.svg.code_mobject import * +from .mobject.three_d_utils import * +from .mobject.three_dimensions import * +from .mobject.types.image_mobject import * +from .mobject.types.point_cloud_mobject import * +from .mobject.types.vectorized_mobject import * +from .mobject.mobject_update_utils import * +from .mobject.value_tracker import * +from .mobject.vector_field import * -from manimlib.for_3b1b_videos.common_scenes import * -from manimlib.for_3b1b_videos.pi_creature import * -from manimlib.for_3b1b_videos.pi_creature_animations import * -from manimlib.for_3b1b_videos.pi_creature_scene import * +from .for_3b1b_videos.common_scenes import * +from .for_3b1b_videos.pi_creature import * +from .for_3b1b_videos.pi_creature_animations import * +from .for_3b1b_videos.pi_creature_scene import * -from manimlib.once_useful_constructs.arithmetic import * -from manimlib.once_useful_constructs.combinatorics import * -from manimlib.once_useful_constructs.complex_transformation_scene import * -from manimlib.once_useful_constructs.counting import * -from manimlib.once_useful_constructs.fractals import * -from manimlib.once_useful_constructs.graph_theory import * -from manimlib.once_useful_constructs.light import * +from .once_useful_constructs.arithmetic import * +from .once_useful_constructs.combinatorics import * +from .once_useful_constructs.complex_transformation_scene import * +from .once_useful_constructs.counting import * +from .once_useful_constructs.fractals import * +from .once_useful_constructs.graph_theory import * +from .once_useful_constructs.light import * -from manimlib.scene.graph_scene import * -from manimlib.scene.moving_camera_scene import * -from manimlib.scene.reconfigurable_scene import * -from manimlib.scene.scene import * -from manimlib.scene.sample_space_scene import * -from manimlib.scene.graph_scene import * -from manimlib.scene.scene_from_video import * -from manimlib.scene.three_d_scene import * -from manimlib.scene.vector_space_scene import * -from manimlib.scene.zoomed_scene import * +from .scene.graph_scene import * +from .scene.moving_camera_scene import * +from .scene.reconfigurable_scene import * +from .scene.scene import * +from .scene.sample_space_scene import * +from .scene.graph_scene import * +from .scene.scene_from_video import * +from .scene.three_d_scene import * +from .scene.vector_space_scene import * +from .scene.zoomed_scene import * -from manimlib.utils.bezier import * -from manimlib.utils.color import * -from manimlib.utils.config_ops import * -from manimlib.utils.debug import * -from manimlib.utils.images import * -from manimlib.utils.iterables import * -from manimlib.utils.file_ops import * -from manimlib.utils.paths import * -from manimlib.utils.rate_functions import * -from manimlib.utils.simple_functions import * -from manimlib.utils.sounds import * -from manimlib.utils.space_ops import * -from manimlib.utils.strings import * +from .utils.bezier import * +from .utils.color import * +from .utils.config_ops import * +from .utils.debug import * +from .utils.images import * +from .utils.iterables import * +from .utils.file_ops import * +from .utils.paths import * +from .utils.rate_functions import * +from .utils.simple_functions import * +from .utils.sounds import * +from .utils.space_ops import * +from .utils.strings import * # Non manim libraries that are also nice to have without thinking @@ -112,4 +112,4 @@ import math from PIL import Image -from colour import Color +from colour import Color \ No newline at end of file diff --git a/manimlib/mobject/changing.py b/manimlib/mobject/changing.py index 20f74a4f3c..f96ff1db5f 100644 --- a/manimlib/mobject/changing.py +++ b/manimlib/mobject/changing.py @@ -1,8 +1,8 @@ -from manimlib.constants import * -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.utils.rate_functions import smooth -from manimlib.utils.space_ops import get_norm +from ..constants import * +from ..mobject.types.vectorized_mobject import VMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..utils.rate_functions import smooth +from ..utils.space_ops import get_norm class AnimatedBoundary(VGroup): @@ -95,4 +95,4 @@ def update_path(self): nppcc = self.n_points_per_cubic_curve dist = get_norm(new_point - self.points[-nppcc]) if dist >= self.min_distance_to_new_point: - self.add_line_to(new_point) + self.add_line_to(new_point) \ No newline at end of file diff --git a/manimlib/mobject/coordinate_systems.py b/manimlib/mobject/coordinate_systems.py index 442a36d745..10b2e2dca8 100644 --- a/manimlib/mobject/coordinate_systems.py +++ b/manimlib/mobject/coordinate_systems.py @@ -1,17 +1,17 @@ import numpy as np import numbers -from manimlib.constants import * -from manimlib.mobject.functions import ParametricFunction -from manimlib.mobject.geometry import Arrow -from manimlib.mobject.geometry import Line -from manimlib.mobject.number_line import NumberLine -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.utils.config_ops import digest_config -from manimlib.utils.config_ops import merge_dicts_recursively -from manimlib.utils.simple_functions import binary_search -from manimlib.utils.space_ops import angle_of_vector +from ..constants import * +from ..mobject.functions import ParametricFunction +from ..mobject.geometry import Arrow +from ..mobject.geometry import Line +from ..mobject.number_line import NumberLine +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..utils.config_ops import digest_config +from ..utils.config_ops import merge_dicts_recursively +from ..utils.simple_functions import binary_search +from ..utils.space_ops import angle_of_vector # TODO: There should be much more code reuse between Axes, NumberPlane and GraphScene @@ -429,4 +429,4 @@ def get_coordinate_labels(self, *numbers, **kwargs): def add_coordinates(self, *numbers): self.add(self.get_coordinate_labels(*numbers)) - return self + return self \ No newline at end of file diff --git a/manimlib/mobject/frame.py b/manimlib/mobject/frame.py index 4ea2260dbe..7b45722d69 100644 --- a/manimlib/mobject/frame.py +++ b/manimlib/mobject/frame.py @@ -1,6 +1,6 @@ -from manimlib.constants import * -from manimlib.mobject.geometry import Rectangle -from manimlib.utils.config_ops import digest_config +from ..constants import * +from ..mobject.geometry import Rectangle +from ..utils.config_ops import digest_config class ScreenRectangle(Rectangle): @@ -44,4 +44,4 @@ def __init__(self, **kwargs): width=self.aspect_ratio * self.height, height=self.height, **kwargs - ) + ) \ No newline at end of file diff --git a/manimlib/mobject/functions.py b/manimlib/mobject/functions.py index b081fc4120..f31ad0d63e 100644 --- a/manimlib/mobject/functions.py +++ b/manimlib/mobject/functions.py @@ -1,6 +1,6 @@ -from manimlib.constants import * -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.config_ops import digest_config +from ..constants import * +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.config_ops import digest_config import math @@ -101,4 +101,4 @@ def get_function(self): return self.function def get_point_from_function(self, x): - return self.parametric_function(x) + return self.parametric_function(x) \ No newline at end of file diff --git a/manimlib/mobject/geometry.py b/manimlib/mobject/geometry.py index b24e406db2..5636219560 100644 --- a/manimlib/mobject/geometry.py +++ b/manimlib/mobject/geometry.py @@ -1,22 +1,22 @@ import warnings import numpy as np -from manimlib.constants import * -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.mobject.types.vectorized_mobject import DashedVMobject -from manimlib.utils.config_ops import digest_config -from manimlib.utils.iterables import adjacent_n_tuples -from manimlib.utils.iterables import adjacent_pairs -from manimlib.utils.simple_functions import fdiv -from manimlib.utils.space_ops import angle_of_vector -from manimlib.utils.space_ops import angle_between_vectors -from manimlib.utils.space_ops import compass_directions -from manimlib.utils.space_ops import line_intersection -from manimlib.utils.space_ops import get_norm -from manimlib.utils.space_ops import normalize -from manimlib.utils.space_ops import rotate_vector +from ..constants import * +from ..mobject.mobject import Mobject +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject +from ..mobject.types.vectorized_mobject import DashedVMobject +from ..utils.config_ops import digest_config +from ..utils.iterables import adjacent_n_tuples +from ..utils.iterables import adjacent_pairs +from ..utils.simple_functions import fdiv +from ..utils.space_ops import angle_of_vector +from ..utils.space_ops import angle_between_vectors +from ..utils.space_ops import compass_directions +from ..utils.space_ops import line_intersection +from ..utils.space_ops import get_norm +from ..utils.space_ops import normalize +from ..utils.space_ops import rotate_vector DEFAULT_DOT_RADIUS = 0.08 @@ -847,4 +847,4 @@ class RoundedRectangle(Rectangle): def __init__(self, **kwargs): Rectangle.__init__(self, **kwargs) - self.round_corners(self.corner_radius) + self.round_corners(self.corner_radius) \ No newline at end of file diff --git a/manimlib/mobject/matrix.py b/manimlib/mobject/matrix.py index a689729cfb..189729406f 100644 --- a/manimlib/mobject/matrix.py +++ b/manimlib/mobject/matrix.py @@ -1,13 +1,13 @@ import numpy as np -from manimlib.constants import * -from manimlib.mobject.numbers import DecimalNumber -from manimlib.mobject.numbers import Integer -from manimlib.mobject.shape_matchers import BackgroundRectangle -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject +from ..constants import * +from ..mobject.numbers import DecimalNumber +from ..mobject.numbers import Integer +from ..mobject.shape_matchers import BackgroundRectangle +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.svg.tex_mobject import TextMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject VECTOR_LABEL_SCALE_FACTOR = 0.8 @@ -178,4 +178,4 @@ def get_det_text(matrix, determinant=None, background_rect=False, initial_scale_ result = TexMobject(str(determinant)) result.next_to(eq, RIGHT, buff=0.2) det_text.add(eq, result) - return det_text + return det_text \ No newline at end of file diff --git a/manimlib/mobject/mobject.py b/manimlib/mobject/mobject.py index 7cd8b30f83..12d06de4b0 100644 --- a/manimlib/mobject/mobject.py +++ b/manimlib/mobject/mobject.py @@ -9,18 +9,17 @@ from colour import Color import numpy as np -import manimlib.constants as consts -from manimlib.constants import * -from manimlib.container.container import Container -from manimlib.utils.color import color_gradient -from manimlib.utils.color import interpolate_color -from manimlib.utils.iterables import list_update -from manimlib.utils.iterables import remove_list_redundancies -from manimlib.utils.paths import straight_path -from manimlib.utils.simple_functions import get_parameters -from manimlib.utils.space_ops import angle_of_vector -from manimlib.utils.space_ops import get_norm -from manimlib.utils.space_ops import rotation_matrix +from ..constants import * +from ..container.container import Container +from ..utils.color import color_gradient +from ..utils.color import interpolate_color +from ..utils.iterables import list_update +from ..utils.iterables import remove_list_redundancies +from ..utils.paths import straight_path +from ..utils.simple_functions import get_parameters +from ..utils.space_ops import angle_of_vector +from ..utils.space_ops import get_norm +from ..utils.space_ops import rotation_matrix # TODO: Explain array_attrs @@ -100,7 +99,7 @@ def apply_over_attr_arrays(self, func): def get_image(self, camera=None): if camera is None: - from manimlib.camera.camera import Camera + from ..camera.camera import Camera camera = Camera() camera.capture_mobject(self) return camera.get_image() @@ -110,7 +109,7 @@ def show(self, camera=None): def save_image(self, name=None): self.get_image().save( - os.path.join(consts.VIDEO_DIR, (name or str(self)) + ".png") + os.path.join(VIDEO_DIR, (name or str(self)) + ".png") ) def copy(self): @@ -567,7 +566,7 @@ def put_start_and_end_on(self, start, end): def add_background_rectangle(self, color=BLACK, opacity=0.75, **kwargs): # TODO, this does not behave well when the mobject has points, # since it gets displayed on top - from manimlib.mobject.shape_matchers import BackgroundRectangle + from ..mobject.shape_matchers import BackgroundRectangle self.background_rectangle = BackgroundRectangle( self, color=color, fill_opacity=opacity, diff --git a/manimlib/mobject/mobject_update_utils.py b/manimlib/mobject/mobject_update_utils.py index 0f256f2c9d..896b8f41ed 100644 --- a/manimlib/mobject/mobject_update_utils.py +++ b/manimlib/mobject/mobject_update_utils.py @@ -1,9 +1,9 @@ import inspect import numpy as np -from manimlib.constants import DEGREES -from manimlib.constants import RIGHT -from manimlib.mobject.mobject import Mobject +from ..constants import DEGREES +from ..constants import RIGHT +from ..mobject.mobject import Mobject def assert_is_mobject_method(method): @@ -97,4 +97,4 @@ def update(m, dt): def cycle_animation(animation, **kwargs): return turn_animation_into_updater( animation, cycle=True, **kwargs - ) + ) \ No newline at end of file diff --git a/manimlib/mobject/number_line.py b/manimlib/mobject/number_line.py index 40577194a3..1ae4dab2e7 100644 --- a/manimlib/mobject/number_line.py +++ b/manimlib/mobject/number_line.py @@ -1,14 +1,14 @@ import operator as op -from manimlib.constants import * -from manimlib.mobject.geometry import Line -from manimlib.mobject.numbers import DecimalNumber -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.utils.bezier import interpolate -from manimlib.utils.config_ops import digest_config -from manimlib.utils.config_ops import merge_dicts_recursively -from manimlib.utils.simple_functions import fdiv -from manimlib.utils.space_ops import normalize +from ..constants import * +from ..mobject.geometry import Line +from ..mobject.numbers import DecimalNumber +from ..mobject.types.vectorized_mobject import VGroup +from ..utils.bezier import interpolate +from ..utils.config_ops import digest_config +from ..utils.config_ops import merge_dicts_recursively +from ..utils.simple_functions import fdiv +from ..utils.space_ops import normalize class NumberLine(Line): @@ -198,4 +198,4 @@ class UnitInterval(NumberLine): "decimal_number_config": { "num_decimal_places": 1, } - } + } \ No newline at end of file diff --git a/manimlib/mobject/numbers.py b/manimlib/mobject/numbers.py index 4c14b4020a..512b7d37ad 100644 --- a/manimlib/mobject/numbers.py +++ b/manimlib/mobject/numbers.py @@ -1,6 +1,6 @@ -from manimlib.constants import * -from manimlib.mobject.svg.tex_mobject import SingleStringTexMobject -from manimlib.mobject.types.vectorized_mobject import VMobject +from ..constants import * +from ..mobject.svg.tex_mobject import SingleStringTexMobject +from ..mobject.types.vectorized_mobject import VMobject class DecimalNumber(VMobject): @@ -142,4 +142,4 @@ class Integer(DecimalNumber): } def get_value(self): - return int(np.round(super().get_value())) + return int(np.round(super().get_value())) \ No newline at end of file diff --git a/manimlib/mobject/probability.py b/manimlib/mobject/probability.py index 662154c157..db8de58a23 100644 --- a/manimlib/mobject/probability.py +++ b/manimlib/mobject/probability.py @@ -1,13 +1,13 @@ -from manimlib.constants import * -from manimlib.mobject.geometry import Line -from manimlib.mobject.geometry import Rectangle -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.svg.brace import Brace -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.utils.color import color_gradient -from manimlib.utils.iterables import tuplify +from ..constants import * +from ..mobject.geometry import Line +from ..mobject.geometry import Rectangle +from ..mobject.mobject import Mobject +from ..mobject.svg.brace import Brace +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.svg.tex_mobject import TextMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..utils.color import color_gradient +from ..utils.iterables import tuplify EPSILON = 0.0001 @@ -229,4 +229,4 @@ def change_bar_values(self, values): bar.move_to(bar_bottom, DOWN) def copy(self): - return self.deepcopy() + return self.deepcopy() \ No newline at end of file diff --git a/manimlib/mobject/shape_matchers.py b/manimlib/mobject/shape_matchers.py index a6933f218f..2588eebd06 100644 --- a/manimlib/mobject/shape_matchers.py +++ b/manimlib/mobject/shape_matchers.py @@ -1,10 +1,10 @@ -from manimlib.constants import * -from manimlib.mobject.geometry import Line -from manimlib.mobject.geometry import Rectangle -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.color import Color -from manimlib.utils.config_ops import digest_config +from ..constants import * +from ..mobject.geometry import Line +from ..mobject.geometry import Rectangle +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.color import Color +from ..utils.config_ops import digest_config class SurroundingRectangle(Rectangle): @@ -82,4 +82,4 @@ class Underline(Line): def __init__(self, mobject, **kwargs): super().__init__(LEFT, RIGHT, **kwargs) self.match_width(mobject) - self.next_to(mobject, DOWN, buff=self.buff) + self.next_to(mobject, DOWN, buff=self.buff) \ No newline at end of file diff --git a/manimlib/mobject/svg/brace.py b/manimlib/mobject/svg/brace.py index c048d14326..7f8b2888cf 100644 --- a/manimlib/mobject/svg/brace.py +++ b/manimlib/mobject/svg/brace.py @@ -1,14 +1,14 @@ import numpy as np -from manimlib.animation.composition import AnimationGroup -from manimlib.constants import * -from manimlib.animation.fading import FadeIn -from manimlib.animation.growing import GrowFromCenter -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.config_ops import digest_config -from manimlib.utils.space_ops import get_norm +from ...animation.composition import AnimationGroup +from ...constants import * +from ...animation.fading import FadeIn +from ...animation.growing import GrowFromCenter +from ...mobject.svg.tex_mobject import TexMobject +from ...mobject.svg.tex_mobject import TextMobject +from ...mobject.types.vectorized_mobject import VMobject +from ...utils.config_ops import digest_config +from ...utils.space_ops import get_norm class Brace(TexMobject): @@ -136,4 +136,4 @@ def copy(self): class BraceText(BraceLabel): CONFIG = { "label_constructor": TextMobject - } + } \ No newline at end of file diff --git a/manimlib/mobject/svg/code_mobject.py b/manimlib/mobject/svg/code_mobject.py index f41cc15954..a2a9ea469d 100644 --- a/manimlib/mobject/svg/code_mobject.py +++ b/manimlib/mobject/svg/code_mobject.py @@ -1,310 +1,310 @@ -import html -from manimlib.constants import * -from manimlib.container.container import Container -from manimlib.mobject.geometry import Rectangle, Dot, RoundedRectangle -from manimlib.mobject.shape_matchers import SurroundingRectangle -from manimlib.mobject.svg.text_mobject import Paragraph -from manimlib.mobject.types.vectorized_mobject import VGroup - -import re -from pygments import highlight -from pygments.lexers import get_lexer_by_name -from pygments.formatters.html import HtmlFormatter - -''' -1) Code is VGroup() with three things - 1.1) Code[0] is Code.background_mobject - which can be a - 1.1.1) Rectangle() if background == "rectangle" - 1.1.2) VGroup() of Rectangle() and Dot() for three buttons if background == "window" - 1.2) Code[1] is Code.line_numbers Which is a Paragraph() object, this mean you can use - Code.line_numbers[0] or Code[1][0] to access first line number - 1.3) Code[2] is Code.code - 1.3.1) Which is a Paragraph() with color highlighted, this mean you can use - Code.code[1] or Code[2][1] - line number 1 - Code.code[1][0] or Code.code[1][0] - first character of line number 1 - Code.code[1][0:5] or Code.code[1][0:5] - first five characters of line number 1 -''' - - -class Code(VGroup): - CONFIG = { - "tab_width": 3, - "line_spacing": 0.1, - "scale_factor": 0.5, - "run_time": 1, - "font": 'Monospac821 BT', - 'stroke_width': 0, - 'margin': 0.3, - 'indentation_char': " ", - "background": "rectangle", # or window - "corner_radius": 0.2, - 'insert_line_no': True, - 'line_no_from': 1, - "line_no_buff": 0.4, - 'style': 'vim', - 'language': 'cpp', - 'generate_html_file': False - } - - def __init__(self, file_name=None, **kwargs): - Container.__init__(self, **kwargs) - self.file_name = file_name or self.file_name - self.ensure_valid_file() - self.style = self.style.lower() - self.gen_html_string() - strati = self.html_string.find("background:") - self.background_color = self.html_string[strati + 12:strati + 19] - self.gen_code_json() - - self.code = self.gen_colored_lines() - if self.insert_line_no: - self.line_numbers = self.gen_line_numbers() - self.line_numbers.next_to(self.code, direction=LEFT, buff=self.line_no_buff) - - if self.background == "rectangle": - if self.insert_line_no: - forground = VGroup(self.code, self.line_numbers) - else: - forground = self.code - self.background_mobject = SurroundingRectangle(forground, buff=self.margin, - color=self.background_color, - fill_color=self.background_color, - stroke_width=0, - fill_opacity=1, ) - self.background_mobject.round_corners(self.corner_radius) - else: - if self.insert_line_no: - forground = VGroup(self.code, self.line_numbers) - else: - forground = self.code - - height = forground.get_height() + 0.1 * 3 + 2 * self.margin - width = forground.get_width() + 0.1 * 3 + 2 * self.margin - - rrect = RoundedRectangle(corner_radius=self.corner_radius, height=height, width=width, - stroke_width=0, - color=self.background_color, fill_opacity=1) - red_button = Dot(radius=0.1, stroke_width=0, color='#ff5f56') - red_button.shift(LEFT * 0.1 * 3) - yellow_button = Dot(radius=0.1, stroke_width=0, color='#ffbd2e') - green_button = Dot(radius=0.1, stroke_width=0, color='#27c93f') - green_button.shift(RIGHT * 0.1 * 3) - buttons = VGroup(red_button, yellow_button, green_button) - buttons.shift( - UP * (height / 2 - 0.1 * 2 - 0.05) + LEFT * (width / 2 - 0.1 * 5 - self.corner_radius / 2 - 0.05)) - - self.background_mobject = VGroup(rrect, buttons) - x = (height - forground.get_height()) / 2 - 0.1 * 3 - self.background_mobject.shift(forground.get_center()) - self.background_mobject.shift(UP * x) - - if self.insert_line_no: - VGroup.__init__(self, self.background_mobject, self.line_numbers, *self.code, **kwargs) - else: - VGroup.__init__(self, self.background_mobject, Dot(fill_opacity=0, stroke_opacity=0), *self.code, **kwargs) - - self.move_to(np.array([0, 0, 0])) - - def apply_points_function_about_point(self, func, about_point=None, about_edge=None): - if about_point is None: - if about_edge is None: - about_edge = self.get_corner(UP + LEFT) - about_point = self.get_critical_point(about_edge) - for mob in self.family_members_with_points(): - mob.points -= about_point - mob.points = func(mob.points) - mob.points += about_point - return self - - def ensure_valid_file(self): - if self.file_name is None: - raise Exception("Must specify file for Code") - possible_paths = [ - os.path.join(os.path.join("assets", "codes"), self.file_name), - self.file_name, - ] - for path in possible_paths: - if os.path.exists(path): - self.file_path = path - return - raise IOError("No file matching %s in codes directory" % - self.file_name) - - def gen_line_numbers(self): - line_numbers_array = [] - for line_no in range(0, self.code_json.__len__()): - number = str(self.line_no_from + line_no) - line_numbers_array.append(number) - line_numbers = Paragraph(*[i for i in line_numbers_array], line_spacing=self.line_spacing, - alignment="right", font=self.font, stroke_width=self.stroke_width).scale(self.scale_factor) - return line_numbers - - def gen_colored_lines(self): - lines_text = [] - for line_no in range(0, self.code_json.__len__()): - line_str = "" - for word_index in range(self.code_json[line_no].__len__()): - line_str = line_str + self.code_json[line_no][word_index][0] - lines_text.append(self.tab_spaces[line_no] * "\t" + line_str) - code = Paragraph(*[i for i in lines_text], line_spacing=self.line_spacing, tab_width=self.tab_width, - alignment="left", font=self.font, stroke_width=self.stroke_width).scale(self.scale_factor) - for line_no in range(code.__len__()): - line = code[line_no] - line_char_index = self.tab_spaces[line_no] - for word_index in range(self.code_json[line_no].__len__()): - line[line_char_index:line_char_index + self.code_json[line_no][word_index][0].__len__()].set_color( - self.code_json[line_no][word_index][1]) - line_char_index += self.code_json[line_no][word_index][0].__len__() - return code - - def gen_html_string(self): - file = open(self.file_path, "r") - code_str = file.read() - file.close() - self.html_string = hilite_me(code_str, self.language, {}, self.style, self.insert_line_no, - "border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;") - if self.generate_html_file: - os.makedirs(os.path.join("assets", "codes", "generated_html_files"), exist_ok=True) - file = open(os.path.join("assets", "codes", "generated_html_files", self.file_name + ".html"), "w") - file.write(self.html_string) - file.close() - - def gen_code_json(self): - if self.background_color == "#111111" or \ - self.background_color == "#272822" or \ - self.background_color == "#202020" or \ - self.background_color == "#000000": - self.default_color = "#ffffff" - else: - self.default_color = "#000000" - for i in range(3, -1, -1): - self.html_string = self.html_string.replace("" + " " * i, " " * i + "") - self.html_string = self.html_string.replace("background-color:", "background:") - - if self.insert_line_no: - start_point = self.html_string.find("") - lines[0] = lines[0][start_point + 1:] - # print(lines) - self.code_json = [] - self.tab_spaces = [] - code_json_line_index = -1 - for line_index in range(0, lines.__len__()): - if lines[line_index].__len__() == 0: - continue - # print(lines[line_index]) - self.code_json.append([]) - code_json_line_index = code_json_line_index + 1 - if lines[line_index].startswith(self.indentation_char): - start_point = lines[line_index].find("<") - starting_string = lines[line_index][:start_point] - indentation_char_count = lines[line_index][:start_point].count(self.indentation_char) - if starting_string.__len__() != indentation_char_count * self.indentation_char.__len__(): - lines[line_index] = "\t" * indentation_char_count + starting_string[starting_string.rfind( - self.indentation_char) + self.indentation_char.__len__():] + \ - lines[line_index][start_point:] - else: - lines[line_index] = "\t" * indentation_char_count + lines[line_index][start_point:] - - indentation_char_count = 0 - while lines[line_index][indentation_char_count] == '\t': - indentation_char_count = indentation_char_count + 1 - self.tab_spaces.append(indentation_char_count) - # print(lines[line_index]) - lines[line_index] = self.correct_non_span(lines[line_index]) - # print(lines[line_index]) - words = lines[line_index].split("") - end_point = words[word_index].find("") - text = words[word_index][start_point + 1:end_point] - text = html.unescape(text) - if text != "": - # print(text, "'" + color + "'") - self.code_json[code_json_line_index].append([text, color]) - # print(self.code_json) - - def correct_non_span(self, line_str): - words = line_str.split("") - line_str = "" - for i in range(0, words.__len__()): - if i != words.__len__() - 1: - j = words[i].find("' + words[i][starti:j] + "" - else: - temp = '' + words[i][starti:j] - temp = temp + words[i][j:] - words[i] = temp - if words[i] != "": - line_str = line_str + words[i] + "" - return line_str - - -def hilite_me(code, lexer, options, style, linenos, divstyles): - lexer = lexer or 'python' - style = style or 'colorful' - defstyles = 'overflow:auto;width:auto;' - - formatter = HtmlFormatter(style=style, - linenos=False, - noclasses=True, - cssclass='', - cssstyles=defstyles + divstyles, - prestyles='margin: 0') - html = highlight(code, get_lexer_by_name(lexer, **options), formatter) - if linenos: - html = insert_line_numbers(html) - html = "" + html - return html - - -def get_default_style(): - return 'border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;' - - -def insert_line_numbers(html): - match = re.search('(]*>)(.*)()', html, re.DOTALL) - if not match: return html - - pre_open = match.group(1) - pre = match.group(2) - pre_close = match.group(3) - - html = html.replace(pre_close, '') - numbers = range(1, pre.count('\n') + 1) - format = '%' + str(len(str(numbers[-1]))) + 'i' - lines = '\n'.join(format % i for i in numbers) - html = html.replace(pre_open, '
' + pre_open + lines + '' + pre_open) - return html +import html +from ...constants import * +from ...container.container import Container +from ...mobject.geometry import RoundedRectangle +from ...mobject.shape_matchers import SurroundingRectangle +from ...mobject.svg.text_mobject import Paragraph +from ...mobject.types.vectorized_mobject import VGroup + +import re +from pygments import highlight +from pygments.lexers import get_lexer_by_name +from pygments.formatters.html import HtmlFormatter + +''' +1) Code is VGroup() with three things + 1.1) Code[0] is Code.background_mobject + which can be a + 1.1.1) Rectangle() if background == "rectangle" + 1.1.2) VGroup() of Rectangle() and Dot() for three buttons if background == "window" + 1.2) Code[1] is Code.line_numbers Which is a Paragraph() object, this mean you can use + Code.line_numbers[0] or Code[1][0] to access first line number + 1.3) Code[2] is Code.code + 1.3.1) Which is a Paragraph() with color highlighted, this mean you can use + Code.code[1] or Code[2][1] + line number 1 + Code.code[1][0] or Code.code[1][0] + first character of line number 1 + Code.code[1][0:5] or Code.code[1][0:5] + first five characters of line number 1 +''' + + +class Code(VGroup): + CONFIG = { + "tab_width": 3, + "line_spacing": 0.1, + "scale_factor": 0.5, + "run_time": 1, + "font": 'Monospac821 BT', + 'stroke_width': 0, + 'margin': 0.3, + 'indentation_char': " ", + "background": "rectangle", # or window + "corner_radius": 0.2, + 'insert_line_no': True, + 'line_no_from': 1, + "line_no_buff": 0.4, + 'style': 'vim', + 'language': 'cpp', + 'generate_html_file': False + } + + def __init__(self, file_name=None, **kwargs): + Container.__init__(self, **kwargs) + self.file_name = file_name or self.file_name + self.ensure_valid_file() + self.style = self.style.lower() + self.gen_html_string() + strati = self.html_string.find("background:") + self.background_color = self.html_string[strati + 12:strati + 19] + self.gen_code_json() + + self.code = self.gen_colored_lines() + if self.insert_line_no: + self.line_numbers = self.gen_line_numbers() + self.line_numbers.next_to(self.code, direction=LEFT, buff=self.line_no_buff) + + if self.background == "rectangle": + if self.insert_line_no: + forground = VGroup(self.code, self.line_numbers) + else: + forground = self.code + self.background_mobject = SurroundingRectangle(forground, buff=self.margin, + color=self.background_color, + fill_color=self.background_color, + stroke_width=0, + fill_opacity=1, ) + self.background_mobject.round_corners(self.corner_radius) + else: + if self.insert_line_no: + forground = VGroup(self.code, self.line_numbers) + else: + forground = self.code + + height = forground.get_height() + 0.1 * 3 + 2 * self.margin + width = forground.get_width() + 0.1 * 3 + 2 * self.margin + + rrect = RoundedRectangle(corner_radius=self.corner_radius, height=height, width=width, + stroke_width=0, + color=self.background_color, fill_opacity=1) + red_button = Dot(radius=0.1, stroke_width=0, color='#ff5f56') + red_button.shift(LEFT * 0.1 * 3) + yellow_button = Dot(radius=0.1, stroke_width=0, color='#ffbd2e') + green_button = Dot(radius=0.1, stroke_width=0, color='#27c93f') + green_button.shift(RIGHT * 0.1 * 3) + buttons = VGroup(red_button, yellow_button, green_button) + buttons.shift( + UP * (height / 2 - 0.1 * 2 - 0.05) + LEFT * (width / 2 - 0.1 * 5 - self.corner_radius / 2 - 0.05)) + + self.background_mobject = VGroup(rrect, buttons) + x = (height - forground.get_height()) / 2 - 0.1 * 3 + self.background_mobject.shift(forground.get_center()) + self.background_mobject.shift(UP * x) + + if self.insert_line_no: + VGroup.__init__(self, self.background_mobject, self.line_numbers, *self.code, **kwargs) + else: + VGroup.__init__(self, self.background_mobject, Dot(fill_opacity=0, stroke_opacity=0), *self.code, **kwargs) + + self.move_to(np.array([0, 0, 0])) + + def apply_points_function_about_point(self, func, about_point=None, about_edge=None): + if about_point is None: + if about_edge is None: + about_edge = self.get_corner(UP + LEFT) + about_point = self.get_critical_point(about_edge) + for mob in self.family_members_with_points(): + mob.points -= about_point + mob.points = func(mob.points) + mob.points += about_point + return self + + def ensure_valid_file(self): + if self.file_name is None: + raise Exception("Must specify file for Code") + possible_paths = [ + os.path.join(os.path.join("assets", "codes"), self.file_name), + self.file_name, + ] + for path in possible_paths: + if os.path.exists(path): + self.file_path = path + return + raise IOError("No file matching %s in codes directory" % + self.file_name) + + def gen_line_numbers(self): + line_numbers_array = [] + for line_no in range(0, self.code_json.__len__()): + number = str(self.line_no_from + line_no) + line_numbers_array.append(number) + line_numbers = Paragraph(*[i for i in line_numbers_array], line_spacing=self.line_spacing, + alignment="right", font=self.font, stroke_width=self.stroke_width).scale(self.scale_factor) + return line_numbers + + def gen_colored_lines(self): + lines_text = [] + for line_no in range(0, self.code_json.__len__()): + line_str = "" + for word_index in range(self.code_json[line_no].__len__()): + line_str = line_str + self.code_json[line_no][word_index][0] + lines_text.append(self.tab_spaces[line_no] * "\t" + line_str) + code = Paragraph(*[i for i in lines_text], line_spacing=self.line_spacing, tab_width=self.tab_width, + alignment="left", font=self.font, stroke_width=self.stroke_width).scale(self.scale_factor) + for line_no in range(code.__len__()): + line = code[line_no] + line_char_index = self.tab_spaces[line_no] + for word_index in range(self.code_json[line_no].__len__()): + line[line_char_index:line_char_index + self.code_json[line_no][word_index][0].__len__()].set_color( + self.code_json[line_no][word_index][1]) + line_char_index += self.code_json[line_no][word_index][0].__len__() + return code + + def gen_html_string(self): + file = open(self.file_path, "r") + code_str = file.read() + file.close() + self.html_string = hilite_me(code_str, self.language, {}, self.style, self.insert_line_no, + "border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;") + if self.generate_html_file: + os.makedirs(os.path.join("assets", "codes", "generated_html_files"), exist_ok=True) + file = open(os.path.join("assets", "codes", "generated_html_files", self.file_name + ".html"), "w") + file.write(self.html_string) + file.close() + + def gen_code_json(self): + if self.background_color == "#111111" or \ + self.background_color == "#272822" or \ + self.background_color == "#202020" or \ + self.background_color == "#000000": + self.default_color = "#ffffff" + else: + self.default_color = "#000000" + for i in range(3, -1, -1): + self.html_string = self.html_string.replace("" + " " * i, " " * i + "") + self.html_string = self.html_string.replace("background-color:", "background:") + + if self.insert_line_no: + start_point = self.html_string.find("") + lines[0] = lines[0][start_point + 1:] + # print(lines) + self.code_json = [] + self.tab_spaces = [] + code_json_line_index = -1 + for line_index in range(0, lines.__len__()): + if lines[line_index].__len__() == 0: + continue + # print(lines[line_index]) + self.code_json.append([]) + code_json_line_index = code_json_line_index + 1 + if lines[line_index].startswith(self.indentation_char): + start_point = lines[line_index].find("<") + starting_string = lines[line_index][:start_point] + indentation_char_count = lines[line_index][:start_point].count(self.indentation_char) + if starting_string.__len__() != indentation_char_count * self.indentation_char.__len__(): + lines[line_index] = "\t" * indentation_char_count + starting_string[starting_string.rfind( + self.indentation_char) + self.indentation_char.__len__():] + \ + lines[line_index][start_point:] + else: + lines[line_index] = "\t" * indentation_char_count + lines[line_index][start_point:] + + indentation_char_count = 0 + while lines[line_index][indentation_char_count] == '\t': + indentation_char_count = indentation_char_count + 1 + self.tab_spaces.append(indentation_char_count) + # print(lines[line_index]) + lines[line_index] = self.correct_non_span(lines[line_index]) + # print(lines[line_index]) + words = lines[line_index].split("") + end_point = words[word_index].find("") + text = words[word_index][start_point + 1:end_point] + text = html.unescape(text) + if text != "": + # print(text, "'" + color + "'") + self.code_json[code_json_line_index].append([text, color]) + # print(self.code_json) + + def correct_non_span(self, line_str): + words = line_str.split("") + line_str = "" + for i in range(0, words.__len__()): + if i != words.__len__() - 1: + j = words[i].find("' + words[i][starti:j] + "" + else: + temp = '' + words[i][starti:j] + temp = temp + words[i][j:] + words[i] = temp + if words[i] != "": + line_str = line_str + words[i] + "" + return line_str + + +def hilite_me(code, lexer, options, style, linenos, divstyles): + lexer = lexer or 'python' + style = style or 'colorful' + defstyles = 'overflow:auto;width:auto;' + + formatter = HtmlFormatter(style=style, + linenos=False, + noclasses=True, + cssclass='', + cssstyles=defstyles + divstyles, + prestyles='margin: 0') + html = highlight(code, get_lexer_by_name(lexer, **options), formatter) + if linenos: + html = insert_line_numbers(html) + html = "" + html + return html + + +def get_default_style(): + return 'border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;' + + +def insert_line_numbers(html): + match = re.search('(]*>)(.*)()', html, re.DOTALL) + if not match: return html + + pre_open = match.group(1) + pre = match.group(2) + pre_close = match.group(3) + + html = html.replace(pre_close, '
') + numbers = range(1, pre.count('\n') + 1) + format = '%' + str(len(str(numbers[-1]))) + 'i' + lines = '\n'.join(format % i for i in numbers) + html = html.replace(pre_open, '
' + pre_open + lines + '' + pre_open) + return html \ No newline at end of file diff --git a/manimlib/mobject/svg/drawings.py b/manimlib/mobject/svg/drawings.py index 866250853a..71f0b1b633 100644 --- a/manimlib/mobject/svg/drawings.py +++ b/manimlib/mobject/svg/drawings.py @@ -1,30 +1,30 @@ import itertools as it import string -from manimlib.animation.animation import Animation -from manimlib.animation.rotation import Rotating -from manimlib.constants import * -from manimlib.mobject.geometry import AnnularSector -from manimlib.mobject.geometry import Arc -from manimlib.mobject.geometry import Circle -from manimlib.mobject.geometry import Line -from manimlib.mobject.geometry import Polygon -from manimlib.mobject.geometry import Rectangle -from manimlib.mobject.geometry import Square -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.svg.svg_mobject import SVGMobject -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.three_dimensions import Cube -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.mobject.types.vectorized_mobject import VectorizedPoint -from manimlib.utils.bezier import interpolate -from manimlib.utils.config_ops import digest_config -from manimlib.utils.rate_functions import linear -from manimlib.utils.space_ops import angle_of_vector -from manimlib.utils.space_ops import complex_to_R3 -from manimlib.utils.space_ops import rotate_vector +from ...animation.animation import Animation +from ...animation.rotation import Rotating +from ...constants import * +from ...mobject.geometry import AnnularSector +from ...mobject.geometry import Arc +from ...mobject.geometry import Circle +from ...mobject.geometry import Line +from ...mobject.geometry import Polygon +from ...mobject.geometry import Rectangle +from ...mobject.geometry import Square +from ...mobject.mobject import Mobject +from ...mobject.svg.svg_mobject import SVGMobject +from ...mobject.svg.tex_mobject import TexMobject +from ...mobject.svg.tex_mobject import TextMobject +from ...mobject.three_dimensions import Cube +from ...mobject.types.vectorized_mobject import VGroup +from ...mobject.types.vectorized_mobject import VMobject +from ...mobject.types.vectorized_mobject import VectorizedPoint +from ...utils.bezier import interpolate +from ...utils.config_ops import digest_config +from ...utils.rate_functions import linear +from ...utils.space_ops import angle_of_vector +from ...utils.space_ops import complex_to_R3 +from ...utils.space_ops import rotate_vector class Lightbulb(SVGMobject): @@ -560,16 +560,6 @@ def __init__(self, **kwargs): self.set_stroke(color=WHITE, width=0) self.set_fill(self.color, opacity=1) - from manimlib.for_3b1b_videos.pi_creature import Randolph - randy = Randolph(mode="happy") - randy.set_height(0.6 * self.get_height()) - randy.stretch(0.8, 0) - randy.look(RIGHT) - randy.move_to(self) - randy.shift(0.07 * self.height * (RIGHT + UP)) - self.randy = self.pi_creature = randy - self.add_to_back(randy) - orientation_line = Line(self.get_left(), self.get_right()) orientation_line.set_stroke(width=0) self.add(orientation_line) diff --git a/manimlib/mobject/svg/svg_mobject.py b/manimlib/mobject/svg/svg_mobject.py index a183588f5d..9d569d4098 100644 --- a/manimlib/mobject/svg/svg_mobject.py +++ b/manimlib/mobject/svg/svg_mobject.py @@ -5,15 +5,15 @@ from xml.dom import minidom -from manimlib.constants import * -from manimlib.mobject.geometry import Circle -from manimlib.mobject.geometry import Rectangle -from manimlib.mobject.geometry import RoundedRectangle -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.color import * -from manimlib.utils.config_ops import digest_config -from manimlib.utils.config_ops import digest_locals +from ...constants import * +from ...mobject.geometry import Circle +from ...mobject.geometry import Rectangle +from ...mobject.geometry import RoundedRectangle +from ...mobject.types.vectorized_mobject import VGroup +from ...mobject.types.vectorized_mobject import VMobject +from ...utils.color import * +from ...utils.config_ops import digest_config +from ...utils.config_ops import digest_locals def string_to_numbers(num_string): @@ -428,4 +428,4 @@ def string_to_points(self, coord_string): return result def get_original_path_string(self): - return self.path_string + return self.path_string \ No newline at end of file diff --git a/manimlib/mobject/svg/tex_mobject.py b/manimlib/mobject/svg/tex_mobject.py index 60b299e6d1..4c5d645150 100644 --- a/manimlib/mobject/svg/tex_mobject.py +++ b/manimlib/mobject/svg/tex_mobject.py @@ -1,15 +1,15 @@ from functools import reduce import operator as op -from manimlib.constants import * -from manimlib.mobject.geometry import Line -from manimlib.mobject.svg.svg_mobject import SVGMobject -from manimlib.mobject.svg.svg_mobject import VMobjectFromSVGPathstring -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VectorizedPoint -from manimlib.utils.config_ops import digest_config -from manimlib.utils.strings import split_string_list_to_isolate_substrings -from manimlib.utils.tex_file_writing import tex_to_svg_file +from ...constants import * +from ...mobject.geometry import Line +from ...mobject.svg.svg_mobject import SVGMobject +from ...mobject.svg.svg_mobject import VMobjectFromSVGPathstring +from ...mobject.types.vectorized_mobject import VGroup +from ...mobject.types.vectorized_mobject import VectorizedPoint +from ...utils.config_ops import digest_config +from ...utils.strings import split_string_list_to_isolate_substrings +from ...utils.tex_file_writing import tex_to_svg_file TEX_MOB_SCALE_FACTOR = 0.05 @@ -325,4 +325,4 @@ def __init__(self, *text_parts, **kwargs): else: underline.set_width(self.underline_width) self.add(underline) - self.underline = underline + self.underline = underline \ No newline at end of file diff --git a/manimlib/mobject/svg/text_mobject.py b/manimlib/mobject/svg/text_mobject.py index 6c76672211..7319b61b6d 100644 --- a/manimlib/mobject/svg/text_mobject.py +++ b/manimlib/mobject/svg/text_mobject.py @@ -3,13 +3,12 @@ import copy import hashlib import cairo -import manimlib.constants as consts -from manimlib.constants import * -from manimlib.container.container import Container -from manimlib.mobject.geometry import Dot, Rectangle -from manimlib.mobject.svg.svg_mobject import SVGMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.utils.config_ops import digest_config +from ...constants import * +from ...container.container import Container +from ...mobject.geometry import Rectangle +from ...mobject.svg.svg_mobject import SVGMobject +from ...mobject.types.vectorized_mobject import VGroup +from ...utils.config_ops import digest_config TEXT_MOB_SCALE_FACTOR = 0.05 @@ -28,7 +27,7 @@ def __init__(self, start, end, font, slant, weight, line_num=-1): class Text(SVGMobject): CONFIG = { # Mobject - 'color': consts.WHITE, + 'color': WHITE, 'height': None, 'width': None, 'fill_opacity': 1, @@ -94,7 +93,7 @@ def __init__(self, text, **config): def get_space_width(self): size = self.size * 10 - dir_name = consts.TEXT_DIR + dir_name = TEXT_DIR file_name = os.path.join(dir_name, "space") + '.svg' surface = cairo.SVGSurface(file_name, 600, 400) @@ -290,7 +289,7 @@ def text2svg(self): if NOT_SETTING_FONT_MSG != '': print(NOT_SETTING_FONT_MSG) - dir_name = consts.TEXT_DIR + dir_name = TEXT_DIR hash_name = self.text2hash() file_name = os.path.join(dir_name, hash_name)+'.svg' if os.path.exists(file_name): diff --git a/manimlib/mobject/three_d_shading_utils.py b/manimlib/mobject/three_d_shading_utils.py index a0fe43c385..8ed287735b 100644 --- a/manimlib/mobject/three_d_shading_utils.py +++ b/manimlib/mobject/three_d_shading_utils.py @@ -1,7 +1,7 @@ import numpy as np -from manimlib.constants import ORIGIN -from manimlib.utils.space_ops import get_unit_normal +from ..constants import ORIGIN +from ..utils.space_ops import get_unit_normal def get_3d_vmob_gradient_start_and_end_points(vmob): @@ -53,4 +53,4 @@ def get_3d_vmob_start_corner_unit_normal(vmob): def get_3d_vmob_end_corner_unit_normal(vmob): return get_3d_vmob_unit_normal( vmob, get_3d_vmob_end_corner_index(vmob) - ) + ) \ No newline at end of file diff --git a/manimlib/mobject/three_d_utils.py b/manimlib/mobject/three_d_utils.py index 3138aaa1bf..60c6a72314 100644 --- a/manimlib/mobject/three_d_utils.py +++ b/manimlib/mobject/three_d_utils.py @@ -1,9 +1,9 @@ import numpy as np -from manimlib.constants import ORIGIN -from manimlib.constants import UP -from manimlib.utils.space_ops import get_norm -from manimlib.utils.space_ops import get_unit_normal +from ..constants import ORIGIN +from ..constants import UP +from ..utils.space_ops import get_norm +from ..utils.space_ops import get_unit_normal def get_3d_vmob_gradient_start_and_end_points(vmob): @@ -58,4 +58,4 @@ def get_3d_vmob_start_corner_unit_normal(vmob): def get_3d_vmob_end_corner_unit_normal(vmob): return get_3d_vmob_unit_normal( vmob, get_3d_vmob_end_corner_index(vmob) - ) + ) \ No newline at end of file diff --git a/manimlib/mobject/three_dimensions.py b/manimlib/mobject/three_dimensions.py index 7b49ec39fa..eba3d08b49 100644 --- a/manimlib/mobject/three_dimensions.py +++ b/manimlib/mobject/three_dimensions.py @@ -1,9 +1,9 @@ -from manimlib.constants import * -from manimlib.mobject.geometry import Square -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.iterables import tuplify -from manimlib.utils.space_ops import z_to_vector +from ..constants import * +from ..mobject.geometry import Square +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.iterables import tuplify +from ..utils.space_ops import z_to_vector ############## @@ -153,4 +153,4 @@ class Prism(Cube): def generate_points(self): Cube.generate_points(self) for dim, value in enumerate(self.dimensions): - self.rescale_to_fit(value, dim, stretch=True) + self.rescale_to_fit(value, dim, stretch=True) \ No newline at end of file diff --git a/manimlib/mobject/types/image_mobject.py b/manimlib/mobject/types/image_mobject.py index be9cab68b7..9a25b2f15f 100644 --- a/manimlib/mobject/types/image_mobject.py +++ b/manimlib/mobject/types/image_mobject.py @@ -2,13 +2,13 @@ from PIL import Image -from manimlib.constants import * -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.shape_matchers import SurroundingRectangle -from manimlib.utils.bezier import interpolate -from manimlib.utils.color import color_to_int_rgb -from manimlib.utils.config_ops import digest_config -from manimlib.utils.images import get_full_raster_image_path +from ...constants import * +from ...mobject.mobject import Mobject +from ...mobject.shape_matchers import SurroundingRectangle +from ...utils.bezier import interpolate +from ...utils.color import color_to_int_rgb +from ...utils.config_ops import digest_config +from ...utils.images import get_full_raster_image_path class AbstractImageMobject(Mobject): @@ -130,4 +130,4 @@ def add_display_frame(self, **kwargs): config.update(kwargs) self.display_frame = SurroundingRectangle(self, **config) self.add(self.display_frame) - return self + return self \ No newline at end of file diff --git a/manimlib/mobject/types/point_cloud_mobject.py b/manimlib/mobject/types/point_cloud_mobject.py index f8276382a7..da8860cc12 100644 --- a/manimlib/mobject/types/point_cloud_mobject.py +++ b/manimlib/mobject/types/point_cloud_mobject.py @@ -1,12 +1,12 @@ -from manimlib.constants import * -from manimlib.mobject.mobject import Mobject -from manimlib.utils.bezier import interpolate -from manimlib.utils.color import color_gradient -from manimlib.utils.color import color_to_rgba -from manimlib.utils.color import rgba_to_color -from manimlib.utils.config_ops import digest_config -from manimlib.utils.iterables import stretch_array_to_length -from manimlib.utils.space_ops import get_norm +from ...constants import * +from ...mobject.mobject import Mobject +from ...utils.bezier import interpolate +from ...utils.color import color_gradient +from ...utils.color import color_to_rgba +from ...utils.color import rgba_to_color +from ...utils.config_ops import digest_config +from ...utils.iterables import stretch_array_to_length +from ...utils.space_ops import get_norm class PMobject(Mobject): @@ -256,4 +256,4 @@ class Point(PMobject): def __init__(self, location=ORIGIN, **kwargs): PMobject.__init__(self, **kwargs) - self.add_points([location]) + self.add_points([location]) \ No newline at end of file diff --git a/manimlib/mobject/types/vectorized_mobject.py b/manimlib/mobject/types/vectorized_mobject.py index 25ba527dad..e354d9ce38 100644 --- a/manimlib/mobject/types/vectorized_mobject.py +++ b/manimlib/mobject/types/vectorized_mobject.py @@ -3,21 +3,21 @@ from colour import Color -from manimlib.constants import * -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.three_d_utils import get_3d_vmob_gradient_start_and_end_points -from manimlib.utils.bezier import bezier -from manimlib.utils.bezier import get_smooth_handle_points -from manimlib.utils.bezier import interpolate -from manimlib.utils.bezier import integer_interpolate -from manimlib.utils.bezier import partial_bezier_points -from manimlib.utils.color import color_to_rgba -from manimlib.utils.iterables import make_even -from manimlib.utils.iterables import stretch_array_to_length -from manimlib.utils.iterables import tuplify -from manimlib.utils.simple_functions import clip_in_place -from manimlib.utils.space_ops import rotate_vector -from manimlib.utils.space_ops import get_norm +from ...constants import * +from ...mobject.mobject import Mobject +from ...mobject.three_d_utils import get_3d_vmob_gradient_start_and_end_points +from ...utils.bezier import bezier +from ...utils.bezier import get_smooth_handle_points +from ...utils.bezier import interpolate +from ...utils.bezier import integer_interpolate +from ...utils.bezier import partial_bezier_points +from ...utils.color import color_to_rgba +from ...utils.iterables import make_even +from ...utils.iterables import stretch_array_to_length +from ...utils.iterables import tuplify +from ...utils.simple_functions import clip_in_place +from ...utils.space_ops import rotate_vector +from ...utils.space_ops import get_norm # TODO # - Change cubic curve groups to have 4 points instead of 3 @@ -973,4 +973,4 @@ def __init__(self, vmobject, **kwargs): ]) # Family is already taken care of by get_subcurve # implementation - self.match_style(vmobject, family=False) + self.match_style(vmobject, family=False) \ No newline at end of file diff --git a/manimlib/mobject/value_tracker.py b/manimlib/mobject/value_tracker.py index 79cdedce5a..5872d7105e 100644 --- a/manimlib/mobject/value_tracker.py +++ b/manimlib/mobject/value_tracker.py @@ -1,6 +1,6 @@ import numpy as np -from manimlib.mobject.mobject import Mobject +from ..mobject.mobject import Mobject class ValueTracker(Mobject): @@ -48,4 +48,4 @@ def get_value(self): def set_value(self, z): z = complex(z) self.points[0, :2] = (z.real, z.imag) - return self + return self \ No newline at end of file diff --git a/manimlib/mobject/vector_field.py b/manimlib/mobject/vector_field.py index bfc90c2cc3..50a5bd82ec 100644 --- a/manimlib/mobject/vector_field.py +++ b/manimlib/mobject/vector_field.py @@ -4,22 +4,22 @@ from PIL import Image import random -from manimlib.constants import * - -from manimlib.animation.composition import AnimationGroup -from manimlib.animation.indication import ShowPassingFlash -from manimlib.mobject.geometry import Vector -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.bezier import inverse_interpolate -from manimlib.utils.bezier import interpolate -from manimlib.utils.color import color_to_rgb -from manimlib.utils.color import rgb_to_color -from manimlib.utils.config_ops import digest_config -from manimlib.utils.rate_functions import linear -from manimlib.utils.simple_functions import sigmoid -from manimlib.utils.space_ops import get_norm -# from manimlib.utils.space_ops import normalize +from ..constants import * + +from ..animation.composition import AnimationGroup +from ..animation.indication import ShowPassingFlash +from ..mobject.geometry import Vector +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.bezier import inverse_interpolate +from ..utils.bezier import interpolate +from ..utils.color import color_to_rgb +from ..utils.color import rgb_to_color +from ..utils.config_ops import digest_config +from ..utils.rate_functions import linear +from ..utils.simple_functions import sigmoid +from ..utils.space_ops import get_norm +# from ..utils.space_ops import normalize DEFAULT_SCALAR_FIELD_COLORS = [BLUE_E, GREEN, YELLOW, RED] diff --git a/manimlib/once_useful_constructs/arithmetic.py b/manimlib/once_useful_constructs/arithmetic.py index ea6debd82b..e39c5b2e28 100644 --- a/manimlib/once_useful_constructs/arithmetic.py +++ b/manimlib/once_useful_constructs/arithmetic.py @@ -1,9 +1,9 @@ import numpy as np -from manimlib.animation.animation import Animation -from manimlib.constants import * -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.scene.scene import Scene +from ..animation.animation import Animation +from ..constants import * +from ..mobject.svg.tex_mobject import TexMobject +from ..scene.scene import Scene class RearrangeEquation(Scene): @@ -98,4 +98,4 @@ def interpolate_mobject(self, alpha): if not all(self.start_center == self.end_center): self.mobject.center().shift( (1 - alpha) * self.start_center + alpha * self.end_center - ) + ) \ No newline at end of file diff --git a/manimlib/once_useful_constructs/combinatorics.py b/manimlib/once_useful_constructs/combinatorics.py index e4fdab29be..9ab2356ca1 100644 --- a/manimlib/once_useful_constructs/combinatorics.py +++ b/manimlib/once_useful_constructs/combinatorics.py @@ -1,9 +1,9 @@ -from manimlib.constants import * -from manimlib.mobject.numbers import Integer -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.types.vectorized_mobject import VMobject, VGroup -from manimlib.scene.scene import Scene -from manimlib.utils.simple_functions import choose +from ..constants import * +from ..mobject.numbers import Integer +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.types.vectorized_mobject import VMobject, VGroup +from ..scene.scene import Scene +from ..utils.simple_functions import choose DEFAULT_COUNT_NUM_OFFSET = (FRAME_X_RADIUS - 1, FRAME_Y_RADIUS - 1, 0) diff --git a/manimlib/once_useful_constructs/complex_transformation_scene.py b/manimlib/once_useful_constructs/complex_transformation_scene.py index b21747ddcc..8906c01c4e 100644 --- a/manimlib/once_useful_constructs/complex_transformation_scene.py +++ b/manimlib/once_useful_constructs/complex_transformation_scene.py @@ -1,10 +1,10 @@ -from manimlib.animation.animation import Animation -from manimlib.animation.movement import ComplexHomotopy -from manimlib.animation.transform import MoveToTarget -from manimlib.constants import * -from manimlib.mobject.coordinate_systems import ComplexPlane -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.scene.scene import Scene +from ..animation.animation import Animation +from ..animation.movement import ComplexHomotopy +from ..animation.transform import MoveToTarget +from ..constants import * +from ..mobject.coordinate_systems import ComplexPlane +from ..mobject.types.vectorized_mobject import VGroup +from ..scene.scene import Scene # TODO, refactor this full scene @@ -153,4 +153,4 @@ def apply_complex_homotopy(self, complex_homotopy, added_anims=[], **kwargs): self.play( ComplexHomotopy(complex_homotopy, transformer, **transform_kwargs), *added_anims - ) + ) \ No newline at end of file diff --git a/manimlib/once_useful_constructs/counting.py b/manimlib/once_useful_constructs/counting.py index 1a46410b2e..97615c7c2c 100644 --- a/manimlib/once_useful_constructs/counting.py +++ b/manimlib/once_useful_constructs/counting.py @@ -1,14 +1,14 @@ -from manimlib.animation.creation import ShowCreation -from manimlib.animation.fading import FadeIn -from manimlib.animation.transform import MoveToTarget -from manimlib.animation.transform import Transform -from manimlib.constants import * -from manimlib.mobject.geometry import Arrow -from manimlib.mobject.geometry import Circle -from manimlib.mobject.geometry import Dot -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.scene.scene import Scene +from ..animation.creation import ShowCreation +from ..animation.fading import FadeIn +from ..animation.transform import MoveToTarget +from ..animation.transform import Transform +from ..constants import * +from ..mobject.geometry import Arrow +from ..mobject.geometry import Circle +from ..mobject.geometry import Dot +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..scene.scene import Scene class CountingScene(Scene): @@ -259,4 +259,4 @@ def factorial(self, n): if (n == 1): return 1 else: - return n * self.factorial(n - 1) + return n * self.factorial(n - 1) \ No newline at end of file diff --git a/manimlib/once_useful_constructs/fractals.py b/manimlib/once_useful_constructs/fractals.py index 3983d3a004..8020ba77ad 100644 --- a/manimlib/once_useful_constructs/fractals.py +++ b/manimlib/once_useful_constructs/fractals.py @@ -1,21 +1,21 @@ from functools import reduce -from manimlib.constants import * -from manimlib.for_3b1b_videos.pi_creature import PiCreature -from manimlib.for_3b1b_videos.pi_creature import Randolph -from manimlib.for_3b1b_videos.pi_creature import get_all_pi_creature_modes -from manimlib.mobject.geometry import Circle -from manimlib.mobject.geometry import Polygon -from manimlib.mobject.geometry import RegularPolygon -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.utils.bezier import interpolate -from manimlib.utils.color import color_gradient -from manimlib.utils.config_ops import digest_config -from manimlib.utils.space_ops import center_of_mass -from manimlib.utils.space_ops import compass_directions -from manimlib.utils.space_ops import rotate_vector -from manimlib.utils.space_ops import rotation_matrix +from ..constants import * +from ..for_3b1b_videos.pi_creature import PiCreature +from ..for_3b1b_videos.pi_creature import Randolph +from ..for_3b1b_videos.pi_creature import get_all_pi_creature_modes +from ..mobject.geometry import Circle +from ..mobject.geometry import Polygon +from ..mobject.geometry import RegularPolygon +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject +from ..utils.bezier import interpolate +from ..utils.color import color_gradient +from ..utils.config_ops import digest_config +from ..utils.space_ops import center_of_mass +from ..utils.space_ops import compass_directions +from ..utils.space_ops import rotate_vector +from ..utils.space_ops import rotation_matrix def rotate(points, angle=np.pi, axis=OUT): @@ -673,4 +673,4 @@ def get_anchor_points(self): result.append( lower_left + x * step * RIGHT + y * step * UP ) - return result + return result \ No newline at end of file diff --git a/manimlib/once_useful_constructs/graph_theory.py b/manimlib/once_useful_constructs/graph_theory.py index 890a13abab..cbe5c35d07 100644 --- a/manimlib/once_useful_constructs/graph_theory.py +++ b/manimlib/once_useful_constructs/graph_theory.py @@ -4,10 +4,10 @@ import numpy as np -from manimlib.constants import * -from manimlib.scene.scene import Scene -from manimlib.utils.rate_functions import there_and_back -from manimlib.utils.space_ops import center_of_mass +from ..constants import * +from ..scene.scene import Scene +from ..utils.rate_functions import there_and_back +from ..utils.space_ops import center_of_mass class Graph(): @@ -411,4 +411,4 @@ def generate_dual_graph(self): dual_point_pair[i] = new_point self.dual_edges.append( Line(*dual_point_pair).set_color() - ) + ) \ No newline at end of file diff --git a/manimlib/once_useful_constructs/light.py b/manimlib/once_useful_constructs/light.py index 6bf519191e..2ac224d328 100644 --- a/manimlib/once_useful_constructs/light.py +++ b/manimlib/once_useful_constructs/light.py @@ -2,20 +2,20 @@ from scipy.spatial import ConvexHull -from manimlib.animation.composition import LaggedStartMap -from manimlib.animation.fading import FadeIn -from manimlib.animation.fading import FadeOut -from manimlib.animation.transform import Transform -from manimlib.constants import * -from manimlib.mobject.geometry import AnnularSector -from manimlib.mobject.geometry import Annulus -from manimlib.mobject.svg.svg_mobject import SVGMobject -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.mobject.types.vectorized_mobject import VectorizedPoint -from manimlib.utils.space_ops import angle_between_vectors -from manimlib.utils.space_ops import project_along_vector -from manimlib.utils.space_ops import rotate_vector -from manimlib.utils.space_ops import z_to_vector +from ..animation.composition import LaggedStartMap +from ..animation.fading import FadeIn +from ..animation.fading import FadeOut +from ..animation.transform import Transform +from ..constants import * +from ..mobject.geometry import AnnularSector +from ..mobject.geometry import Annulus +from ..mobject.svg.svg_mobject import SVGMobject +from ..mobject.types.vectorized_mobject import VMobject +from ..mobject.types.vectorized_mobject import VectorizedPoint +from ..utils.space_ops import angle_between_vectors +from ..utils.space_ops import project_along_vector +from ..utils.space_ops import rotate_vector +from ..utils.space_ops import z_to_vector LIGHT_COLOR = YELLOW SHADOW_COLOR = BLACK @@ -597,4 +597,4 @@ def update_shadow(self): # as a function def ScreenTracker(light_source): light_source.add_updater(lambda m: m.update()) - return light_source + return light_source \ No newline at end of file diff --git a/manimlib/once_useful_constructs/matrix_multiplication.py b/manimlib/once_useful_constructs/matrix_multiplication.py index 49f914a865..7e55fa6b81 100644 --- a/manimlib/once_useful_constructs/matrix_multiplication.py +++ b/manimlib/once_useful_constructs/matrix_multiplication.py @@ -1,16 +1,16 @@ import numpy as np -from manimlib.animation.creation import ShowCreation -from manimlib.animation.fading import FadeOut -from manimlib.animation.transform import ApplyMethod -from manimlib.animation.transform import Transform -from manimlib.constants import * -from manimlib.mobject.geometry import Circle -from manimlib.mobject.geometry import Line -from manimlib.mobject.matrix import Matrix -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.scene.scene import Scene +from ..animation.creation import ShowCreation +from ..animation.fading import FadeOut +from ..animation.transform import ApplyMethod +from ..animation.transform import Transform +from ..constants import * +from ..mobject.geometry import Circle +from ..mobject.geometry import Line +from ..mobject.matrix import Matrix +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..scene.scene import Scene class NumericalMatrixMultiplication(Scene): @@ -138,4 +138,4 @@ def animate_product(self, left, right, result): l_matrix[a][c].set_color(WHITE) r_matrix[c][b].set_color(WHITE) self.play(FadeOut(circles), *lagging_anims) - self.wait() + self.wait() \ No newline at end of file diff --git a/manimlib/once_useful_constructs/region.py b/manimlib/once_useful_constructs/region.py index ab76ac10dd..0c7e195ca7 100644 --- a/manimlib/once_useful_constructs/region.py +++ b/manimlib/once_useful_constructs/region.py @@ -1,9 +1,9 @@ from copy import deepcopy import itertools as it -from manimlib.constants import * -from manimlib.mobject.mobject import Mobject -from manimlib.utils.iterables import adjacent_pairs +from ..constants import * +from ..mobject.mobject import Mobject +from ..utils.iterables import adjacent_pairs # Warning: This is all now pretty depricated, and should not be expected to work @@ -104,4 +104,4 @@ def plane_partition_from_points(*points, **kwargs): Each point comes in the form (x, y) """ lines = [[p1, p2] for (p1, p2) in it.combinations(points, 2)] - return plane_partition(*lines, **kwargs) + return plane_partition(*lines, **kwargs) \ No newline at end of file diff --git a/manimlib/scene/graph_scene.py b/manimlib/scene/graph_scene.py index 03550e3902..74f3bca6b0 100644 --- a/manimlib/scene/graph_scene.py +++ b/manimlib/scene/graph_scene.py @@ -1,23 +1,23 @@ import itertools as it -from manimlib.animation.creation import Write, DrawBorderThenFill, ShowCreation -from manimlib.animation.transform import Transform -from manimlib.animation.update import UpdateFromAlphaFunc -from manimlib.constants import * -from manimlib.mobject.functions import ParametricFunction -from manimlib.mobject.geometry import Line -from manimlib.mobject.geometry import Rectangle -from manimlib.mobject.geometry import RegularPolygon -from manimlib.mobject.number_line import NumberLine -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VectorizedPoint -from manimlib.scene.scene import Scene -from manimlib.utils.bezier import interpolate -from manimlib.utils.color import color_gradient -from manimlib.utils.color import invert_color -from manimlib.utils.space_ops import angle_of_vector +from ..animation.creation import ShowCreation +from ..animation.transform import Transform +from ..animation.update import UpdateFromAlphaFunc +from ..constants import * +from ..mobject.functions import ParametricFunction +from ..mobject.geometry import Line +from ..mobject.geometry import Rectangle +from ..mobject.geometry import RegularPolygon +from ..mobject.number_line import NumberLine +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.svg.tex_mobject import TextMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VectorizedPoint +from ..scene.scene import Scene +from ..utils.bezier import interpolate +from ..utils.color import color_gradient +from ..utils.color import invert_color +from ..utils.space_ops import angle_of_vector # TODO, this should probably reimplemented entirely, especially so as to # better reuse code from mobject/coordinate_systems. @@ -1051,4 +1051,4 @@ def update_func(group, alpha): *added_anims ) secant_slope_group.kwargs["x"] = target_x - secant_slope_group.kwargs["dx"] = target_dx + secant_slope_group.kwargs["dx"] = target_dx \ No newline at end of file diff --git a/manimlib/scene/moving_camera_scene.py b/manimlib/scene/moving_camera_scene.py index 3d419e198f..45eebb58e6 100644 --- a/manimlib/scene/moving_camera_scene.py +++ b/manimlib/scene/moving_camera_scene.py @@ -1,6 +1,6 @@ -from manimlib.camera.moving_camera import MovingCamera -from manimlib.scene.scene import Scene -from manimlib.utils.iterables import list_update +from ..camera.moving_camera import MovingCamera +from ..scene.scene import Scene +from ..utils.iterables import list_update class MovingCameraScene(Scene): @@ -44,4 +44,4 @@ def get_moving_mobjects(self, *animations): # When one of these is moving, the camera should # consider all mobjects to be moving return list_update(self.mobjects, moving_mobjects) - return moving_mobjects + return moving_mobjects \ No newline at end of file diff --git a/manimlib/scene/reconfigurable_scene.py b/manimlib/scene/reconfigurable_scene.py index 96e68d87c2..6976d06573 100644 --- a/manimlib/scene/reconfigurable_scene.py +++ b/manimlib/scene/reconfigurable_scene.py @@ -1,7 +1,7 @@ -from manimlib.animation.transform import Transform -from manimlib.constants import * -from manimlib.mobject.mobject import Mobject -from manimlib.scene.scene import Scene +from ..animation.transform import Transform +from ..constants import * +from ..mobject.mobject import Mobject +from ..scene.scene import Scene class ReconfigurableScene(Scene): @@ -63,4 +63,4 @@ def get_state(self): def transition_between_states(self, start_state, target_state, **kwargs): self.play(Transform(start_state, target_state, **kwargs)) - self.wait() + self.wait() \ No newline at end of file diff --git a/manimlib/scene/sample_space_scene.py b/manimlib/scene/sample_space_scene.py index cc1c73f5fe..806a9cd2a9 100644 --- a/manimlib/scene/sample_space_scene.py +++ b/manimlib/scene/sample_space_scene.py @@ -1,11 +1,11 @@ -from manimlib.animation.animation import Animation -from manimlib.animation.transform import MoveToTarget -from manimlib.animation.transform import Transform -from manimlib.animation.update import UpdateFromFunc -from manimlib.constants import * -from manimlib.scene.scene import Scene -from manimlib.mobject.probability import SampleSpace -from manimlib.mobject.types.vectorized_mobject import VGroup +from ..animation.animation import Animation +from ..animation.transform import MoveToTarget +from ..animation.transform import Transform +from ..animation.update import UpdateFromFunc +from ..constants import * +from ..scene.scene import Scene +from ..mobject.probability import SampleSpace +from ..mobject.types.vectorized_mobject import VGroup class SampleSpaceScene(Scene): @@ -140,4 +140,4 @@ def update_rects(rects): anims += list(map(Animation, [ post_rects.labels, post_rects.braces ])) - return anims + return anims \ No newline at end of file diff --git a/manimlib/scene/scene.py b/manimlib/scene/scene.py index dc4f1d1eb8..e591b9afd5 100644 --- a/manimlib/scene/scene.py +++ b/manimlib/scene/scene.py @@ -6,14 +6,14 @@ from tqdm import tqdm as ProgressDisplay import numpy as np -from manimlib.animation.animation import Animation -from manimlib.animation.transform import MoveToTarget, ApplyMethod -from manimlib.camera.camera import Camera -from manimlib.constants import * -from manimlib.container.container import Container -from manimlib.mobject.mobject import Mobject -from manimlib.scene.scene_file_writer import SceneFileWriter -from manimlib.utils.iterables import list_update +from ..animation.animation import Animation +from ..animation.transform import ApplyMethod +from ..camera.camera import Camera +from ..constants import * +from ..container.container import Container +from ..mobject.mobject import Mobject +from ..scene.scene_file_writer import SceneFileWriter +from ..utils.iterables import list_update class Scene(Container): @@ -1168,4 +1168,4 @@ def show_frame(self): class EndSceneEarlyException(Exception): - pass + pass \ No newline at end of file diff --git a/manimlib/scene/scene_file_writer.py b/manimlib/scene/scene_file_writer.py index 298339748c..74aa305879 100644 --- a/manimlib/scene/scene_file_writer.py +++ b/manimlib/scene/scene_file_writer.py @@ -7,16 +7,17 @@ from time import sleep import datetime -import manimlib.constants as consts -from manimlib.constants import FFMPEG_BIN -from manimlib.constants import STREAMING_IP -from manimlib.constants import STREAMING_PORT -from manimlib.constants import STREAMING_PROTOCOL -from manimlib.utils.config_ops import digest_config -from manimlib.utils.file_ops import guarantee_existence -from manimlib.utils.file_ops import add_extension_if_not_present -from manimlib.utils.file_ops import get_sorted_integer_files -from manimlib.utils.sounds import get_full_sound_file_path +from ..constants import FFMPEG_BIN +from ..constants import STREAMING_IP +from ..constants import STREAMING_PORT +from ..constants import STREAMING_PROTOCOL +from ..constants import VIDEO_DIR +from ..constants import VIDEO_OUTPUT_DIR +from ..utils.config_ops import digest_config +from ..utils.file_ops import guarantee_existence +from ..utils.file_ops import add_extension_if_not_present +from ..utils.file_ops import get_sorted_integer_files +from ..utils.sounds import get_full_sound_file_path class SceneFileWriter(object): @@ -67,15 +68,15 @@ def init_output_directories(self): module_directory = self.output_directory or self.get_default_module_directory() scene_name = self.file_name or self.get_default_scene_name() if self.save_last_frame: - if consts.VIDEO_DIR != "": + if VIDEO_DIR != "": image_dir = guarantee_existence(os.path.join( - consts.VIDEO_DIR, + VIDEO_DIR, module_directory, "images", )) else: image_dir = guarantee_existence(os.path.join( - consts.VIDEO_OUTPUT_DIR, + VIDEO_OUTPUT_DIR, "images", )) self.image_file_path = os.path.join( @@ -83,14 +84,14 @@ def init_output_directories(self): add_extension_if_not_present(scene_name, ".png") ) if self.write_to_movie: - if consts.VIDEO_DIR != "": + if VIDEO_DIR != "": movie_dir = guarantee_existence(os.path.join( - consts.VIDEO_DIR, + VIDEO_DIR, module_directory, self.get_resolution_directory(), )) else: - movie_dir = guarantee_existence(consts.VIDEO_OUTPUT_DIR) + movie_dir = guarantee_existence(VIDEO_OUTPUT_DIR) self.movie_file_path = os.path.join( movie_dir, add_extension_if_not_present( diff --git a/manimlib/scene/scene_from_video.py b/manimlib/scene/scene_from_video.py index d7957ae1d8..ba3e6562ec 100644 --- a/manimlib/scene/scene_from_video.py +++ b/manimlib/scene/scene_from_video.py @@ -1,7 +1,7 @@ from tqdm import tqdm as show_progress import cv2 -from manimlib.scene.scene import Scene +from ..scene.scene import Scene # TODO, is this depricated? @@ -50,4 +50,4 @@ def apply_edge_detection(self, threshold1=50, threshold2=100): ] for index in range(len(self.frames)): for i in range(3): - self.frames[index][:, :, i] = edged_frames[index] + self.frames[index][:, :, i] = edged_frames[index] \ No newline at end of file diff --git a/manimlib/scene/three_d_scene.py b/manimlib/scene/three_d_scene.py index 74d67a72a1..ce22cd265b 100644 --- a/manimlib/scene/three_d_scene.py +++ b/manimlib/scene/three_d_scene.py @@ -1,15 +1,15 @@ -from manimlib.animation.transform import ApplyMethod -from manimlib.camera.three_d_camera import ThreeDCamera -from manimlib.constants import DEGREES -from manimlib.constants import PRODUCTION_QUALITY_CAMERA_CONFIG -from manimlib.mobject.coordinate_systems import ThreeDAxes -from manimlib.mobject.geometry import Line -from manimlib.mobject.three_dimensions import Sphere -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VectorizedPoint -from manimlib.scene.scene import Scene -from manimlib.utils.config_ops import digest_config -from manimlib.utils.config_ops import merge_dicts_recursively +from ..animation.transform import ApplyMethod +from ..camera.three_d_camera import ThreeDCamera +from ..constants import DEGREES +from ..constants import PRODUCTION_QUALITY_CAMERA_CONFIG +from ..mobject.coordinate_systems import ThreeDAxes +from ..mobject.geometry import Line +from ..mobject.three_dimensions import Sphere +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VectorizedPoint +from ..scene.scene import Scene +from ..utils.config_ops import digest_config +from ..utils.config_ops import merge_dicts_recursively class ThreeDScene(Scene): @@ -349,4 +349,4 @@ def set_camera_to_default_position(self): """ self.set_camera_orientation( **self.default_angled_camera_position - ) + ) \ No newline at end of file diff --git a/manimlib/scene/vector_space_scene.py b/manimlib/scene/vector_space_scene.py index 825cf758de..ab28dd2c4b 100644 --- a/manimlib/scene/vector_space_scene.py +++ b/manimlib/scene/vector_space_scene.py @@ -1,34 +1,34 @@ import numpy as np -from manimlib.animation.animation import Animation -from manimlib.animation.creation import ShowCreation -from manimlib.animation.creation import Write -from manimlib.animation.fading import FadeOut -from manimlib.animation.growing import GrowArrow -from manimlib.animation.transform import ApplyFunction -from manimlib.animation.transform import ApplyPointwiseFunction -from manimlib.animation.transform import Transform -from manimlib.constants import * -from manimlib.mobject.coordinate_systems import Axes -from manimlib.mobject.coordinate_systems import NumberPlane -from manimlib.mobject.geometry import Arrow -from manimlib.mobject.geometry import Dot -from manimlib.mobject.geometry import Line -from manimlib.mobject.geometry import Rectangle -from manimlib.mobject.geometry import Vector -from manimlib.mobject.matrix import Matrix -from manimlib.mobject.matrix import VECTOR_LABEL_SCALE_FACTOR -from manimlib.mobject.matrix import vector_coordinate_label -from manimlib.mobject.mobject import Mobject -from manimlib.mobject.svg.tex_mobject import TexMobject -from manimlib.mobject.svg.tex_mobject import TextMobject -from manimlib.mobject.types.vectorized_mobject import VGroup -from manimlib.mobject.types.vectorized_mobject import VMobject -from manimlib.scene.scene import Scene -from manimlib.utils.rate_functions import rush_from -from manimlib.utils.rate_functions import rush_into -from manimlib.utils.space_ops import angle_of_vector -from manimlib.utils.space_ops import get_norm +from ..animation.animation import Animation +from ..animation.creation import ShowCreation +from ..animation.creation import Write +from ..animation.fading import FadeOut +from ..animation.growing import GrowArrow +from ..animation.transform import ApplyFunction +from ..animation.transform import ApplyPointwiseFunction +from ..animation.transform import Transform +from ..constants import * +from ..mobject.coordinate_systems import Axes +from ..mobject.coordinate_systems import NumberPlane +from ..mobject.geometry import Arrow +from ..mobject.geometry import Dot +from ..mobject.geometry import Line +from ..mobject.geometry import Rectangle +from ..mobject.geometry import Vector +from ..mobject.matrix import Matrix +from ..mobject.matrix import VECTOR_LABEL_SCALE_FACTOR +from ..mobject.matrix import vector_coordinate_label +from ..mobject.mobject import Mobject +from ..mobject.svg.tex_mobject import TexMobject +from ..mobject.svg.tex_mobject import TextMobject +from ..mobject.types.vectorized_mobject import VGroup +from ..mobject.types.vectorized_mobject import VMobject +from ..scene.scene import Scene +from ..utils.rate_functions import rush_from +from ..utils.rate_functions import rush_into +from ..utils.space_ops import angle_of_vector +from ..utils.space_ops import get_norm X_COLOR = GREEN_C Y_COLOR = RED_C @@ -1057,4 +1057,4 @@ def apply_function(self, function, added_anims=[], **kwargs): Animation(f_mob) for f_mob in self.foreground_mobjects ] + added_anims - self.play(*anims, **kwargs) + self.play(*anims, **kwargs) \ No newline at end of file diff --git a/manimlib/scene/zoomed_scene.py b/manimlib/scene/zoomed_scene.py index 44ac52badb..a38fcfd23a 100644 --- a/manimlib/scene/zoomed_scene.py +++ b/manimlib/scene/zoomed_scene.py @@ -1,10 +1,10 @@ -from manimlib.animation.transform import ApplyMethod -from manimlib.camera.moving_camera import MovingCamera -from manimlib.camera.multi_camera import MultiCamera -from manimlib.constants import * -from manimlib.mobject.types.image_mobject import ImageMobjectFromCamera -from manimlib.scene.moving_camera_scene import MovingCameraScene -from manimlib.utils.simple_functions import fdiv +from ..animation.transform import ApplyMethod +from ..camera.moving_camera import MovingCamera +from ..camera.multi_camera import MultiCamera +from ..constants import * +from ..mobject.types.image_mobject import ImageMobjectFromCamera +from ..scene.moving_camera_scene import MovingCameraScene +from ..utils.simple_functions import fdiv # Note, any scenes from old videos using ZoomedScene will almost certainly # break, as it was restructured. @@ -141,4 +141,4 @@ def get_zoom_factor(self): return fdiv( self.zoomed_camera.frame.get_height(), self.zoomed_display.get_height() - ) + ) \ No newline at end of file diff --git a/manimlib/utils/bezier.py b/manimlib/utils/bezier.py index 3e86562ed3..d49f14b7a9 100644 --- a/manimlib/utils/bezier.py +++ b/manimlib/utils/bezier.py @@ -1,7 +1,7 @@ from scipy import linalg import numpy as np -from manimlib.utils.simple_functions import choose +from ..utils.simple_functions import choose CLOSED_THRESHOLD = 0.001 @@ -158,4 +158,4 @@ def diag_to_matrix(l_and_u, diag): def is_closed(points): - return np.allclose(points[0], points[-1]) + return np.allclose(points[0], points[-1]) \ No newline at end of file diff --git a/manimlib/utils/color.py b/manimlib/utils/color.py index 1a5a229b71..48f9325862 100644 --- a/manimlib/utils/color.py +++ b/manimlib/utils/color.py @@ -3,11 +3,11 @@ from colour import Color import numpy as np -from manimlib.constants import PALETTE -from manimlib.constants import WHITE -from manimlib.utils.bezier import interpolate -from manimlib.utils.simple_functions import clip_in_place -from manimlib.utils.space_ops import normalize +from ..constants import PALETTE +from ..constants import WHITE +from ..utils.bezier import interpolate +from ..utils.simple_functions import clip_in_place +from ..utils.space_ops import normalize def color_to_rgb(color): @@ -108,4 +108,4 @@ def get_shaded_rgb(rgb, point, unit_normal_vect, light_source): factor *= 0.5 result = rgb + factor clip_in_place(rgb + factor, 0, 1) - return result + return result \ No newline at end of file diff --git a/manimlib/utils/config_ops.py b/manimlib/utils/config_ops.py index 2363cc97d7..6a3ca3a723 100644 --- a/manimlib/utils/config_ops.py +++ b/manimlib/utils/config_ops.py @@ -91,4 +91,4 @@ def digest_locals(obj, keys=None): class DictAsObject(object): def __init__(self, dict): - self.__dict__ = dict + self.__dict__ = dict \ No newline at end of file diff --git a/manimlib/utils/debug.py b/manimlib/utils/debug.py index 28f8f1ad77..a1857ded04 100644 --- a/manimlib/utils/debug.py +++ b/manimlib/utils/debug.py @@ -1,6 +1,6 @@ -from manimlib.constants import BLACK -from manimlib.mobject.numbers import Integer -from manimlib.mobject.types.vectorized_mobject import VGroup +from ..constants import BLACK +from ..mobject.numbers import Integer +from ..mobject.types.vectorized_mobject import VGroup def print_family(mobject, n_tabs=0): @@ -18,4 +18,4 @@ def get_submobject_index_labels(mobject, label_height=0.15): label.move_to(submob) label.set_stroke(BLACK, 5, background=True) labels.add(label) - return labels + return labels \ No newline at end of file diff --git a/manimlib/utils/file_ops.py b/manimlib/utils/file_ops.py index 9c9752a499..181cfb426b 100644 --- a/manimlib/utils/file_ops.py +++ b/manimlib/utils/file_ops.py @@ -56,4 +56,4 @@ def get_sorted_integer_files(directory, elif remove_non_integer_files: os.remove(full_path) indexed_files.sort(key=lambda p: p[0]) - return list(map(lambda p: os.path.join(directory, p[1]), indexed_files)) + return list(map(lambda p: os.path.join(directory, p[1]), indexed_files)) \ No newline at end of file diff --git a/manimlib/utils/images.py b/manimlib/utils/images.py index edd7553056..1288e4fe75 100644 --- a/manimlib/utils/images.py +++ b/manimlib/utils/images.py @@ -3,7 +3,7 @@ from PIL import Image -from manimlib.utils.file_ops import seek_full_path_from_defaults +from ..utils.file_ops import seek_full_path_from_defaults def get_full_raster_image_path(image_file_name): @@ -26,4 +26,4 @@ def drag_pixels(frames): def invert_image(image): arr = np.array(image) arr = (255 * np.ones(arr.shape)).astype(arr.dtype) - arr - return Image.fromarray(arr) + return Image.fromarray(arr) \ No newline at end of file diff --git a/manimlib/utils/iterables.py b/manimlib/utils/iterables.py index 1cd26ed9ea..85ecc09e64 100644 --- a/manimlib/utils/iterables.py +++ b/manimlib/utils/iterables.py @@ -119,4 +119,4 @@ def remove_nones(sequence): def concatenate_lists(*list_of_lists): - return [item for l in list_of_lists for item in l] + return [item for l in list_of_lists for item in l] \ No newline at end of file diff --git a/manimlib/utils/paths.py b/manimlib/utils/paths.py index 8bc9cca1fb..c630334e40 100644 --- a/manimlib/utils/paths.py +++ b/manimlib/utils/paths.py @@ -1,9 +1,9 @@ import numpy as np -from manimlib.constants import OUT -from manimlib.utils.bezier import interpolate -from manimlib.utils.space_ops import get_norm -from manimlib.utils.space_ops import rotation_matrix +from ..constants import OUT +from ..utils.bezier import interpolate +from ..utils.space_ops import get_norm +from ..utils.space_ops import rotation_matrix STRAIGHT_PATH_THRESHOLD = 0.01 @@ -44,4 +44,4 @@ def clockwise_path(): def counterclockwise_path(): - return path_along_arc(np.pi) + return path_along_arc(np.pi) \ No newline at end of file diff --git a/manimlib/utils/rate_functions.py b/manimlib/utils/rate_functions.py index 39f9cd15c2..184c9da1c3 100644 --- a/manimlib/utils/rate_functions.py +++ b/manimlib/utils/rate_functions.py @@ -1,7 +1,7 @@ import numpy as np -from manimlib.utils.bezier import bezier -from manimlib.utils.simple_functions import sigmoid +from ..utils.bezier import bezier +from ..utils.simple_functions import sigmoid def linear(t): @@ -91,4 +91,4 @@ def lingering(t): def exponential_decay(t, half_life=0.1): # The half-life should be rather small to minimize # the cut-off error at the end - return 1 - np.exp(-t / half_life) + return 1 - np.exp(-t / half_life) \ No newline at end of file diff --git a/manimlib/utils/simple_functions.py b/manimlib/utils/simple_functions.py index f619226726..5f81805549 100644 --- a/manimlib/utils/simple_functions.py +++ b/manimlib/utils/simple_functions.py @@ -88,4 +88,4 @@ def binary_search(function, lh, rh = rh, lh else: return None - return mh + return mh \ No newline at end of file diff --git a/manimlib/utils/sounds.py b/manimlib/utils/sounds.py index 26cfff07d0..a5a6997bce 100644 --- a/manimlib/utils/sounds.py +++ b/manimlib/utils/sounds.py @@ -1,5 +1,5 @@ import os -from manimlib.utils.file_ops import seek_full_path_from_defaults +from ..utils.file_ops import seek_full_path_from_defaults def play_chord(*nums): @@ -36,4 +36,4 @@ def get_full_sound_file_path(sound_file_name): sound_file_name, default_dir=os.path.join("assets", "sounds"), extensions=[".wav", ".mp3"] - ) + ) \ No newline at end of file diff --git a/manimlib/utils/space_ops.py b/manimlib/utils/space_ops.py index b0113f92f8..1dc09de818 100644 --- a/manimlib/utils/space_ops.py +++ b/manimlib/utils/space_ops.py @@ -2,12 +2,12 @@ import numpy as np -from manimlib.constants import OUT -from manimlib.constants import PI -from manimlib.constants import RIGHT -from manimlib.constants import TAU -from manimlib.utils.iterables import adjacent_pairs -from manimlib.utils.simple_functions import fdiv +from ..constants import OUT +from ..constants import PI +from ..constants import RIGHT +from ..constants import TAU +from ..utils.iterables import adjacent_pairs +from ..utils.simple_functions import fdiv def get_norm(vect): @@ -236,4 +236,4 @@ def get_winding_number(points): d_angle = angle_of_vector(p2) - angle_of_vector(p1) d_angle = ((d_angle + PI) % TAU) - PI total_angle += d_angle - return total_angle / TAU + return total_angle / TAU \ No newline at end of file diff --git a/manimlib/utils/strings.py b/manimlib/utils/strings.py index b986577d21..caf07e5589 100644 --- a/manimlib/utils/strings.py +++ b/manimlib/utils/strings.py @@ -56,4 +56,4 @@ def split_string_list_to_isolate_substrings(string_list, *substrings_to_isolate) return list(it.chain(*[ split_string_to_isolate_substrings(s, *substrings_to_isolate) for s in string_list - ])) + ])) \ No newline at end of file diff --git a/manimlib/utils/tex_file_writing.py b/manimlib/utils/tex_file_writing.py index d8bbdad1fe..4e166b74a4 100644 --- a/manimlib/utils/tex_file_writing.py +++ b/manimlib/utils/tex_file_writing.py @@ -3,9 +3,9 @@ from pathlib import Path -from manimlib.constants import TEX_TEXT_TO_REPLACE -from manimlib.constants import TEX_USE_CTEX -import manimlib.constants as consts +from ..constants import TEX_TEXT_TO_REPLACE +from ..constants import TEX_USE_CTEX +from ..constants import TEX_DIR def tex_hash(expression, template_tex_file_body): @@ -24,7 +24,7 @@ def tex_to_svg_file(expression, template_tex_file_body): def generate_tex_file(expression, template_tex_file_body): result = os.path.join( - consts.TEX_DIR, + TEX_DIR, tex_hash(expression, template_tex_file_body) ) + ".tex" if not os.path.exists(result): @@ -43,7 +43,7 @@ def tex_to_dvi(tex_file): result = tex_file.replace(".tex", ".dvi" if not TEX_USE_CTEX else ".xdv") result = Path(result).as_posix() tex_file = Path(tex_file).as_posix() - tex_dir = Path(consts.TEX_DIR).as_posix() + tex_dir = Path(TEX_DIR).as_posix() if not os.path.exists(result): commands = [ "latex", From 84051a9e3b5092c555549cadbc239f14d0f7e83e Mon Sep 17 00:00:00 2001 From: Devin Neal Date: Wed, 20 May 2020 06:49:15 -0700 Subject: [PATCH 2/2] Restore a few missed imports --- manimlib/mobject/svg/text_mobject.py | 2 +- manimlib/scene/graph_scene.py | 4 ++-- manimlib/scene/scene.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/manimlib/mobject/svg/text_mobject.py b/manimlib/mobject/svg/text_mobject.py index 7319b61b6d..9736c2d008 100644 --- a/manimlib/mobject/svg/text_mobject.py +++ b/manimlib/mobject/svg/text_mobject.py @@ -5,7 +5,7 @@ import cairo from ...constants import * from ...container.container import Container -from ...mobject.geometry import Rectangle +from ...mobject.geometry import Dot, Rectangle from ...mobject.svg.svg_mobject import SVGMobject from ...mobject.types.vectorized_mobject import VGroup from ...utils.config_ops import digest_config diff --git a/manimlib/scene/graph_scene.py b/manimlib/scene/graph_scene.py index 74f3bca6b0..4c75dd84eb 100644 --- a/manimlib/scene/graph_scene.py +++ b/manimlib/scene/graph_scene.py @@ -1,6 +1,6 @@ import itertools as it -from ..animation.creation import ShowCreation +from ..animation.creation import Write, DrawBorderThenFill, ShowCreation from ..animation.transform import Transform from ..animation.update import UpdateFromAlphaFunc from ..constants import * @@ -1051,4 +1051,4 @@ def update_func(group, alpha): *added_anims ) secant_slope_group.kwargs["x"] = target_x - secant_slope_group.kwargs["dx"] = target_dx \ No newline at end of file + secant_slope_group.kwargs["dx"] = target_dx diff --git a/manimlib/scene/scene.py b/manimlib/scene/scene.py index e591b9afd5..6df83db54c 100644 --- a/manimlib/scene/scene.py +++ b/manimlib/scene/scene.py @@ -7,7 +7,7 @@ import numpy as np from ..animation.animation import Animation -from ..animation.transform import ApplyMethod +from ..animation.transform import MoveToTarget, ApplyMethod from ..camera.camera import Camera from ..constants import * from ..container.container import Container @@ -1168,4 +1168,4 @@ def show_frame(self): class EndSceneEarlyException(Exception): - pass \ No newline at end of file + pass