@@ -135,9 +135,86 @@ def test_convert_series():
135135 timepoints = np .array ([1850.0 , 2000.0 , 2050.0 , 2100.0 ]),
136136 )
137137
138+ target_units = (
139+ start .loc [start .index .get_level_values ("variable" ) != "temperature" ]
140+ .reset_index ("unit" )["unit" ]
141+ .replace ({"W / m^2" : "ZJ / yr / m^2" , "ZJ" : "PJ" })
142+ )
143+
144+ res = convert_unit (start , target_units )
145+
146+ np .testing .assert_allclose (
147+ res .loc [res .index .get_level_values ("variable" ) == "temperature" , :].values ,
148+ start .loc [start .index .get_level_values ("variable" ) == "temperature" , :].values ,
149+ )
150+
151+ np .testing .assert_allclose (
152+ res .loc [res .index .get_level_values ("variable" ) == "erf" , :].values ,
153+ (60.0 * 60.0 * 24.0 * 365.25 )
154+ * 1e-21
155+ * start .loc [start .index .get_level_values ("variable" ) == "erf" , :].values ,
156+ )
157+
158+ np .testing .assert_allclose (
159+ res .loc [res .index .get_level_values ("variable" ) == "ohc" , :].values ,
160+ 1e6 * start .loc [start .index .get_level_values ("variable" ) == "ohc" , :].values ,
161+ )
162+
163+
164+ def test_convert_series_all_rows ():
165+ # Check that conversion works if user supplies a Series of target units
166+ start = create_test_df (
167+ variables = [
168+ ("temperature" , "K" ),
169+ ("erf" , "W / m^2" ),
170+ ("ohc" , "ZJ" ),
171+ ],
172+ n_scenarios = 2 ,
173+ n_runs = 2 ,
174+ timepoints = np .array ([1850.0 , 2000.0 , 2050.0 , 2100.0 ]),
175+ )
176+
177+ target_units = start .reset_index ("unit" )["unit" ].replace (
178+ {"W / m^2" : "ZJ / yr / m^2" , "ZJ" : "PJ" }
179+ )
180+
181+ res = convert_unit (start , target_units )
182+
183+ np .testing .assert_allclose (
184+ res .loc [res .index .get_level_values ("variable" ) == "temperature" , :].values ,
185+ start .loc [start .index .get_level_values ("variable" ) == "temperature" , :].values ,
186+ )
187+
188+ np .testing .assert_allclose (
189+ res .loc [res .index .get_level_values ("variable" ) == "erf" , :].values ,
190+ (60.0 * 60.0 * 24.0 * 365.25 )
191+ * 1e-21
192+ * start .loc [start .index .get_level_values ("variable" ) == "erf" , :].values ,
193+ )
194+
195+ np .testing .assert_allclose (
196+ res .loc [res .index .get_level_values ("variable" ) == "ohc" , :].values ,
197+ 1e6 * start .loc [start .index .get_level_values ("variable" ) == "ohc" , :].values ,
198+ )
199+
200+
201+ def test_convert_series_extra_rows ():
202+ # Check that conversion works if user supplies a Series of target units
203+ start = create_test_df (
204+ variables = [
205+ ("temperature" , "K" ),
206+ ("erf" , "W / m^2" ),
207+ ("ohc" , "ZJ" ),
208+ ],
209+ n_scenarios = 2 ,
210+ n_runs = 2 ,
211+ timepoints = np .array ([1850.0 , 2000.0 , 2050.0 , 2100.0 ]),
212+ )
213+
138214 target_units = start .reset_index ("unit" )["unit" ].replace (
139215 {"W / m^2" : "ZJ / yr / m^2" , "ZJ" : "PJ" }
140216 )
217+ target_units .loc [("scenario_2" , "temperature" , 0 )] = "kK"
141218
142219 res = convert_unit (start , target_units )
143220
0 commit comments