diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 65df2b8dda..cdf84ef892 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,7 +28,7 @@ repos: hooks: - id: pyupgrade name: Update code to new python versions - args: [--py37-plus] + args: [--py39-plus] - repo: https://github.com/pre-commit/pygrep-hooks rev: v1.10.0 hooks: diff --git a/manim/_config/__init__.py b/manim/_config/__init__.py index 4f0bef5179..18a57307b4 100644 --- a/manim/_config/__init__.py +++ b/manim/_config/__init__.py @@ -3,8 +3,9 @@ from __future__ import annotations import logging +from collections.abc import Generator from contextlib import contextmanager -from typing import Any, Generator +from typing import Any from .cli_colors import parse_cli_ctx from .logger_utils import make_logger diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 7fb8843eae..0316311778 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -20,9 +20,9 @@ import os import re import sys -from collections.abc import Mapping, MutableMapping +from collections.abc import Iterable, Iterator, Mapping, MutableMapping from pathlib import Path -from typing import TYPE_CHECKING, Any, ClassVar, Iterable, Iterator, NoReturn +from typing import TYPE_CHECKING, Any, ClassVar, NoReturn import numpy as np diff --git a/manim/animation/animation.py b/manim/animation/animation.py index d0fca1ec3e..042054b7ba 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -14,8 +14,9 @@ __all__ = ["Animation", "Wait", "override_animation"] +from collections.abc import Iterable, Sequence from copy import deepcopy -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from typing import TYPE_CHECKING, Callable from typing_extensions import Self diff --git a/manim/animation/composition.py b/manim/animation/composition.py index 65ab62832a..c5a756502f 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -3,7 +3,8 @@ from __future__ import annotations import types -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable import numpy as np diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 4e3fe5b98e..e6f7199bf2 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -76,7 +76,8 @@ def construct(self): import itertools as it -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable import numpy as np diff --git a/manim/animation/indication.py b/manim/animation/indication.py index ffc310718b..8e2c3996c3 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -25,6 +25,8 @@ def construct(self): """ +from __future__ import annotations + __all__ = [ "FocusOn", "Indicate", @@ -37,7 +39,8 @@ def construct(self): "Blink", ] -from typing import Callable, Iterable, Optional, Tuple, Type, Union +from collections.abc import Iterable +from typing import Callable import numpy as np @@ -93,11 +96,11 @@ def construct(self): def __init__( self, - focus_point: Union[np.ndarray, Mobject], + focus_point: np.ndarray | Mobject, opacity: float = 0.2, color: str = GREY, run_time: float = 2, - **kwargs + **kwargs, ) -> None: self.focus_point = focus_point self.color = color @@ -150,8 +153,8 @@ def __init__( mobject: Mobject, scale_factor: float = 1.2, color: str = YELLOW, - rate_func: Callable[[float, Optional[float]], np.ndarray] = there_and_back, - **kwargs + rate_func: Callable[[float, float | None], np.ndarray] = there_and_back, + **kwargs, ) -> None: self.color = color self.scale_factor = scale_factor @@ -217,7 +220,7 @@ def construct(self): def __init__( self, - point: Union[np.ndarray, Mobject], + point: np.ndarray | Mobject, line_length: float = 0.2, num_lines: int = 12, flash_radius: float = 0.1, @@ -225,7 +228,7 @@ def __init__( color: str = YELLOW, time_width: float = 1, run_time: float = 1.0, - **kwargs + **kwargs, ) -> None: if isinstance(point, Mobject): self.point = point.get_center() @@ -255,7 +258,7 @@ def create_lines(self) -> VGroup: lines.set_stroke(width=self.line_stroke_width) return lines - def create_line_anims(self) -> Iterable["ShowPassingFlash"]: + def create_line_anims(self) -> Iterable[ShowPassingFlash]: return [ ShowPassingFlash( line, @@ -301,11 +304,11 @@ def construct(self): """ - def __init__(self, mobject: "VMobject", time_width: float = 0.1, **kwargs) -> None: + def __init__(self, mobject: VMobject, time_width: float = 0.1, **kwargs) -> None: self.time_width = time_width super().__init__(mobject, remover=True, introducer=True, **kwargs) - def _get_bounds(self, alpha: float) -> Tuple[float]: + def _get_bounds(self, alpha: float) -> tuple[float]: tw = self.time_width upper = interpolate(0, 1 + tw, alpha) lower = upper - tw @@ -393,7 +396,7 @@ def __init__( time_width: float = 1, ripples: int = 1, run_time: float = 2, - **kwargs + **kwargs, ) -> None: x_min = mobject.get_left()[0] x_max = mobject.get_right()[0] @@ -459,7 +462,7 @@ def homotopy( y: float, z: float, t: float, - ) -> Tuple[float, float, float]: + ) -> tuple[float, float, float]: upper = interpolate(0, 1 + time_width, t) lower = upper - time_width relative_x = inverse_interpolate(x_min, x_max, x) @@ -509,10 +512,10 @@ def __init__( scale_value: float = 1.1, rotation_angle: float = 0.01 * TAU, n_wiggles: int = 6, - scale_about_point: Optional[np.ndarray] = None, - rotate_about_point: Optional[np.ndarray] = None, + scale_about_point: np.ndarray | None = None, + rotate_about_point: np.ndarray | None = None, run_time: float = 2, - **kwargs + **kwargs, ) -> None: self.scale_value = scale_value self.rotation_angle = rotation_angle @@ -593,7 +596,7 @@ def construct(self): def __init__( self, mobject: Mobject, - shape: Type = Rectangle, + shape: type = Rectangle, fade_in=False, fade_out=False, time_width=0.3, @@ -601,7 +604,7 @@ def __init__( color: ParsableManimColor = YELLOW, run_time=1, stroke_width=DEFAULT_STROKE_WIDTH, - **kwargs + **kwargs, ): if shape is Rectangle: frame = SurroundingRectangle( @@ -683,7 +686,7 @@ def __init__( time_off: float = 0.5, blinks: int = 1, hide_at_end: bool = False, - **kwargs + **kwargs, ): animations = [ UpdateFromFunc( diff --git a/manim/animation/rotation.py b/manim/animation/rotation.py index af21fdcbf5..7bdd42238a 100644 --- a/manim/animation/rotation.py +++ b/manim/animation/rotation.py @@ -4,7 +4,8 @@ __all__ = ["Rotating", "Rotate"] -from typing import TYPE_CHECKING, Callable, Sequence +from collections.abc import Sequence +from typing import TYPE_CHECKING, Callable import numpy as np diff --git a/manim/animation/specialized.py b/manim/animation/specialized.py index adc44ea1f1..99320f36d9 100644 --- a/manim/animation/specialized.py +++ b/manim/animation/specialized.py @@ -2,7 +2,8 @@ __all__ = ["Broadcast"] -from typing import Any, Sequence +from collections.abc import Sequence +from typing import Any from manim.animation.transform import Restore diff --git a/manim/animation/transform.py b/manim/animation/transform.py index 7607199d99..d4b9941399 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -28,7 +28,8 @@ import inspect import types -from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Any, Callable import numpy as np diff --git a/manim/camera/camera.py b/manim/camera/camera.py index fa36440a17..bf917b7e9e 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -8,8 +8,9 @@ import itertools as it import operator as op import pathlib +from collections.abc import Iterable from functools import reduce -from typing import Any, Callable, Iterable +from typing import Any, Callable import cairo import numpy as np diff --git a/manim/mobject/graph.py b/manim/mobject/graph.py index 9723e704cb..bc11ec69e6 100644 --- a/manim/mobject/graph.py +++ b/manim/mobject/graph.py @@ -8,8 +8,9 @@ ] import itertools as it +from collections.abc import Hashable, Iterable from copy import copy -from typing import TYPE_CHECKING, Any, Hashable, Iterable, Literal, Protocol, cast +from typing import TYPE_CHECKING, Any, Literal, Protocol, cast import networkx as nx import numpy as np diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 89e072d4b3..6315093f2c 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -13,7 +13,8 @@ import fractions as fr import numbers -from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence, TypeVar, overload +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Any, Callable, TypeVar, overload import numpy as np from typing_extensions import Self diff --git a/manim/mobject/graphing/functions.py b/manim/mobject/graphing/functions.py index aae20c2e59..8ed4b43c2e 100644 --- a/manim/mobject/graphing/functions.py +++ b/manim/mobject/graphing/functions.py @@ -5,7 +5,8 @@ __all__ = ["ParametricFunction", "FunctionGraph", "ImplicitFunction"] -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable import numpy as np from isosurfaces import plot_isoline diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index 3d70ca530b..63c8954b14 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -7,7 +7,8 @@ __all__ = ["NumberLine", "UnitInterval"] -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable if TYPE_CHECKING: from manim.mobject.geometry.tips import ArrowTip diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index 92fb7355e1..0f98620dc3 100644 --- a/manim/mobject/graphing/probability.py +++ b/manim/mobject/graphing/probability.py @@ -5,7 +5,7 @@ __all__ = ["SampleSpace", "BarChart"] -from typing import Iterable, MutableSequence, Sequence +from collections.abc import Iterable, MutableSequence, Sequence import numpy as np diff --git a/manim/mobject/graphing/scale.py b/manim/mobject/graphing/scale.py index e1f88398a1..b301d1ff15 100644 --- a/manim/mobject/graphing/scale.py +++ b/manim/mobject/graphing/scale.py @@ -1,7 +1,8 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING, Any, Iterable +from collections.abc import Iterable +from typing import TYPE_CHECKING, Any import numpy as np diff --git a/manim/mobject/matrix.py b/manim/mobject/matrix.py index 25eb9e580b..0921416383 100644 --- a/manim/mobject/matrix.py +++ b/manim/mobject/matrix.py @@ -40,7 +40,7 @@ def construct(self): import itertools as it -from typing import Iterable, Sequence +from collections.abc import Iterable, Sequence import numpy as np diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 9127c2a1d6..3369f3a241 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -14,9 +14,10 @@ import sys import types import warnings +from collections.abc import Iterable from functools import partialmethod, reduce from pathlib import Path -from typing import TYPE_CHECKING, Callable, Iterable, Literal +from typing import TYPE_CHECKING, Callable, Literal import numpy as np diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index d64f9c0211..38c65cdc89 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -5,9 +5,9 @@ import itertools as it import random import sys +from collections.abc import Iterable, Sequence from functools import partialmethod, wraps from math import ceil -from typing import Iterable, Sequence import moderngl import numpy as np diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index a7132f0bbe..bcf608909f 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -1,7 +1,7 @@ from __future__ import annotations +from collections.abc import Iterable from pathlib import Path -from typing import Iterable import moderngl import numpy as np diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 30d47b8882..d668e3a2b1 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -2,8 +2,9 @@ import itertools as it import operator as op +from collections.abc import Iterable, Sequence from functools import reduce, wraps -from typing import Callable, Iterable, Sequence +from typing import Callable import moderngl import numpy as np diff --git a/manim/mobject/svg/brace.py b/manim/mobject/svg/brace.py index 788225bb84..17429bb729 100644 --- a/manim/mobject/svg/brace.py +++ b/manim/mobject/svg/brace.py @@ -4,7 +4,7 @@ __all__ = ["Brace", "BraceLabel", "ArcBrace", "BraceText", "BraceBetweenPoints"] -from typing import Sequence +from collections.abc import Sequence import numpy as np import svgelements as se diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 1a1beffad1..4edc163972 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -65,7 +65,8 @@ def construct(self): import itertools as it -from typing import Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import Callable from manim.mobject.geometry.line import Line from manim.mobject.geometry.polygram import Polygon diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index ae244e1942..6a0eb45a82 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -4,7 +4,7 @@ __all__ = ["DecimalNumber", "Integer", "Variable"] -from typing import Sequence +from collections.abc import Sequence import numpy as np diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 029b5ce009..449b21d385 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -26,9 +26,9 @@ import itertools as it import operator as op import re +from collections.abc import Iterable from functools import reduce from textwrap import dedent -from typing import Iterable from manim import config, logger from manim.constants import * diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index f70af7a61a..971200a117 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -58,10 +58,10 @@ def construct(self): import hashlib import os import re +from collections.abc import Iterable, Sequence from contextlib import contextmanager from itertools import chain from pathlib import Path -from typing import Iterable, Sequence import manimpango import numpy as np @@ -412,7 +412,7 @@ def construct(self): """ @staticmethod - @functools.lru_cache(maxsize=None) + @functools.cache def font_list() -> list[str]: return manimpango.list_fonts() @@ -1155,7 +1155,7 @@ def construct(self): """ @staticmethod - @functools.lru_cache(maxsize=None) + @functools.cache def font_list() -> list[str]: return manimpango.list_fonts() diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 07877e26ff..540a99bfe9 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -19,7 +19,8 @@ "Torus", ] -from typing import Any, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import Any, Callable import numpy as np from typing_extensions import Self diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 6a2fffd2cb..cf7ce9a6b4 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -14,16 +14,8 @@ import itertools as it import sys -from typing import ( - TYPE_CHECKING, - Callable, - Generator, - Hashable, - Iterable, - Literal, - Mapping, - Sequence, -) +from collections.abc import Generator, Hashable, Iterable, Mapping, Sequence +from typing import TYPE_CHECKING, Callable, Literal import numpy as np from PIL.Image import Image diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 44432bbd23..eab0117fdd 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -10,8 +10,9 @@ import itertools as it import random +from collections.abc import Iterable, Sequence from math import ceil, floor -from typing import Callable, Iterable, Sequence +from typing import Callable import numpy as np from PIL import Image diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index 86324fda29..b97fa50299 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -15,7 +15,8 @@ if typing.TYPE_CHECKING: import types - from typing import Any, Iterable + from collections.abc import Iterable + from typing import Any from manim.animation.animation import Animation from manim.scene.scene import Scene diff --git a/manim/renderer/opengl_renderer.py b/manim/renderer/opengl_renderer.py index 1e4da96b8b..5a4d692657 100644 --- a/manim/renderer/opengl_renderer.py +++ b/manim/renderer/opengl_renderer.py @@ -3,13 +3,9 @@ import itertools as it import sys import time +from functools import cached_property from typing import Any -if sys.version_info < (3, 8): - from backports.cached_property import cached_property -else: - from functools import cached_property - import moderngl import numpy as np from PIL import Image diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 07a2411733..06dd15fc90 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -52,7 +52,8 @@ from ..utils.iterables import list_difference_update, list_update if TYPE_CHECKING: - from typing import Callable, Iterable + from collections.abc import Iterable + from typing import Callable class RerunSceneHandler(FileSystemEventHandler): diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index 8f49393d03..919f3cb2c6 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -6,7 +6,7 @@ import warnings -from typing import Iterable, Sequence +from collections.abc import Iterable, Sequence import numpy as np diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index d97a2545e1..3f2bac86bc 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -31,8 +31,9 @@ ] +from collections.abc import Sequence from functools import reduce -from typing import Any, Callable, Sequence, overload +from typing import Any, Callable, overload import numpy as np import numpy.typing as npt diff --git a/manim/utils/color/__init__.py b/manim/utils/color/__init__.py index 6e0f36ff44..cfffc4edc9 100644 --- a/manim/utils/color/__init__.py +++ b/manim/utils/color/__init__.py @@ -53,6 +53,6 @@ from .core import * from .manim_colors import * -_all_color_dict: Dict[str, ManimColor] = { +_all_color_dict: dict[str, ManimColor] = { k: v for k, v in globals().items() if isinstance(v, ManimColor) } diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 767fdcf576..d2312c6f53 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -27,7 +27,8 @@ # logger = _config.logger import random import re -from typing import Any, Sequence, TypeVar, Union, overload +from collections.abc import Sequence +from typing import Any, TypeVar, Union, overload import numpy as np import numpy.typing as npt diff --git a/manim/utils/color/manim_colors.py b/manim/utils/color/manim_colors.py index 42c93985e6..863cb5a99f 100644 --- a/manim/utils/color/manim_colors.py +++ b/manim/utils/color/manim_colors.py @@ -215,6 +215,6 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): LOGO_RED = ManimColor("#E07A5F") LOGO_BLACK = ManimColor("#343434") -_all_manim_colors: List[ManimColor] = [ +_all_manim_colors: list[ManimColor] = [ x for x in globals().values() if isinstance(x, ManimColor) ] diff --git a/manim/utils/commands.py b/manim/utils/commands.py index 65a64db8cd..8a15889510 100644 --- a/manim/utils/commands.py +++ b/manim/utils/commands.py @@ -1,9 +1,9 @@ from __future__ import annotations import os +from collections.abc import Generator from pathlib import Path from subprocess import run -from typing import Generator import av diff --git a/manim/utils/deprecation.py b/manim/utils/deprecation.py index 68788a75e7..ece4d40340 100644 --- a/manim/utils/deprecation.py +++ b/manim/utils/deprecation.py @@ -7,7 +7,8 @@ import inspect import re -from typing import Any, Callable, Iterable +from collections.abc import Iterable +from typing import Any, Callable from decorator import decorate, decorator diff --git a/manim/utils/family.py b/manim/utils/family.py index 21e100a4b2..17b39f347f 100644 --- a/manim/utils/family.py +++ b/manim/utils/family.py @@ -1,7 +1,7 @@ from __future__ import annotations import itertools as it -from typing import Iterable +from collections.abc import Iterable from ..mobject.mobject import Mobject from ..utils.iterables import remove_list_redundancies diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index 9a688561ac..cf6f664f98 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -19,18 +19,15 @@ ] import itertools as it -from typing import ( - TYPE_CHECKING, - Callable, +from collections.abc import ( Collection, Generator, Hashable, Iterable, Reversible, Sequence, - TypeVar, - overload, ) +from typing import TYPE_CHECKING, Callable, TypeVar, overload import numpy as np diff --git a/manim/utils/parameter_parsing.py b/manim/utils/parameter_parsing.py index 458885a5b3..7966906bb1 100644 --- a/manim/utils/parameter_parsing.py +++ b/manim/utils/parameter_parsing.py @@ -1,7 +1,8 @@ from __future__ import annotations +from collections.abc import Iterable from types import GeneratorType -from typing import Iterable, TypeVar +from typing import TypeVar T = TypeVar("T") diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 3e90deef21..3df699beca 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -3,7 +3,8 @@ from __future__ import annotations import itertools as it -from typing import TYPE_CHECKING, Sequence +from collections.abc import Sequence +from typing import TYPE_CHECKING import numpy as np from mapbox_earcut import triangulate_float32 as earcut diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index 6d9a186cbe..b18f81e637 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -12,8 +12,8 @@ import os import re import unicodedata +from collections.abc import Iterable from pathlib import Path -from typing import Iterable from manim.utils.tex import TexTemplate