Coverage for tests/probabilty/cdf_test_data.py: 100%
85 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"""
2Generation of the test data used to test scores.probability.functions.cdfs
3"""
5import xarray as xr
6from numpy import nan
8###
9# Test data for cdfvalues_from_probs
10###
11DA_CDF_FROM_PROBS = xr.DataArray( # nonexceedance probabilities
12 data=[0.4, 0.9, 0.6, 0.8, nan], dims=["x"], coords={"x": [0, 10, 5, 6, 11]}
13)
15EXP_CDF_FROM_PROBS = xr.DataArray(
16 data=[0.4, 0.6, 0.8, 0.9, nan],
17 dims=["x"],
18 coords={"x": [0, 5, 6, 10, 11]},
19 name="cdf",
20)
23""""
24Test data for cdfvalues_from_quantiles
25"""
26DA_CDF_FROM_QUANTS1 = xr.DataArray( # example with no point mass
27 data=[[8, 11, 15, nan], [1, 3, 13, nan]],
28 dims=["station", "q_level"],
29 coords={"station": [1001, 1002], "q_level": [0.2, 0.5, 0.9, 0.95]},
30)
32EXP_CDF_FROM_QUANTS1 = xr.DataArray(
33 data=[
34 [nan, nan, 0.2, 0.5, nan, 0.9],
35 [0.2, 0.5, nan, nan, 0.9, nan],
36 ],
37 dims=["station", "x"],
38 coords={"station": [1001, 1002], "x": [1, 3, 8, 11, 13, 15]},
39 name="cdf",
40)
42DA_CDF_FROM_QUANTS2 = xr.DataArray( # point mass at x=13
43 data=[[8, 8, 15], [1, 3, 13]],
44 dims=["station", "q_level"],
45 coords={"station": [1001, 1002], "q_level": [0.2, 0.5, 0.9]},
46)
48EXP_CDF_FROM_QUANTS2 = xr.DataArray(
49 data=[[nan, nan, 0.35, nan, 0.9], [0.2, 0.5, nan, nan, nan]],
50 dims=["station", "x"],
51 coords={"station": [1001, 1002], "x": [1, 3, 8, 13, 15]},
52 name="cdf",
53)
55DA_CDF_FROM_QUANTS3 = xr.DataArray( # quantile levels outside interval (0,1)
56 data=[[8, 8, 15], [1, 3, 13]],
57 dims=["station", "q_level"],
58 coords={"station": [1001, 1002], "q_level": [-0.2, 0.5, 0.9]},
59)
61DA_CDF_FROM_QUANTS4 = xr.DataArray( # quantile levels outside interval (0,1)
62 data=[[8, 8, 15], [1, 3, 13]],
63 dims=["station", "q_level"],
64 coords={"station": [1001, 1002], "q_level": [0.2, 0.5, 1.0]},
65)
67DA_WITHIN_BOUNDS1 = xr.DataArray( # all nans
68 data=[[nan, nan, nan], [nan, nan, nan]],
69 dims=["station", "x"],
70 coords={"station": [1001, 1002], "x": [0.2, 0.5, 1.0]},
71)
73DA_WITHIN_BOUNDS2 = xr.DataArray(
74 data=[[nan, 0, 0.9], [0.5, nan, 1]],
75 dims=["station", "x"],
76 coords={"station": [1001, 1002], "x": [0.2, 0.5, 1.0]},
77)
79DA_WITHIN_BOUNDS3 = xr.DataArray(
80 data=[[nan, 0, -0.9], [0.5, nan, 1]],
81 dims=["station", "x"],
82 coords={"station": [1001, 1002], "x": [0.2, 0.5, 1.0]},
83)
86DA_FILL_CDF1 = xr.DataArray(
87 data=[
88 [nan, nan, nan, nan, nan, nan, nan],
89 [nan, 0.4, nan, nan, nan, nan, nan],
90 [nan, 0.2, nan, 0.8, 0.9, nan, nan],
91 [0, 0.1, 0.6, 0.8, 1, nan, nan],
92 ],
93 dims=["station", "x"],
94 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4, 5, 6]},
95)
97EXP_FILL_CDF1A = xr.DataArray( # linear fill
98 data=[
99 [nan, nan, nan, nan, nan, nan, nan],
100 [nan, nan, nan, nan, nan, nan, nan],
101 [0, 0.2, 0.5, 0.8, 0.9, 1, 1],
102 [0, 0.1, 0.6, 0.8, 1, 1, 1],
103 ],
104 dims=["station", "x"],
105 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4, 5, 6]},
106)
108EXP_FILL_CDF1B = xr.DataArray( # step fill
109 data=[
110 [nan, nan, nan, nan, nan, nan, nan],
111 [0, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4],
112 [0, 0.2, 0.2, 0.8, 0.9, 0.9, 0.9],
113 [0, 0.1, 0.6, 0.8, 1, 1, 1],
114 ],
115 dims=["station", "x"],
116 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4, 5, 6]},
117)
119EXP_FILL_CDF1C = xr.DataArray( # step fill, min_nonnan=2
120 data=[
121 [nan, nan, nan, nan, nan, nan, nan],
122 [nan, nan, nan, nan, nan, nan, nan],
123 [0, 0.2, 0.2, 0.8, 0.9, 0.9, 0.9],
124 [0, 0.1, 0.6, 0.8, 1, 1, 1],
125 ],
126 dims=["station", "x"],
127 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4, 5, 6]},
128)
130EXP_FILL_CDF1D = xr.DataArray( # forward fill
131 data=[
132 [nan, nan, nan, nan, nan, nan, nan],
133 [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4],
134 [0.2, 0.2, 0.2, 0.8, 0.9, 0.9, 0.9],
135 [0, 0.1, 0.6, 0.8, 1, 1, 1],
136 ],
137 dims=["station", "x"],
138 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4, 5, 6]},
139)
141EXP_FILL_CDF1E = xr.DataArray( # backward fill
142 data=[
143 [nan, nan, nan, nan, nan, nan, nan],
144 [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4],
145 [0.2, 0.2, 0.8, 0.8, 0.9, 0.9, 0.9],
146 [0, 0.1, 0.6, 0.8, 1, 1, 1],
147 ],
148 dims=["station", "x"],
149 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4, 5, 6]},
150)
152DA_CDFFPF_PROBS = xr.DataArray(
153 data=[
154 [nan, nan, nan, nan, nan],
155 [nan, 0.5, nan, 0.8, nan],
156 [0, 0.2, 0.2, 0.8, 0.9],
157 ],
158 dims=["station", "x"],
159 coords={"station": [1001, 1002, 1003], "x": [0, 1, 2, 3, 4]},
160)
162DA_CDFFPF_PROBS_REORDER = xr.DataArray( # same as above but reorderd coords
163 data=[
164 [nan, nan, nan, nan, nan],
165 [nan, 0.5, nan, nan, 0.8],
166 [0, 0.2, 0.2, 0.9, 0.8],
167 ],
168 dims=["station", "x"],
169 coords={"station": [1001, 1002, 1003], "x": [0, 1, 2, 4, 3]},
170)
172DA_CDFFPF_QUANTS = xr.DataArray(
173 data=[
174 [nan, nan, nan],
175 [0.2, 1, 2.773],
176 [2.667, 2.8, 2.901],
177 ],
178 dims=["station", "level"],
179 coords={"station": [1001, 1002, 1003], "level": [0.25, 0.5, 0.75]},
180)
182DA_CDFFPF_QUANTS_REORDER = xr.DataArray( # same as above but reorderd coords
183 data=[
184 [nan, nan, nan],
185 [1, 0.2, 2.773],
186 [2.8, 2.667, 2.901],
187 ],
188 dims=["station", "level"],
189 coords={"station": [1001, 1002, 1003], "level": [0.5, 0.25, 0.75]},
190)
192EXP_CDFFPF_NOFILL_NOROUND = xr.DataArray(
193 data=[
194 [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
195 [nan, 0.25, 0.5, nan, nan, 0.75, nan, nan, 0.8, nan],
196 [0, nan, 0.2, 0.2, 0.25, nan, 0.5, 0.75, 0.8, 0.9],
197 ],
198 dims=["station", "x"],
199 coords={
200 "station": [1001, 1002, 1003],
201 "x": [0, 0.2, 1, 2, 2.667, 2.773, 2.8, 2.901, 3, 4],
202 },
203 name="cdf",
204)
206EXP_CDFFPF_NOFILL_ROUND = xr.DataArray(
207 data=[
208 [nan, nan, nan, nan, nan, nan, nan, nan],
209 [nan, 0.25, 0.5, nan, nan, 0.75, 0.8, nan],
210 [0, nan, 0.2, 0.2, 0.25, 0.5, 0.8, 0.9],
211 ],
212 dims=["station", "x"],
213 coords={
214 "station": [1001, 1002, 1003],
215 "x": [0, 0.2, 1, 2, 2.6, 2.8, 3, 4],
216 },
217 name="cdf",
218)
220DA_CDFFPF_QUANTS1 = xr.DataArray(
221 data=[
222 [nan, nan, nan],
223 [0.2, 1, 2.773],
224 [2.667, 2.8, 5], # last entry differs from DA_CDFFPF_QUANTS
225 ],
226 dims=["station", "level"],
227 coords={"station": [1001, 1002, 1003], "level": [0.25, 0.5, 0.75]},
228)
230EXP_CDFFPF_STEPFILL_NOROUND1 = xr.DataArray( # minnan = 2
231 data=[
232 [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
233 [0, 0.25, 0.5, 0.5, 0.5, 0.75, 0.75, 0.75, 0.8, 0.8],
234 [0, 0, 0.2, 0.2, 0.25, 0.25, 0.5, 0.75, 0.8, 0.9],
235 ],
236 dims=["station", "x"],
237 coords={
238 "station": [1001, 1002, 1003],
239 "x": [0, 0.2, 1, 2, 2.667, 2.773, 2.8, 2.901, 3, 4],
240 },
241 name="cdf",
242)
244EXP_CDFFPF_STEPFILL_NOROUND2 = xr.DataArray( # minnan = 5
245 data=[
246 [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
247 [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
248 [0, 0, 0.2, 0.2, 0.25, 0.25, 0.5, 0.75, 0.8, 0.9],
249 ],
250 dims=["station", "x"],
251 coords={
252 "station": [1001, 1002, 1003],
253 "x": [0, 0.2, 1, 2, 2.667, 2.773, 2.8, 2.901, 3, 4],
254 },
255 name="cdf",
256)
258EXP_CDFFPF_PRIORITISE_PROBS1 = xr.DataArray( # inconsistent but not conflicting
259 data=[
260 [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
261 [nan, 0.25, 0.5, nan, nan, 0.75, nan, 0.8, nan, nan],
262 [0, nan, 0.2, 0.2, 0.25, nan, 0.5, 0.8, 0.9, 0.75],
263 ],
264 dims=["station", "x"],
265 coords={
266 "station": [1001, 1002, 1003],
267 "x": [0, 0.2, 1, 2, 2.667, 2.773, 2.8, 3, 4, 5],
268 },
269 name="cdf",
270)
272DA_CDFFPF_QUANTS2 = xr.DataArray(
273 data=[
274 [nan, nan, nan],
275 [0.2, 1, 2.773],
276 [2.667, 2.8, 4], # last entry differs from DA_CDFFPF_QUANTS
277 ],
278 dims=["station", "level"],
279 coords={"station": [1001, 1002, 1003], "level": [0.25, 0.5, 0.75]},
280)
282EXP_CDFFPF_PRIORITISE_PROBS2 = xr.DataArray( # conflicting, last entry of quants
283 data=[
284 [nan, nan, nan, nan, nan, nan, nan, nan, nan],
285 [nan, 0.25, 0.5, nan, nan, 0.75, nan, 0.8, nan],
286 [0, nan, 0.2, 0.2, 0.25, nan, 0.5, 0.8, 0.9],
287 ],
288 dims=["station", "x"],
289 coords={
290 "station": [1001, 1002, 1003],
291 "x": [0, 0.2, 1, 2, 2.667, 2.773, 2.8, 3, 4],
292 },
293 name="cdf",
294)
296EXP_CDFFPF_PRIORITISE_QUANTS2 = xr.DataArray( # conflicting, last entry of quants
297 data=[
298 [nan, nan, nan, nan, nan, nan, nan, nan, nan],
299 [nan, 0.25, 0.5, nan, nan, 0.75, nan, 0.8, nan],
300 [0, nan, 0.2, 0.2, 0.25, nan, 0.5, 0.8, 0.75],
301 ],
302 dims=["station", "x"],
303 coords={
304 "station": [1001, 1002, 1003],
305 "x": [0, 0.2, 1, 2, 2.667, 2.773, 2.8, 3, 4],
306 },
307 name="cdf",
308)
310DA_CDF_ENVELOPE1 = xr.DataArray(
311 data=[
312 [0.2, 0.4, 0.5, 0.8, 1],
313 [0.2, 0.1, 0.7, 0.4, 0.9],
314 [0, 0.6, nan, 0.7, 0.5],
315 [nan, nan, nan, nan, nan],
316 ],
317 dims=["station", "x"],
318 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4]},
319)
321EXP_CDF_ENVELOPE1 = xr.DataArray(
322 data=[
323 [
324 [0.2, 0.4, 0.5, 0.8, 1],
325 [0.2, 0.1, 0.7, 0.4, 0.9],
326 [0, 0.6, nan, 0.7, 0.5],
327 [nan, nan, nan, nan, nan],
328 ],
329 [
330 [0.2, 0.4, 0.5, 0.8, 1],
331 [0.2, 0.2, 0.7, 0.7, 0.9],
332 [0, 0.6, nan, 0.7, 0.7],
333 [nan, nan, nan, nan, nan],
334 ],
335 [
336 [0.2, 0.4, 0.5, 0.8, 1],
337 [0.1, 0.1, 0.4, 0.4, 0.9],
338 [0, 0.5, nan, 0.5, 0.5],
339 [nan, nan, nan, nan, nan],
340 ],
341 ],
342 dims=["cdf_type", "station", "x"],
343 coords={
344 "cdf_type": ["original", "upper", "lower"],
345 "station": [1001, 1002, 1003, 1004],
346 "x": [0, 1, 2, 3, 4],
347 },
348)
350DA_CDF_ENVELOPE2 = xr.DataArray( # same as DA_CDF_ENVELOPE1, but with coords unordered
351 data=[
352 [0.2, 0.4, 0.5, 1, 0.8],
353 [0.2, 0.1, 0.7, 0.9, 0.4],
354 [0, 0.6, nan, 0.5, 0.7],
355 [nan, nan, nan, nan, nan],
356 ],
357 dims=["station", "x"],
358 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 4, 3]},
359)
361DA_PROPNAN = xr.DataArray(
362 data=[
363 [0, 0, nan, 1.0],
364 [0, 1.0, 1.0, nan],
365 [0, 0, 1.0, 1.0],
366 ],
367 dims=["x", "y"],
368 coords={"x": [1001, 1002, 1003], "y": [0, 1, 2, 4]},
369)
371EXP_PROPNAN_X = xr.DataArray(
372 data=[
373 [0, 0, nan, nan],
374 [0, 1.0, nan, nan],
375 [0, 0, nan, nan],
376 ],
377 dims=["x", "y"],
378 coords={"x": [1001, 1002, 1003], "y": [0, 1, 2, 4]},
379)
381EXP_PROPNAN_Y = xr.DataArray(
382 data=[
383 [nan, nan, nan, nan],
384 [nan, nan, nan, nan],
385 [0, 0, 1.0, 1.0],
386 ],
387 dims=["x", "y"],
388 coords={"x": [1001, 1002, 1003], "y": [0, 1, 2, 4]},
389)
391DA_DECREASING_CDFS1 = xr.DataArray(
392 data=[
393 [0.2, 0.4, 0.5, 0.8, 1],
394 [0.2, 0.1, 0.7, 0.4, 0.9],
395 [0, 0.6, 0.59, 0.7, 0.69],
396 [nan, nan, nan, nan, nan],
397 ],
398 dims=["station", "x"],
399 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4]},
400)
402EXP_DECREASING_CDFS1A = xr.DataArray(
403 data=[False, True, True, False],
404 dims=["station"],
405 coords={"station": [1001, 1002, 1003, 1004]},
406)
408EXP_DECREASING_CDFS1B = xr.DataArray(
409 data=[False, True, False, False],
410 dims=["station"],
411 coords={"station": [1001, 1002, 1003, 1004]},
412)
414DA_NAN_DECREASING_CDFS = xr.DataArray(
415 data=[
416 [nan, nan, nan, nan, nan],
417 [0.2, 0.4, 0.5, 0.8, 1],
418 [0, 0.6, 0.59, 0.7, 0.69],
419 [0, 0.6, 0.59, 0.7, 0.68],
420 ],
421 dims=["station", "x"],
422 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4]},
423)
425EXP_NAN_DECREASING_CDFS = xr.DataArray(
426 data=[
427 [nan, nan, nan, nan, nan],
428 [0.2, 0.4, 0.5, 0.8, 1],
429 [0, 0.6, 0.59, 0.7, 0.69],
430 [nan, nan, nan, nan, nan],
431 ],
432 dims=["station", "x"],
433 coords={"station": [1001, 1002, 1003, 1004], "x": [0, 1, 2, 3, 4]},
434)
436DA_NAN_DECREASING_CDFS2 = xr.DataArray(
437 data=[[0.2, 0.4, 0.5, 0.8, 1]],
438 dims=["station", "x"],
439 coords={"station": [1001], "x": [0, 1, 20, 3, 4]},
440)
442DA_OBSERVED_CDF = xr.DataArray(
443 data=[[0, 0.15, 10], [0.24, 0, nan]],
444 dims=["station", "date"],
445 coords={"station": [1001, 1002], "date": [1, 2, 3]},
446)
448EXP_OBSERVED_CDF1 = xr.DataArray( # no rounding
449 data=[
450 [[1, 1, 1, 1], [0, 1, 1, 1], [0, 0, 0, 1]],
451 [[0, 0, 1, 1], [1, 1, 1, 1], [nan, nan, nan, nan]],
452 ],
453 dims=["station", "date", "x"],
454 coords={"x": [0, 0.15, 0.24, 10], "station": [1001, 1002], "date": [1, 2, 3]},
455)
457EXP_OBSERVED_CDF2 = xr.DataArray( # round to nearest 0.2
458 data=[
459 [[1, 1, 1], [0, 1, 1], [0, 0, 1]],
460 [[0, 1, 1], [1, 1, 1], [nan, nan, nan]],
461 ],
462 dims=["station", "date", "x"],
463 coords={"x": [0, 0.2, 10], "station": [1001, 1002], "date": [1, 2, 3]},
464)
466EXP_OBSERVED_CDF3 = xr.DataArray( # include [5] in thresholds
467 data=[
468 [[1, 1, 1, 1], [0, 1, 1, 1], [0, 0, 0, 1]],
469 [[0, 1, 1, 1], [1, 1, 1, 1], [nan, nan, nan, nan]],
470 ],
471 dims=["station", "date", "x"],
472 coords={"x": [0, 0.2, 5, 10], "station": [1001, 1002], "date": [1, 2, 3]},
473)
475EXP_OBSERVED_CDF4 = xr.DataArray( # include [0, 5, 15] in thresholds, no obs
476 data=[
477 [[1, 1, 1], [0, 1, 1], [0, 0, 1]],
478 [[0, 1, 1], [1, 1, 1], [nan, nan, nan]],
479 ],
480 dims=["station", "date", "x"],
481 coords={"x": [0, 5, 15], "station": [1001, 1002], "date": [1, 2, 3]},
482)
484DA_OBSERVED_CDF2 = xr.DataArray(
485 data=[[nan, nan, nan], [nan, nan, nan]],
486 dims=["station", "date"],
487 coords={"station": [1001, 1002], "date": [1, 2, 3]},
488)
490DA_ADD_THRESHOLDS = xr.DataArray(
491 data=[[[0.2, 0.4, 1, 1], [0, 0, 0.6, 1]]],
492 dims=["date", "station", "x"],
493 coords={"station": [1001, 1002], "date": ["2020-01-01"], "x": [0, 0.2, 0.5, 1]},
494)
496EXP_ADD_THRESHOLDS1 = xr.DataArray(
497 data=[[[0.2, 0.4, 1, 1, 1], [0, 0, 0.6, 0.8, 1]]],
498 dims=["date", "station", "x"],
499 coords={
500 "station": [1001, 1002],
501 "date": ["2020-01-01"],
502 "x": [0, 0.2, 0.5, 0.75, 1],
503 },
504)
506EXP_ADD_THRESHOLDS2 = xr.DataArray(
507 data=[[[0.2, 0.4, 1, nan, 1], [0, 0, 0.6, nan, 1]]],
508 dims=["date", "station", "x"],
509 coords={
510 "station": [1001, 1002],
511 "date": ["2020-01-01"],
512 "x": [0, 0.2, 0.5, 0.75, 1],
513 },
514)
516EXP_ECDF = xr.DataArray(
517 data=[0.4, 0.6, 0.7, 0.8, 0.9, 1],
518 dims=["x"],
519 coords={"x": [0, 0.2, 0.3, 0.7, 1.5, 4.2]},
520).rename("cdf")
523DA_CDF_EXPECTEDVALUE = xr.DataArray(
524 data=[
525 [0, 0.5, 1, 1],
526 [nan, 0.5, 1, 1],
527 [0, 0, 0.5, 1],
528 [0, 0, nan, 1],
529 [nan, nan, nan, nan],
530 ],
531 dims=["station", "x"],
532 coords={"station": [1001, 1002, 1003, 1004, 1005], "x": [-1, 0, 1, 2]},
533)
535EXP_EXPECTEDVALUE = xr.DataArray(
536 data=[0.25, 0.25, 1.0, nan, nan],
537 dims=["station"],
538 coords={"station": [1001, 1002, 1003, 1004, 1005]},
539)
541DA_SUPPORT1 = xr.DataArray(
542 data=[[0, 0, 0.2, 0.5, 1, 1], [0, 0, nan, 0.5, 1, 1]],
543 dims=["station", "x"],
544 coords={"station": [1001, 1002], "x": [-2, -1, 0, 1, 2, 3]},
545)
547DA_SUPPORT2 = xr.DataArray(
548 data=[[0, 0, nan, 0.2, 0.5, 1, nan, 1], [nan, nan, nan, nan, nan, nan, nan, nan]],
549 dims=["station", "x"],
550 coords={"station": [1001, 1002], "x": [-2, -1, 0, 1, 2, 3, 4, 5]},
551)
553DA_SUPPORT3 = xr.DataArray(
554 data=[[nan, nan, nan, nan, nan, nan, nan, nan]],
555 dims=["station", "x"],
556 coords={"station": [1001], "x": [-2, -1, 0, 1, 2, 3, 4, 5]},
557)
560DA_CDF_CHECK_SUPP = xr.DataArray(
561 data=[[0.2, 0.5, 1, 1]],
562 dims=["station", "x"],
563 coords={"station": [1001], "x": [-1, 0, 1, 2]},
564)
566DA_FUNCVALS = xr.DataArray(
567 data=[
568 [0, 0.25, 0.5, 1],
569 [0.5, 0.5, 0.5, 1],
570 [0.5, 0.5, nan, 1],
571 ],
572 dims=["station", "x"],
573 coords={"station": [1001, 1002, 1003], "x": [0, 0.5, 1, 2]},
574)
576EXP_VARCDF = xr.DataArray(
577 data=[2 / 3, 1 / 4 + 2 - 4 / 3 - 1 / 2 + 1 / 6, nan],
578 dims=["station"],
579 coords={"station": [1001, 1002, 1003]},
580)
582DA_CDF_VARIANCE = xr.DataArray(
583 data=[
584 [0, 0, 0.5, 1, 1], # std uniform dist
585 [0, 0, 0.25, 0.5, 1], # uniform dist on [0,2]
586 [0, 0, 0, 1, 1], # uniform dist on [0.5,1]
587 [nan, 0, 0.5, 1, 1], # NaN outside support of CDF
588 [0, 0, nan, 1, 1], # NaN inside support of CDF
589 [nan, nan, nan, nan, nan], # all NaN
590 ],
591 dims=["station", "x"],
592 coords={"station": [1001, 1002, 1003, 1004, 1005, 1006], "x": [-3, 0, 0.5, 1, 2]},
593)
595EXP_VARIANCE = xr.DataArray(
596 data=[1 / 12, 4 / 12, 1 / (4 * 12), 1 / 12, nan, nan],
597 dims=["station"],
598 coords={"station": [1001, 1002, 1003, 1004, 1005, 1006]},
599)
601DA_CDF_QUANTILES = xr.DataArray(
602 data=[
603 [0, 0.1, 0.3, 0.4, 0.7, 1.0, 1],
604 [nan, nan, nan, nan, nan, nan, nan],
605 [0.0, 0.6, 0.6, 0.6, 0.6, 0.6, 1.0], # quantile not unique
606 [0.0, 0.3, 0.9, 1.0, 1.0, 1.0, 1.0], # nearest not unique
607 [0.0, 0.5, nan, 0.65, 0.8, 0.9, 0.95],
608 ],
609 dims=["date", "x"],
610 coords={
611 "date": ["01", "02", "03", "04", "05"],
612 "x": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
613 },
614)
616EXP_QUANTILES1 = xr.DataArray(
617 data=[4.0, nan, 1.0, 1.0, 3.0],
618 dims=["date"],
619 coords={"date": ["01", "02", "03", "04", "05"]},
620 attrs={"quantile_level": 0.6},
621).rename("quantile")
623EXP_QUANTILES2 = xr.DataArray(
624 data=[3.5, nan, 1.0, 1.5, 2.5],
625 dims=["date"],
626 coords={"date": ["01", "02", "03", "04", "05"]},
627 attrs={"quantile_level": 0.6},
628).rename("quantile")
631DA_CDF_PIW = xr.DataArray(
632 data=[
633 [
634 [0, 0.1, 0.2, 0.4, 0.7, 0.8, 1], # exact answer
635 [nan, nan, nan, nan, nan, nan, nan],
636 ],
637 [
638 [0, 0.2, 0.2, 0.4, 0.7, 0.71, 0.9], # approximated
639 [0, 0, 0, 0.8, 0.2, 1, 1], # decreasing cdf (clips)
640 ],
641 ],
642 dims=["station", "date", "x"],
643 coords={
644 "station": [101, 102],
645 "date": ["1", "2"],
646 "x": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
647 },
648)
650EXP_PIW1 = xr.DataArray(
651 data=[[5.0 - 2.0, nan], [5.0 - 1.0, 0.0]],
652 dims=["station", "date"],
653 coords={"station": [101, 102], "date": ["1", "2"]},
654 attrs={"lower_quantile_level": 0.2, "upper_quantile_level": 0.8},
655).rename("prediction_interval_width")
657EXP_PIW2 = xr.DataArray(
658 data=[3.0, 2.0],
659 dims=["station"],
660 coords={"station": [101, 102]},
661 attrs={"lower_quantile_level": 0.2, "upper_quantile_level": 0.8},
662).rename("prediction_interval_width")
664EXP_PIW3 = xr.DataArray(
665 data=(3.0 + 4.0 + 0.0) / 3,
666 attrs={"lower_quantile_level": 0.2, "upper_quantile_level": 0.8},
667).rename("prediction_interval_width")
669EXP_PIW4 = xr.DataArray(
670 data=[[5.0 - 2.0, nan], [5.5 - 1.0, 0.0]],
671 dims=["station", "date"],
672 coords={"station": [101, 102], "date": ["1", "2"]},
673 attrs={"lower_quantile_level": 0.2, "upper_quantile_level": 0.8},
674).rename("prediction_interval_width")
676DA_CDF_BROACAST1 = xr.DataArray(
677 data=[[0.0, 0.5, 1.0, 1.0], [nan, nan, nan, nan], [0.0, nan, 0.0, 1.0]],
678 dims=["station", "x"],
679 coords={"station": [101, 102, 103], "x": [0.0, 1.0, 2.0, 3.0]},
680)
682DA_CDF_BROACAST2 = xr.DataArray(
683 data=[
684 [[0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]],
685 [[0.0, 0.5, 1.0, 1.0], [0.0, 0.2, 1.0, 1.0]],
686 [[0.0, 0.0, 0.0, 1.0], [0.5, 0.5, 1.0, 1.0]],
687 ],
688 dims=["station", "date", "x"],
689 coords={"station": [100, 101, 102], "date": ["1", "2"], "x": [0.0, 1.0, 2.0, 3.0]},
690)
692DA_CDF_BROACAST3 = xr.DataArray(
693 data=[
694 [[0.0, 0.5, 1.0, 1.0], [0.0, 0.2, nan, 0.4]],
695 ],
696 dims=["station", "date", "x"],
697 coords={"station": [101], "date": ["1", "2"], "x": [0.0, 1.0, 1.5, 2.0]},
698)
700EXP_BROADCAST_T1 = xr.DataArray(
701 data=[
702 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
703 [[0.0, 0.5, 0.75, 1.0, 1.0], [0.0, 0.5, 0.75, 1.0, 1.0]],
704 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
705 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
706 ],
707 dims=["station", "date", "x"],
708 coords={
709 "station": [100, 101, 102, 103],
710 "date": ["1", "2"],
711 "x": [0.0, 1.0, 1.5, 2.0, 3.0],
712 },
713)
715EXP_BROADCAST_T2 = xr.DataArray(
716 data=[
717 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
718 [[0.0, 0.5, 0.75, 1.0, 1.0], [0.0, 0.2, 0.6, 1.0, 1.0]],
719 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
720 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
721 ],
722 dims=["station", "date", "x"],
723 coords={
724 "station": [100, 101, 102, 103],
725 "date": ["1", "2"],
726 "x": [0.0, 1.0, 1.5, 2.0, 3.0],
727 },
728)
730EXP_BROADCAST_T3 = xr.DataArray(
731 data=[
732 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
733 [[0.0, 0.5, 1.0, 1.0, 1.0], [0.0, 0.2, 0.3, 0.4, 0.6]],
734 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
735 [[nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan]],
736 ],
737 dims=["station", "date", "x"],
738 coords={
739 "station": [100, 101, 102, 103],
740 "date": ["1", "2"],
741 "x": [0.0, 1.0, 1.5, 2.0, 3.0],
742 },
743)
746DA_SAMPLE = xr.DataArray(
747 data=[
748 [0.0, 0.0, 2.0, 5.0, 7.0],
749 [0.0, 1.0, 1.0, nan, 5.0],
750 [nan, nan, nan, nan, nan],
751 ],
752 dims=["station", "member"],
753 coords={"station": [100, 101, 102], "member": ["1", "2", "3", "4", "5"]},
754)
756EXP_ECDF1 = xr.DataArray( # preserve station, thresholds=None
757 data=[
758 [2 / 5, 2 / 5, 3 / 5, 4 / 5, 5 / 5],
759 [1 / 4, 3 / 4, 3 / 4, 4 / 4, 4 / 4],
760 [nan, nan, nan, nan, nan],
761 ],
762 dims=["station", "threshold"],
763 coords={"station": [100, 101, 102], "threshold": [0.0, 1.0, 2.0, 5.0, 7.0]},
764).rename("cdf")
766EXP_ECDF2 = xr.DataArray( # dims=None, thresholds=None
767 data=[3 / 9, 5 / 9, 6 / 9, 8 / 9, 9 / 9],
768 dims=["threshold"],
769 coords={"threshold": [0.0, 1.0, 2.0, 5.0, 7.0]},
770).rename("cdf")
772EXP_ECDF3 = xr.DataArray( # preserve station, thresholds=[2, 5, 10]
773 data=[
774 [3 / 5, 4 / 5, 5 / 5],
775 [3 / 4, 4 / 4, 4 / 4],
776 [nan, nan, nan],
777 ],
778 dims=["station", "threshold"],
779 coords={"station": [100, 101, 102], "threshold": [2.0, 5.0, 10.0]},
780).rename("cdf")
782DA_NAN_SAMPLE = xr.DataArray(
783 data=[
784 [nan, nan, nan, nan, nan],
785 [nan, nan, nan, nan, nan],
786 [nan, nan, nan, nan, nan],
787 ],
788 dims=["station", "member"],
789 coords={"station": [100, 101, 102], "member": ["1", "2", "3", "4", "5"]},
790)
792EXP_ECDF4 = xr.DataArray( # preserve station
793 data=[[nan], [nan], [nan]],
794 dims=["station", "threshold"],
795 coords={"station": [100, 101, 102], "threshold": [0.0]},
796).rename("cdf")