Repository navigation
Full Changelog: v1.0.4...v1.0.5
View on PyPI: https://pypi.org/project/manim-extensions/1.0.5/
What's Changed
Added
- Added
workflow/sync_vendored.pyand a manually triggeredsync-vendoredworkflow that pulls upstream updates for vendored modules, preserves local patches via a 3-way merge, reports every API surface change (added / removed functions, methods, classes, and parameters), and opens a pull request for review. - Bundled 10 additional third-party Manim plugins as subpackages:
arabic,chemistry,economics,fontawesome,machine_learning(ManimML),pymunk,qr_codes,svg_animations,table, andweighted_line— plusmanim-nerdfont-icons1.0.2, vendored asmanim_extensions.utils.nerdfontbecause its PyPI metadata pinsmanim>=0.19,<0.20(code and font licensed separately, font shipped as package data). - Added API reference documentation for every bundled package, with a single consolidated inheritance graph in the Reference Manual.
- Added a same-named optional extra for every module (
automata,chemistry,physics,rubikscube,meshes,video,qr,svg,ml, ...) and anallextra; the base install is now justmanim+numpy, and every heavier dependency is lazy-imported via the newmanim_extensions.utils.deps.requirehelper whose error names the exactpip install manim_extensions[...]command. A subprocess-based test blocks all optional packages via a meta-path finder and asserts the base package and all 250+ submodules still import. - Added
VENDORED.md: a registry of every vendored package's upstream repository, sync version, and local patches (also marked in-file with# patched:header lines). - Added comprehensive pytest coverage for previously untested modules (the suite grows from 331 to 421 tests), including import-resolution regressions, optional-dependency guards, and per-module behaviour.
- Added CI: a
manim-latestjob that upgrades to the newest manim release and runs the full suite (turningmanim>=0.21.0from a claim into a tested guarantee); adocs-cacheworkflow that pre-renders every doc example at high quality into thertd-cachebranch (content-hash incremental, pytest-style progress output) so Read the Docs reuses the media instead of timing out; and an RTD API trigger that also builds tagged versions after syncing them. - Added
workflow/check_relative_imports.pyandvalidate-relative-imports/validate-docstrings/validate-refsjobs to the Validate workflow. - Added full type annotations to every function and method parameter across the entire codebase (544+ functions in 128 files, ~1286 annotations), plus a
validate-type-annotationsCI job (scripts/check_type_annotations.py) to enforce the requirement going forward. - Added rounded-corner static cover images to the README.
Changed
- Changed the default character interval of
TypeWriterfrom2seconds to0.1seconds. The old default stretched a typical line of text over tens of seconds; every documentation example already overrode it. ChineseMathTexnow defaultstex_to_color_maptoNoneinstead of a shared mutable{}, so instances no longer risk mutating each other's colour map.- Raised the minimum Manim version from
>=0.19.1to>=0.21.0and migrated thetablemodule frommanimlib(ManimGL) to Manim Community Edition. - Replaced the type-specific geometry intersection helpers with a single generic
VMobjectInt. - Converted all intra-package absolute imports to relative imports, and banned
from manim import *outside__init__.pyacross the whole repository (165 files converted to explicit imports; the import-style checker was inverted accordingly). This also surfaced and fixed real latent bugs that star imports had masked from pyflakes (see Fixed). - Converted all Google-style
Args:docstring sections to numpydocParameters(64 sections across 16 files) and added a--fixmode to the docstring validator to keep it that way. - Normalised indexed labels in doc examples to LaTeX subscripts (
V0→V_0,ext{A1}→ext{A}_1,P{i+1}→P_{i+1}). - Reworked the docs build: examples are pre-rendered by CI and reused on RTD via a media cache; README cover media switched from GIFs to three rounded static images;
conf.pyversion synced to 1.0.5 and the changelog gained a sphinx-designLatestbadge. RubiksCubedoc examples now use the default realistic colour scheme instead of an ad-hoc palette.
Removed
- Removed the
[tool.flake8]section frompyproject.toml. Flake8 does not readpyproject.toml; the section was dead configuration, and CI passes every flake8 option on the command line.
Fixed
- Fixed
qr_codes/__init__.pyimporting a nonexistentQRCodeclass and the root__init__.pyimporting a nonexistentmlmodule — both brokeimport manim_extensions. - Fixed manim's
utilsnamespace shadowing the package's own utils submodules. - Fixed machine-learning empty-animation groups being unplayable on manim >= 0.21, and the pymunk 7 collision-API /
ADASDiagramnumbered_eqregressions. - Fixed
CubeMoveface turns being strictly linear: manim 0.21 expects subclasses to applyrate_functhemselves, so the rotation now eases in and out like the original ManimGL version. - Fixed the Arabic module failing on every non-macOS platform: the macOS-only
Al Bayandefault is replaced by fontconfig-based auto-resolution (Amiri/Scheherazade/Noto Naskh Arabic...). - Latent undefined-name bugs surfaced by removing star imports:
NeuralNetworkLayerquoted annotations now import the real base class;leaf_child_indextypo; dead code afterraise NotImplementedError(); an undefinedtransition_idsin the nondeterministic-automata path; missingfunctools.wraps,plt,manim_version, andsvg2pathsimports. - Fixed the wheel silently dropping runtime data files (mesh shaders, Font Awesome SVGs, compass assets, the Nerd Font TTF, REUSE sidecars), which broke non-editable installs.
- Repaired mojibake characters in
mesh.pyandmanim_directive.py. - Fixed CI authentication and incremental seeding for the docs-cache workflow, and made tests skip gracefully when optional extras (
sklearn, themanim-mobject-svgplugin on Python 3.13+) are absent. - Fixed the gearbox module failing to import due to an incorrect
Renderertype annotation on the radius parameter ofinvolute_funcand related functions. - Fixed missing closing parentheses in four docstring manim example blocks (MCMCAxes, MultiPendulum, GMAnimationBuilder, VMobjectInt) that caused the docs-cache render workflow to fail.
- Fixed misplaced type annotations that caused
NameErrorin five files (algorithm/array.py, chemistry/utils/utils.py, chemistry/manim_chemistry_molecule/mc_atom.py, chemistry/twoD/molecule.py, circuit/mobjects.py).