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.

Files changed (239) hide show
  1. {manim-0.18.0.post0 → manim-0.19.0}/LICENSE.community +1 -1
  2. {manim-0.18.0.post0 → manim-0.19.0}/PKG-INFO +40 -39
  3. {manim-0.18.0.post0 → manim-0.19.0}/README.md +4 -2
  4. {manim-0.18.0.post0 → manim-0.19.0}/manim/__init__.py +3 -6
  5. manim-0.19.0/manim/__main__.py +101 -0
  6. {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/__init__.py +6 -3
  7. {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/cli_colors.py +16 -8
  8. {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/default.cfg +1 -3
  9. {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/logger_utils.py +14 -8
  10. {manim-0.18.0.post0 → manim-0.19.0}/manim/_config/utils.py +651 -472
  11. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/animation.py +152 -5
  12. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/composition.py +80 -39
  13. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/creation.py +196 -14
  14. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/fading.py +5 -9
  15. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/indication.py +103 -47
  16. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/movement.py +22 -5
  17. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/rotation.py +3 -2
  18. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/specialized.py +4 -6
  19. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/speedmodifier.py +10 -5
  20. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/transform.py +4 -5
  21. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/transform_matching_parts.py +1 -1
  22. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/updaters/mobject_update_utils.py +17 -14
  23. {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/camera.py +15 -6
  24. manim-0.19.0/manim/cli/__init__.py +17 -0
  25. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/cfg/group.py +70 -44
  26. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/checkhealth/checks.py +93 -75
  27. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/checkhealth/commands.py +14 -5
  28. manim-0.19.0/manim/cli/default_group.py +199 -0
  29. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/init/commands.py +32 -24
  30. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/plugins/commands.py +16 -3
  31. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/commands.py +72 -60
  32. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/ease_of_access_options.py +4 -3
  33. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/global_options.py +51 -15
  34. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/output_options.py +6 -5
  35. {manim-0.18.0.post0 → manim-0.19.0}/manim/cli/render/render_options.py +97 -32
  36. {manim-0.18.0.post0 → manim-0.19.0}/manim/constants.py +65 -19
  37. {manim-0.18.0.post0 → manim-0.19.0}/manim/gui/gui.py +2 -0
  38. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/frame.py +0 -1
  39. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/arc.py +112 -78
  40. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/boolean_ops.py +32 -25
  41. manim-0.19.0/manim/mobject/geometry/labeled.py +378 -0
  42. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/line.py +132 -64
  43. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/polygram.py +126 -30
  44. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/shape_matchers.py +35 -15
  45. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/tips.py +38 -29
  46. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graph.py +414 -133
  47. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/coordinate_systems.py +126 -64
  48. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/functions.py +25 -15
  49. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/number_line.py +24 -10
  50. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/probability.py +2 -10
  51. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/scale.py +6 -5
  52. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/matrix.py +17 -19
  53. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/mobject.py +314 -165
  54. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_compatibility.py +2 -0
  55. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_geometry.py +30 -9
  56. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_image_mobject.py +2 -0
  57. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_mobject.py +509 -343
  58. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_point_cloud_mobject.py +5 -7
  59. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_surface.py +3 -2
  60. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_three_dimensions.py +2 -0
  61. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/opengl_vectorized_mobject.py +46 -79
  62. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/svg/brace.py +63 -13
  63. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/svg/svg_mobject.py +4 -3
  64. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/table.py +11 -13
  65. manim-0.19.0/manim/mobject/text/code_mobject.py +260 -0
  66. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/numbers.py +9 -7
  67. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/tex_mobject.py +23 -14
  68. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/text_mobject.py +70 -24
  69. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/polyhedra.py +98 -1
  70. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/three_d_utils.py +4 -4
  71. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/three_dimensions.py +62 -34
  72. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/image_mobject.py +42 -24
  73. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/point_cloud_mobject.py +105 -67
  74. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/vectorized_mobject.py +496 -228
  75. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/value_tracker.py +5 -4
  76. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/vector_field.py +5 -5
  77. {manim-0.18.0.post0 → manim-0.19.0}/manim/opengl/__init__.py +3 -3
  78. manim-0.19.0/manim/plugins/__init__.py +16 -0
  79. manim-0.19.0/manim/plugins/plugins_flags.py +31 -0
  80. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/cairo_renderer.py +20 -10
  81. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/opengl_renderer.py +21 -23
  82. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/opengl_renderer_window.py +2 -0
  83. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shader.py +2 -3
  84. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shader_wrapper.py +5 -2
  85. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/vectorized_mobject_rendering.py +5 -0
  86. {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/moving_camera_scene.py +23 -0
  87. {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/scene.py +90 -43
  88. {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/scene_file_writer.py +316 -165
  89. {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/section.py +17 -15
  90. {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/three_d_scene.py +13 -21
  91. {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/vector_space_scene.py +22 -9
  92. manim-0.19.0/manim/typing.py +893 -0
  93. manim-0.19.0/manim/utils/bezier.py +2079 -0
  94. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/caching.py +13 -5
  95. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/AS2700.py +2 -0
  96. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/BS381.py +3 -0
  97. manim-0.19.0/manim/utils/color/DVIPSNAMES.py +96 -0
  98. manim-0.19.0/manim/utils/color/SVGNAMES.py +179 -0
  99. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/X11.py +3 -0
  100. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/XKCD.py +3 -0
  101. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/__init__.py +8 -5
  102. manim-0.19.0/manim/utils/color/core.py +1571 -0
  103. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/color/manim_colors.py +7 -9
  104. manim-0.19.0/manim/utils/commands.py +74 -0
  105. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/config_ops.py +18 -13
  106. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/debug.py +8 -7
  107. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/deprecation.py +90 -40
  108. manim-0.19.0/manim/utils/docbuild/__init__.py +17 -0
  109. manim-0.19.0/manim/utils/docbuild/autoaliasattr_directive.py +234 -0
  110. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/docbuild/autocolor_directive.py +21 -17
  111. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/docbuild/manim_directive.py +50 -35
  112. manim-0.19.0/manim/utils/docbuild/module_parsing.py +245 -0
  113. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/exceptions.py +6 -0
  114. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/family.py +5 -3
  115. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/family_ops.py +17 -4
  116. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/file_ops.py +26 -16
  117. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/hashing.py +9 -7
  118. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/images.py +10 -4
  119. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/ipython_magic.py +14 -8
  120. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/iterables.py +161 -119
  121. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/module_ops.py +57 -19
  122. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/opengl.py +83 -24
  123. manim-0.19.0/manim/utils/parameter_parsing.py +32 -0
  124. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/paths.py +21 -23
  125. manim-0.19.0/manim/utils/polylabel.py +168 -0
  126. manim-0.19.0/manim/utils/qhull.py +218 -0
  127. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/rate_functions.py +74 -39
  128. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/simple_functions.py +24 -15
  129. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/sounds.py +7 -1
  130. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/space_ops.py +125 -69
  131. manim-0.19.0/manim/utils/testing/__init__.py +17 -0
  132. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/_frames_testers.py +13 -8
  133. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/_show_diff.py +5 -3
  134. manim-0.19.0/manim/utils/testing/_test_class_makers.py +92 -0
  135. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/frames_comparison.py +27 -19
  136. manim-0.19.0/manim/utils/tex.py +199 -0
  137. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/tex_file_writing.py +47 -45
  138. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/tex_templates.py +2 -1
  139. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/unit.py +6 -5
  140. manim-0.19.0/pyproject.toml +221 -0
  141. manim-0.18.0.post0/manim/__main__.py +0 -60
  142. manim-0.18.0.post0/manim/cli/default_group.py +0 -67
  143. manim-0.18.0.post0/manim/cli/new/group.py +0 -189
  144. manim-0.18.0.post0/manim/mobject/geometry/labeled.py +0 -155
  145. manim-0.18.0.post0/manim/mobject/text/code_mobject.py +0 -622
  146. manim-0.18.0.post0/manim/plugins/__init__.py +0 -3
  147. manim-0.18.0.post0/manim/plugins/import_plugins.py +0 -43
  148. manim-0.18.0.post0/manim/plugins/plugins_flags.py +0 -25
  149. manim-0.18.0.post0/manim/scene/__init__.py +0 -0
  150. manim-0.18.0.post0/manim/typing.py +0 -133
  151. manim-0.18.0.post0/manim/utils/__init__.py +0 -0
  152. manim-0.18.0.post0/manim/utils/bezier.py +0 -811
  153. manim-0.18.0.post0/manim/utils/color/core.py +0 -1036
  154. manim-0.18.0.post0/manim/utils/commands.py +0 -46
  155. manim-0.18.0.post0/manim/utils/docbuild/__init__.py +0 -0
  156. manim-0.18.0.post0/manim/utils/testing/__init__.py +0 -0
  157. manim-0.18.0.post0/manim/utils/testing/_test_class_makers.py +0 -77
  158. manim-0.18.0.post0/manim/utils/tex.py +0 -269
  159. manim-0.18.0.post0/pyproject.toml +0 -149
  160. {manim-0.18.0.post0 → manim-0.19.0}/LICENSE +0 -0
  161. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/__init__.py +0 -0
  162. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/changing.py +0 -0
  163. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/growing.py +0 -0
  164. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/numbers.py +0 -0
  165. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/updaters/__init__.py +0 -0
  166. {manim-0.18.0.post0 → manim-0.19.0}/manim/animation/updaters/update.py +0 -0
  167. {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/__init__.py +0 -0
  168. {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/mapping_camera.py +0 -0
  169. {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/moving_camera.py +0 -0
  170. {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/multi_camera.py +0 -0
  171. {manim-0.18.0.post0 → manim-0.19.0}/manim/camera/three_d_camera.py +0 -0
  172. {manim-0.18.0.post0/manim/cli → manim-0.19.0/manim/cli/cfg}/__init__.py +0 -0
  173. {manim-0.18.0.post0/manim/cli/cfg → manim-0.19.0/manim/cli/checkhealth}/__init__.py +0 -0
  174. {manim-0.18.0.post0/manim/cli/checkhealth → manim-0.19.0/manim/cli/init}/__init__.py +0 -0
  175. {manim-0.18.0.post0/manim/cli/init → manim-0.19.0/manim/cli/plugins}/__init__.py +0 -0
  176. {manim-0.18.0.post0/manim/cli/new → manim-0.19.0/manim/cli/render}/__init__.py +0 -0
  177. {manim-0.18.0.post0/manim/cli/plugins → manim-0.19.0/manim/gui}/__init__.py +0 -0
  178. {manim-0.18.0.post0/manim/cli/render → manim-0.19.0/manim/mobject}/__init__.py +0 -0
  179. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/geometry/__init__.py +0 -0
  180. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/graphing/__init__.py +0 -0
  181. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/logo.py +0 -0
  182. {manim-0.18.0.post0/manim/gui → manim-0.19.0/manim/mobject/opengl}/__init__.py +0 -0
  183. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/opengl/dot_cloud.py +0 -0
  184. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/svg/__init__.py +0 -0
  185. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/text/__init__.py +0 -0
  186. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/three_d/__init__.py +0 -0
  187. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/types/__init__.py +0 -0
  188. {manim-0.18.0.post0 → manim-0.19.0}/manim/mobject/utils.py +0 -0
  189. {manim-0.18.0.post0/manim/mobject → manim-0.19.0/manim/renderer}/__init__.py +0 -0
  190. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/default/frag.glsl +0 -0
  191. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/default/vert.glsl +0 -0
  192. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/design.frag +0 -0
  193. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/design_2.frag +0 -0
  194. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/design_3.frag +0 -0
  195. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/image/frag.glsl +0 -0
  196. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/image/vert.glsl +0 -0
  197. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/NOTE.md +0 -0
  198. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/add_light.glsl +0 -0
  199. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/camera_uniform_declarations.glsl +0 -0
  200. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/finalize_color.glsl +0 -0
  201. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/get_gl_Position.glsl +0 -0
  202. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/get_rotated_surface_unit_normal_vector.glsl +0 -0
  203. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/get_unit_normal.glsl +0 -0
  204. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/position_point_into_frame.glsl +0 -0
  205. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/quadratic_bezier_distance.glsl +0 -0
  206. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/include/quadratic_bezier_geometry_functions.glsl +0 -0
  207. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/manim_coords/frag.glsl +0 -0
  208. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/manim_coords/vert.glsl +0 -0
  209. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_fill/frag.glsl +0 -0
  210. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_fill/geom.glsl +0 -0
  211. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_fill/vert.glsl +0 -0
  212. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_stroke/frag.glsl +0 -0
  213. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_stroke/geom.glsl +0 -0
  214. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/quadratic_bezier_stroke/vert.glsl +0 -0
  215. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/simple_vert.glsl +0 -0
  216. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/surface/frag.glsl +0 -0
  217. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/surface/vert.glsl +0 -0
  218. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/test/frag.glsl +0 -0
  219. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/test/vert.glsl +0 -0
  220. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/textured_surface/frag.glsl +0 -0
  221. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/textured_surface/vert.glsl +0 -0
  222. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/true_dot/frag.glsl +0 -0
  223. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/true_dot/geom.glsl +0 -0
  224. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/true_dot/vert.glsl +0 -0
  225. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_fill/frag.glsl +0 -0
  226. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_fill/vert.glsl +0 -0
  227. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_stroke/frag.glsl +0 -0
  228. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vectorized_mobject_stroke/vert.glsl +0 -0
  229. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vertex_colors/frag.glsl +0 -0
  230. {manim-0.18.0.post0 → manim-0.19.0}/manim/renderer/shaders/vertex_colors/vert.glsl +0 -0
  231. {manim-0.18.0.post0/manim/mobject/opengl → manim-0.19.0/manim/scene}/__init__.py +0 -0
  232. {manim-0.18.0.post0 → manim-0.19.0}/manim/scene/zoomed_scene.py +0 -0
  233. {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/Axes.mtp +0 -0
  234. {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/Default.mtp +0 -0
  235. {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/MovingCamera.mtp +0 -0
  236. {manim-0.18.0.post0 → manim-0.19.0}/manim/templates/template.cfg +0 -0
  237. {manim-0.18.0.post0/manim/renderer → manim-0.19.0/manim/utils}/__init__.py +0 -0
  238. {manim-0.18.0.post0 → manim-0.19.0}/manim/utils/testing/config_graphical_tests_monoframe.cfg +0 -0
  239. {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) 2021, the Manim Community Developers
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
1
+ Metadata-Version: 2.3
2
2
  Name: manim
3
- Version: 0.18.0.post0
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,<3.13
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,<10.0)
25
- Requires-Dist: Pygments (>=2.10.0,<3.0.0)
26
- Requires-Dist: backports.cached-property (>=1.0.1,<2.0.0) ; python_version < "3.8"
27
- Requires-Dist: click (>=7.2,<=9.0)
28
- Requires-Dist: click-default-group (>=1.2.2,<2.0.0)
29
- Requires-Dist: cloup (>=0.13,<2.2)
30
- Requires-Dist: dearpygui (>=1.3.1,<2.0.0) ; extra == "gui"
31
- Requires-Dist: decorator (>=5.0.7,<6.0.0)
32
- Requires-Dist: importlib-metadata (>=4.10.0,<5.0.0) ; python_version < "3.8"
33
- Requires-Dist: isosurfaces (==0.1.0)
34
- Requires-Dist: jupyterlab (>=3.0,<4.0) ; extra == "jupyterlab"
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,<2.0.0)
37
- Requires-Dist: moderngl (>=5.6.3,<6.0.0)
38
- Requires-Dist: moderngl-window (>=2.3.0,<3.0.0)
39
- Requires-Dist: networkx (>=2.5,<3.3)
40
- Requires-Dist: notebook (>=6.4,<7.0) ; extra == "jupyterlab"
41
- Requires-Dist: numpy (>=1.22,<2.0) ; python_version < "3.12"
42
- Requires-Dist: numpy (>=1.26,<2.0) ; python_version >= "3.12"
43
- Requires-Dist: pycairo (>=1.21,<2.0)
44
- Requires-Dist: pydub (>=0.25.1,<0.26.0)
45
- Requires-Dist: requests (>=2.26.0,<3.0.0)
46
- Requires-Dist: rich (>=6.0,!=12.0.0)
47
- Requires-Dist: scipy (>=1.11,<2.0) ; python_version >= "3.12"
48
- Requires-Dist: scipy (>=1.7.3,<2.0.0) ; python_version < "3.12"
49
- Requires-Dist: screeninfo (>=0.8,<0.9)
50
- Requires-Dist: skia-pathops (>=0.7.0,<0.8.0) ; python_version < "3.12"
51
- Requires-Dist: skia-pathops (>=0.8.0.post1,<0.9.0) ; python_version >= "3.12"
52
- Requires-Dist: srt (>=3.5.0,<4.0.0)
53
- Requires-Dist: svgelements (>=1.8.0,<2.0.0)
54
- Requires-Dist: tqdm (>=4.62.3,<5.0.0)
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: This repository is maintained by the Manim Community and is not associated with Grant Sanderson or 3Blue1Brown in any way (although we are definitely indebted to him for providing his work to the world). If you would like to study how Grant makes his videos, head over to his repository ([3b1b/manim](https://github.com/3b1b/manim)). This fork is updated more frequently than his, and it's recommended to use this fork if you'd like to use Manim for your own projects.
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
- > **WARNING:** 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.
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: This repository is maintained by the Manim Community and is not associated with Grant Sanderson or 3Blue1Brown in any way (although we are definitely indebted to him for providing his work to the world). If you would like to study how Grant makes his videos, head over to his repository ([3b1b/manim](https://github.com/3b1b/manim)). This fork is updated more frequently than his, and it's recommended to use this fork if you'd like to use Manim for your own projects.
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
- > **WARNING:** 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
+ > [!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 pkg_resources
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 contextlib import _GeneratorContextManager, contextmanager
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) -> _GeneratorContextManager:
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.ConfigParser) -> Context:
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().settings(
34
- theme=HelpTheme(**theme_settings), **formatter_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().settings(
38
- theme=HelpTheme.dark().with_(**theme_settings), **formatter_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().settings(
42
- theme=HelpTheme.light().with_(**theme_settings), **formatter_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.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
- # With rich 9.5.0+ we could pass stderr=True instead
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.ConfigParser) -> Theme:
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: dict) -> str:
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: