Coverage for tests/test_functions.py: 100%
16 statements
« prev ^ index » next coverage.py v7.3.2, created at 2024-02-28 12:51 +1100
« prev ^ index » next coverage.py v7.3.2, created at 2024-02-28 12:51 +1100
1"""
2Tests scores.functions
3"""
4import numpy as np
5import pytest
6import xarray as xr
8from scores.functions import angular_difference
10DA_DIR_A = xr.DataArray(
11 data=[[[0, 50], [340, 100]], [[300, np.nan], [90, 0]]], # include nan
12 dims=["i", "j", "k"],
13 coords={"i": [1, 2], "j": [10000, 10001], "k": [1, 2]},
14)
15DA_DIR_B = xr.DataArray(
16 data=[[160, 359, 10], [100, np.nan, 20]],
17 dims=["k", "j"], # reversed dim order, missing 'i' dim
18 coords={"k": [1, 2], "j": [10001, 10000, 10002]}, # extra station, changed order
19)
20DS_DIR_A = xr.Dataset({"a": DA_DIR_A, "b": DA_DIR_B})
21DS_DIR_B = xr.Dataset({"a": DA_DIR_B, "b": DA_DIR_A})
22DA_DIR_NAN = xr.DataArray( # array of only nans
23 data=[[[np.nan, np.nan], [np.nan, np.nan]], [[np.nan, np.nan], [np.nan, np.nan]]],
24 dims=["i", "j", "k"],
25 coords={"i": [1, 2], "j": [10000, 10001], "k": [1, 2]},
26)
27EXP_AD = xr.DataArray(
28 data=[[[1, np.nan], [180, 0]], [[59, np.nan], [70, 100]]],
29 dims=["i", "j", "k"],
30 coords={"i": [1, 2], "j": [10000, 10001], "k": [1, 2]},
31)
32EXP_AD_NAN = xr.DataArray(
33 data=[[[np.nan, np.nan], [np.nan, np.nan]], [[np.nan, np.nan], [np.nan, np.nan]]],
34 dims=["i", "j", "k"],
35 coords={"i": [1, 2], "j": [10000, 10001], "k": [1, 2]},
36)
37EXP_DS = xr.Dataset({"a": EXP_AD, "b": EXP_AD})
40@pytest.mark.parametrize(
41 ("source_a", "source_b", "expected"),
42 [
43 (DA_DIR_A, DA_DIR_B, EXP_AD),
44 (DA_DIR_A, DA_DIR_NAN, EXP_AD_NAN),
45 (DS_DIR_A, DS_DIR_B, EXP_DS),
46 ],
47)
48def test_angular_difference(source_a, source_b, expected):
49 """Tests that angular_difference returns correct values"""
50 output = angular_difference(source_a, source_b)
51 output.broadcast_equals(expected)