Skip to content

Manim Extensions 1.0.5

Latest

Choose a tag to compare

@ExploreMaths ExploreMaths released this 03 Oct 14:56
· 175 commits to main since this release

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.py and a manually triggered sync-vendored workflow 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, and weighted_line — plus manim-nerdfont-icons 1.0.2, vendored as manim_extensions.utils.nerdfont because its PyPI metadata pins manim>=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 an all extra; the base install is now just manim + numpy, and every heavier dependency is lazy-imported via the new manim_extensions.utils.deps.require helper whose error names the exact pip 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-latest job that upgrades to the newest manim release and runs the full suite (turning manim>=0.21.0 from a claim into a tested guarantee); a docs-cache workflow that pre-renders every doc example at high quality into the rtd-cache branch (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.py and validate-relative-imports / validate-docstrings / validate-refs jobs 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-annotations CI 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 TypeWriter from 2 seconds to 0.1 seconds. The old default stretched a typical line of text over tens of seconds; every documentation example already overrode it.
  • ChineseMathTex now defaults tex_to_color_map to None instead of a shared mutable {}, so instances no longer risk mutating each other's colour map.
  • Raised the minimum Manim version from >=0.19.1 to >=0.21.0 and migrated the table module from manimlib (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__.py across 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 numpydoc Parameters (64 sections across 16 files) and added a --fix mode 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.py version synced to 1.0.5 and the changelog gained a sphinx-design Latest badge.
  • RubiksCube doc examples now use the default realistic colour scheme instead of an ad-hoc palette.

Removed

  • Removed the [tool.flake8] section from pyproject.toml. Flake8 does not read pyproject.toml; the section was dead configuration, and CI passes every flake8 option on the command line.

Fixed

  • Fixed qr_codes/__init__.py importing a nonexistent QRCode class and the root __init__.py importing a nonexistent ml module — both broke import manim_extensions.
  • Fixed manim's utils namespace 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 / ADASDiagram numbered_eq regressions.
  • Fixed CubeMove face turns being strictly linear: manim 0.21 expects subclasses to apply rate_func themselves, 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 Bayan default is replaced by fontconfig-based auto-resolution (Amiri/Scheherazade/Noto Naskh Arabic...).
  • Latent undefined-name bugs surfaced by removing star imports: NeuralNetworkLayer quoted annotations now import the real base class; leaf_child_index typo; dead code after raise NotImplementedError(); an undefined transition_ids in the nondeterministic-automata path; missing functools.wraps, plt, manim_version, and svg2paths imports.
  • 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.py and manim_directive.py.
  • Fixed CI authentication and incremental seeding for the docs-cache workflow, and made tests skip gracefully when optional extras (sklearn, the manim-mobject-svg plugin on Python 3.13+) are absent.
  • Fixed the gearbox module failing to import due to an incorrect Renderer type annotation on the radius parameter of involute_func and 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 NameError in five files (algorithm/array.py, chemistry/utils/utils.py, chemistry/manim_chemistry_molecule/mc_atom.py, chemistry/twoD/molecule.py, circuit/mobjects.py).