From c2dfb597ff470f0cdb01ce9074edb426f45000bc Mon Sep 17 00:00:00 2001
From: Aarush Deshpande <110117391+JasonGrace2282@users.noreply.github.com>
Date: Mon, 20 Jan 2025 08:36:53 -0500
Subject: [PATCH] Create changelog for 0.19.0 (#4032)

* First draft of Changelog for 0.19.0

* fix typos

* added 3967

* Add #4037

* Update count 97 -> 98

* Add #4039

* Add #3930 and #4044

* Add this PR to changelog

* Add small description to changelog

* Add #3924, #3951, and #4038

* Bump Manim version to 0.19.0

* Update CITATION.cff to be more consistent

* remove github-security[bot]

* Feedback + missing PRs

* add newly merged PRs

* added more details to highlights + breaking changes

* bump date

* sort PRs in breaking changes section and include 3964

* sort highlights section

* fix: add required configuration key in .readthedocs.yml

* Update docs/source/changelog/0.19.0-changelog.rst

---------

Co-authored-by: Benjamin Hackl <devel@benjamin-hackl.at>
---
 .readthedocs.yml                           |   4 +
 CITATION.cff                               |   4 +-
 docs/source/changelog.rst                  |   1 +
 docs/source/changelog/0.19.0-changelog.rst | 587 +++++++++++++++++++++
 poetry.lock                                | 216 +++++++-
 pyproject.toml                             |   2 +-
 6 files changed, 799 insertions(+), 15 deletions(-)
 create mode 100644 docs/source/changelog/0.19.0-changelog.rst

diff --git a/.readthedocs.yml b/.readthedocs.yml
index afc76e5597..9b66a51cf3 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -1,4 +1,8 @@
 version: 2
+
+sphinx:
+  configuration: docs/source/conf.py
+
 build:
   os: ubuntu-22.04
 
diff --git a/CITATION.cff b/CITATION.cff
index 9bce914e14..9f5fd91613 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -4,10 +4,10 @@ authors:
   -
     name: "The Manim Community Developers"
 cff-version: "1.2.0"
-date-released: 2024-04-28
+date-released: 2025-01-20
 license: MIT
 message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work."
 title: Manim – Mathematical Animation Framework
 url: "https://www.manim.community/"
-version: "v0.18.1"
+version: "v0.19.0"
 ...
diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst
index f2afb6cfd8..2e99ef32cb 100644
--- a/docs/source/changelog.rst
+++ b/docs/source/changelog.rst
@@ -9,6 +9,7 @@ releases since v0.18.0) are documented on our
 
 .. toctree::
 
+    changelog/0.19.0-changelog
     changelog/0.18.0-changelog
     changelog/0.17.3-changelog
     changelog/0.17.2-changelog
diff --git a/docs/source/changelog/0.19.0-changelog.rst b/docs/source/changelog/0.19.0-changelog.rst
new file mode 100644
index 0000000000..f0ff567f5b
--- /dev/null
+++ b/docs/source/changelog/0.19.0-changelog.rst
@@ -0,0 +1,587 @@
+*******
+v0.19.0
+*******
+
+:Date: January 20, 2025
+
+Major Changes
+=============
+
+With the release of Manim v0.19.0, we've made lots of progress with making
+Manim easier to install!
+
+One of the biggest changes in this release is the replacement of the external
+``ffmpeg`` dependency with the ``pyav`` library. This means that users no longer
+have to install ``ffmpeg`` in order to use Manim - they can just ``pip install manim``
+and it will work!
+
+In light of this change, we also rewrote our :ref:`installation docs <local-installation>`
+to recommend using a new tool called `uv <https://docs.astral.sh/uv/>`_ to install Manim.
+
+.. note::
+
+   Do not worry if you installed Manim with any previous methods, like homebrew, pip,
+   choco, or scoop. Those methods will still work, and are not deprecated. However,
+   the recommended way to install Manim is now with `uv <https://docs.astral.sh/uv/>`_.
+
+Contributors
+============
+
+A total of 54 people contributed to this
+release. People with a '+' by their names authored a patch for the first
+time.
+
+* Aarush Deshpande
+* Abulafia
+* Achille Fouilleul +
+* Benjamin Hackl
+* CJ Lee +
+* Cameron Burdgick +
+* Chin Zhe Ning
+* Christopher Hampson +
+* ChungLeeCN +
+* Eddie Ruiz +
+* F. Muenkel +
+* Francisco Manríquez Novoa
+* Geoo Chi +
+* Henrik Skov Midtiby +
+* Hugo Chargois +
+* Irvanal Haq +
+* Jay Gupta +
+* Laifsyn +
+* Larry Skuse +
+* Nemo2510 +
+* Nikhil Iyer
+* Nikhila Gurusinghe +
+* Rehmatpal Singh +
+* Romit Mohane +
+* Saveliy Yusufov +
+* Sir James Clark Maxwell
+* Sophia Wisdom +
+* Tristan Schulz
+* VPC +
+* Victorien
+* Xiuyuan (Jack) Yuan +
+* alembcke
+* anagorko +
+* czuzu +
+* fogsong233 +
+* jkjkil4 +
+* modjfy +
+* nitzanbueno +
+* yang-tsao +
+
+
+The patches included in this release have been reviewed by
+the following contributors.
+
+* Aarush Deshpande
+* Achille Fouilleul
+* Benjamin Hackl
+* Christopher Hampson
+* Eddie Ruiz
+* Francisco Manríquez Novoa
+* Henrik Skov Midtiby
+* Hugo Chargois
+* Irvanal Haq
+* Jay Gupta
+* Jérome Eertmans
+* Nemo2510
+* Nikhila Gurusinghe
+* OliverStrait
+* Saveliy Yusufov
+* Sir James Clark Maxwell
+* Tristan Schulz
+* VPC
+* Victorien
+* Xiuyuan (Jack) Yuan
+* alembcke
+* github-advanced-security[bot]
+
+Pull requests merged
+====================
+
+A total of 138 pull requests were merged for this release.
+
+Highlights
+----------
+
+* :pr:`3501`: Replaced external ``ffmpeg`` dependency with ``pyav``
+   This change removes the need to have ``ffmpeg`` available as a command line tool
+   when using Manim. While ``pyav`` technically also uses ``ffmpeg`` internally,
+   the maintainers of ``pyav`` distribute it in their binary wheels.
+
+
+* :pr:`3518`: Created a :class:`.HSV` color class, and added support for custom color spaces
+   This extends the color system of Manim and adds support to implement custom color spaces.
+   See the implementation of :class:`.HSV` for a practical example.
+
+
+* :pr:`3930`: Completely reworked the installation instructions
+   As a consequence of removing the need for the external ``ffmpeg`` dependency,
+   we have reworked and massively simplified the installation instructions. Given
+   that practically, user-written scenes are effectively small self-contained Python
+   projects, the new instructions strongly recommend using the
+   `project and dependency management tool uv <https://docs.astral.sh/uv/>`__ to ensure
+   a consistent and reproducible environment.
+
+
+* :pr:`3967`: Added support for Python 3.13
+   This adds support for Python 3.13, which brings the range of currently supported
+   Python versions to 3.9 -- 3.13.
+
+
+* :pr:`3966`: :class:`.VGroup` can now be initialized with :class:`.VMobject` iterables
+   Groups of Mobjects can now be created by passing an iterable to the :class:`.VGroup`
+   constructors::
+
+      my_group = VGroup(Dot() for _ in range(10))
+
+
+Breaking changes
+----------------
+
+* :pr:`3797`: Replaced ``Code.styles_list`` with :meth:`.Code.get_styles_list`
+   The ``styles_list`` attribute of the :class:`.Code` class has been replaced with
+   a class method :meth:`.Code.get_styles_list`. This method returns a list of all
+   available values for the ``formatter_style`` argument of :class:`.Code`.
+
+
+* :pr:`3884`: Renamed parameters and variables conflicting with builtin functions
+   To avoid having keyword arguments named after builtin functions, the following
+   two changes were made to user-facing functions:
+
+   - ``ManimColor.from_hex(hex=...)`` is now  ``ManimColor.from_hex(hex_str=...)``
+   - ``Scene.next_section(type=...)`` is now ``Scene.next_section(section_type=...)``
+
+
+* :pr:`3922`: Removed ``inner_radius`` and ``outer_radius`` from :class:`.Sector` constructor
+   To construct a :class:`.Sector`, you now need to specify a ``radius`` (and an ``angle``).
+   In particular, :class:`.AnnularSector` still accepts both ``inner_radius`` and ``outer_radius``
+   arguments.
+
+
+* :pr:`3964`: Allow :class:`.SurroundingRectangle` to accept multiple Mobjects
+   This changes the signature of :class:`.SurroundingRectangle` to accept
+   a sequence of Mobjects instead of a single Mobject. As a consequence, other
+   arguments that could be specified as positional ones before now need to be
+   specified as keyword arguments::
+
+      SurroundingRectangle(some_mobject, RED, 0.3)  # raises error now
+      SurroundingRectangle(some_mobject, color=RED, buff=0.3)  # correct usage
+
+
+* :pr:`4115`: Completely rewrite the implementation of the :class:`.Code` mobject
+   This includes several breaking changes to the interface of the class to make it
+   more consistent. See the documentation of :class:`.Code` for a detailed description
+   of the new interface, and the description of the pull request :pr:`4115` for
+   an overview of changes to the old keyword arguments.
+
+
+New features
+------------
+
+* :pr:`3148`: Added a ``colorscale`` argument to :meth:`.CoordinateSystem.plot`
+
+
+* :pr:`3612`: Add three animations that together simulate a typing animation
+
+
+* :pr:`3754`: Add ``@`` shorthand for :meth:`.Axes.coords_to_point` and :meth:`.Axes.point_to_coords`
+
+
+* :pr:`3876`: Add :meth:`.Animation.set_default` class method
+
+
+* :pr:`3903`: Preserve colors of LaTeX coloring commands
+
+
+* :pr:`3913`: Added :mod:`.DVIPSNAMES` and :mod:`.SVGNAMES` color palettes
+
+
+* :pr:`3933`: Added :class:`.ConvexHull`, :class:`.ConvexHull3D`, :class:`.Label` and :class:`.LabeledPolygram`
+
+
+* :pr:`3992`: Add darker, lighter and contrasting methods to :class:`.ManimColor`
+
+
+* :pr:`3997`: Add a time property to scene (:attr:`.Scene.time`)
+
+
+* :pr:`4039`: Added the ``delay`` parameter to :func:`.turn_animation_into_updater`
+
+
+Enhancements
+------------
+
+* :pr:`3829`: Rewrite :func:`~.bezier.get_quadratic_approximation_of_cubic` to produce smoother animated curves
+
+
+* :pr:`3855`: Log execution time of sample scene in the ``manim checkhealth`` command
+
+
+* :pr:`3888`: Significantly reduce rendering time with a separate thread for writing frames to stream
+
+
+* :pr:`3890`: Better error messages for :class:`.DrawBorderThenFill`
+
+
+* :pr:`3893`: Improve line rendering performance of :class:`.Cylinder`
+
+
+* :pr:`3901`: Changed :attr:`.Square.side_length` attribute to a property
+
+
+* :pr:`3965`: Added the ``scale_stroke`` boolean parameter to :meth:`.VMobject.scale`
+
+
+* :pr:`3974`: Made videos embedded in Google Colab by default
+
+
+* :pr:`3982`: Refactored ``run_time`` validation for :class:`.Animation` and :meth:`.Scene.wait`
+
+
+* :pr:`4017`: Allow animations with ``run_time=0`` and implement convenience :class:`.Add` animation
+
+
+* :pr:`4034`: Draw more accurate circular :class:`.Arc` mobjects for large angles
+
+
+* :pr:`4051`: Add ``__hash__`` method to :class:`.ManimColor`
+
+
+* :pr:`4108`: Remove duplicate declaration of ``__all__`` in :mod:`.vectorized_mobject`
+
+
+Optimizations
+-------------
+
+* :pr:`3760`: Optimize :meth:`.VMobject.pointwise_become_partial`
+
+
+* :pr:`3765`: Optimize :class:`.VMobject` methods which append to ``points``
+
+
+* :pr:`3766`: Created and optimized Bézier splitting functions such as :func:`~.utils.bezier.partial_bezier_points()` in :mod:`manim.utils.bezier`
+
+
+* :pr:`3767`: Optimized :func:`manim.utils.bezier.get_smooth_cubic_bezier_handle_points()`
+
+
+* :pr:`3768`: Optimized :func:`manim.utils.bezier.is_closed`
+
+
+* :pr:`3960`: Optimized :func:`~.bezier.interpolate` and :func:`~.bezier.bezier` in :mod:`manim.utils.bezier`
+
+
+
+Fixed bugs
+----------
+
+* :pr:`3706`: Fixed :meth:`.Line.put_start_and_end_on` to use the actual end of an :class:`.Arrow3D`
+
+
+* :pr:`3732`: Fixed infinite loop in OpenGL :meth:`.BackgroundRectangle.get_color`
+
+
+* :pr:`3756`: Fix assertions and improve error messages when adding submobjects
+
+
+* :pr:`3778`: Fixed :func:`.there_and_back_with_pause` rate function behaviour with different ``pause_ratio`` values
+
+
+* :pr:`3786`: Fix :class:`.DiGraph` edges not fading correctly on :class:`.FadeIn` and :class:`.FadeOut`
+
+
+* :pr:`3790`: Fixed the :func:`.get_nth_subpath` function expecting a numpy array
+
+
+* :pr:`3832`: Convert audio files to ``.wav`` before passing to pydub
+
+
+* :pr:`3680`: Fixed behavior of ``config.background_opacity < 1``
+
+
+* :pr:`3839`: Fixed :attr:`.ManimConfig.format` not updating movie file extension
+
+
+* :pr:`3885`: Fixed :meth:`.OpenGLMobject.invert` not reassembling family
+
+
+* :pr:`3951`: Call :meth:`.Animation.finish` for animations in an :class:`.AnimationGroup`
+
+
+* :pr:`4013`: Fixed scene skipping for :attr:`ManimConfig.upto_animation_number` set to 0
+
+
+* :pr:`4089`: Fixed bug with opacity of :class:`.ImageMobject`
+
+
+* :pr:`4091`: Fixed :meth:`.VMobject.add_points_as_corners` to safely handle empty ``points`` parameter
+
+
+Documentation-related changes
+-----------------------------
+
+* :pr:`3669`: Added a :mod:`manim.typing` guide
+
+
+* :pr:`3715`: Added docstrings to Brace
+
+
+* :pr:`3745`: Underline tag should be ``<u></u>`` in the documentation
+
+
+* :pr:`3818`: Automatically document usages of :class:`typing.TypeVar`
+
+
+* :pr:`3849`: Fix incorrect ``versionadded`` version number in plugin section in docs
+
+
+* :pr:`3851`: Rename ``manim.typing.Image`` type aliases to :class:`.PixelArray` to avoid conflict with ``PIL.Image``
+
+
+* :pr:`3857`: Update installation instructions for MacOS (via dedicated brew formula)
+
+
+* :pr:`3878`: Fixed typehint in ``types.rst`` and replaced outdated reference to ``manim.typing.Image`` with :class:`manim.typing.PixelArray`
+
+
+* :pr:`3924`: Fix ``SyntaxWarning`` when building docs + use Python 3.13 for readthedocs build
+
+
+* :pr:`3958`: Fix: ``.to_edge``'s example demonstration in docs
+
+
+* :pr:`3972`: Refining documentations for :mod:`.moving_camera_scene` module
+
+
+* :pr:`4032`: Bump version and create changelog for ``v0.19.0``
+
+
+* :pr:`4044`: Added support for autodocumenting type aliases that use the ``type`` syntax
+
+
+* :pr:`4065`: Polish documentation of :mod:`.utils.color.core` and remove ``interpolate_array`` function
+
+
+* :pr:`4077`: Update README and documentation landing page, improve way how 3b1b is credited
+
+
+* :pr:`4100`: Add wavy square example to :class:`.Homotopy`
+
+
+* :pr:`4107`: Corrected a typo in the deep dive guide
+
+
+* :pr:`4116`: Fix broken link to Poetry installation in contribution docs
+
+
+Type Hints
+----------
+
+* :pr:`3751`: Added typehints to :mod:`manim.utils.iterables`
+
+
+* :pr:`3803`: Added typings to :class:`.OpenGLMobject`
+
+
+* :pr:`3902`: fixed a wrong type hint in :meth:`.Scene.restructure_mobjects`
+
+
+* :pr:`3916`: fixed type hint in :meth:`.DrawBorderThenFill.interpolate_submobject`
+
+
+* :pr:`3926`: Fixed some typehints of :class:`.ParametricFunction`
+
+
+* :pr:`3940`: Fixed ``np.float_`` to ``np.float64`` while using numpy versions above 2.0
+
+
+* :pr:`3961`: Added typehints to :mod:`manim.mobject.geometry`
+
+
+* :pr:`3980`: Added new :class:`.PointND` and :class:`.PointND_Array` type aliases
+
+
+* :pr:`3988`: Added type hints to :mod:`manim.cli` module
+
+
+* :pr:`3999`: Add type annotations to :mod:`manim.utils`
+
+
+* :pr:`4006`: Stopped ignoring :mod:`manim.plugins` errors in ``mypy.ini``
+
+
+* :pr:`4007`: Added typings to :mod:`manim.__main__`
+
+
+* :pr:`4027`: Rename ``InternalPoint3D`` to :class:`~.typing.Point3D`, ``Point3D`` to :class:`~.Point3DLike` and other point-related type aliases
+
+
+* :pr:`4038`: Fixed type hint of :meth:`.Scene.play` to allow :attr:`.Mobject.animate`
+
+
+Internal Improvements and Automation
+------------------------------------
+
+* :pr:`3737`: Fixed action for building downloadable documentation
+
+
+* :pr:`3761`: Use ``--py39-plus`` in pre-commit
+
+
+* :pr:`3777`: Add pyproject for ruff formatting
+
+
+* :pr:`3779`: Switch pre-commit to use ``ruff`` for linting
+
+
+* :pr:`3795`: Replace Pyupgrade with Ruff rule
+
+
+* :pr:`3812`: Fix MacOS LaTeX CI
+
+
+* :pr:`3853`: Change from tempconfig to a config fixture in tests
+
+
+* :pr:`3858`: Update docker to use ENV x=y instead of ENV x y
+
+
+* :pr:`3872`: Use ruff for pytest style
+
+
+* :pr:`3873`: Use ruff instead of flake8-simplify
+
+
+* :pr:`3877`: Fix pre-commit linting
+
+
+* :pr:`3780`: Add Ruff Lint
+
+
+* :pr:`3781`: Ignore Ruff format in git blame
+
+
+* :pr:`3881`: Standardize docstrings with ruff pydocstyle rules
+
+
+* :pr:`3882`: Change flake8-comprehensions and flake8-bugbear to ruff
+
+
+* :pr:`3887`: Fix typo from HSV PR
+
+
+* :pr:`3923`: Use Ruff pygrep rules
+
+
+* :pr:`3925`: Use Github Markdown on README
+
+
+* :pr:`3955`: Use ``subprocess`` instead of ``os.system``.
+
+
+* :pr:`3956`: Set AAC codec for audio in mp4 files, add transcoding utility
+
+
+* :pr:`4069`: Include Noto fonts in Docker image
+
+
+* :pr:`4102`: Remove PT004 from Ruff ignore rules
+
+
+Dependencies
+------------
+
+* :pr:`3739`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3746`: Bump tqdm from 4.66.1 to 4.66.3
+
+
+* :pr:`3750`: Bump jinja2 from 3.1.3 to 3.1.4
+
+
+* :pr:`3776`: Bump requests from 2.31.0 to 2.32.0
+
+
+* :pr:`3784`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3794`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3796`: Bump tornado from 6.4 to 6.4.1
+
+
+* :pr:`3801`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3809`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3810`: Bump urllib3 from 2.2.1 to 2.2.2
+
+
+* :pr:`3823`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3827`: Fix docker build
+
+
+* :pr:`3834`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3835`: Bump docker/build-push-action from 5 to 6
+
+
+* :pr:`3841`: Bump certifi from 2024.2.2 to 2024.7.4
+
+
+* :pr:`3844`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3847`: Bump zipp from 3.18.2 to 3.19.1
+
+
+* :pr:`3865`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3880`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3889`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3895`: Lock `poetry.lock`
+
+
+* :pr:`3896`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3904`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3911`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3918`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3929`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`3931`: Bump cryptography from 43.0.0 to 43.0.1
+
+
+* :pr:`3987`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`4023`: Bump tornado from 6.4.1 to 6.4.2
+
+
+* :pr:`4035`: [pre-commit.ci] pre-commit autoupdate
+
+
+* :pr:`4037`: Cap ``pyav`` version
diff --git a/poetry.lock b/poetry.lock
index 5fcae2825b..576d568faf 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,9 +1,10 @@
-# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry and should not be changed by hand.
 
 [[package]]
 name = "alabaster"
 version = "0.7.16"
 description = "A light, configurable Sphinx theme"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -15,6 +16,7 @@ files = [
 name = "anyio"
 version = "4.8.0"
 description = "High level compatibility layer for multiple asynchronous event loop implementations"
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -37,6 +39,7 @@ trio = ["trio (>=0.26.1)"]
 name = "appnope"
 version = "0.1.4"
 description = "Disable App Nap on macOS >= 10.9"
+category = "main"
 optional = true
 python-versions = ">=3.6"
 files = [
@@ -48,6 +51,7 @@ files = [
 name = "argon2-cffi"
 version = "23.1.0"
 description = "Argon2 for Python"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -68,6 +72,7 @@ typing = ["mypy"]
 name = "argon2-cffi-bindings"
 version = "21.2.0"
 description = "Low-level CFFI bindings for Argon2"
+category = "main"
 optional = true
 python-versions = ">=3.6"
 files = [
@@ -105,6 +110,7 @@ tests = ["pytest"]
 name = "arrow"
 version = "1.3.0"
 description = "Better dates & times for Python"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -118,12 +124,13 @@ types-python-dateutil = ">=2.8.10"
 
 [package.extras]
 doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"]
-test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"]
+test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"]
 
 [[package]]
 name = "asttokens"
 version = "3.0.0"
 description = "Annotate AST trees with source code positions"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -139,6 +146,7 @@ test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"]
 name = "async-lru"
 version = "2.0.4"
 description = "Simple LRU cache for asyncio"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -153,6 +161,7 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""}
 name = "attrs"
 version = "24.3.0"
 description = "Classes Without Boilerplate"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -172,6 +181,7 @@ tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
 name = "audioop-lts"
 version = "0.2.1"
 description = "LTS Port of Python audioop"
+category = "main"
 optional = false
 python-versions = ">=3.13"
 files = [
@@ -214,6 +224,7 @@ files = [
 name = "av"
 version = "13.1.0"
 description = "Pythonic bindings for FFmpeg's libraries."
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -266,6 +277,7 @@ files = [
 name = "babel"
 version = "2.16.0"
 description = "Internationalization utilities"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -280,6 +292,7 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
 name = "beautifulsoup4"
 version = "4.12.3"
 description = "Screen-scraping library"
+category = "main"
 optional = false
 python-versions = ">=3.6.0"
 files = [
@@ -301,6 +314,7 @@ lxml = ["lxml"]
 name = "bleach"
 version = "6.2.0"
 description = "An easy safelist-based HTML-sanitizing tool."
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -319,6 +333,7 @@ css = ["tinycss2 (>=1.1.0,<1.5)"]
 name = "certifi"
 version = "2024.12.14"
 description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -330,6 +345,7 @@ files = [
 name = "cffi"
 version = "1.17.1"
 description = "Foreign Function Interface for Python calling C code."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -409,6 +425,7 @@ pycparser = "*"
 name = "cfgv"
 version = "3.4.0"
 description = "Validate configuration and produce human readable error messages."
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -420,6 +437,7 @@ files = [
 name = "charset-normalizer"
 version = "3.4.1"
 description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -521,6 +539,7 @@ files = [
 name = "click"
 version = "8.1.8"
 description = "Composable command line interface toolkit"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -535,6 +554,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
 name = "cloup"
 version = "3.0.5"
 description = "Adds features to Click: option groups, constraints, subcommand sections and help themes."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -549,6 +569,7 @@ click = ">=8.0,<9.0"
 name = "colorama"
 version = "0.4.6"
 description = "Cross-platform colored terminal text."
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 files = [
@@ -560,6 +581,7 @@ files = [
 name = "comm"
 version = "0.2.2"
 description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -577,6 +599,7 @@ test = ["pytest"]
 name = "contourpy"
 version = "1.3.0"
 description = "Python library for calculating contours of 2D quadrilateral grids"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -661,6 +684,7 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist"
 name = "coverage"
 version = "7.6.10"
 description = "Code coverage measurement for Python"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -738,6 +762,7 @@ toml = ["tomli"]
 name = "cryptography"
 version = "43.0.3"
 description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -787,6 +812,7 @@ test-randomorder = ["pytest-randomly"]
 name = "cycler"
 version = "0.12.1"
 description = "Composable style cycles"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -802,6 +828,7 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"]
 name = "cython"
 version = "3.0.11"
 description = "The Cython compiler for writing C extensions in the Python language."
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
 files = [
@@ -877,6 +904,7 @@ files = [
 name = "dearpygui"
 version = "2.0.0"
 description = "DearPyGui: A simple Python GUI Toolkit"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -908,6 +936,7 @@ files = [
 name = "debugpy"
 version = "1.8.12"
 description = "An implementation of the Debug Adapter Protocol for Python"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -943,6 +972,7 @@ files = [
 name = "decorator"
 version = "5.1.1"
 description = "Decorators for Humans"
+category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -954,6 +984,7 @@ files = [
 name = "defusedxml"
 version = "0.7.1"
 description = "XML bomb protection for Python stdlib modules"
+category = "main"
 optional = true
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -965,6 +996,7 @@ files = [
 name = "deprecated"
 version = "1.2.15"
 description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
+category = "dev"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
 files = [
@@ -982,6 +1014,7 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "
 name = "distlib"
 version = "0.3.9"
 description = "Distribution utilities"
+category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -993,6 +1026,7 @@ files = [
 name = "docutils"
 version = "0.20.1"
 description = "Docutils -- Python Documentation Utilities"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1004,6 +1038,7 @@ files = [
 name = "exceptiongroup"
 version = "1.2.2"
 description = "Backport of PEP 654 (exception groups)"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1018,6 +1053,7 @@ test = ["pytest (>=6)"]
 name = "execnet"
 version = "2.1.1"
 description = "execnet: rapid multi-Python deployment"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1032,6 +1068,7 @@ testing = ["hatch", "pre-commit", "pytest", "tox"]
 name = "executing"
 version = "2.1.0"
 description = "Get the currently executing AST node of a frame, and other information"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1046,6 +1083,7 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth
 name = "fastjsonschema"
 version = "2.21.1"
 description = "Fastest Python implementation of JSON schema"
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -1060,6 +1098,7 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc
 name = "filelock"
 version = "3.16.1"
 description = "A platform independent file lock."
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1076,6 +1115,7 @@ typing = ["typing-extensions (>=4.12.2)"]
 name = "fonttools"
 version = "4.55.3"
 description = "Tools to manipulate font files"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1149,6 +1189,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
 name = "fqdn"
 version = "1.4.0"
 description = "Validate fully-qualified domain names compliant to RFC 1035 and the preferred form in RFC 3686 s. 2."
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -1160,6 +1201,7 @@ files = [
 name = "furo"
 version = "2023.9.10"
 description = "A clean customisable Sphinx documentation theme."
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1177,6 +1219,7 @@ sphinx-basic-ng = "*"
 name = "gitdb"
 version = "4.0.12"
 description = "Git Object Database"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1191,6 +1234,7 @@ smmap = ">=3.0.1,<6"
 name = "gitpython"
 version = "3.1.44"
 description = "GitPython is a Python library used to interact with Git repositories"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1209,6 +1253,7 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit",
 name = "glcontext"
 version = "3.0.0"
 description = "Portable Headless OpenGL Context"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1282,6 +1327,7 @@ files = [
 name = "h11"
 version = "0.14.0"
 description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -1293,6 +1339,7 @@ files = [
 name = "httpcore"
 version = "1.0.7"
 description = "A minimal low-level HTTP client."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1307,13 +1354,14 @@ h11 = ">=0.13,<0.15"
 [package.extras]
 asyncio = ["anyio (>=4.0,<5.0)"]
 http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (==1.*)"]
+socks = ["socksio (>=1.0.0,<2.0.0)"]
 trio = ["trio (>=0.22.0,<1.0)"]
 
 [[package]]
 name = "httpx"
 version = "0.28.1"
 description = "The next generation HTTP client."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1324,20 +1372,21 @@ files = [
 [package.dependencies]
 anyio = "*"
 certifi = "*"
-httpcore = "==1.*"
+httpcore = ">=1.0.0,<2.0.0"
 idna = "*"
 
 [package.extras]
 brotli = ["brotli", "brotlicffi"]
-cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
+cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
 http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (==1.*)"]
+socks = ["socksio (>=1.0.0,<2.0.0)"]
 zstd = ["zstandard (>=0.18.0)"]
 
 [[package]]
 name = "identify"
 version = "2.6.5"
 description = "File identification library for Python"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -1352,6 +1401,7 @@ license = ["ukkonen"]
 name = "idna"
 version = "3.10"
 description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1366,6 +1416,7 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2
 name = "imagesize"
 version = "1.4.1"
 description = "Getting image size from png/jpeg/jpeg2000/gif file"
+category = "dev"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -1377,6 +1428,7 @@ files = [
 name = "importlib-metadata"
 version = "8.5.0"
 description = "Read metadata from Python packages"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1400,6 +1452,7 @@ type = ["pytest-mypy"]
 name = "importlib-resources"
 version = "6.5.2"
 description = "Read resources from Python packages"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -1422,6 +1475,7 @@ type = ["pytest-mypy"]
 name = "iniconfig"
 version = "2.0.0"
 description = "brain-dead simple config-ini parsing"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1433,6 +1487,7 @@ files = [
 name = "ipykernel"
 version = "6.29.5"
 description = "IPython Kernel for Jupyter"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1446,7 +1501,7 @@ comm = ">=0.1.1"
 debugpy = ">=1.6.5"
 ipython = ">=7.23.1"
 jupyter-client = ">=6.1.12"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 matplotlib-inline = ">=0.1"
 nest-asyncio = "*"
 packaging = "*"
@@ -1466,6 +1521,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio
 name = "ipython"
 version = "8.18.1"
 description = "IPython: Productive Interactive Computing"
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -1503,6 +1559,7 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa
 name = "isoduration"
 version = "20.11.0"
 description = "Operations with ISO 8601 durations"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -1517,6 +1574,7 @@ arrow = ">=0.15.0"
 name = "isort"
 version = "5.13.2"
 description = "A Python utility / library to sort Python imports."
+category = "dev"
 optional = false
 python-versions = ">=3.8.0"
 files = [
@@ -1531,6 +1589,7 @@ colors = ["colorama (>=0.4.6)"]
 name = "isosurfaces"
 version = "0.1.2"
 description = "Construct isolines/isosurfaces over a 2D/3D scalar field defined by a function (not a uniform grid)"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1545,6 +1604,7 @@ numpy = "*"
 name = "jedi"
 version = "0.19.2"
 description = "An autocompletion tool for Python that can be used for text editors."
+category = "main"
 optional = true
 python-versions = ">=3.6"
 files = [
@@ -1564,6 +1624,7 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"]
 name = "jinja2"
 version = "3.1.5"
 description = "A very fast and expressive template engine."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1581,6 +1642,7 @@ i18n = ["Babel (>=2.7)"]
 name = "json5"
 version = "0.10.0"
 description = "A Python implementation of the JSON5 data format."
+category = "main"
 optional = true
 python-versions = ">=3.8.0"
 files = [
@@ -1595,6 +1657,7 @@ dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (=
 name = "jsonpointer"
 version = "3.0.0"
 description = "Identify specific nodes in a JSON document (RFC 6901)"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -1606,6 +1669,7 @@ files = [
 name = "jsonschema"
 version = "4.23.0"
 description = "An implementation of JSON Schema validation for Python"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1635,6 +1699,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-
 name = "jsonschema-specifications"
 version = "2024.10.1"
 description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -1649,6 +1714,7 @@ referencing = ">=0.31.0"
 name = "jupyter-client"
 version = "8.6.3"
 description = "Jupyter protocol implementation and client libraries"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1658,7 +1724,7 @@ files = [
 
 [package.dependencies]
 importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 python-dateutil = ">=2.8.2"
 pyzmq = ">=23.0"
 tornado = ">=6.2"
@@ -1672,6 +1738,7 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt
 name = "jupyter-core"
 version = "5.7.2"
 description = "Jupyter core package. A base package on which Jupyter projects rely."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1692,6 +1759,7 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"
 name = "jupyter-events"
 version = "0.11.0"
 description = "Jupyter Event System library"
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -1717,6 +1785,7 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p
 name = "jupyter-lsp"
 version = "2.2.5"
 description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1732,6 +1801,7 @@ jupyter-server = ">=1.1.2"
 name = "jupyter-server"
 version = "2.15.0"
 description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -1744,7 +1814,7 @@ anyio = ">=3.1.0"
 argon2-cffi = ">=21.1"
 jinja2 = ">=3.0.3"
 jupyter-client = ">=7.4.4"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 jupyter-events = ">=0.11.0"
 jupyter-server-terminals = ">=0.4.4"
 nbconvert = ">=6.4.4"
@@ -1768,6 +1838,7 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console
 name = "jupyter-server-terminals"
 version = "0.5.3"
 description = "A Jupyter Server Extension Providing Terminals."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1787,6 +1858,7 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>
 name = "jupyterlab"
 version = "4.3.4"
 description = "JupyterLab computational environment"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1822,6 +1894,7 @@ upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)"
 name = "jupyterlab-pygments"
 version = "0.3.0"
 description = "Pygments theme using JupyterLab CSS variables"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1833,6 +1906,7 @@ files = [
 name = "jupyterlab-server"
 version = "2.27.3"
 description = "A set of server components for JupyterLab and JupyterLab like applications."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -1859,6 +1933,7 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v
 name = "kiwisolver"
 version = "1.4.7"
 description = "A fast implementation of the Cassowary constraint solver"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1982,6 +2057,7 @@ files = [
 name = "manimpango"
 version = "0.6.0"
 description = "Bindings for Pango for using with Manim."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2012,6 +2088,7 @@ files = [
 name = "mapbox-earcut"
 version = "1.0.3"
 description = "Python bindings for the mapbox earcut C++ polygon triangulation library"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2063,6 +2140,7 @@ numpy = "*"
 name = "markdown-it-py"
 version = "3.0.0"
 description = "Python port of markdown-it. Markdown parsing, done right!"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2087,6 +2165,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
 name = "markupsafe"
 version = "3.0.2"
 description = "Safely add untrusted strings to HTML/XML markup."
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2157,6 +2236,7 @@ files = [
 name = "matplotlib"
 version = "3.9.4"
 description = "Python plotting package"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2222,6 +2302,7 @@ dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2
 name = "matplotlib-inline"
 version = "0.1.7"
 description = "Inline Matplotlib backend for Jupyter"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -2236,6 +2317,7 @@ traitlets = "*"
 name = "mdit-py-plugins"
 version = "0.4.2"
 description = "Collection of plugins for markdown-it-py"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2255,6 +2337,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
 name = "mdurl"
 version = "0.1.2"
 description = "Markdown URL utilities"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2266,6 +2349,7 @@ files = [
 name = "mistune"
 version = "3.1.0"
 description = "A sane and fast Markdown parser with useful plugins and renderers"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -2280,6 +2364,7 @@ typing-extensions = {version = "*", markers = "python_version < \"3.11\""}
 name = "moderngl"
 version = "5.12.0"
 description = "ModernGL: High performance rendering for Python 3"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2344,6 +2429,7 @@ headless = ["glcontext (>=3.0.0)"]
 name = "moderngl-window"
 version = "3.1.1"
 description = "A cross platform helper library for ModernGL making window creation and resource loading simple"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2379,6 +2465,7 @@ trimesh = ["trimesh (>=3.2.6)"]
 name = "myst-parser"
 version = "2.0.0"
 description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser,"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2405,6 +2492,7 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,
 name = "nbclient"
 version = "0.10.2"
 description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
+category = "main"
 optional = true
 python-versions = ">=3.9.0"
 files = [
@@ -2414,7 +2502,7 @@ files = [
 
 [package.dependencies]
 jupyter-client = ">=6.1.12"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 nbformat = ">=5.1"
 traitlets = ">=5.4"
 
@@ -2427,6 +2515,7 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=
 name = "nbconvert"
 version = "7.16.5"
 description = "Converting Jupyter Notebooks (.ipynb files) to other formats.  Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.  nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -2464,6 +2553,7 @@ webpdf = ["playwright"]
 name = "nbformat"
 version = "5.10.4"
 description = "The Jupyter Notebook format"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -2474,7 +2564,7 @@ files = [
 [package.dependencies]
 fastjsonschema = ">=2.15"
 jsonschema = ">=2.6"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 traitlets = ">=5.1"
 
 [package.extras]
@@ -2485,6 +2575,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"]
 name = "nest-asyncio"
 version = "1.6.0"
 description = "Patch asyncio to allow nested event loops"
+category = "main"
 optional = true
 python-versions = ">=3.5"
 files = [
@@ -2496,6 +2587,7 @@ files = [
 name = "networkx"
 version = "3.2.1"
 description = "Python package for creating and manipulating graphs and networks"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2514,6 +2606,7 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"]
 name = "nodeenv"
 version = "1.9.1"
 description = "Node.js virtual environment builder"
+category = "dev"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 files = [
@@ -2525,6 +2618,7 @@ files = [
 name = "notebook"
 version = "7.3.2"
 description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -2548,6 +2642,7 @@ test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4
 name = "notebook-shim"
 version = "0.2.4"
 description = "A shim layer for notebook traits and config"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -2565,6 +2660,7 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"
 name = "numpy"
 version = "2.0.2"
 description = "Fundamental package for array computing in Python"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2619,6 +2715,7 @@ files = [
 name = "numpy"
 version = "2.2.2"
 description = "Fundamental package for array computing in Python"
+category = "main"
 optional = false
 python-versions = ">=3.10"
 files = [
@@ -2683,6 +2780,7 @@ files = [
 name = "overrides"
 version = "7.7.0"
 description = "A decorator to automatically detect mismatch when overriding a method."
+category = "main"
 optional = true
 python-versions = ">=3.6"
 files = [
@@ -2694,6 +2792,7 @@ files = [
 name = "packaging"
 version = "24.2"
 description = "Core utilities for Python packages"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2705,6 +2804,7 @@ files = [
 name = "pandocfilters"
 version = "1.5.1"
 description = "Utilities for writing pandoc filters in python"
+category = "main"
 optional = true
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2716,6 +2816,7 @@ files = [
 name = "parso"
 version = "0.8.4"
 description = "A Python Parser"
+category = "main"
 optional = true
 python-versions = ">=3.6"
 files = [
@@ -2731,6 +2832,7 @@ testing = ["docopt", "pytest"]
 name = "pexpect"
 version = "4.9.0"
 description = "Pexpect allows easy control of interactive console applications."
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -2745,6 +2847,7 @@ ptyprocess = ">=0.5"
 name = "pillow"
 version = "11.1.0"
 description = "Python Imaging Library (Fork)"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2833,6 +2936,7 @@ xmp = ["defusedxml"]
 name = "platformdirs"
 version = "4.3.6"
 description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2849,6 +2953,7 @@ type = ["mypy (>=1.11.2)"]
 name = "pluggy"
 version = "1.5.0"
 description = "plugin and hook calling mechanisms for python"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2864,6 +2969,7 @@ testing = ["pytest", "pytest-benchmark"]
 name = "pre-commit"
 version = "3.8.0"
 description = "A framework for managing and maintaining multi-language pre-commit hooks."
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -2882,6 +2988,7 @@ virtualenv = ">=20.10.0"
 name = "prometheus-client"
 version = "0.21.1"
 description = "Python client for the Prometheus monitoring system."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -2896,6 +3003,7 @@ twisted = ["twisted"]
 name = "prompt-toolkit"
 version = "3.0.48"
 description = "Library for building powerful interactive command lines in Python"
+category = "main"
 optional = true
 python-versions = ">=3.7.0"
 files = [
@@ -2910,6 +3018,7 @@ wcwidth = "*"
 name = "psutil"
 version = "5.9.8"
 description = "Cross-platform lib for process and system monitoring in Python."
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
 files = [
@@ -2938,6 +3047,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
 name = "psutil-wheels"
 version = "5.8.0"
 description = "Cross-platform lib for process and system monitoring in Python."
+category = "dev"
 optional = false
 python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2963,6 +3073,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "unittest2", "wmi"]
 name = "ptyprocess"
 version = "0.7.0"
 description = "Run a subprocess in a pseudo terminal"
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -2974,6 +3085,7 @@ files = [
 name = "pure-eval"
 version = "0.2.3"
 description = "Safely evaluate AST nodes without side effects"
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -2988,6 +3100,7 @@ tests = ["pytest"]
 name = "py"
 version = "1.11.0"
 description = "library with cross-python path, ini-parsing, io, code, log facilities"
+category = "dev"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -2999,6 +3112,7 @@ files = [
 name = "pycairo"
 version = "1.27.0"
 description = "Python interface for cairo"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -3019,6 +3133,7 @@ files = [
 name = "pycparser"
 version = "2.22"
 description = "C parser in Python"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3030,6 +3145,7 @@ files = [
 name = "pydub"
 version = "0.25.1"
 description = "Manipulate audio with an simple and easy high level interface"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3041,6 +3157,7 @@ files = [
 name = "pygithub"
 version = "2.5.0"
 description = "Use the full Github API v3"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3060,6 +3177,7 @@ urllib3 = ">=1.26.0"
 name = "pyglet"
 version = "2.1.0"
 description = "pyglet is a cross-platform games and multimedia package."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3071,6 +3189,7 @@ files = [
 name = "pyglm"
 version = "2.7.3"
 description = "OpenGL Mathematics library for Python"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3161,6 +3280,7 @@ files = [
 name = "pygments"
 version = "2.19.1"
 description = "Pygments is a syntax highlighting package written in Python."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3175,6 +3295,7 @@ windows-terminal = ["colorama (>=0.4.6)"]
 name = "pyjwt"
 version = "2.10.1"
 description = "JSON Web Token implementation in Python"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -3195,6 +3316,7 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"]
 name = "pynacl"
 version = "1.5.0"
 description = "Python binding to the Networking and Cryptography (NaCl) library"
+category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3221,6 +3343,7 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"]
 name = "pyobjc-core"
 version = "11.0"
 description = "Python<->ObjC Interoperability Module"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3237,6 +3360,7 @@ files = [
 name = "pyobjc-framework-cocoa"
 version = "11.0"
 description = "Wrappers for the Cocoa frameworks on macOS"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -3256,6 +3380,7 @@ pyobjc-core = ">=11.0"
 name = "pyparsing"
 version = "3.2.1"
 description = "pyparsing module - Classes and methods to define and execute parsing grammars"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -3270,6 +3395,7 @@ diagrams = ["jinja2", "railroad-diagrams"]
 name = "pytest"
 version = "8.3.4"
 description = "pytest: simple powerful testing with Python"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3292,6 +3418,7 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments
 name = "pytest-cov"
 version = "4.1.0"
 description = "Pytest plugin for measuring coverage."
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3310,6 +3437,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale
 name = "pytest-forked"
 version = "1.6.0"
 description = "run tests in isolated forked subprocesses"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3325,6 +3453,7 @@ pytest = ">=3.10"
 name = "pytest-xdist"
 version = "2.5.0"
 description = "pytest xdist plugin for distributed testing and loop-on-failing modes"
+category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3346,6 +3475,7 @@ testing = ["filelock"]
 name = "python-dateutil"
 version = "2.9.0.post0"
 description = "Extensions to the standard Python datetime module"
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
 files = [
@@ -3360,6 +3490,7 @@ six = ">=1.5"
 name = "python-json-logger"
 version = "3.2.1"
 description = "JSON Log Formatter for the Python Logging Package"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -3377,6 +3508,7 @@ dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_list
 name = "pywin32"
 version = "308"
 description = "Python for Window Extensions"
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -3404,6 +3536,7 @@ files = [
 name = "pywinpty"
 version = "2.0.14"
 description = "Pseudo terminal support for Windows from Python."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -3419,6 +3552,7 @@ files = [
 name = "pyyaml"
 version = "6.0.2"
 description = "YAML parser and emitter for Python"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3481,6 +3615,7 @@ files = [
 name = "pyzmq"
 version = "26.2.0"
 description = "Python bindings for 0MQ"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -3602,6 +3737,7 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""}
 name = "referencing"
 version = "0.36.1"
 description = "JSON Referencing + Python"
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -3618,6 +3754,7 @@ typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""}
 name = "requests"
 version = "2.32.3"
 description = "Python HTTP for Humans."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3639,6 +3776,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 name = "rfc3339-validator"
 version = "0.1.4"
 description = "A pure python RFC3339 validator"
+category = "main"
 optional = true
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -3653,6 +3791,7 @@ six = "*"
 name = "rfc3986-validator"
 version = "0.1.1"
 description = "Pure python rfc3986 validator"
+category = "main"
 optional = true
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -3664,6 +3803,7 @@ files = [
 name = "rich"
 version = "13.9.4"
 description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
+category = "main"
 optional = false
 python-versions = ">=3.8.0"
 files = [
@@ -3683,6 +3823,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
 name = "rpds-py"
 version = "0.22.3"
 description = "Python bindings to Rust's persistent data structures (rpds)"
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -3795,6 +3936,7 @@ files = [
 name = "ruff"
 version = "0.9.2"
 description = "An extremely fast Python linter and code formatter, written in Rust."
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3822,6 +3964,7 @@ files = [
 name = "scipy"
 version = "1.13.1"
 description = "Fundamental algorithms for scientific computing in Python"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -3864,6 +4007,7 @@ test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "po
 name = "scipy"
 version = "1.15.1"
 description = "Fundamental algorithms for scientific computing in Python"
+category = "main"
 optional = false
 python-versions = ">=3.10"
 files = [
@@ -3921,6 +4065,7 @@ test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis
 name = "screeninfo"
 version = "0.7"
 description = "Fetch location and size of physical screens."
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3935,6 +4080,7 @@ pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""}
 name = "send2trash"
 version = "1.8.3"
 description = "Send file to trash natively under Mac OS X, Windows and Linux"
+category = "main"
 optional = true
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
 files = [
@@ -3951,6 +4097,7 @@ win32 = ["pywin32"]
 name = "setuptools"
 version = "75.8.0"
 description = "Easily download, build, install, upgrade, and uninstall Python packages"
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -3965,12 +4112,13 @@ cover = ["pytest-cov"]
 doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
 enabler = ["pytest-enabler (>=2.2)"]
 test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
-type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"]
+type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.14.0,<1.15.0)", "pytest-mypy"]
 
 [[package]]
 name = "six"
 version = "1.17.0"
 description = "Python 2 and 3 compatibility utilities"
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
 files = [
@@ -3982,6 +4130,7 @@ files = [
 name = "skia-pathops"
 version = "0.8.0.post2"
 description = "Python access to operations on paths using the Skia library"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4040,6 +4189,7 @@ testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"]
 name = "smmap"
 version = "5.0.2"
 description = "A pure Python implementation of a sliding window memory map manager"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -4051,6 +4201,7 @@ files = [
 name = "sniffio"
 version = "1.3.1"
 description = "Sniff out which async library your code is running under"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -4062,6 +4213,7 @@ files = [
 name = "snowballstemmer"
 version = "2.2.0"
 description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
+category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -4073,6 +4225,7 @@ files = [
 name = "soupsieve"
 version = "2.6"
 description = "A modern CSS selector implementation for Beautiful Soup."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4084,6 +4237,7 @@ files = [
 name = "sphinx"
 version = "7.4.7"
 description = "Python documentation generator"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4120,6 +4274,7 @@ test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools
 name = "sphinx-basic-ng"
 version = "1.0.0b2"
 description = "A modern skeleton for Sphinx themes."
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -4137,6 +4292,7 @@ docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-ta
 name = "sphinx-copybutton"
 version = "0.5.2"
 description = "Add a copy button to each of your code cells."
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -4155,6 +4311,7 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"]
 name = "sphinx-design"
 version = "0.6.1"
 description = "A sphinx extension for designing beautiful, view size responsive web components."
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4180,6 +4337,7 @@ theme-sbt = ["sphinx-book-theme (>=1.1,<2.0)"]
 name = "sphinx-reredirects"
 version = "0.1.5"
 description = "Handles redirects for moved pages in Sphinx documentation projects"
+category = "dev"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -4194,6 +4352,7 @@ sphinx = ">=7.1"
 name = "sphinxcontrib-applehelp"
 version = "2.0.0"
 description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4210,6 +4369,7 @@ test = ["pytest"]
 name = "sphinxcontrib-devhelp"
 version = "2.0.0"
 description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4226,6 +4386,7 @@ test = ["pytest"]
 name = "sphinxcontrib-htmlhelp"
 version = "2.1.0"
 description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4242,6 +4403,7 @@ test = ["html5lib", "pytest"]
 name = "sphinxcontrib-jsmath"
 version = "1.0.1"
 description = "A sphinx extension which renders display math in HTML via JavaScript"
+category = "dev"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -4256,6 +4418,7 @@ test = ["flake8", "mypy", "pytest"]
 name = "sphinxcontrib-programoutput"
 version = "0.17"
 description = "Sphinx extension to include program output"
+category = "dev"
 optional = false
 python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
 files = [
@@ -4270,6 +4433,7 @@ Sphinx = ">=1.7.0"
 name = "sphinxcontrib-qthelp"
 version = "2.0.0"
 description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4286,6 +4450,7 @@ test = ["defusedxml (>=0.7.1)", "pytest"]
 name = "sphinxcontrib-serializinghtml"
 version = "2.0.0"
 description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)"
+category = "dev"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4302,6 +4467,7 @@ test = ["pytest"]
 name = "sphinxext-opengraph"
 version = "0.9.1"
 description = "Sphinx Extension to enable OGP support"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4316,6 +4482,7 @@ sphinx = ">=4.0"
 name = "srt"
 version = "3.5.3"
 description = "A tiny library for parsing, modifying, and composing SRT files."
+category = "main"
 optional = false
 python-versions = ">=2.7"
 files = [
@@ -4326,6 +4493,7 @@ files = [
 name = "stack-data"
 version = "0.6.3"
 description = "Extract data from python stack frames and tracebacks for informative displays"
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -4345,6 +4513,7 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
 name = "svgelements"
 version = "1.9.6"
 description = "Svg Elements Parsing"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -4356,6 +4525,7 @@ files = [
 name = "terminado"
 version = "0.18.1"
 description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -4377,6 +4547,7 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"]
 name = "tinycss2"
 version = "1.4.0"
 description = "A tiny CSS parser"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -4395,6 +4566,7 @@ test = ["pytest", "ruff"]
 name = "tomli"
 version = "2.2.1"
 description = "A lil' TOML parser"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4436,6 +4608,7 @@ files = [
 name = "tornado"
 version = "6.4.2"
 description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -4456,6 +4629,7 @@ files = [
 name = "tqdm"
 version = "4.67.1"
 description = "Fast, Extensible Progress Meter"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -4477,6 +4651,7 @@ telegram = ["requests"]
 name = "traitlets"
 version = "5.14.3"
 description = "Traitlets Python configuration system"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -4492,6 +4667,7 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,
 name = "types-decorator"
 version = "0.1.7"
 description = "Typing stubs for decorator"
+category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -4503,6 +4679,7 @@ files = [
 name = "types-docutils"
 version = "0.21.0.20241128"
 description = "Typing stubs for docutils"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4514,6 +4691,7 @@ files = [
 name = "types-pillow"
 version = "10.2.0.20240822"
 description = "Typing stubs for Pillow"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4525,6 +4703,7 @@ files = [
 name = "types-pygments"
 version = "2.19.0.20250107"
 description = "Typing stubs for Pygments"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4540,6 +4719,7 @@ types-setuptools = "*"
 name = "types-python-dateutil"
 version = "2.9.0.20241206"
 description = "Typing stubs for python-dateutil"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -4551,6 +4731,7 @@ files = [
 name = "types-setuptools"
 version = "75.8.0.20250110"
 description = "Typing stubs for setuptools"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4562,6 +4743,7 @@ files = [
 name = "typing-extensions"
 version = "4.12.2"
 description = "Backported and Experimental Type Hints for Python 3.8+"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4573,6 +4755,7 @@ files = [
 name = "uri-template"
 version = "1.3.0"
 description = "RFC 6570 URI Template Processor"
+category = "main"
 optional = true
 python-versions = ">=3.7"
 files = [
@@ -4587,6 +4770,7 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake
 name = "urllib3"
 version = "2.3.0"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4604,6 +4788,7 @@ zstd = ["zstandard (>=0.18.0)"]
 name = "virtualenv"
 version = "20.29.1"
 description = "Virtual Python Environment builder"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4624,6 +4809,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess
 name = "watchdog"
 version = "6.0.0"
 description = "Filesystem events monitoring"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -4666,6 +4852,7 @@ watchmedo = ["PyYAML (>=3.10)"]
 name = "wcwidth"
 version = "0.2.13"
 description = "Measures the displayed width of unicode strings in a terminal"
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -4677,6 +4864,7 @@ files = [
 name = "webcolors"
 version = "24.11.1"
 description = "A library for working with the color formats defined by HTML and CSS."
+category = "main"
 optional = true
 python-versions = ">=3.9"
 files = [
@@ -4688,6 +4876,7 @@ files = [
 name = "webencodings"
 version = "0.5.1"
 description = "Character encoding aliases for legacy web content"
+category = "main"
 optional = true
 python-versions = "*"
 files = [
@@ -4699,6 +4888,7 @@ files = [
 name = "websocket-client"
 version = "1.8.0"
 description = "WebSocket client for Python with low level API options"
+category = "main"
 optional = true
 python-versions = ">=3.8"
 files = [
@@ -4715,6 +4905,7 @@ test = ["websockets"]
 name = "wrapt"
 version = "1.17.2"
 description = "Module for decorators, wrappers and monkey patching."
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -4803,6 +4994,7 @@ files = [
 name = "zipp"
 version = "3.21.0"
 description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
diff --git a/pyproject.toml b/pyproject.toml
index da095bbc0a..9b2360f236 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "manim"
-version = "0.18.1"
+version = "0.19.0"
 description = "Animation engine for explanatory math videos."
 authors = ["The Manim Community Developers <contact@manim.community>", "3b1b <grant@3blue1brown.com>"]
 license="MIT"