import pharmpy.execute as execute
import pharmpy.methods
import pharmpy.methods.modelfit as modelfit
import pharmpy.results
import pharmpy.search.algorithms as algorithms
import pharmpy.search.rankfuncs as rankfuncs
[docs]class ModelSearch(pharmpy.methods.Method):
def __init__(self, base_model, algorithm, mfl, rankfunc='ofv', **kwargs):
self.base_model = base_model
self.mfl = mfl
self.algorithm = getattr(algorithms, algorithm)
self.rankfunc = getattr(rankfuncs, rankfunc)
super().__init__(**kwargs)
[docs] def fit(self, models):
db = execute.LocalDirectoryDatabase(self.rundir.path / 'models')
modelfit_run = modelfit.Modelfit(models, database=db, path=self.rundir.path)
modelfit_run.run()
[docs] def run(self):
df = self.algorithm(
self.base_model,
self.mfl,
self.fit,
self.rankfunc,
)
res = ModelSearchResults(runs=df)
res.to_json(path=self.rundir.path / 'results.json')
res.to_csv(path=self.rundir.path / 'results.csv')
return res
[docs]class ModelSearchResults(pharmpy.results.Results):
def __init__(self, runs=None):
self.runs = runs
[docs]def run_modelsearch(base_model, algorithm, mfl, **kwargs):
ms = ModelSearch(base_model, algorithm, mfl, **kwargs)
res = ms.run()
return res