manim-simplex 0.2.1__tar.gz → 0.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/CHANGELOG.md +12 -1
  2. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/PKG-INFO +21 -22
  3. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/README.md +19 -21
  4. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/examples/hello_slide.py +2 -3
  5. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/examples/outline_slide.py +1 -2
  6. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/examples/theme_demo.py +2 -3
  7. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/pyproject.toml +2 -1
  8. manim_simplex-0.2.3/src/simplex/__init__.py +137 -0
  9. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/animations.py +6 -0
  10. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/code.py +1 -1
  11. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/mobjects/__init__.py +13 -1
  12. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/mobjects/array.py +1 -1
  13. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/mobjects/graph.py +1 -1
  14. manim_simplex-0.2.3/src/simplex/mobjects/paper.py +456 -0
  15. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/plugin.py +3 -3
  16. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/theme/README.md +2 -2
  17. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/theme/__init__.py +2 -0
  18. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/theme/context.py +3 -3
  19. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/theme/presets.py +4 -4
  20. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/theme/pygments_style.py +1 -1
  21. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_text.py +7 -7
  22. manim_simplex-0.2.3/tests/mobjects/test_paper.py +136 -0
  23. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/slides/test_chrome.py +8 -8
  24. manim_simplex-0.2.3/tests/test_public_api.py +13 -0
  25. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/theme/README.md +1 -1
  26. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/theme/test_tokens.py +11 -11
  27. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/uv.lock +19 -1
  28. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/.gitignore +0 -0
  29. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/.pre-commit-config.yaml +0 -0
  30. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/.python-version +0 -0
  31. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/LICENSE +0 -0
  32. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/examples/README.md +0 -0
  33. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/examples/glyph_map_demo.py +0 -0
  34. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/examples/manim.cfg +0 -0
  35. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/ruff.toml +0 -0
  36. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/README.md +0 -0
  37. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/__init__.py +0 -0
  38. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/debug.py +0 -0
  39. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/defaults.py +0 -0
  40. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/dynamics.py +0 -0
  41. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/geometry.py +0 -0
  42. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/ghost_fade.py +0 -0
  43. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/glyph_map.py +0 -0
  44. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/region.py +0 -0
  45. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/scaling.py +0 -0
  46. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/engine/text.py +0 -0
  47. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/manifest.py +0 -0
  48. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/mobjects/README.md +0 -0
  49. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/mobjects/outline.py +0 -0
  50. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/py.typed +0 -0
  51. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/section.py +0 -0
  52. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/slides/README.md +0 -0
  53. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/slides/__init__.py +0 -0
  54. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/slides/base.py +0 -0
  55. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/slides/chrome.py +0 -0
  56. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/slides/outline.py +0 -0
  57. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/theme/tokens.py +0 -0
  58. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/src/simplex/theme/web_css.py +0 -0
  59. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/README.md +0 -0
  60. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/__init__.py +0 -0
  61. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/README.md +0 -0
  62. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/__init__.py +0 -0
  63. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_animations.py +0 -0
  64. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_code.py +0 -0
  65. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_debug.py +0 -0
  66. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_dynamics.py +0 -0
  67. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_geometry.py +0 -0
  68. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_ghost_fade.py +0 -0
  69. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_glyph_map.py +0 -0
  70. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_region.py +0 -0
  71. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/engine/test_scaling.py +0 -0
  72. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/mobjects/README.md +0 -0
  73. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/mobjects/__init__.py +0 -0
  74. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/mobjects/test_graph.py +0 -0
  75. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/mobjects/test_outline.py +0 -0
  76. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/slides/README.md +0 -0
  77. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/slides/__init__.py +0 -0
  78. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/slides/test_base.py +0 -0
  79. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/slides/test_outline.py +0 -0
  80. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/test_manifest.py +0 -0
  81. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/test_section.py +0 -0
  82. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/theme/__init__.py +0 -0
  83. {manim_simplex-0.2.1 → manim_simplex-0.2.3}/tests/theme/test_web_css.py +0 -0
@@ -6,6 +6,17 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.3] - 2026-05-25
10
+
11
+ ### Added
12
+
13
+ - Top-level authoring imports such as `from simplex import BaseSlide, Caption`.
14
+
15
+ ### Changed
16
+
17
+ - Rename the default theme from `dastimator_dark` / `DASTIMATOR_DARK` to
18
+ `simplex_dark` / `SIMPLEX_DARK`.
19
+
9
20
  ## [0.2.1] - 2026-05-24
10
21
 
11
22
  ### Changed
@@ -111,7 +122,7 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
111
122
  - ``make_chrome(..., page=…)`` parameter and the corresponding ``page``
112
123
  entry in ``Chrome.mobjects``. Slide numbering moves to the web layer.
113
124
  - ``LatexProfile.environments["definition"]`` entries from
114
- ``DASTIMATOR_DARK`` and ``ACADEMIC_LIGHT``: ``TexPage`` is now the
125
+ ``SIMPLEX_DARK`` and ``ACADEMIC_LIGHT``: ``TexPage`` is now the
115
126
  single owner of the ``{minipage}{<width>cm}`` literal.
116
127
  - `simplex.engine.section_types` module (replaced by `simplex.section`).
117
128
  - `simplex.slides.components` subpackage (replaced by `simplex.mobjects`).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: manim-simplex
3
- Version: 0.2.1
3
+ Version: 0.2.3
4
4
  Summary: Manim plugin: theme tokens, mobjects, slide hierarchy, deck manifest schema.
5
5
  Project-URL: Changelog, https://github.com/shlomi-perles/manim-simplex/blob/main/CHANGELOG.md
6
6
  Project-URL: Homepage, https://github.com/shlomi-perles/manim-simplex
@@ -28,6 +28,7 @@ Requires-Dist: manim-slides>=5.1.7
28
28
  Requires-Dist: manim>=0.20.1
29
29
  Requires-Dist: pydantic>=2.7
30
30
  Requires-Dist: pygments>=2.18
31
+ Requires-Dist: pymupdf>=1.27.2.3
31
32
  Description-Content-Type: text/markdown
32
33
 
33
34
  # manim-simplex
@@ -35,14 +36,14 @@ Description-Content-Type: text/markdown
35
36
  [![PyPI version](https://img.shields.io/pypi/v/manim-simplex.svg)](https://pypi.org/project/manim-simplex/)
36
37
  [![Python](https://img.shields.io/pypi/pyversions/manim-simplex.svg)](https://pypi.org/project/manim-simplex/)
37
38
  [![CI](https://github.com/shlomi-perles/manim-simplex/actions/workflows/ci.yml/badge.svg)](https://github.com/shlomi-perles/manim-simplex/actions/workflows/ci.yml)
38
- [![License](https://img.shields.io/pypi/l/manim-simplex.svg)](https://github.com/shlomi-perles/manim-simplex/blob/main/LICENSE)
39
+ [![License](https://img.shields.io/github/license/shlomi-perles/manim-simplex.svg)](https://github.com/shlomi-perles/manim-simplex/blob/main/LICENSE)
39
40
 
40
41
  `manim-simplex` is the Manim plugin layer for Simplex: theme tokens,
41
42
  slide bases, reusable mobjects, animation helpers, and the shared deck
42
43
  manifest schema used by the Simplex web builder.
43
44
 
44
- It is published as `manim-simplex` and exposes modules under the
45
- implicit namespace package `simplex`.
45
+ It is published as `manim-simplex` and exposes the `simplex` Manim authoring
46
+ API.
46
47
 
47
48
  ## Requirements
48
49
 
@@ -93,15 +94,14 @@ color, and enables section JSON output.
93
94
  ```python
94
95
  from manim import ORIGIN, MathTex, Write
95
96
 
96
- from simplex.slides import BaseSlide, make_chrome
97
- from simplex.theme import presets
97
+ from simplex import BaseSlide, make_chrome, presets
98
98
 
99
99
 
100
100
  class HelloSlide(BaseSlide):
101
101
  def setup(self) -> None:
102
102
  super().setup()
103
103
  chrome = make_chrome(
104
- presets.DASTIMATOR_DARK,
104
+ presets.SIMPLEX_DARK,
105
105
  self.region,
106
106
  header="Hello, Simplex",
107
107
  )
@@ -141,10 +141,10 @@ uv run manim-slides present HelloSlide
141
141
  | `simplex.plugin` | `activate()` entry point used by Manim. |
142
142
  | `simplex.slides` | `BaseSlide`, `OutlineScene`, `OutlinePart`, `Chrome`, `make_chrome`. |
143
143
  | `simplex.engine` | `Region`, `Remove`, `clear_scene`, `exit_for`, `register_exit`, `set_exit_animation`, `HighlightResult`, `apply_theme_defaults`. |
144
- | `simplex.mobjects` | `Node`, `Edge`, `ArrayMob`, `ArrayEntry`, `ArrayPointer`, `OutlineProgressBar`. |
144
+ | `simplex.mobjects` | `Node`, `Edge`, `ArrayMob`, `ArrayEntry`, `ArrayPointer`, `OutlineProgressBar`, `Paper`, `ShowPaper`, `DismissPaper`, `PickPage`. |
145
145
  | `simplex.theme` | `Theme`, `Palette`, `Typography`, `Spacing`, `Motion`, `LatexProfile`, `WebPalette`, `active_theme`, `get_active_theme`, `presets`, `render_web_css`. |
146
146
  | `simplex.section` | `SimplexSectionType`, the section strings written into Manim section JSON. |
147
- | `simplex.manifest` | `DeckManifest`, `MainSlide`, `Subsection`, the Pydantic schema shared with `simplex-py`. |
147
+ | `simplex.manifest` | `DeckManifest`, `MainSlide`, `Subsection`, the Pydantic schema shared with `simplex-web`. |
148
148
 
149
149
  Additional focused helpers live in submodules such as
150
150
  `simplex.engine.glyph_map`, `simplex.engine.code`,
@@ -154,7 +154,7 @@ Additional focused helpers live in submodules such as
154
154
  ## Slide Hierarchy
155
155
 
156
156
  `BaseSlide.next_slide` writes Simplex section types into Manim's native
157
- section JSON. The `simplex-py` web builder later reconciles those
157
+ section JSON. The `simplex-web` builder later reconciles those
158
158
  sections with manim-slides metadata.
159
159
 
160
160
  ```python
@@ -177,15 +177,14 @@ web portal.
177
177
  ```python
178
178
  from manim import Tex
179
179
 
180
- from simplex.theme import presets
181
- from simplex.theme.context import active_theme
180
+ from simplex import active_theme, presets
182
181
 
183
182
 
184
183
  with active_theme(presets.ACADEMIC_LIGHT):
185
184
  label = Tex("This Tex uses the academic light palette.")
186
185
  ```
187
186
 
188
- Available presets include `DASTIMATOR_DARK` and `ACADEMIC_LIGHT`.
187
+ Available presets include `SIMPLEX_DARK` and `ACADEMIC_LIGHT`.
189
188
 
190
189
  ## Outline Slides
191
190
 
@@ -195,8 +194,7 @@ slide with progress indicators.
195
194
  ```python
196
195
  from manim import Circle, Square, Tex
197
196
 
198
- from simplex.engine.text import Caption
199
- from simplex.slides import OutlinePart, OutlineScene
197
+ from simplex import Caption, OutlinePart, OutlineScene
200
198
 
201
199
 
202
200
  class Outline(OutlineScene):
@@ -225,21 +223,22 @@ uv run manim-slides render examples/outline_slide.py OutlineDemo
225
223
  The examples directory has its own `manim.cfg`, so the Simplex plugin is
226
224
  enabled when commands are run from the repository root.
227
225
 
228
- ## Relationship To `simplex-py`
226
+ ## Relationship To `simplex-web`
229
227
 
230
228
  Simplex is split into two PyPI distributions:
231
229
 
232
230
  | Distribution | Import namespace | Purpose |
233
231
  | --- | --- | --- |
234
232
  | `manim-simplex` | `simplex.*` | Manim plugin, slide bases, theme, mobjects, manifest schema. |
235
- | `simplex-py` | `simplex.*` | CLI, deck discovery, render orchestration, and static web portal. |
233
+ | `simplex-web` | `simplex.*` | CLI, deck discovery, render orchestration, and static web portal. |
236
234
 
237
- Both wheels intentionally contribute to the same PEP 420 namespace. This
238
- package does not ship `simplex/__init__.py`; neither should downstream
239
- extensions that want to share the namespace.
235
+ `manim-simplex` provides a lightweight `simplex.__init__` facade so deck
236
+ authors can write imports such as `from simplex import BaseSlide, Caption`.
237
+ The facade extends the package path for `simplex-web`, so `simplex.web`,
238
+ `simplex.deck`, and the CLI-side modules continue to compose with it.
240
239
 
241
240
  Install only `manim-simplex` if you want to render scenes and slides.
242
- Install `simplex-py` later when you want the full lecture portal and CLI.
241
+ Install `simplex-web` later when you want the full lecture portal and CLI.
243
242
 
244
243
  ## Development
245
244
 
@@ -276,7 +275,7 @@ Publishing. To release a new version:
276
275
  1. Update `version` in `pyproject.toml`.
277
276
  2. Move changelog entries under a dated release heading.
278
277
  3. Commit the release prep.
279
- 4. Push an annotated tag such as `v0.2.1`.
278
+ 4. Push an annotated tag such as `v0.2.3`.
280
279
 
281
280
  The `Publish to PyPI` workflow builds an sdist and wheel, checks both
282
281
  with Twine, uploads them as a GitHub artifact, and publishes to PyPI via
@@ -3,14 +3,14 @@
3
3
  [![PyPI version](https://img.shields.io/pypi/v/manim-simplex.svg)](https://pypi.org/project/manim-simplex/)
4
4
  [![Python](https://img.shields.io/pypi/pyversions/manim-simplex.svg)](https://pypi.org/project/manim-simplex/)
5
5
  [![CI](https://github.com/shlomi-perles/manim-simplex/actions/workflows/ci.yml/badge.svg)](https://github.com/shlomi-perles/manim-simplex/actions/workflows/ci.yml)
6
- [![License](https://img.shields.io/pypi/l/manim-simplex.svg)](https://github.com/shlomi-perles/manim-simplex/blob/main/LICENSE)
6
+ [![License](https://img.shields.io/github/license/shlomi-perles/manim-simplex.svg)](https://github.com/shlomi-perles/manim-simplex/blob/main/LICENSE)
7
7
 
8
8
  `manim-simplex` is the Manim plugin layer for Simplex: theme tokens,
9
9
  slide bases, reusable mobjects, animation helpers, and the shared deck
10
10
  manifest schema used by the Simplex web builder.
11
11
 
12
- It is published as `manim-simplex` and exposes modules under the
13
- implicit namespace package `simplex`.
12
+ It is published as `manim-simplex` and exposes the `simplex` Manim authoring
13
+ API.
14
14
 
15
15
  ## Requirements
16
16
 
@@ -61,15 +61,14 @@ color, and enables section JSON output.
61
61
  ```python
62
62
  from manim import ORIGIN, MathTex, Write
63
63
 
64
- from simplex.slides import BaseSlide, make_chrome
65
- from simplex.theme import presets
64
+ from simplex import BaseSlide, make_chrome, presets
66
65
 
67
66
 
68
67
  class HelloSlide(BaseSlide):
69
68
  def setup(self) -> None:
70
69
  super().setup()
71
70
  chrome = make_chrome(
72
- presets.DASTIMATOR_DARK,
71
+ presets.SIMPLEX_DARK,
73
72
  self.region,
74
73
  header="Hello, Simplex",
75
74
  )
@@ -109,10 +108,10 @@ uv run manim-slides present HelloSlide
109
108
  | `simplex.plugin` | `activate()` entry point used by Manim. |
110
109
  | `simplex.slides` | `BaseSlide`, `OutlineScene`, `OutlinePart`, `Chrome`, `make_chrome`. |
111
110
  | `simplex.engine` | `Region`, `Remove`, `clear_scene`, `exit_for`, `register_exit`, `set_exit_animation`, `HighlightResult`, `apply_theme_defaults`. |
112
- | `simplex.mobjects` | `Node`, `Edge`, `ArrayMob`, `ArrayEntry`, `ArrayPointer`, `OutlineProgressBar`. |
111
+ | `simplex.mobjects` | `Node`, `Edge`, `ArrayMob`, `ArrayEntry`, `ArrayPointer`, `OutlineProgressBar`, `Paper`, `ShowPaper`, `DismissPaper`, `PickPage`. |
113
112
  | `simplex.theme` | `Theme`, `Palette`, `Typography`, `Spacing`, `Motion`, `LatexProfile`, `WebPalette`, `active_theme`, `get_active_theme`, `presets`, `render_web_css`. |
114
113
  | `simplex.section` | `SimplexSectionType`, the section strings written into Manim section JSON. |
115
- | `simplex.manifest` | `DeckManifest`, `MainSlide`, `Subsection`, the Pydantic schema shared with `simplex-py`. |
114
+ | `simplex.manifest` | `DeckManifest`, `MainSlide`, `Subsection`, the Pydantic schema shared with `simplex-web`. |
116
115
 
117
116
  Additional focused helpers live in submodules such as
118
117
  `simplex.engine.glyph_map`, `simplex.engine.code`,
@@ -122,7 +121,7 @@ Additional focused helpers live in submodules such as
122
121
  ## Slide Hierarchy
123
122
 
124
123
  `BaseSlide.next_slide` writes Simplex section types into Manim's native
125
- section JSON. The `simplex-py` web builder later reconciles those
124
+ section JSON. The `simplex-web` builder later reconciles those
126
125
  sections with manim-slides metadata.
127
126
 
128
127
  ```python
@@ -145,15 +144,14 @@ web portal.
145
144
  ```python
146
145
  from manim import Tex
147
146
 
148
- from simplex.theme import presets
149
- from simplex.theme.context import active_theme
147
+ from simplex import active_theme, presets
150
148
 
151
149
 
152
150
  with active_theme(presets.ACADEMIC_LIGHT):
153
151
  label = Tex("This Tex uses the academic light palette.")
154
152
  ```
155
153
 
156
- Available presets include `DASTIMATOR_DARK` and `ACADEMIC_LIGHT`.
154
+ Available presets include `SIMPLEX_DARK` and `ACADEMIC_LIGHT`.
157
155
 
158
156
  ## Outline Slides
159
157
 
@@ -163,8 +161,7 @@ slide with progress indicators.
163
161
  ```python
164
162
  from manim import Circle, Square, Tex
165
163
 
166
- from simplex.engine.text import Caption
167
- from simplex.slides import OutlinePart, OutlineScene
164
+ from simplex import Caption, OutlinePart, OutlineScene
168
165
 
169
166
 
170
167
  class Outline(OutlineScene):
@@ -193,21 +190,22 @@ uv run manim-slides render examples/outline_slide.py OutlineDemo
193
190
  The examples directory has its own `manim.cfg`, so the Simplex plugin is
194
191
  enabled when commands are run from the repository root.
195
192
 
196
- ## Relationship To `simplex-py`
193
+ ## Relationship To `simplex-web`
197
194
 
198
195
  Simplex is split into two PyPI distributions:
199
196
 
200
197
  | Distribution | Import namespace | Purpose |
201
198
  | --- | --- | --- |
202
199
  | `manim-simplex` | `simplex.*` | Manim plugin, slide bases, theme, mobjects, manifest schema. |
203
- | `simplex-py` | `simplex.*` | CLI, deck discovery, render orchestration, and static web portal. |
200
+ | `simplex-web` | `simplex.*` | CLI, deck discovery, render orchestration, and static web portal. |
204
201
 
205
- Both wheels intentionally contribute to the same PEP 420 namespace. This
206
- package does not ship `simplex/__init__.py`; neither should downstream
207
- extensions that want to share the namespace.
202
+ `manim-simplex` provides a lightweight `simplex.__init__` facade so deck
203
+ authors can write imports such as `from simplex import BaseSlide, Caption`.
204
+ The facade extends the package path for `simplex-web`, so `simplex.web`,
205
+ `simplex.deck`, and the CLI-side modules continue to compose with it.
208
206
 
209
207
  Install only `manim-simplex` if you want to render scenes and slides.
210
- Install `simplex-py` later when you want the full lecture portal and CLI.
208
+ Install `simplex-web` later when you want the full lecture portal and CLI.
211
209
 
212
210
  ## Development
213
211
 
@@ -244,7 +242,7 @@ Publishing. To release a new version:
244
242
  1. Update `version` in `pyproject.toml`.
245
243
  2. Move changelog entries under a dated release heading.
246
244
  3. Commit the release prep.
247
- 4. Push an annotated tag such as `v0.2.1`.
245
+ 4. Push an annotated tag such as `v0.2.3`.
248
246
 
249
247
  The `Publish to PyPI` workflow builds an sdist and wheel, checks both
250
248
  with Twine, uploads them as a GitHub artifact, and publishes to PyPI via
@@ -13,14 +13,13 @@ Demonstrates:
13
13
 
14
14
  from manim import ORIGIN, MathTex, Write
15
15
 
16
- from simplex.slides import BaseSlide, make_chrome
17
- from simplex.theme import presets
16
+ from simplex import BaseSlide, make_chrome, presets
18
17
 
19
18
 
20
19
  class HelloSlide(BaseSlide):
21
20
  def setup(self) -> None:
22
21
  super().setup()
23
- chrome = make_chrome(presets.DASTIMATOR_DARK, self.region, header="Hello, Simplex")
22
+ chrome = make_chrome(presets.SIMPLEX_DARK, self.region, header="Hello, Simplex")
24
23
  self.add_to_canvas(**chrome.mobjects)
25
24
  self.region = chrome.body_region
26
25
 
@@ -2,8 +2,7 @@
2
2
 
3
3
  from manim import Circle, Square, Triangle
4
4
 
5
- from simplex.engine.text import Caption, TexPage
6
- from simplex.slides import OutlinePart, OutlineScene
5
+ from simplex import Caption, OutlinePart, OutlineScene, TexPage
7
6
 
8
7
 
9
8
  class OutlineDemo(OutlineScene):
@@ -8,13 +8,12 @@ proof).
8
8
 
9
9
  from manim import FadeIn, Scene, Tex
10
10
 
11
- from simplex.theme import presets
12
- from simplex.theme.context import active_theme
11
+ from simplex import active_theme, presets
13
12
 
14
13
 
15
14
  class ThemeDemo(Scene):
16
15
  def construct(self) -> None:
17
- with active_theme(presets.DASTIMATOR_DARK):
16
+ with active_theme(presets.SIMPLEX_DARK):
18
17
  dark_label = Tex("dark theme")
19
18
  with active_theme(presets.ACADEMIC_LIGHT):
20
19
  light_label = Tex("light theme")
@@ -33,6 +33,7 @@ dependencies = [
33
33
  "manim-slides>=5.1.7",
34
34
  "pydantic>=2.7",
35
35
  "pygments>=2.18",
36
+ "pymupdf>=1.27.2.3",
36
37
  ]
37
38
  description = "Manim plugin: theme tokens, mobjects, slide hierarchy, deck manifest schema."
38
39
  keywords = [
@@ -50,7 +51,7 @@ license-files = ["LICENSE"]
50
51
  name = "manim-simplex"
51
52
  readme = "README.md"
52
53
  requires-python = ">=3.13"
53
- version = "0.2.1"
54
+ version = "0.2.3"
54
55
 
55
56
  [project.entry-points."manim.plugins"]
56
57
  simplex = "simplex.plugin:activate"
@@ -0,0 +1,137 @@
1
+ """Convenience imports for the Manim Simplex authoring API.
2
+
3
+ The package also participates in the shared ``simplex.*`` namespace used by
4
+ ``simplex-web``. Keep this module light: exported objects are loaded lazily so
5
+ ``import simplex.web`` does not eagerly import Manim.
6
+ """
7
+
8
+ # ruff: noqa: F401
9
+ # pyright: reportUnsupportedDunderAll=false, reportUnusedImport=false
10
+
11
+ from __future__ import annotations
12
+
13
+ from importlib import import_module
14
+ from pkgutil import extend_path
15
+ from typing import TYPE_CHECKING, Any
16
+
17
+ __path__ = extend_path(__path__, __name__) # type: ignore[name-defined]
18
+
19
+ _EXPORTS: dict[str, str] = {
20
+ "ArrayEntry": "simplex.mobjects",
21
+ "ArrayMob": "simplex.mobjects",
22
+ "ArrayPointer": "simplex.mobjects",
23
+ "BaseSlide": "simplex.slides",
24
+ "Caption": "simplex.engine.text",
25
+ "Chrome": "simplex.slides",
26
+ "DN": "simplex.engine.dynamics",
27
+ "DeckManifest": "simplex.manifest",
28
+ "DismissPaper": "simplex.mobjects",
29
+ "Edge": "simplex.mobjects",
30
+ "GhostSlideFade": "simplex.engine.ghost_fade",
31
+ "HighlightResult": "simplex.engine",
32
+ "MainSlide": "simplex.manifest",
33
+ "Node": "simplex.mobjects",
34
+ "OutlinePart": "simplex.slides",
35
+ "OutlineProgressBar": "simplex.mobjects",
36
+ "OutlineScene": "simplex.slides",
37
+ "Paper": "simplex.mobjects",
38
+ "PickPage": "simplex.mobjects",
39
+ "Region": "simplex.engine",
40
+ "Remove": "simplex.engine",
41
+ "SIMPLEX_DARK": "simplex.theme.presets",
42
+ "ShowPaper": "simplex.mobjects",
43
+ "SimplexSectionType": "simplex.section",
44
+ "Subsection": "simplex.manifest",
45
+ "TexPage": "simplex.engine.text",
46
+ "TransformByGlyphMap": "simplex.engine.glyph_map",
47
+ "VT": "simplex.engine.dynamics",
48
+ "active_theme": "simplex.theme",
49
+ "apply_theme_defaults": "simplex.engine",
50
+ "bounding_box": "simplex.engine.debug",
51
+ "clear_scene": "simplex.engine",
52
+ "code_block": "simplex.engine.code",
53
+ "code_explain": "simplex.engine.code",
54
+ "code_with_math": "simplex.engine.code",
55
+ "color_tex": "simplex.engine.text",
56
+ "debug_glyph": "simplex.engine.debug",
57
+ "debug_glyphs": "simplex.engine.debug",
58
+ "exit_for": "simplex.engine",
59
+ "get_active_theme": "simplex.theme",
60
+ "get_convex_hull_polygon": "simplex.engine.geometry",
61
+ "get_frame_center": "simplex.engine.geometry",
62
+ "get_surrounding_rectangle": "simplex.engine.geometry",
63
+ "highlight_code_lines": "simplex.engine.code",
64
+ "indexx_labels": "simplex.engine.debug",
65
+ "keep_orientation": "simplex.engine.dynamics",
66
+ "maintain_apparent_stroke_width": "simplex.engine.dynamics",
67
+ "make_chrome": "simplex.slides",
68
+ "presets": "simplex.theme",
69
+ "register_exit": "simplex.engine",
70
+ "scale_to_fit": "simplex.engine.scaling",
71
+ "scale_to_fit_mobject": "simplex.engine.scaling",
72
+ "scale_with_stroke_width": "simplex.engine.scaling",
73
+ "search_shape_in_text": "simplex.engine.text",
74
+ "set_exit_animation": "simplex.engine",
75
+ }
76
+
77
+ __all__ = sorted(_EXPORTS)
78
+
79
+
80
+ def __getattr__(name: str) -> Any:
81
+ if name not in _EXPORTS:
82
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
83
+ module = import_module(_EXPORTS[name])
84
+ value = getattr(module, name)
85
+ globals()[name] = value
86
+ return value
87
+
88
+
89
+ def __dir__() -> list[str]:
90
+ return sorted(set(globals()) | set(__all__))
91
+
92
+
93
+ if TYPE_CHECKING:
94
+ from simplex.engine import (
95
+ HighlightResult,
96
+ Region,
97
+ Remove,
98
+ apply_theme_defaults,
99
+ clear_scene,
100
+ exit_for,
101
+ register_exit,
102
+ set_exit_animation,
103
+ )
104
+ from simplex.engine.code import (
105
+ code_block,
106
+ code_explain,
107
+ code_with_math,
108
+ highlight_code_lines,
109
+ )
110
+ from simplex.engine.debug import bounding_box, debug_glyph, debug_glyphs, indexx_labels
111
+ from simplex.engine.dynamics import DN, VT, keep_orientation, maintain_apparent_stroke_width
112
+ from simplex.engine.geometry import (
113
+ get_convex_hull_polygon,
114
+ get_frame_center,
115
+ get_surrounding_rectangle,
116
+ )
117
+ from simplex.engine.ghost_fade import GhostSlideFade
118
+ from simplex.engine.glyph_map import TransformByGlyphMap
119
+ from simplex.engine.scaling import scale_to_fit, scale_to_fit_mobject, scale_with_stroke_width
120
+ from simplex.engine.text import Caption, TexPage, color_tex, search_shape_in_text
121
+ from simplex.manifest import DeckManifest, MainSlide, Subsection
122
+ from simplex.mobjects import (
123
+ ArrayEntry,
124
+ ArrayMob,
125
+ ArrayPointer,
126
+ DismissPaper,
127
+ Edge,
128
+ Node,
129
+ OutlineProgressBar,
130
+ Paper,
131
+ PickPage,
132
+ ShowPaper,
133
+ )
134
+ from simplex.section import SimplexSectionType
135
+ from simplex.slides import BaseSlide, Chrome, OutlinePart, OutlineScene, make_chrome
136
+ from simplex.theme import active_theme, get_active_theme, presets
137
+ from simplex.theme.presets import SIMPLEX_DARK
@@ -66,10 +66,16 @@ class _DefaultRegistry:
66
66
  VMobject,
67
67
  )
68
68
 
69
+ from simplex.mobjects.paper import DismissPaper, Paper
70
+
69
71
  def fade_with_drift(m: Any, **kw: Any) -> Any:
70
72
  return FadeOut(m, shift=0.1 * DOWN, **kw)
71
73
 
74
+ def paper_exit(m: Any, **kw: Any) -> Any:
75
+ return DismissPaper(m, **kw)
76
+
72
77
  return {
78
+ Paper: paper_exit,
73
79
  Tex: Unwrite,
74
80
  MathTex: Unwrite,
75
81
  Text: Unwrite,
@@ -6,7 +6,7 @@ Wraps :class:`manim.Code` (the Pygments-backed listing) and exposes its
6
6
  ``inline_math_in_code`` / ``code_with_math`` rewrite ``$...$`` regions in
7
7
  each line into rendered ``MathTex`` glyphs after Pygments has already
8
8
  highlighted the surrounding code. This is the modern replacement for the
9
- old dastimator ``compile_code_tex`` helper -- it relies on Manim
9
+ old Simplex ``compile_code_tex`` helper -- it relies on Manim
10
10
  0.20.x's ``Code.code_lines`` glyph order and reflows each line so the
11
11
  math width drives the final layout.
12
12
  """
@@ -9,5 +9,17 @@ slide system.
9
9
  from simplex.mobjects.array import ArrayEntry, ArrayMob, ArrayPointer
10
10
  from simplex.mobjects.graph import Edge, Node
11
11
  from simplex.mobjects.outline import OutlineProgressBar
12
+ from simplex.mobjects.paper import DismissPaper, Paper, PickPage, ShowPaper
12
13
 
13
- __all__ = ["ArrayEntry", "ArrayMob", "ArrayPointer", "Edge", "Node", "OutlineProgressBar"]
14
+ __all__ = [
15
+ "ArrayEntry",
16
+ "ArrayMob",
17
+ "ArrayPointer",
18
+ "DismissPaper",
19
+ "Edge",
20
+ "Node",
21
+ "OutlineProgressBar",
22
+ "Paper",
23
+ "PickPage",
24
+ "ShowPaper",
25
+ ]
@@ -1,4 +1,4 @@
1
- """ArrayMob, ArrayEntry, ArrayPointer -- ported and cleaned from Dastimator.
1
+ """ArrayMob, ArrayEntry, ArrayPointer -- ported and cleaned from Simplex.
2
2
 
3
3
  Vanilla Manim mobjects. No factories; no wrapping. Authors construct directly::
4
4
 
@@ -1,4 +1,4 @@
1
- """Graph mobjects (``Node``, ``Edge``) ported from Dastimator.
1
+ """Graph mobjects (``Node``, ``Edge``) ported from Simplex.
2
2
 
3
3
  These are vanilla ``VMobject`` subclasses; they pull colors / strokes
4
4
  from the active Simplex theme at construction time and register a