From 0140d348fa83500715f6bcdd9153d3ebf979d3ad Mon Sep 17 00:00:00 2001 From: leotrs Date: Thu, 27 Aug 2020 23:53:43 -0400 Subject: [PATCH 1/8] add __all__ variables to all modules --- manim/__init__.py | 5 +-- manim/animation/animation.py | 3 ++ manim/animation/composition.py | 2 ++ manim/animation/creation.py | 15 +++++++- manim/animation/fading.py | 15 ++++++++ manim/animation/growing.py | 11 ++++-- manim/animation/indication.py | 18 ++++++++++ manim/animation/movement.py | 9 +++++ manim/animation/numbers.py | 3 ++ manim/animation/rotation.py | 3 ++ manim/animation/specialized.py | 3 ++ manim/animation/transform.py | 23 +++++++++++++ manim/animation/update.py | 3 ++ manim/camera/camera.py | 3 ++ manim/camera/mapping_camera.py | 3 ++ manim/camera/moving_camera.py | 3 ++ manim/camera/multi_camera.py | 3 +- manim/camera/three_d_camera.py | 3 ++ manim/container.py | 6 ++-- manim/mobject/changing.py | 3 ++ manim/mobject/coordinate_systems.py | 11 +++--- manim/mobject/frame.py | 8 +++++ manim/mobject/functions.py | 3 ++ manim/mobject/geometry.py | 33 ++++++++++++++++++ manim/mobject/matrix.py | 9 +++-- manim/mobject/mobject.py | 4 +++ manim/mobject/mobject_update_utils.py | 12 +++++++ manim/mobject/number_line.py | 3 ++ manim/mobject/numbers.py | 3 ++ manim/mobject/probability.py | 3 ++ manim/mobject/shape_matchers.py | 3 ++ manim/mobject/svg/brace.py | 3 ++ manim/mobject/svg/code_mobject.py | 40 ++++++++++++---------- manim/mobject/svg/drawings.py | 27 +++++++++++++++ manim/mobject/svg/svg_mobject.py | 3 ++ manim/mobject/svg/tex_mobject.py | 11 ++++++ manim/mobject/svg/text_mobject.py | 3 ++ manim/mobject/three_d_utils.py | 12 +++++++ manim/mobject/three_dimensions.py | 3 ++ manim/mobject/types/image_mobject.py | 3 ++ manim/mobject/types/point_cloud_mobject.py | 3 ++ manim/mobject/types/vectorized_mobject.py | 24 +++++++++---- manim/mobject/value_tracker.py | 3 ++ manim/mobject/vector_field.py | 8 +++++ manim/scene/graph_scene.py | 2 ++ manim/scene/moving_camera_scene.py | 2 ++ manim/scene/reconfigurable_scene.py | 2 ++ manim/scene/sample_space_scene.py | 3 ++ manim/scene/scene.py | 3 ++ manim/scene/three_d_scene.py | 3 ++ manim/scene/vector_space_scene.py | 3 ++ manim/scene/zoomed_scene.py | 3 ++ manim/utils/bezier.py | 14 ++++++++ manim/utils/color.py | 19 ++++++++++ manim/utils/config_ops.py | 11 ++++++ manim/utils/debug.py | 3 ++ manim/utils/file_ops.py | 12 +++++-- manim/utils/hashing.py | 10 +++--- manim/utils/images.py | 3 ++ manim/utils/iterables.py | 16 +++++++++ manim/utils/paths.py | 8 +++++ manim/utils/rate_functions.py | 18 ++++++++++ manim/utils/simple_functions.py | 12 +++++++ manim/utils/sounds.py | 8 +++++ manim/utils/space_ops.py | 29 ++++++++++++++++ manim/utils/strings.py | 10 ++++++ manim/utils/tex.py | 3 ++ 67 files changed, 521 insertions(+), 48 deletions(-) diff --git a/manim/__init__.py b/manim/__init__.py index ea5e679155..a32a148c57 100644 --- a/manim/__init__.py +++ b/manim/__init__.py @@ -6,10 +6,12 @@ # global config dict is called 'config', just like the module itself. That's # why we import the module first with a different name, and then the dict. from . import config as _config -from .config import config +from .config import config, file_writer_config from .constants import * +from .container import * + from .animation.animation import * from .animation.composition import * from .animation.creation import * @@ -59,7 +61,6 @@ from .scene.reconfigurable_scene import * from .scene.scene import * from .scene.sample_space_scene import * -from .scene.graph_scene import * from .scene.three_d_scene import * from .scene.vector_space_scene import * from .scene.zoomed_scene import * diff --git a/manim/animation/animation.py b/manim/animation/animation.py index 329baec1b5..bf5896ae46 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -1,3 +1,6 @@ +__all__ = ["Animation"] + + from copy import deepcopy import numpy as np diff --git a/manim/animation/composition.py b/manim/animation/composition.py index 7c5c5f04be..04f3bd88e0 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -8,6 +8,8 @@ from ..utils.iterables import remove_list_redundancies from ..utils.rate_functions import linear +__all__ = ["AnimationGroup", "Succession", "LaggedStart", "LaggedStartMap"] + DEFAULT_LAGGED_START_LAG_RATIO = 0.05 diff --git a/manim/animation/creation.py b/manim/animation/creation.py index bcab8b5ccd..472d35d3c2 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -1,3 +1,16 @@ +__all__ = [ + "ShowPartial", + "ShowCreation", + "Uncreate", + "DrawBorderThenFill", + "Write", + "ShowIncreasingSubsets", + "AddTextLetterByLetter", + "ShowSubmobjectsOneByOne", + "AddTextWordByWord", +] + + from ..animation.animation import Animation from ..animation.composition import Succession from ..mobject.types.vectorized_mobject import VMobject @@ -131,7 +144,7 @@ def update_submobject_list(self, index): class AddTextLetterByLetter(ShowIncreasingSubsets): """ - Add a Text Object letter by letter on the scene. Use time_per_char to change frequency of appearance of the letters. + Add a Text Object letter by letter on the scene. Use time_per_char to change frequency of appearance of the letters. """ CONFIG = { diff --git a/manim/animation/fading.py b/manim/animation/fading.py index 5f66ec8175..54cf027ab9 100644 --- a/manim/animation/fading.py +++ b/manim/animation/fading.py @@ -1,3 +1,18 @@ +__all__ = [ + "FadeOut", + "FadeIn", + "FadeInFrom", + "FadeInFromDown", + "FadeOutAndShift", + "FadeOutAndShiftDown", + "FadeInFromPoint", + "FadeInFromLarge", + "VFadeIn", + "VFadeOut", + "VFadeInThenOut", +] + + from ..animation.animation import Animation from ..animation.animation import DEFAULT_ANIMATION_LAG_RATIO from ..animation.transform import Transform diff --git a/manim/animation/growing.py b/manim/animation/growing.py index fe3c9249f6..8b7919019c 100644 --- a/manim/animation/growing.py +++ b/manim/animation/growing.py @@ -1,6 +1,13 @@ -from ..animation.transform import Transform +__all__ = [ + "GrowFromPoint", + "GrowFromCenter", + "GrowFromEdge", + "GrowArrow", + "SpinInFromNothing", +] + -# from ..utils.paths import counterclockwise_path +from ..animation.transform import Transform from ..constants import PI diff --git a/manim/animation/indication.py b/manim/animation/indication.py index fd6710c1bd..1cf3e1bfbc 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -1,3 +1,21 @@ +__all__ = [ + "FocusOn", + "Indicate", + "Flash", + "CircleIndicate", + "ShowPassingFlash", + "ShowCreationThenDestruction", + "ShowCreationThenFadeOut", + "AnimationOnSurroundingRectangle", + "ShowPassingFlashAround", + "ShowCreationThenDestructionAround", + "ShowCreationThenFadeAround", + "ApplyWave", + "WiggleOutThenIn", + "TurnInsideOut", +] + + import numpy as np from ..constants import * diff --git a/manim/animation/movement.py b/manim/animation/movement.py index de1dea0f18..571e6e29fe 100644 --- a/manim/animation/movement.py +++ b/manim/animation/movement.py @@ -1,3 +1,12 @@ +__all__ = [ + "Homotopy", + "SmoothedVectorizedHomotopy", + "ComplexHomotopy", + "PhaseFlow", + "MoveAlongPath", +] + + from ..animation.animation import Animation from ..utils.rate_functions import linear diff --git a/manim/animation/numbers.py b/manim/animation/numbers.py index 98e6b1f6d3..54466232c0 100644 --- a/manim/animation/numbers.py +++ b/manim/animation/numbers.py @@ -1,3 +1,6 @@ +__all__ = ["ChangingDecimal", "ChangeDecimalToValue"] + + import warnings from ..animation.animation import Animation diff --git a/manim/animation/rotation.py b/manim/animation/rotation.py index f0acba243b..39053e17f2 100644 --- a/manim/animation/rotation.py +++ b/manim/animation/rotation.py @@ -1,3 +1,6 @@ +__all__ = ["Rotating", "Rotate"] + + from ..animation.animation import Animation from ..animation.transform import Transform from ..constants import OUT diff --git a/manim/animation/specialized.py b/manim/animation/specialized.py index f5fc3fa360..558b4131af 100644 --- a/manim/animation/specialized.py +++ b/manim/animation/specialized.py @@ -1,3 +1,6 @@ +__all__ = ["MoveCar", "Broadcast"] + + import operator as op from ..animation.composition import LaggedStart diff --git a/manim/animation/transform.py b/manim/animation/transform.py index 6c01e56900..82e9dc8527 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -1,3 +1,26 @@ +__all__ = [ + "Transform", + "ReplacementTransform", + "TransformFromCopy", + "ClockwiseTransform", + "CounterclockwiseTransform", + "MoveToTarget", + "ApplyMethod", + "ApplyPointwiseFunction", + "ApplyPointwiseFunctionToCenter", + "FadeToColor", + "ScaleInPlace", + "ShrinkToCenter", + "Restore", + "ApplyFunction", + "ApplyMatrix", + "ApplyComplexFunction", + "CyclicReplace", + "Swap", + "TransformAnimations", +] + + import inspect import numpy as np diff --git a/manim/animation/update.py b/manim/animation/update.py index 4166cc3fb4..fdc8089502 100644 --- a/manim/animation/update.py +++ b/manim/animation/update.py @@ -1,3 +1,6 @@ +__all__ = ["UpdateFromFunc", "UpdateFromAlphaFunc", "MaintainPositionRelativeTo"] + + import operator as op from ..animation.animation import Animation diff --git a/manim/camera/camera.py b/manim/camera/camera.py index caa587b017..efe39609b1 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -1,3 +1,6 @@ +__all__ = ["Camera", "BackgroundColoredVMobjectDisplayer"] + + from functools import reduce import itertools as it import operator as op diff --git a/manim/camera/mapping_camera.py b/manim/camera/mapping_camera.py index 184f0d8d46..f96d3c92a2 100644 --- a/manim/camera/mapping_camera.py +++ b/manim/camera/mapping_camera.py @@ -1,3 +1,6 @@ +__all__ = ["MappingCamera", "OldMultiCamera", "SplitScreenCamera"] + + import numpy as np from ..camera.camera import Camera diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index 253498c768..53bdadaa93 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -1,3 +1,6 @@ +__all__ = ["CameraFrame", "MovingCamera"] + + from ..camera.camera import Camera from ..config import config from ..constants import ORIGIN, WHITE diff --git a/manim/camera/multi_camera.py b/manim/camera/multi_camera.py index b786858129..1f32dd3c5e 100644 --- a/manim/camera/multi_camera.py +++ b/manim/camera/multi_camera.py @@ -3,8 +3,7 @@ class MultiCamera(MovingCamera): - """Camera Object that allows for multiple perspectives. - """ + """Camera Object that allows for multiple perspectives.""" CONFIG = { "allow_cameras_to_capture_their_own_display": False, diff --git a/manim/camera/three_d_camera.py b/manim/camera/three_d_camera.py index 5b4706304f..c5dd12c60f 100644 --- a/manim/camera/three_d_camera.py +++ b/manim/camera/three_d_camera.py @@ -1,3 +1,6 @@ +__all__ = ["ThreeDCamera"] + + import numpy as np from ..camera.camera import Camera diff --git a/manim/container.py b/manim/container.py index a80c92eb2c..5182b68586 100644 --- a/manim/container.py +++ b/manim/container.py @@ -3,12 +3,14 @@ :class:`~.Scene` and :class:`~.Mobject` inherit from Container. """ -from abc import ABC, abstractmethod -from .utils.config_ops import digest_config __all__ = ["Container"] +from abc import ABC, abstractmethod +from .utils.config_ops import digest_config + + class Container(ABC): """Abstract base class for several objects used by manim. In particular, both :class:`~.Scene` and :class:`~.Mobject` inherit from Container. diff --git a/manim/mobject/changing.py b/manim/mobject/changing.py index 02475d6293..4dc5a484a8 100644 --- a/manim/mobject/changing.py +++ b/manim/mobject/changing.py @@ -1,3 +1,6 @@ +__all__ = ["AnimatedBoundary", "TracedPath"] + + from ..constants import * from ..mobject.types.vectorized_mobject import VMobject from ..mobject.types.vectorized_mobject import VGroup diff --git a/manim/mobject/coordinate_systems.py b/manim/mobject/coordinate_systems.py index 713659f320..e3c89d3655 100644 --- a/manim/mobject/coordinate_systems.py +++ b/manim/mobject/coordinate_systems.py @@ -1,3 +1,6 @@ +__all__ = ["CoordinateSystem", "Axes", "ThreeDAxes", "NumberPlane", "ComplexPlane"] + + import numpy as np import numbers @@ -280,7 +283,7 @@ def init_background_lines(self): def get_lines(self): """Generate all the lines, faded and not faded. Two sets of lines are generated: one parallel to the X-axis, and parallel to the Y-axis. - + Returns ------- Tuple[:class:`~.VGroup`, :class:`~.VGroup`] @@ -313,9 +316,9 @@ def get_lines_parallel_to_axis( axis_perpendicular_to : :class:`~.Line` The axis with which the lines will be perpendicular. - + ratio_faded_lines : :class:`float` - The number of faded lines between each non-faded line. + The number of faded lines between each non-faded line. freq : :class:`float` Frequency of non-faded lines (number of non-faded lines per graph unit). @@ -323,7 +326,7 @@ def get_lines_parallel_to_axis( Returns ------- Tuple[:class:`~.VGroup`, :class:`~.VGroup`] - The first (i.e the non-faded lines parallel to `axis_parallel_to`) and second (i.e the faded lines parallel to `axis_parallel_to`) sets of lines, respectively. + The first (i.e the non-faded lines parallel to `axis_parallel_to`) and second (i.e the faded lines parallel to `axis_parallel_to`) sets of lines, respectively. """ line = Line(axis_parallel_to.get_start(), axis_parallel_to.get_end()) dense_freq = ratio_faded_lines diff --git a/manim/mobject/frame.py b/manim/mobject/frame.py index 1c4b6e41b0..d2a8ccd0cc 100644 --- a/manim/mobject/frame.py +++ b/manim/mobject/frame.py @@ -1,3 +1,11 @@ +__all__ = [ + "ScreenRectangle", + "FullScreenRectangle", + "FullScreenFadeRectangle", + "PictureInPictureFrame", +] + + from ..constants import * from ..config import config from ..mobject.geometry import Rectangle diff --git a/manim/mobject/functions.py b/manim/mobject/functions.py index f12ec37675..68a5ebbeec 100644 --- a/manim/mobject/functions.py +++ b/manim/mobject/functions.py @@ -1,3 +1,6 @@ +__all__ = ["ParametricFunction", "FunctionGraph"] + + from ..constants import * from ..config import config from ..mobject.types.vectorized_mobject import VMobject diff --git a/manim/mobject/geometry.py b/manim/mobject/geometry.py index 3ef7ead285..6384d0aecc 100644 --- a/manim/mobject/geometry.py +++ b/manim/mobject/geometry.py @@ -5,6 +5,39 @@ Classes implementing geometric objects, mostly derived from MObject. """ + + +__all__ = [ + "TipableVMobject", + "Arc", + "ArcBetweenPoints", + "CurvedArrow", + "CurvedDoubleArrow", + "Circle", + "Dot", + "SmallDot", + "Ellipse", + "AnnularSector", + "Sector", + "Annulus", + "Line", + "DashedLine", + "TangentLine", + "Elbow", + "Arrow", + "Vector", + "DoubleArrow", + "CubicBezier", + "Polygon", + "RegularPolygon", + "Triangle", + "ArrowTip", + "Rectangle", + "Square", + "RoundedRectangle", +] + + import warnings import numpy as np import math diff --git a/manim/mobject/matrix.py b/manim/mobject/matrix.py index 4d132e46ea..c58623edce 100644 --- a/manim/mobject/matrix.py +++ b/manim/mobject/matrix.py @@ -1,3 +1,6 @@ +__all__ = ["Matrix", "DecimalMatrix", "IntegerMatrix", "MobjectMatrix"] + + import numpy as np from ..constants import * @@ -122,7 +125,7 @@ def set_column_colors(self, *colors): def get_rows(self): """Return rows of the matrix as VGroups - + Returns -------- List[:class:`~.VGroup`] @@ -134,12 +137,12 @@ def get_rows(self): def set_row_colors(self, *colors): """Set individual colors for each row of the matrix - + Parameters ---------- colors : :class:`str` The list of colors; each color specified corresponds to a row. - + Returns ------- :class:`Matrix` diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 71d446e768..4ce9da1b82 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1,6 +1,10 @@ """ MObject: Base classes for all mathematical objects. """ + +__all__ = ["Mobject", "Group"] + + from functools import reduce import copy import itertools as it diff --git a/manim/mobject/mobject_update_utils.py b/manim/mobject/mobject_update_utils.py index ef40a87731..f43e69d943 100644 --- a/manim/mobject/mobject_update_utils.py +++ b/manim/mobject/mobject_update_utils.py @@ -1,3 +1,15 @@ +__all__ = [ + "assert_is_mobject_method", + "always", + "f_always", + "always_redraw", + "always_shift", + "always_rotate", + "turn_animation_into_updater", + "cycle_animation", +] + + import inspect import numpy as np diff --git a/manim/mobject/number_line.py b/manim/mobject/number_line.py index da8f286ee7..36629fbd89 100644 --- a/manim/mobject/number_line.py +++ b/manim/mobject/number_line.py @@ -1,3 +1,6 @@ +__all__ = ["NumberLine", "UnitInterval"] + + import operator as op from ..constants import * diff --git a/manim/mobject/numbers.py b/manim/mobject/numbers.py index 6c5caf3acd..79335c4f77 100644 --- a/manim/mobject/numbers.py +++ b/manim/mobject/numbers.py @@ -1,3 +1,6 @@ +__all__ = ["DecimalNumber", "Integer"] + + from ..constants import * from ..mobject.svg.tex_mobject import SingleStringTexMobject from ..mobject.types.vectorized_mobject import VMobject diff --git a/manim/mobject/probability.py b/manim/mobject/probability.py index a9fd5658d1..2a7ce75977 100644 --- a/manim/mobject/probability.py +++ b/manim/mobject/probability.py @@ -1,3 +1,6 @@ +__all__ = ["SampleSpace", "BarChart"] + + from ..constants import * from ..mobject.geometry import Line from ..mobject.geometry import Rectangle diff --git a/manim/mobject/shape_matchers.py b/manim/mobject/shape_matchers.py index 00b8c54a48..3782010555 100644 --- a/manim/mobject/shape_matchers.py +++ b/manim/mobject/shape_matchers.py @@ -1,3 +1,6 @@ +__all__ = ["SurroundingRectangle", "BackgroundRectangle", "Cross", "Underline"] + + from ..constants import * from ..mobject.geometry import Line from ..mobject.geometry import Rectangle diff --git a/manim/mobject/svg/brace.py b/manim/mobject/svg/brace.py index e16e1d7c95..47c7422935 100644 --- a/manim/mobject/svg/brace.py +++ b/manim/mobject/svg/brace.py @@ -1,3 +1,6 @@ +__all__ = ["Brace", "BraceLabel", "BraceText"] + + import numpy as np from ...animation.composition import AnimationGroup diff --git a/manim/mobject/svg/code_mobject.py b/manim/mobject/svg/code_mobject.py index 0ae7c415ee..500beb88ae 100644 --- a/manim/mobject/svg/code_mobject.py +++ b/manim/mobject/svg/code_mobject.py @@ -1,3 +1,25 @@ +""" +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 +""" + + +__all__ = ["Code"] + + import html import os from ...constants import * @@ -12,24 +34,6 @@ 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 = { diff --git a/manim/mobject/svg/drawings.py b/manim/mobject/svg/drawings.py index 67dd69465f..95614fddbc 100644 --- a/manim/mobject/svg/drawings.py +++ b/manim/mobject/svg/drawings.py @@ -1,3 +1,30 @@ +__all__ = [ + "Lightbulb", + "BitcoinLogo", + "Guitar", + "Speedometer", + "AoPSLogo", + "PartyHat", + "Laptop", + "PatreonLogo", + "VideoIcon", + "VideoSeries", + "Headphones", + "Clock", + "ClockPassesTime", + "Bubble", + "SpeechBubble", + "DoubleSpeechBubble", + "ThoughtBubble", + "Car", + "VectorizedEarth", + "Logo", + "DeckOfCards", + "PlayingCard", + "SuitSymbol", +] + + import itertools as it import string diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index 2a0e864e9c..71f3ffc426 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -1,3 +1,6 @@ +__all__ = ["SVGMobject", "VMobjectFromSVGPathstring"] + + import itertools as it import re import os diff --git a/manim/mobject/svg/tex_mobject.py b/manim/mobject/svg/tex_mobject.py index 9b14e8819d..9f6afa3155 100644 --- a/manim/mobject/svg/tex_mobject.py +++ b/manim/mobject/svg/tex_mobject.py @@ -1,3 +1,14 @@ +__all__ = [ + "TexSymbol", + "SingleStringTexMobject", + "TexMobject", + "TextMobject", + "BulletedList", + "TexMobjectFromPresetString", + "Title", +] + + from functools import reduce import operator as op diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 8272a3943c..6edfca9754 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -1,3 +1,6 @@ +__all__ = ["TextSetting", "Text", "TextWithFixHeight", "Paragraph"] + + import re import os import copy diff --git a/manim/mobject/three_d_utils.py b/manim/mobject/three_d_utils.py index bf02d3321b..5acc8f4bd8 100644 --- a/manim/mobject/three_d_utils.py +++ b/manim/mobject/three_d_utils.py @@ -1,3 +1,15 @@ +__all__ = [ + "get_3d_vmob_gradient_start_and_end_points", + "get_3d_vmob_start_corner_index", + "get_3d_vmob_end_corner_index", + "get_3d_vmob_start_corner", + "get_3d_vmob_end_corner", + "get_3d_vmob_unit_normal", + "get_3d_vmob_start_corner_unit_normal", + "get_3d_vmob_end_corner_unit_normal", +] + + import numpy as np from ..constants import ORIGIN diff --git a/manim/mobject/three_dimensions.py b/manim/mobject/three_dimensions.py index 4f1194dd44..54cb6a06d6 100644 --- a/manim/mobject/three_dimensions.py +++ b/manim/mobject/three_dimensions.py @@ -1,3 +1,6 @@ +__all__ = ["ThreeDVMobject", "ParametricSurface", "Sphere", "Cube", "Prism"] + + from ..constants import * from ..mobject.geometry import Square from ..mobject.types.vectorized_mobject import VGroup diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index f50f76352f..25badc2578 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -1,3 +1,6 @@ +__all__ = ["AbstractImageMobject", "ImageMobject", "ImageMobjectFromCamera"] + + import numpy as np from PIL import Image diff --git a/manim/mobject/types/point_cloud_mobject.py b/manim/mobject/types/point_cloud_mobject.py index c0bd8a1994..838908a84d 100644 --- a/manim/mobject/types/point_cloud_mobject.py +++ b/manim/mobject/types/point_cloud_mobject.py @@ -1,3 +1,6 @@ +__all__ = ["PMobject", "Mobject1D", "Mobject2D", "PGroup", "PointCloudDot", "Point"] + + from ...constants import * from ...mobject.mobject import Mobject from ...utils.bezier import interpolate diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 0e0cbac07e..d090deb32d 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -1,3 +1,13 @@ +__all__ = [ + "VMobject", + "VGroup", + "VDict", + "VectorizedPoint", + "CurvesAsSubmobjects", + "DashedVMobject", +] + + import itertools as it import sys @@ -880,7 +890,7 @@ class VDict(VMobject): mapping_or_iterable : Union[:class:`Mapping`, Iterable[Tuple[Hashable, :class:`~.VMobject`]]], optional The parameter specifying the key-value mapping of keys and mobjects. show_keys : :class:`bool`, optional - Whether to also display the key associated with + Whether to also display the key associated with the mobject. This might be useful when debugging, especially when there are a lot of mobjects in the :class:`VDict`. Defaults to False. @@ -890,7 +900,7 @@ class VDict(VMobject): Attributes ---------- show_keys : :class:`bool` - Whether to also display the key associated with + Whether to also display the key associated with the mobject. This might be useful when debugging, especially when there are a lot of mobjects in the :class:`VDict`. When displayed, the key is towards @@ -936,7 +946,7 @@ def add(self, mapping_or_iterable): def remove(self, key): """Removes the mobject from the :class:`VDict` object having the key `key` - + Also, it internally removes the mobject from the `submobjects` :class:`list` of :class:`~.Mobject`, (which is responsible for removing it from the screen) @@ -963,12 +973,12 @@ def remove(self, key): def __getitem__(self, key): """Overriding the [] operator for getting submobject by key - + Parameters ---------- key : Hashable The key of the submoject to be accessed - + Returns ------- :class:`VMobject` @@ -991,7 +1001,7 @@ def __setitem__(self, key, value): The key of the submoject to be assigned value : :class:`VMobject` The submobject to bind the key to - + Returns ------- None @@ -1008,7 +1018,7 @@ def __setitem__(self, key, value): def get_all_submobjects(self): """To get all the submobjects associated with a particular :class:`VDict` object - + Returns ------- :class:`dict_values` diff --git a/manim/mobject/value_tracker.py b/manim/mobject/value_tracker.py index c08d02925c..f680657a4d 100644 --- a/manim/mobject/value_tracker.py +++ b/manim/mobject/value_tracker.py @@ -1,3 +1,6 @@ +__all__ = ["ValueTracker", "ExponentialValueTracker", "ComplexValueTracker"] + + import numpy as np from ..utils.paths import straight_path diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index ad5310a729..513632b3a3 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -1,3 +1,11 @@ +__all__ = [ + "VectorField", + "StreamLines", + "ShowPassingFlashWithThinningStrokeWidth", + "AnimatedStreamLines", +] + + import numpy as np import os import itertools as it diff --git a/manim/scene/graph_scene.py b/manim/scene/graph_scene.py index 2d8a4d0e03..67fd95daf9 100644 --- a/manim/scene/graph_scene.py +++ b/manim/scene/graph_scene.py @@ -1,3 +1,5 @@ +__all__ = ["GraphScene"] + import itertools as it from ..config import config diff --git a/manim/scene/moving_camera_scene.py b/manim/scene/moving_camera_scene.py index 0cbfb06d54..05adc5ae8e 100644 --- a/manim/scene/moving_camera_scene.py +++ b/manim/scene/moving_camera_scene.py @@ -1,3 +1,5 @@ +__all__ = ["MovingCameraScene"] + from ..camera.moving_camera import MovingCamera from ..scene.scene import Scene from ..utils.iterables import list_update diff --git a/manim/scene/reconfigurable_scene.py b/manim/scene/reconfigurable_scene.py index 082b9bddf8..7f5d3c21d9 100644 --- a/manim/scene/reconfigurable_scene.py +++ b/manim/scene/reconfigurable_scene.py @@ -1,3 +1,5 @@ +__all__ = ["ReconfigurableScene"] + from ..animation.transform import Transform from ..constants import * from ..mobject.mobject import Mobject diff --git a/manim/scene/sample_space_scene.py b/manim/scene/sample_space_scene.py index f8abf32fd8..f2c5e61bc1 100644 --- a/manim/scene/sample_space_scene.py +++ b/manim/scene/sample_space_scene.py @@ -1,3 +1,6 @@ +__all__ = ["SampleSpaceScene"] + + from ..animation.animation import Animation from ..animation.transform import MoveToTarget from ..animation.transform import Transform diff --git a/manim/scene/scene.py b/manim/scene/scene.py index b9584a8a8d..9f1f9daca9 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1,3 +1,6 @@ +__all__ = ["Scene", "EndSceneEarlyException"] + + import inspect import random import warnings diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index 0da81db6a2..8b83f7cd7b 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -1,3 +1,6 @@ +__all__ = ["ThreeDScene", "SpecialThreeDScene"] + + from ..animation.transform import ApplyMethod from ..camera.three_d_camera import ThreeDCamera from ..constants import DEGREES diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index b285fcc7c3..5f833deee0 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -1,3 +1,6 @@ +__all__ = ["VectorScene", "LinearTransformationScene"] + + import numpy as np from ..animation.animation import Animation diff --git a/manim/scene/zoomed_scene.py b/manim/scene/zoomed_scene.py index f2060978d5..27205c8c14 100644 --- a/manim/scene/zoomed_scene.py +++ b/manim/scene/zoomed_scene.py @@ -1,3 +1,6 @@ +__all__ = ["ZoomedScene"] + + from ..animation.transform import ApplyMethod from ..camera.moving_camera import MovingCamera from ..camera.multi_camera import MultiCamera diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index c86eab5660..d9944f783e 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -1,3 +1,17 @@ +__all__ = [ + "bezier", + "partial_bezier_points", + "interpolate", + "integer_interpolate", + "mid", + "inverse_interpolate", + "match_interpolate", + "get_smooth_handle_points", + "diag_to_matrix", + "is_closed", +] + + from scipy import linalg import numpy as np diff --git a/manim/utils/color.py b/manim/utils/color.py index ebae3ddace..271d483727 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -1,3 +1,22 @@ +__all__ = [ + "color_to_rgb", + "color_to_rgba", + "rgb_to_color", + "rgba_to_color", + "rgb_to_hex", + "hex_to_rgb", + "invert_color", + "color_to_int_rgb", + "color_to_int_rgba", + "color_gradient", + "interpolate_color", + "average_color", + "random_bright_color", + "random_color", + "get_shaded_rgb", +] + + import random from colour import Color diff --git a/manim/utils/config_ops.py b/manim/utils/config_ops.py index ebbf9b9b54..4ffb46ea48 100644 --- a/manim/utils/config_ops.py +++ b/manim/utils/config_ops.py @@ -1,3 +1,14 @@ +__all__ = [ + "get_all_descendent_classes", + "filtered_locals", + "digest_config", + "merge_dicts_recursively", + "soft_dict_update", + "digest_locals", + "DictAsObject", +] + + import inspect import itertools as it diff --git a/manim/utils/debug.py b/manim/utils/debug.py index e6bfec433e..3e615d597a 100644 --- a/manim/utils/debug.py +++ b/manim/utils/debug.py @@ -1,3 +1,6 @@ +__all__ = ["print_family", "get_submobject_index_labels"] + + from ..constants import BLACK from ..mobject.numbers import Integer from ..mobject.types.vectorized_mobject import VGroup diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index b0b9069d37..2a6da11347 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -1,3 +1,11 @@ +__all__ = [ + "add_extension_if_not_present", + "guarantee_existence", + "seek_full_path_from_defaults", + "modify_atime", +] + + import os import subprocess as sp import platform @@ -32,12 +40,12 @@ def seek_full_path_from_defaults(file_name, default_dir, extensions): def modify_atime(file_path): - """Will manually change the accessed time (called `atime`) of the file, as on a lot of OS the accessed time refresh is disabled by default. + """Will manually change the accessed time (called `atime`) of the file, as on a lot of OS the accessed time refresh is disabled by default. Parameters ---------- file_path : :class:`str` - The path of the file. + The path of the file. """ os.utime(file_path, times=(time.time(), os.path.getmtime(file_path))) diff --git a/manim/utils/hashing.py b/manim/utils/hashing.py index 563dd330e0..454b9b2067 100644 --- a/manim/utils/hashing.py +++ b/manim/utils/hashing.py @@ -13,11 +13,11 @@ class CustomEncoder(json.JSONEncoder): def default(self, obj): """ This method is used to serialize objects to JSON format. - + If obj is a function, then it will return a dict with two keys : 'code', for the code source, and 'nonlocals' for all nonlocalsvalues. (including nonlocals functions, that will be serialized as this is recursive.) if obj is a np.darray, it converts it into a list. if obj is an object with __dict__ attribute, it returns its __dict__. - Else, will let the JSONEncoder do the stuff, and throw an error if the type is not suitable for JSONEncoder. + Else, will let the JSONEncoder do the stuff, and throw an error if the type is not suitable for JSONEncoder. Parameters ---------- @@ -61,7 +61,7 @@ def _encode_dict(self, obj): ---------- obj : Any The obj to be cleaned. - + Returns ------- Any @@ -92,7 +92,7 @@ def get_json(obj): Returns ------- - :class:`str` + :class:`str` The flattened object """ return json.dumps(obj, cls=CustomEncoder) @@ -136,7 +136,7 @@ def get_hash_from_play_call(camera_object, animations_list, current_mobjects_lis Returns ------- - :class:`str` + :class:`str` A string concatenation of the respective hashes of `camera_object`, `animations_list` and `current_mobjects_list`, separated by `_`. """ camera_json = get_json(get_camera_dict_for_hashing(camera_object)) diff --git a/manim/utils/images.py b/manim/utils/images.py index 6359d58d44..0e60e1dbf5 100644 --- a/manim/utils/images.py +++ b/manim/utils/images.py @@ -1,3 +1,6 @@ +__all__ = ["get_full_raster_image_path", "drag_pixels", "invert_image"] + + import numpy as np import os diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index 51995f688b..08c81f0d5a 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -1,3 +1,19 @@ +__all__ = [ + "remove_list_redundancies", + "list_update", + "list_difference_update", + "all_elements_are_instances", + "adjacent_n_tuples", + "adjacent_pairs", + "tuplify", + "stretch_array_to_length", + "make_even", + "make_even_by_cycling", + "remove_nones", + "concatenate_lists", +] + + import itertools as it import numpy as np diff --git a/manim/utils/paths.py b/manim/utils/paths.py index 861e6095b9..d71daeb3d3 100644 --- a/manim/utils/paths.py +++ b/manim/utils/paths.py @@ -1,3 +1,11 @@ +__all__ = [ + "straight_path", + "path_along_arc", + "clockwise_path", + "counterclockwise_path", +] + + import numpy as np from ..constants import OUT diff --git a/manim/utils/rate_functions.py b/manim/utils/rate_functions.py index 1dc0f4d782..1bb741ed6a 100644 --- a/manim/utils/rate_functions.py +++ b/manim/utils/rate_functions.py @@ -1,3 +1,21 @@ +__all__ = [ + "linear", + "smooth", + "rush_into", + "rush_from", + "slow_into", + "double_smooth", + "there_and_back", + "there_and_back_with_pause", + "running_start", + "not_quite_there", + "wiggle", + "squish_rate_func", + "lingering", + "exponential_decay", +] + + import numpy as np from ..utils.bezier import bezier diff --git a/manim/utils/simple_functions.py b/manim/utils/simple_functions.py index 20329e3742..dfd5583b3e 100644 --- a/manim/utils/simple_functions.py +++ b/manim/utils/simple_functions.py @@ -1,3 +1,15 @@ +__all__ = [ + "sigmoid", + "choose_using_cache", + "choose", + "get_num_args", + "get_parameters", + "clip_in_place", + "fdiv", + "binary_search", +] + + from functools import reduce import inspect import numpy as np diff --git a/manim/utils/sounds.py b/manim/utils/sounds.py index d98ffcf3d9..0f30ca9495 100644 --- a/manim/utils/sounds.py +++ b/manim/utils/sounds.py @@ -1,3 +1,11 @@ +__all__ = [ + "play_chord", + "play_error_sound", + "play_finish_sound", + "get_full_sound_file_path", +] + + import os from ..utils.file_ops import seek_full_path_from_defaults diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index e56dfa3b01..6569de2642 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -1,3 +1,32 @@ +__all__ = [ + "get_norm", + "quaternion_mult", + "quaternion_from_angle_axis", + "angle_axis_from_quaternion", + "quaternion_conjugate", + "rotate_vector", + "thick_diagonal", + "rotation_matrix", + "rotation_about_z", + "z_to_vector", + "angle_between", + "angle_of_vector", + "angle_between_vectors", + "project_along_vector", + "normalize", + "cross", + "get_unit_normal", + "compass_directions", + "complex_to_R3", + "R3_to_complex", + "complex_func_to_R3_func", + "center_of_mass", + "midpoint", + "line_intersection", + "get_winding_number", +] + + from functools import reduce import numpy as np diff --git a/manim/utils/strings.py b/manim/utils/strings.py index e32b6120e7..07a0cd79b5 100644 --- a/manim/utils/strings.py +++ b/manim/utils/strings.py @@ -1,3 +1,13 @@ +__all__ = [ + "to_camel_case", + "initials", + "camel_case_initials", + "complex_string", + "split_string_to_isolate_substrings", + "split_string_list_to_isolate_substrings", +] + + import itertools as it import re import string diff --git a/manim/utils/tex.py b/manim/utils/tex.py index 0c4217644a..a4f72b32fd 100644 --- a/manim/utils/tex.py +++ b/manim/utils/tex.py @@ -1,3 +1,6 @@ +__all__ = ["TexTemplateFromFile", "TexTemplate"] + + import os from ..utils.config_ops import digest_config From ce457e899538bc0ce0cd3bb2b267d09ff73db037 Mon Sep 17 00:00:00 2001 From: leotrs Date: Fri, 28 Aug 2020 00:16:12 -0400 Subject: [PATCH 2/8] add some that I missed --- manim/__init__.py | 4 +++- manim/camera/multi_camera.py | 3 +++ manim/mobject/matrix.py | 11 ++++++++++- manim/mobject/svg/code_mobject.py | 7 ++++++- manim/mobject/svg/svg_mobject.py | 2 +- manim/mobject/vector_field.py | 6 ++++++ manim/scene/scene_file_writer.py | 3 +++ manim/utils/file_ops.py | 1 + 8 files changed, 33 insertions(+), 4 deletions(-) diff --git a/manim/__init__.py b/manim/__init__.py index a32a148c57..0436ae580d 100644 --- a/manim/__init__.py +++ b/manim/__init__.py @@ -6,7 +6,7 @@ # global config dict is called 'config', just like the module itself. That's # why we import the module first with a different name, and then the dict. from . import config as _config -from .config import config, file_writer_config +from .config import config, file_writer_config, camera_config from .constants import * @@ -29,6 +29,7 @@ from .camera.mapping_camera import * from .camera.moving_camera import * from .camera.three_d_camera import * +from .camera.multi_camera import * from .mobject.coordinate_systems import * from .mobject.changing import * @@ -64,6 +65,7 @@ from .scene.three_d_scene import * from .scene.vector_space_scene import * from .scene.zoomed_scene import * +from .scene.scene_file_writer import * from .utils.bezier import * from .utils.color import * diff --git a/manim/camera/multi_camera.py b/manim/camera/multi_camera.py index 1f32dd3c5e..bc5dc2e71e 100644 --- a/manim/camera/multi_camera.py +++ b/manim/camera/multi_camera.py @@ -1,3 +1,6 @@ +__all__ = ["MultiCamera"] + + from ..camera.moving_camera import MovingCamera from ..utils.iterables import list_difference_update diff --git a/manim/mobject/matrix.py b/manim/mobject/matrix.py index c58623edce..30e7db90ed 100644 --- a/manim/mobject/matrix.py +++ b/manim/mobject/matrix.py @@ -1,4 +1,13 @@ -__all__ = ["Matrix", "DecimalMatrix", "IntegerMatrix", "MobjectMatrix"] +__all__ = [ + "Matrix", + "DecimalMatrix", + "IntegerMatrix", + "MobjectMatrix", + "matrix_to_tex_string", + "matrix_to_mobject", + "vector_coordinate_label", + "get_det_text", +] import numpy as np diff --git a/manim/mobject/svg/code_mobject.py b/manim/mobject/svg/code_mobject.py index 500beb88ae..86ba413de2 100644 --- a/manim/mobject/svg/code_mobject.py +++ b/manim/mobject/svg/code_mobject.py @@ -17,7 +17,12 @@ """ -__all__ = ["Code"] +__all__ = [ + "Code", + "hilite_me", + "get_default_style", + "insert_line_numbers", +] import html diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index 71f3ffc426..707bbaf22a 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -1,4 +1,4 @@ -__all__ = ["SVGMobject", "VMobjectFromSVGPathstring"] +__all__ = ["SVGMobject", "VMobjectFromSVGPathstring", "string_to_numbers"] import itertools as it diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 513632b3a3..48971ec716 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -3,6 +3,12 @@ "StreamLines", "ShowPassingFlashWithThinningStrokeWidth", "AnimatedStreamLines", + "get_colored_background_image", + "get_rgb_gradient_function", + "get_color_field_image_file", + "move_along_vector_field", + "move_submobjects_along_vector_field", + "move_points_along_vector_field", ] diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index bd5342b66c..6f835fbbb0 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -1,3 +1,6 @@ +__all__ = ["SceneFileWriter"] + + import numpy as np from pydub import AudioSegment import shutil diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index 2a6da11347..44e359ed71 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -3,6 +3,7 @@ "guarantee_existence", "seek_full_path_from_defaults", "modify_atime", + "open_file", ] From e5fb8acd3a6e2e0544551b72f6d7de838aaaedda Mon Sep 17 00:00:00 2001 From: leotrs Date: Fri, 28 Aug 2020 18:07:13 -0400 Subject: [PATCH 3/8] move all the config stuff into a new config/ folder and make it a subpackage by adding a config/__init__.py file. This will make it easier to continue refactoring the config system later --- manim/__init__.py | 8 ++------ manim/__main__.py | 10 ++++------ manim/animation/fading.py | 2 +- manim/animation/indication.py | 2 +- manim/camera/camera.py | 3 +-- manim/camera/moving_camera.py | 2 +- manim/camera/three_d_camera.py | 2 +- manim/config/__init__.py | 9 +++++++++ manim/{utils => config}/cfg_subcmds.py | 2 +- manim/{ => config}/config.py | 13 ++++++++----- manim/{utils => config}/config_utils.py | 20 +++++++++++--------- manim/{ => config}/default.cfg | 0 manim/{ => config}/logger.py | 7 ++++++- manim/mobject/coordinate_systems.py | 2 +- manim/mobject/frame.py | 2 +- manim/mobject/functions.py | 2 +- manim/mobject/mobject.py | 2 +- manim/mobject/number_line.py | 2 +- manim/mobject/svg/drawings.py | 2 +- manim/mobject/svg/tex_mobject.py | 2 +- manim/mobject/svg/text_mobject.py | 3 +-- manim/mobject/vector_field.py | 3 +-- manim/scene/graph_scene.py | 3 ++- manim/scene/scene.py | 3 +-- manim/scene/scene_file_writer.py | 3 +-- manim/scene/three_d_scene.py | 2 +- manim/scene/vector_space_scene.py | 4 ++-- manim/utils/hashing.py | 2 +- manim/utils/tex_file_writing.py | 4 +--- tests/test_imports.py | 11 +++++++++++ 30 files changed, 75 insertions(+), 57 deletions(-) create mode 100644 manim/config/__init__.py rename manim/{utils => config}/cfg_subcmds.py (99%) rename manim/{ => config}/config.py (96%) rename manim/{utils => config}/config_utils.py (99%) rename manim/{ => config}/default.cfg (100%) rename manim/{ => config}/logger.py (96%) diff --git a/manim/__init__.py b/manim/__init__.py index 141134bcf9..dd1bf9c7ea 100644 --- a/manim/__init__.py +++ b/manim/__init__.py @@ -1,12 +1,8 @@ #!/usr/bin/env python # Importing the config module should be the first thing we do, since other -# modules depend on the global config dict for initialization. Note that the -# global config dict is called 'config', just like the module itself. That's -# why we import the module first with a different name, and then the dict. -from . import config as _config - -from .config import config, file_writer_config, camera_config, tempconfig +# modules depend on the global config dict for initialization. +from .config import * from .constants import * diff --git a/manim/__main__.py b/manim/__main__.py index 4f02758656..14d524e060 100644 --- a/manim/__main__.py +++ b/manim/__main__.py @@ -8,14 +8,12 @@ import importlib.util import types -from .config import file_writer_config, args -from .utils import cfg_subcmds +from . import constants, logger, console, file_writer_config +from .config.config import args +from .config import cfg_subcmds from .scene.scene import Scene -from .utils.sounds import play_error_sound -from .utils.sounds import play_finish_sound +from .utils.sounds import play_error_sound, play_finish_sound from .utils.file_ops import open_file as open_media_file -from . import constants -from .logger import logger, console def open_file_if_needed(file_writer): diff --git a/manim/animation/fading.py b/manim/animation/fading.py index 362f01f312..1e485435ce 100644 --- a/manim/animation/fading.py +++ b/manim/animation/fading.py @@ -23,7 +23,7 @@ from ..mobject.types.vectorized_mobject import VMobject from ..utils.bezier import interpolate from ..utils.rate_functions import there_and_back -from ..logger import logger +from .. import logger DEFAULT_FADE_LAG_RATIO = 0 diff --git a/manim/animation/indication.py b/manim/animation/indication.py index 1cf3e1bfbc..2e1b03e147 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -18,8 +18,8 @@ import numpy as np +from .. import config from ..constants import * -from ..config import config from ..animation.animation import Animation from ..animation.movement import Homotopy from ..animation.composition import AnimationGroup diff --git a/manim/camera/camera.py b/manim/camera/camera.py index 75bf48c2f8..2a5fbb419a 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -15,9 +15,8 @@ import cairo import numpy as np +from .. import logger, config, camera_config from ..constants import * -from ..config import config, camera_config -from ..logger import logger from ..mobject.types.image_mobject import AbstractImageMobject from ..mobject.mobject import Mobject from ..mobject.types.point_cloud_mobject import PMobject diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index 53bdadaa93..56304064fb 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -1,8 +1,8 @@ __all__ = ["CameraFrame", "MovingCamera"] +from .. import config from ..camera.camera import Camera -from ..config import config from ..constants import ORIGIN, WHITE from ..mobject.frame import ScreenRectangle from ..mobject.types.vectorized_mobject import VGroup diff --git a/manim/camera/three_d_camera.py b/manim/camera/three_d_camera.py index c5dd12c60f..b6ea003134 100644 --- a/manim/camera/three_d_camera.py +++ b/manim/camera/three_d_camera.py @@ -3,9 +3,9 @@ import numpy as np +from .. import config from ..camera.camera import Camera from ..constants import * -from ..config import config 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 diff --git a/manim/config/__init__.py b/manim/config/__init__.py new file mode 100644 index 0000000000..2711c21b0a --- /dev/null +++ b/manim/config/__init__.py @@ -0,0 +1,9 @@ +# Note that the global config dict is called 'config', just like the module +# itself. That's why we import the module first with a different name +# (_config), and then the dict. +from . import config as _config +from .config import config, tempconfig, file_writer_config, camera_config +from .logger import logger, console + +__all__ = ["_config", "config", "tempconfig", "file_writer_config", + "camera_config", "logger", "console"] diff --git a/manim/utils/cfg_subcmds.py b/manim/config/cfg_subcmds.py similarity index 99% rename from manim/utils/cfg_subcmds.py rename to manim/config/cfg_subcmds.py index 4f23e5dae9..f5e457f148 100644 --- a/manim/utils/cfg_subcmds.py +++ b/manim/config/cfg_subcmds.py @@ -11,7 +11,7 @@ from ast import literal_eval from .config_utils import _run_config, _paths_config_file, finalized_configs_dict -from .file_ops import guarantee_existence, open_file +from ..utils.file_ops import guarantee_existence, open_file from rich.console import Console from rich.style import Style diff --git a/manim/config.py b/manim/config/config.py similarity index 96% rename from manim/config.py rename to manim/config/config.py index 01f0adbc8f..60f1cfd4b1 100644 --- a/manim/config.py +++ b/manim/config/config.py @@ -4,19 +4,22 @@ Process the manim.cfg file and the command line arguments into a single config object. """ + + +__all__ = ["file_writer_config", "config", "camera_config", "tempconfig"] + + import os import sys from contextlib import contextmanager import colour -from . import constants -from .utils.config_utils import _run_config, _init_dirs, _from_command_line +from .. import constants +from .config_utils import _run_config, _init_dirs, _from_command_line from .logger import logger -from .utils.tex import TexTemplate, TexTemplateFromFile - -__all__ = ["file_writer_config", "config", "camera_config", "tempconfig"] +from ..utils.tex import TexTemplate, TexTemplateFromFile config = None diff --git a/manim/utils/config_utils.py b/manim/config/config_utils.py similarity index 99% rename from manim/utils/config_utils.py rename to manim/config/config_utils.py index 7a1e1d562a..37b265032a 100644 --- a/manim/utils/config_utils.py +++ b/manim/config/config_utils.py @@ -6,6 +6,15 @@ """ + +__all__ = [ + "_run_config", + "_paths_config_file", + "_from_command_line", + "finalized_configs_dict", +] + + import argparse import configparser import os @@ -14,14 +23,7 @@ import colour from .. import constants -from .tex import TexTemplate, TexTemplateFromFile - -__all__ = [ - "_run_config", - "_paths_config_file", - "_from_command_line", - "finalized_configs_dict", -] +from ..utils.tex import TexTemplate, TexTemplateFromFile def _parse_file_writer_config(config_parser, args): @@ -459,7 +461,7 @@ def _from_dunder_main(): def _paths_config_file(): library_wide = os.path.abspath( - os.path.join(os.path.dirname(__file__), "..", "default.cfg") + os.path.join(os.path.dirname(__file__), "default.cfg") ) if sys.platform.startswith("win32"): user_wide = os.path.expanduser( diff --git a/manim/default.cfg b/manim/config/default.cfg similarity index 100% rename from manim/default.cfg rename to manim/config/default.cfg diff --git a/manim/logger.py b/manim/config/logger.py similarity index 96% rename from manim/logger.py rename to manim/config/logger.py index c83745b4a8..c1b891243d 100644 --- a/manim/logger.py +++ b/manim/config/logger.py @@ -5,6 +5,11 @@ This library uses rich for coloured log outputs. """ + + +__all__ = ['logger', 'console'] + + import configparser import logging @@ -14,7 +19,7 @@ from rich import print as printf from rich import errors, color -from .utils.config_utils import _run_config +from .config_utils import _run_config def parse_theme(fp): diff --git a/manim/mobject/coordinate_systems.py b/manim/mobject/coordinate_systems.py index e3c89d3655..0bed1d4c2d 100644 --- a/manim/mobject/coordinate_systems.py +++ b/manim/mobject/coordinate_systems.py @@ -4,8 +4,8 @@ import numpy as np import numbers +from .. import config from ..constants import * -from ..config import config from ..mobject.functions import ParametricFunction from ..mobject.geometry import Arrow from ..mobject.geometry import Line diff --git a/manim/mobject/frame.py b/manim/mobject/frame.py index d2a8ccd0cc..489b385737 100644 --- a/manim/mobject/frame.py +++ b/manim/mobject/frame.py @@ -6,8 +6,8 @@ ] +from .. import config from ..constants import * -from ..config import config from ..mobject.geometry import Rectangle from ..utils.config_ops import digest_config diff --git a/manim/mobject/functions.py b/manim/mobject/functions.py index 68a5ebbeec..902966ce4c 100644 --- a/manim/mobject/functions.py +++ b/manim/mobject/functions.py @@ -1,8 +1,8 @@ __all__ = ["ParametricFunction", "FunctionGraph"] +from .. import config from ..constants import * -from ..config import config from ..mobject.types.vectorized_mobject import VMobject from ..utils.config_ops import digest_config import math diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 66f4292637..b311e3b452 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -15,8 +15,8 @@ from colour import Color import numpy as np +from .. import config from ..constants import * -from ..config import config from ..container import Container from ..utils.color import color_gradient from ..utils.color import interpolate_color diff --git a/manim/mobject/number_line.py b/manim/mobject/number_line.py index 0d827df261..1c148d0729 100644 --- a/manim/mobject/number_line.py +++ b/manim/mobject/number_line.py @@ -6,8 +6,8 @@ import operator as op +from .. import config from ..constants import * -from ..config import config from ..mobject.geometry import Line from ..mobject.numbers import DecimalNumber from ..mobject.types.vectorized_mobject import VGroup diff --git a/manim/mobject/svg/drawings.py b/manim/mobject/svg/drawings.py index 95614fddbc..2bc9d870c9 100644 --- a/manim/mobject/svg/drawings.py +++ b/manim/mobject/svg/drawings.py @@ -28,10 +28,10 @@ import itertools as it import string +from ... import config from ...animation.animation import Animation from ...animation.rotation import Rotating from ...constants import * -from ...config import config from ...mobject.geometry import AnnularSector from ...mobject.geometry import Arc from ...mobject.geometry import Circle diff --git a/manim/mobject/svg/tex_mobject.py b/manim/mobject/svg/tex_mobject.py index 9f6afa3155..dc265e394e 100644 --- a/manim/mobject/svg/tex_mobject.py +++ b/manim/mobject/svg/tex_mobject.py @@ -12,8 +12,8 @@ from functools import reduce import operator as op +from ... import config from ...constants import * -from ...config import config from ...mobject.geometry import Line from ...mobject.svg.svg_mobject import SVGMobject from ...mobject.svg.svg_mobject import VMobjectFromSVGPathstring diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 6edfca9754..c161d5d1bf 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -7,10 +7,9 @@ import hashlib import cairo +from ... import config, file_writer_config, logger from ...constants import * -from ...config import config, file_writer_config from ...container import Container -from ...logger import logger from ...mobject.geometry import Dot, Rectangle from ...mobject.svg.svg_mobject import SVGMobject from ...mobject.types.vectorized_mobject import VGroup diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 48971ec716..f9078b2264 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -18,9 +18,8 @@ from PIL import Image import random +from .. import config, logger from ..constants import * -from ..config import config -from ..logger import logger from ..animation.composition import AnimationGroup from ..animation.indication import ShowPassingFlash from ..mobject.geometry import Vector diff --git a/manim/scene/graph_scene.py b/manim/scene/graph_scene.py index 67fd95daf9..68789b5df8 100644 --- a/manim/scene/graph_scene.py +++ b/manim/scene/graph_scene.py @@ -1,8 +1,9 @@ __all__ = ["GraphScene"] + import itertools as it -from ..config import config +from .. import config from ..animation.creation import Write, DrawBorderThenFill, ShowCreation from ..animation.transform import Transform from ..animation.update import UpdateFromAlphaFunc diff --git a/manim/scene/scene.py b/manim/scene/scene.py index d3ad0f329a..1ca43e09a1 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -13,13 +13,12 @@ from tqdm import tqdm as ProgressDisplay import numpy as np +from .. import camera_config, file_writer_config, logger from ..animation.animation import Animation from ..animation.transform import MoveToTarget, ApplyMethod from ..camera.camera import Camera from ..constants import * -from ..config import camera_config, file_writer_config from ..container import Container -from ..logger import logger from ..mobject.mobject import Mobject from ..scene.scene_file_writer import SceneFileWriter from ..utils.iterables import list_update diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 6f835fbbb0..eb9e8b7289 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -11,9 +11,8 @@ import datetime from PIL import Image +from .. import file_writer_config, logger, console from ..constants import FFMPEG_BIN, GIF_FILE_EXTENSION -from ..config import file_writer_config -from ..logger import logger, console from ..utils.config_ops import digest_config from ..utils.file_ops import guarantee_existence from ..utils.file_ops import add_extension_if_not_present diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index 8b83f7cd7b..6f8cfc4f4f 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -1,10 +1,10 @@ __all__ = ["ThreeDScene", "SpecialThreeDScene"] +from .. import config from ..animation.transform import ApplyMethod from ..camera.three_d_camera import ThreeDCamera from ..constants import DEGREES -from ..config import config from ..mobject.coordinate_systems import ThreeDAxes from ..mobject.geometry import Line from ..mobject.three_dimensions import Sphere diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index 5f833deee0..8d96d3ad64 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -3,6 +3,8 @@ import numpy as np +from .. import config +from ..constants import * from ..animation.animation import Animation from ..animation.creation import ShowCreation from ..animation.creation import Write @@ -11,8 +13,6 @@ from ..animation.transform import ApplyFunction from ..animation.transform import ApplyPointwiseFunction from ..animation.transform import Transform -from ..constants import * -from ..config import config from ..mobject.coordinate_systems import Axes from ..mobject.coordinate_systems import NumberPlane from ..mobject.geometry import Arrow diff --git a/manim/utils/hashing.py b/manim/utils/hashing.py index 454b9b2067..4946f6f881 100644 --- a/manim/utils/hashing.py +++ b/manim/utils/hashing.py @@ -6,7 +6,7 @@ import numpy as np from types import ModuleType -from ..logger import logger +from .. import logger class CustomEncoder(json.JSONEncoder): diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index b736c4f926..fefdd58214 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -2,9 +2,7 @@ import hashlib from pathlib import Path -from .. import constants -from ..config import file_writer_config, config -from ..logger import logger +from .. import file_writer_config, config, logger def tex_hash(expression): diff --git a/tests/test_imports.py b/tests/test_imports.py index 55ed89a48a..4560d4e987 100644 --- a/tests/test_imports.py +++ b/tests/test_imports.py @@ -1,2 +1,13 @@ +from types import ModuleType + def test_import(): + # check that the package imports without errors import manim + + # check that we have access to both the module and dict + from manim import _config, config + assert isinstance(_config, ModuleType) + assert isinstance(config, dict) + + # check that we have access to the logger + from manim import logger, console From c08b292dae4ba3dab8097020adb8e0dac58ba403 Mon Sep 17 00:00:00 2001 From: leotrs Date: Sun, 30 Aug 2020 21:46:54 -0400 Subject: [PATCH 4/8] Make it so that coordinate_system.py never uses config at the time of class definition. Also add tests for this fact in tests/test_coordinate_system.py. --- manim/mobject/coordinate_systems.py | 22 ++++++++--------- tests/test_coordinate_system.py | 38 +++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 tests/test_coordinate_system.py diff --git a/manim/mobject/coordinate_systems.py b/manim/mobject/coordinate_systems.py index 0bed1d4c2d..c5fd38e491 100644 --- a/manim/mobject/coordinate_systems.py +++ b/manim/mobject/coordinate_systems.py @@ -25,13 +25,12 @@ class CoordinateSystem: Abstract class for Axes and NumberPlane """ - CONFIG = { - "dimension": 2, - "x_min": -config["frame_x_radius"], - "x_max": config["frame_x_radius"], - "y_min": -config["frame_y_radius"], - "y_max": config["frame_y_radius"], - } + def __init__(self, dim=2): + self.dimension = dim + self.x_min = -config["frame_x_radius"] + self.x_max = config["frame_x_radius"] + self.y_min = -config["frame_y_radius"] + self.y_max = config["frame_y_radius"] def coords_to_point(self, *coords): raise Exception("Not implemented") @@ -130,16 +129,17 @@ class Axes(VGroup, CoordinateSystem): "exclude_zero_from_default_numbers": True, }, "x_axis_config": {}, - "y_axis_config": {"label_direction": LEFT,}, + "y_axis_config": {"label_direction": LEFT}, "center_point": ORIGIN, } def __init__(self, **kwargs): + CoordinateSystem.__init__(self, **kwargs) VGroup.__init__(self, **kwargs) self.x_axis = self.create_axis(self.x_min, self.x_max, self.x_axis_config) self.y_axis = self.create_axis(self.y_min, self.y_max, self.y_axis_config) self.y_axis.rotate(90 * DEGREES, about_point=ORIGIN) - # Add as a separate group incase various other + # Add as a separate group in case various other # mobjects are added to self, as for example in # NumberPlane below self.axes = VGroup(self.x_axis, self.y_axis) @@ -189,7 +189,6 @@ def add_coordinates(self, x_vals=None, y_vals=None): class ThreeDAxes(Axes): CONFIG = { - "dimension": 3, "x_min": -5.5, "x_max": 5.5, "y_min": -5.5, @@ -204,6 +203,7 @@ class ThreeDAxes(Axes): def __init__(self, **kwargs): Axes.__init__(self, **kwargs) + self.dimension = 3 z_axis = self.z_axis = self.create_axis( self.z_min, self.z_max, self.z_axis_config ) @@ -245,7 +245,7 @@ class NumberPlane(Axes): "label_direction": DR, "number_scale_val": 0.5, }, - "y_axis_config": {"label_direction": DR,}, + "y_axis_config": {"label_direction": DR}, "background_line_style": { "stroke_color": BLUE_D, "stroke_width": 2, diff --git a/tests/test_coordinate_system.py b/tests/test_coordinate_system.py new file mode 100644 index 0000000000..2c8bbd9b95 --- /dev/null +++ b/tests/test_coordinate_system.py @@ -0,0 +1,38 @@ +import pytest +import numpy as np +from manim import CoordinateSystem as CS +from manim import Axes, ThreeDAxes, NumberPlane, ComplexPlane +from manim import config, tempconfig, ORIGIN, LEFT + + +def test_initial_config(): + """Check that all attributes are defined properly from the config.""" + cs = CS() + assert cs.x_min == -config['frame_x_radius'] + assert cs.x_max == config['frame_x_radius'] + assert cs.y_min == -config['frame_y_radius'] + assert cs.y_max == config['frame_y_radius'] + + ax = Axes() + assert np.allclose(ax.center_point, ORIGIN) + assert np.allclose(ax.y_axis_config['label_direction'], LEFT) + + with tempconfig({'frame_x_radius': 100, 'frame_y_radius': 200}): + cs = CS() + assert cs.x_min == -100 + assert cs.x_max == 100 + assert cs.y_min == -200 + assert cs.y_max == 200 + +def test_dimension(): + """Check that objects have the correct dimension.""" + assert Axes().dimension == 2 + assert NumberPlane().dimension == 2 + assert ComplexPlane().dimension == 2 + assert ThreeDAxes().dimension == 3 + + +def test_abstract_base_class(): + """Check that CoordinateSystem has some abstract methods.""" + with pytest.raises(Exception): + CS().get_axes() From 5e9f4a00a57d9fde66f6e9f6dbd652093c7292d3 Mon Sep 17 00:00:00 2001 From: leotrs Date: Sun, 30 Aug 2020 21:58:01 -0400 Subject: [PATCH 5/8] make several modules NOT use config at the time of class definition --- manim/camera/moving_camera.py | 6 +++--- manim/camera/three_d_camera.py | 2 +- manim/mobject/frame.py | 6 +++--- manim/mobject/functions.py | 4 ++-- manim/mobject/svg/drawings.py | 2 +- manim/mobject/svg/tex_mobject.py | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index 56304064fb..ff7f82be3d 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -12,13 +12,13 @@ # TODO, think about how to incorporate perspective class CameraFrame(VGroup): CONFIG = { - "width": config["frame_width"], - "height": config["frame_height"], "center": ORIGIN, } def __init__(self, **kwargs): - pass + VGroup.__init__(self, **kwargs) + self.width = config["frame_width"] + self.height = config["frame_height"] class MovingCamera(Camera): diff --git a/manim/camera/three_d_camera.py b/manim/camera/three_d_camera.py index b6ea003134..3fe133d70a 100644 --- a/manim/camera/three_d_camera.py +++ b/manim/camera/three_d_camera.py @@ -29,7 +29,6 @@ class ThreeDCamera(Camera): "light_source_start_point": 9 * DOWN + 7 * LEFT + 10 * OUT, "should_apply_shading": True, "exponential_projection": False, - "max_allowable_norm": 3 * config["frame_width"], } def __init__(self, *args, **kwargs): @@ -43,6 +42,7 @@ def __init__(self, *args, **kwargs): Any keyword argument of Camera. """ Camera.__init__(self, *args, **kwargs) + self.max_allowable_norm = 3 * config["frame_width"] self.phi_tracker = ValueTracker(self.phi) self.theta_tracker = ValueTracker(self.theta) self.distance_tracker = ValueTracker(self.distance) diff --git a/manim/mobject/frame.py b/manim/mobject/frame.py index 489b385737..a1e7695e7c 100644 --- a/manim/mobject/frame.py +++ b/manim/mobject/frame.py @@ -21,9 +21,9 @@ def __init__(self, **kwargs): class FullScreenRectangle(ScreenRectangle): - CONFIG = { - "height": config["frame_height"], - } + def __init__(self, **kwargs): + ScreenRectangle.__init__(self, **kwargs) + self.set_height(config["frame_height"]) class FullScreenFadeRectangle(FullScreenRectangle): diff --git a/manim/mobject/functions.py b/manim/mobject/functions.py index 902966ce4c..8776eaf744 100644 --- a/manim/mobject/functions.py +++ b/manim/mobject/functions.py @@ -80,12 +80,12 @@ def generate_points(self): class FunctionGraph(ParametricFunction): CONFIG = { "color": YELLOW, - "x_min": -config["frame_x_radius"], - "x_max": config["frame_x_radius"], } def __init__(self, function, **kwargs): digest_config(self, kwargs) + self.x_min = -config["frame_x_radius"] + self.x_max = config["frame_x_radius"] self.parametric_function = lambda t: np.array([t, function(t), 0]) ParametricFunction.__init__( self, self.parametric_function, t_min=self.x_min, t_max=self.x_max, **kwargs diff --git a/manim/mobject/svg/drawings.py b/manim/mobject/svg/drawings.py index 2bc9d870c9..1665074eb5 100644 --- a/manim/mobject/svg/drawings.py +++ b/manim/mobject/svg/drawings.py @@ -299,11 +299,11 @@ def __init__(self, **kwargs): class VideoIcon(SVGMobject): CONFIG = { "file_name": "video_icon", - "width": config["frame_width"] / 12.0, } def __init__(self, **kwargs): SVGMobject.__init__(self, **kwargs) + self.width = config["frame_width"] / 12.0 self.center() self.set_width(self.width) self.set_stroke(color=WHITE, width=0) diff --git a/manim/mobject/svg/tex_mobject.py b/manim/mobject/svg/tex_mobject.py index dc265e394e..50deb2b3a3 100644 --- a/manim/mobject/svg/tex_mobject.py +++ b/manim/mobject/svg/tex_mobject.py @@ -305,7 +305,6 @@ class Title(TextMobject): CONFIG = { "scale_factor": 1, "include_underline": True, - "underline_width": config["frame_width"] - 2, # This will override underline_width "match_underline_width_to_text": False, "underline_buff": MED_SMALL_BUFF, @@ -313,6 +312,7 @@ class Title(TextMobject): def __init__(self, *text_parts, **kwargs): TextMobject.__init__(self, *text_parts, **kwargs) + self.underline_width = config["frame_width"] - 2 self.scale(self.scale_factor) self.to_edge(UP) if self.include_underline: From 4b8e295f12eb600f4149b1e813dbef24b354070b Mon Sep 17 00:00:00 2001 From: leotrs Date: Sun, 30 Aug 2020 22:20:19 -0400 Subject: [PATCH 6/8] Make even more modules NOT use config at time of class definition. Also, fix mobject which was using the deprecated config[VIDEO_DIR] --- manim/mobject/mobject.py | 4 ++-- manim/mobject/number_line.py | 11 +++++++---- manim/mobject/vector_field.py | 14 ++++++-------- manim/scene/three_d_scene.py | 2 +- manim/scene/vector_space_scene.py | 17 ++++++++++------- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index b311e3b452..34aac94114 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -15,7 +15,7 @@ from colour import Color import numpy as np -from .. import config +from .. import config, file_writer_config from ..constants import * from ..container import Container from ..utils.color import color_gradient @@ -177,7 +177,7 @@ def show(self, camera=None): def save_image(self, name=None): self.get_image().save( - os.path.join(config["VIDEO_DIR"], (name or str(self)) + ".png") + os.path.join(file_writer_config["video_dir"], (name or str(self)) + ".png") ) def copy(self): diff --git a/manim/mobject/number_line.py b/manim/mobject/number_line.py index 1c148d0729..efedc61bac 100644 --- a/manim/mobject/number_line.py +++ b/manim/mobject/number_line.py @@ -21,8 +21,6 @@ class NumberLine(Line): CONFIG = { "color": LIGHT_GREY, - "x_min": -config["frame_x_radius"], - "x_max": config["frame_x_radius"], "unit_size": 1, "include_ticks": True, "tick_size": 0.1, @@ -50,6 +48,8 @@ class NumberLine(Line): def __init__(self, **kwargs): digest_config(self, kwargs) + self.x_min = -config["frame_x_radius"] + self.x_max = config["frame_x_radius"] start = self.unit_size * self.x_min * RIGHT end = self.unit_size * self.x_max * RIGHT Line.__init__( @@ -180,11 +180,14 @@ def add_numbers(self, *numbers, **kwargs): class UnitInterval(NumberLine): CONFIG = { - "x_min": 0, - "x_max": 1, "unit_size": 6, "tick_frequency": 0.1, "numbers_with_elongated_ticks": [0, 1], "number_at_center": 0.5, "decimal_number_config": {"num_decimal_places": 1,}, } + + def __init__(self, **kwargs): + NumberLine.__init__(self, **kwargs) + self.x_min = 0 + self.x_max = 1 diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index f9078b2264..890f01ebbb 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -41,10 +41,8 @@ def get_colored_background_image( - scalar_field_func, - number_to_rgb_func, - pixel_height=config["pixel_height"], - pixel_width=config["pixel_width"], + scalar_field_func, + number_to_rgb_func, ): ph = config["pixel_height"] pw = config["pixel_width"] @@ -139,10 +137,6 @@ class VectorField(VGroup): CONFIG = { "delta_x": 0.5, "delta_y": 0.5, - "x_min": int(np.floor(-config["frame_width"] / 2)), - "x_max": int(np.ceil(config["frame_width"] / 2)), - "y_min": int(np.floor(-config["frame_height"] / 2)), - "y_max": int(np.ceil(config["frame_height"] / 2)), "min_magnitude": 0, "max_magnitude": 2, "colors": DEFAULT_SCALAR_FIELD_COLORS, @@ -154,6 +148,10 @@ class VectorField(VGroup): def __init__(self, func, **kwargs): VGroup.__init__(self, **kwargs) + self.x_min = int(np.floor(-config["frame_width"] / 2)) + self.x_max = int(np.ceil(config["frame_width"] / 2)) + self.y_min = int(np.floor(-config["frame_height"] / 2)) + self.y_max = int(np.ceil(config["frame_height"] / 2)) self.func = func self.rgb_gradient_function = get_rgb_gradient_function( self.min_magnitude, self.max_magnitude, self.colors, flip_alphas=False diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index 6f8cfc4f4f..a1b9be8117 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -302,7 +302,7 @@ class SpecialThreeDScene(ThreeDScene): def __init__(self, **kwargs): digest_config(self, kwargs) - if self.camera_config["pixel_width"] == config["CAMERA_CONFIG"]["PIXEL_WIDTH"]: + if self.camera_config["pixel_width"] == config["pixel_width"]: config = {} else: config = self.low_quality_config diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index 8d96d3ad64..29fda9c052 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -508,13 +508,6 @@ class LinearTransformationScene(VectorScene): CONFIG = { "include_background_plane": True, "include_foreground_plane": True, - "foreground_plane_kwargs": { - "x_max": config["frame_width"] / 2, - "x_min": -config["frame_width"] / 2, - "y_max": config["frame_width"] / 2, - "y_min": -config["frame_width"] / 2, - "faded_line_ratio": 0, - }, "background_plane_kwargs": { "color": GREY, "axis_config": {"stroke_color": LIGHT_GREY,}, @@ -530,6 +523,16 @@ class LinearTransformationScene(VectorScene): "t_matrix": [[3, 0], [1, 2]], } + def __init__(self, **kwargs): + VectorScene.__init__(self, **kwargs) + self.foreground_plane_kwargs = { + "x_max": config["frame_width"] / 2, + "x_min": -config["frame_width"] / 2, + "y_max": config["frame_width"] / 2, + "y_min": -config["frame_width"] / 2, + "faded_line_ratio": 0, + } + def setup(self): # The has_already_setup attr is to not break all the old Scenes if hasattr(self, "has_already_setup"): From a35d282749312d95c69b9b09c13ffcc9140366b2 Mon Sep 17 00:00:00 2001 From: leotrs Date: Tue, 1 Sep 2020 23:33:54 -0400 Subject: [PATCH 7/8] make the tests pass. All of this mess should be reverted once CONFIG is deprecated --- manim/mobject/coordinate_systems.py | 21 +++++++++++++-------- manim/mobject/number_line.py | 2 +- tests/test_graphical_units/test_graph.py | 9 +++++---- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/manim/mobject/coordinate_systems.py b/manim/mobject/coordinate_systems.py index c5fd38e491..8b1234d46b 100644 --- a/manim/mobject/coordinate_systems.py +++ b/manim/mobject/coordinate_systems.py @@ -27,10 +27,14 @@ class CoordinateSystem: def __init__(self, dim=2): self.dimension = dim - self.x_min = -config["frame_x_radius"] - self.x_max = config["frame_x_radius"] - self.y_min = -config["frame_y_radius"] - self.y_max = config["frame_y_radius"] + if not hasattr(self, 'x_min'): + self.x_min = -config["frame_x_radius"] + if not hasattr(self, 'x_max'): + self.x_max = config["frame_x_radius"] + if not hasattr(self, 'y_min'): + self.y_min = -config["frame_y_radius"] + if not hasattr(self, 'y_max'): + self.y_max = config["frame_y_radius"] def coords_to_point(self, *coords): raise Exception("Not implemented") @@ -189,10 +193,7 @@ def add_coordinates(self, x_vals=None, y_vals=None): class ThreeDAxes(Axes): CONFIG = { - "x_min": -5.5, - "x_max": 5.5, - "y_min": -5.5, - "y_max": 5.5, + "z_axis_config": {}, "z_min": -3.5, "z_max": 3.5, @@ -202,6 +203,10 @@ class ThreeDAxes(Axes): } def __init__(self, **kwargs): + self.x_min = -5.5 + self.x_max = 5.5 + self.y_min = -5.5 + self.y_max = 5.5 Axes.__init__(self, **kwargs) self.dimension = 3 z_axis = self.z_axis = self.create_axis( diff --git a/manim/mobject/number_line.py b/manim/mobject/number_line.py index efedc61bac..76c231f3d6 100644 --- a/manim/mobject/number_line.py +++ b/manim/mobject/number_line.py @@ -47,9 +47,9 @@ class NumberLine(Line): } def __init__(self, **kwargs): - digest_config(self, kwargs) self.x_min = -config["frame_x_radius"] self.x_max = config["frame_x_radius"] + digest_config(self, kwargs) start = self.unit_size * self.x_min * RIGHT end = self.unit_size * self.x_max * RIGHT Line.__init__( diff --git a/tests/test_graphical_units/test_graph.py b/tests/test_graphical_units/test_graph.py index 5dfac1841c..9b14f5b3f6 100644 --- a/tests/test_graphical_units/test_graph.py +++ b/tests/test_graphical_units/test_graph.py @@ -7,10 +7,6 @@ class PlotFunctions(GraphScene): CONFIG = { - "x_min": -10, - "x_max": 10.3, - "y_min": -1.5, - "y_max": 1.5, "graph_origin": ORIGIN, "function_color": RED, "axes_color": GREEN, @@ -18,6 +14,11 @@ class PlotFunctions(GraphScene): } def construct(self): + self.x_min = -10 + self.x_max = 10.3 + self.y_min = -1.5 + self.y_max = 1.5 + constants.TEX_TEMPLATE = TexTemplate() self.setup_axes() f = self.get_graph(lambda x: x ** 2) From e1d130a3a50bb7d752620e286d73be803e0a8974 Mon Sep 17 00:00:00 2001 From: leotrs Date: Wed, 2 Sep 2020 07:29:08 -0400 Subject: [PATCH 8/8] add it back --- manim/mobject/svg/tex_mobject.py | 1 + 1 file changed, 1 insertion(+) diff --git a/manim/mobject/svg/tex_mobject.py b/manim/mobject/svg/tex_mobject.py index a5aaf3940a..1c9b7fed42 100644 --- a/manim/mobject/svg/tex_mobject.py +++ b/manim/mobject/svg/tex_mobject.py @@ -314,6 +314,7 @@ class Title(Tex): def __init__(self, *text_parts, **kwargs): Tex.__init__(self, *text_parts, **kwargs) + self.underline_width = config["frame_width"] - 2 self.scale(self.scale_factor) self.to_edge(UP) if self.include_underline: