mirror of
https://github.com/jeertmans/manim-slides.git
synced 2025-07-10 21:41:22 +08:00
Compare commits
13 Commits
latest
...
pre-commit
Author | SHA1 | Date | |
---|---|---|---|
b728f0864e | |||
ba733eeb97 | |||
14813f7af1 | |||
2f62915ad6 | |||
c81e117bb8 | |||
6255f644ab | |||
9e12feb275 | |||
d2d5cc10b7 | |||
3c6e2db7db | |||
04b0eb5685 | |||
0c6cd67038 | |||
a5412a8df2 | |||
e9480c9bc7 |
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -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
|
||||||
|
@ -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]
|
||||||
|
@ -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
|
|
||||||
|
23
CHANGELOG.md
23
CHANGELOG.md
@ -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)
|
||||||
|
|
||||||
|
20
README.md
20
README.md
@ -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
|
||||||
|
|
||||||
|
@ -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}
|
||||||
|
@ -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.
|
||||||
|
@ -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>
|
||||||
|
@ -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)
|
||||||
|
@ -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",
|
|
||||||
]
|
|
||||||
|
@ -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")
|
||||||
|
@ -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
155
uv.lock
generated
@ -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" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user