pyPESTO icon indicating copy to clipboard operation
pyPESTO copied to clipboard

Aggregated Objective does not return expected outputs using `return_dict`

Open arrjon opened this issue 1 year ago • 7 comments

Bug description The functions available in pypesto.visualize.model_fit cannot work with an AggregatedObjective and hence fail. There are two reasons:

  • the amici model is not available by objective.amici_model (I already fixed that issue in the branch visualize_aggregated by adding a new property to the AggregatedObjective)
  • calling pypesto_problem.objective(x, return_dict=True) does return empty rdatas. (this I could not fix right away)

Expected behavior The visuslization routines should still work properly. Also I would expect pypesto_problem.objective(x, return_dict=True) to return non empty rdatas. Calling pypesto_problem.objective._objectives[0](x, return_dict=True) instead works and does return non empty rdatas.

To reproduce I attached a minimal example using the Blasi model and PeTab. minimal example.zip

Environment

  • Operating system: MacOs
  • pypesto version: branch visualize_aggregated
  • Python version: python 3.10

arrjon avatar Jun 07 '24 14:06 arrjon

maybe @dweindl can help here?

arrjon avatar Jun 07 '24 14:06 arrjon

maybe @dweindl can help here?

I am not too familiar with either AggregatedObjective or pypesto.visualize.model_fit, but I agree that it should either work, or raise an informative error.

the amici model is not available by objective.amici_model

That makes sense, because often AggregatedObjective won't have only a single model (https://github.com/ICB-DCM/pyPESTO/issues/439).

(I already fixed that issue in the branch visualize_aggregated by adding a new property to the AggregatedObjective)

I would rather handle AggregatedObjective separately in the visualization code instead of adding amici_model to AggregatedObjective, since there will probably be multiple models.

dweindl avatar Jun 10 '24 05:06 dweindl

I would rather handle AggregatedObjective separately in the visualization code instead of adding amici_model to AggregatedObjective, since there will probably be multiple models.

Okay, I thought that AggregatedObjective is usually an AmiciObjective and NegLogPriors and not multiple models. This makes it rather complicated to write a general visualization function.

arrjon avatar Jun 10 '24 09:06 arrjon

I don't know how it's currently used, but one of the goals would be using it with PEtab problems comprising multiple models (https://github.com/ICB-DCM/pyPESTO/issues/439) and I wouldn't add anything that will complicate this.

I think it's nevertheless possible to provide some meaningful visualizations. Just iterate over the objectives and visualize what's possible and give a warning if any of those cannot be handled.

dweindl avatar Jun 10 '24 09:06 dweindl

@arrjon can this be closed with the merge of #1411?

PaulJonasJost avatar Jul 25 '24 14:07 PaulJonasJost

@arrjon can this be closed with the merge of #1411?

Regarding visualisation the bug is fixed. However, pypesto_problem.objective(x, return_dict=True) does still return empty rdatas when using an aggregated objective, which is not the behaviour I would expect.

arrjon avatar Jul 25 '24 14:07 arrjon

True, thanks then i will leave it open.

PaulJonasJost avatar Jul 25 '24 14:07 PaulJonasJost