4
4
5
5
__all__ = ["DecimalNumber" , "Integer" , "Variable" ]
6
6
7
- from collections .abc import Sequence
8
7
from typing import Any
9
8
10
9
import numpy as np
10
+ from typing_extensions import Self
11
11
12
12
from manim import config
13
13
from manim .constants import *
16
16
from manim .mobject .text .text_mobject import Text
17
17
from manim .mobject .types .vectorized_mobject import VMobject
18
18
from manim .mobject .value_tracker import ValueTracker
19
+ from manim .typing import Point3DLike
19
20
20
- string_to_mob_map = {}
21
-
22
- __all__ = ["DecimalNumber" , "Integer" , "Variable" ]
21
+ string_to_mob_map : dict [str , VMobject ] = {}
23
22
24
23
25
24
class DecimalNumber (VMobject , metaclass = ConvertToOpenGL ):
@@ -86,19 +85,19 @@ def __init__(
86
85
self ,
87
86
number : float = 0 ,
88
87
num_decimal_places : int = 2 ,
89
- mob_class : VMobject = MathTex ,
88
+ mob_class : type [ SingleStringMathTex ] = MathTex ,
90
89
include_sign : bool = False ,
91
90
group_with_commas : bool = True ,
92
91
digit_buff_per_font_unit : float = 0.001 ,
93
92
show_ellipsis : bool = False ,
94
93
unit : str | None = None , # Aligned to bottom unless it starts with "^"
95
94
unit_buff_per_font_unit : float = 0 ,
96
95
include_background_rectangle : bool = False ,
97
- edge_to_fix : Sequence [ float ] = LEFT ,
96
+ edge_to_fix : Point3DLike = LEFT ,
98
97
font_size : float = DEFAULT_FONT_SIZE ,
99
98
stroke_width : float = 0 ,
100
99
fill_opacity : float = 1.0 ,
101
- ** kwargs ,
100
+ ** kwargs : Any ,
102
101
):
103
102
super ().__init__ (** kwargs , fill_opacity = fill_opacity , stroke_width = stroke_width )
104
103
self .number = number
@@ -137,12 +136,13 @@ def __init__(
137
136
self .init_colors ()
138
137
139
138
@property
140
- def font_size (self ):
139
+ def font_size (self ) -> float :
141
140
"""The font size of the tex mobject."""
142
- return self .height / self .initial_height * self ._font_size
141
+ return_value : float = self .height / self .initial_height * self ._font_size
142
+ return return_value
143
143
144
144
@font_size .setter
145
- def font_size (self , font_val ) :
145
+ def font_size (self , font_val : float ) -> None :
146
146
if font_val <= 0 :
147
147
raise ValueError ("font_size must be greater than 0." )
148
148
elif self .height > 0 :
@@ -153,7 +153,7 @@ def font_size(self, font_val):
153
153
# font_size does not depend on current size.
154
154
self .scale (font_val / self .font_size )
155
155
156
- def _set_submobjects_from_number (self , number ) :
156
+ def _set_submobjects_from_number (self , number : float ) -> None :
157
157
self .number = number
158
158
self .submobjects = []
159
159
@@ -197,12 +197,12 @@ def _set_submobjects_from_number(self, number):
197
197
self .unit_sign .align_to (self , UP )
198
198
199
199
# track the initial height to enable scaling via font_size
200
- self .initial_height = self .height
200
+ self .initial_height : float = self .height
201
201
202
202
if self .include_background_rectangle :
203
203
self .add_background_rectangle ()
204
204
205
- def _get_num_string (self , number ) :
205
+ def _get_num_string (self , number : float | complex ) -> str :
206
206
if isinstance (number , complex ):
207
207
formatter = self ._get_complex_formatter ()
208
208
else :
@@ -215,17 +215,22 @@ def _get_num_string(self, number):
215
215
216
216
return num_string
217
217
218
- def _string_to_mob (self , string : str , mob_class : VMobject | None = None , ** kwargs ):
218
+ def _string_to_mob (
219
+ self ,
220
+ string : str ,
221
+ mob_class : type [SingleStringMathTex ] | None = None ,
222
+ ** kwargs : Any ,
223
+ ) -> VMobject :
219
224
if mob_class is None :
220
225
mob_class = self .mob_class
221
226
222
227
if string not in string_to_mob_map :
223
228
string_to_mob_map [string ] = mob_class (string , ** kwargs )
224
229
mob = string_to_mob_map [string ].copy ()
225
- mob .font_size = self ._font_size
230
+ mob .font_size = self ._font_size # type: ignore[attr-defined]
226
231
return mob
227
232
228
- def _get_formatter (self , ** kwargs ) :
233
+ def _get_formatter (self , ** kwargs : Any ) -> str :
229
234
"""
230
235
Configuration is based first off instance attributes,
231
236
but overwritten by any kew word argument. Relevant
@@ -258,7 +263,7 @@ def _get_formatter(self, **kwargs):
258
263
],
259
264
)
260
265
261
- def _get_complex_formatter (self ):
266
+ def _get_complex_formatter (self ) -> str :
262
267
return "" .join (
263
268
[
264
269
self ._get_formatter (field_name = "0.real" ),
@@ -267,7 +272,7 @@ def _get_complex_formatter(self):
267
272
],
268
273
)
269
274
270
- def set_value (self , number : float ):
275
+ def set_value (self , number : float ) -> Self :
271
276
"""Set the value of the :class:`~.DecimalNumber` to a new number.
272
277
273
278
Parameters
@@ -304,10 +309,10 @@ def set_value(self, number: float):
304
309
self .init_colors ()
305
310
return self
306
311
307
- def get_value (self ):
312
+ def get_value (self ) -> float :
308
313
return self .number
309
314
310
- def increment_value (self , delta_t = 1 ) :
315
+ def increment_value (self , delta_t : float = 1 ) -> None :
311
316
self .set_value (self .get_value () + delta_t )
312
317
313
318
@@ -333,7 +338,7 @@ def __init__(
333
338
) -> None :
334
339
super ().__init__ (number = number , num_decimal_places = num_decimal_places , ** kwargs )
335
340
336
- def get_value (self ):
341
+ def get_value (self ) -> int :
337
342
return int (np .round (super ().get_value ()))
338
343
339
344
@@ -444,9 +449,9 @@ def __init__(
444
449
self ,
445
450
var : float ,
446
451
label : str | Tex | MathTex | Text | SingleStringMathTex ,
447
- var_type : DecimalNumber | Integer = DecimalNumber ,
452
+ var_type : type [ DecimalNumber | Integer ] = DecimalNumber ,
448
453
num_decimal_places : int = 2 ,
449
- ** kwargs ,
454
+ ** kwargs : Any ,
450
455
):
451
456
self .label = MathTex (label ) if isinstance (label , str ) else label
452
457
equals = MathTex ("=" ).next_to (self .label , RIGHT )
0 commit comments