Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added deepcpy functionality and small test for roadrunner. #1347

Merged
merged 8 commits into from
Apr 5, 2024
7 changes: 0 additions & 7 deletions pypesto/objective/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,6 @@ def __init__(
self.pre_post_processor = PrePostProcessor()
self.history = NoHistory()

def __deepcopy__(self, memodict=None) -> "ObjectiveBase":
"""Create deepcopy of objective object."""
other = type(self)() # maintain type for derived classes
for attr, val in self.__dict__.items():
other.__dict__[attr] = copy.deepcopy(val)
return other

# The following has_ properties can be used to find out what values
# the objective supports.
@property
Expand Down
34 changes: 33 additions & 1 deletion test/base/test_roadrunner.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
"""Test the roadrunner interface."""

import copy
import logging
import os

import benchmark_models_petab as models
import petab
import petabtests
import pytest
Expand Down Expand Up @@ -104,3 +106,33 @@ def _execute_case_rr(case, model_type, version):
)

logger.info(f"Case {version}/{model_type}/{case} passed.")


def test_deepcopy():
"""Test that deepcopy works as intended"""
model_name = "Boehm_JProteomeRes2014"
petab_problem = petab.Problem.from_yaml(
os.path.join(models.MODELS_DIR, model_name, model_name + ".yaml")
)
petab_problem.model_name = model_name
importer = objective_rr.PetabImporterRR(petab_problem)
problem_parameters = petab_problem.x_nominal_free_scaled

problem = importer.create_problem()
obj = problem.objective

problem_copied = copy.deepcopy(problem)
copied_objective = problem_copied.objective

assert obj(problem_parameters) == copied_objective(problem_parameters)

# !!not adviced, only done here for testing purposes!!
obj.roadrunner_instance.removeParameter(
"pSTAT5A_rel", forceRegenerate=False
)
obj.roadrunner_instance.addParameter("pSTAT5A_rel", 0.0, False)
obj.roadrunner_instance.addAssignmentRule(
"pSTAT5A_rel", "(100 * pApB + 200 * pApA * specC17)"
)

assert obj(problem_parameters) != copied_objective(problem_parameters)
Loading