Compare commits

...

13 Commits

Author SHA1 Message Date
b728f0864e chore(deps): pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.12.1 → v0.12.2](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.1...v0.12.2)
2025-07-07 19:03:38 +00:00
ba733eeb97 chore(docs): add example to gallery (#557)
* Add Antonio School presentation

* chore: document changes

* fix: heading

---------

Co-authored-by: Jérome Eertmans <jeertmans@icloud.com>
2025-07-02 19:11:34 +02:00
14813f7af1 chore(docs): add example to gallery (#556)
* Update gallery.md

* Update gallery.md

* Improved text

* capitalisation

* chore(fmt): auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* chore: rephrase

* chore: update changelog

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Jérome Eertmans <jeertmans@icloud.com>
2025-07-02 18:32:39 +02:00
2f62915ad6 chore(docs): remove redundant URL 2025-07-02 17:45:56 +02:00
c81e117bb8 chore(deps): pre-commit autoupdate (#555)
updates:
- [github.com/macisamuele/language-formatters-pre-commit-hooks: v2.14.0 → v2.15.0](https://github.com/macisamuele/language-formatters-pre-commit-hooks/compare/v2.14.0...v2.15.0)
- [github.com/astral-sh/ruff-pre-commit: v0.12.0 → v0.12.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.0...v0.12.1)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-07-01 16:29:37 +02:00
6255f644ab chore(deps): pre-commit autoupdate (#546)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.11.7 → v0.12.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.11.7...v0.12.0)
- [github.com/pre-commit/mirrors-mypy: v1.15.0 → v1.16.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.15.0...v1.16.1)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-06-24 12:23:08 +02:00
9e12feb275 chore(docs): add example to gallery (#552)
* Add example to gallery.

* chore(fmt): auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* chore(docs): gallery formatting.

Co-authored-by: Jérome Eertmans <jeertmans@icloud.com>

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Jérome Eertmans <jeertmans@icloud.com>
2025-06-16 13:07:17 +02:00
d2d5cc10b7 chore(docs): enhance citation guidelines in the README 2025-06-13 10:26:40 +02:00
3c6e2db7db chore(deps): pre-commit autoupdate (#543)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.11.5 → v0.11.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.11.5...v0.11.7)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-04-29 09:38:26 +02:00
04b0eb5685 feat(lib): propagate manim render exit code (#545)
* feat: propagate `manim render` exit code

* changelog

* test

* fix typo
2025-04-29 09:37:55 +02:00
0c6cd67038 chore(dev): move dev-dependencies inside dependency-groups (#542)
* chore(dev): move dev-dependencies inside dependency-groups

* fix(ci): ci was not broken
2025-04-18 14:15:30 +02:00
a5412a8df2 chore(deps): pre-commit autoupdate (#541)
* chore(deps): pre-commit autoupdate

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.11.2 → v0.11.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.11.2...v0.11.5)

* chore(fmt): auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-04-15 12:48:36 +02:00
e9480c9bc7 chore(docs): update features table 2025-04-03 11:19:06 +02:00
13 changed files with 277 additions and 127 deletions

View File

@ -96,7 +96,7 @@ jobs:
uses: ssciwr/setup-mesa-dist-win@v2 uses: ssciwr/setup-mesa-dist-win@v2
- name: Run pytest - 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 - name: Upload to codecov.io
uses: codecov/codecov-action@v5 uses: codecov/codecov-action@v5

View File

@ -13,7 +13,7 @@ repos:
- id: end-of-file-fixer - id: end-of-file-fixer
- id: trailing-whitespace - id: trailing-whitespace
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: v2.14.0 rev: v2.15.0
hooks: hooks:
- id: pretty-format-yaml - id: pretty-format-yaml
args: [--autofix] args: [--autofix]
@ -21,13 +21,13 @@ repos:
exclude: poetry.lock exclude: poetry.lock
args: [--autofix, --trailing-commas] args: [--autofix, --trailing-commas]
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.11.2 rev: v0.12.2
hooks: hooks:
- id: ruff - id: ruff
args: [--fix] args: [--fix]
- id: ruff-format - id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy - repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.15.0 rev: v1.16.1
hooks: hooks:
- id: mypy - id: mypy
additional_dependencies: [types-requests, types-setuptools] additional_dependencies: [types-requests, types-setuptools]

View File

@ -6,13 +6,13 @@ build:
apt_packages: apt_packages:
- libpango1.0-dev - libpango1.0-dev
- ffmpeg - 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: sphinx:
builder: html builder: html
configuration: docs/source/conf.py configuration: docs/source/conf.py
fail_on_warning: true fail_on_warning: true
python:
install:
- method: pip
path: .
extra_requirements:
- docs

View File

@ -10,6 +10,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
(unreleased)= (unreleased)=
## [Unreleased](https://github.com/jeertmans/manim-slides/compare/v5.5.1...HEAD) ## [Unreleased](https://github.com/jeertmans/manim-slides/compare/v5.5.1...HEAD)
(unreleased-added)=
### Added
- `manim-slides render` now exits with the same return code as the one returned by `manim render` or `manimgl`.
[@chrjabs](https://github.com/chrjabs) [#545](https://github.com/jeertmans/manim-slides/pull/545)
(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)
- Added example in the research section of the gallery.
[@mmcilree](https://github.com/mmcilree) [#552](https://github.com/jeertmans/manim-slides/pull/552)
- Added example in the school work section of the gallery.
[@casperalgera](https://github.com/casperalgera) [#556](https://github.com/jeertmans/manim-slides/pull/556)
- Added example in the school work section of the gallery.
[@amstrdm](https://github.com/amstrdm) [#557](https://github.com/jeertmans/manim-slides/pull/557)
(v5.5.1)= (v5.5.1)=
## [v5.5.1](https://github.com/jeertmans/manim-slides/compare/v5.5.0...v5.5.1) ## [v5.5.1](https://github.com/jeertmans/manim-slides/compare/v5.5.0...v5.5.1)
@ -24,7 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
Previously, it was not possible to pause HTML slides, which can be very annoying Previously, it was not possible to pause HTML slides, which can be very annoying
when trying to explain something. when trying to explain something.
[#539](https://github.com/jeertmans/manim-slides/pull/539) [#539](https://github.com/jeertmans/manim-slides/pull/539)
(v5.5.0)= (v5.5.0)=
## [v5.5.0](https://github.com/jeertmans/manim-slides/compare/v5.4.2...v5.5.0) ## [v5.5.0](https://github.com/jeertmans/manim-slides/compare/v5.4.2...v5.5.0)

View File

@ -154,21 +154,23 @@ Below is a comparison of the most used ones with Manim Slides:
## Citing ## Citing
If you use this project, please cite it using the following reference: If you use this software, please cite it using as:
```bibtex ```bibtex
@article{Jerome_Eertmans_Manim_Slides_A_2023, @article{Jerome_Eertmans_Manim_Slides_A_2023,
title = {{Manim Slides: A Python package for presenting Manim content anywhere}}, title = {{Manim Slides: A Python package for presenting Manim content anywhere}},
author = {{Jérome Eertmans}}, author = {{Jérome Eertmans}},
year = 2023, year = 2023,
month = aug, month = aug,
journal = {Journal of Open Source Education}, journal = {Journal of Open Source Education},
volume = 6, volume = 6,
doi = {10.21105/jose.00206} doi = {10.21105/jose.00206}
} }
``` ```
or by linking this GitHub repository at the end of the presentation. or by linking this GitHub repository at the end of your presentation.
Other citation formats can be obtained by clicking on the *Cite this repository* button on this page.
## Contributing ## Contributing

View File

@ -32,7 +32,7 @@ and development dependencies. If not already, please install this tool.
With uv, installation becomes straightforward: With uv, installation becomes straightforward:
```bash ```bash
uv sync --all-extras uv sync
``` ```
:::{note} :::{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) | | Basic navigation through slides | Yes | Yes | Yes | Yes (static image) |
| Replay slide | Yes | No | No | N/A | | 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 | | Play slide in reverse | Yes | No | No | N/A |
| Slide count | Yes | Yes (optional) | Yes (optional) | N/A | | Slide count | Yes | Yes (optional) | Yes (optional) | N/A |
| Needs Python with Manim Slides installed | Yes | No | No | No | 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 | | Auto. play slides | Yes | Yes | Yes | N/A |
| Loops support | Yes | Yes | Yes | N/A | | Loops support | Yes | Yes | Yes | N/A |
| Fully customizable | No | Yes (`--use-template` option) | No | No | | Fully customizable | No | Yes (`--use-template` option) | No | No |
| Other dependencies | None | A modern web browser | PowerPoint or LibreOffice Impress[^1] | None | | Other dependencies | None | A modern web browser | PowerPoint or LibreOffice Impress[^2] | None |
| Works cross-platforms | Yes | Yes | Partly[^1][^2] | Yes | | 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 please
[file an issue on GitHub](https://github.com/jeertmans/manim-slides/issues/new/choose). [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. so you need LibreOffice Impress on Linux platforms.

View File

@ -14,7 +14,7 @@ If you too have created content with Manim Slides that is available online
(e.g., a YouTube video or website), (e.g., a YouTube video or website),
don't hesitate to contact us so that we can share your content on this page! don't hesitate to contact us so that we can share your content on this page!
## Scientif Research ## Scientific Research
Below are people that dissimenate their research results Below are people that dissimenate their research results
using Manim Slides presentations. using Manim Slides presentations.
@ -23,7 +23,7 @@ using Manim Slides presentations.
Daniel publishes his presentations on *Cosmology, String Theory and related* Daniel publishes his presentations on *Cosmology, String Theory and related*
topics on his topics on his
[personal website](https://panopepino.github.io/web_page/main_page/slides.html). https://panopepino.github.io/web_page/main_page/slides.html [personal website](https://panopepino.github.io/web_page/main_page/slides.html).
For example, below are the slides of a seminar he gave titled For example, below are the slides of a seminar he gave titled
[Our Universe on a (Dark) Bubble](https://panopepino.github.io/web_page/main_page/presentations/2023_11_long/LS.html). [Our Universe on a (Dark) Bubble](https://panopepino.github.io/web_page/main_page/presentations/2023_11_long/LS.html).
@ -67,9 +67,66 @@ For example, below are the slides of his
</iframe> </iframe>
</div> </div>
### Matthew McIlree
Matthew is a Computer Science researcher from Scotland and has used Manim Slides
to present his work on *Proof Logging for Constraint Programming*. He also publishes
his presentation slides on his [personal website](https://matthewmcilree.com).
Here are the slides from a 25-minute talk he presented at the 39th Annual AAAI Conference on Artificial Intelligence titled
[Certifying Bounds Propagation for Integer Multiplication Constraints](https://matthewmcilree.com/files/slides/mcilree_aaai2025.html).
<div style="position:relative;padding-bottom:56.25%;">
<iframe
loading="lazy"
style="width:100%;height:100%;position:absolute;left:0px;top:0px;"
frameborder="1"
width="100%"
height="100%"
allowfullscreen
allow="autoplay"
src="https://matthewmcilree.com/files/slides/mcilree_aaai2025.html">
</iframe>
</div>
## School Work ## School Work
Below are people that used Manim Slides for school presentations. Below are people that used Manim Slides for school presentations.
*This list is currently empty. Please reach out to us if you have examples ### Antonio Caserta
to share!*
Antonio is a 17-year-old high school student from Germany who used Manim Slides to present his final project, *Episteme*, an AI financial terminal that uses crowdsourced data from social networks to gather stock insights.
The slides from his 30-minute presentation to the school board can be found below and on his [Github repository](https://github.com/amstrdm/episteme-manim-slides)
<div style="position:relative;padding-bottom:56.25%;">
<iframe
loading="lazy"
style="width:100%;height:100%;position:absolute;left:0px;top:0px;"
frameborder="1"
width="100%"
height="100%"
allowfullscreen
allow="autoplay"
src="https://amstrdm.github.io/episteme-manim-slides/">
</iframe>
</div>
### Casper Algera
Casper, a mathematics student from the Netherlands, used Manim Slides to present his bachelor's thesis.
In his presentation, he illustrates a probabilistic coupling argument related to the [contact process](https://en.wikipedia.org/wiki/Contact_process_(mathematics)).
His slides are available below, and his full presentation can be viewed on [YouTube](https://www.youtube.com/watch?v=ZJhvfCL5MWE).
<div style="position:relative;padding-bottom:56.25%;">
<iframe
loading="lazy"
style="width:100%;height:100%;position:absolute;left:0px;top:0px;"
frameborder="1"
width="100%"
height="100%"
allowfullscreen
allow="autoplay"
src="https://casperalgera.github.io/criticalvalueCP/">
</iframe>
</div>

View File

@ -48,6 +48,7 @@ def render(ce: bool, gl: bool, args: tuple[str, ...]) -> None:
if ce and gl: if ce and gl:
raise click.UsageError("You cannot specify both --CE and --GL renderers.") raise click.UsageError("You cannot specify both --CE and --GL renderers.")
if gl: if gl:
subprocess.run([sys.executable, "-m", "manimlib", "-w", *args]) completed = subprocess.run([sys.executable, "-m", "manimlib", "-w", *args])
else: else:
subprocess.run([sys.executable, "-m", "manim", "render", *args]) completed = subprocess.run([sys.executable, "-m", "manim", "render", *args])
sys.exit(completed.returncode)

View File

@ -2,6 +2,39 @@
build-backend = "hatchling.build" build-backend = "hatchling.build"
requires = ["hatchling", "hatch-fancy-pypi-readme"] 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] [project]
authors = [{name = "Jérome Eertmans", email = "jeertmans@icloud.com"}] authors = [{name = "Jérome Eertmans", email = "jeertmans@icloud.com"}]
classifiers = [ classifiers = [
@ -42,21 +75,6 @@ name = "manim-slides"
requires-python = ">=3.9" requires-python = ">=3.9"
[project.optional-dependencies] [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 = [ full = [
"manim-slides[magic,manim,sphinx-directive]", "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 = ["pyside6>=6.6.1,!=6.8.1.1"]
pyside6-full = ["manim-slides[full,pyside6]"] pyside6-full = ["manim-slides[full,pyside6]"]
sphinx-directive = ["docutils>=0.20.1", "manim-slides[manim]"] 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] [project.scripts]
manim-slides = "manim_slides.__main__:cli" manim-slides = "manim_slides.__main__:cli"
@ -225,10 +234,3 @@ isort = {known-first-party = ["manim_slides", "tests"]}
[tool.ruff.lint.per-file-ignores] [tool.ruff.lint.per-file-ignores]
"docs/source/reference/magic_example.ipynb" = ["F403", "F405"] "docs/source/reference/magic_example.ipynb" = ["F403", "F405"]
"tests/test_slide.py" = ["N801"] "tests/test_slide.py" = ["N801"]
[tool.uv]
dev-dependencies = [
"bump-my-version>=0.20.3",
"pre-commit>=3.5.0",
"setuptools>=73.0.1",
]

View File

@ -42,3 +42,8 @@ class BasicSlide(Slide):
class BasicSlideSkipReversing(BasicSlide): class BasicSlideSkipReversing(BasicSlide):
skip_reversing = True skip_reversing = True
class FailingSlide(Slide):
def construct(self):
self.play("this fails to render")

View File

@ -113,6 +113,37 @@ def test_render_basic_slide(
assert local_presentation_config.resolution == presentation_config.resolution assert local_presentation_config.resolution == presentation_config.resolution
@pytest.mark.parametrize(
"renderer",
[
"--CE",
pytest.param(
"--GL",
marks=pytest.mark.skipif(
sys.version_info < (3, 10),
reason="See https://github.com/3b1b/manim/issues/2263.",
),
),
"--CE --renderer=opengl",
],
ids=("CE", "GL", "CE(GL)"),
)
def test_render_failing_slide(
renderer: str,
slides_file: Path,
manimgl_config: Path,
) -> None:
runner = CliRunner()
with runner.isolated_filesystem() as tmp_dir:
shutil.copy(manimgl_config, tmp_dir)
results = runner.invoke(
render, [*renderer.split(" "), str(slides_file), "FailingSlide", "-ql"]
)
assert results.exit_code != 0, results
def test_clear_cache( def test_clear_cache(
slides_file: Path, slides_file: Path,
) -> None: ) -> None:

155
uv.lock generated
View File

@ -1549,27 +1549,6 @@ dependencies = [
] ]
[package.optional-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 = [ full = [
{ name = "docutils" }, { name = "docutils" },
{ name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { 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 = "docutils" },
{ name = "manim" }, { 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 = "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 = "ipykernel" },
{ name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "manim-slides", extra = ["full", "magic", "manim", "manimgl", "pyqt6", "pyside6", "sphinx-directive"] },
{ name = "manim" }, { name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "manimgl" }, { name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "pyqt6" }, { name = "nbsphinx" },
{ name = "pyside6" }, { name = "pandoc" },
{ name = "pre-commit" },
{ name = "pygments" },
{ name = "pytest" }, { name = "pytest" },
{ name = "pytest-cov" }, { name = "pytest-cov" },
{ name = "pytest-env" }, { name = "pytest-env" },
{ name = "pytest-missing-modules" }, { name = "pytest-missing-modules" },
{ name = "pytest-qt" }, { 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" },
] ]
docs = [
[package.dev-dependencies] { name = "furo" },
dev = [ { name = "ipykernel" },
{ name = "bump-my-version" }, { name = "manim-slides", extra = ["magic", "manim", "pyqt6", "sphinx-directive"] },
{ name = "pre-commit" }, { 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" }, { name = "setuptools" },
] ]
@ -1640,72 +1652,89 @@ requires-dist = [
{ name = "beautifulsoup4", specifier = ">=4.12.3" }, { name = "beautifulsoup4", specifier = ">=4.12.3" },
{ name = "click", specifier = ">=8.1.3" }, { name = "click", specifier = ">=8.1.3" },
{ name = "click-default-group", specifier = ">=1.2.2" }, { 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 == 'full'", specifier = ">=0.20.1" },
{ name = "docutils", marker = "extra == 'pyqt6-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 == 'pyside6-full'", specifier = ">=0.20.1" },
{ name = "docutils", marker = "extra == 'sphinx-directive'", 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 == 'full'", specifier = ">=8.12.2" },
{ name = "ipython", marker = "extra == 'magic'", 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 == 'pyqt6-full'", specifier = ">=8.12.2" },
{ name = "ipython", marker = "extra == 'pyside6-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 = "jinja2", specifier = ">=3.1.2" },
{ name = "lxml", specifier = ">=4.9.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 == 'full'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'magic'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'magic'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'manim'", specifier = ">=0.19" }, { name = "manim", marker = "extra == 'manim'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'pyqt6-full'", 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 == 'pyside6-full'", specifier = ">=0.19" },
{ name = "manim", marker = "extra == 'sphinx-directive'", 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 == '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 = "numpy", specifier = ">=1.19" },
{ name = "pandoc", marker = "extra == 'docs'", specifier = ">=2.3" },
{ name = "pillow", specifier = ">=9.5.0" }, { name = "pillow", specifier = ">=9.5.0" },
{ name = "pydantic", specifier = ">=2.0.1" }, { name = "pydantic", specifier = ">=2.0.1" },
{ name = "pydantic-extra-types", specifier = ">=2.0.0" }, { 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'", specifier = ">=6.7.0" },
{ name = "pyqt6", marker = "extra == 'pyqt6-full'", 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'", 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 == '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 = "python-pptx", specifier = ">=0.6.21" },
{ name = "qtpy", specifier = ">=2.4.1" }, { name = "qtpy", specifier = ">=2.4.1" },
{ name = "requests", specifier = ">=2.28.1" }, { name = "requests", specifier = ">=2.28.1" },
{ name = "rich", specifier = ">=13.3.2" }, { name = "rich", specifier = ">=13.3.2" },
{ name = "rtoml", specifier = ">=0.11.0" }, { 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" }, { name = "tqdm", specifier = ">=4.64.1" },
] ]
provides-extras = ["docs", "full", "magic", "manim", "manimgl", "pyqt6", "pyqt6-full", "pyside6", "pyside6-full", "sphinx-directive", "tests"] provides-extras = ["full", "magic", "manim", "manimgl", "pyqt6", "pyqt6-full", "pyside6", "pyside6-full", "sphinx-directive"]
[package.metadata.requires-dev] [package.metadata.requires-dev]
dev = [ dev = [
{ name = "bump-my-version", specifier = ">=0.20.3" }, { 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 = "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" }, { name = "setuptools", specifier = ">=73.0.1" },
] ]