manim-simplex 0.2.2__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.2 → manim_simplex-0.2.3}/CHANGELOG.md +12 -1
  2. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/PKG-INFO +20 -22
  3. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/README.md +19 -21
  4. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/examples/hello_slide.py +2 -3
  5. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/examples/outline_slide.py +1 -2
  6. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/examples/theme_demo.py +2 -3
  7. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/pyproject.toml +1 -1
  8. manim_simplex-0.2.3/src/simplex/__init__.py +137 -0
  9. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/code.py +1 -1
  10. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/mobjects/array.py +1 -1
  11. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/mobjects/graph.py +1 -1
  12. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/plugin.py +3 -3
  13. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/theme/README.md +2 -2
  14. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/theme/__init__.py +2 -0
  15. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/theme/context.py +3 -3
  16. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/theme/presets.py +4 -4
  17. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/theme/pygments_style.py +1 -1
  18. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_text.py +7 -7
  19. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/slides/test_chrome.py +8 -8
  20. manim_simplex-0.2.3/tests/test_public_api.py +13 -0
  21. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/theme/README.md +1 -1
  22. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/theme/test_tokens.py +11 -11
  23. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/uv.lock +1 -1
  24. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/.gitignore +0 -0
  25. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/.pre-commit-config.yaml +0 -0
  26. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/.python-version +0 -0
  27. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/LICENSE +0 -0
  28. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/examples/README.md +0 -0
  29. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/examples/glyph_map_demo.py +0 -0
  30. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/examples/manim.cfg +0 -0
  31. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/ruff.toml +0 -0
  32. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/README.md +0 -0
  33. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/__init__.py +0 -0
  34. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/animations.py +0 -0
  35. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/debug.py +0 -0
  36. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/defaults.py +0 -0
  37. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/dynamics.py +0 -0
  38. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/geometry.py +0 -0
  39. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/ghost_fade.py +0 -0
  40. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/glyph_map.py +0 -0
  41. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/region.py +0 -0
  42. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/scaling.py +0 -0
  43. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/engine/text.py +0 -0
  44. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/manifest.py +0 -0
  45. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/mobjects/README.md +0 -0
  46. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/mobjects/__init__.py +0 -0
  47. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/mobjects/outline.py +0 -0
  48. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/mobjects/paper.py +0 -0
  49. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/py.typed +0 -0
  50. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/section.py +0 -0
  51. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/slides/README.md +0 -0
  52. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/slides/__init__.py +0 -0
  53. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/slides/base.py +0 -0
  54. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/slides/chrome.py +0 -0
  55. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/slides/outline.py +0 -0
  56. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/theme/tokens.py +0 -0
  57. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/src/simplex/theme/web_css.py +0 -0
  58. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/README.md +0 -0
  59. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/__init__.py +0 -0
  60. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/README.md +0 -0
  61. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/__init__.py +0 -0
  62. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_animations.py +0 -0
  63. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_code.py +0 -0
  64. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_debug.py +0 -0
  65. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_dynamics.py +0 -0
  66. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_geometry.py +0 -0
  67. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_ghost_fade.py +0 -0
  68. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_glyph_map.py +0 -0
  69. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_region.py +0 -0
  70. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/engine/test_scaling.py +0 -0
  71. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/mobjects/README.md +0 -0
  72. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/mobjects/__init__.py +0 -0
  73. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/mobjects/test_graph.py +0 -0
  74. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/mobjects/test_outline.py +0 -0
  75. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/mobjects/test_paper.py +0 -0
  76. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/slides/README.md +0 -0
  77. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/slides/__init__.py +0 -0
  78. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/slides/test_base.py +0 -0
  79. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/slides/test_outline.py +0 -0
  80. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/test_manifest.py +0 -0
  81. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/test_section.py +0 -0
  82. {manim_simplex-0.2.2 → manim_simplex-0.2.3}/tests/theme/__init__.py +0 -0
  83. {manim_simplex-0.2.2 → 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.2
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
@@ -36,14 +36,14 @@ Description-Content-Type: text/markdown
36
36
  [![PyPI version](https://img.shields.io/pypi/v/manim-simplex.svg)](https://pypi.org/project/manim-simplex/)
37
37
  [![Python](https://img.shields.io/pypi/pyversions/manim-simplex.svg)](https://pypi.org/project/manim-simplex/)
38
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)
39
- [![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)
40
40
 
41
41
  `manim-simplex` is the Manim plugin layer for Simplex: theme tokens,
42
42
  slide bases, reusable mobjects, animation helpers, and the shared deck
43
43
  manifest schema used by the Simplex web builder.
44
44
 
45
- It is published as `manim-simplex` and exposes modules under the
46
- implicit namespace package `simplex`.
45
+ It is published as `manim-simplex` and exposes the `simplex` Manim authoring
46
+ API.
47
47
 
48
48
  ## Requirements
49
49
 
@@ -94,15 +94,14 @@ color, and enables section JSON output.
94
94
  ```python
95
95
  from manim import ORIGIN, MathTex, Write
96
96
 
97
- from simplex.slides import BaseSlide, make_chrome
98
- from simplex.theme import presets
97
+ from simplex import BaseSlide, make_chrome, presets
99
98
 
100
99
 
101
100
  class HelloSlide(BaseSlide):
102
101
  def setup(self) -> None:
103
102
  super().setup()
104
103
  chrome = make_chrome(
105
- presets.DASTIMATOR_DARK,
104
+ presets.SIMPLEX_DARK,
106
105
  self.region,
107
106
  header="Hello, Simplex",
108
107
  )
@@ -142,10 +141,10 @@ uv run manim-slides present HelloSlide
142
141
  | `simplex.plugin` | `activate()` entry point used by Manim. |
143
142
  | `simplex.slides` | `BaseSlide`, `OutlineScene`, `OutlinePart`, `Chrome`, `make_chrome`. |
144
143
  | `simplex.engine` | `Region`, `Remove`, `clear_scene`, `exit_for`, `register_exit`, `set_exit_animation`, `HighlightResult`, `apply_theme_defaults`. |
145
- | `simplex.mobjects` | `Node`, `Edge`, `ArrayMob`, `ArrayEntry`, `ArrayPointer`, `OutlineProgressBar`. |
144
+ | `simplex.mobjects` | `Node`, `Edge`, `ArrayMob`, `ArrayEntry`, `ArrayPointer`, `OutlineProgressBar`, `Paper`, `ShowPaper`, `DismissPaper`, `PickPage`. |
146
145
  | `simplex.theme` | `Theme`, `Palette`, `Typography`, `Spacing`, `Motion`, `LatexProfile`, `WebPalette`, `active_theme`, `get_active_theme`, `presets`, `render_web_css`. |
147
146
  | `simplex.section` | `SimplexSectionType`, the section strings written into Manim section JSON. |
148
- | `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`. |
149
148
 
150
149
  Additional focused helpers live in submodules such as
151
150
  `simplex.engine.glyph_map`, `simplex.engine.code`,
@@ -155,7 +154,7 @@ Additional focused helpers live in submodules such as
155
154
  ## Slide Hierarchy
156
155
 
157
156
  `BaseSlide.next_slide` writes Simplex section types into Manim's native
158
- section JSON. The `simplex-py` web builder later reconciles those
157
+ section JSON. The `simplex-web` builder later reconciles those
159
158
  sections with manim-slides metadata.
160
159
 
161
160
  ```python
@@ -178,15 +177,14 @@ web portal.
178
177
  ```python
179
178
  from manim import Tex
180
179
 
181
- from simplex.theme import presets
182
- from simplex.theme.context import active_theme
180
+ from simplex import active_theme, presets
183
181
 
184
182
 
185
183
  with active_theme(presets.ACADEMIC_LIGHT):
186
184
  label = Tex("This Tex uses the academic light palette.")
187
185
  ```
188
186
 
189
- Available presets include `DASTIMATOR_DARK` and `ACADEMIC_LIGHT`.
187
+ Available presets include `SIMPLEX_DARK` and `ACADEMIC_LIGHT`.
190
188
 
191
189
  ## Outline Slides
192
190
 
@@ -196,8 +194,7 @@ slide with progress indicators.
196
194
  ```python
197
195
  from manim import Circle, Square, Tex
198
196
 
199
- from simplex.engine.text import Caption
200
- from simplex.slides import OutlinePart, OutlineScene
197
+ from simplex import Caption, OutlinePart, OutlineScene
201
198
 
202
199
 
203
200
  class Outline(OutlineScene):
@@ -226,21 +223,22 @@ uv run manim-slides render examples/outline_slide.py OutlineDemo
226
223
  The examples directory has its own `manim.cfg`, so the Simplex plugin is
227
224
  enabled when commands are run from the repository root.
228
225
 
229
- ## Relationship To `simplex-py`
226
+ ## Relationship To `simplex-web`
230
227
 
231
228
  Simplex is split into two PyPI distributions:
232
229
 
233
230
  | Distribution | Import namespace | Purpose |
234
231
  | --- | --- | --- |
235
232
  | `manim-simplex` | `simplex.*` | Manim plugin, slide bases, theme, mobjects, manifest schema. |
236
- | `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. |
237
234
 
238
- Both wheels intentionally contribute to the same PEP 420 namespace. This
239
- package does not ship `simplex/__init__.py`; neither should downstream
240
- 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.
241
239
 
242
240
  Install only `manim-simplex` if you want to render scenes and slides.
243
- 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.
244
242
 
245
243
  ## Development
246
244
 
@@ -277,7 +275,7 @@ Publishing. To release a new version:
277
275
  1. Update `version` in `pyproject.toml`.
278
276
  2. Move changelog entries under a dated release heading.
279
277
  3. Commit the release prep.
280
- 4. Push an annotated tag such as `v0.2.1`.
278
+ 4. Push an annotated tag such as `v0.2.3`.
281
279
 
282
280
  The `Publish to PyPI` workflow builds an sdist and wheel, checks both
283
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")
@@ -51,7 +51,7 @@ license-files = ["LICENSE"]
51
51
  name = "manim-simplex"
52
52
  readme = "README.md"
53
53
  requires-python = ">=3.13"
54
- version = "0.2.2"
54
+ version = "0.2.3"
55
55
 
56
56
  [project.entry-points."manim.plugins"]
57
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
@@ -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
  """
@@ -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
@@ -25,7 +25,7 @@ Theme selection priority:
25
25
  2. ``SIMPLEX_THEME`` environment variable -- the deck.toml ``theme`` name
26
26
  propagated across the ``manim-slides render`` subprocess by
27
27
  ``simplex.render.runner``.
28
- 3. ``DASTIMATOR_DARK`` -- the package default.
28
+ 3. ``SIMPLEX_DARK`` -- the package default.
29
29
  """
30
30
 
31
31
  from __future__ import annotations
@@ -36,7 +36,7 @@ import os
36
36
  def _resolve_theme(): # type: ignore[no-untyped-def]
37
37
  """Pick the theme that should drive Manim defaults for this process."""
38
38
  from simplex.theme.context import _active
39
- from simplex.theme.presets import DASTIMATOR_DARK, PRESETS
39
+ from simplex.theme.presets import PRESETS, SIMPLEX_DARK
40
40
 
41
41
  # In-process context (a parent that did ``with active_theme(t): ...``)
42
42
  # wins; env-var fallback handles cross-process propagation.
@@ -45,7 +45,7 @@ def _resolve_theme(): # type: ignore[no-untyped-def]
45
45
  env_name = os.environ.get("SIMPLEX_THEME")
46
46
  if env_name and env_name in PRESETS:
47
47
  return PRESETS[env_name]
48
- return DASTIMATOR_DARK
48
+ return SIMPLEX_DARK
49
49
 
50
50
 
51
51
  def activate() -> None:
@@ -6,9 +6,9 @@ palette) plus a ContextVar-based active-theme registry.
6
6
  ## Public surface
7
7
 
8
8
  - `Theme`, `Palette`, `Typography`, `Spacing`, `Motion`, `LatexProfile`, `WebPalette`
9
- - `presets.DASTIMATOR_DARK`, `presets.ACADEMIC_LIGHT`, `presets.get(name)`
9
+ - `presets.SIMPLEX_DARK`, `presets.ACADEMIC_LIGHT`, `presets.get(name)`
10
10
  - `active_theme(theme)` -- context manager
11
- - `get_active_theme()` -- read the current theme (falls back to `DASTIMATOR_DARK`)
11
+ - `get_active_theme()` -- read the current theme (falls back to `SIMPLEX_DARK`)
12
12
  - `render_web_css(palette)` -- emits a `:root { --simplex-* }` block for the portal and RevealJS pages
13
13
  - `pygments_style.DarculaStyle`, `register_darcula(name="darcula")`
14
14
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  from simplex.theme import presets
4
4
  from simplex.theme.context import active_theme, get_active_theme
5
+ from simplex.theme.presets import SIMPLEX_DARK
5
6
  from simplex.theme.tokens import (
6
7
  LatexProfile,
7
8
  Motion,
@@ -14,6 +15,7 @@ from simplex.theme.tokens import (
14
15
  from simplex.theme.web_css import render_web_css
15
16
 
16
17
  __all__ = [
18
+ "SIMPLEX_DARK",
17
19
  "LatexProfile",
18
20
  "Motion",
19
21
  "Palette",
@@ -20,10 +20,10 @@ def active_theme(theme: Theme) -> Generator[Theme]:
20
20
 
21
21
 
22
22
  def get_active_theme() -> Theme:
23
- """Return the active theme, falling back to DASTIMATOR_DARK."""
23
+ """Return the active theme, falling back to SIMPLEX_DARK."""
24
24
  theme = _active.get()
25
25
  if theme is None:
26
- from simplex.theme.presets import DASTIMATOR_DARK
26
+ from simplex.theme.presets import SIMPLEX_DARK
27
27
 
28
- return DASTIMATOR_DARK
28
+ return SIMPLEX_DARK
29
29
  return theme
@@ -1,4 +1,4 @@
1
- """Preset Theme instances seeded from Dastimator's consts.py."""
1
+ """Preset Simplex theme instances."""
2
2
 
3
3
  from simplex.theme.tokens import LatexProfile, Palette, Theme, Typography, WebPalette
4
4
 
@@ -13,8 +13,8 @@ _COMPACT_DISPLAY_PREAMBLE = (
13
13
  "\n"
14
14
  )
15
15
 
16
- DASTIMATOR_DARK: Theme = Theme(
17
- name="dastimator_dark",
16
+ SIMPLEX_DARK: Theme = Theme(
17
+ name="simplex_dark",
18
18
  palette=Palette(
19
19
  background="#242424",
20
20
  font="#FFFFFF",
@@ -74,7 +74,7 @@ ACADEMIC_LIGHT: Theme = Theme(
74
74
  )
75
75
 
76
76
  PRESETS: dict[str, Theme] = {
77
- DASTIMATOR_DARK.name: DASTIMATOR_DARK,
77
+ SIMPLEX_DARK.name: SIMPLEX_DARK,
78
78
  ACADEMIC_LIGHT.name: ACADEMIC_LIGHT,
79
79
  }
80
80
 
@@ -29,7 +29,7 @@ def register_darcula(style_name: str = "darcula") -> None:
29
29
 
30
30
 
31
31
  class DarculaStyle(Style):
32
- """Pygments scheme inspired by JetBrains Darcula, ported from Dastimator."""
32
+ """Pygments scheme inspired by JetBrains Darcula, ported from Simplex."""
33
33
 
34
34
  background_color = "#111111"
35
35
  highlight_color = "#333333"
@@ -11,19 +11,19 @@ from simplex.theme.context import active_theme
11
11
 
12
12
 
13
13
  def test_caption_uses_caption_font_size() -> None:
14
- with active_theme(presets.DASTIMATOR_DARK) as theme:
14
+ with active_theme(presets.SIMPLEX_DARK) as theme:
15
15
  mob = Caption("hi")
16
16
  assert mob.font_size == theme.typography.caption
17
17
 
18
18
 
19
19
  def test_tex_page_default_width_is_20cm() -> None:
20
- with active_theme(presets.DASTIMATOR_DARK):
20
+ with active_theme(presets.SIMPLEX_DARK):
21
21
  mob = TexPage("body")
22
22
  assert mob.tex_environment == "{minipage}{20.0cm}"
23
23
 
24
24
 
25
25
  def test_tex_page_width_cm_kwarg_overrides_default() -> None:
26
- with active_theme(presets.DASTIMATOR_DARK):
26
+ with active_theme(presets.SIMPLEX_DARK):
27
27
  mob = TexPage("body", width_cm=10.5)
28
28
  assert mob.tex_environment == "{minipage}{10.5cm}"
29
29
 
@@ -32,7 +32,7 @@ def test_tex_page_subclass_class_attr_overrides_default() -> None:
32
32
  class WidePage(TexPage):
33
33
  width_cm = 12.0
34
34
 
35
- with active_theme(presets.DASTIMATOR_DARK):
35
+ with active_theme(presets.SIMPLEX_DARK):
36
36
  mob = WidePage("body")
37
37
  assert mob.tex_environment == "{minipage}{12.0cm}"
38
38
 
@@ -41,7 +41,7 @@ def test_tex_page_kwarg_wins_over_subclass_attr() -> None:
41
41
  class WidePage(TexPage):
42
42
  width_cm = 12.0
43
43
 
44
- with active_theme(presets.DASTIMATOR_DARK):
44
+ with active_theme(presets.SIMPLEX_DARK):
45
45
  mob = WidePage("body", width_cm=6.5)
46
46
  assert mob.tex_environment == "{minipage}{6.5cm}"
47
47
 
@@ -55,13 +55,13 @@ def test_plain_tex_picks_up_body_font_size_after_apply_defaults() -> None:
55
55
  """
56
56
  from manim import Tex
57
57
 
58
- with active_theme(presets.DASTIMATOR_DARK) as theme:
58
+ with active_theme(presets.SIMPLEX_DARK) as theme:
59
59
  apply_theme_defaults(theme)
60
60
  mob = Tex("hi")
61
61
  assert mob.font_size == theme.typography.body
62
62
 
63
63
 
64
64
  def test_explicit_font_size_wins_over_theme_default() -> None:
65
- with active_theme(presets.DASTIMATOR_DARK):
65
+ with active_theme(presets.SIMPLEX_DARK):
66
66
  mob = Caption("hi", font_size=12)
67
67
  assert mob.font_size == 12
@@ -11,7 +11,7 @@ from simplex.theme import presets
11
11
 
12
12
  def test_chrome_with_header_only() -> None:
13
13
  region = Region.full_frame()
14
- chrome = make_chrome(presets.DASTIMATOR_DARK, region, header="Title")
14
+ chrome = make_chrome(presets.SIMPLEX_DARK, region, header="Title")
15
15
  assert isinstance(chrome, Chrome)
16
16
  assert "header" in chrome.mobjects
17
17
  assert "footer" not in chrome.mobjects
@@ -20,29 +20,29 @@ def test_chrome_with_header_only() -> None:
20
20
  def test_chrome_does_not_mutate_input_region() -> None:
21
21
  region = Region.full_frame()
22
22
  original = (region.top, region.bottom, region.left, region.right)
23
- make_chrome(presets.DASTIMATOR_DARK, region, header="Title", footer="Footer")
23
+ make_chrome(presets.SIMPLEX_DARK, region, header="Title", footer="Footer")
24
24
  assert (region.top, region.bottom, region.left, region.right) == original
25
25
 
26
26
 
27
27
  def test_chrome_body_region_is_shrunk_below_header() -> None:
28
28
  region = Region.full_frame()
29
- chrome = make_chrome(presets.DASTIMATOR_DARK, region, header="Title")
30
- expected_top = region.top - presets.DASTIMATOR_DARK.spacing.header_height
29
+ chrome = make_chrome(presets.SIMPLEX_DARK, region, header="Title")
30
+ expected_top = region.top - presets.SIMPLEX_DARK.spacing.header_height
31
31
  assert chrome.body_region.top == pytest.approx(expected_top)
32
32
  assert chrome.body_region.bottom == pytest.approx(region.bottom)
33
33
 
34
34
 
35
35
  def test_chrome_body_region_is_shrunk_above_footer() -> None:
36
36
  region = Region.full_frame()
37
- chrome = make_chrome(presets.DASTIMATOR_DARK, region, footer="cite")
38
- expected_bottom = region.bottom + presets.DASTIMATOR_DARK.spacing.footer_height
37
+ chrome = make_chrome(presets.SIMPLEX_DARK, region, footer="cite")
38
+ expected_bottom = region.bottom + presets.SIMPLEX_DARK.spacing.footer_height
39
39
  assert chrome.body_region.bottom == pytest.approx(expected_bottom)
40
40
  assert chrome.body_region.top == pytest.approx(region.top)
41
41
 
42
42
 
43
43
  def test_chrome_empty_call_yields_no_mobjects_and_unchanged_region() -> None:
44
44
  region = Region.full_frame()
45
- chrome = make_chrome(presets.DASTIMATOR_DARK, region)
45
+ chrome = make_chrome(presets.SIMPLEX_DARK, region)
46
46
  assert chrome.mobjects == {}
47
47
  assert chrome.body_region.top == pytest.approx(region.top)
48
48
  assert chrome.body_region.bottom == pytest.approx(region.bottom)
@@ -50,6 +50,6 @@ def test_chrome_empty_call_yields_no_mobjects_and_unchanged_region() -> None:
50
50
 
51
51
  def test_chrome_unpacks_as_namedtuple() -> None:
52
52
  region = Region.full_frame()
53
- mobs, body = make_chrome(presets.DASTIMATOR_DARK, region, header="t")
53
+ mobs, body = make_chrome(presets.SIMPLEX_DARK, region, header="t")
54
54
  assert "header" in mobs
55
55
  assert body.top < region.top
@@ -0,0 +1,13 @@
1
+ """Top-level authoring imports."""
2
+
3
+ from simplex import SIMPLEX_DARK, BaseSlide, Caption, Paper, ShowPaper, make_chrome, presets
4
+ from simplex.slides import BaseSlide as BaseSlideFromSlides
5
+
6
+
7
+ def test_top_level_authoring_imports() -> None:
8
+ assert BaseSlide is BaseSlideFromSlides
9
+ assert Caption.__name__ == "Caption"
10
+ assert Paper.__name__ == "Paper"
11
+ assert ShowPaper.__name__ == "ShowPaper"
12
+ assert SIMPLEX_DARK is presets.SIMPLEX_DARK
13
+ assert callable(make_chrome)
@@ -1,6 +1,6 @@
1
1
  # tests/theme/
2
2
 
3
- Tests for `simplex.theme`: frozen-token invariants, preset values seeded from Dastimator, ContextVar push/pop.
3
+ Tests for `simplex.theme`: frozen-token invariants, preset values seeded from Simplex, ContextVar push/pop.
4
4
 
5
5
  ## Don't
6
6
 
@@ -7,44 +7,44 @@ from simplex.theme import presets
7
7
  from simplex.theme.context import active_theme, get_active_theme
8
8
 
9
9
 
10
- def test_dastimator_palette_background() -> None:
11
- assert presets.DASTIMATOR_DARK.palette.background == "#242424"
10
+ def test_simplex_palette_background() -> None:
11
+ assert presets.SIMPLEX_DARK.palette.background == "#242424"
12
12
 
13
13
 
14
- def test_dastimator_latex_has_no_legacy_environments() -> None:
14
+ def test_simplex_latex_has_no_legacy_environments() -> None:
15
15
  """The ``{minipage}{20cm}`` env moved from the theme into ``TexPage`` --
16
16
  the LaTeX profile no longer carries it. Tests guard against regression
17
17
  that would split the same magic string across multiple sources again.
18
18
  """
19
- assert "definition" not in presets.DASTIMATOR_DARK.latex.environments
19
+ assert "definition" not in presets.SIMPLEX_DARK.latex.environments
20
20
 
21
21
 
22
22
  def test_chrome_buffs_have_sensible_defaults() -> None:
23
- assert presets.DASTIMATOR_DARK.spacing.header_buff > 0
24
- assert presets.DASTIMATOR_DARK.spacing.footer_buff > 0
23
+ assert presets.SIMPLEX_DARK.spacing.header_buff > 0
24
+ assert presets.SIMPLEX_DARK.spacing.footer_buff > 0
25
25
 
26
26
 
27
27
  def test_preamble_contains_compact_display() -> None:
28
- preamble = presets.DASTIMATOR_DARK.latex.preamble
28
+ preamble = presets.SIMPLEX_DARK.latex.preamble
29
29
  assert "abovedisplayskip" in preamble
30
30
  assert "belowdisplayskip" in preamble
31
31
 
32
32
 
33
33
  def test_palette_frozen() -> None:
34
34
  with pytest.raises(ValidationError):
35
- presets.DASTIMATOR_DARK.palette.background = "#000000" # type: ignore[misc]
35
+ presets.SIMPLEX_DARK.palette.background = "#000000" # type: ignore[misc]
36
36
 
37
37
 
38
38
  def test_theme_frozen() -> None:
39
39
  with pytest.raises(ValidationError):
40
- presets.DASTIMATOR_DARK.name = "other" # type: ignore[misc]
40
+ presets.SIMPLEX_DARK.name = "other" # type: ignore[misc]
41
41
 
42
42
 
43
43
  def test_context_push_pop_restores_default() -> None:
44
- assert get_active_theme() is presets.DASTIMATOR_DARK
44
+ assert get_active_theme() is presets.SIMPLEX_DARK
45
45
  with active_theme(presets.ACADEMIC_LIGHT) as t:
46
46
  assert get_active_theme() is t
47
- assert get_active_theme() is presets.DASTIMATOR_DARK
47
+ assert get_active_theme() is presets.SIMPLEX_DARK
48
48
 
49
49
 
50
50
  def test_presets_get_unknown_raises() -> None:
@@ -443,7 +443,7 @@ wheels = [
443
443
 
444
444
  [[package]]
445
445
  name = "manim-simplex"
446
- version = "0.2.2"
446
+ version = "0.2.3"
447
447
  source = { editable = "." }
448
448
  dependencies = [
449
449
  { name = "manim" },
File without changes
File without changes
File without changes