diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2bbbaba779..ed0b5de990 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,36 +11,48 @@ Before filling in the details, ensure: - "fixed that styling issue" - not descriptive enough - "fixed issue #XYZ" - end-user needs to do further research --> +## Changelog / Overview + + + + ## Motivation - + -## Overview / Explanation for Changes - +For PRs introducing new features, please provide code snippets using the +newly introduced functionality and ideally even the expected rendered output. +--> ## Testing Status - + ## Further Comments - + -## Acknowledgements +## Checklist - [ ] I have read the [Contributing Guidelines](https://docs.manim.community/en/latest/contributing.html) -- [ ] I have chosen a descriptive PR title (see top of PR template for examples) - +- [ ] I have written a descriptive PR title (see top of PR template for examples) +- [ ] I have written a changelog entry for the PR or deem it unnecessary +- [ ] My new functions/classes either have a docstring or are private +- [ ] My new functions/classes have [tests](https://github.com/ManimCommunity/manim/wiki/Testing) added and (optional) examples in the docs +- [ ] My new documentation builds, looks correctly formatted, and adds no additional build warnings + - + ## Reviewer Checklist -- [ ] Newly added functions/classes are either private or have a docstring +- [ ] The PR title is descriptive enough +- [ ] The PR is labeled correctly +- [ ] The changelog entry is completed if necessary +- [ ] Newly added functions/classes either have a docstring or are private - [ ] Newly added functions/classes have [tests](https://github.com/ManimCommunity/manim/wiki/Testing) added and (optional) examples in the docs - [ ] Newly added documentation builds, looks correctly formatted, and adds no additional build warnings -- [ ] The PR title is descriptive enough diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 852501426c..8226b5a801 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -2,426 +2,14 @@ Changelog ######### -.. contents:: Release history - :depth: 1 - :local: - :backlinks: none - - **************** Upcoming release **************** :Date: TBD +.. toctree:: + :glob: + :reversed: -****** -v0.4.0 -****** - -:Date: March 3, 2021 - -The changes since Manim Community release v0.3.0 are listed below. - -Breaking Changes -================ - -- :pr:`915`: Manim's SVG engine has been reworked and is able to handle a wider variations of SVG files. In particular: fill and stroke properties are now retained from the original files. Breaking change: ``VMobjectFromSVGPathstring`` is deprecated and has been renamed to ``SVGPathMobject``. - - -New Features -============ - -- :pr:`1026`: Add 3D Mobjects: :class:`~.Cone`, :class:`~.Cylinder`, :class:`~.Line3D`, :class:`~.Arrow3D` and :class:`~.Torus` -- :pr:`1047`: Add documentation and examples for :class:`~.Matrix` -- :pr:`1044`: ``register_font`` is available for macOS -- :pr:`995`: Add generic :func:`~.Mobject.set` method and compatibility layer between properties and ``get_*``/``set_*`` methods - -Bugfixes and Enhancements -========================= - -- :pr:`981`: Fixed hot reload functionality for the WebGL renderer on Windows -- :pr:`1053`: Repair links to source code in stable version of documentation -- :pr:`1067`: Add ManimPango to ReadTheDocs requirements -- :pr:`1058`: Replace ```` syntax by Pango's ```` for coloring parts of :class:`~.MarkupText` and allow using colors for underline, overline and strikethrough in MarkupText -- :pr:`1063`: Fix documentation related to ``.animate`` -- :pr:`1065`: Remove duplicate word 'vector' -- :pr:`1060`: Update Linux installation instructions to mention the installation of Pango -- :pr:`1050`: Ensure that the user-supplied stroke color and width gets applied to :class:`~.Cross` -- :pr:`1059`: More descriptive error when accessing an unhandled mobject attribute -- :pr:`1048`: Use absolute path in ``make_and_open_docs.py`` -- :pr:`1000`: Remove ``MovingCameraScene.setup`` and ``MovingCameraScene.camera_frame`` -- :pr:`1051`: Corrections for setting stroke related attributes on :class:`~.VMobject` -- :pr:`1043`: Make :class:`~.CubicBezier` explicitly accept four points -- :pr:`1046`: Use any version of ``importlib-metadata`` -- :pr:`1030`: Parse ``.log`` file and try to print LaTeX errors if compilation fails -- :pr:`1015`: Documentation: Add more explicit instructions related to ``tlmgr`` -- :pr:`1028`: Documentation: Update installation guide on mac with Apple Silicon -- :pr:`1032`: Remove ``Square.side_length`` property -- :pr:`1031`: Fix link to wikipedia vector graphics page -- :pr:`1021`: Documentation: Added example to :class:`~.CubicBezier` -- :pr:`1017`: Added ``progress_bar`` to ``digest_args`` to fix the ``--progress_bar`` CLI flag -- :pr:`1018`: Remove redundancy in :class:`~.FunctionGraph` arguments -- :pr:`1024`: Migrate ``width`` / ``height`` / ``depth`` to properties -- :pr:`1022`: Fix ``-p`` flag when passing ``-s`` -- :pr:`1008`: CI pipeline: fix release asset upload -- :pr:`983`: Make sure last frame for animations with updaters is correct -- :pr:`984`: Add manim version to CLI output, append version name for generated ``.gif`` and ``.png`` files, add version to metadata of rendered videos, change dark blue terminal text to default green -- :pr:`993`: Fix setting Mobject color to a gradient by passing a list of colors in :meth:`~.VMobject.set_color` -- :pr:`1003`: Fix animation :class:`~.GrowArrow` -- :pr:`1010`: Disable STDIN interaction for ffmpeg concat. -- :pr:`969`: Fix the ``--tex_template`` CLI flag -- :pr:`989`: Fix the ``manim cfg export`` subcommand -- :pr:`1005`: Fix the feature where ``-`` is used as the filename -- :pr:`998`: Allow using hexadecimal color codes with 3 characters -- :pr:`996`: Changed the message of ``manim --version`` to not include "Edition" - - - -****** -v0.3.0 -****** - -:Date: February 1, 2021 - -The changes since Manim Community release v0.2.0 are listed below. - - -New Features -============ - -- :pr:`945`: :meth:`~.Graph.change_layout` method for :class:`~.Graph` mobject -- :pr:`943`: IPython %%manim magic -- :pr:`970`: Added ``--version`` command line flag -- :pr:`948`: Allow passing a code string to :class:`~.Code` -- :pr:`917`: Allow overriding new-style method animations -- :pr:`756`: Allow setting frame_height and frame_width via config file -- :pr:`939`: Added custom font files support -- :pr:`892`: Added ManimCommunity colors -- :pr:`922`: Tree layout for Graph mobject -- :pr:`935`: Added code of conduct -- :pr:`916`: Multi-column layout for partite graphs -- :pr:`742`: Units: Pixels, Munits, Percent in :mod:`~.utils.unit` -- :pr:`893`: Convenience method :meth:`~.Graph.from_networkx` for creating a graph from a networkx graph - -Bugfixes and Enhancements -========================= - -- :pr:`988`: Fix Windows CI pipeline by adding missing LaTeX package -- :pr:`961`: Added typings and docs for vectorized mobjects and bezier related functions -- :pr:`977`: JupyterLab docker image and documentation for manim and IPython -- :pr:`985`: Fix variable name for webgl renderer -- :pr:`954`: Fix edges lagging behind vertices in animations of graphs -- :pr:`980`: Allow usage of custom Pygments styles in Code -- :pr:`952`: Allow passing tween information to the WebGL frontend -- :pr:`978`: Fix ``possible_paths`` not printing in ``code_mobject`` -- :pr:`976`: Update ``ManimPango`` -- :pr:`967`: Automatically import plugins -- :pr:`971`: Make ManimCommunity look consistent -- :pr:`957`: Raise ``NotImplementedError`` when trying to chain overridden method animations -- :pr:`947`: Several fixes and improvements for :class:`~.PointCloundDot` -- :pr:`923`: Documentation: move installation instructions for developers to page for developers -- :pr:`964`: Added unit test for :class:`~.NumberLine`'s unit vector -- :pr:`960`: Magnitude of :class:`~.NumberLine`'s unit vector should be ``unit_size``, not 1 -- :pr:`958`: Fix code formatting in ``utils/debug.py`` -- :pr:`953`: Update license year -- :pr:`944`: Interpolate stroke opacity in :class:`~.FadeIn` and update ``stroke_opacity`` and ``fill_opacity`` in :meth:`~.VMobject.set_stroke` and :meth:`~.VMobject.set_fill` -- :pr:`865`: Rename ``get_submobject_index_labels`` to ``index_labels`` -- :pr:`941`: Added keyword arguments ``x_min``, ``x_max``, ``y_min``, ``y_max`` to :class:`~.ThreeDAxes` -- :pr:`886`: Let the render progress bar show details about the rendered animation again -- :pr:`936`: Fix :class:`~.BulletedList` TeX environment problem and add a typing to ``get_module`` -- :pr:`938`: Remove dependency on progressbar -- :pr:`937`: Change 'brew cask install' to 'brew install --cask' for CI pipeline -- :pr:`933`: Make matrix work with lists again -- :pr:`932`: Correctly parse ``log_dir`` option -- :pr:`920`: Raise error if markup in :class:`~.MarkupText` is invalid -- :pr:`929`: Raise an error if a :class:`~.Matrix` object is created with < 2-dimensional input -- :pr:`907`: Make Scene.add_sound work again (when running with ``--disable_caching``) -- :pr:`906`: Allow new-style method animation to be used in animation groups -- :pr:`908`: Removed deprecated command line arguments from documentation -- :pr:`903`: Tiny grammar improvements -- :pr:`904`: Added blank line between imports and class example -- :pr:`898`: CI: fix publish workflow - - -****** -v0.2.0 -****** - -:Date: January 1, 2021 - -The changes since Manim Community release v0.1.1 are listed below. - -Breaking Changes -================ - -- Remove all CONFIG dictionaries and all calls to ``digest_config`` and allow - passing options directly to the constructor of the corresponding classes (:pr:`783`). - - Practically, this means that old constructions using ``CONFIG`` like:: - - class SomeMobject(Thing): - CONFIG = { - "my_awesome_property": 42 - } - - where corresponding objects were then instantiated as ``my_mobject = SomeMobject()`` - should now be created simply using ``my_mobject = SomeMobject(my_awesome_property=42)``. - -- Remove old syntax for animating mobject methods by passing the methods and arguments to ``self.play``, - and use a new syntax featuring the ``animate`` property (:pr:`881`). - - For example: the old-style ``play`` call - :: - - self.play(my_square.shift, LEFT) - - should be replaced with the new following call using the ``animate`` property:: - - self.play(my_square.animate.shift(LEFT)) - -New Features -============ - -- Added creation animation for :class:`~.ManimBanner` (:pr:`814`) -- Added some documentation to :meth:`~.Scene.construct` (:pr:`753`) -- Added a black and white monochromatic version of Manim's logo (:pr:`826`) -- Added support for a plugin system (``manim plugin`` subcommand + documentation) (:pr:`784`) -- Implemented ``__add__``, ``__iadd__``, ``__sub__``, and ``__isub__`` for :class:`~.Mobject` (allowing for notation like ``some_vgroup + some_mobject``) (:pr:`790`) -- Added type hints to several files in the library (:pr:`835`) -- Added some examples to :mod:`~.animation.creation` (:pr:`820`) -- Added some examples to :class:`~.DashedLine` and :class:`~.CurvesAsSubmobjects` (:pr:`833`) -- Added new implementation for text rendered with Pango, :class:`~.MarkupText`, which can be formatted with an HTML-like syntax (:pr:`855`) -- Added Fading in and out examples and deprecation of ``FadeInFromDown`` and ``FadeOutAndShiftDown`` (:pr:`827`) -- Added example for :class:`~.MoveAlongPath` to the docs (:pr:`873`) -- Added ambient rotate for other angles - theta, phi, gamma (:pr:`660`) -- Use custom bindings for Pango (:pr:`878`) -- Added :class:`~.Graph`, a basic implementation for (graph theory) graphs (:pr:`861`) -- Allow for chaining methods when using the new ``.animate`` syntax in :meth:`~.Scene.play` (:pr:`889`) - -Bugfixes -======== - -- Fix doctests in .rst files (:pr:`797`) -- Fix failing doctest after adding ``manim plugin`` subcommand (:pr:`831`) -- Normalize the direction vector in :meth:`~.mobject_update_utils.always_shift` (:pr:`839`) -- Add ``disable_ligatures`` to :class:`~.Text` (via :pr:`804`) -- Make scene caching aware of order of Mobjects (:pr:`845`) -- Fix :class:`~.CairoText` to work with new config structure (:pr:`858`) -- Added missing argument to classes inheriting from :class:`~.Matrix` (:pr:`859`) -- Fixed: ``z_index`` of mobjects contained in others as submobjects is now properly respected (:pr:`872`) -- Let :meth:`~.ParametricSurface.set_fill_by_checkboard` return the modified surface to allow method chaining (:pr:`883`) -- Mobjects added during an updater are added to ``Scene.moving_mobjects`` (:pr:`838`) -- Pass background color to JS renderer (:pr:`876`) -- Small fixes to docstrings. Tiny cleanups. Remove ``digest_mobject_attrs``. (:pr:`834`) -- Added closed shape detection in :class:`~.DashedVMobject` in order to achieve an even dash pattern (:pr:`884`) -- Fix Spelling in docstrings and variables across the library (:pr:`890`) - -Other changes -============= - -- Change library name to manim (:pr:`811`) -- Docker: use local files when building an image (:pr:`803`) -- Let ffmpeg render partial movie files directly instead of temp files (:pr:`817`) -- ``manimce`` to ``manim`` & capitalizing Manim in readme (:pr:`794`) -- Added flowchart for different docstring categories (:pr:`828`) -- Improve example in module docstring of :mod:`~.animation.creation` + explicitly document buff parameter in :meth:`~.Mobject.arrange` (:pr:`825`) -- Disable CI pipeline for Python 3.6 (:pr:`823`) -- Update URLs in docs (:pr:`832`) -- Move upcoming changelog to GitHub-wiki (:pr:`822`) -- Change badges in readme (:pr:`854`) -- Exclude generated gRPC files from source control (:pr:`868`) -- Added linguist-generated attribute to ``.gitattributes`` (:pr:`877`) -- Cleanup: removed inheritance from ``object`` for some classes, refactor some imports (:pr:`795`) -- Change several ``str.format()`` to ``f``-strings (:pr:`867`) -- Update javascript renderer (:pr:`830`) -- Bump version number to 0.2.0, update changelog (:pr:`894`) - - -****** -v0.1.1 -****** - -:Date: December 1, 2020 - -Changes since Manim Community release v0.1.0 - -Plugins -======= - -#. Provided a standardized method for plugin discoverability, creation, - installation, and usage. See the :ref:`documentation `. - -Fixes -===== - -#. JsRender is optional to install. (via :pr:`697`). -#. Allow importing modules from the same directory as the input - file when using ``manim`` from the command line (via :pr:`724`). -#. Remove some unnecessary or unpythonic methods from :class:`~.Scene` - (``get_mobjects``, ``add_mobjects_among``, ``get_mobject_copies``), - via :pr:`758`. -#. Fix formatting of :class:`~.Code` (via :pr:`798`). - -Configuration -============= - -#. Removed the ``skip_animations`` config option and added the - ``Renderer.skip_animations`` attribute instead (via :pr:`696`). -#. The global ``config`` dict has been replaced by a global ``config`` instance - of the new class :class:`~.ManimConfig`. This class has a dict-like API, so - this should not break user code, only make it more robust. See the - Configuration tutorial for details. -#. Added the option to configure a directory for external assets (via :pr:`649`). - - -Documentation -============= - -#. Add ``:issue:`` and ``:pr:`` directives for simplifying linking to issues and - pull requests on GitHub (via :pr:`685`). -#. Add a ``skip-manim`` tag for skipping the ``.. manim::`` directive when - building the documentation locally (via :pr:`796`). - - -Mobjects, Scenes, and Animations -================================ - -#. The ``alignment`` attribute to Tex and MathTex has been removed in favour of ``tex_environment``. -#. :class:`~.Text` now uses Pango for rendering. ``PangoText`` has been removed. The old implementation is still available as a fallback as :class:`~.CairoText`. -#. Variations of :class:`~.Dot` have been added as :class:`~.AnnotationDot` - (a bigger dot with bolder stroke) and :class:`~.LabeledDot` (a dot containing a - label). -#. Scene.set_variables_as_attrs has been removed (via :pr:`692`). -#. Ensure that the axes for graphs (:class:`GraphScene`) always intersect (:pr:`580`). -#. Now Mobject.add_updater does not call the newly-added updater by default - (use ``call_updater=True`` instead) (via :pr:`710`) -#. VMobject now has methods to determine and change the direction of the points (via :pr:`647`). -#. Added BraceBetweenPoints (via :pr:`693`). -#. Added ArcPolygon and ArcPolygonFromArcs (via :pr:`707`). -#. Added Cutout (via :pr:`760`). -#. Added Mobject raise not implemented errors for dunder methods and implementations for VGroup dunder methods (via :pr:`790`). -#. Added :class:`~.ManimBanner` for a animated version of our logo and banner (via :pr:`729`) -#. The background color of a scene can now be changed reliably by setting, e.g., - ``self.camera.background_color = RED`` (via :pr:`716`). - - - -****** -v0.1.0 -****** - -:Date: October 21, 2020 - -This is the first release of manimce after forking from 3b1b/manim. As such, -developers have focused on cleaning up and refactoring the codebase while still -maintaining backwards compatibility wherever possible. - - -New Features -============ - -Command line ------------- - -#. Output of 'manim --help' has been improved -#. Implement logging with the :code:`rich` library and a :code:`logger` object instead of plain ol' prints -#. Added a flag :code:`--dry_run`, which doesn't write any media -#. Allow for running manim with :code:`python3 -m manim` -#. Refactored Tex Template management. You can now use custom templates with command line args using :code:`--tex_template`! -#. Re-add :code:`--save_frames` flag, which will save each frame as a png -#. Re-introduce manim feature that allows you to type manim code in :code:`stdin` if you pass a minus sign :code:`(-)` as filename -#. Added the :code:`--custom_folders` flag which yields a simpler output folder structure -#. Re-implement GIF export with the :code:`-i` flag (using this flag outputs ONLY a .gif file, and no .mp4 file) -#. Added a :code:`--verbose` flag -#. You can save the logs to a file by using :code:`--log_to_file` -#. Read :code:`tex_template` from config file if not specified by :code:`--tex_template`. -#. Add experimental javascript rendering with :code:`--use_js_renderer` -#. Add :code:`-q/--quality [k|p|h|m|l]` flag and removed :code:`-m/-l` flags. -#. Removed :code:`--sound` flag - - -Config system -------------- - -#. Implement a :code:`manim.cfg` config file system, that consolidates the global configuration, the command line argument parsing, and some of the constants defined in :code:`constants.py` -#. Added utilities for manipulating Manim’s :code:`.cfg` files. -#. Added a subcommand structure for easier use of utilities managing :code:`.cfg` files -#. Also some variables have been moved from ``constants.py`` to the new config system: - - #. ``FRAME_HEIGHT`` to ``config["frame_width"]`` - #. ``TOP`` to ``config["frame_height"] / 2 * UP`` - #. ``BOTTOM`` to ``config["frame_height"] / 2 * DOWN`` - #. ``LEFT_SIDE`` to ``config["frame_width"] / 2 * LEFT`` - #. ``RIGHT_SIDE`` to ``config["frame_width"] / 2 * RIGHT`` - #. ``self.camera.frame_rate`` to ``config["frame_rate"]`` - - - - -Mobjects, Scenes, and Animations --------------------------------- - -#. Add customizable left and right bracket for :code:`Matrix` mobject and :code:`set_row_colors` method for matrix mobject -#. Add :code:`AddTeXLetterByLetter` animation -#. Enhanced GraphScene - - #. You can now add arrow tips to axes - #. extend axes a bit at the start and/or end - #. have invisible axes - #. highlight the area between two curves -#. ThreeDScene now supports 3dillusion_camera_rotation -#. Add :code:`z_index` for manipulating depth of Objects on scene. -#. Add a :code:`VDict` class: a :code:`VDict` is to a :code:`VGroup` what a :code:`dict` is to a :code:`list` -#. Added Scene-caching feature. Now, if a partial movie file is unchanged in your code, it isn’t rendered again! [HIGHLY UNSTABLE We're working on it ;)] -#. Most :code:`get_` and :code:`set_` methods have been removed in favor of instance attributes and properties -#. The :code:`Container` class has been made into an AbstractBaseClass, i.e. in cannot be instantiated. Instead, use one of its children classes -#. The ``TextMobject`` and ``TexMobject`` objects have been deprecated, due to their confusing names, in favour of ``Tex`` and ``MathTex``. You can still, however, continue to use ``TextMobject`` and ``TexMobject``, albeit with Deprecation Warnings constantly reminding you to switch. -#. Add a :code:`Variable` class for displaying text that continuously updates to reflect the value of a python variable. -#. The ``Tex`` and ``MathTex`` objects allow you to specify a custom TexTemplate using the ``template`` keyword argument. -#. :code:`VGroup` now supports printing the class names of contained mobjects and :code:`VDict` supports printing the internal dict of mobjects -#. Add all the standard easing functions -#. :code:`Scene` now renders when :code:`Scene.render()` is called rather than upon instantiation. -#. :code:`ValueTracker` now supports increment using the `+=` operator (in addition to the already existing `increment_value` method) -#. Add :class:`PangoText` for rendering texts using Pango. - - -Documentation -============= - -#. Added clearer installation instructions, tutorials, examples, and API reference [WIP] - - -Fixes -===== - -#. Initialization of directories has been moved to :code:`config.py`, and a bunch of bugs associated to file structure generation have been fixed -#. Nonfunctional file :code:`media_dir.txt` has been removed -#. Nonfunctional :code:`if` statements in :code:`scene_file_writer.py` have been removed -#. Fix a bug where trying to render the example scenes without specifying the scene would show all scene objects in the library -#. Many :code:`Exceptions` have been replaced for more specific exception subclasses -#. Fixed a couple of subtle bugs in :code:`ArcBetweenPoints` - - -Of interest to developers -========================= - -#. Python code formatting is now enforced by using the :code:`black` tool -#. PRs now require two approving code reviews from community devs before they can be merged -#. Added tests to ensure stuff doesn't break between commits (For developers) [Uses Github CI, and Pytest] -#. Add contribution guidelines (for developers) -#. Added autogenerated documentation with sphinx and autodoc/autosummary [WIP] -#. Made manim internally use relative imports -#. Since the introduction of the :code:`TexTemplate` class, the files :code:`tex_template.tex` and :code:`ctex_template.tex` have been removed -#. Added logging tests tools. -#. Added ability to save logs in json -#. Move to Poetry. -#. Colors have moved to an Enum - -Other Changes -============= - -#. Cleanup 3b1b Specific Files -#. Rename package from manimlib to manim -#. Move all imports to :code:`__init__`, so :code:`from manim import *` replaces :code:`from manimlib.imports import *` -#. Global dir variable handling has been removed. Instead :code:`initialize_directories`, if needed, overrides the values from the cfg files at runtime. + changelog/* diff --git a/docs/source/changelog/0.1.0-changelog.rst b/docs/source/changelog/0.1.0-changelog.rst new file mode 100644 index 0000000000..4d160dedf7 --- /dev/null +++ b/docs/source/changelog/0.1.0-changelog.rst @@ -0,0 +1,118 @@ +****** +v0.1.0 +****** + +:Date: October 21, 2020 + +This is the first release of manimce after forking from 3b1b/manim. As such, +developers have focused on cleaning up and refactoring the codebase while still +maintaining backwards compatibility wherever possible. + + +New Features +============ + +Command line +------------ + +#. Output of 'manim --help' has been improved +#. Implement logging with the :code:`rich` library and a :code:`logger` object instead of plain ol' prints +#. Added a flag :code:`--dry_run`, which doesn't write any media +#. Allow for running manim with :code:`python3 -m manim` +#. Refactored Tex Template management. You can now use custom templates with command line args using :code:`--tex_template`! +#. Re-add :code:`--save_frames` flag, which will save each frame as a png +#. Re-introduce manim feature that allows you to type manim code in :code:`stdin` if you pass a minus sign :code:`(-)` as filename +#. Added the :code:`--custom_folders` flag which yields a simpler output folder structure +#. Re-implement GIF export with the :code:`-i` flag (using this flag outputs ONLY a .gif file, and no .mp4 file) +#. Added a :code:`--verbose` flag +#. You can save the logs to a file by using :code:`--log_to_file` +#. Read :code:`tex_template` from config file if not specified by :code:`--tex_template`. +#. Add experimental javascript rendering with :code:`--use_js_renderer` +#. Add :code:`-q/--quality [k|p|h|m|l]` flag and removed :code:`-m/-l` flags. +#. Removed :code:`--sound` flag + + +Config system +------------- + +#. Implement a :code:`manim.cfg` config file system, that consolidates the global configuration, the command line argument parsing, and some of the constants defined in :code:`constants.py` +#. Added utilities for manipulating Manim’s :code:`.cfg` files. +#. Added a subcommand structure for easier use of utilities managing :code:`.cfg` files +#. Also some variables have been moved from ``constants.py`` to the new config system: + + #. ``FRAME_HEIGHT`` to ``config["frame_width"]`` + #. ``TOP`` to ``config["frame_height"] / 2 * UP`` + #. ``BOTTOM`` to ``config["frame_height"] / 2 * DOWN`` + #. ``LEFT_SIDE`` to ``config["frame_width"] / 2 * LEFT`` + #. ``RIGHT_SIDE`` to ``config["frame_width"] / 2 * RIGHT`` + #. ``self.camera.frame_rate`` to ``config["frame_rate"]`` + + + + +Mobjects, Scenes, and Animations +-------------------------------- + +#. Add customizable left and right bracket for :code:`Matrix` mobject and :code:`set_row_colors` method for matrix mobject +#. Add :code:`AddTeXLetterByLetter` animation +#. Enhanced GraphScene + + #. You can now add arrow tips to axes + #. extend axes a bit at the start and/or end + #. have invisible axes + #. highlight the area between two curves +#. ThreeDScene now supports 3dillusion_camera_rotation +#. Add :code:`z_index` for manipulating depth of Objects on scene. +#. Add a :code:`VDict` class: a :code:`VDict` is to a :code:`VGroup` what a :code:`dict` is to a :code:`list` +#. Added Scene-caching feature. Now, if a partial movie file is unchanged in your code, it isn’t rendered again! [HIGHLY UNSTABLE We're working on it ;)] +#. Most :code:`get_` and :code:`set_` methods have been removed in favor of instance attributes and properties +#. The :code:`Container` class has been made into an AbstractBaseClass, i.e. in cannot be instantiated. Instead, use one of its children classes +#. The ``TextMobject`` and ``TexMobject`` objects have been deprecated, due to their confusing names, in favour of ``Tex`` and ``MathTex``. You can still, however, continue to use ``TextMobject`` and ``TexMobject``, albeit with Deprecation Warnings constantly reminding you to switch. +#. Add a :code:`Variable` class for displaying text that continuously updates to reflect the value of a python variable. +#. The ``Tex`` and ``MathTex`` objects allow you to specify a custom TexTemplate using the ``template`` keyword argument. +#. :code:`VGroup` now supports printing the class names of contained mobjects and :code:`VDict` supports printing the internal dict of mobjects +#. Add all the standard easing functions +#. :code:`Scene` now renders when :code:`Scene.render()` is called rather than upon instantiation. +#. :code:`ValueTracker` now supports increment using the `+=` operator (in addition to the already existing `increment_value` method) +#. Add :class:`PangoText` for rendering texts using Pango. + + +Documentation +============= + +#. Added clearer installation instructions, tutorials, examples, and API reference [WIP] + + +Fixes +===== + +#. Initialization of directories has been moved to :code:`config.py`, and a bunch of bugs associated to file structure generation have been fixed +#. Nonfunctional file :code:`media_dir.txt` has been removed +#. Nonfunctional :code:`if` statements in :code:`scene_file_writer.py` have been removed +#. Fix a bug where trying to render the example scenes without specifying the scene would show all scene objects in the library +#. Many :code:`Exceptions` have been replaced for more specific exception subclasses +#. Fixed a couple of subtle bugs in :code:`ArcBetweenPoints` + + +Of interest to developers +========================= + +#. Python code formatting is now enforced by using the :code:`black` tool +#. PRs now require two approving code reviews from community devs before they can be merged +#. Added tests to ensure stuff doesn't break between commits (For developers) [Uses Github CI, and Pytest] +#. Add contribution guidelines (for developers) +#. Added autogenerated documentation with sphinx and autodoc/autosummary [WIP] +#. Made manim internally use relative imports +#. Since the introduction of the :code:`TexTemplate` class, the files :code:`tex_template.tex` and :code:`ctex_template.tex` have been removed +#. Added logging tests tools. +#. Added ability to save logs in json +#. Move to Poetry. +#. Colors have moved to an Enum + +Other Changes +============= + +#. Cleanup 3b1b Specific Files +#. Rename package from manimlib to manim +#. Move all imports to :code:`__init__`, so :code:`from manim import *` replaces :code:`from manimlib.imports import *` +#. Global dir variable handling has been removed. Instead :code:`initialize_directories`, if needed, overrides the values from the cfg files at runtime. \ No newline at end of file diff --git a/docs/source/changelog/0.1.1-changelog.rst b/docs/source/changelog/0.1.1-changelog.rst new file mode 100644 index 0000000000..a06c03328e --- /dev/null +++ b/docs/source/changelog/0.1.1-changelog.rst @@ -0,0 +1,66 @@ +****** +v0.1.1 +****** + +:Date: December 1, 2020 + +Changes since Manim Community release v0.1.0 + +Plugins +======= + +#. Provided a standardized method for plugin discoverability, creation, + installation, and usage. See the :ref:`documentation `. + +Fixes +===== + +#. JsRender is optional to install. (via :pr:`697`). +#. Allow importing modules from the same directory as the input + file when using ``manim`` from the command line (via :pr:`724`). +#. Remove some unnecessary or unpythonic methods from :class:`~.Scene` + (``get_mobjects``, ``add_mobjects_among``, ``get_mobject_copies``), + via :pr:`758`. +#. Fix formatting of :class:`~.Code` (via :pr:`798`). + +Configuration +============= + +#. Removed the ``skip_animations`` config option and added the + ``Renderer.skip_animations`` attribute instead (via :pr:`696`). +#. The global ``config`` dict has been replaced by a global ``config`` instance + of the new class :class:`~.ManimConfig`. This class has a dict-like API, so + this should not break user code, only make it more robust. See the + Configuration tutorial for details. +#. Added the option to configure a directory for external assets (via :pr:`649`). + + +Documentation +============= + +#. Add ``:issue:`` and ``:pr:`` directives for simplifying linking to issues and + pull requests on GitHub (via :pr:`685`). +#. Add a ``skip-manim`` tag for skipping the ``.. manim::`` directive when + building the documentation locally (via :pr:`796`). + + +Mobjects, Scenes, and Animations +================================ + +#. The ``alignment`` attribute to Tex and MathTex has been removed in favour of ``tex_environment``. +#. :class:`~.Text` now uses Pango for rendering. ``PangoText`` has been removed. The old implementation is still available as a fallback as :class:`~.CairoText`. +#. Variations of :class:`~.Dot` have been added as :class:`~.AnnotationDot` + (a bigger dot with bolder stroke) and :class:`~.LabeledDot` (a dot containing a + label). +#. Scene.set_variables_as_attrs has been removed (via :pr:`692`). +#. Ensure that the axes for graphs (:class:`GraphScene`) always intersect (:pr:`580`). +#. Now Mobject.add_updater does not call the newly-added updater by default + (use ``call_updater=True`` instead) (via :pr:`710`) +#. VMobject now has methods to determine and change the direction of the points (via :pr:`647`). +#. Added BraceBetweenPoints (via :pr:`693`). +#. Added ArcPolygon and ArcPolygonFromArcs (via :pr:`707`). +#. Added Cutout (via :pr:`760`). +#. Added Mobject raise not implemented errors for dunder methods and implementations for VGroup dunder methods (via :pr:`790`). +#. Added :class:`~.ManimBanner` for a animated version of our logo and banner (via :pr:`729`) +#. The background color of a scene can now be changed reliably by setting, e.g., + ``self.camera.background_color = RED`` (via :pr:`716`). diff --git a/docs/source/changelog/0.2.0-changelog.rst b/docs/source/changelog/0.2.0-changelog.rst new file mode 100644 index 0000000000..c0d205bca9 --- /dev/null +++ b/docs/source/changelog/0.2.0-changelog.rst @@ -0,0 +1,93 @@ +****** +v0.2.0 +****** + +:Date: January 1, 2021 + +The changes since Manim Community release v0.1.1 are listed below. + +Breaking Changes +================ + +- Remove all CONFIG dictionaries and all calls to ``digest_config`` and allow + passing options directly to the constructor of the corresponding classes (:pr:`783`). + + Practically, this means that old constructions using ``CONFIG`` like:: + + class SomeMobject(Thing): + CONFIG = { + "my_awesome_property": 42 + } + + where corresponding objects were then instantiated as ``my_mobject = SomeMobject()`` + should now be created simply using ``my_mobject = SomeMobject(my_awesome_property=42)``. + +- Remove old syntax for animating mobject methods by passing the methods and arguments to ``self.play``, + and use a new syntax featuring the ``animate`` property (:pr:`881`). + + For example: the old-style ``play`` call + :: + + self.play(my_square.shift, LEFT) + + should be replaced with the new following call using the ``animate`` property:: + + self.play(my_square.animate.shift(LEFT)) + +New Features +============ + +- Added creation animation for :class:`~.ManimBanner` (:pr:`814`) +- Added some documentation to :meth:`~.Scene.construct` (:pr:`753`) +- Added a black and white monochromatic version of Manim's logo (:pr:`826`) +- Added support for a plugin system (``manim plugin`` subcommand + documentation) (:pr:`784`) +- Implemented ``__add__``, ``__iadd__``, ``__sub__``, and ``__isub__`` for :class:`~.Mobject` (allowing for notation like ``some_vgroup + some_mobject``) (:pr:`790`) +- Added type hints to several files in the library (:pr:`835`) +- Added some examples to :mod:`~.animation.creation` (:pr:`820`) +- Added some examples to :class:`~.DashedLine` and :class:`~.CurvesAsSubmobjects` (:pr:`833`) +- Added new implementation for text rendered with Pango, :class:`~.MarkupText`, which can be formatted with an HTML-like syntax (:pr:`855`) +- Added Fading in and out examples and deprecation of ``FadeInFromDown`` and ``FadeOutAndShiftDown`` (:pr:`827`) +- Added example for :class:`~.MoveAlongPath` to the docs (:pr:`873`) +- Added ambient rotate for other angles - theta, phi, gamma (:pr:`660`) +- Use custom bindings for Pango (:pr:`878`) +- Added :class:`~.Graph`, a basic implementation for (graph theory) graphs (:pr:`861`) +- Allow for chaining methods when using the new ``.animate`` syntax in :meth:`~.Scene.play` (:pr:`889`) + +Bugfixes +======== + +- Fix doctests in .rst files (:pr:`797`) +- Fix failing doctest after adding ``manim plugin`` subcommand (:pr:`831`) +- Normalize the direction vector in :meth:`~.mobject_update_utils.always_shift` (:pr:`839`) +- Add ``disable_ligatures`` to :class:`~.Text` (via :pr:`804`) +- Make scene caching aware of order of Mobjects (:pr:`845`) +- Fix :class:`~.CairoText` to work with new config structure (:pr:`858`) +- Added missing argument to classes inheriting from :class:`~.Matrix` (:pr:`859`) +- Fixed: ``z_index`` of mobjects contained in others as submobjects is now properly respected (:pr:`872`) +- Let :meth:`~.ParametricSurface.set_fill_by_checkboard` return the modified surface to allow method chaining (:pr:`883`) +- Mobjects added during an updater are added to ``Scene.moving_mobjects`` (:pr:`838`) +- Pass background color to JS renderer (:pr:`876`) +- Small fixes to docstrings. Tiny cleanups. Remove ``digest_mobject_attrs``. (:pr:`834`) +- Added closed shape detection in :class:`~.DashedVMobject` in order to achieve an even dash pattern (:pr:`884`) +- Fix Spelling in docstrings and variables across the library (:pr:`890`) + +Other changes +============= + +- Change library name to manim (:pr:`811`) +- Docker: use local files when building an image (:pr:`803`) +- Let ffmpeg render partial movie files directly instead of temp files (:pr:`817`) +- ``manimce`` to ``manim`` & capitalizing Manim in readme (:pr:`794`) +- Added flowchart for different docstring categories (:pr:`828`) +- Improve example in module docstring of :mod:`~.animation.creation` + explicitly document buff parameter in :meth:`~.Mobject.arrange` (:pr:`825`) +- Disable CI pipeline for Python 3.6 (:pr:`823`) +- Update URLs in docs (:pr:`832`) +- Move upcoming changelog to GitHub-wiki (:pr:`822`) +- Change badges in readme (:pr:`854`) +- Exclude generated gRPC files from source control (:pr:`868`) +- Added linguist-generated attribute to ``.gitattributes`` (:pr:`877`) +- Cleanup: removed inheritance from ``object`` for some classes, refactor some imports (:pr:`795`) +- Change several ``str.format()`` to ``f``-strings (:pr:`867`) +- Update javascript renderer (:pr:`830`) +- Bump version number to 0.2.0, update changelog (:pr:`894`) + diff --git a/docs/source/changelog/0.3.0-changelog.rst b/docs/source/changelog/0.3.0-changelog.rst new file mode 100644 index 0000000000..77c8253c75 --- /dev/null +++ b/docs/source/changelog/0.3.0-changelog.rst @@ -0,0 +1,64 @@ +****** +v0.3.0 +****** + +:Date: February 1, 2021 + +The changes since Manim Community release v0.2.0 are listed below. + + +New Features +============ + +- :pr:`945`: :meth:`~.Graph.change_layout` method for :class:`~.Graph` mobject +- :pr:`943`: IPython %%manim magic +- :pr:`970`: Added ``--version`` command line flag +- :pr:`948`: Allow passing a code string to :class:`~.Code` +- :pr:`917`: Allow overriding new-style method animations +- :pr:`756`: Allow setting frame_height and frame_width via config file +- :pr:`939`: Added custom font files support +- :pr:`892`: Added ManimCommunity colors +- :pr:`922`: Tree layout for Graph mobject +- :pr:`935`: Added code of conduct +- :pr:`916`: Multi-column layout for partite graphs +- :pr:`742`: Units: Pixels, Munits, Percent in :mod:`~.utils.unit` +- :pr:`893`: Convenience method :meth:`~.Graph.from_networkx` for creating a graph from a networkx graph + +Bugfixes and Enhancements +========================= + +- :pr:`988`: Fix Windows CI pipeline by adding missing LaTeX package +- :pr:`961`: Added typings and docs for vectorized mobjects and bezier related functions +- :pr:`977`: JupyterLab docker image and documentation for manim and IPython +- :pr:`985`: Fix variable name for webgl renderer +- :pr:`954`: Fix edges lagging behind vertices in animations of graphs +- :pr:`980`: Allow usage of custom Pygments styles in Code +- :pr:`952`: Allow passing tween information to the WebGL frontend +- :pr:`978`: Fix ``possible_paths`` not printing in ``code_mobject`` +- :pr:`976`: Update ``ManimPango`` +- :pr:`967`: Automatically import plugins +- :pr:`971`: Make ManimCommunity look consistent +- :pr:`957`: Raise ``NotImplementedError`` when trying to chain overridden method animations +- :pr:`947`: Several fixes and improvements for :class:`~.PointCloundDot` +- :pr:`923`: Documentation: move installation instructions for developers to page for developers +- :pr:`964`: Added unit test for :class:`~.NumberLine`'s unit vector +- :pr:`960`: Magnitude of :class:`~.NumberLine`'s unit vector should be ``unit_size``, not 1 +- :pr:`958`: Fix code formatting in ``utils/debug.py`` +- :pr:`953`: Update license year +- :pr:`944`: Interpolate stroke opacity in :class:`~.FadeIn` and update ``stroke_opacity`` and ``fill_opacity`` in :meth:`~.VMobject.set_stroke` and :meth:`~.VMobject.set_fill` +- :pr:`865`: Rename ``get_submobject_index_labels`` to ``index_labels`` +- :pr:`941`: Added keyword arguments ``x_min``, ``x_max``, ``y_min``, ``y_max`` to :class:`~.ThreeDAxes` +- :pr:`886`: Let the render progress bar show details about the rendered animation again +- :pr:`936`: Fix :class:`~.BulletedList` TeX environment problem and add a typing to ``get_module`` +- :pr:`938`: Remove dependency on progressbar +- :pr:`937`: Change 'brew cask install' to 'brew install --cask' for CI pipeline +- :pr:`933`: Make matrix work with lists again +- :pr:`932`: Correctly parse ``log_dir`` option +- :pr:`920`: Raise error if markup in :class:`~.MarkupText` is invalid +- :pr:`929`: Raise an error if a :class:`~.Matrix` object is created with < 2-dimensional input +- :pr:`907`: Make Scene.add_sound work again (when running with ``--disable_caching``) +- :pr:`906`: Allow new-style method animation to be used in animation groups +- :pr:`908`: Removed deprecated command line arguments from documentation +- :pr:`903`: Tiny grammar improvements +- :pr:`904`: Added blank line between imports and class example +- :pr:`898`: CI: fix publish workflow diff --git a/docs/source/changelog/0.4.0-changelog.rst b/docs/source/changelog/0.4.0-changelog.rst new file mode 100644 index 0000000000..da8c028c9e --- /dev/null +++ b/docs/source/changelog/0.4.0-changelog.rst @@ -0,0 +1,60 @@ +****** +v0.4.0 +****** + +:Date: March 3, 2021 + +The changes since Manim Community release v0.3.0 are listed below. + +Breaking Changes +================ + +- :pr:`915`: Manim's SVG engine has been reworked and is able to handle a wider variations of SVG files. In particular: fill and stroke properties are now retained from the original files. Breaking change: ``VMobjectFromSVGPathstring`` is deprecated and has been renamed to ``SVGPathMobject``. + + +New Features +============ + +- :pr:`1026`: Add 3D Mobjects: :class:`~.Cone`, :class:`~.Cylinder`, :class:`~.Line3D`, :class:`~.Arrow3D` and :class:`~.Torus` +- :pr:`1047`: Add documentation and examples for :class:`~.Matrix` +- :pr:`1044`: ``register_font`` is available for macOS +- :pr:`995`: Add generic :func:`~.Mobject.set` method and compatibility layer between properties and ``get_*``/``set_*`` methods + +Bugfixes and Enhancements +========================= + +- :pr:`981`: Fixed hot reload functionality for the WebGL renderer on Windows +- :pr:`1053`: Repair links to source code in stable version of documentation +- :pr:`1067`: Add ManimPango to ReadTheDocs requirements +- :pr:`1058`: Replace ```` syntax by Pango's ```` for coloring parts of :class:`~.MarkupText` and allow using colors for underline, overline and strikethrough in MarkupText +- :pr:`1063`: Fix documentation related to ``.animate`` +- :pr:`1065`: Remove duplicate word 'vector' +- :pr:`1060`: Update Linux installation instructions to mention the installation of Pango +- :pr:`1050`: Ensure that the user-supplied stroke color and width gets applied to :class:`~.Cross` +- :pr:`1059`: More descriptive error when accessing an unhandled mobject attribute +- :pr:`1048`: Use absolute path in ``make_and_open_docs.py`` +- :pr:`1000`: Remove ``MovingCameraScene.setup`` and ``MovingCameraScene.camera_frame`` +- :pr:`1051`: Corrections for setting stroke related attributes on :class:`~.VMobject` +- :pr:`1043`: Make :class:`~.CubicBezier` explicitly accept four points +- :pr:`1046`: Use any version of ``importlib-metadata`` +- :pr:`1030`: Parse ``.log`` file and try to print LaTeX errors if compilation fails +- :pr:`1015`: Documentation: Add more explicit instructions related to ``tlmgr`` +- :pr:`1028`: Documentation: Update installation guide on mac with Apple Silicon +- :pr:`1032`: Remove ``Square.side_length`` property +- :pr:`1031`: Fix link to wikipedia vector graphics page +- :pr:`1021`: Documentation: Added example to :class:`~.CubicBezier` +- :pr:`1017`: Added ``progress_bar`` to ``digest_args`` to fix the ``--progress_bar`` CLI flag +- :pr:`1018`: Remove redundancy in :class:`~.FunctionGraph` arguments +- :pr:`1024`: Migrate ``width`` / ``height`` / ``depth`` to properties +- :pr:`1022`: Fix ``-p`` flag when passing ``-s`` +- :pr:`1008`: CI pipeline: fix release asset upload +- :pr:`983`: Make sure last frame for animations with updaters is correct +- :pr:`984`: Add manim version to CLI output, append version name for generated ``.gif`` and ``.png`` files, add version to metadata of rendered videos, change dark blue terminal text to default green +- :pr:`993`: Fix setting Mobject color to a gradient by passing a list of colors in :meth:`~.VMobject.set_color` +- :pr:`1003`: Fix animation :class:`~.GrowArrow` +- :pr:`1010`: Disable STDIN interaction for ffmpeg concat. +- :pr:`969`: Fix the ``--tex_template`` CLI flag +- :pr:`989`: Fix the ``manim cfg export`` subcommand +- :pr:`1005`: Fix the feature where ``-`` is used as the filename +- :pr:`998`: Allow using hexadecimal color codes with 3 characters +- :pr:`996`: Changed the message of ``manim --version`` to not include "Edition" diff --git a/poetry.lock b/poetry.lock index 87d85c2914..fbfe41c2fb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -158,6 +158,14 @@ packaging = "*" six = ">=1.9.0" webencodings = "*" +[[package]] +name = "certifi" +version = "2020.12.5" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = "*" + [[package]] name = "cffi" version = "1.14.5" @@ -169,6 +177,14 @@ python-versions = "*" [package.dependencies] pycparser = "*" +[[package]] +name = "chardet" +version = "4.0.0" +description = "Universal encoding detector for Python 2 and 3" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "click" version = "7.1.2" @@ -264,6 +280,20 @@ category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "deprecated" +version = "1.2.12" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] + [[package]] name = "docutils" version = "0.16" @@ -386,6 +416,28 @@ python-versions = "*" flake8 = ">=3.0.0" restructuredtext_lint = "*" +[[package]] +name = "gitdb" +version = "4.0.6" +description = "Git Object Database" +category = "dev" +optional = false +python-versions = ">=3.4" + +[package.dependencies] +smmap = ">=3.0.1,<4" + +[[package]] +name = "gitpython" +version = "3.1.14" +description = "Python Git Library" +category = "dev" +optional = false +python-versions = ">=3.4" + +[package.dependencies] +gitdb = ">=4.0.1,<5" + [[package]] name = "glcontext" version = "2.3.3" @@ -433,11 +485,11 @@ Sphinx = ">=1.2b1" [[package]] name = "idna" -version = "3.1" +version = "2.10" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" -optional = true -python-versions = ">=3.4" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "imagesize" @@ -1199,6 +1251,22 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pygithub" +version = "1.54.1" +description = "Use the full Github API v3" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +deprecated = "*" +pyjwt = "<2.0" +requests = ">=2.14.0" + +[package.extras] +integrations = ["cryptography"] + [[package]] name = "pyglet" version = "1.5.15" @@ -1215,6 +1283,19 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "pyjwt" +version = "1.7.1" +description = "JSON Web Token implementation in Python" +category = "dev" +optional = false +python-versions = "*" + +[package.extras] +crypto = ["cryptography (>=1.4)"] +flake8 = ["flake8", "flake8-import-order", "pep8-naming"] +test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"] + [[package]] name = "pylint" version = "2.7.2" @@ -1368,14 +1449,20 @@ python-versions = "*" [[package]] name = "requests" -version = "2.15.1" +version = "2.25.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = "*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +certifi = ">=2017.4.17" +chardet = ">=3.0.2,<5" +idna = ">=2.5,<3" +urllib3 = ">=1.21.1,<1.27" [package.extras] -security = ["cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)"] +security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] [[package]] @@ -1434,6 +1521,14 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "smmap" +version = "3.0.5" +description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "sniffio" version = "1.2.0" @@ -1640,6 +1735,19 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "urllib3" +version = "1.26.4" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotlipy (>=0.6.0)"] + [[package]] name = "watchdog" version = "2.0.2" @@ -1694,7 +1802,7 @@ webgl_renderer = ["grpcio", "grpcio-tools", "watchdog"] [metadata] lock-version = "1.1" python-versions = "^3.6.2" -content-hash = "7b29a18f5c7ea1224303b572dbe335023de52073e7837da08be8752a35a354bd" +content-hash = "878d7bb8f5c6042e0a6581799deca302efae73468be5a22dd17eeb30aa103a81" [metadata.files] alabaster = [ @@ -1764,6 +1872,10 @@ bleach = [ {file = "bleach-3.3.0-py2.py3-none-any.whl", hash = "sha256:6123ddc1052673e52bab52cdc955bcb57a015264a1c57d37bea2f6b817af0125"}, {file = "bleach-3.3.0.tar.gz", hash = "sha256:98b3170739e5e83dd9dc19633f074727ad848cbedb6026708c8ac2d3b697a433"}, ] +certifi = [ + {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, + {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, +] cffi = [ {file = "cffi-1.14.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991"}, {file = "cffi-1.14.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1"}, @@ -1803,6 +1915,10 @@ cffi = [ {file = "cffi-1.14.5-cp39-cp39-win_amd64.whl", hash = "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d"}, {file = "cffi-1.14.5.tar.gz", hash = "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"}, ] +chardet = [ + {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, + {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, +] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, @@ -1892,6 +2008,10 @@ defusedxml = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +deprecated = [ + {file = "Deprecated-1.2.12-py2.py3-none-any.whl", hash = "sha256:08452d69b6b5bc66e8330adde0a4f8642e969b9e1702904d137eeb29c8ffc771"}, + {file = "Deprecated-1.2.12.tar.gz", hash = "sha256:6d2de2de7931a968874481ef30208fd4e08da39177d61d3d4ebdf4366e7dbca1"}, +] docutils = [ {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, @@ -1934,6 +2054,14 @@ flake8-pytest-style = [ flake8-rst-docstrings = [ {file = "flake8-rst-docstrings-0.0.14.tar.gz", hash = "sha256:8f8bcb18f1408b506dd8ba2c99af3eac6128f6911d4bf6ff874b94caa70182a2"}, ] +gitdb = [ + {file = "gitdb-4.0.6-py3-none-any.whl", hash = "sha256:27dea6c52fbcf768530e1af47f2e34afd24a52e53fa310c8279a5589bd7c85bd"}, + {file = "gitdb-4.0.6.tar.gz", hash = "sha256:42535bb16b5db8983e2c4f6a714d29a8feba7165a12addc63e08fc672dfeccb9"}, +] +gitpython = [ + {file = "GitPython-3.1.14-py3-none-any.whl", hash = "sha256:3283ae2fba31c913d857e12e5ba5f9a7772bbc064ae2bb09efafa71b0dd4939b"}, + {file = "GitPython-3.1.14.tar.gz", hash = "sha256:be27633e7509e58391f10207cd32b2a6cf5b908f92d9cd30da2e514e1137af61"}, +] glcontext = [ {file = "glcontext-2.3.3-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:f518379551a2b60d45c1eec23759cb1ee85517d4b943fc31530b6ab13e304fe4"}, {file = "glcontext-2.3.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:d3a8fbc27f43766d168bae02474790459f4050adeb25832ff0a227cc5006c933"}, @@ -2060,8 +2188,8 @@ guzzle-sphinx-theme = [ {file = "guzzle_sphinx_theme-0.7.11.tar.gz", hash = "sha256:9b8c1639c343c02c3f3db7df660ddf6f533b5454ee92a5f7b02edaa573fed3e6"}, ] idna = [ - {file = "idna-3.1-py3-none-any.whl", hash = "sha256:5205d03e7bcbb919cc9c19885f9920d622ca52448306f2377daede5cf3faac16"}, - {file = "idna-3.1.tar.gz", hash = "sha256:c5b02147e01ea9920e6b0a3f1f7bb833612d507592c837a6c49552768f4054e1"}, + {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, + {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] imagesize = [ {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, @@ -2286,39 +2414,20 @@ markupsafe = [ {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, ] matplotlib = [ @@ -2589,6 +2698,10 @@ pyflakes = [ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, ] +pygithub = [ + {file = "PyGithub-1.54.1-py3-none-any.whl", hash = "sha256:87afd6a67ea582aa7533afdbf41635725f13d12581faed7e3e04b1579c0c0627"}, + {file = "PyGithub-1.54.1.tar.gz", hash = "sha256:300bc16e62886ca6537b0830e8f516ea4bc3ef12d308e0c5aff8bdbd099173d4"}, +] pyglet = [ {file = "pyglet-1.5.15-py3-none-any.whl", hash = "sha256:4401cc176580e4e17e2df8bbf7536f27e691327dc3f38f209a12f1859c70aed2"}, {file = "pyglet-1.5.15.zip", hash = "sha256:da9d8337388cedabf1f1c5dc21a45bb2b0e5327fba47f996c8573818c3dfa478"}, @@ -2597,6 +2710,10 @@ pygments = [ {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"}, ] +pyjwt = [ + {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, + {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, +] pylint = [ {file = "pylint-2.7.2-py3-none-any.whl", hash = "sha256:d09b0b07ba06bcdff463958f53f23df25e740ecd81895f7d2699ec04bbd8dc3b"}, {file = "pylint-2.7.2.tar.gz", hash = "sha256:0e21d3b80b96740909d77206d741aa3ce0b06b41be375d92e1f3244a274c1f8a"}, @@ -2671,7 +2788,6 @@ pyzmq = [ {file = "pyzmq-22.0.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b62ea18c0458a65ccd5be90f276f7a5a3f26a6dea0066d948ce2fa896051420f"}, {file = "pyzmq-22.0.3-cp38-cp38-win32.whl", hash = "sha256:81e7df0da456206201e226491aa1fc449da85328bf33bbeec2c03bb3a9f18324"}, {file = "pyzmq-22.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:f52070871a0fd90a99130babf21f8af192304ec1e995bec2a9533efc21ea4452"}, - {file = "pyzmq-22.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:c5e29fe4678f97ce429f076a2a049a3d0b2660ada8f2c621e5dc9939426056dd"}, {file = "pyzmq-22.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d18ddc6741b51f3985978f2fda57ddcdae359662d7a6b395bc8ff2292fca14bd"}, {file = "pyzmq-22.0.3-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4231943514812dfb74f44eadcf85e8dd8cf302b4d0bce450ce1357cac88dbfdc"}, {file = "pyzmq-22.0.3-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:23a74de4b43c05c3044aeba0d1f3970def8f916151a712a3ac1e5cd9c0bc2902"}, @@ -2734,8 +2850,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] requests = [ - {file = "requests-2.15.1-py2.py3-none-any.whl", hash = "sha256:ff753b2196cd18b1bbeddc9dcd5c864056599f7a7d9a4fb5677e723efa2b7fb9"}, - {file = "requests-2.15.1.tar.gz", hash = "sha256:e5659b9315a0610505e050bb7190bf6fa2ccee1ac295f2b760ef9d8a03ebbb2e"}, + {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, + {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, ] restructuredtext-lint = [ {file = "restructuredtext_lint-1.3.2.tar.gz", hash = "sha256:d3b10a1fe2ecac537e51ae6d151b223b78de9fafdd50e5eb6b08c243df173c80"}, @@ -2779,6 +2895,10 @@ six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] +smmap = [ + {file = "smmap-3.0.5-py2.py3-none-any.whl", hash = "sha256:7bfcf367828031dc893530a29cb35eb8c8f2d7c8f2d0989354d75d24c8573714"}, + {file = "smmap-3.0.5.tar.gz", hash = "sha256:84c2751ef3072d4f6b2785ec7ee40244c6f45eb934d9e543e2c51f1bd3d54c50"}, +] sniffio = [ {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, @@ -2915,6 +3035,10 @@ typing-extensions = [ {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] +urllib3 = [ + {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, + {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, +] watchdog = [ {file = "watchdog-2.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1f518a6940cde8720b8826a705c164e6b9bd6cf8c00f14269ffac51e017e06ec"}, {file = "watchdog-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74528772516228f6a015a647027057939ff0b695a0b864cb3037e8e1aabc7ca0"}, diff --git a/pyproject.toml b/pyproject.toml index 2e1571b59e..d07310e775 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,6 +57,8 @@ pylint = "*" guzzle_sphinx_theme = "*" recommonmark = "*" matplotlib = "^3.3.2" +gitpython = "^3" +pygithub = "^1" flake8 = "^3.9.0" flake8-bugbear = "^21.3.2" flake8-builtins = "^1.5.3" diff --git a/scripts/dev_changelog.py b/scripts/dev_changelog.py new file mode 100755 index 0000000000..ea7f5b46cc --- /dev/null +++ b/scripts/dev_changelog.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python +"""Script to generate contributor and pull request lists +This script generates contributor and pull request lists for release +changelogs using Github v3 protocol. Use requires an authentication token in +order to have sufficient bandwidth, you can get one following the directions at +`_ +Don't add any scope, as the default is read access to public information. The +token may be stored in an environment variable as you only get one chance to +see it. + +Usage:: + $ ./scripts/dev_changelog.py + +The output is utf8 rst. + +Dependencies +------------ +- gitpython +- pygithub + +Examples +-------- +From the bash command line with $GITHUB token:: + $ ./scripts/dev_changelog.py $GITHUB v0.3.0..v0.4.0 -o 0.4.0-changelog.rst + +Note +---- +This script was taken from Numpy under the terms of BSD-3-Clause license. +""" +import re +import sys +from collections import defaultdict +from textwrap import dedent, indent +from pathlib import Path +import git +from tqdm import tqdm +from git import Repo +from github import Github + + +this_repo = Repo(str(Path(__file__).resolve().parent.parent)) + + +def get_authors_and_reviewers(revision_range, github_repo, pr_nums): + pat = r"^.*\t(.*)$" + lst_release, cur_release = [r.strip() for r in revision_range.split("..")] + + # authors, in current release and previous to current release. + cur = set(re.findall(pat, this_repo.git.shortlog("-s", revision_range), re.M)) + pre = set(re.findall(pat, this_repo.git.shortlog("-s", lst_release), re.M)) + + # Append '+' to new authors. + authors = [s + " +" for s in cur - pre] + [s for s in cur & pre] + authors.sort() + + reviewers = [] + for num in tqdm(pr_nums, desc="Fetching reviewer comments"): + pr = github_repo.get_pull(num) + reviewers.extend(rev.user.name for rev in pr.get_reviews()) + reviewers = sorted(set(rev for rev in reviewers if rev is not None)) + + return {"authors": authors, "reviewers": reviewers} + + +def get_pr_nums(revision_range): + print("Getting PR Numbers:") + prnums = [] + + # From regular merges + merges = this_repo.git.log("--oneline", "--merges", revision_range) + issues = re.findall(r".*\(\#(\d+)\)", merges) + prnums.extend(int(s) for s in issues) + + # From fast forward squash-merges + commits = this_repo.git.log( + "--oneline", "--no-merges", "--first-parent", revision_range + ) + issues = re.findall(r"^.*\(\#(\d+)\)$", commits, re.M) + prnums.extend(int(s) for s in issues) + + print(prnums) + return prnums + + +def sort_by_labels(github_repo, pr_nums): + """Sorts PR into groups based on labels. + + This implementation sorts based on importance into a singular group. If a + PR uses multiple labels, it is sorted under one label. + + The importance order (for the end-user): + - breaking changes + - highlight + - feature + - enhancement + - bug + - documentation + - testing + - infrastructure + - unlabeled + """ + pr_by_labels = defaultdict(list) + for num in tqdm(pr_nums, desc="Sorting by labels"): + pr = github_repo.get_pull(num) + labels = [label.name for label in pr.labels] + # TODO: Make use of label names directly from main + if "breaking changes" in labels: + pr_by_labels["breaking changes"].append(pr) + elif "highlight" in labels: + pr_by_labels["highlight"].append(pr) + elif "new feature" in labels: + pr_by_labels["new feature"].append(pr) + elif "enhancement" in labels: + pr_by_labels["enhancement"].append(pr) + elif "bug" in labels: + pr_by_labels["bug"].append(pr) + elif "deprecation" in labels: + pr_by_labels["deprecation"].append(pr) + elif "documentation" in labels: + pr_by_labels["documentation"].append(pr) + elif "release" in labels: + pr_by_labels["release"].append(pr) + elif "testing" in labels: + pr_by_labels["testing"].append(pr) + elif "infrastructure" in labels: + pr_by_labels["infrastructure"].append(pr) + elif "maintenance": + pr_by_labels["maintenance"].append(pr) + elif "style" in labels: + pr_by_labels["style"].append(pr) + else: # PR doesn't have label :( Create one! + pr_by_labels["unlabeled"].append(pr) + + return pr_by_labels + + +def get_summary(body): + pattern = '([^"]*)' + has_changelog_pattern = re.search(pattern, body) + if has_changelog_pattern: + + return has_changelog_pattern.group()[22:-21].strip() + + +def main(token, revision_range, outfile=None): + lst_release, cur_release = [r.strip() for r in revision_range.split("..")] + + github = Github(token) + github_repo = github.get_repo("ManimCommunity/manim") + + pr_nums = get_pr_nums(revision_range) + + # document authors + contributors = get_authors_and_reviewers(revision_range, github_repo, pr_nums) + authors = contributors["authors"] + reviewers = contributors["reviewers"] + + if not outfile: + outfile = ( + Path(__file__).resolve().parent.parent / "docs" / "source" / "changelog" + ) + outfile = outfile / f"{cur_release[1:]}-changelog.rst" + else: + outfile = Path(outfile).resolve() + + with outfile.open("w", encoding="utf8") as f: + heading = "Contributors" + f.write(f"{heading}\n") + f.write("=" * len(heading) + "\n\n") + f.write( + dedent( + f"""\ + A total of {len(set(authors).union(set(reviewers)))} people contributed to this + release. People with a '+' by their names authored a patch for the first + time.\n + """ + ) + ) + + for author in authors: + f.write(f"* {author}\n") + + f.write("\n") + f.write( + dedent( + """ + The patches included in this release have been reviewed by + the following contributors.\n + """ + ) + ) + + for reviewer in reviewers: + f.write(f"* {reviewer}\n") + + # document pull requests + heading = "Pull requests merged" + f.write("\n") + f.write(heading + "\n") + f.write("=" * len(heading) + "\n\n") + f.write( + f"A total of {len(pr_nums)} pull requests were merged for this release.\n\n" + ) + + # TODO: Use labels list in sort_by_labels, simplify logic + labels = [ + "breaking changes", + "highlight", + "new feature", + "enhancement", + "bug", + "deprecation", + "documentation", + "release", + "testing", + "infrastructure", + "maintenance", + "style", + "unlabeled", + ] + pr_by_labels = sort_by_labels(github_repo, pr_nums) + for label in labels: + pr_of_label = pr_by_labels[label] + + if pr_of_label: + f.write(f"{label.capitalize()}\n") + f.write("-" * len(label) + "\n\n") + + for PR in pr_by_labels[label]: + num = PR.number + url = PR.html_url + title = PR.title + label = PR.labels + f.write(f"* `#{num} <{url}>`__: {title}\n") + overview = get_summary(PR.body) + if overview: + f.write(indent(f"{overview}\n", " ")) + else: + f.write("\n") + + print(f"Wrote changelog to: {outfile}") + + +if __name__ == "__main__": + from argparse import ArgumentParser, FileType + + parser = ArgumentParser(description="Generate author/pr lists for release") + parser.add_argument("token", help="github access token") + parser.add_argument("revision_range", help="..") + parser.add_argument( + "-o", "--outfile", type=str, help="path and file name of the changelog output" + ) + args = parser.parse_args() + main(args.token, args.revision_range, args.outfile)