@@ -41,6 +41,38 @@ def gen_msftmz_dset(seed: int = 1):
4141 )
4242
4343
44+ def gen_permafrost_dset (seed : int = 1 ):
45+ rs = np .random .RandomState (seed )
46+ coords = {}
47+ # time, depth, lat, lon
48+ coords ["time" ] = [
49+ cf .DatetimeNoLeap (2000 + int (m / 12 ), (m % 12 ) + 1 , 15 ) for m in range (3 * 12 )
50+ ]
51+ coords ["depth" ] = 0.5 * (
52+ np .linspace (0 , 5 , 10 + 1 )[1 :] + np .linspace (0 , 5 , 10 + 1 )[:- 1 ]
53+ )
54+ coords ["lat" ] = 0.5 * (
55+ np .linspace (60 , 90 , 10 + 1 )[1 :] + np .linspace (60 , 90 , 10 + 1 )[:- 1 ]
56+ )
57+ coords ["lon" ] = 0.5 * (
58+ np .linspace (- 180 , 180 , 20 + 1 )[1 :] + np .linspace (- 180 , 180 , 20 + 1 )[:- 1 ]
59+ )
60+ dims = [c for c in coords ]
61+ ds = xr .Dataset (
62+ data_vars = {
63+ "tsl" : xr .DataArray (
64+ rs .rand (* [len (coords [d ]) for d in dims ]) * 20 - 18 ,
65+ coords = coords ,
66+ dims = dims ,
67+ name = "tsl" ,
68+ attrs = {"units" : "degC" },
69+ ),
70+ }
71+ )
72+ ds = ds .cf .add_bounds ("depth" )
73+ return ds
74+
75+
4476def gen_expression_dset (
4577 expr : str ,
4678 var_meta : dict [str , dict [str , float | str ]],
@@ -100,6 +132,7 @@ def gen_expression_dset(
100132 "depth_gradient" : generate_test_dset (
101133 "thetao" , "K" , nyear = 1 , nlat = 2 , nlon = 4 , ndepth = 10
102134 ),
135+ "active_layer_thickness" : gen_permafrost_dset (),
103136}
104137
105138
@@ -112,12 +145,17 @@ def gen_expression_dset(
112145 ("select_depth" , {"value" : 0 }, "thetao" , 9.43861150676275 ),
113146 ("select_depth" , {"vmin" : 1 , "vmax" : 40 }, "thetao" , 9.983843647875275 ),
114147 ("depth_gradient" , {}, "thetao" , - 0.005550578833866464 ),
148+ (
149+ "active_layer_thickness" ,
150+ {"method" : "slater2013" },
151+ "active_layer_thickness" ,
152+ 2.224852071005917 ,
153+ ),
115154 ],
116155)
117156def test_transform (name , kwargs , out , value ):
118157 transform = ALL_TRANSFORMS [name ](** kwargs )
119158 ds = transform (DATA [name ])
120- print (ds [out ].mean ().values ) # this value should be the correct one
121159 assert np .allclose (value , ds [out ].mean ().values )
122160
123161
0 commit comments