Skip to content

Commit 23dceb8

Browse files
authored
Merge pull request #616 from dcs4cop/forman-xxx-limit_lines_to_78_chars
Limitting lines to 78 characters (xcube level, this time)
2 parents 50022a9 + 69e09d9 commit 23dceb8

File tree

4 files changed

+307
-136
lines changed

4 files changed

+307
-136
lines changed

test/cli/test_level.py

Lines changed: 75 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -23,43 +23,61 @@ def outputs(self) -> List[str]:
2323

2424
def test_all_defaults(self):
2525
result = self.invoke_cli(['level', TEST_ZARR_DIR])
26-
self._assert_result_ok(result, [((1, 1, 1, 1, 1), (90, 90), (180, 180)),
27-
((1, 1, 1, 1, 1), (90,), (180,))], LevelDataTest.TEST_OUTPUT,
28-
'Level 1 of 2 written after .*\n'
29-
'Level 2 of 2 written after .*\n'
30-
'2 level\(s\) written into test.levels after .*\n')
26+
self._assert_result_ok(
27+
result, [((1, 1, 1, 1, 1), (90, 90), (180, 180)),
28+
((1, 1, 1, 1, 1), (90,), (180,))],
29+
LevelDataTest.TEST_OUTPUT,
30+
'Level 1 of 2 written after .*\n'
31+
'Level 2 of 2 written after .*\n'
32+
'2 level\(s\) written into test.levels after .*\n'
33+
)
3134

3235
def test_with_output(self):
33-
result = self.invoke_cli(['level', TEST_ZARR_DIR, '--output', 'my.levels'])
34-
self._assert_result_ok(result, [((1, 1, 1, 1, 1), (90, 90), (180, 180)),
35-
((1, 1, 1, 1, 1), (90,), (180,))], 'my.levels',
36-
'Level 1 of 2 written after .*\n'
37-
'Level 2 of 2 written after .*\n'
38-
'2 level\(s\) written into my.levels after .*\n')
36+
result = self.invoke_cli(['level', TEST_ZARR_DIR,
37+
'--output', 'my.levels'])
38+
self._assert_result_ok(
39+
result, [((1, 1, 1, 1, 1), (90, 90), (180, 180)),
40+
((1, 1, 1, 1, 1), (90,), (180,))], 'my.levels',
41+
'Level 1 of 2 written after .*\n'
42+
'Level 2 of 2 written after .*\n'
43+
'2 level\(s\) written into my.levels after .*\n'
44+
)
3945

4046
def test_with_tile_size_and_num_levels(self):
41-
result = self.invoke_cli(['level', TEST_ZARR_DIR, '-t', '90,45', '-n', '4'])
42-
self._assert_result_ok(result, [((1, 1, 1, 1, 1), (45, 45, 45, 45), (90, 90, 90, 90)),
43-
((1, 1, 1, 1, 1), (45, 45), (90, 90)),
44-
((1, 1, 1, 1, 1), (45,), (90,))], LevelDataTest.TEST_OUTPUT,
45-
'Level 1 of 3 written after .*\n'
46-
'Level 2 of 3 written after .*\n'
47-
'Level 3 of 3 written after .*\n'
48-
'3 level\(s\) written into test.levels after .*\n')
49-
50-
def _assert_result_ok(self, result, level_chunks: List[Tuple], output_path: str, message_regex: str):
47+
result = self.invoke_cli(['level', TEST_ZARR_DIR,
48+
'-t', '90,45', '-n', '4'])
49+
self._assert_result_ok(
50+
result, [((1, 1, 1, 1, 1), (45, 45, 45, 45), (90, 90, 90, 90)),
51+
((1, 1, 1, 1, 1), (45, 45), (90, 90)),
52+
((1, 1, 1, 1, 1), (45,), (90,))],
53+
LevelDataTest.TEST_OUTPUT,
54+
'Level 1 of 3 written after .*\n'
55+
'Level 2 of 3 written after .*\n'
56+
'Level 3 of 3 written after .*\n'
57+
'3 level\(s\) written into test.levels after .*\n'
58+
)
59+
60+
def _assert_result_ok(self,
61+
result,
62+
level_chunks: List[Tuple],
63+
output_path: str,
64+
message_regex: str):
5165
self.assertEqual(0, result.exit_code)
5266
self.assertRegex(result.stdout, message_regex)
5367
self.assertTrue(os.path.isdir(output_path))
5468
level_datasets = read_levels(output_path)
5569
level = 0
5670
for level_dataset in level_datasets:
5771
assert_cube(level_dataset)
58-
self.assertEqual({'precipitation', 'soil_moisture', 'temperature'},
72+
self.assertEqual({'precipitation',
73+
'soil_moisture',
74+
'temperature'},
5975
set(level_dataset.data_vars.keys()))
6076
for var_name, var in level_dataset.data_vars.items():
6177
var_chunks = level_chunks[level]
62-
self.assertEqual(var_chunks, var.chunks, f'{var_name} at level {level}')
78+
self.assertEqual(var_chunks,
79+
var.chunks,
80+
f'{var_name} at level {level}')
6381
level += 1
6482

6583
def _assert_result_not_ok(self, result, message_regex: str):
@@ -74,7 +92,8 @@ def test_level_with_nc(self):
7492
])
7593
self.assertEqual(0, result.exit_code)
7694
self.assertTrue(os.path.isdir(LevelDataTest.TEST_OUTPUT))
77-
self.assertEqual({'0.zarr', '1.zarr', '2.zarr'}, set(os.listdir(LevelDataTest.TEST_OUTPUT)))
95+
self.assertEqual({'0.zarr', '1.zarr', '2.zarr'},
96+
set(os.listdir(LevelDataTest.TEST_OUTPUT)))
7897

7998
def test_level_with_zarr(self):
8099
result = self.invoke_cli(["level",
@@ -84,7 +103,8 @@ def test_level_with_zarr(self):
84103
])
85104
self.assertEqual(0, result.exit_code)
86105
self.assertTrue(os.path.isdir(LevelDataTest.TEST_OUTPUT))
87-
self.assertEqual({'0.zarr', '1.zarr', '2.zarr'}, set(os.listdir(LevelDataTest.TEST_OUTPUT)))
106+
self.assertEqual({'0.zarr', '1.zarr', '2.zarr'},
107+
set(os.listdir(LevelDataTest.TEST_OUTPUT)))
88108

89109
def test_level_with_zarr_link(self):
90110
result = self.invoke_cli(["level",
@@ -95,7 +115,8 @@ def test_level_with_zarr_link(self):
95115
])
96116
self.assertEqual(0, result.exit_code)
97117
self.assertTrue(os.path.isdir(LevelDataTest.TEST_OUTPUT))
98-
self.assertEqual({'0.link', '1.zarr', '2.zarr'}, set(os.listdir(LevelDataTest.TEST_OUTPUT)))
118+
self.assertEqual({'0.link', '1.zarr', '2.zarr'},
119+
set(os.listdir(LevelDataTest.TEST_OUTPUT)))
99120

100121
def test_level_with_zarr_num_levels_max(self):
101122
result = self.invoke_cli(["level",
@@ -106,43 +127,56 @@ def test_level_with_zarr_num_levels_max(self):
106127
])
107128
self.assertEqual(0, result.exit_code)
108129
self.assertTrue(os.path.isdir(LevelDataTest.TEST_OUTPUT))
109-
self.assertEqual({'0.zarr', '1.zarr'}, set(os.listdir(LevelDataTest.TEST_OUTPUT)))
130+
self.assertEqual({'0.zarr', '1.zarr'},
131+
set(os.listdir(LevelDataTest.TEST_OUTPUT)))
110132

111133
def test_invalid_inputs(self):
112134
result = self.invoke_cli(["level",
113135
"-t", "a45",
114136
"-o", LevelDataTest.TEST_OUTPUT,
115137
TEST_NC_FILE,
116138
])
117-
self._assert_result_not_ok(result,
118-
"Error\\: Invalid tile sizes in TILE_SIZE found: "
119-
"invalid literal for int\\(\\) with base 10\\: 'a45'\n")
139+
self._assert_result_not_ok(
140+
result,
141+
"Error\\: Invalid tile sizes in TILE_SIZE found: "
142+
"invalid literal for int\\(\\) with base 10\\: 'a45'\n"
143+
)
120144

121145
result = self.invoke_cli(["level",
122146
"-t", "-3",
123147
"-o", LevelDataTest.TEST_OUTPUT,
124148
TEST_NC_FILE,
125149
])
126-
self._assert_result_not_ok(result,
127-
"Error\\: Invalid tile sizes in TILE_SIZE found\\: "
128-
"all items must be positive integer numbers\n")
150+
self._assert_result_not_ok(
151+
result,
152+
"Error\\: Invalid tile sizes in TILE_SIZE found\\: "
153+
"all items must be positive integer numbers\n"
154+
)
129155

130156
result = self.invoke_cli(["level",
131157
"-t", "45,45,45",
132158
"-o", LevelDataTest.TEST_OUTPUT,
133159
TEST_NC_FILE])
134-
self._assert_result_not_ok(result,
135-
"Error\\: TILE_SIZE must have 2 tile sizes separated by ','\n")
160+
self._assert_result_not_ok(
161+
result,
162+
"Error\\: TILE_SIZE must have 2 tile sizes separated by ','\n"
163+
)
136164

137165
result = self.invoke_cli(["level",
138166
"-n", "0",
139167
"-o", LevelDataTest.TEST_OUTPUT,
140168
TEST_NC_FILE])
141-
self._assert_result_not_ok(result,
142-
"NUM_LEVELS_MAX must be a positive integer\n")
169+
self._assert_result_not_ok(
170+
result,
171+
"NUM_LEVELS_MAX must be a positive integer\n"
172+
)
143173

144174
def test_with_existing_output(self):
145-
result = self.invoke_cli(['level', TEST_ZARR_DIR, '--output', 'my.levels'])
146-
result = self.invoke_cli(['level', TEST_ZARR_DIR, '--output', 'my.levels'])
147-
self._assert_result_not_ok(result, 'Error: output \'my\\.levels\' already exists\n')
148-
175+
result = self.invoke_cli(['level', TEST_ZARR_DIR,
176+
'--output', 'my.levels'])
177+
result = self.invoke_cli(['level', TEST_ZARR_DIR,
178+
'--output', 'my.levels'])
179+
self._assert_result_not_ok(
180+
result,
181+
'Error: output \'my\\.levels\' already exists\n'
182+
)

test/core/test_level.py

Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import numpy as np
66
import xarray as xr
77

8-
from xcube.core.level import compute_levels, write_levels, read_levels
98
from xcube.core.dsio import rimraf
9+
from xcube.core.level import compute_levels
10+
from xcube.core.level import read_levels
11+
from xcube.core.level import write_levels
1012

1113

1214
def get_path(filename):
@@ -25,12 +27,15 @@ def create_test_dataset(cls, shape, chunks=None):
2527
if chunks:
2628
a.encoding.update(chunks=chunks, chunksizes=chunks)
2729
b.encoding.update(chunks=chunks, chunksizes=chunks)
28-
return xr.Dataset(dict(a=a, b=b)).chunk(chunks={dims[i]: chunks[i] for i in range(len(dims))})
30+
return xr.Dataset(dict(a=a, b=b)) \
31+
.chunk(chunks={dims[i]: chunks[i]
32+
for i in range(len(dims))})
2933
else:
3034
return xr.Dataset(dict(a=a, b=b))
3135

3236
def test_compute_levels(self):
33-
dataset = self.create_test_dataset(shape=(5, 200, 400), chunks=(1, 25, 25))
37+
dataset = self.create_test_dataset(shape=(5, 200, 400),
38+
chunks=(1, 25, 25))
3439
levels = compute_levels(dataset)
3540
self._assert_levels_ok(levels,
3641
expected_num_levels=4,
@@ -48,7 +53,8 @@ def test_compute_levels(self):
4853
])
4954

5055
def test_compute_levels_with_max_levels(self):
51-
dataset = self.create_test_dataset(shape=(5, 200, 400), chunks=(1, 25, 25))
56+
dataset = self.create_test_dataset(shape=(5, 200, 400),
57+
chunks=(1, 25, 25))
5258
levels = compute_levels(dataset, num_levels_max=3)
5359
self._assert_levels_ok(levels,
5460
expected_num_levels=3,
@@ -79,7 +85,11 @@ def test_write_read_levels_with_even_sizes(self):
7985
((1,) * 5, (25,) * 2, (25,) * 4),
8086
((1,) * 5, (25,) * 1, (25,) * 2),
8187
]
82-
self._assert_io_ok(shape, tile_shape, expected_num_levels, expected_shapes, expected_chunks)
88+
self._assert_io_ok(shape,
89+
tile_shape,
90+
expected_num_levels,
91+
expected_shapes,
92+
expected_chunks)
8393

8494
def test_write_read_levels_with_odd_sizes(self):
8595
shape = (5, 203, 405)
@@ -91,13 +101,28 @@ def test_write_read_levels_with_odd_sizes(self):
91101
(5, 51, 102),
92102
]
93103
expected_chunks = [
94-
((1,) * 5, (37, 37, 37, 37, 37, 18), (38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 25)),
95-
((1,) * 5, (37, 37, 28), (38, 38, 38, 38, 38, 13)),
96-
((1,) * 5, (37, 14), (38, 38, 26)),
104+
((1,) * 5,
105+
(37, 37, 37, 37, 37, 18),
106+
(38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 25)),
107+
((1,) * 5,
108+
(37, 37, 28),
109+
(38, 38, 38, 38, 38, 13)),
110+
((1,) * 5,
111+
(37, 14),
112+
(38, 38, 26)),
97113
]
98-
self._assert_io_ok(shape, tile_shape, expected_num_levels, expected_shapes, expected_chunks)
99-
100-
def _assert_io_ok(self, shape, tile_shape, expected_num_levels, expected_shapes, expected_chunks):
114+
self._assert_io_ok(shape,
115+
tile_shape,
116+
expected_num_levels,
117+
expected_shapes,
118+
expected_chunks)
119+
120+
def _assert_io_ok(self,
121+
shape,
122+
tile_shape,
123+
expected_num_levels,
124+
expected_shapes,
125+
expected_chunks):
101126

102127
input_path = get_path("pyramid-input.nc")
103128
output_path = get_path("pyramid-output")
@@ -118,21 +143,31 @@ def _assert_io_ok(self, shape, tile_shape, expected_num_levels, expected_shapes,
118143

119144
print(f"write time total: ", time.perf_counter() - t0)
120145

121-
self._assert_levels_ok(levels, expected_num_levels, expected_shapes, expected_chunks)
146+
self._assert_levels_ok(levels,
147+
expected_num_levels,
148+
expected_shapes,
149+
expected_chunks)
122150

123151
t0 = time.perf_counter()
124152

125153
levels = read_levels(output_path)
126154

127155
print(f"read time total: ", time.perf_counter() - t0)
128156

129-
self._assert_levels_ok(levels, expected_num_levels, expected_shapes, expected_chunks)
157+
self._assert_levels_ok(levels,
158+
expected_num_levels,
159+
expected_shapes,
160+
expected_chunks)
130161

131162
finally:
132163
rimraf(input_path)
133164
rimraf(output_path)
134165

135-
def _assert_levels_ok(self, levels, expected_num_levels, expected_shapes, expected_chunks):
166+
def _assert_levels_ok(self,
167+
levels,
168+
expected_num_levels,
169+
expected_shapes,
170+
expected_chunks):
136171
self.assertIsInstance(levels, list)
137172
self.assertEqual(expected_num_levels, len(levels))
138173

@@ -145,10 +180,14 @@ def _assert_levels_ok(self, levels, expected_num_levels, expected_shapes, expect
145180

146181
for i in range(expected_num_levels):
147182
msg = f"at index {i}"
148-
self.assertEqual(expected_shapes[i], levels[i]["a"].shape, msg=msg)
149-
self.assertEqual(expected_shapes[i], levels[i]["b"].shape, msg=msg)
183+
self.assertEqual(expected_shapes[i], levels[i]["a"].shape,
184+
msg=msg)
185+
self.assertEqual(expected_shapes[i], levels[i]["b"].shape,
186+
msg=msg)
150187

151188
for i in range(expected_num_levels):
152189
msg = f"at index {i}"
153-
self.assertEqual(expected_chunks[i], levels[i]["a"].chunks, msg=msg)
154-
self.assertEqual(expected_chunks[i], levels[i]["b"].chunks, msg=msg)
190+
self.assertEqual(expected_chunks[i], levels[i]["a"].chunks,
191+
msg=msg)
192+
self.assertEqual(expected_chunks[i], levels[i]["b"].chunks,
193+
msg=msg)

0 commit comments

Comments
 (0)