|
7 | 7 | from datetime import datetime |
8 | 8 |
|
9 | 9 | import numpy as np |
| 10 | +import xarray as xr |
10 | 11 | import pytest |
11 | 12 |
|
12 | 13 | from zappend.config.attrs import ConfigAttrsUserFunctions |
@@ -149,51 +150,56 @@ def test_yes(self): |
149 | 150 |
|
150 | 151 | class EvalExprTest(unittest.TestCase): |
151 | 152 | def test_all_cases(self): |
| 153 | + # scalars |
| 154 | + self.assertEqual(None, eval_expr("None", {})) |
152 | 155 | self.assertEqual(True, eval_expr("True", {})) |
153 | 156 | self.assertEqual(13, eval_expr("13", {})) |
154 | 157 | self.assertEqual(0.5, eval_expr("0.5", {})) |
155 | 158 | self.assertEqual("ABC", eval_expr("'ABC'", {})) |
156 | | - |
157 | | - switches = np.array([True, False]) |
| 159 | + time = datetime.fromisoformat("2024-01-02T10:20:30") |
158 | 160 | self.assertEqual( |
159 | | - True, |
160 | | - eval_expr("switches[0]", {"switches": switches}), |
| 161 | + "2024-01-02T10:20:30", |
| 162 | + eval_expr("time", dict(time=time)), |
161 | 163 | ) |
162 | 164 |
|
163 | | - levels = [3, 4, 5] |
164 | | - self.assertIs( |
165 | | - levels, |
166 | | - eval_expr("levels", {"levels": levels}), |
167 | | - ) |
| 165 | + # arrays |
| 166 | + self.assert_array_ok([True, False]) |
| 167 | + self.assert_array_ok([3, 4, 5]) |
| 168 | + self.assert_array_ok([11.05, 11.15, 11.25]) |
| 169 | + self.assert_array_ok(["A", "B"]) |
| 170 | + self.assert_array_ok(["2024-01-02T10:20:30"], dtype="datetime64[s]") |
168 | 171 |
|
169 | | - levels = np.array([3, 4, 5]) |
| 172 | + def assert_array_ok(self, a: list, dtype=None): |
| 173 | + # Test list |
170 | 174 | self.assertEqual( |
171 | | - 3, |
172 | | - eval_expr("levels[0]", {"levels": levels}), |
| 175 | + a, |
| 176 | + eval_expr("a", dict(a=a)), |
173 | 177 | ) |
174 | | - |
175 | | - lon = np.array([11.05, 11.15, 11.25]) |
176 | | - self.assertIs( |
177 | | - lon, |
178 | | - eval_expr("lon", {"lon": lon}), |
| 178 | + self.assertEqual( |
| 179 | + a[0], |
| 180 | + eval_expr("a[0]", dict(a=a)), |
179 | 181 | ) |
180 | 182 |
|
181 | | - lon = np.array([11.05, 11.15, 11.25]) |
| 183 | + # Test numpy.ndarray |
| 184 | + np_a = np.array(a, dtype=dtype) if dtype is not None else np.array(a) |
182 | 185 | self.assertEqual( |
183 | | - 11.05, |
184 | | - eval_expr("lon[0]", {"lon": lon}), |
| 186 | + a, |
| 187 | + eval_expr("a", dict(a=np_a)), |
185 | 188 | ) |
186 | | - |
187 | | - names = np.array(["A", "B"]) |
188 | 189 | self.assertEqual( |
189 | | - "A", |
190 | | - eval_expr("names[0]", {"names": names}), |
| 190 | + a[0], |
| 191 | + eval_expr("a[0]", dict(a=np_a)), |
191 | 192 | ) |
192 | 193 |
|
193 | | - time = datetime.fromisoformat("2024-01-02T10:20:30") |
| 194 | + # Test xarray-DataArray |
| 195 | + xr_a = xr.DataArray(np_a, dims="x") |
194 | 196 | self.assertEqual( |
195 | | - "2024-01-02T10:20:30", |
196 | | - eval_expr("time", {"time": time}), |
| 197 | + a, |
| 198 | + eval_expr("a", dict(a=xr_a)), |
| 199 | + ) |
| 200 | + self.assertEqual( |
| 201 | + a[0], |
| 202 | + eval_expr("a[0]", dict(a=xr_a)), |
197 | 203 | ) |
198 | 204 |
|
199 | 205 |
|
|
0 commit comments