manim 0.18.0.post0__tar.gz → 0.19.0__tar.gz
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.
Potentially problematic release.
This version of manim might be problematic. Click here for more details.
- {manim-0.18.0.post0 → manim-0.19.0}/LICENSE.community +1 -1
- {manim-0.18.0.post0 → manim-0.19.0}/PKG-INFO +40 -39
- {manim-0.18.0.post0 → manim-0.19.0}/README.md +4 -2
- {manim-0.18.0.post0 → manim-0.19.0}/manim/__init__.py +3 -6
- manim-0.19.0/manim/__main__.py +101 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/__init__.py +6 -3
- {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/cli_colors.py +16 -8
- {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/default.cfg +1 -3
- {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/logger_utils.py +14 -8
- {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/utils.py +651 -472
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/animation.py +152 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/composition.py +80 -39
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/creation.py +196 -14
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/fading.py +5 -9
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/indication.py +103 -47
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/movement.py +22 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/rotation.py +3 -2
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/specialized.py +4 -6
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/speedmodifier.py +10 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/transform.py +4 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/transform_matching_parts.py +1 -1
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/updaters/mobject_update_utils.py +17 -14
- {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/camera.py +15 -6
- manim-0.19.0/manim/cli/__init__.py +17 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/cfg/group.py +70 -44
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/checkhealth/checks.py +93 -75
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/checkhealth/commands.py +14 -5
- manim-0.19.0/manim/cli/default_group.py +199 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/init/commands.py +32 -24
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/plugins/commands.py +16 -3
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/commands.py +72 -60
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/ease_of_access_options.py +4 -3
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/global_options.py +51 -15
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/output_options.py +6 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/render_options.py +97 -32
- {manim-0.18.0.post0 → manim-0.19.0}/manim/constants.py +65 -19
- {manim-0.18.0.post0 → manim-0.19.0}/manim/gui/gui.py +2 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/frame.py +0 -1
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/arc.py +112 -78
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/boolean_ops.py +32 -25
- manim-0.19.0/manim/mobject/geometry/labeled.py +378 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/line.py +132 -64
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/polygram.py +126 -30
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/shape_matchers.py +35 -15
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/tips.py +38 -29
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graph.py +414 -133
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/coordinate_systems.py +126 -64
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/functions.py +25 -15
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/number_line.py +24 -10
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/probability.py +2 -10
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/scale.py +6 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/matrix.py +17 -19
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/mobject.py +314 -165
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_compatibility.py +2 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_geometry.py +30 -9
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_image_mobject.py +2 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_mobject.py +509 -343
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_point_cloud_mobject.py +5 -7
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_surface.py +3 -2
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_three_dimensions.py +2 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_vectorized_mobject.py +46 -79
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/svg/brace.py +63 -13
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/svg/svg_mobject.py +4 -3
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/table.py +11 -13
- manim-0.19.0/manim/mobject/text/code_mobject.py +260 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/numbers.py +9 -7
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/tex_mobject.py +23 -14
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/text_mobject.py +70 -24
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/polyhedra.py +98 -1
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/three_d_utils.py +4 -4
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/three_dimensions.py +62 -34
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/image_mobject.py +42 -24
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/point_cloud_mobject.py +105 -67
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/vectorized_mobject.py +496 -228
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/value_tracker.py +5 -4
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/vector_field.py +5 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/opengl/__init__.py +3 -3
- manim-0.19.0/manim/plugins/__init__.py +16 -0
- manim-0.19.0/manim/plugins/plugins_flags.py +31 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/cairo_renderer.py +20 -10
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/opengl_renderer.py +21 -23
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/opengl_renderer_window.py +2 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shader.py +2 -3
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shader_wrapper.py +5 -2
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/vectorized_mobject_rendering.py +5 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/moving_camera_scene.py +23 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/scene.py +90 -43
- {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/scene_file_writer.py +316 -165
- {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/section.py +17 -15
- {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/three_d_scene.py +13 -21
- {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/vector_space_scene.py +22 -9
- manim-0.19.0/manim/typing.py +893 -0
- manim-0.19.0/manim/utils/bezier.py +2079 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/caching.py +13 -5
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/AS2700.py +2 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/BS381.py +3 -0
- manim-0.19.0/manim/utils/color/DVIPSNAMES.py +96 -0
- manim-0.19.0/manim/utils/color/SVGNAMES.py +179 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/X11.py +3 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/XKCD.py +3 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/__init__.py +8 -5
- manim-0.19.0/manim/utils/color/core.py +1571 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/manim_colors.py +7 -9
- manim-0.19.0/manim/utils/commands.py +74 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/config_ops.py +18 -13
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/debug.py +8 -7
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/deprecation.py +90 -40
- manim-0.19.0/manim/utils/docbuild/__init__.py +17 -0
- manim-0.19.0/manim/utils/docbuild/autoaliasattr_directive.py +234 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/docbuild/autocolor_directive.py +21 -17
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/docbuild/manim_directive.py +50 -35
- manim-0.19.0/manim/utils/docbuild/module_parsing.py +245 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/exceptions.py +6 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/family.py +5 -3
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/family_ops.py +17 -4
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/file_ops.py +26 -16
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/hashing.py +9 -7
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/images.py +10 -4
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/ipython_magic.py +14 -8
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/iterables.py +161 -119
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/module_ops.py +57 -19
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/opengl.py +83 -24
- manim-0.19.0/manim/utils/parameter_parsing.py +32 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/paths.py +21 -23
- manim-0.19.0/manim/utils/polylabel.py +168 -0
- manim-0.19.0/manim/utils/qhull.py +218 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/rate_functions.py +74 -39
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/simple_functions.py +24 -15
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/sounds.py +7 -1
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/space_ops.py +125 -69
- manim-0.19.0/manim/utils/testing/__init__.py +17 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/_frames_testers.py +13 -8
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/_show_diff.py +5 -3
- manim-0.19.0/manim/utils/testing/_test_class_makers.py +92 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/frames_comparison.py +27 -19
- manim-0.19.0/manim/utils/tex.py +199 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/tex_file_writing.py +47 -45
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/tex_templates.py +2 -1
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/unit.py +6 -5
- manim-0.19.0/pyproject.toml +221 -0
- manim-0.18.0.post0/manim/__main__.py +0 -60
- manim-0.18.0.post0/manim/cli/default_group.py +0 -67
- manim-0.18.0.post0/manim/cli/new/group.py +0 -189
- manim-0.18.0.post0/manim/mobject/geometry/labeled.py +0 -155
- manim-0.18.0.post0/manim/mobject/text/code_mobject.py +0 -622
- manim-0.18.0.post0/manim/plugins/__init__.py +0 -3
- manim-0.18.0.post0/manim/plugins/import_plugins.py +0 -43
- manim-0.18.0.post0/manim/plugins/plugins_flags.py +0 -25
- manim-0.18.0.post0/manim/scene/__init__.py +0 -0
- manim-0.18.0.post0/manim/typing.py +0 -133
- manim-0.18.0.post0/manim/utils/__init__.py +0 -0
- manim-0.18.0.post0/manim/utils/bezier.py +0 -811
- manim-0.18.0.post0/manim/utils/color/core.py +0 -1036
- manim-0.18.0.post0/manim/utils/commands.py +0 -46
- manim-0.18.0.post0/manim/utils/docbuild/__init__.py +0 -0
- manim-0.18.0.post0/manim/utils/testing/__init__.py +0 -0
- manim-0.18.0.post0/manim/utils/testing/_test_class_makers.py +0 -77
- manim-0.18.0.post0/manim/utils/tex.py +0 -269
- manim-0.18.0.post0/pyproject.toml +0 -149
- {manim-0.18.0.post0 → manim-0.19.0}/LICENSE +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/changing.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/growing.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/numbers.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/updaters/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/updaters/update.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/mapping_camera.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/moving_camera.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/multi_camera.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/three_d_camera.py +0 -0
- {manim-0.18.0.post0/manim/cli → manim-0.19.0/manim/cli/cfg}/__init__.py +0 -0
- {manim-0.18.0.post0/manim/cli/cfg → manim-0.19.0/manim/cli/checkhealth}/__init__.py +0 -0
- {manim-0.18.0.post0/manim/cli/checkhealth → manim-0.19.0/manim/cli/init}/__init__.py +0 -0
- {manim-0.18.0.post0/manim/cli/init → manim-0.19.0/manim/cli/plugins}/__init__.py +0 -0
- {manim-0.18.0.post0/manim/cli/new → manim-0.19.0/manim/cli/render}/__init__.py +0 -0
- {manim-0.18.0.post0/manim/cli/plugins → manim-0.19.0/manim/gui}/__init__.py +0 -0
- {manim-0.18.0.post0/manim/cli/render → manim-0.19.0/manim/mobject}/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/logo.py +0 -0
- {manim-0.18.0.post0/manim/gui → manim-0.19.0/manim/mobject/opengl}/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/dot_cloud.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/svg/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/utils.py +0 -0
- {manim-0.18.0.post0/manim/mobject → manim-0.19.0/manim/renderer}/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/default/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/default/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/design.frag +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/design_2.frag +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/design_3.frag +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/image/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/image/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/NOTE.md +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/add_light.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/camera_uniform_declarations.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/finalize_color.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/get_gl_Position.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/get_rotated_surface_unit_normal_vector.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/get_unit_normal.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/position_point_into_frame.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/quadratic_bezier_distance.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/quadratic_bezier_geometry_functions.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/manim_coords/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/manim_coords/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_fill/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_fill/geom.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_fill/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_stroke/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_stroke/geom.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_stroke/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/simple_vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/surface/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/surface/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/test/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/test/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/textured_surface/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/textured_surface/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/true_dot/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/true_dot/geom.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/true_dot/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_fill/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_fill/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_stroke/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_stroke/vert.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vertex_colors/frag.glsl +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vertex_colors/vert.glsl +0 -0
- {manim-0.18.0.post0/manim/mobject/opengl → manim-0.19.0/manim/scene}/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/zoomed_scene.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/Axes.mtp +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/Default.mtp +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/MovingCamera.mtp +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/template.cfg +0 -0
- {manim-0.18.0.post0/manim/renderer → manim-0.19.0/manim/utils}/__init__.py +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/config_graphical_tests_monoframe.cfg +0 -0
- {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/config_graphical_tests_multiframes.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2024, the Manim Community Developers
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -1,63 +1,62 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: manim
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.19.0
|
|
4
4
|
Summary: Animation engine for explanatory math videos.
|
|
5
|
-
Home-page: https://www.manim.community/
|
|
6
5
|
License: MIT
|
|
7
6
|
Author: The Manim Community Developers
|
|
8
7
|
Author-email: contact@manim.community
|
|
9
|
-
Requires-Python: >=3.
|
|
8
|
+
Requires-Python: >=3.9
|
|
10
9
|
Classifier: Development Status :: 4 - Beta
|
|
11
10
|
Classifier: License :: OSI Approved :: MIT License
|
|
12
11
|
Classifier: Natural Language :: English
|
|
13
12
|
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
15
13
|
Classifier: Programming Language :: Python :: 3.9
|
|
16
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
17
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
18
|
Classifier: Topic :: Multimedia :: Graphics
|
|
20
19
|
Classifier: Topic :: Multimedia :: Video
|
|
21
20
|
Classifier: Topic :: Scientific/Engineering
|
|
22
21
|
Provides-Extra: gui
|
|
23
22
|
Provides-Extra: jupyterlab
|
|
24
|
-
Requires-Dist: Pillow (>=9.1
|
|
25
|
-
Requires-Dist: Pygments (>=2.
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
23
|
+
Requires-Dist: Pillow (>=9.1)
|
|
24
|
+
Requires-Dist: Pygments (>=2.0.0)
|
|
25
|
+
Requires-Dist: audioop-lts (>=0.2.0) ; python_version >= "3.13"
|
|
26
|
+
Requires-Dist: av (>=9.0.0,<14.0.0)
|
|
27
|
+
Requires-Dist: beautifulsoup4 (>=4.12)
|
|
28
|
+
Requires-Dist: click (>=8.0)
|
|
29
|
+
Requires-Dist: cloup (>=2.0.0)
|
|
30
|
+
Requires-Dist: dearpygui (>=1.0.0) ; extra == "gui"
|
|
31
|
+
Requires-Dist: decorator (>=4.3.2)
|
|
32
|
+
Requires-Dist: importlib-metadata (>=3.6) ; python_full_version <= "3.9.0"
|
|
33
|
+
Requires-Dist: isosurfaces (>=0.1.0)
|
|
34
|
+
Requires-Dist: jupyterlab (>=3.0.0) ; extra == "jupyterlab"
|
|
35
35
|
Requires-Dist: manimpango (>=0.5.0,<1.0.0)
|
|
36
|
-
Requires-Dist: mapbox-earcut (>=1.0.0
|
|
37
|
-
Requires-Dist: moderngl (>=5.
|
|
38
|
-
Requires-Dist: moderngl-window (>=2.
|
|
39
|
-
Requires-Dist: networkx (>=2.
|
|
40
|
-
Requires-Dist: notebook (>=6.
|
|
41
|
-
Requires-Dist: numpy (>=
|
|
42
|
-
Requires-Dist: numpy (>=
|
|
43
|
-
Requires-Dist: pycairo (>=1.
|
|
44
|
-
Requires-Dist: pydub (>=0.
|
|
45
|
-
Requires-Dist:
|
|
46
|
-
Requires-Dist:
|
|
47
|
-
Requires-Dist: scipy (>=1.
|
|
48
|
-
Requires-Dist:
|
|
49
|
-
Requires-Dist:
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist: typing-extensions (>=4.7.1,<5.0.0)
|
|
56
|
-
Requires-Dist: watchdog (>=2.1,<=3.0.0)
|
|
36
|
+
Requires-Dist: mapbox-earcut (>=1.0.0)
|
|
37
|
+
Requires-Dist: moderngl (>=5.0.0,<6.0.0)
|
|
38
|
+
Requires-Dist: moderngl-window (>=2.0.0)
|
|
39
|
+
Requires-Dist: networkx (>=2.6)
|
|
40
|
+
Requires-Dist: notebook (>=6.0.0) ; extra == "jupyterlab"
|
|
41
|
+
Requires-Dist: numpy (>=2.0) ; python_version < "3.10"
|
|
42
|
+
Requires-Dist: numpy (>=2.1) ; python_version >= "3.10"
|
|
43
|
+
Requires-Dist: pycairo (>=1.13,<2.0.0)
|
|
44
|
+
Requires-Dist: pydub (>=0.20.0)
|
|
45
|
+
Requires-Dist: rich (>=12.0.0)
|
|
46
|
+
Requires-Dist: scipy (>=1.13.0) ; python_version < "3.13"
|
|
47
|
+
Requires-Dist: scipy (>=1.14.0) ; python_version >= "3.13"
|
|
48
|
+
Requires-Dist: screeninfo (>=0.7)
|
|
49
|
+
Requires-Dist: skia-pathops (>=0.7.0)
|
|
50
|
+
Requires-Dist: srt (>=3.0.0)
|
|
51
|
+
Requires-Dist: svgelements (>=1.8.0)
|
|
52
|
+
Requires-Dist: tqdm (>=4.0.0)
|
|
53
|
+
Requires-Dist: typing-extensions (>=4.0.0)
|
|
54
|
+
Requires-Dist: watchdog (>=2.0.0)
|
|
57
55
|
Project-URL: Bug Tracker, https://github.com/ManimCommunity/manim/issues
|
|
58
56
|
Project-URL: Changelog, https://docs.manim.community/en/stable/changelog.html
|
|
59
57
|
Project-URL: Documentation, https://docs.manim.community/
|
|
60
58
|
Project-URL: Discord, https://www.manim.community/discord/
|
|
59
|
+
Project-URL: Homepage, https://www.manim.community/
|
|
61
60
|
Project-URL: Repository, https://github.com/manimcommunity/manim
|
|
62
61
|
Project-URL: Twitter, https://twitter.com/manim_community
|
|
63
62
|
Description-Content-Type: text/markdown
|
|
@@ -85,7 +84,8 @@ Description-Content-Type: text/markdown
|
|
|
85
84
|
|
|
86
85
|
Manim is an animation engine for explanatory math videos. It's used to create precise animations programmatically, as demonstrated in the videos of [3Blue1Brown](https://www.3blue1brown.com/).
|
|
87
86
|
|
|
88
|
-
> NOTE
|
|
87
|
+
> [!NOTE]
|
|
88
|
+
> The community edition of Manim has been forked from 3b1b/manim, a tool originally created and open-sourced by Grant Sanderson, also creator of the 3Blue1Brown educational math videos. While Grant Sanderson’s repository continues to be maintained separately by him, he is not among the maintainers of the community edition. We recommend this version for its continued development, improved features, enhanced documentation, and more active community-driven maintenance. If you would like to study how Grant makes his videos, head over to his repository ([3b1b/manim](https://github.com/3b1b/manim)).
|
|
89
89
|
|
|
90
90
|
## Table of Contents:
|
|
91
91
|
|
|
@@ -99,7 +99,8 @@ Manim is an animation engine for explanatory math videos. It's used to create pr
|
|
|
99
99
|
|
|
100
100
|
## Installation
|
|
101
101
|
|
|
102
|
-
>
|
|
102
|
+
> [!CAUTION]
|
|
103
|
+
> These instructions are for the community version _only_. Trying to use these instructions to install [3b1b/manim](https://github.com/3b1b/manim) or instructions there to install this version will cause problems. Read [this](https://docs.manim.community/en/stable/faq/installation.html#why-are-there-different-versions-of-manim) and decide which version you wish to install, then only follow the instructions for your desired version.
|
|
103
104
|
|
|
104
105
|
Manim requires a few dependencies that must be installed prior to using it. If you
|
|
105
106
|
want to try it out first before installing it locally, you can do so
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
Manim is an animation engine for explanatory math videos. It's used to create precise animations programmatically, as demonstrated in the videos of [3Blue1Brown](https://www.3blue1brown.com/).
|
|
23
23
|
|
|
24
|
-
> NOTE
|
|
24
|
+
> [!NOTE]
|
|
25
|
+
> The community edition of Manim has been forked from 3b1b/manim, a tool originally created and open-sourced by Grant Sanderson, also creator of the 3Blue1Brown educational math videos. While Grant Sanderson’s repository continues to be maintained separately by him, he is not among the maintainers of the community edition. We recommend this version for its continued development, improved features, enhanced documentation, and more active community-driven maintenance. If you would like to study how Grant makes his videos, head over to his repository ([3b1b/manim](https://github.com/3b1b/manim)).
|
|
25
26
|
|
|
26
27
|
## Table of Contents:
|
|
27
28
|
|
|
@@ -35,7 +36,8 @@ Manim is an animation engine for explanatory math videos. It's used to create pr
|
|
|
35
36
|
|
|
36
37
|
## Installation
|
|
37
38
|
|
|
38
|
-
>
|
|
39
|
+
> [!CAUTION]
|
|
40
|
+
> These instructions are for the community version _only_. Trying to use these instructions to install [3b1b/manim](https://github.com/3b1b/manim) or instructions there to install this version will cause problems. Read [this](https://docs.manim.community/en/stable/faq/installation.html#why-are-there-different-versions-of-manim) and decide which version you wish to install, then only follow the instructions for your desired version.
|
|
39
41
|
|
|
40
42
|
Manim requires a few dependencies that must be installed prior to using it. If you
|
|
41
43
|
want to try it out first before installing it locally, you can do so
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
|
-
|
|
3
|
-
|
|
4
2
|
from __future__ import annotations
|
|
5
3
|
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
__version__: str = pkg_resources.get_distribution(__name__).version
|
|
4
|
+
from importlib.metadata import version
|
|
9
5
|
|
|
6
|
+
__version__ = version(__name__)
|
|
10
7
|
|
|
11
|
-
import sys
|
|
12
8
|
|
|
13
9
|
# isort: off
|
|
14
10
|
|
|
@@ -20,6 +16,7 @@ from ._config import *
|
|
|
20
16
|
from .utils.commands import *
|
|
21
17
|
|
|
22
18
|
# isort: on
|
|
19
|
+
import numpy as np
|
|
23
20
|
|
|
24
21
|
from .animation.animation import *
|
|
25
22
|
from .animation.changing import *
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import click
|
|
4
|
+
import cloup
|
|
5
|
+
|
|
6
|
+
from manim import __version__
|
|
7
|
+
from manim._config import cli_ctx_settings, console
|
|
8
|
+
from manim.cli.cfg.group import cfg
|
|
9
|
+
from manim.cli.checkhealth.commands import checkhealth
|
|
10
|
+
from manim.cli.default_group import DefaultGroup
|
|
11
|
+
from manim.cli.init.commands import init
|
|
12
|
+
from manim.cli.plugins.commands import plugins
|
|
13
|
+
from manim.cli.render.commands import render
|
|
14
|
+
from manim.constants import EPILOG
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def show_splash(ctx: click.Context, param: click.Option, value: str | None) -> None:
|
|
18
|
+
"""When giving a value by console, show an initial message with the Manim
|
|
19
|
+
version before executing any other command: ``Manim Community vA.B.C``.
|
|
20
|
+
|
|
21
|
+
Parameters
|
|
22
|
+
----------
|
|
23
|
+
ctx
|
|
24
|
+
The Click context.
|
|
25
|
+
param
|
|
26
|
+
A Click option.
|
|
27
|
+
value
|
|
28
|
+
A string value given by console, or None.
|
|
29
|
+
"""
|
|
30
|
+
if value:
|
|
31
|
+
console.print(f"Manim Community [green]v{__version__}[/green]\n")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def print_version_and_exit(
|
|
35
|
+
ctx: click.Context, param: click.Option, value: str | None
|
|
36
|
+
) -> None:
|
|
37
|
+
"""Same as :func:`show_splash`, but also exit when giving a value by
|
|
38
|
+
console.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
ctx
|
|
43
|
+
The Click context.
|
|
44
|
+
param
|
|
45
|
+
A Click option.
|
|
46
|
+
value
|
|
47
|
+
A string value given by console, or None.
|
|
48
|
+
"""
|
|
49
|
+
show_splash(ctx, param, value)
|
|
50
|
+
if value:
|
|
51
|
+
ctx.exit()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@cloup.group(
|
|
55
|
+
context_settings=cli_ctx_settings,
|
|
56
|
+
cls=DefaultGroup,
|
|
57
|
+
default="render",
|
|
58
|
+
no_args_is_help=True,
|
|
59
|
+
help="Animation engine for explanatory math videos.",
|
|
60
|
+
epilog="See 'manim <command>' to read about a specific subcommand.\n\n"
|
|
61
|
+
"Note: the subcommand 'manim render' is called if no other subcommand "
|
|
62
|
+
"is specified. Run 'manim render --help' if you would like to know what the "
|
|
63
|
+
f"'-ql' or '-p' flags do, for example.\n\n{EPILOG}",
|
|
64
|
+
)
|
|
65
|
+
@cloup.option(
|
|
66
|
+
"--version",
|
|
67
|
+
is_flag=True,
|
|
68
|
+
help="Show version and exit.",
|
|
69
|
+
callback=print_version_and_exit,
|
|
70
|
+
is_eager=True,
|
|
71
|
+
expose_value=False,
|
|
72
|
+
)
|
|
73
|
+
@click.option(
|
|
74
|
+
"--show-splash/--hide-splash",
|
|
75
|
+
is_flag=True,
|
|
76
|
+
default=True,
|
|
77
|
+
help="Print splash message with version information.",
|
|
78
|
+
callback=show_splash,
|
|
79
|
+
is_eager=True,
|
|
80
|
+
expose_value=False,
|
|
81
|
+
)
|
|
82
|
+
@cloup.pass_context
|
|
83
|
+
def main(ctx: click.Context) -> None:
|
|
84
|
+
"""The entry point for Manim.
|
|
85
|
+
|
|
86
|
+
Parameters
|
|
87
|
+
----------
|
|
88
|
+
ctx
|
|
89
|
+
The Click context.
|
|
90
|
+
"""
|
|
91
|
+
pass
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
main.add_command(checkhealth)
|
|
95
|
+
main.add_command(cfg)
|
|
96
|
+
main.add_command(plugins)
|
|
97
|
+
main.add_command(init)
|
|
98
|
+
main.add_command(render)
|
|
99
|
+
|
|
100
|
+
if __name__ == "__main__":
|
|
101
|
+
main()
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
-
from
|
|
6
|
+
from collections.abc import Generator
|
|
7
|
+
from contextlib import contextmanager
|
|
8
|
+
from typing import Any
|
|
7
9
|
|
|
8
10
|
from .cli_colors import parse_cli_ctx
|
|
9
11
|
from .logger_utils import make_logger
|
|
@@ -35,12 +37,14 @@ logging.getLogger("PIL").setLevel(logging.INFO)
|
|
|
35
37
|
logging.getLogger("matplotlib").setLevel(logging.INFO)
|
|
36
38
|
|
|
37
39
|
config = ManimConfig().digest_parser(parser)
|
|
40
|
+
# TODO: to be used in the future - see PR #620
|
|
41
|
+
# https://github.com/ManimCommunity/manim/pull/620
|
|
38
42
|
frame = ManimFrame(config)
|
|
39
43
|
|
|
40
44
|
|
|
41
45
|
# This has to go here because it needs access to this module's config
|
|
42
46
|
@contextmanager
|
|
43
|
-
def tempconfig(temp: ManimConfig | dict) ->
|
|
47
|
+
def tempconfig(temp: ManimConfig | dict[str, Any]) -> Generator[None, None, None]:
|
|
44
48
|
"""Context manager that temporarily modifies the global ``config`` object.
|
|
45
49
|
|
|
46
50
|
Inside the ``with`` statement, the modified config will be used. After
|
|
@@ -64,7 +68,6 @@ def tempconfig(temp: ManimConfig | dict) -> _GeneratorContextManager:
|
|
|
64
68
|
8.0
|
|
65
69
|
>>> with tempconfig({"frame_height": 100.0}):
|
|
66
70
|
... print(config["frame_height"])
|
|
67
|
-
...
|
|
68
71
|
100.0
|
|
69
72
|
>>> config["frame_height"]
|
|
70
73
|
8.0
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import configparser
|
|
4
|
+
from typing import Any
|
|
2
5
|
|
|
3
6
|
from cloup import Context, HelpFormatter, HelpTheme, Style
|
|
4
7
|
|
|
8
|
+
__all__ = ["parse_cli_ctx"]
|
|
9
|
+
|
|
5
10
|
|
|
6
|
-
def parse_cli_ctx(parser: configparser.
|
|
7
|
-
formatter_settings = {
|
|
11
|
+
def parse_cli_ctx(parser: configparser.SectionProxy) -> dict[str, Any]:
|
|
12
|
+
formatter_settings: dict[str, str | int] = {
|
|
8
13
|
"indent_increment": int(parser["indent_increment"]),
|
|
9
14
|
"width": int(parser["width"]),
|
|
10
15
|
"col1_max_width": int(parser["col1_max_width"]),
|
|
@@ -30,16 +35,19 @@ def parse_cli_ctx(parser: configparser.ConfigParser) -> Context:
|
|
|
30
35
|
formatter = {}
|
|
31
36
|
theme = parser["theme"] if parser["theme"] else None
|
|
32
37
|
if theme is None:
|
|
33
|
-
formatter = HelpFormatter
|
|
34
|
-
theme=HelpTheme(**theme_settings),
|
|
38
|
+
formatter = HelpFormatter.settings(
|
|
39
|
+
theme=HelpTheme(**theme_settings),
|
|
40
|
+
**formatter_settings, # type: ignore[arg-type]
|
|
35
41
|
)
|
|
36
42
|
elif theme.lower() == "dark":
|
|
37
|
-
formatter = HelpFormatter
|
|
38
|
-
theme=HelpTheme.dark().with_(**theme_settings),
|
|
43
|
+
formatter = HelpFormatter.settings(
|
|
44
|
+
theme=HelpTheme.dark().with_(**theme_settings),
|
|
45
|
+
**formatter_settings, # type: ignore[arg-type]
|
|
39
46
|
)
|
|
40
47
|
elif theme.lower() == "light":
|
|
41
|
-
formatter = HelpFormatter
|
|
42
|
-
theme=HelpTheme.light().with_(**theme_settings),
|
|
48
|
+
formatter = HelpFormatter.settings(
|
|
49
|
+
theme=HelpTheme.light().with_(**theme_settings),
|
|
50
|
+
**formatter_settings, # type: ignore[arg-type]
|
|
43
51
|
)
|
|
44
52
|
|
|
45
53
|
return Context.settings(
|
|
@@ -221,9 +221,7 @@ repr_number = green
|
|
|
221
221
|
# Uncomment the following line to manually set the loglevel for ffmpeg. See
|
|
222
222
|
# ffmpeg manpage for accepted values
|
|
223
223
|
loglevel = ERROR
|
|
224
|
-
# defaults to the one present in path
|
|
225
|
-
ffmpeg_executable = ffmpeg
|
|
226
224
|
|
|
227
225
|
[jupyter]
|
|
228
|
-
media_embed =
|
|
226
|
+
media_embed = False
|
|
229
227
|
media_width = 60%%
|
|
@@ -9,13 +9,13 @@ Both ``logger`` and ``console`` use the ``rich`` library to produce rich text
|
|
|
9
9
|
format.
|
|
10
10
|
|
|
11
11
|
"""
|
|
12
|
+
|
|
12
13
|
from __future__ import annotations
|
|
13
14
|
|
|
14
15
|
import configparser
|
|
15
16
|
import copy
|
|
16
17
|
import json
|
|
17
18
|
import logging
|
|
18
|
-
import sys
|
|
19
19
|
from typing import TYPE_CHECKING
|
|
20
20
|
|
|
21
21
|
from rich import color, errors
|
|
@@ -27,6 +27,8 @@ from rich.theme import Theme
|
|
|
27
27
|
if TYPE_CHECKING:
|
|
28
28
|
from pathlib import Path
|
|
29
29
|
|
|
30
|
+
__all__ = ["make_logger", "parse_theme", "set_file_logger", "JSONFormatter"]
|
|
31
|
+
|
|
30
32
|
HIGHLIGHTED_KEYWORDS = [ # these keywords are highlighted specially
|
|
31
33
|
"Played",
|
|
32
34
|
"animations",
|
|
@@ -50,9 +52,9 @@ Loading the default color configuration.[/logging.level.error]
|
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
def make_logger(
|
|
53
|
-
parser: configparser.
|
|
55
|
+
parser: configparser.SectionProxy,
|
|
54
56
|
verbosity: str,
|
|
55
|
-
) -> tuple[logging.Logger, Console]:
|
|
57
|
+
) -> tuple[logging.Logger, Console, Console]:
|
|
56
58
|
"""Make the manim logger and console.
|
|
57
59
|
|
|
58
60
|
Parameters
|
|
@@ -84,25 +86,29 @@ def make_logger(
|
|
|
84
86
|
theme = parse_theme(parser)
|
|
85
87
|
console = Console(theme=theme)
|
|
86
88
|
|
|
87
|
-
|
|
88
|
-
error_console = Console(theme=theme, file=sys.stderr)
|
|
89
|
+
error_console = Console(theme=theme, stderr=True)
|
|
89
90
|
|
|
90
91
|
# set the rich handler
|
|
91
|
-
RichHandler.KEYWORDS = HIGHLIGHTED_KEYWORDS
|
|
92
92
|
rich_handler = RichHandler(
|
|
93
93
|
console=console,
|
|
94
94
|
show_time=parser.getboolean("log_timestamps"),
|
|
95
|
+
keywords=HIGHLIGHTED_KEYWORDS,
|
|
95
96
|
)
|
|
96
97
|
|
|
97
98
|
# finally, the logger
|
|
98
99
|
logger = logging.getLogger("manim")
|
|
99
100
|
logger.addHandler(rich_handler)
|
|
100
101
|
logger.setLevel(verbosity)
|
|
102
|
+
logger.propagate = False
|
|
103
|
+
|
|
104
|
+
if not (libav_logger := logging.getLogger()).hasHandlers():
|
|
105
|
+
libav_logger.addHandler(rich_handler)
|
|
106
|
+
libav_logger.setLevel(verbosity)
|
|
101
107
|
|
|
102
108
|
return logger, console, error_console
|
|
103
109
|
|
|
104
110
|
|
|
105
|
-
def parse_theme(parser: configparser.
|
|
111
|
+
def parse_theme(parser: configparser.SectionProxy) -> Theme:
|
|
106
112
|
"""Configure the rich style of logger and console output.
|
|
107
113
|
|
|
108
114
|
Parameters
|
|
@@ -178,7 +184,7 @@ class JSONFormatter(logging.Formatter):
|
|
|
178
184
|
|
|
179
185
|
"""
|
|
180
186
|
|
|
181
|
-
def format(self, record:
|
|
187
|
+
def format(self, record: logging.LogRecord) -> str:
|
|
182
188
|
"""Format the record in a custom JSON format."""
|
|
183
189
|
record_c = copy.deepcopy(record)
|
|
184
190
|
if record_c.args:
|