@@ -303,13 +303,15 @@ def test_petab_v2_boehm():
303303 petab_problem = v2 .Problem .from_yaml (
304304 models .get_problem_yaml_path (problem_id )
305305 )
306+ expected_fval_nominal = 138.22199693517703
306307
307308 # create model
308309 importer = PetabImporter (petab_problem )
309310 problem = importer .create_problem ()
310311 assert problem .x_names == petab_problem .x_ids
311312 assert problem .dim == petab_problem .n_estimated == 9
312313 assert problem .dim_full == len (petab_problem .parameters ) == 11
314+ # petab-non-estimated parameters are fixed in the pypesto problem
313315 assert problem .x_fixed_indices == [
314316 i for i , p in enumerate (petab_problem .parameters ) if not p .estimate
315317 ]
@@ -319,28 +321,46 @@ def test_petab_v2_boehm():
319321
320322 # evaluate objective at nominal parameters
321323 fval = problem .objective (np .asarray (petab_problem .x_nominal_free ))
322- assert np .isclose (fval , 138.22199693517703 )
324+ assert np .isclose (fval , expected_fval_nominal )
323325
324326 # deepcopy works?
325327 problem_deepcopy = copy .deepcopy (problem )
326328 fval = problem_deepcopy .objective (np .asarray (petab_problem .x_nominal_free ))
327- assert np .isclose (fval , 138.22199693517703 )
329+ assert np .isclose (fval , expected_fval_nominal )
328330
329331 # pickling works?
330332 problem_pickled = pickle .loads (pickle .dumps (problem )) # noqa: S301
331333 fval = problem_pickled .objective (np .asarray (petab_problem .x_nominal_free ))
332- assert np .isclose (fval , 138.22199693517703 )
334+ assert np .isclose (fval , expected_fval_nominal )
333335
334336 # gradient works?
335337 fval , grad = problem .objective (
336338 np .asarray (petab_problem .x_nominal_free ), sensi_orders = (0 , 1 )
337339 )
338- assert np .isclose (fval , 138.22199693517703 )
340+ assert np .isclose (fval , expected_fval_nominal )
341+ assert len (grad ) == petab_problem .n_estimated
342+
343+ # fixing parameters, ...
344+ problem .unfix_parameters (petab_problem .x_fixed_indices )
345+ assert problem .dim == len (petab_problem .parameters )
346+ with pytest .raises (ValueError , match = "Cannot compute gradient" ):
347+ # cannot compute sensitivities for fixed parameters
348+ problem .objective (
349+ np .asarray (petab_problem .x_nominal ), sensi_orders = (0 , 1 )
350+ )
351+ fval = problem .objective (np .asarray (petab_problem .x_nominal ))
352+ assert np .isclose (fval , expected_fval_nominal )
353+ # re-fixing parameters
354+ problem .fix_parameters (
355+ petab_problem .x_fixed_indices , petab_problem .x_nominal_fixed
356+ )
357+ assert problem .dim == petab_problem .n_estimated
358+ fval , grad = problem .objective (
359+ np .asarray (petab_problem .x_nominal_free ), sensi_orders = (0 , 1 )
360+ )
361+ assert np .isclose (fval , expected_fval_nominal )
339362 assert len (grad ) == petab_problem .n_estimated
340363
341- # TODO: fixing parameters, ...
342- # problem.fix_parameters(...)
343- # problem.unfix_parameters(...)
344364 # TODO mode=res/fun,
345365 # TODO hess/fim...
346366
0 commit comments