13 from mpi4py
import MPI
19from numpy
import deg2rad
21from yac.core
import InterpMethodConfig, InterpolationStack
24cfg = InterpMethodConfig(
"nnn")
25cfg.set_param_int(
"n", 8)
26n = cfg.get_param_int(
"n")
27assert n == 8, f
"set/get int: expected n==8, got {n}"
30cfg2 = InterpMethodConfig(
"nnn")
31cfg2.set_param_dble(
"max_search_distance", 0.5)
32d = cfg2.get_param_dble(
"max_search_distance")
33assert d == 0.5, f
"set/get dble: expected 0.5, got {d}"
36cfg_n_min = InterpMethodConfig(
"nnn")
37n_min = cfg_n_min.get_param_int(
"n_min")
38assert n_min == 0, f
"default n_min: expected 0, got {n_min}"
39cfg_n_min.set_param_int(
"n", 8)
40cfg_n_min.set_param_int(
"n_min", 4)
41n_min = cfg_n_min.get_param_int(
"n_min")
42assert n_min == 4, f
"set/get int: expected n_min==4, got {n_min}"
45cfg_dnn_n_min = InterpMethodConfig(
"dnn")
46n_min = cfg_dnn_n_min.get_param_int(
"n_min")
47assert n_min == 1, f
"default dnn n_min: expected 1, got {n_min}"
48cfg_dnn_n_min.set_param_int(
"n_min", 3)
49n_min = cfg_dnn_n_min.get_param_int(
"n_min")
50assert n_min == 3, f
"set/get int: expected n_min==3, got {n_min}"
53cfg3 = InterpMethodConfig(
"nnn")
54cfg3.set_param_str(
"weighted",
"gauss_weighted")
55s = cfg3.get_param_str(
"weighted")
56assert s ==
"gauss_weighted", f
"set/get str: expected 'gauss_weighted', got '{s}'"
59cfg4 = InterpMethodConfig(
"dnn")
60cfg4.set_param_dble(
"search_distance.fixed", deg2rad(1))
61d4 = cfg4.get_param_dble(
"search_distance.fixed")
62assert d4 == deg2rad(1), f
"dot-path dble: wrong value {d4}"
65stack = InterpolationStack()
66cfg5 = InterpMethodConfig(
"nnn")
67cfg5.set_param_int(
"n", 3)
68stack.add_from_config(cfg5)
71cfg6 = InterpMethodConfig(
"nnn")
73assert cfg6.get_param_int(
"n") == 5,
"set_param int dispatch failed"
75cfg6.set_param(
"max_search_distance", 1.5)
76assert cfg6.get_param_dble(
"max_search_distance") == 1.5,
"set_param float dispatch failed"
78cfg6.set_param(
"weighted",
"gauss_weighted")
79assert cfg6.get_param_str(
"weighted") ==
"gauss_weighted",
"set_param str dispatch failed"
81cfg7 = InterpMethodConfig(
"spmap")
82cfg7.set_param(
"overwrite", [
87 "lon": deg2rad(-50.0),
90 "radius": deg2rad(4.0),
93 "spread_distance": deg2rad(0.3),
100 "lat": deg2rad(90.0),
102 "radius": deg2rad(2.0),
105 "spread_distance": deg2rad(0.4),
109assert cfg7.get_param_dble(
"overwrite.0.spread_distance") == deg2rad(0.3)
110assert cfg7.get_param_dble(
"overwrite.0.condition.bounding_circle.radius") == deg2rad(4.0)
111assert cfg7.get_param_dble(
"overwrite.1.spread_distance") == deg2rad(0.4)
115cfg8 = InterpMethodConfig(
"nnn",
117 weighted=
"gauss_weighted",
118 max_search_distance=1.4,
120assert cfg8.get_param_int(
"n") == 3,
"set_param int dispatch failed"
121assert cfg8.get_param_str(
"weighted") ==
"gauss_weighted",
"set_param str dispatch failed"
122assert abs(cfg8.get_param_dble(
"max_search_distance") - 1.4) < 1e-15,
"set_param float dispatch failed"
127for method_name
in (
"average",
"ncc",
"dnn",
"nnn",
"conservative",
128 "fixed",
"check",
"bernstein_bezier",
"creep",
129 "source_to_target_map"):
130 c = InterpMethodConfig(method_name)
131 assert c
is not None, f
"failed to create default config for '{method_name}'"
134spmap = InterpMethodConfig(
"spmap")
137assert spmap.get_list_size(
"overwrite") == 0, \
138 "spmap overwrite list should start empty"
141idx0 = spmap.append_list_element(
"overwrite")
142assert idx0 == 0, f
"expected index 0 for first append, got {idx0}"
143assert spmap.get_list_size(
"overwrite") == 1, \
144 "expected list size 1 after one append"
147spmap.set_param_dble(
"overwrite.0.spread_distance", 0.05)
148sd0 = spmap.get_param_dble(
"overwrite.0.spread_distance")
149assert sd0 == 0.05, f
"overwrite.0.spread_distance round-trip failed: {sd0}"
152idx1 = spmap.append_list_element(
"overwrite")
153assert idx1 == 1, f
"expected index 1 for second append, got {idx1}"
155spmap.set_param_dble(
"overwrite.1.spread_distance", 0.10)
156sd1 = spmap.get_param_dble(
"overwrite.1.spread_distance")
157assert sd1 == 0.10, f
"overwrite.1.spread_distance round-trip failed: {sd1}"
160sd0_check = spmap.get_param_dble(
"overwrite.0.spread_distance")
161assert sd0_check == 0.05, \
162 f
"overwrite.0 was modified when setting overwrite.1: {sd0_check}"
165stack2 = InterpolationStack()
166stack2.add_method(
"nnn",
168 weighted=
"distance_weighted",
169 max_search_distance=2.2
171stack2.add_method(
"spmap",
176 "lon": deg2rad(-50.0),
179 "radius": deg2rad(4.0),
182 "spread_distance": 0.0002}],