Skip to content

Commit 7be9dad

Browse files
authored
BUG: Ensure property cache the same as intial result in GARSField (#2)
1 parent bf254f4 commit 7be9dad

File tree

2 files changed

+62
-40
lines changed

2 files changed

+62
-40
lines changed

gars_field/field.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ def gars_60deg(self):
109109
for bounding_geom in self.bounding_geom.geoms:
110110
self._gars_60deg += GARSField(bounding_geom).gars_60deg
111111
# make sure unique
112-
return sorted(set(self._gars_60deg))
112+
self._gars_60deg = sorted(set(self._gars_60deg))
113+
return self._gars_60deg
113114

114115
# generate the list of 36 degree GED-GARS grids
115116
self._gars_60deg = []
@@ -134,7 +135,8 @@ def gars_30deg(self):
134135
for bounding_geom in self.bounding_geom.geoms:
135136
self._gars_30deg += GARSField(bounding_geom).gars_30deg
136137
# make sure unique
137-
return sorted(set(self._gars_30deg))
138+
self._gars_30deg = sorted(set(self._gars_30deg))
139+
return self._gars_30deg
138140

139141
# generate the list of 3 degree ED-GARS grids
140142
self._gars_30deg = []
@@ -178,7 +180,8 @@ def gars_6deg(self):
178180
for bounding_geom in self.bounding_geom.geoms:
179181
self._gars_6deg += GARSField(bounding_geom).gars_6deg
180182
# make sure unique
181-
return sorted(set(self._gars_6deg))
183+
self._gars_6deg = sorted(set(self._gars_6deg))
184+
return self._gars_6deg
182185

183186
# generate the list of 6 degree ED-GARS grids
184187
self._gars_6deg = []
@@ -206,7 +209,8 @@ def gars_3deg(self):
206209
for bounding_geom in self.bounding_geom.geoms:
207210
self._gars_3deg += GARSField(bounding_geom).gars_3deg
208211
# make sure unique
209-
return sorted(set(self._gars_3deg))
212+
self._gars_3deg = sorted(set(self._gars_3deg))
213+
return self._gars_3deg
210214

211215
# generate the list of 3 degree ED-GARS grids
212216
self._gars_3deg = []
@@ -228,7 +232,8 @@ def gars_1deg(self):
228232
for bounding_geom in self.bounding_geom.geoms:
229233
self._gars_1deg += GARSField(bounding_geom).gars_1deg
230234
# make sure unique
231-
return sorted(set(self._gars_1deg))
235+
self._gars_1deg = sorted(set(self._gars_1deg))
236+
return self._gars_1deg
232237

233238
# generate the list of 1 degree ED-GARS grids
234239
self._gars_1deg = []
@@ -270,7 +275,8 @@ def gars_30min(self):
270275
for bounding_geom in self.bounding_geom.geoms:
271276
self._gars_30min += GARSField(bounding_geom).gars_30min
272277
# make sure unique
273-
return sorted(set(self._gars_30min))
278+
self._gars_30min = sorted(set(self._gars_30min))
279+
return self._gars_30min
274280

275281
# generate the list of 30 minute GARS grids
276282
self._gars_30min = []
@@ -298,7 +304,8 @@ def gars_15min(self):
298304
for bounding_geom in self.bounding_geom.geoms:
299305
self._gars_15min += GARSField(bounding_geom).gars_15min
300306
# make sure unique
301-
return sorted(set(self._gars_15min))
307+
self._gars_15min = sorted(set(self._gars_15min))
308+
return self._gars_15min
302309

303310
# generate the list of 15 minute GARS grids
304311
self._gars_15min = []
@@ -322,7 +329,8 @@ def gars_5min(self):
322329
for bounding_geom in self.bounding_geom.geoms:
323330
self._gars_5min += GARSField(bounding_geom).gars_5min
324331
# make sure unique
325-
return sorted(set(self._gars_5min))
332+
self._gars_5min = sorted(set(self._gars_5min))
333+
return self._gars_5min
326334

327335
# generate the list of 5 minute GARS grids
328336
self._gars_5min = []
@@ -346,7 +354,8 @@ def gars_1min(self):
346354
for bounding_geom in self.bounding_geom.geoms:
347355
self._gars_1min += GARSField(bounding_geom).gars_1min
348356
# make sure unique
349-
return sorted(set(self._gars_1min))
357+
self._gars_1min = sorted(set(self._gars_1min))
358+
return self._gars_1min
350359

351360
# generate the list of 1 minute GARS grids
352361
self._gars_1min = []

test/test_field.py

Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ def box_latlon(minx, miny, maxx, maxy):
3333
return shapely.geometry.box(minx, miny, maxx, maxy)
3434

3535

36+
def assert_gars_expected(field: GARSField, resolution, expected):
37+
for _ in range(2):
38+
# repeat to ensure cached geometry is the same
39+
assert [str(gg) for gg in getattr(field, f"gars_{resolution}")] == expected
40+
41+
3642
MULTI_POLY = shapely.wkt.loads(
3743
"MULTIPOLYGON (((-179.9999999 -81.96439234540721, "
3844
"-179.4398378760588 -81.96439234540721, "
@@ -75,7 +81,7 @@ def box_latlon(minx, miny, maxx, maxy):
7581
)
7682
def test_gars_field__gars_60deg(geom_bounds, expected):
7783
garsf = GARSField(geom_bounds)
78-
assert [str(gg) for gg in garsf.gars_60deg] == expected
84+
assert_gars_expected(garsf, "60deg", expected)
7985

8086

8187
@pytest.mark.parametrize(
@@ -87,7 +93,7 @@ def test_gars_field__gars_60deg(geom_bounds, expected):
8793
)
8894
def test_gars_field__gars_60deg_multipoly(multi_poly, expected):
8995
garsf = GARSField(multi_poly)
90-
assert [str(gg) for gg in garsf.gars_60deg] == expected
96+
assert_gars_expected(garsf, "60deg", expected)
9197

9298

9399
@pytest.mark.parametrize(
@@ -111,7 +117,7 @@ def test_gars_field__gars_60deg_multipoly(multi_poly, expected):
111117
)
112118
def test_gars_field__gars_30deg(geom_bounds, expected):
113119
garsf = GARSField(geom_bounds)
114-
assert [str(gg) for gg in garsf.gars_30deg] == expected
120+
assert_gars_expected(garsf, "30deg", expected)
115121

116122

117123
@pytest.mark.parametrize(
@@ -123,13 +129,15 @@ def test_gars_field__gars_30deg(geom_bounds, expected):
123129
)
124130
def test_gars_field__gars_30deg_multipoly(multi_poly, expected):
125131
garsf = GARSField(multi_poly)
126-
assert [str(gg) for gg in garsf.gars_30deg] == expected
132+
assert_gars_expected(garsf, "30deg", expected)
127133

128134

129135
def test_gars_field_gars_30deg__check_all_4():
130136
gars5 = GARSField(GEDGARSGrid("GD1A").polygon.buffer(-0.0001))
131-
assert len(gars5.gars_60deg) == 1
132-
assert len(gars5.gars_30deg) == 4
137+
for _ in range(2):
138+
# repeat to ensure cached geometry is the same
139+
assert len(gars5.gars_60deg) == 1
140+
assert len(gars5.gars_30deg) == 4
133141

134142

135143
@pytest.mark.parametrize(
@@ -153,7 +161,7 @@ def test_gars_field_gars_30deg__check_all_4():
153161
)
154162
def test_gars_field__gars_6deg(geom_bounds, expected):
155163
garsf = GARSField(geom_bounds)
156-
assert [str(gg) for gg in garsf.gars_6deg] == expected
164+
assert_gars_expected(garsf, "6deg", expected)
157165

158166

159167
@pytest.mark.parametrize(
@@ -165,7 +173,7 @@ def test_gars_field__gars_6deg(geom_bounds, expected):
165173
)
166174
def test_gars_field__gars_6deg_multipoly(multi_poly, expected):
167175
garsf = GARSField(multi_poly)
168-
assert [str(gg) for gg in garsf.gars_6deg] == expected
176+
assert_gars_expected(garsf, "6deg", expected)
169177

170178

171179
@pytest.mark.parametrize(
@@ -189,7 +197,7 @@ def test_gars_field__gars_6deg_multipoly(multi_poly, expected):
189197
)
190198
def test_gars_field__gars_3deg(geom_bounds, expected):
191199
garsf = GARSField(geom_bounds)
192-
assert [str(gg) for gg in garsf.gars_3deg] == expected
200+
assert_gars_expected(garsf, "3deg", expected)
193201

194202

195203
@pytest.mark.parametrize(
@@ -201,7 +209,7 @@ def test_gars_field__gars_3deg(geom_bounds, expected):
201209
)
202210
def test_gars_field__gars_3deg_multipoly(multi_poly, expected):
203211
garsf = GARSField(multi_poly)
204-
assert [str(gg) for gg in garsf.gars_3deg] == expected
212+
assert_gars_expected(garsf, "3deg", expected)
205213

206214

207215
@pytest.mark.parametrize(
@@ -253,7 +261,7 @@ def test_gars_field__gars_3deg_multipoly(multi_poly, expected):
253261
)
254262
def test_gars_field__gars_1deg(geom_bounds, expected):
255263
garsf = GARSField(geom_bounds)
256-
assert [str(gg) for gg in garsf.gars_1deg] == expected
264+
assert_gars_expected(garsf, "1deg", expected)
257265

258266

259267
@pytest.mark.parametrize(
@@ -275,7 +283,7 @@ def test_gars_field__gars_1deg(geom_bounds, expected):
275283
)
276284
def test_gars_field__gars_1deg_multipoly(multi_poly, expected):
277285
garsf = GARSField(multi_poly)
278-
assert [str(gg) for gg in garsf.gars_1deg] == expected
286+
assert_gars_expected(garsf, "1deg", expected)
279287

280288

281289
@pytest.mark.parametrize(
@@ -406,7 +414,7 @@ def test_gars_field__gars_1deg_multipoly(multi_poly, expected):
406414
)
407415
def test_gars_field__gars_30min(geom_bounds, expected):
408416
garsf = GARSField(geom_bounds)
409-
assert [str(gg) for gg in garsf.gars_30min] == expected
417+
assert_gars_expected(garsf, "30min", expected)
410418

411419

412420
@pytest.mark.parametrize(
@@ -446,7 +454,7 @@ def test_gars_field__gars_30min(geom_bounds, expected):
446454
)
447455
def test_gars_field__gars_30min_multipoly(multi_poly, expected):
448456
garsf = GARSField(multi_poly)
449-
assert [str(gg) for gg in garsf.gars_30min] == expected
457+
assert_gars_expected(garsf, "30min", expected)
450458

451459

452460
@pytest.mark.parametrize(
@@ -556,7 +564,7 @@ def test_gars_field__gars_30min_multipoly(multi_poly, expected):
556564
)
557565
def test_gars_field__gars_15min(geom_bounds, expected):
558566
garsf = GARSField(geom_bounds)
559-
assert [str(gg) for gg in garsf.gars_15min] == expected
567+
assert_gars_expected(garsf, "15min", expected)
560568

561569

562570
@pytest.mark.parametrize(
@@ -618,7 +626,7 @@ def test_gars_field__gars_15min(geom_bounds, expected):
618626
)
619627
def test_gars_field__gars_15min_multipoly(multi_poly, expected):
620628
garsf = GARSField(multi_poly)
621-
assert [str(gg) for gg in garsf.gars_15min] == expected
629+
assert_gars_expected(garsf, "15min", expected)
622630

623631

624632
@pytest.mark.parametrize(
@@ -737,7 +745,7 @@ def test_gars_field__gars_15min_multipoly(multi_poly, expected):
737745
)
738746
def test_gars_field__gars_5min(geom_bounds, expected):
739747
garsf = GARSField(geom_bounds)
740-
assert [str(gg) for gg in garsf.gars_5min] == expected
748+
assert_gars_expected(garsf, "5min", expected)
741749

742750

743751
@pytest.mark.parametrize(
@@ -967,7 +975,7 @@ def test_gars_field__gars_5min(geom_bounds, expected):
967975
)
968976
def test_gars_field__gars_5min_multipoly(multi_poly, expected):
969977
garsf = GARSField(multi_poly)
970-
assert [str(gg) for gg in garsf.gars_5min] == expected
978+
assert_gars_expected(garsf, "5min", expected)
971979

972980

973981
@pytest.mark.parametrize(
@@ -985,13 +993,15 @@ def test_gars_field__gars_5min_multipoly(multi_poly, expected):
985993
)
986994
def test_gars_field__gars_1min(geom_bounds, expected):
987995
garsf = GARSField(geom_bounds)
988-
assert [str(gg) for gg in garsf.gars_1min] == expected
996+
assert_gars_expected(garsf, "1min", expected)
989997

990998

991999
def test_gars_field_gars_1min__check_all_25():
9921000
gars5 = GARSField(GARSGrid("173MA47").polygon.buffer(-0.0001))
993-
assert len(gars5.gars_5min) == 1
994-
assert len(gars5.gars_1min) == 25
1001+
for _ in range(2):
1002+
# repeat to check cache is the same
1003+
assert len(gars5.gars_5min) == 1
1004+
assert len(gars5.gars_1min) == 25
9951005

9961006

9971007
@pytest.mark.parametrize(
@@ -1000,7 +1010,7 @@ def test_gars_field_gars_1min__check_all_25():
10001010
)
10011011
def test_gars_field__gars_1min_multipoly(multi_poly):
10021012
garsf = GARSField(multi_poly.buffer(-0.28))
1003-
assert [str(gg) for gg in garsf.gars_1min] == [
1013+
expected = [
10041014
"001AQ2102",
10051015
"001AQ2107",
10061016
"001AQ2112",
@@ -1034,17 +1044,20 @@ def test_gars_field__gars_1min_multipoly(multi_poly):
10341044
"001AR4717",
10351045
"001AR4722",
10361046
]
1047+
assert_gars_expected(garsf, "1min", expected)
10371048

10381049

10391050
def test_gars_1min_exists_for_point():
10401051
story = shapely.geometry.Point(-93.729739032219, 42.01131578)
10411052
garsf = GARSField(story)
1042-
assert len(garsf.gars_1min) == 1
1043-
assert str(garsf.gars_1min[0]) == "173MA4722"
1044-
assert str(garsf.gars_1min[0].polygon) == (
1045-
"POLYGON ((-93.71666666666667 42,"
1046-
" -93.71666666666667 42.01666666666667,"
1047-
" -93.73333333333333 42.01666666666667,"
1048-
" -93.73333333333333 42,"
1049-
" -93.71666666666667 42))"
1050-
)
1053+
for _ in range(2):
1054+
# repeat to check cache is the same
1055+
assert len(garsf.gars_1min) == 1
1056+
assert str(garsf.gars_1min[0]) == "173MA4722"
1057+
assert str(garsf.gars_1min[0].polygon) == (
1058+
"POLYGON ((-93.71666666666667 42,"
1059+
" -93.71666666666667 42.01666666666667,"
1060+
" -93.73333333333333 42.01666666666667,"
1061+
" -93.73333333333333 42,"
1062+
" -93.71666666666667 42))"
1063+
)

0 commit comments

Comments
 (0)