manim 0.17.0__py3-none-any.whl → 0.19.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- manim/__init__.py +11 -6
- manim/__main__.py +62 -19
- manim/_config/__init__.py +10 -9
- manim/_config/cli_colors.py +26 -9
- manim/_config/default.cfg +1 -3
- manim/_config/logger_utils.py +23 -13
- manim/_config/utils.py +662 -468
- manim/animation/animation.py +164 -18
- manim/animation/changing.py +34 -23
- manim/animation/composition.py +265 -67
- manim/animation/creation.py +208 -26
- manim/animation/fading.py +16 -18
- manim/animation/growing.py +35 -15
- manim/animation/indication.py +150 -76
- manim/animation/movement.py +56 -22
- manim/animation/numbers.py +64 -6
- manim/animation/rotation.py +78 -7
- manim/animation/specialized.py +6 -7
- manim/animation/speedmodifier.py +13 -10
- manim/animation/transform.py +14 -11
- manim/animation/transform_matching_parts.py +3 -4
- manim/animation/updaters/mobject_update_utils.py +152 -30
- manim/animation/updaters/update.py +10 -7
- manim/camera/camera.py +182 -118
- manim/camera/mapping_camera.py +34 -3
- manim/camera/moving_camera.py +95 -74
- manim/camera/multi_camera.py +23 -15
- manim/camera/three_d_camera.py +70 -52
- manim/cli/__init__.py +17 -0
- manim/cli/cfg/group.py +76 -44
- manim/cli/checkhealth/checks.py +192 -0
- manim/cli/checkhealth/commands.py +90 -0
- manim/cli/default_group.py +158 -25
- manim/cli/init/commands.py +33 -25
- manim/cli/plugins/commands.py +16 -3
- manim/cli/render/commands.py +72 -60
- manim/cli/render/ease_of_access_options.py +4 -3
- manim/cli/render/global_options.py +59 -17
- manim/cli/render/output_options.py +6 -5
- manim/cli/render/render_options.py +98 -33
- manim/constants.py +109 -59
- manim/data_structures.py +31 -0
- manim/mobject/frame.py +8 -5
- manim/mobject/geometry/__init__.py +1 -0
- manim/mobject/geometry/arc.py +277 -135
- manim/mobject/geometry/boolean_ops.py +32 -31
- manim/mobject/geometry/labeled.py +376 -0
- manim/mobject/geometry/line.py +192 -87
- manim/mobject/geometry/polygram.py +224 -58
- manim/mobject/geometry/shape_matchers.py +61 -25
- manim/mobject/geometry/tips.py +122 -48
- manim/mobject/graph.py +1027 -419
- manim/mobject/graphing/coordinate_systems.py +533 -278
- manim/mobject/graphing/functions.py +53 -32
- manim/mobject/graphing/number_line.py +123 -65
- manim/mobject/graphing/probability.py +88 -62
- manim/mobject/graphing/scale.py +33 -19
- manim/mobject/logo.py +118 -28
- manim/mobject/matrix.py +87 -83
- manim/mobject/mobject.py +912 -442
- manim/mobject/opengl/dot_cloud.py +16 -5
- manim/mobject/opengl/opengl_compatibility.py +4 -2
- manim/mobject/opengl/opengl_geometry.py +254 -153
- manim/mobject/opengl/opengl_image_mobject.py +3 -1
- manim/mobject/opengl/opengl_mobject.py +779 -482
- manim/mobject/opengl/opengl_point_cloud_mobject.py +41 -14
- manim/mobject/opengl/opengl_surface.py +14 -92
- manim/mobject/opengl/opengl_three_dimensions.py +12 -8
- manim/mobject/opengl/opengl_vectorized_mobject.py +98 -100
- manim/mobject/svg/brace.py +173 -41
- manim/mobject/svg/svg_mobject.py +139 -53
- manim/mobject/table.py +61 -68
- manim/mobject/text/code_mobject.py +193 -539
- manim/mobject/text/numbers.py +81 -34
- manim/mobject/text/tex_mobject.py +130 -78
- manim/mobject/text/text_mobject.py +288 -164
- manim/mobject/three_d/polyhedra.py +111 -13
- manim/mobject/three_d/three_d_utils.py +17 -8
- manim/mobject/three_d/three_dimensions.py +239 -106
- manim/mobject/types/image_mobject.py +50 -30
- manim/mobject/types/point_cloud_mobject.py +120 -75
- manim/mobject/types/vectorized_mobject.py +841 -408
- manim/mobject/value_tracker.py +105 -38
- manim/mobject/vector_field.py +50 -31
- manim/opengl/__init__.py +3 -3
- manim/plugins/__init__.py +14 -1
- manim/plugins/plugins_flags.py +10 -14
- manim/renderer/cairo_renderer.py +65 -50
- manim/renderer/opengl_renderer.py +89 -69
- manim/renderer/opengl_renderer_window.py +39 -18
- manim/renderer/shader.py +123 -87
- manim/renderer/shader_wrapper.py +44 -28
- manim/renderer/vectorized_mobject_rendering.py +38 -10
- manim/scene/moving_camera_scene.py +32 -3
- manim/scene/scene.py +507 -242
- manim/scene/scene_file_writer.py +371 -220
- manim/scene/section.py +20 -16
- manim/scene/three_d_scene.py +14 -22
- manim/scene/vector_space_scene.py +223 -129
- manim/scene/zoomed_scene.py +46 -41
- manim/typing.py +990 -0
- manim/utils/bezier.py +1823 -371
- manim/utils/caching.py +12 -5
- manim/utils/color/AS2700.py +236 -0
- manim/utils/color/BS381.py +318 -0
- manim/utils/color/DVIPSNAMES.py +96 -0
- manim/utils/color/SVGNAMES.py +179 -0
- manim/utils/color/X11.py +533 -0
- manim/utils/color/XKCD.py +952 -0
- manim/utils/color/__init__.py +61 -0
- manim/utils/color/core.py +1667 -0
- manim/utils/color/manim_colors.py +218 -0
- manim/utils/commands.py +48 -20
- manim/utils/config_ops.py +39 -19
- manim/utils/debug.py +8 -7
- manim/utils/deprecation.py +86 -39
- manim/utils/docbuild/__init__.py +17 -0
- manim/utils/docbuild/autoaliasattr_directive.py +236 -0
- manim/utils/docbuild/autocolor_directive.py +99 -0
- manim/utils/docbuild/manim_directive.py +94 -41
- manim/utils/docbuild/module_parsing.py +245 -0
- manim/utils/exceptions.py +6 -0
- manim/utils/family.py +5 -3
- manim/utils/family_ops.py +17 -4
- manim/utils/file_ops.py +27 -17
- manim/utils/hashing.py +55 -45
- manim/utils/images.py +13 -7
- manim/utils/ipython_magic.py +13 -7
- manim/utils/iterables.py +163 -120
- manim/utils/module_ops.py +66 -24
- manim/utils/opengl.py +77 -24
- manim/utils/parameter_parsing.py +32 -0
- manim/utils/paths.py +30 -33
- manim/utils/polylabel.py +235 -0
- manim/utils/qhull.py +218 -0
- manim/utils/rate_functions.py +98 -32
- manim/utils/simple_functions.py +25 -33
- manim/utils/sounds.py +7 -1
- manim/utils/space_ops.py +188 -115
- manim/utils/testing/__init__.py +17 -0
- manim/utils/testing/_frames_testers.py +13 -8
- manim/utils/testing/_show_diff.py +5 -3
- manim/utils/testing/_test_class_makers.py +34 -18
- manim/utils/testing/frames_comparison.py +37 -19
- manim/utils/tex.py +130 -198
- manim/utils/tex_file_writing.py +77 -47
- manim/utils/tex_templates.py +2 -1
- manim/utils/unit.py +6 -5
- {manim-0.17.0.dist-info → manim-0.19.1.dist-info}/METADATA +64 -65
- manim-0.19.1.dist-info/RECORD +220 -0
- {manim-0.17.0.dist-info → manim-0.19.1.dist-info}/WHEEL +1 -1
- manim-0.19.1.dist-info/entry_points.txt +3 -0
- {manim-0.17.0.dist-info → manim-0.19.1.dist-info/licenses}/LICENSE.community +1 -1
- manim/cli/new/group.py +0 -189
- manim/communitycolors.py +0 -9
- manim/gui/__init__.py +0 -0
- manim/gui/gui.py +0 -82
- manim/plugins/import_plugins.py +0 -43
- manim/utils/color.py +0 -552
- manim-0.17.0.dist-info/RECORD +0 -206
- manim-0.17.0.dist-info/entry_points.txt +0 -4
- /manim/cli/{new → checkhealth}/__init__.py +0 -0
- {manim-0.17.0.dist-info → manim-0.19.1.dist-info/licenses}/LICENSE +0 -0
manim/scene/section.py
CHANGED
|
@@ -8,6 +8,8 @@ from typing import Any
|
|
|
8
8
|
|
|
9
9
|
from manim import get_video_metadata
|
|
10
10
|
|
|
11
|
+
__all__ = ["Section", "DefaultSectionType"]
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
class DefaultSectionType(str, Enum):
|
|
13
15
|
"""The type of a section can be used for third party applications.
|
|
@@ -32,23 +34,23 @@ class DefaultSectionType(str, Enum):
|
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
class Section:
|
|
35
|
-
"""A :class:`.Scene` can be segmented into multiple Sections.
|
|
37
|
+
r"""A :class:`.Scene` can be segmented into multiple Sections.
|
|
36
38
|
Refer to :doc:`the documentation</tutorials/output_and_config>` for more info.
|
|
37
39
|
It consists of multiple animations.
|
|
38
40
|
|
|
39
41
|
Attributes
|
|
40
42
|
----------
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
type\_
|
|
44
|
+
Can be used by a third party applications to classify different types of sections.
|
|
45
|
+
video
|
|
46
|
+
Path to video file with animations belonging to section relative to sections directory.
|
|
47
|
+
If ``None``, then the section will not be saved.
|
|
48
|
+
name
|
|
49
|
+
Human readable, non-unique name for this section.
|
|
50
|
+
skip_animations
|
|
51
|
+
Skip rendering the animations in this section when ``True``.
|
|
52
|
+
partial_movie_files
|
|
53
|
+
Animations belonging to this section.
|
|
52
54
|
|
|
53
55
|
See Also
|
|
54
56
|
--------
|
|
@@ -57,8 +59,10 @@ class Section:
|
|
|
57
59
|
:meth:`.OpenGLRenderer.update_skipping_status`
|
|
58
60
|
"""
|
|
59
61
|
|
|
60
|
-
def __init__(
|
|
61
|
-
self
|
|
62
|
+
def __init__(
|
|
63
|
+
self, type_: str, video: str | None, name: str, skip_animations: bool
|
|
64
|
+
) -> None:
|
|
65
|
+
self.type_ = type_
|
|
62
66
|
# None when not to be saved -> still keeps section alive
|
|
63
67
|
self.video: str | None = video
|
|
64
68
|
self.name = name
|
|
@@ -92,11 +96,11 @@ class Section:
|
|
|
92
96
|
return dict(
|
|
93
97
|
{
|
|
94
98
|
"name": self.name,
|
|
95
|
-
"type": self.
|
|
99
|
+
"type": self.type_,
|
|
96
100
|
"video": self.video,
|
|
97
101
|
},
|
|
98
102
|
**video_metadata,
|
|
99
103
|
)
|
|
100
104
|
|
|
101
|
-
def __repr__(self):
|
|
105
|
+
def __repr__(self) -> str:
|
|
102
106
|
return f"<Section '{self.name}' stored in '{self.video}'>"
|
manim/scene/three_d_scene.py
CHANGED
|
@@ -6,7 +6,7 @@ __all__ = ["ThreeDScene", "SpecialThreeDScene"]
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
import warnings
|
|
9
|
-
from
|
|
9
|
+
from collections.abc import Iterable, Sequence
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
12
|
|
|
@@ -86,7 +86,6 @@ class ThreeDScene(Scene):
|
|
|
86
86
|
The new center of the camera frame in cartesian coordinates.
|
|
87
87
|
|
|
88
88
|
"""
|
|
89
|
-
|
|
90
89
|
if phi is not None:
|
|
91
90
|
self.renderer.camera.set_phi(phi)
|
|
92
91
|
if theta is not None:
|
|
@@ -135,13 +134,11 @@ class ThreeDScene(Scene):
|
|
|
135
134
|
}
|
|
136
135
|
cam.add_updater(lambda m, dt: methods[about](rate * dt))
|
|
137
136
|
self.add(self.camera)
|
|
138
|
-
except Exception:
|
|
139
|
-
raise ValueError("Invalid ambient rotation angle.")
|
|
137
|
+
except Exception as e:
|
|
138
|
+
raise ValueError("Invalid ambient rotation angle.") from e
|
|
140
139
|
|
|
141
140
|
def stop_ambient_camera_rotation(self, about="theta"):
|
|
142
|
-
"""
|
|
143
|
-
This method stops all ambient camera rotation.
|
|
144
|
-
"""
|
|
141
|
+
"""This method stops all ambient camera rotation."""
|
|
145
142
|
about: str = about.lower()
|
|
146
143
|
try:
|
|
147
144
|
if config.renderer == RendererType.CAIRO:
|
|
@@ -155,8 +152,8 @@ class ThreeDScene(Scene):
|
|
|
155
152
|
self.remove(x)
|
|
156
153
|
elif config.renderer == RendererType.OPENGL:
|
|
157
154
|
self.camera.clear_updaters()
|
|
158
|
-
except Exception:
|
|
159
|
-
raise ValueError("Invalid ambient rotation angle.")
|
|
155
|
+
except Exception as e:
|
|
156
|
+
raise ValueError("Invalid ambient rotation angle.") from e
|
|
160
157
|
|
|
161
158
|
def begin_3dillusion_camera_rotation(
|
|
162
159
|
self,
|
|
@@ -205,9 +202,7 @@ class ThreeDScene(Scene):
|
|
|
205
202
|
self.add(self.renderer.camera.phi_tracker)
|
|
206
203
|
|
|
207
204
|
def stop_3dillusion_camera_rotation(self):
|
|
208
|
-
"""
|
|
209
|
-
This method stops all illusion camera rotations.
|
|
210
|
-
"""
|
|
205
|
+
"""This method stops all illusion camera rotations."""
|
|
211
206
|
self.renderer.camera.theta_tracker.clear_updaters()
|
|
212
207
|
self.remove(self.renderer.camera.theta_tracker)
|
|
213
208
|
self.renderer.camera.phi_tracker.clear_updaters()
|
|
@@ -283,16 +278,15 @@ class ThreeDScene(Scene):
|
|
|
283
278
|
frame_center = frame_center.get_center()
|
|
284
279
|
frame_center = list(frame_center)
|
|
285
280
|
|
|
281
|
+
zoom_value = None
|
|
282
|
+
if zoom is not None:
|
|
283
|
+
zoom_value = config.frame_height / (zoom * cam.height)
|
|
284
|
+
|
|
286
285
|
for value, method in [
|
|
287
286
|
[theta, "theta"],
|
|
288
287
|
[phi, "phi"],
|
|
289
288
|
[gamma, "gamma"],
|
|
290
|
-
[
|
|
291
|
-
config.frame_height / (zoom * cam.height)
|
|
292
|
-
if zoom is not None
|
|
293
|
-
else None,
|
|
294
|
-
"zoom",
|
|
295
|
-
],
|
|
289
|
+
[zoom_value, "zoom"],
|
|
296
290
|
[frame_center, "frame_center"],
|
|
297
291
|
]:
|
|
298
292
|
if value is not None:
|
|
@@ -329,7 +323,7 @@ class ThreeDScene(Scene):
|
|
|
329
323
|
camera_mobjects = self.renderer.camera.get_value_trackers() + [
|
|
330
324
|
self.renderer.camera._frame_center,
|
|
331
325
|
]
|
|
332
|
-
if any(
|
|
326
|
+
if any(cm in moving_mobjects for cm in camera_mobjects):
|
|
333
327
|
return self.mobjects
|
|
334
328
|
return moving_mobjects
|
|
335
329
|
|
|
@@ -546,7 +540,5 @@ class SpecialThreeDScene(ThreeDScene):
|
|
|
546
540
|
return self.default_angled_camera_position
|
|
547
541
|
|
|
548
542
|
def set_camera_to_default_position(self):
|
|
549
|
-
"""
|
|
550
|
-
Sets the camera to its default position.
|
|
551
|
-
"""
|
|
543
|
+
"""Sets the camera to its default position."""
|
|
552
544
|
self.set_camera_orientation(**self.default_angled_camera_position)
|