|
4 | 4 |
|
5 | 5 | import unittest |
6 | 6 | import numpy as np |
7 | | -from xarray import DataArray, Variable |
| 7 | +from xarray import DataArray, Variable, Dataset |
8 | 8 | from hypernets_processor.data_io.dataset_util import DatasetUtil |
9 | 9 | from hypernets_processor.version import __version__ |
10 | 10 |
|
@@ -241,6 +241,159 @@ def test_get_default_fill_value(self): |
241 | 241 | self.assertEqual(np.float32(9.96921E36), DatasetUtil.get_default_fill_value(np.float32)) |
242 | 242 | self.assertEqual(9.969209968386869E36, DatasetUtil.get_default_fill_value(np.float64)) |
243 | 243 |
|
| 244 | + def test__get_flag_encoding(self): |
| 245 | + |
| 246 | + ds = Dataset() |
| 247 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 248 | + masks = [1, 2, 4, 8, 16, 32, 64, 128] |
| 249 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 250 | + attributes={"standard_name": "std"}) |
| 251 | + |
| 252 | + ds["flags"] = flags_vector_variable |
| 253 | + |
| 254 | + meanings_out, masks_out = DatasetUtil._get_flag_encoding(ds["flags"]) |
| 255 | + |
| 256 | + self.assertCountEqual(meanings, meanings_out) |
| 257 | + self.assertCountEqual(masks, masks_out) |
| 258 | + |
| 259 | + def test__get_flag_encoding_not_flag_var(self): |
| 260 | + ds = Dataset() |
| 261 | + ds["array_variable"] = DatasetUtil.create_variable([7, 8, 3], np.int8, attributes={"standard_name": "std"}) |
| 262 | + |
| 263 | + self.assertRaises(KeyError, DatasetUtil._get_flag_encoding, ds["array_variable"]) |
| 264 | + |
| 265 | + def test_unpack_flags(self): |
| 266 | + |
| 267 | + ds = Dataset() |
| 268 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 269 | + masks = [1, 2, 4, 8, 16, 32, 64, 128] |
| 270 | + flags_vector_variable = DatasetUtil.create_flags_variable([2,3], meanings, dim_names=["dim1", "dim2"], |
| 271 | + attributes={"standard_name": "std"}) |
| 272 | + |
| 273 | + ds["flags"] = flags_vector_variable |
| 274 | + ds["flags"][0, 0] = ds["flags"][0, 0] | 8 |
| 275 | + |
| 276 | + empty = np.zeros((2, 3), bool) |
| 277 | + flag4 = np.zeros((2, 3), bool) |
| 278 | + flag4[0,0] = True |
| 279 | + |
| 280 | + flags = DatasetUtil.unpack_flags(ds["flags"]) |
| 281 | + |
| 282 | + self.assertTrue((flags["flag1"].data == empty).all()) |
| 283 | + self.assertTrue((flags["flag2"].data == empty).all()) |
| 284 | + self.assertTrue((flags["flag3"].data == empty).all()) |
| 285 | + self.assertTrue((flags["flag4"].data == flag4).all()) |
| 286 | + self.assertTrue((flags["flag5"].data == empty).all()) |
| 287 | + self.assertTrue((flags["flag6"].data == empty).all()) |
| 288 | + self.assertTrue((flags["flag7"].data == empty).all()) |
| 289 | + self.assertTrue((flags["flag8"].data == empty).all()) |
| 290 | + |
| 291 | + def test_get_set_flags(self): |
| 292 | + |
| 293 | + ds = Dataset() |
| 294 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 295 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 296 | + attributes={"standard_name": "std"}) |
| 297 | + ds["flags"] = flags_vector_variable |
| 298 | + ds["flags"][3] = ds["flags"][3] | 8 |
| 299 | + ds["flags"][3] = ds["flags"][3] | 32 |
| 300 | + |
| 301 | + set_flags = DatasetUtil.get_set_flags(ds["flags"][3]) |
| 302 | + |
| 303 | + self.assertCountEqual(set_flags, ["flag4", "flag6"]) |
| 304 | + |
| 305 | + def test_get_set_flags_2d(self): |
| 306 | + |
| 307 | + ds = Dataset() |
| 308 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 309 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 310 | + attributes={"standard_name": "std"}) |
| 311 | + ds["flags"] = flags_vector_variable |
| 312 | + |
| 313 | + self.assertRaises(ValueError, DatasetUtil.get_set_flags, ds["flags"]) |
| 314 | + |
| 315 | + def test_check_flag_set_true(self): |
| 316 | + ds = Dataset() |
| 317 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 318 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 319 | + attributes={"standard_name": "std"}) |
| 320 | + ds["flags"] = flags_vector_variable |
| 321 | + ds["flags"][3] = ds["flags"][3] | 8 |
| 322 | + ds["flags"][3] = ds["flags"][3] | 32 |
| 323 | + |
| 324 | + flag_set = DatasetUtil.check_flag_set(ds["flags"][3], "flag6") |
| 325 | + |
| 326 | + self.assertTrue(flag_set) |
| 327 | + |
| 328 | + def test_check_flag_set_false(self): |
| 329 | + ds = Dataset() |
| 330 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 331 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 332 | + attributes={"standard_name": "std"}) |
| 333 | + ds["flags"] = flags_vector_variable |
| 334 | + ds["flags"][3] = ds["flags"][3] | 8 |
| 335 | + |
| 336 | + flag_set = DatasetUtil.check_flag_set(ds["flags"][3], "flag6") |
| 337 | + |
| 338 | + self.assertFalse(flag_set) |
| 339 | + |
| 340 | + def test_check_flag_set_2d(self): |
| 341 | + ds = Dataset() |
| 342 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 343 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 344 | + attributes={"standard_name": "std"}) |
| 345 | + ds["flags"] = flags_vector_variable |
| 346 | + |
| 347 | + self.assertRaises(ValueError, DatasetUtil.check_flag_set, ds["flags"], "flag6") |
| 348 | + |
| 349 | + def test_set_flag(self): |
| 350 | + |
| 351 | + ds = Dataset() |
| 352 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 353 | + flags_vector_variable = DatasetUtil.create_flags_variable([5, 4], meanings, dim_names=["dim1", "dim2"], |
| 354 | + attributes={"standard_name": "std"}) |
| 355 | + ds["flags"] = flags_vector_variable |
| 356 | + |
| 357 | + ds["flags"] = DatasetUtil.set_flag(ds["flags"], "flag4") |
| 358 | + |
| 359 | + flags = np.full(ds["flags"].shape, 0|8) |
| 360 | + |
| 361 | + self.assertTrue((ds["flags"].data == flags).all()) |
| 362 | + |
| 363 | + def test_set_flag_error_if_set(self): |
| 364 | + ds = Dataset() |
| 365 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 366 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 367 | + attributes={"standard_name": "std"}) |
| 368 | + ds["flags"] = flags_vector_variable |
| 369 | + ds["flags"][3] = ds["flags"][3] | 8 |
| 370 | + |
| 371 | + self.assertRaises(ValueError, DatasetUtil.set_flag, ds["flags"], "flag4", error_if_set=True) |
| 372 | + |
| 373 | + def test_unset_flag(self): |
| 374 | + |
| 375 | + ds = Dataset() |
| 376 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 377 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 378 | + attributes={"standard_name": "std"}) |
| 379 | + ds["flags"] = flags_vector_variable |
| 380 | + ds["flags"][:] = ds["flags"][:] | 8 |
| 381 | + |
| 382 | + ds["flags"] = DatasetUtil.unset_flag(ds["flags"], "flag4") |
| 383 | + |
| 384 | + flags = np.zeros(ds["flags"].shape) |
| 385 | + |
| 386 | + self.assertTrue((ds["flags"].data == flags).all()) |
| 387 | + |
| 388 | + def test_set_flag_error_if_unset(self): |
| 389 | + ds = Dataset() |
| 390 | + meanings = ["flag1", "flag2", "flag3", "flag4", "flag5", "flag6", "flag7", "flag8"] |
| 391 | + flags_vector_variable = DatasetUtil.create_flags_variable([5], meanings, dim_names=["dim1"], |
| 392 | + attributes={"standard_name": "std"}) |
| 393 | + ds["flags"] = flags_vector_variable |
| 394 | + |
| 395 | + self.assertRaises(ValueError, DatasetUtil.unset_flag, ds["flags"], "flag4", error_if_unset=True) |
| 396 | + |
244 | 397 |
|
245 | 398 | if __name__ == '__main__': |
246 | 399 | unittest.main() |
0 commit comments