diff --git a/CHANGELOG.md b/CHANGELOG.md index f883eb8a..56755fff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#429](https://github.com/jeertmans/manim-slides/pull/429) - Fixed whitespace issue in default RevealJS template. [#442](https://github.com/jeertmans/manim-slides/pull/442) +- Fixed black screen issue on recent Qt versions and device loss detected, + thanks to [@PeculiarProgrammer](https://github.com/PeculiarProgrammer)! + [#465](https://github.com/jeertmans/manim-slides/pull/465) (unreleased-removed)= ### Removed diff --git a/docs/source/installation.md b/docs/source/installation.md index 313c4658..680a99dc 100644 --- a/docs/source/installation.md +++ b/docs/source/installation.md @@ -113,10 +113,7 @@ using optional dependencies: and does not work with ManimGL; - `manim` and `manimgl`, for installing the corresponding dependencies; -- `pyqt6` to include PyQt6 Qt bindings. Those bindings are available - on most platforms and Python version, but produce a weird black - screen between slide with `manim-slides present`, - see [#QTBUG-118501](https://bugreports.qt.io/browse/QTBUG-118501); +- `pyqt6` to include PyQt6 Qt bindings; - `pyqt6-full` to include `full` and `pyqt6`; - `pyside6` to include PySide6 Qt bindings. Those bindings are available on most platforms and Python version, except on Python 3.12[^2]; diff --git a/manim_slides/present/__init__.py b/manim_slides/present/__init__.py index f566890e..325a3e71 100644 --- a/manim_slides/present/__init__.py +++ b/manim_slides/present/__init__.py @@ -11,23 +11,6 @@ from ..config import Config, PresentationConfig from ..logger import logger -PREFERRED_QT_VERSIONS = ("6.5.1", "6.5.2") - - -def warn_if_non_desirable_pyside6_version() -> None: - from qtpy import API, QT_VERSION - - if sys.version_info < (3, 12) and ( - API != "pyside6" or QT_VERSION not in PREFERRED_QT_VERSIONS - ): - logger.warn( - f"You are using {API = }, {QT_VERSION = }, " - "but we recommend installing 'PySide6==6.5.2', mainly to avoid " - "flashing screens between slides, " - "see issue https://github.com/jeertmans/manim-slides/issues/293. " - "You can do so with `pip install 'manim-slides[pyside6]'`." - ) - @click.command() @folder_path_option @@ -302,8 +285,6 @@ def present( if start_at[1]: start_at_slide_number = start_at[1] - warn_if_non_desirable_pyside6_version() - from qtpy.QtCore import Qt from qtpy.QtGui import QScreen diff --git a/manim_slides/present/player.py b/manim_slides/present/player.py index 98028ea9..e0611a78 100644 --- a/manim_slides/present/player.py +++ b/manim_slides/present/player.py @@ -226,6 +226,8 @@ def __init__( self.icon = QIcon(":/icon.png") self.setWindowIcon(self.icon) + self.frame = QVideoFrame() + self.audio_output = QAudioOutput() self.video_widget = QVideoWidget() self.video_sink = self.video_widget.videoSink() @@ -240,18 +242,6 @@ def __init__( self.presentation_changed.connect(self.presentation_changed_callback) self.slide_changed.connect(self.slide_changed_callback) - old_frame = None - - def frame_changed(frame: QVideoFrame) -> None: - nonlocal old_frame - - if old_frame and (frame.size() != old_frame.size()): - self.video_sink.setVideoFrame(old_frame) - frame = old_frame - - self.info.video_sink.setVideoFrame(frame) - old_frame = frame - self.info = Info( full_screen=full_screen, aspect_ratio_mode=aspect_ratio_mode, @@ -259,7 +249,7 @@ def frame_changed(frame: QVideoFrame) -> None: ) self.info.close_event.connect(self.closeEvent) self.info.key_press_event.connect(self.keyPressEvent) - self.video_sink.videoFrameChanged.connect(frame_changed) + self.video_sink.videoFrameChanged.connect(self.frame_changed) self.hide_info_window = hide_info_window # Connecting key callbacks @@ -555,6 +545,34 @@ def hide_mouse(self) -> None: else: self.setCursor(Qt.BlankCursor) + def frame_changed(self, frame: QVideoFrame) -> None: + """ + Slot to handle possibly invalid frames. + + This slot cannot be decorated with ``@Slot`` as + the video sinks are handled in different threads. + + As of Qt>=6.5.3, the last frame of every video is "flushed", + resulting in a short black screen between each slide. + + To avoid this issue, we check every frame, and avoid playing + invalid ones. + + References + ---------- + 1. https://github.com/jeertmans/manim-slides/issues/293 + 2. https://github.com/jeertmans/manim-slides/pull/464 + + :param frame: The most recent frame. + + """ + if frame.isValid(): + self.frame = frame + else: + self.video_sink.setVideoFrame(self.frame) # Reuse previous frame + + self.info.video_sink.setVideoFrame(self.frame) + def closeEvent(self, event: QCloseEvent) -> None: # noqa: N802 self.close() diff --git a/pyproject.toml b/pyproject.toml index 11ccbe15..9c9013c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ full = [ magic = ["manim-slides[manim]", "ipython>=8.12.2"] manim = ["manim>=0.18.0"] manimgl = ["manimgl>=1.6.1;python_version<'3.12'"] -pyqt6 = ["pyqt6>=6.6.1"] +pyqt6 = ["pyqt6>=6.7.0"] pyqt6-full = ["manim-slides[full,pyqt6]"] pyside6 = ["pyside6>=6.6.1"] pyside6-full = ["manim-slides[full,pyside6]"] diff --git a/requirements-dev.lock b/requirements-dev.lock index 3803e098..ed8cb3ae 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -7,30 +7,31 @@ # all-features: true # with-sources: false # generate-hashes: false +# universal: false -e file:. -alabaster==0.7.16 +alabaster==1.0.0 # via sphinx -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic asttokens==2.4.1 # via stack-data -attrs==23.2.0 +attrs==24.2.0 # via jsonschema # via referencing -av==12.0.0 +av==12.3.0 # via manim-slides -babel==2.14.0 +babel==2.16.0 # via sphinx beautifulsoup4==4.12.3 # via furo # via nbconvert bleach==6.1.0 # via nbconvert -bracex==2.4 +bracex==2.5 # via wcmatch -bump-my-version==0.21.0 -certifi==2024.2.2 +bump-my-version==0.26.0 +certifi==2024.7.4 # via requests cfgv==3.4.0 # via pre-commit @@ -48,17 +49,23 @@ click-default-group==1.2.4 # via manim-slides cloup==3.0.5 # via manim +colorama==0.4.6 + # via click + # via ipython + # via pytest + # via sphinx + # via tqdm colour==0.1.5 # via manimgl comm==0.2.2 # via ipykernel contourpy==1.2.1 # via matplotlib -coverage==7.4.4 +coverage==7.6.1 # via pytest-cov cycler==0.12.1 # via matplotlib -debugpy==1.8.1 +debugpy==1.8.5 # via ipykernel decorator==5.1.1 # via ipython @@ -67,7 +74,7 @@ defusedxml==0.7.1 # via nbconvert distlib==0.3.8 # via virtualenv -docutils==0.20.1 +docutils==0.21.2 # via manim-slides # via myst-parser # via nbsphinx @@ -75,46 +82,46 @@ docutils==0.20.1 # via sphinx-click executing==2.0.1 # via stack-data -fastjsonschema==2.19.1 +fastjsonschema==2.20.0 # via nbformat -filelock==3.13.4 +filelock==3.15.4 # via virtualenv -fonttools==4.53.0 +fonttools==4.53.1 # via matplotlib -furo==2024.1.29 +furo==2024.8.6 # via manim-slides -glcontext==2.5.0 +glcontext==3.0.0 # via moderngl -identify==2.5.35 +identify==2.6.0 # via pre-commit -idna==3.7 +idna==3.8 # via requests imagesize==1.4.1 # via sphinx iniconfig==2.0.0 # via pytest -ipykernel==6.29.4 +ipykernel==6.29.5 # via manim-slides -ipython==8.18.1 +ipython==8.26.0 # via ipykernel # via manim-slides # via manimgl -isosurfaces==0.1.0 +isosurfaces==0.1.2 # via manim # via manimgl jedi==0.19.1 # via ipython -jinja2==3.1.3 +jinja2==3.1.4 # via manim-slides # via myst-parser # via nbconvert # via nbsphinx # via sphinx -jsonschema==4.21.1 +jsonschema==4.23.0 # via nbformat jsonschema-specifications==2023.12.1 # via jsonschema -jupyter-client==8.6.1 +jupyter-client==8.6.2 # via ipykernel # via nbclient jupyter-core==5.7.2 @@ -127,7 +134,7 @@ jupyterlab-pygments==0.3.0 # via nbconvert kiwisolver==1.4.5 # via matplotlib -lxml==5.2.1 +lxml==5.3.0 # via manim-slides # via python-pptx manim==0.18.1 @@ -138,7 +145,7 @@ manimpango==0.5.0 # via --override (workspace) # via manim # via manimgl -mapbox-earcut==1.0.1 +mapbox-earcut==1.0.2 # via manim # via manimgl markdown-it-py==3.0.0 @@ -148,18 +155,18 @@ markdown-it-py==3.0.0 markupsafe==2.1.5 # via jinja2 # via nbconvert -matplotlib==3.9.0 +matplotlib==3.9.2 # via manimgl matplotlib-inline==0.1.7 # via ipykernel # via ipython -mdit-py-plugins==0.4.0 +mdit-py-plugins==0.4.1 # via myst-parser mdurl==0.1.2 # via markdown-it-py mistune==3.0.2 # via nbconvert -moderngl==5.10.0 +moderngl==5.11.1 # via manim # via manimgl # via moderngl-window @@ -170,28 +177,27 @@ mpmath==1.3.0 # via sympy multipledispatch==1.0.0 # via pyrr -myst-parser==2.0.0 +myst-parser==4.0.0 # via manim-slides nbclient==0.10.0 # via nbconvert -nbconvert==7.16.3 +nbconvert==7.16.4 # via nbsphinx nbformat==5.10.4 # via nbclient # via nbconvert # via nbsphinx -nbsphinx==0.9.3 +nbsphinx==0.9.5 # via manim-slides nest-asyncio==1.6.0 # via ipykernel -networkx==2.8.8 +networkx==3.3 # via manim -nodeenv==1.8.0 +nodeenv==1.9.1 # via pre-commit numpy==1.24.0 # via --override (workspace) # via contourpy - # via ipython # via isosurfaces # via manim # via manim-slides @@ -199,70 +205,65 @@ numpy==1.24.0 # via mapbox-earcut # via matplotlib # via moderngl-window - # via networkx # via pyrr # via scipy -packaging==24.0 +packaging==24.1 # via ipykernel # via matplotlib # via nbconvert # via pytest # via qtpy # via sphinx -pandoc==2.3 +pandoc==2.4 # via manim-slides pandocfilters==1.5.1 # via nbconvert parso==0.8.4 # via jedi -pexpect==4.9.0 - # via ipython -pillow==10.3.0 +pillow==10.4.0 # via manim # via manim-slides # via manimgl # via matplotlib # via moderngl-window # via python-pptx -platformdirs==4.2.0 +platformdirs==4.2.2 # via jupyter-core # via virtualenv -pluggy==1.4.0 +pluggy==1.5.0 # via pytest # via pytest-qt -plumbum==1.8.2 +plumbum==1.8.3 # via pandoc ply==3.11 # via pandoc -pre-commit==3.7.0 -prompt-toolkit==3.0.43 +pre-commit==3.8.0 +prompt-toolkit==3.0.47 # via ipython # via questionary -psutil==5.9.8 +psutil==6.0.0 # via ipykernel -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.2 +pure-eval==0.2.3 # via stack-data -pycairo==1.26.0 +pycairo==1.26.1 # via manim -pydantic==2.7.0 +pydantic==2.8.2 # via bump-my-version # via manim-slides # via pydantic-extra-types # via pydantic-settings -pydantic-core==2.18.1 +pydantic-core==2.20.1 # via pydantic -pydantic-extra-types==2.6.0 +pydantic-extra-types==2.9.0 # via manim-slides -pydantic-settings==2.2.1 +pydantic-settings==2.4.0 # via bump-my-version pydub==0.25.1 # via manim # via manimgl -pyglet==2.0.15 +pyglet==2.0.17 # via moderngl-window -pygments==2.17.2 +pygments==2.18.0 # via furo # via ipython # via manim @@ -272,24 +273,24 @@ pygments==2.17.2 # via sphinx pyopengl==3.1.7 # via manimgl -pyparsing==3.1.2 +pyparsing==3.1.4 # via matplotlib -pyqt6==6.6.1 +pyqt6==6.7.1 # via manim-slides -pyqt6-qt6==6.6.3 +pyqt6-qt6==6.7.2 # via pyqt6 -pyqt6-sip==13.6.0 +pyqt6-sip==13.8.0 # via pyqt6 pyrr==0.10.3 # via moderngl-window -pyside6==6.5.2 +pyside6==6.7.2 # via manim-slides -pyside6-addons==6.5.2 +pyside6-addons==6.7.2 # via pyside6 -pyside6-essentials==6.5.2 +pyside6-essentials==6.7.2 # via pyside6 # via pyside6-addons -pytest==8.1.1 +pytest==8.3.2 # via manim-slides # via pytest-cov # via pytest-env @@ -305,23 +306,26 @@ python-dateutil==2.9.0.post0 # via matplotlib python-dotenv==1.0.1 # via pydantic-settings -python-pptx==0.6.23 +python-pptx==1.0.2 # via manim-slides -pyyaml==6.0.1 +pywin32==306 + # via jupyter-core + # via plumbum +pyyaml==6.0.2 # via manimgl # via myst-parser # via pre-commit -pyzmq==26.0.0 +pyzmq==26.2.0 # via ipykernel # via jupyter-client qtpy==2.4.1 # via manim-slides questionary==1.10.0 # via bump-my-version -referencing==0.34.0 +referencing==0.35.1 # via jsonschema # via jsonschema-specifications -requests==2.31.0 +requests==2.32.3 # via manim-slides # via sphinx rich==13.7.1 @@ -330,22 +334,20 @@ rich==13.7.1 # via manim-slides # via manimgl # via rich-click -rich-click==1.8.0 +rich-click==1.8.3 # via bump-my-version -rpds-py==0.18.0 +rpds-py==0.20.0 # via jsonschema # via referencing -rtoml==0.10.0 +rtoml==0.9.0 # via manim-slides -scipy==1.13.0 +scipy==1.14.1 # via manim # via manimgl screeninfo==0.8.1 # via manim # via manimgl -setuptools==69.5.1 - # via nodeenv -shiboken6==6.5.2 +shiboken6==6.7.2 # via pyside6 # via pyside6-addons # via pyside6-essentials @@ -358,9 +360,9 @@ skia-pathops==0.8.0.post1 # via manimgl snowballstemmer==2.2.0 # via sphinx -soupsieve==2.5 +soupsieve==2.6 # via beautifulsoup4 -sphinx==7.3.6 +sphinx==8.0.2 # via furo # via manim-slides # via myst-parser @@ -371,21 +373,21 @@ sphinx==7.3.6 # via sphinxext-opengraph sphinx-basic-ng==1.0.0b2 # via furo -sphinx-click==5.1.0 +sphinx-click==6.0.0 # via manim-slides sphinx-copybutton==0.5.2 # via manim-slides -sphinxcontrib-applehelp==1.0.8 +sphinxcontrib-applehelp==2.0.0 # via sphinx -sphinxcontrib-devhelp==1.0.6 +sphinxcontrib-devhelp==2.0.0 # via sphinx -sphinxcontrib-htmlhelp==2.0.5 +sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.7 +sphinxcontrib-qthelp==2.0.0 # via sphinx -sphinxcontrib-serializinghtml==1.1.10 +sphinxcontrib-serializinghtml==2.0.0 # via sphinx sphinxext-opengraph==0.9.1 # via manim-slides @@ -396,20 +398,20 @@ stack-data==0.6.3 svgelements==1.9.6 # via manim # via manimgl -sympy==1.12.1 +sympy==1.13.2 # via manimgl -tinycss2==1.2.1 +tinycss2==1.3.0 # via nbconvert -tomlkit==0.12.4 +tomlkit==0.13.2 # via bump-my-version -tornado==6.4 +tornado==6.4.1 # via ipykernel # via jupyter-client -tqdm==4.66.2 +tqdm==4.66.5 # via manim # via manim-slides # via manimgl -traitlets==5.14.2 +traitlets==5.14.3 # via comm # via ipykernel # via ipython @@ -420,20 +422,22 @@ traitlets==5.14.2 # via nbconvert # via nbformat # via nbsphinx -typing-extensions==4.11.0 +typing-extensions==4.12.2 + # via ipython # via manim # via pydantic # via pydantic-core + # via python-pptx # via rich-click -urllib3==2.2.1 +urllib3==2.2.2 # via requests -validators==0.28.3 +validators==0.33.0 # via manimgl -virtualenv==20.25.3 +virtualenv==20.26.3 # via pre-commit -watchdog==2.3.1 +watchdog==4.0.2 # via manim -wcmatch==8.5.1 +wcmatch==9.0 # via bump-my-version wcwidth==0.2.13 # via prompt-toolkit diff --git a/requirements.lock b/requirements.lock index 0689223c..cef486b2 100644 --- a/requirements.lock +++ b/requirements.lock @@ -7,27 +7,28 @@ # all-features: true # with-sources: false # generate-hashes: false +# universal: false -e file:. -alabaster==0.7.16 +alabaster==1.0.0 # via sphinx -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic asttokens==2.4.1 # via stack-data -attrs==23.2.0 +attrs==24.2.0 # via jsonschema # via referencing -av==12.0.0 +av==12.3.0 # via manim-slides -babel==2.15.0 +babel==2.16.0 # via sphinx beautifulsoup4==4.12.3 # via furo # via nbconvert bleach==6.1.0 # via nbconvert -certifi==2024.2.2 +certifi==2024.7.4 # via requests charset-normalizer==3.3.2 # via requests @@ -41,24 +42,30 @@ click-default-group==1.2.4 # via manim-slides cloup==3.0.5 # via manim +colorama==0.4.6 + # via click + # via ipython + # via pytest + # via sphinx + # via tqdm colour==0.1.5 # via manimgl comm==0.2.2 # via ipykernel contourpy==1.2.1 # via matplotlib -coverage==7.5.4 +coverage==7.6.1 # via pytest-cov cycler==0.12.1 # via matplotlib -debugpy==1.8.2 +debugpy==1.8.5 # via ipykernel decorator==5.1.1 # via ipython # via manim defusedxml==0.7.1 # via nbconvert -docutils==0.20.1 +docutils==0.21.2 # via manim-slides # via myst-parser # via nbsphinx @@ -68,36 +75,36 @@ executing==2.0.1 # via stack-data fastjsonschema==2.20.0 # via nbformat -fonttools==4.53.0 +fonttools==4.53.1 # via matplotlib -furo==2024.5.6 +furo==2024.8.6 # via manim-slides -glcontext==2.5.0 +glcontext==3.0.0 # via moderngl -idna==3.7 +idna==3.8 # via requests imagesize==1.4.1 # via sphinx iniconfig==2.0.0 # via pytest -ipykernel==6.29.4 +ipykernel==6.29.5 # via manim-slides -ipython==8.18.1 +ipython==8.26.0 # via ipykernel # via manim-slides # via manimgl -isosurfaces==0.1.0 +isosurfaces==0.1.2 # via manim # via manimgl jedi==0.19.1 # via ipython -jinja2==3.1.3 +jinja2==3.1.4 # via manim-slides # via myst-parser # via nbconvert # via nbsphinx # via sphinx -jsonschema==4.22.0 +jsonschema==4.23.0 # via nbformat jsonschema-specifications==2023.12.1 # via jsonschema @@ -114,7 +121,7 @@ jupyterlab-pygments==0.3.0 # via nbconvert kiwisolver==1.4.5 # via matplotlib -lxml==5.2.1 +lxml==5.3.0 # via manim-slides # via python-pptx manim==0.18.1 @@ -125,7 +132,7 @@ manimpango==0.5.0 # via --override (workspace) # via manim # via manimgl -mapbox-earcut==1.0.1 +mapbox-earcut==1.0.2 # via manim # via manimgl markdown-it-py==3.0.0 @@ -135,7 +142,7 @@ markdown-it-py==3.0.0 markupsafe==2.1.5 # via jinja2 # via nbconvert -matplotlib==3.9.0 +matplotlib==3.9.2 # via manimgl matplotlib-inline==0.1.7 # via ipykernel @@ -146,7 +153,7 @@ mdurl==0.1.2 # via markdown-it-py mistune==3.0.2 # via nbconvert -moderngl==5.10.0 +moderngl==5.11.1 # via manim # via manimgl # via moderngl-window @@ -157,7 +164,7 @@ mpmath==1.3.0 # via sympy multipledispatch==1.0.0 # via pyrr -myst-parser==3.0.1 +myst-parser==4.0.0 # via manim-slides nbclient==0.10.0 # via nbconvert @@ -167,16 +174,15 @@ nbformat==5.10.4 # via nbclient # via nbconvert # via nbsphinx -nbsphinx==0.9.4 +nbsphinx==0.9.5 # via manim-slides nest-asyncio==1.6.0 # via ipykernel -networkx==2.8.8 +networkx==3.3 # via manim numpy==1.24.0 # via --override (workspace) # via contourpy - # via ipython # via isosurfaces # via manim # via manim-slides @@ -184,25 +190,22 @@ numpy==1.24.0 # via mapbox-earcut # via matplotlib # via moderngl-window - # via networkx # via pyrr # via scipy -packaging==24.0 +packaging==24.1 # via ipykernel # via matplotlib # via nbconvert # via pytest # via qtpy # via sphinx -pandoc==2.3 +pandoc==2.4 # via manim-slides pandocfilters==1.5.1 # via nbconvert parso==0.8.4 # via jedi -pexpect==4.9.0 - # via ipython -pillow==10.3.0 +pillow==10.4.0 # via manim # via manim-slides # via manimgl @@ -218,29 +221,27 @@ plumbum==1.8.3 # via pandoc ply==3.11 # via pandoc -prompt-toolkit==3.0.43 +prompt-toolkit==3.0.47 # via ipython psutil==6.0.0 # via ipykernel -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.2 +pure-eval==0.2.3 # via stack-data -pycairo==1.26.0 +pycairo==1.26.1 # via manim -pydantic==2.7.0 +pydantic==2.8.2 # via manim-slides # via pydantic-extra-types -pydantic-core==2.18.1 +pydantic-core==2.20.1 # via pydantic -pydantic-extra-types==2.6.0 +pydantic-extra-types==2.9.0 # via manim-slides pydub==0.25.1 # via manim # via manimgl -pyglet==2.0.15 +pyglet==2.0.17 # via moderngl-window -pygments==2.17.2 +pygments==2.18.0 # via furo # via ipython # via manim @@ -250,24 +251,24 @@ pygments==2.17.2 # via sphinx pyopengl==3.1.7 # via manimgl -pyparsing==3.1.2 +pyparsing==3.1.4 # via matplotlib -pyqt6==6.6.1 +pyqt6==6.7.1 # via manim-slides -pyqt6-qt6==6.6.3 +pyqt6-qt6==6.7.2 # via pyqt6 -pyqt6-sip==13.6.0 +pyqt6-sip==13.8.0 # via pyqt6 pyrr==0.10.3 # via moderngl-window -pyside6==6.5.2 +pyside6==6.7.2 # via manim-slides -pyside6-addons==6.5.2 +pyside6-addons==6.7.2 # via pyside6 -pyside6-essentials==6.5.2 +pyside6-essentials==6.7.2 # via pyside6 # via pyside6-addons -pytest==8.2.2 +pytest==8.3.2 # via manim-slides # via pytest-cov # via pytest-env @@ -281,12 +282,15 @@ pytest-qt==4.4.0 python-dateutil==2.9.0.post0 # via jupyter-client # via matplotlib -python-pptx==0.6.23 +python-pptx==1.0.2 # via manim-slides -pyyaml==6.0.1 +pywin32==306 + # via jupyter-core + # via plumbum +pyyaml==6.0.2 # via manimgl # via myst-parser -pyzmq==26.0.3 +pyzmq==26.2.0 # via ipykernel # via jupyter-client qtpy==2.4.1 @@ -294,25 +298,25 @@ qtpy==2.4.1 referencing==0.35.1 # via jsonschema # via jsonschema-specifications -requests==2.31.0 +requests==2.32.3 # via manim-slides # via sphinx rich==13.7.1 # via manim # via manim-slides # via manimgl -rpds-py==0.18.1 +rpds-py==0.20.0 # via jsonschema # via referencing -rtoml==0.10.0 +rtoml==0.9.0 # via manim-slides -scipy==1.13.0 +scipy==1.14.1 # via manim # via manimgl screeninfo==0.8.1 # via manim # via manimgl -shiboken6==6.5.2 +shiboken6==6.7.2 # via pyside6 # via pyside6-addons # via pyside6-essentials @@ -325,9 +329,9 @@ skia-pathops==0.8.0.post1 # via manimgl snowballstemmer==2.2.0 # via sphinx -soupsieve==2.5 +soupsieve==2.6 # via beautifulsoup4 -sphinx==7.3.7 +sphinx==8.0.2 # via furo # via manim-slides # via myst-parser @@ -342,17 +346,17 @@ sphinx-click==6.0.0 # via manim-slides sphinx-copybutton==0.5.2 # via manim-slides -sphinxcontrib-applehelp==1.0.8 +sphinxcontrib-applehelp==2.0.0 # via sphinx -sphinxcontrib-devhelp==1.0.6 +sphinxcontrib-devhelp==2.0.0 # via sphinx -sphinxcontrib-htmlhelp==2.0.5 +sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.7 +sphinxcontrib-qthelp==2.0.0 # via sphinx -sphinxcontrib-serializinghtml==1.1.10 +sphinxcontrib-serializinghtml==2.0.0 # via sphinx sphinxext-opengraph==0.9.1 # via manim-slides @@ -363,18 +367,18 @@ stack-data==0.6.3 svgelements==1.9.6 # via manim # via manimgl -sympy==1.12.1 +sympy==1.13.2 # via manimgl tinycss2==1.3.0 # via nbconvert tornado==6.4.1 # via ipykernel # via jupyter-client -tqdm==4.66.2 +tqdm==4.66.5 # via manim # via manim-slides # via manimgl -traitlets==5.14.2 +traitlets==5.14.3 # via comm # via ipykernel # via ipython @@ -385,15 +389,17 @@ traitlets==5.14.2 # via nbconvert # via nbformat # via nbsphinx -typing-extensions==4.11.0 +typing-extensions==4.12.2 + # via ipython # via manim # via pydantic # via pydantic-core -urllib3==2.2.1 + # via python-pptx +urllib3==2.2.2 # via requests -validators==0.28.3 +validators==0.33.0 # via manimgl -watchdog==2.3.1 +watchdog==4.0.2 # via manim wcwidth==0.2.13 # via prompt-toolkit