Merge branch 'main' into reorganize

This commit is contained in:
Jérome Eertmans
2025-04-18 14:17:07 +02:00
13 changed files with 212 additions and 135 deletions

View File

@ -96,7 +96,7 @@ jobs:
uses: ssciwr/setup-mesa-dist-win@v2
- name: Run pytest
run: uv run --python ${{ matrix.pyversion }} --frozen --extra tests pytest
run: uv run --python ${{ matrix.pyversion }} --frozen --group tests --no-dev pytest
- name: Upload to codecov.io
uses: codecov/codecov-action@v5

View File

@ -21,18 +21,18 @@ repos:
exclude: poetry.lock
args: [--autofix, --trailing-commas]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.9.3
rev: v0.11.5
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.14.1
rev: v1.15.0
hooks:
- id: mypy
additional_dependencies: [types-requests, types-setuptools]
- repo: https://github.com/codespell-project/codespell
rev: v2.4.0
rev: v2.4.1
hooks:
- id: codespell
additional_dependencies:

View File

@ -6,13 +6,13 @@ build:
apt_packages:
- libpango1.0-dev
- ffmpeg
jobs:
post_create_environment:
- asdf plugin add uv
- asdf install uv latest
- asdf global uv latest
- UV_PROJECT_ENVIRONMENT=$READTHEDOCS_VIRTUALENV_PATH uv sync --group docs --no-dev --no-cache
sphinx:
builder: html
configuration: docs/source/conf.py
fail_on_warning: true
python:
install:
- method: pip
path: .
extra_requirements:
- docs

View File

@ -8,9 +8,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
<!-- start changelog -->
(unreleased)=
## [Unreleased](https://github.com/jeertmans/manim-slides/compare/v5.4.2...HEAD)
## [Unreleased](https://github.com/jeertmans/manim-slides/compare/v5.5.1...HEAD)
(unreleased-added)=
(unreleased-chore)=
### Chore
- Moved `docs` and `tests` extras, as well as `dev-dependencies`,
inside groups in `dependency-groups`. This could break existing code
when using one of those extras, but as they were not part of the public API,
we do not consider this to be a **breaking change**.
[#542](https://github.com/jeertmans/manim-slides/pull/542)
(v5.5.1)=
## [v5.5.1](https://github.com/jeertmans/manim-slides/compare/v5.5.0...v5.5.1)
(v5.5.1-changed)=
### Changed
- HTML template now always includes the *notes* plugin so that the speaker
view is always available. Previously, it was only included if the slides
had notes.
[#538](https://github.com/jeertmans/manim-slides/pull/538)
- Pressing <kbd>SPACE</kbd> key now pauses the slides, instead of skipping it.
Previously, it was not possible to pause HTML slides, which can be very annoying
when trying to explain something.
[#539](https://github.com/jeertmans/manim-slides/pull/539)
(v5.5.0)=
## [v5.5.0](https://github.com/jeertmans/manim-slides/compare/v5.4.2...v5.5.0)
(v5.5.0-added)=
### Added
- Added `max_duration_before_split_reverse` and `num_processes` class variables.
@ -19,18 +46,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
videos as slides.
[#526](https://github.com/jeertmans/manim-slides/pull/526)
(unreleased-changed)=
(v5.5.0-changed)=
### Changed
- Automatically split large video animations into smaller chunks
for lightweight (and potentially faster) reversed animations generation.
[#439](https://github.com/jeertmans/manim-slides/pull/439)
(unreleased-chore)=
(v5.5.0-chore)=
### Chore
- Trimmed whitespaces in HTML template.
[#443](https://github.com/jeertmans/manim-slides/pull/443)
- Bumped RevealJS' version to 5.2 to allow video playing in speaker view.
[#536](https://github.com/jeertmans/manim-slides/pull/536)
(v5.4.2)=
## [v5.4.2](https://github.com/jeertmans/manim-slides/compare/v5.4.1...v5.4.2)

View File

@ -4,13 +4,14 @@
cff-version: 1.2.0
title: Manim Slides
message: >-
If you use this software, please cite it using the
metadata from this file.
If you use this software, please cite it using our article
in the Journal of Open Source Education.
type: software
authors:
- name: Jérome Eertmans
orcid: 'https://orcid.org/0000-0002-5579-5360'
website: 'https://eertmans.be'
doi: 10.5281/zenodo.7971360
repository-code: 'https://github.com/jeertmans/manim-slides'
url: 'https://eertmans.be/manim-slides'
abstract: >-
@ -26,7 +27,7 @@ keywords:
- PowerPoint
- Python
license: MIT
version: v5.4.2
version: v5.5.1
preferred-citation:
publisher:
name: The Open Journal

View File

@ -1,9 +1,3 @@
> [!IMPORTANT]
> Take the [**Manim Slides Survey**](https://forms.gle/i4scrwPQghbTQwQs5)
> to help improve this tool! Thanks in advance to all the people taking the time
> to answer this short survey! The form is open until **January 31st 2025**,
> and results will be communicated in the GitHub discussions.
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jeertmans/manim-slides/main/static/logo_dark_transparent.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/jeertmans/manim-slides/main/static/logo_light_transparent.png">
@ -234,8 +228,8 @@ you can do so at: [jeertmans@icloud.com](mailto:jeertmans@icloud.com).
[pypi-download-badge]: https://img.shields.io/pypi/dm/manim-slides
[documentation-badge]: https://readthedocs.org/projects/manim-slides/badge/?version=latest
[documentation-url]: https://manim-slides.readthedocs.io/
[doi-badge]: https://zenodo.org/badge/DOI/10.5281/zenodo.8215167.svg
[doi-url]: https://doi.org/10.5281/zenodo.8215167
[doi-badge]: https://zenodo.org/badge/DOI/10.5281/zenodo.7971360.svg
[doi-url]: https://doi.org/10.5281/zenodo.7971360
[jose-badge]: https://jose.theoj.org/papers/10.21105/jose.00206/status.svg
[jose-url]: https://doi.org/10.21105/jose.00206
[codecov-badge]: https://codecov.io/gh/jeertmans/manim-slides/branch/main/graph/badge.svg?token=8P4DY9JCE4

View File

@ -4,6 +4,7 @@
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
import os
import sys
from datetime import date
@ -55,6 +56,7 @@ add_module_names = False
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "/")
html_theme = "furo"
html_static_path = ["_static"]
html_favicon = "_static/favicon.png"

View File

@ -32,7 +32,7 @@ and development dependencies. If not already, please install this tool.
With uv, installation becomes straightforward:
```bash
uv sync --all-extras
uv sync
```
:::{note}

View File

@ -10,20 +10,22 @@ The following summarizes the different presentation features Manim Slides offers
| :--- | :---: | :---: | :---: | :---: |
| Basic navigation through slides | Yes | Yes | Yes | Yes (static image) |
| Replay slide | Yes | No | No | N/A |
| Pause animation | Yes | No | No | N/A |
| Pause animation | Yes | Yes | No | N/A |
| Play slide in reverse | Yes | No | No | N/A |
| Slide count | Yes | Yes (optional) | Yes (optional) | N/A |
| Needs Python with Manim Slides installed | Yes | No | No | No
| Requires internet access | No | Yes | No | No |
| Requires internet access | No | Depends[^1] | No | No |
| Auto. play slides | Yes | Yes | Yes | N/A |
| Loops support | Yes | Yes | Yes | N/A |
| Fully customizable | No | Yes (`--use-template` option) | No | No |
| Other dependencies | None | A modern web browser | PowerPoint or LibreOffice Impress[^1] | None |
| Works cross-platforms | Yes | Yes | Partly[^1][^2] | Yes |
| Other dependencies | None | A modern web browser | PowerPoint or LibreOffice Impress[^2] | None |
| Works cross-platforms | Yes | Yes | Partly[^2][^3] | Yes |
:::
[^1]: If you encounter a problem where slides do not automatically play or loops do not work,
[^1]: By default, HTML assets are loaded from the internet, but they can be
pre-downloaded and embedded in the HTML file at conversion time.
[^2]: If you encounter a problem where slides do not automatically play or loops do not work,
please
[file an issue on GitHub](https://github.com/jeertmans/manim-slides/issues/new/choose).
[^2]: PowerPoint online does not seem to support automatic playing of videos,
[^3]: PowerPoint online does not seem to support automatic playing of videos,
so you need LibreOffice Impress on Linux platforms.

View File

@ -536,7 +536,7 @@ class RevealJS(Converter):
"black",
description="Background color used in slides, not relevant if videos fill the whole area.",
)
reveal_version: str = Field("5.1.0", description="RevealJS version.")
reveal_version: str = Field("5.2.0", description="RevealJS version.")
reveal_theme: RevealTheme = Field(
RevealTheme.black, description="RevealJS version."
)

View File

@ -50,11 +50,11 @@
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/reveal.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/plugin/notes/notes.min.js"></script>
<!-- To include plugins, see: https://revealjs.com/plugins/ -->
{% if has_notes %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/plugin/markdown/markdown.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/plugin/notes/notes.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/plugin/markdown/markdown.min.js"></script>
{% endif %}
<!-- <script src="index.js"></script> -->
@ -262,6 +262,23 @@
// Time before the cursor is hidden (in ms)
hideCursorTime: {{ hide_cursor_time }}
});
// Override SPACE to play / pause the video
Reveal.addKeyBinding(
{
keyCode: 32,
key: 'SPACE',
description: 'Play / pause video'
},
() => {
var currentVideos = Reveal.getCurrentSlide().slideBackgroundContentElement.getElementsByTagName("video");
if (currentVideos.length > 0) {
if (currentVideos[0].paused == true) currentVideos[0].play();
else currentVideos[0].pause();
} else {
Reveal.next();
}
}
);
{% if one_file %}
// Fix found by @t-fritsch and @Rapsssito on GitHub
// see: https://github.com/hakimel/reveal.js/discussions/3362#discussioncomment-11733074.

View File

@ -2,6 +2,39 @@
build-backend = "hatchling.build"
requires = ["hatchling", "hatch-fancy-pypi-readme"]
[dependency-groups]
dev = [
{include-group = "docs"},
{include-group = "tests"},
"bump-my-version>=0.20.3",
"pre-commit>=3.5.0",
]
docs = [
"manim-slides[magic,manim,pyqt6,sphinx-directive]",
"furo>=2023.5.20",
"ipykernel>=6.25.1",
"myst-parser>=2.0.0",
"nbsphinx>=0.9.2",
"pandoc>=2.3",
"pygments<2.19", # See: https://github.com/ManimCommunity/manim/issues/4104
"sphinx>=7.0.1",
"sphinxcontrib-programoutput>=0.18",
"sphinx-design>=0.6.1",
"sphinx-click>=4.4.0",
"sphinx-copybutton>=0.5.1",
"sphinxext-opengraph>=0.7.5",
]
tests = [
"importlib-metadata>=8.6.1;python_version<'3.10'",
"manim-slides[full,manimgl,pyqt6,pyside6,sphinx-directive]",
"pytest>=7.4.0",
"pytest-cov>=4.1.0",
"pytest-env>=0.8.2",
"pytest-missing-modules>=0.1.0",
"pytest-qt>=4.2.0",
"setuptools>=73.0.1",
]
[project]
authors = [{name = "Jérome Eertmans", email = "jeertmans@icloud.com"}]
classifiers = [
@ -42,21 +75,6 @@ name = "manim-slides"
requires-python = ">=3.9"
[project.optional-dependencies]
docs = [
"manim-slides[magic,manim,pyqt6,sphinx-directive]",
"furo>=2023.5.20",
"ipykernel>=6.25.1",
"myst-parser>=2.0.0",
"nbsphinx>=0.9.2",
"pandoc>=2.3",
"pygments<2.19", # See: https://github.com/ManimCommunity/manim/issues/4104
"sphinx>=7.0.1",
"sphinxcontrib-programoutput>=0.18",
"sphinx-design>=0.6.1",
"sphinx-click>=4.4.0",
"sphinx-copybutton>=0.5.1",
"sphinxext-opengraph>=0.7.5",
]
full = [
"manim-slides[magic,manim,sphinx-directive]",
]
@ -68,15 +86,6 @@ pyqt6-full = ["manim-slides[full,pyqt6]"]
pyside6 = ["pyside6>=6.6.1,!=6.8.1.1"]
pyside6-full = ["manim-slides[full,pyside6]"]
sphinx-directive = ["docutils>=0.20.1", "manim-slides[manim]"]
tests = [
"importlib-metadata>=8.6.1;python_version<'3.10'",
"manim-slides[full,manimgl,pyqt6,pyside6,sphinx-directive]",
"pytest>=7.4.0",
"pytest-cov>=4.1.0",
"pytest-env>=0.8.2",
"pytest-missing-modules>=0.1.0",
"pytest-qt>=4.2.0",
]
[project.scripts]
manim-slides = "manim_slides.cli.commands:main"
@ -92,7 +101,7 @@ Repository = "https://github.com/jeertmans/manim-slides"
allow_dirty = false
commit = true
commit_args = ""
current_version = "5.4.2"
current_version = "5.5.1"
ignore_missing_version = false
message = "chore(deps): bump version from {current_version} to {new_version}"
parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(-rc(?P<release>\d+))?'
@ -224,10 +233,3 @@ isort = {known-first-party = ["manim_slides", "tests"]}
[tool.ruff.lint.per-file-ignores]
"docs/source/reference/magic_example.ipynb" = ["F403", "F405"]
"tests/test_slide.py" = ["N801"]
[tool.uv]
dev-dependencies = [
"bump-my-version>=0.20.3",
"pre-commit>=3.5.0",
"setuptools>=73.0.1",
]

166
uv.lock generated
View File

@ -1,4 +1,5 @@
version = 1
revision = 1
requires-python = ">=3.9"
resolution-markers = [
"python_full_version >= '3.10' and python_full_version < '3.13'",
@ -407,7 +408,7 @@ name = "click"
version = "8.1.8"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "platform_system == 'Windows'" },
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
wheels = [
@ -976,7 +977,7 @@ name = "importlib-metadata"
version = "8.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "zipp" },
{ name = "zipp", marker = "python_full_version < '3.10'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/33/08/c1395a292bb23fd03bdf572a1357c5a733d3eecbab877641ceacab23db6e/importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580", size = 55767 }
wheels = [
@ -1009,7 +1010,7 @@ name = "ipykernel"
version = "6.29.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "appnope", marker = "platform_system == 'Darwin'" },
{ name = "appnope", marker = "sys_platform == 'darwin'" },
{ name = "comm" },
{ name = "debugpy" },
{ name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
@ -1526,7 +1527,6 @@ wheels = [
[[package]]
name = "manim-slides"
version = "5.4.2"
source = { editable = "." }
dependencies = [
{ name = "av" },
@ -1549,27 +1549,6 @@ dependencies = [
]
[package.optional-dependencies]
docs = [
{ name = "docutils" },
{ name = "furo" },
{ name = "ipykernel" },
{ name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "manim" },
{ name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "nbsphinx" },
{ name = "pandoc" },
{ name = "pygments" },
{ name = "pyqt6" },
{ name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "sphinx-click" },
{ name = "sphinx-copybutton" },
{ name = "sphinx-design" },
{ name = "sphinxcontrib-programoutput" },
{ name = "sphinxext-opengraph" },
]
full = [
{ name = "docutils" },
{ name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
@ -1611,26 +1590,59 @@ sphinx-directive = [
{ name = "docutils" },
{ name = "manim" },
]
tests = [
{ name = "docutils" },
[package.dev-dependencies]
dev = [
{ name = "bump-my-version" },
{ name = "furo" },
{ name = "importlib-metadata", marker = "python_full_version < '3.10'" },
{ name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "manim" },
{ name = "manimgl" },
{ name = "pyqt6" },
{ name = "pyside6" },
{ name = "ipykernel" },
{ name = "manim-slides", extra = ["full", "magic", "manim", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] },
{ name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "nbsphinx" },
{ name = "pandoc" },
{ name = "pre-commit" },
{ name = "pygments" },
{ name = "pytest" },
{ name = "pytest-cov" },
{ name = "pytest-env" },
{ name = "pytest-missing-modules" },
{ name = "pytest-qt" },
{ name = "setuptools" },
{ name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "sphinx-click" },
{ name = "sphinx-copybutton" },
{ name = "sphinx-design" },
{ name = "sphinxcontrib-programoutput" },
{ name = "sphinxext-opengraph" },
]
[package.dev-dependencies]
dev = [
{ name = "bump-my-version" },
{ name = "pre-commit" },
docs = [
{ name = "furo" },
{ name = "ipykernel" },
{ name = "manim-slides", extra = ["magic", "manim", "pyqt6", "sphinx-directive"] },
{ name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "nbsphinx" },
{ name = "pandoc" },
{ name = "pygments" },
{ name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "sphinx-click" },
{ name = "sphinx-copybutton" },
{ name = "sphinx-design" },
{ name = "sphinxcontrib-programoutput" },
{ name = "sphinxext-opengraph" },
]
tests = [
{ name = "importlib-metadata", marker = "python_full_version < '3.10'" },
{ name = "manim-slides", extra = ["full", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] },
{ name = "pytest" },
{ name = "pytest-cov" },
{ name = "pytest-env" },
{ name = "pytest-missing-modules" },
{ name = "pytest-qt" },
{ name = "setuptools" },
]
@ -1640,71 +1652,89 @@ requires-dist = [
{ name = "beautifulsoup4", specifier = ">=4.12.3" },
{ name = "click", specifier = ">=8.1.3" },
{ name = "click-default-group", specifier = ">=1.2.2" },
{ name = "docutils", marker = "extra == 'docs'", specifier = ">=0.20.1" },
{ name = "docutils", marker = "extra == 'full'", specifier = ">=0.20.1" },
{ name = "docutils", marker = "extra == 'pyqt6-full'", specifier = ">=0.20.1" },
{ name = "docutils", marker = "extra == 'pyside6-full'", specifier = ">=0.20.1" },
{ name = "docutils", marker = "extra == 'sphinx-directive'", specifier = ">=0.20.1" },
{ name = "docutils", marker = "extra == 'tests'", specifier = ">=0.20.1" },
{ name = "furo", marker = "extra == 'docs'", specifier = ">=2023.5.20" },
{ name = "importlib-metadata", marker = "python_full_version < '3.10' and extra == 'tests'", specifier = ">=8.6.1" },
{ name = "ipykernel", marker = "extra == 'docs'", specifier = ">=6.25.1" },
{ name = "ipython", marker = "extra == 'docs'", specifier = ">=8.12.2" },
{ name = "ipython", marker = "extra == 'full'", specifier = ">=8.12.2" },
{ name = "ipython", marker = "extra == 'magic'", specifier = ">=8.12.2" },
{ name = "ipython", marker = "extra == 'pyqt6-full'", specifier = ">=8.12.2" },
{ name = "ipython", marker = "extra == 'pyside6-full'", specifier = ">=8.12.2" },
{ name = "ipython", marker = "extra == 'tests'", specifier = ">=8.12.2" },
{ name = "jinja2", specifier = ">=3.1.2" },
{ name = "lxml", specifier = ">=4.9.2" },
{ name = "manim", marker = "extra == 'docs'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'full'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'magic'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'manim'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'pyqt6-full'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'pyside6-full'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'sphinx-directive'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'tests'", specifier = ">=0.19" },
{ name = "manimgl", marker = "extra == 'manimgl'", specifier = ">=1.7.2" },
{ name = "manimgl", marker = "extra == 'tests'", specifier = ">=1.7.2" },
{ name = "myst-parser", marker = "extra == 'docs'", specifier = ">=2.0.0" },
{ name = "nbsphinx", marker = "extra == 'docs'", specifier = ">=0.9.2" },
{ name = "numpy", specifier = ">=1.19" },
{ name = "pandoc", marker = "extra == 'docs'", specifier = ">=2.3" },
{ name = "pillow", specifier = ">=9.5.0" },
{ name = "pydantic", specifier = ">=2.0.1" },
{ name = "pydantic-extra-types", specifier = ">=2.0.0" },
{ name = "pygments", marker = "extra == 'docs'", specifier = "<2.19" },
{ name = "pyqt6", marker = "extra == 'docs'", specifier = ">=6.7.0" },
{ name = "pyqt6", marker = "extra == 'pyqt6'", specifier = ">=6.7.0" },
{ name = "pyqt6", marker = "extra == 'pyqt6-full'", specifier = ">=6.7.0" },
{ name = "pyqt6", marker = "extra == 'tests'", specifier = ">=6.7.0" },
{ name = "pyside6", marker = "extra == 'pyside6'", specifier = ">=6.6.1,!=6.8.1.1" },
{ name = "pyside6", marker = "extra == 'pyside6-full'", specifier = ">=6.6.1,!=6.8.1.1" },
{ name = "pyside6", marker = "extra == 'tests'", specifier = ">=6.6.1,!=6.8.1.1" },
{ name = "pytest", marker = "extra == 'tests'", specifier = ">=7.4.0" },
{ name = "pytest-cov", marker = "extra == 'tests'", specifier = ">=4.1.0" },
{ name = "pytest-env", marker = "extra == 'tests'", specifier = ">=0.8.2" },
{ name = "pytest-missing-modules", marker = "extra == 'tests'", specifier = ">=0.1.0" },
{ name = "pytest-qt", marker = "extra == 'tests'", specifier = ">=4.2.0" },
{ name = "python-pptx", specifier = ">=0.6.21" },
{ name = "qtpy", specifier = ">=2.4.1" },
{ name = "requests", specifier = ">=2.28.1" },
{ name = "rich", specifier = ">=13.3.2" },
{ name = "rtoml", specifier = ">=0.11.0" },
{ name = "sphinx", marker = "extra == 'docs'", specifier = ">=7.0.1" },
{ name = "sphinx-click", marker = "extra == 'docs'", specifier = ">=4.4.0" },
{ name = "sphinx-copybutton", marker = "extra == 'docs'", specifier = ">=0.5.1" },
{ name = "sphinx-design", marker = "extra == 'docs'", specifier = ">=0.6.1" },
{ name = "sphinxcontrib-programoutput", marker = "extra == 'docs'", specifier = ">=0.18" },
{ name = "sphinxext-opengraph", marker = "extra == 'docs'", specifier = ">=0.7.5" },
{ name = "tqdm", specifier = ">=4.64.1" },
]
provides-extras = ["full", "magic", "manim", "manimgl", "pyqt6", "pyqt6-full", "pyside6", "pyside6-full", "sphinx-directive"]
[package.metadata.requires-dev]
dev = [
{ name = "bump-my-version", specifier = ">=0.20.3" },
{ name = "furo", specifier = ">=2023.5.20" },
{ name = "importlib-metadata", marker = "python_full_version < '3.10'", specifier = ">=8.6.1" },
{ name = "ipykernel", specifier = ">=6.25.1" },
{ name = "manim-slides", extras = ["full", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] },
{ name = "manim-slides", extras = ["magic", "manim", "pyqt6", "sphinx-directive"] },
{ name = "myst-parser", specifier = ">=2.0.0" },
{ name = "nbsphinx", specifier = ">=0.9.2" },
{ name = "pandoc", specifier = ">=2.3" },
{ name = "pre-commit", specifier = ">=3.5.0" },
{ name = "pygments", specifier = "<2.19" },
{ name = "pytest", specifier = ">=7.4.0" },
{ name = "pytest-cov", specifier = ">=4.1.0" },
{ name = "pytest-env", specifier = ">=0.8.2" },
{ name = "pytest-missing-modules", specifier = ">=0.1.0" },
{ name = "pytest-qt", specifier = ">=4.2.0" },
{ name = "setuptools", specifier = ">=73.0.1" },
{ name = "sphinx", specifier = ">=7.0.1" },
{ name = "sphinx-click", specifier = ">=4.4.0" },
{ name = "sphinx-copybutton", specifier = ">=0.5.1" },
{ name = "sphinx-design", specifier = ">=0.6.1" },
{ name = "sphinxcontrib-programoutput", specifier = ">=0.18" },
{ name = "sphinxext-opengraph", specifier = ">=0.7.5" },
]
docs = [
{ name = "furo", specifier = ">=2023.5.20" },
{ name = "ipykernel", specifier = ">=6.25.1" },
{ name = "manim-slides", extras = ["magic", "manim", "pyqt6", "sphinx-directive"] },
{ name = "myst-parser", specifier = ">=2.0.0" },
{ name = "nbsphinx", specifier = ">=0.9.2" },
{ name = "pandoc", specifier = ">=2.3" },
{ name = "pygments", specifier = "<2.19" },
{ name = "sphinx", specifier = ">=7.0.1" },
{ name = "sphinx-click", specifier = ">=4.4.0" },
{ name = "sphinx-copybutton", specifier = ">=0.5.1" },
{ name = "sphinx-design", specifier = ">=0.6.1" },
{ name = "sphinxcontrib-programoutput", specifier = ">=0.18" },
{ name = "sphinxext-opengraph", specifier = ">=0.7.5" },
]
tests = [
{ name = "importlib-metadata", marker = "python_full_version < '3.10'", specifier = ">=8.6.1" },
{ name = "manim-slides", extras = ["full", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] },
{ name = "pytest", specifier = ">=7.4.0" },
{ name = "pytest-cov", specifier = ">=4.1.0" },
{ name = "pytest-env", specifier = ">=0.8.2" },
{ name = "pytest-missing-modules", specifier = ">=0.1.0" },
{ name = "pytest-qt", specifier = ">=4.2.0" },
{ name = "setuptools", specifier = ">=73.0.1" },
]
@ -2579,7 +2609,7 @@ name = "plumbum"
version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pywin32", marker = "platform_python_implementation != 'PyPy' and platform_system == 'Windows'" },
{ name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f0/5d/49ba324ad4ae5b1a4caefafbce7a1648540129344481f2ed4ef6bb68d451/plumbum-1.9.0.tar.gz", hash = "sha256:e640062b72642c3873bd5bdc3effed75ba4d3c70ef6b6a7b907357a84d909219", size = 319083 }
wheels = [
@ -4150,7 +4180,7 @@ name = "tqdm"
version = "4.67.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "platform_system == 'Windows'" },
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 }
wheels = [