****** v0.5.0 ****** :Date: April 02, 2021 Contributors ============ A total of 35 people contributed to this release. People with a '+' by their names authored a patch for the first time. * Abel Aebker + * Abhijith Muthyala * AntonBallmaier + * Aron * Benjamin Hackl * Bogdan Stăncescu + * Darylgolden * Devin Neal * GameDungeon + * Hugues Devimeux * Jason Villanueva * Kapil Sachdeva * KingWampy * Lionel Ray + * Mark Miller * Mohammad Al-Fetyani + * Naveen M K * Niklas Dewally + * Oliver + * Roopesh + * Seb Pearce + * aebkea + * friedkeenan * hydrobeam + * kolibril13 * sparshg * tfglynn + The patches included in this release have been reviewed by the following contributors. * Abel Aebker * Abhijith Muthyala * Benjamin Hackl * Bogdan Stăncescu * Devin Neal * Hugues Devimeux * Jason Villanueva * Kapil Sachdeva * KingWampy * Leo Torres * Lionel Ray * Mark Miller * Mohammad Al-Fetyani * Naveen M K * Oliver * Ricky Chon * vector67 Pull requests merged ==================== A total of 64 pull requests were merged for this release. Highlights ---------- * :pr:`1075`: Add OpenGL Renderer Adds an OpenGLRenderer, OpenGLCamera, OpenGL-enabled Mobjects, and a ``--use_opengl_renderer`` flag. When this flag is passed, you can pass the ``-p`` flag to preview animations, the ``-w`` flag to generate video, and the ``-q`` flag to specify render quality. If you don't pass either the ``-p`` or the ``-w`` flag, nothing will happen. Scenes rendered with the OpenGL renderer must *only* use OpenGL-enabled Mobjects. Deprecated classes and functions -------------------------------- * :pr:`1124`: Deprecated :class:`ShowCreation` in favor of :class:`Create` 1. Deprecated :class:`ShowCreation` in favor of :class:`Create` across the library with the exception of the `show_creation` boolean variable `vector_space_scene.py` 2. Added a deprecation warning in the original :class:`ShowCreation` class. * :pr:`1110`: Deprecated SmallDot + OpenGLSmallDot `SmallDot` isn't necessary and a deprecation warning will be raised. This will be removed in a future release. New features ------------ * :pr:`1037`: Added new fade and transform animations (:class:`~.TransformMatchingShapes`, :class:`~.TransformMatchingTex`, :class:`~.FadeTransform`) from 3b1b/manim Added new Fade animation: :class:`~FadeOutToPoint` Added :class:`~FadeTransform` and :class:`~FadeTransformPieces` for transforming mobjects and submobjects with a fade Added :class:`~TransformMatchingShapes` and :class:`~TransformMatchingTex` for transforming mobjects and tex that have matching parts * :pr:`1097`: Added 3D Mobject :class:`~.Dot3D` * :pr:`1074`: Added jupyter media_width option to the config * :pr:`1107`: Added :class:`~.Unwrite` animation class to complement :class:`~.Write` Added :class:`Unwrite` which inherits from :class:`~.Write`. It automatically reverses the animation of :class:`~.Write` by passing the reversed rate function, but it also takes an additional boolean parameter `reverse` which, if `False`, renders the animation from left to right (assuming text oriented in the usual way), but if `True`, it renders right to left. * :pr:`1085`: Added :class:`~.Angle` and :class:`~.RightAngle` for intersecting lines :class:`~.Angle` and :class:`~.RightAngle` both take two lines as input. If they intersect, or share a common vertex, an angle is drawn between them. Users can customize the look of the angle and also use a dotted right angle. Enhancements ------------ * :pr:`1144`: Improved quality of GIFs * :pr:`1157`: Refresh triangulation on call to :meth:`~.OpenGLVMobject.apply_points_function` Rotate called apply_points_function, which was previous not subclassed by OpenGLMobject - now it is. Then, the vertex normals can be updated too. Additionally, the old_points matrix would change after rotating, making the old points / new points test irrelevant. This is addressed with a .copy call. * :pr:`1151`: Added parametric function support to :class:`OpenGLSurface` * :pr:`1139`: In-Code `config["preview"]` Support * :pr:`1123`: Added caching, skipping, and user-specified background colors to the OpenGL renderer OpenGL play logic has been improved to support caching and skipping with `-n` argument ( it is now similar to Cairo play logic). A random bug was fixed in OpenGLSurface and OpenGL background color can now be changed via `background_color` argument. * :pr:`1118`: Allow passing animation arguments with .animate syntax Users will now be able to do things like `obj.animate(run_time=2).method(arg)` if they want to specify animation arguments for an individual `.animate` call, and can still not specify any arguments like `obj.animate.method(arg)`. Passing animation arguments is only allowed directly after `.animate` is accessed, if passed elsewhere then a `ValueError` is raised. * :pr:`718`: Rotating the numbers in y axis In Axes, the y axis will be rotated 90deg but the numbers are also rotated and shouldn't be. Fixes this issue. * :pr:`1070`: Raise FileNotFoundError when unable to locate the .cfg file specified via ``--config_file`` Raising the error will stop script execution and let the user know that there are problems with the `--config_file` location instead of reverting back to the default configuration. Fixed bugs ---------- * :pr:`1224`: Fixed :class:`~.ShowIncreasingSubsets`, :class:`~.ShowSubmobjectsOneByOne`, and :class:`~.AddTextLetterByLetter` * :pr:`1201`: Prevent crash on :meth:`~.Scene.embed` for empty scenes * :pr:`1192`: Fixed issue when an animation is cached, manim can't merge the partial movie files. * :pr:`1193`: Fixed using :class:`~.Animation` without a child :class:`~.Mobject` in :class:`~.AnimationGroup` `AnimationGroup` may now take `Animation` objects which do not have a child `Mobject`, such as `Wait`. * :pr:`1170`: Fixed minor SVG parsing bugs * :pr:`1159`: Added support for multiple transforms in the same SVG element * :pr:`1156`: Fixed :class:`~.DrawBorderThenFill` to support OpenGL and improved type hints for some functions Fixed a bug in :class:`~.DrawBorderThenFill` that prevented :class:`~.Write` animations from working with :class:`~.OpenGLVMobjects` and slightly improved type hints for some animation functions to include :class:`~.OpenGLVMobject`. * :pr:`1134`: Fixed the `-a` flag. The ``-a`` / ``--write-all`` flag was broken. When used, it would cause Manim to crash just after beginning to render the second scene. * :pr:`1115`: Fixed bugs in :class:`~.OpenGLMobject` and added :class:`ApplyMethod` support Fixed undefined variables and converted :class:`Mobject` to :class:`OpenGLMobject`. Also, fixed assert statement in :class:`ApplyMethod`. * :pr:`1092`: Refactored coordinate_systems.py, fixed bugs, added :class:`~.NumberPlane` test The default behavior of :meth:`~.Mobject.rotate` is to rotate about the center of :class:`~.Mobject`. :class:`~.NumberLine` is symmetric about the point at the number 0 only when ``|x_min|`` == ``|x_max|``. Ideally, the rotation should coincide with the point at number 0 on the line. Added a regression test and additionally fixed some bugs introduced in :pr:`718`. * :pr:`1078`: Removed stray print statements from `__main__.py` Uses rich's print traceback instead and fixes an issue in printing the version twice when `manim --version` is called. * :pr:`1086`: Fixed broken line spacing in :class:`~.Text` The `line_spacing` kwarg was missing when creating :class:`Text` Mobjects; this adds it. * :pr:`1083`: Corrected the shape of :class:`~.Torus` :class:`Torus` draws a surface with an elliptical cross-section when `minor_radius` is different from 1. This PR ensures the cross-section is always a circle. Documentation-related changes ----------------------------- * :pr:`1217`: Copyedited the document on testing in our documentation * :pr:`1206`: Added Docstrings to :class:`~.Mobject` * :pr:`1218`: Removed BezierSpline from the example gallery * :pr:`1219`: Updated Dockerfile (include dependencies for building documentation), moved documentation to main README * :pr:`1209`: Added :ref_methods: to the manim directive This allows class methods to be linked in the documentation. Checkout the `example references `_ below the code to see how this is used! * :pr:`1204`: Added rotation example to example gallery * :pr:`1137`: Added GitHub Wiki pages on adding testing/documentation to Sphinx Docs * :pr:`1114`: Added examples for :class:`~.Ellipse`, :class:`~.Polygon`, :class:`~.RegularPolygon`, :class:`~.Triangle` and :class:`~.RoundedRectangle` * :pr:`1195`: Removed SmallDot from example * :pr:`1130`: Added pre-commit to run black and flake8, updated contributing documentation accordingly * :pr:`1138`: Moved previous version changelogs to separate files; Added a Script to generate future changelogs This script quickly generates a changelog for whoever is making the release. * :pr:`1190`: Added note in contributing guide to read the latest version of the documentation * :pr:`1188`: Added sounds example to docs * :pr:`1165`: Added documentation for installing Manim on Colab * :pr:`1128`: Added examples for :class:`~.DashedLine`, :class:`~.TangentLine`, :class:`~.Elbow`, :class:`~.Arrow`, :class:`~.Vector`, :class:`~.DoubleArrow` * :pr:`1177`: Replace links to the latest version of the documentation to the stable version * :pr:`1077`: Added details to :func:`~.Mobject.get_critical_point` * :pr:`1154`: Fixed some typing hints. (ints to floats) * :pr:`1036`: Added :class:`~.SurroundingRectangle` to the example gallery * :pr:`1103`: Added documentation and examples for Square, Dot, Circle and Rectangle * :pr:`1101`: Added documentation to :class:`~.Mobject` * :pr:`1088`: Added new svg files to documentation and imports In particular, SVGPathMobject, VMobjectFromPathstring, and the style_utils functions to manim's namespace. * :pr:`1076`: Improve documentation for GraphScene Updated `coords_to_point` and `point_to_coords` under `manim/scene/graph_scene.py` as the dosctring of each function confusingly described the opposite of what it is supposed to do. Changes concerning the testing system ------------------------------------- * :pr:`1160`: Enable CI testing for OpenGL * :pr:`1100`: Rewrote test cases to use sys.executable in the command instead of "python" Tests would fail due to `capture()` not spawning a subshell in the correct environment, so when python was called, the test would be unable to find necessary packages. * :pr:`1079`: Removed the hardcoded value, `manim`, in `test_version.py` Changes to our development infrastructure ----------------------------------------- * :pr:`1213`: Updated TinyTex dependencies * :pr:`1187`: Add CodeCov to Github Workflow * :pr:`1166`: CI: Use poetry's cache dir rather than pip * :pr:`1071`: Enable pytest-cov based code coverage - Include pytest-cov as a python module as part of developer dependencies - In updating poetry to include pytest-cov, manimpango moved from version 0.2.3 to 0.2.4, and libpango1.0-dev needed to be installed in Ubuntu. - Add to the CI workflow (`ci.yml`) to create and upload test coverage. * :pr:`1073`: Removed "one line summary" from PULL_REQUEST_TEMPLATE.md Code quality improvements and similar refactors ----------------------------------------------- * :pr:`1167`: Merge :class:`~.OpenGLMobject` and :class:`~.Mobject` * :pr:`1164`: Fixed single PEP8 style in `cairo_renderer.py` * :pr:`1140`: Flake8 Compat & Code Cleanup * :pr:`1019`: Refactored :meth:`~.Scene.play` - Removed the _**three**_ decorators of :meth:`~.Scene.play`, in particular: caching logic and file writer logic are now included within :meth:`~.Scene.play` (it wasn't possible before, because `scene.wait` and `scene.play` were two different things). - Added `is_static_wait` attributes to Wait. (<=> if wait is a frozen frame). - Renamed and moved `scene.add_static_frame` to `renderer.freeze_current_frame`. - Now when calling play without animation, it raises `ValueError` instead of just a warning. - Fixed :pr:`874` by modifying `renderer.update_skipping_status` - `renderer` starts the animation with `scene.begin_animations` (`scene.compile_animation_data` used to do this) - The run time and the time progression generation is now done in `scene.play_internal` although it'd make more sense that renderer processes it later. - Added a bunch of cool tests thanks to mocks, and thanks to the new syntax `scene.render`