Skip to content

Commit ed60277

Browse files
authored
Add type hints (#83)
2 parents 66f64e8 + 39b60fe commit ed60277

File tree

8 files changed

+54
-54
lines changed

8 files changed

+54
-54
lines changed

examples/custom_animations.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ def __init__(
2626
get_loc_at_time1,
2727
get_loc_at_time2,
2828
line_color=red,
29-
line_width=3,
30-
drawing_order=0,
31-
):
29+
line_width: int = 3,
30+
drawing_order: int = 0,
31+
) -> None:
3232
"""
3333
get_loc_at_time 1 and 2 represent the location of the 1st and 2nd
3434
endpoint of this lasso, respectively. They should take a single
@@ -42,11 +42,11 @@ def __init__(
4242
self.get_loc1 = get_loc_at_time1
4343
self.get_loc2 = get_loc_at_time2
4444

45-
def set_state(self, sim_time, get_xy):
45+
def set_state(self, sim_time, get_xy) -> None:
4646
self.xy1 = get_xy(*self.get_loc1(sim_time))
4747
self.xy2 = get_xy(*self.get_loc2(sim_time))
4848

49-
def draw_to_surface(self, surf):
49+
def draw_to_surface(self, surf) -> None:
5050
pygame.draw.line(surf, self.line_color, self.xy1, self.xy2, self.line_width)
5151

5252
# So long as we are passing LassoViz's in as part of the scene_viz
@@ -70,9 +70,9 @@ def __init__(
7070
frequency,
7171
time_window,
7272
label,
73-
drawing_order=0,
74-
image="images/train.png",
75-
):
73+
drawing_order: int = 0,
74+
image: str = "images/train.png",
75+
) -> None:
7676
self.clat, self.clon = tie_post
7777
self.lat_dist = lat_dist
7878
self.lon_dist = lon_dist

src/osmviz/animation.py

+21-21
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class SimViz:
7070
subclassed (or at least replicated).
7171
"""
7272

73-
def __init__(self, drawing_order=0):
73+
def __init__(self, drawing_order: int = 0) -> None:
7474
"""
7575
Base constructor for a SimViz.
7676
'drawingOrder' is used to specify the order in which this viz
@@ -151,13 +151,13 @@ class TrackingViz(SimViz):
151151

152152
def __init__(
153153
self,
154-
label,
155-
image,
154+
label: str,
155+
image: str,
156156
get_lat_lon_at_time_func,
157-
time_window,
158-
bounding_box,
159-
drawing_order=0,
160-
):
157+
time_window: tuple[float, float],
158+
bounding_box: tuple[float, float, float, float],
159+
drawing_order: int = 0,
160+
) -> None:
161161
"""
162162
Constructs a TrackingViz.
163163
Arguments:
@@ -189,15 +189,15 @@ def get_bounding_box(self):
189189
def get_label(self):
190190
return self.label
191191

192-
def set_state(self, sim_time, get_xy):
192+
def set_state(self, sim_time, get_xy) -> None:
193193
self.xy = None
194194
ll = self.get_location_at_time(sim_time)
195195
if ll is None:
196196
return
197197
x, y = get_xy(*ll)
198198
self.xy = x, y
199199

200-
def draw_to_surface(self, surf):
200+
def draw_to_surface(self, surf) -> None:
201201
if self.xy:
202202
x, y = self.xy
203203
w, h = self.width, self.height
@@ -219,7 +219,7 @@ class Simulation:
219219
method is provided which displays the simulation in a pygame window.
220220
"""
221221

222-
def __init__(self, actor_vizs, scene_vizs, init_time=0):
222+
def __init__(self, actor_vizs, scene_vizs, init_time: int = 0) -> None:
223223
"""
224224
Given two collections of generic SimViz objects, and optionally an
225225
initial time, creates a Simulation object.
@@ -238,7 +238,7 @@ def __init__(self, actor_vizs, scene_vizs, init_time=0):
238238
self.time = 10000
239239
self.set_time(init_time)
240240

241-
def __find_bounding_box(self):
241+
def __find_bounding_box(self) -> None:
242242
"""Finds the lat_lon box bounding all objects"""
243243
init_box = (Inf, -Inf, Inf, -Inf)
244244

@@ -253,7 +253,7 @@ def helper(left, right):
253253

254254
self.bounding_box = reduce(helper, self.actor_vizs, init_box)
255255

256-
def __find_time_window(self):
256+
def __find_time_window(self) -> None:
257257
"""Finds the min and max times over all routes"""
258258
init_window = (Inf, -Inf)
259259

@@ -263,21 +263,21 @@ def helper(left, right):
263263

264264
self.time_window = reduce(helper, self.actor_vizs, init_window)
265265

266-
def __sort_vizs(self):
266+
def __sort_vizs(self) -> None:
267267
"""Sorts tracked objects in order of Drawing Order"""
268268

269269
def key_function(item):
270270
return item.get_drawing_order()
271271

272272
self.all_vizs.sort(key=key_function)
273273

274-
def set_time(self, time):
274+
def set_time(self, time) -> None:
275275
"""
276276
Moves all bus tracks to the given time.
277277
"""
278278
self.time = min(max(time, self.time_window[0]), self.time_window[1])
279279

280-
def print_time(self):
280+
def print_time(self) -> None:
281281
hours = int(self.time / 3600)
282282
minutes = int((self.time % 3600) / 60)
283283
seconds = int(self.time % 60)
@@ -295,14 +295,14 @@ def get_xy(self, lat, lon, bounds, screen_size):
295295

296296
def run(
297297
self,
298-
speed=0.0,
298+
speed: float = 0.0,
299299
window_size=(1280, 800),
300-
refresh_rate=1.0,
301-
font="/Library/Frameworks/Python.framework/Versions/2.5/"
300+
refresh_rate: float = 1.0,
301+
font: str = "/Library/Frameworks/Python.framework/Versions/2.5/"
302302
"lib/python2.5/site-packages/pygame/freesansbold.ttf",
303-
font_size=10,
304-
osm_zoom=14,
305-
):
303+
font_size: int = 10,
304+
osm_zoom: int = 14,
305+
) -> None:
306306
"""
307307
Pops up a window and displays the simulation on it.
308308
speed is advancement of sim in seconds/second.

src/osmviz/manager.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class ImageManager:
5454
by an OSMManager object.
5555
"""
5656

57-
def __init__(self):
57+
def __init__(self) -> None:
5858
self.image = None
5959

6060
# TO BE OVERRIDDEN #
@@ -93,7 +93,7 @@ def prepare_image(self, width, height):
9393
raise Exception(msg)
9494
self.image = self.create_image(width, height)
9595

96-
def destroy_image(self):
96+
def destroy_image(self) -> None:
9797
"""
9898
Destroys internal representation of the image, if it was
9999
ever created.
@@ -134,7 +134,7 @@ class PygameImageManager(ImageManager):
134134
An ImageManager which works with Pygame images.
135135
"""
136136

137-
def __init__(self):
137+
def __init__(self) -> None:
138138
ImageManager.__init__(self)
139139
try:
140140
import pygame
@@ -149,7 +149,7 @@ def create_image(self, width, height):
149149
def load_image_file(self, image_file):
150150
return self.pygame.image.load(image_file)
151151

152-
def paste_image(self, img, xy):
152+
def paste_image(self, img, xy) -> None:
153153
self.get_image().blit(img, xy)
154154

155155

@@ -158,7 +158,7 @@ class PILImageManager(ImageManager):
158158
An ImageManager which works with PIL images.
159159
"""
160160

161-
def __init__(self, mode):
161+
def __init__(self, mode) -> None:
162162
"""
163163
Constructs a PIL Image Manager.
164164
Arguments:
@@ -179,7 +179,7 @@ def create_image(self, width, height):
179179
def load_image_file(self, image_file):
180180
return self.PILImage.open(image_file)
181181

182-
def paste_image(self, img, xy):
182+
def paste_image(self, img, xy) -> None:
183183
self.get_image().paste(img, xy)
184184

185185

@@ -191,7 +191,7 @@ class OSMManager:
191191
into one big image.
192192
"""
193193

194-
def __init__(self, **kwargs):
194+
def __init__(self, **kwargs) -> None:
195195
"""
196196
Creates an OSMManager.
197197
Arguments:

test/functional/test_animation.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def find_bounds(route):
2222
return (min_time, max_time), (min_lat, max_lat, min_lon, max_lon)
2323

2424

25-
def test_sim(route, zoom, image="test/images/train.png"):
25+
def test_sim(route, zoom, image: str = "test/images/train.png") -> None:
2626
time_window, bbox = find_bounds(route)
2727

2828
def get_ll(time):
@@ -45,7 +45,7 @@ def get_ll(time):
4545
sim.run(speed=0, refresh_rate=0.1, osmzoom=zoom, windowsize=(600, 600))
4646

4747

48-
def test_sim_one():
48+
def test_sim_one() -> None:
4949
begin_ll = 45 + 46.0 / 60, -(68 + 39.0 / 60)
5050
end_ll = 30 + 3.0 / 60, -(118 + 15.0 / 60)
5151

test/functional/test_manager.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from osmviz.manager import OSMManager, PILImageManager
66

77

8-
def test_pil():
8+
def test_pil() -> None:
99
image_manager = PILImageManager("RGB")
1010
osm = OSMManager(image_manager=image_manager)
1111
image, bounds = osm.create_osm_image((30, 31, -117, -116), 9)

test/unit/test_image_manager.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from osmviz.manager import ImageManager
1010

1111

12-
def test_unimplemented():
12+
def test_unimplemented() -> None:
1313
# Arrange
1414
image_manager = ImageManager()
1515
# Dummy parameters

test/unit/test_osm_manager.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def osm_manager():
1616
yield osm_manager
1717

1818

19-
def test_get_tile_coord(osm_manager):
19+
def test_get_tile_coord(osm_manager) -> None:
2020
# Arrange
2121
lon_deg = 24.945831
2222
lat_deg = 60.192059
@@ -29,7 +29,7 @@ def test_get_tile_coord(osm_manager):
2929
assert coord == (18654, 9480)
3030

3131

32-
def test_get_tile_url(osm_manager):
32+
def test_get_tile_url(osm_manager) -> None:
3333
# Arrange
3434
tile_coord = (18654, 9480)
3535
zoom = 15
@@ -41,7 +41,7 @@ def test_get_tile_url(osm_manager):
4141
assert url == "https://tile.openstreetmap.org/15/18654/9480.png"
4242

4343

44-
def test_get_local_tile_filename(osm_manager):
44+
def test_get_local_tile_filename(osm_manager) -> None:
4545
# Arrange
4646
tile_coord = (18654, 9480)
4747
zoom = 15
@@ -53,7 +53,7 @@ def test_get_local_tile_filename(osm_manager):
5353
assert filename.endswith("-15_18654_9480.png")
5454

5555

56-
def test_retrieve_tile_image(osm_manager):
56+
def test_retrieve_tile_image(osm_manager) -> None:
5757
# Arrange
5858
tile_coord = (18654, 9480)
5959
zoom = 15
@@ -65,7 +65,7 @@ def test_retrieve_tile_image(osm_manager):
6565
assert filename.endswith("-15_18654_9480.png")
6666

6767

68-
def test_tile_nw_lat_lon(osm_manager):
68+
def test_tile_nw_lat_lon(osm_manager) -> None:
6969
# Arrange
7070
tile_coord = (18654, 9480)
7171
zoom = 15
@@ -77,7 +77,7 @@ def test_tile_nw_lat_lon(osm_manager):
7777
assert (lat_deg, lon_deg) == (60.19615576604439, 24.93896484375)
7878

7979

80-
def test_create_osm_image(osm_manager):
80+
def test_create_osm_image(osm_manager) -> None:
8181
# Arrange
8282
minlat = 59.9225115912
8383
maxlat = 60.297839409

test/unit/test_pil_image_manager.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def image_manager():
1616
yield image_manager
1717

1818

19-
def test_prepare_image(image_manager):
19+
def test_prepare_image(image_manager) -> None:
2020
# Arrange
2121
width, height = 200, 100
2222

@@ -27,7 +27,7 @@ def test_prepare_image(image_manager):
2727
assert image_manager.image.size == (200, 100)
2828

2929

30-
def test_prepare_image__twice(image_manager):
30+
def test_prepare_image__twice(image_manager) -> None:
3131
# Arrange
3232
width, height = 200, 100
3333

@@ -39,7 +39,7 @@ def test_prepare_image__twice(image_manager):
3939
image_manager.prepare_image(width, height)
4040

4141

42-
def test_destroy_image__no_image(image_manager):
42+
def test_destroy_image__no_image(image_manager) -> None:
4343
# Arrange
4444
# Act
4545
image_manager.destroy_image()
@@ -48,7 +48,7 @@ def test_destroy_image__no_image(image_manager):
4848
assert image_manager.image is None
4949

5050

51-
def test_destroy_image__with_image(image_manager):
51+
def test_destroy_image__with_image(image_manager) -> None:
5252
# Arrange
5353
width, height = 200, 100
5454
image_manager.prepare_image(width, height)
@@ -61,7 +61,7 @@ def test_destroy_image__with_image(image_manager):
6161
assert image_manager.image is None
6262

6363

64-
def test_paste_image_file__image_not_prepared(image_manager):
64+
def test_paste_image_file__image_not_prepared(image_manager) -> None:
6565
# Arrange
6666
filename = "dummy.jpg"
6767
xy = (0, 0)
@@ -71,7 +71,7 @@ def test_paste_image_file__image_not_prepared(image_manager):
7171
image_manager.paste_image_file(filename, xy)
7272

7373

74-
def test_paste_image_file__could_not_load_image(image_manager):
74+
def test_paste_image_file__could_not_load_image(image_manager) -> None:
7575
# Arrange
7676
width, height = 200, 100
7777
image_manager.prepare_image(width, height)
@@ -84,7 +84,7 @@ def test_paste_image_file__could_not_load_image(image_manager):
8484
image_manager.paste_image_file(filename, xy)
8585

8686

87-
def test_paste_image_file(image_manager):
87+
def test_paste_image_file(image_manager) -> None:
8888
# Arrange
8989
width, height = 200, 100
9090
image_manager.prepare_image(width, height)
@@ -99,7 +99,7 @@ def test_paste_image_file(image_manager):
9999
assert image_manager.image.size == (200, 100)
100100

101101

102-
def test_get_image(image_manager):
102+
def test_get_image(image_manager) -> None:
103103
# Arrange
104104
width, height = 200, 100
105105
image_manager.prepare_image(width, height)

0 commit comments

Comments
 (0)