1
1
from __future__ import annotations
2
2
3
3
from abc import ABCMeta
4
+ from typing import TypeVar
4
5
5
6
from manim import config
6
7
from manim .mobject .opengl .opengl_mobject import OpenGLMobject
7
8
from manim .mobject .opengl .opengl_point_cloud_mobject import OpenGLPMobject
8
- from manim .mobject .opengl .opengl_three_dimensions import OpenGLSurface
9
+ from manim .mobject .opengl .opengl_surface import OpenGLSurface
9
10
from manim .mobject .opengl .opengl_vectorized_mobject import OpenGLVMobject
10
11
11
12
from ...constants import RendererType
12
13
13
14
__all__ = ["ConvertToOpenGL" ]
14
15
15
16
17
+ _Class = TypeVar ("_Class" , bound = type )
18
+
19
+
16
20
class ConvertToOpenGL (ABCMeta ):
17
21
"""Metaclass for swapping (V)Mobject with its OpenGL counterpart at runtime
18
22
depending on config.renderer. This metaclass should only need to be inherited
19
23
on the lowest order inheritance classes such as Mobject and VMobject.
20
24
"""
21
25
22
- _converted_classes = []
26
+ _converted_classes : list [ ConvertToOpenGL ] = []
23
27
24
- def __new__ (mcls , name , bases , namespace ):
28
+ def __new__ (
29
+ mcls : _Class , name : str , bases : tuple [type , ...], namespace : dict [str , object ]
30
+ ) -> _Class : # this would ideally be something like `_Type & OpenGLMobject`, but we don't have intersections yet
25
31
if config .renderer == RendererType .OPENGL :
26
32
# Must check class names to prevent
27
33
# cyclic importing.
@@ -40,6 +46,8 @@ def __new__(mcls, name, bases, namespace):
40
46
41
47
return super ().__new__ (mcls , name , bases , namespace )
42
48
43
- def __init__ (cls , name , bases , namespace ):
49
+ def __init__ (
50
+ cls , name : str , bases : tuple [type , ...], namespace : dict [str , object ]
51
+ ) -> None :
44
52
super ().__init__ (name , bases , namespace )
45
53
cls ._converted_classes .append (cls )
0 commit comments