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

HomotopyContinuation extension of MTK breaks creation of ODESystems in PEtab.jl #3291

Closed
orebas opened this issue Jan 7, 2025 · 2 comments · Fixed by #3293
Closed

HomotopyContinuation extension of MTK breaks creation of ODESystems in PEtab.jl #3291

orebas opened this issue Jan 7, 2025 · 2 comments · Fixed by #3293
Labels
bug Something isn't working

Comments

@orebas
Copy link

orebas commented Jan 7, 2025

When one has PETab.jl, and Homotopycontinuation.jl loaded, PETab.jl ceases to function.
MWE: (you need to have a PEtab problem in a directory, for instance "blind_petab_problem" below, I'll add some directions in a comment on the issue)

using PEtab
using HomotopyContinuation
petab_dir = "blind_petab_problem"
yaml_file = joinpath(petab_dir, "problem.yaml")
model = PEtabModel(yaml_file)

error:

julia> include("MWE.jl")
ERROR: LoadError: ArgumentError: reducing over an empty collection is not allowed; consider supplying `init` to the reducer
Stacktrace:
  [1] _empty_reduce_error()
    @ Base ./reduce.jl:319
  [2] mapreduce_empty(f::Function, op::Function, T::Type)
    @ Base ./reduce.jl:321
  [3] reduce_empty(op::Base.MappingRF{ModelingToolkit.var"#830#834", typeof(vcat)}, ::Type{ModelingToolkit.PolynomialData})
    @ Base ./reduce.jl:358
  [4] reduce_empty_iter
    @ ./reduce.jl:381 [inlined]
  [5] mapreduce_empty_iter(f::Function, op::Function, itr::Vector{ModelingToolkit.PolynomialData}, ItrEltype::Base.HasEltype)
    @ Base ./reduce.jl:377
  [6] _mapreduce(f::ModelingToolkit.var"#830#834", op::typeof(vcat), ::IndexLinear, A::Vector{ModelingToolkit.PolynomialData})
    @ Base ./reduce.jl:429
  [7] _mapreduce_dim(f::Function, op::Function, ::Base._InitialValue, A::Vector{ModelingToolkit.PolynomialData}, ::Colon)
    @ Base ./reducedim.jl:337
  [8] mapreduce(f::Function, op::Function, A::Vector{ModelingToolkit.PolynomialData})
    @ Base ./reducedim.jl:329
  [9] ModelingToolkit.PolynomialTransformation(sys::ModelingToolkit.NonlinearSystem)
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/nonlinear/homotopy_continuation.jl:351
 [10] #_safe_HomotopyContinuationProblem#2
    @ ~/.julia/packages/ModelingToolkit/iQ7So/ext/MTKHomotopyContinuationExt.jl:108 [inlined]
 [11] safe_HomotopyContinuationProblem(::ModelingToolkit.NonlinearSystem, ::Dict{…}, ::Vararg{…}; kwargs::@Kwargs{…})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/nonlinear/homotopy_continuation.jl:69
 [12] safe_HomotopyContinuationProblem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/nonlinear/homotopy_continuation.jl:65 [inlined]
 [13] (SciMLBase.NonlinearProblem{…})(sys::ModelingToolkit.NonlinearSystem, u0map::Dict{…}, parammap::Dict{…}; check_length::Bool, use_homotopy_continuation::Bool, kwargs::@Kwargs{…})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/nonlinear/nonlinearsystem.jl:532
 [14] SciMLBase.NonlinearProblem(::ModelingToolkit.NonlinearSystem, ::Dict{…}, ::Vararg{…}; kwargs::@Kwargs{…})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/nonlinear/nonlinearsystem.jl:523
 [15] ModelingToolkit.InitializationProblem{…}(sys::ModelingToolkit.ODESystem, t::Float64, u0map::Dict{…}, parammap::Dict{…}; guesses::Dict{…}, check_length::Bool, warn_initialize_determined::Bool, initialization_eqs::Vector{…}, fully_determined::Nothing, check_units::Bool, use_scc::Bool, kwargs::@Kwargs{…})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:1403
 [16] InitializationProblem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:1285 [inlined]
 [17] #_#1075
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:1263 [inlined]
 [18] InitializationProblem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:1262 [inlined]
 [19] #InitializationProblem#1073
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:1251 [inlined]
 [20] InitializationProblem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:1250 [inlined]
 [21] maybe_build_initialization_problem(sys::ModelingToolkit.ODESystem, op::Dict{…}, u0map::Dict{…}, pmap::Dict{…}, t::Float64, defs::Dict{…}, guesses::Dict{…}, missing_unknowns::Set{…}; implicit_dae::Bool, kwargs::@Kwargs{…})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/problem_utils.jl:546
 [22] maybe_build_initialization_problem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/problem_utils.jl:526 [inlined]
 [23] process_SciMLProblem(constructor::Type, sys::ModelingToolkit.ODESystem, u0map::Vector{…}, pmap::Vector{…}; build_initializeprob::Bool, implicit_dae::Bool, t::Float64, guesses::Dict{…}, warn_initialize_determined::Bool, initialization_eqs::Vector{…}, eval_expression::Bool, eval_module::Module, fully_determined::Nothing, check_initialization_units::Bool, tofloat::Bool, use_union::Bool, u0_constructor::typeof(identity), du0map::Nothing, check_length::Bool, symbolic_u0::Bool, warn_cyclic_dependency::Bool, circular_dependency_max_cycle_length::Int64, circular_dependency_max_cycles::Int64, substitution_limit::Int64, use_scc::Bool, kwargs::@Kwargs{…})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/problem_utils.jl:669
 [24] (SciMLBase.ODEProblem{…})(sys::ModelingToolkit.ODESystem, u0map::Vector{…}, tspan::Vector{…}, parammap::Vector{…}; callback::Nothing, check_length::Bool, warn_initialize_determined::Bool, eval_expression::Bool, eval_module::Module, kwargs::@Kwargs{…})
    @ ModelingToolkit ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:830
 [25] ODEProblem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:818 [inlined]
 [26] #_#1047
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:811 [inlined]
 [27] ODEProblem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:810 [inlined]
 [28] #ODEProblem#1045
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:800 [inlined]
 [29] ODEProblem
    @ ~/.julia/packages/ModelingToolkit/iQ7So/src/systems/diffeqs/abstractodesystem.jl:799 [inlined]
 [30] _get_sys_parameters(sys::ModelingToolkit.ODESystem, speciemap::Vector{Pair{…}}, parametermap::Vector{Pair{…}})
    @ PEtab ~/.julia/packages/PEtab/fdfeI/src/petab_files/conditions.jl:389
 [31] _get_xids(petab_parameters::PEtab.PEtabParameters, petab_measurements::PEtab.PEtabMeasurements{…}, sys::ModelingToolkit.ODESystem, conditions_df::DataFrames.DataFrame, speciemap::Vector{…}, parametermap::Vector{…})
    @ PEtab ~/.julia/packages/PEtab/fdfeI/src/petab_files/conditions.jl:78
 [32] PEtab.ParameterIndices(petab_parameters::PEtab.PEtabParameters, petab_measurements::PEtab.PEtabMeasurements{…}, sys::ModelingToolkit.ODESystem, parametermap::Vector{…}, speciemap::Vector{…}, conditions_df::DataFrames.DataFrame)
    @ PEtab ~/.julia/packages/PEtab/fdfeI/src/petab_files/conditions.jl:37
 [33] PEtab.ParameterIndices(petab_tables::Dict{…}, sys::ModelingToolkit.ODESystem, parametermap::Vector{…}, speciemap::Vector{…})
    @ PEtab ~/.julia/packages/PEtab/fdfeI/src/petab_files/conditions.jl:22
 [34] PEtabModel(path_yaml::String; build_julia_files::Bool, verbose::Bool, ifelse_to_callback::Bool, write_to_file::Bool)
    @ PEtab ~/.julia/packages/PEtab/fdfeI/src/petab_files/petab_model.jl:57
 [35] PEtabModel(path_yaml::String)
    @ PEtab ~/.julia/packages/PEtab/fdfeI/src/petab_files/petab_model.jl:1
 [36] top-level scope
    @ ~/delMWE/MWE.jl:5
 [37] include(fname::String)
    @ Main ./sysimg.jl:38
 [38] top-level scope
    @ REPL[4]:1
in expression starting at /home/orebas/delMWE/MWE.jl:5
Some type information was truncated. Use `show(err)` to see complete types.

julia>
➜  delMWE using PEtab
methods_before = methodswith(ModelingToolkit.NonlinearSystem)
zsh: command not found: using
zsh: unknown file attribute: k
➜  delMWE julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.11.2 (2024-12-01)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using PEtab

julia> methods_before = methodswith(ModelingToolkit.NonlinearSystem)
ERROR: UndefVarError: `ModelingToolkit` not defined in `Main`
Suggestion: check for spelling errors or missing imports.
Hint: ModelingToolkit is loaded but not imported in the active module Main.
Hint: a global variable of this name may be made accessible by importing Catalyst in the current active module Main
Stacktrace:
 [1] top-level scope
   @ REPL[2]:1

julia> using ModelingToolkit

julia> methods_before = methodswith(ModelingToolkit.NonlinearSystem)
[1] ==(sys1::NonlinearSystem, sys2::NonlinearSystem) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:867
[2] IntervalNonlinearFunction(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[3] IntervalNonlinearFunction(sys::NonlinearSystem, dvs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[4] IntervalNonlinearFunction(sys::NonlinearSystem, dvs, ps; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[5] IntervalNonlinearFunction(sys::NonlinearSystem, dvs, ps, u0; p, eval_expression, eval_module, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[6] IntervalNonlinearProblem(sys::NonlinearSystem, uspan::Tuple{T, T} where T; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:728
[7] IntervalNonlinearProblem(sys::NonlinearSystem, uspan::Tuple{T, T} where T, parammap; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:728
[8] NonlinearFunction(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:310
[9] SciMLBase.NonlinearLeastSquaresProblem(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:526
[10] NonlinearProblem(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:493
[11] SciMLBase.SCCNonlinearProblem(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:606
[12] HomotopyContinuationProblem(u0::uType, homotopy_continuation_system::H, denominator::D, sys::NonlinearSystem, obsfn::O, solver_and_starts::SS, unpack_solution::U) where {uType, H, D, O, SS, U} @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/homotopy_continuation.jl:10
[13] IntervalNonlinearFunctionExpr(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[14] IntervalNonlinearFunctionExpr(sys::NonlinearSystem, dvs, ps, u0; p, linenumbers, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[15] IntervalNonlinearFunctionExpr(sys::NonlinearSystem, dvs, ps; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[16] IntervalNonlinearFunctionExpr(sys::NonlinearSystem, dvs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[17] IntervalNonlinearProblemExpr(sys::NonlinearSystem, uspan::Tuple{T, T} where T, parammap; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:829
[18] IntervalNonlinearProblemExpr(sys::NonlinearSystem, uspan::Tuple{T, T} where T; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:829
[19] NonlinearProblemExpr(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:758
[20] calculate_hessian(sys::NonlinearSystem; sparse, simplify) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:236
[21] calculate_jacobian(sys::NonlinearSystem; sparse, simplify) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:203
[22] flatten(sys::NonlinearSystem) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:850
[23] flatten(sys::NonlinearSystem, noeqs) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:850
[24] generate_function(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:259
[25] generate_function(sys::NonlinearSystem, dvs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:259
[26] generate_function(sys::NonlinearSystem, dvs, ps; wrap_code, scalar, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:259
[27] generate_hessian(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:248
[28] generate_hessian(sys::NonlinearSystem, vs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:248
[29] generate_hessian(sys::NonlinearSystem, vs, ps; sparse, simplify, wrap_code, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:248
[30] generate_jacobian(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:224
[31] generate_jacobian(sys::NonlinearSystem, vs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:224
[32] generate_jacobian(sys::NonlinearSystem, vs, ps; sparse, simplify, wrap_code, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:224

julia> # Then load HC and check difference
       using HomotopyContinuation

julia> methods_after = methodswith(ModelingToolkit.NonlinearSystem)

       # See new methods added
[1] ==(sys1::NonlinearSystem, sys2::NonlinearSystem) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:867
[2] IntervalNonlinearFunction(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[3] IntervalNonlinearFunction(sys::NonlinearSystem, dvs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[4] IntervalNonlinearFunction(sys::NonlinearSystem, dvs, ps; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[5] IntervalNonlinearFunction(sys::NonlinearSystem, dvs, ps, u0; p, eval_expression, eval_module, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:370
[6] IntervalNonlinearProblem(sys::NonlinearSystem, uspan::Tuple{T, T} where T; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:728
[7] IntervalNonlinearProblem(sys::NonlinearSystem, uspan::Tuple{T, T} where T, parammap; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:728
[8] NonlinearFunction(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:310
[9] SciMLBase.NonlinearLeastSquaresProblem(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:526
[10] NonlinearProblem(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:493
[11] SciMLBase.SCCNonlinearProblem(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:606
[12] HomotopyContinuationProblem(sys::NonlinearSystem, u0map; ...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:97
[13] HomotopyContinuationProblem(sys::NonlinearSystem, u0map, parammap; kwargs...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:97
[14] HomotopyContinuationProblem(sys::NonlinearSystem, transformation::ModelingToolkit.PolynomialTransformation, result::ModelingToolkit.PolynomialTransformationResult, u0map; ...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:119
[15] HomotopyContinuationProblem(sys::NonlinearSystem, transformation::ModelingToolkit.PolynomialTransformation, result::ModelingToolkit.PolynomialTransformationResult, u0map, parammap; eval_expression, eval_module, warn_parametric_exponent, kwargs...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:119
[16] HomotopyContinuationProblem(u0::uType, homotopy_continuation_system::H, denominator::D, sys::NonlinearSystem, obsfn::O, solver_and_starts::SS, unpack_solution::U) where {uType, H, D, O, SS, U} @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/homotopy_continuation.jl:10
[17] IntervalNonlinearFunctionExpr(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[18] IntervalNonlinearFunctionExpr(sys::NonlinearSystem, dvs, ps, u0; p, linenumbers, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[19] IntervalNonlinearFunctionExpr(sys::NonlinearSystem, dvs, ps; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[20] IntervalNonlinearFunctionExpr(sys::NonlinearSystem, dvs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:459
[21] IntervalNonlinearProblemExpr(sys::NonlinearSystem, uspan::Tuple{T, T} where T, parammap; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:829
[22] IntervalNonlinearProblemExpr(sys::NonlinearSystem, uspan::Tuple{T, T} where T; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:829
[23] NonlinearProblemExpr(sys::NonlinearSystem, args...; kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:758
[24] calculate_hessian(sys::NonlinearSystem; sparse, simplify) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:236
[25] calculate_jacobian(sys::NonlinearSystem; sparse, simplify) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:203
[26] flatten(sys::NonlinearSystem) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:850
[27] flatten(sys::NonlinearSystem, noeqs) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:850
[28] generate_function(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:259
[29] generate_function(sys::NonlinearSystem, dvs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:259
[30] generate_function(sys::NonlinearSystem, dvs, ps; wrap_code, scalar, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:259
[31] generate_hessian(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:248
[32] generate_hessian(sys::NonlinearSystem, vs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:248
[33] generate_hessian(sys::NonlinearSystem, vs, ps; sparse, simplify, wrap_code, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:248
[34] generate_jacobian(sys::NonlinearSystem; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:224
[35] generate_jacobian(sys::NonlinearSystem, vs; ...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:224
[36] generate_jacobian(sys::NonlinearSystem, vs, ps; sparse, simplify, wrap_code, kwargs...) @ ModelingToolkit ~/.julia/packages/ModelingToolkit/klLLV/src/systems/nonlinear/nonlinearsystem.jl:224

julia> new_methods = setdiff(methods_after, methods_before)
[1] HomotopyContinuationProblem(sys::NonlinearSystem, u0map; ...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:97
[2] HomotopyContinuationProblem(sys::NonlinearSystem, u0map, parammap; kwargs...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:97
[3] HomotopyContinuationProblem(sys::NonlinearSystem, transformation::ModelingToolkit.PolynomialTransformation, result::ModelingToolkit.PolynomialTransformationResult, u0map; ...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:119
[4] HomotopyContinuationProblem(sys::NonlinearSystem, transformation::ModelingToolkit.PolynomialTransformation, result::ModelingToolkit.PolynomialTransformationResult, u0map, parammap; eval_expression, eval_module, warn_parametric_exponent, kwargs...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:119

This is in a new project with these versions:

[f213a82b] HomotopyContinuation v2.12.0
  [48d54b35] PEtab v3.5.2
@orebas orebas added the bug Something isn't working label Jan 7, 2025
@orebas
Copy link
Author

orebas commented Jan 7, 2025

This is filed as issue 610 in HomotopyContinuation.jl as well. I did some investigation, it seems like it might be related to the ModelingToolkit extension of HC.jl. Specifically, the below methods might be related. (I left some commentary below that, which is from Claude, and probably inaccurate/speculative)

[1] HomotopyContinuationProblem(sys::NonlinearSystem, u0map; ...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:97
[2] HomotopyContinuationProblem(sys::NonlinearSystem, u0map, parammap; kwargs...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:97
[3] HomotopyContinuationProblem(sys::NonlinearSystem, transformation::ModelingToolkit.PolynomialTransformation, result::ModelingToolkit.PolynomialTransformationResult, u0map; ...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:119
[4] HomotopyContinuationProblem(sys::NonlinearSystem, transformation::ModelingToolkit.PolynomialTransformation, result::ModelingToolkit.PolynomialTransformationResult, u0map, parammap; eval_expression, eval_module, warn_parametric_exponent, kwargs...) @ MTKHomotopyContinuationExt ~/.julia/packages/ModelingToolkit/klLLV/ext/MTKHomotopyContinuationExt.jl:119

This is very revealing! The conflict appears to be in the ModelingToolkit HomotopyContinuation extension. When HomotopyContinuation is loaded, it adds four new methods to NonlinearSystem, all related to HomotopyContinuationProblem.
The key method that's likely causing the issue is:
This suggests that when HomotopyContinuation is loaded, it changes how ModelingToolkit handles polynomial transformations through its extension module (MTKHomotopyContinuationExt).

@orebas
Copy link
Author

orebas commented Jan 7, 2025

Creating a PEtab problem is a bit challenging, if you like you can just save the below as a shell script and run it. (at your own risk!)

#!/bin/bash
mkdir blind_petab_problem
cd blind_petab_problem
set -e
cat <<'EOF' > "./problem.yaml"
format_version: 1
parameter_file: parameters.tsv
problems:
- condition_files:
  - conditions.tsv
  measurement_files:
  - measurements.tsv
  observable_files:
  - observables.tsv
  sbml_files:
  - model.xml
EOF
cat <<'EOF' > "./parameters.tsv"
parameterId	parameterScale	lowerBound	upperBound	nominalValue	estimate
a	lin	-100.0	100.0	1.0	1
b	lin	-100.0	100.0	1.0	1
c	lin	-100.0	100.0	1.0	1
d	lin	-100.0	100.0	1.0	1
init_x1	lin	0.001	1000.0	1.0	1
init_x2	lin	0.001	1000.0	1.0	1
init_x3	lin	0.001	1000.0	1.0	1
noiseParameter1	lin	0.0001	0.0001	0.0001	0
EOF
cat <<'EOF' > "./observables.tsv"
observableId	observableName	observableFormula	observableTransformation	noiseFormula	noiseDistribution
obs_x1	Observable obs_x1	x1 + x2*x2	lin	noiseParameter1 * obs_x1	normal
obs_x2	Observable obs_x2	x2+x1	lin	noiseParameter1 * obs_x2	normal
obs_x3	Observable obs_x3	x3-x1*x1	lin	noiseParameter1 * obs_x3	normal
EOF
cat <<'EOF' > "./conditions.tsv"
conditionId	conditionName
condition1	
EOF
cat <<'EOF' > "./measurements.tsv"
simulationConditionId	measurement	time	observableId	observableParameters	noiseParameters	datasetId	replicateId
condition1	11.000181791511046	0.0	obs_x1		noiseParameter1	dataset1	0
condition1	9.5906880335379	0.10344827586206896	obs_x1		noiseParameter1	dataset1	0
condition1	8.396182699893101	0.20689655172413793	obs_x1		noiseParameter1	dataset1	0
condition1	7.383158309819335	0.3103448275862069	obs_x1		noiseParameter1	dataset1	0
condition1	6.522621024819166	0.41379310344827586	obs_x1		noiseParameter1	dataset1	0
condition1	5.792524880313954	0.5172413793103449	obs_x1		noiseParameter1	dataset1	0
condition1	5.172897695217828	0.6206896551724138	obs_x1		noiseParameter1	dataset1	0
condition1	4.645204551650169	0.7241379310344828	obs_x1		noiseParameter1	dataset1	0
condition1	4.195946566268855	0.8275862068965517	obs_x1		noiseParameter1	dataset1	0
condition1	3.814004108687638	0.9310344827586207	obs_x1		noiseParameter1	dataset1	0
condition1	3.4875841342604947	1.0344827586206897	obs_x1		noiseParameter1	dataset1	0
condition1	3.209135687253264	1.1379310344827587	obs_x1		noiseParameter1	dataset1	0
condition1	2.9712383661316286	1.2413793103448276	obs_x1		noiseParameter1	dataset1	0
condition1	2.766397196265143	1.3448275862068966	obs_x1		noiseParameter1	dataset1	0
condition1	2.5912826757940755	1.4482758620689655	obs_x1		noiseParameter1	dataset1	0
condition1	2.440964251041438	1.5517241379310345	obs_x1		noiseParameter1	dataset1	0
condition1	2.3107494677948535	1.6551724137931034	obs_x1		noiseParameter1	dataset1	0
condition1	2.1987128419282254	1.7586206896551724	obs_x1		noiseParameter1	dataset1	0
condition1	2.100592250275949	1.8620689655172413	obs_x1		noiseParameter1	dataset1	0
condition1	2.015319244800955	1.9655172413793103	obs_x1		noiseParameter1	dataset1	0
condition1	1.9419521719845252	2.0689655172413794	obs_x1		noiseParameter1	dataset1	0
condition1	1.8759610870588375	2.1724137931034484	obs_x1		noiseParameter1	dataset1	0
condition1	1.8183733086325113	2.2758620689655173	obs_x1		noiseParameter1	dataset1	0
condition1	1.7666493218140773	2.3793103448275863	obs_x1		noiseParameter1	dataset1	0
condition1	1.7213297819665565	2.4827586206896552	obs_x1		noiseParameter1	dataset1	0
condition1	1.6806337981978194	2.586206896551724	obs_x1		noiseParameter1	dataset1	0
condition1	1.6432399125597268	2.689655172413793	obs_x1		noiseParameter1	dataset1	0
condition1	1.6102764131695098	2.793103448275862	obs_x1		noiseParameter1	dataset1	0
condition1	1.579303972944383	2.896551724137931	obs_x1		noiseParameter1	dataset1	0
condition1	1.551284000716636	3.0	obs_x1		noiseParameter1	dataset1	0
condition1	4.999827207309823	0.0	obs_x2		noiseParameter1	dataset1	0
condition1	4.738811349590047	0.10344827586206896	obs_x2		noiseParameter1	dataset1	0
condition1	4.496146602833377	0.20689655172413793	obs_x2		noiseParameter1	dataset1	0
condition1	4.271757953051317	0.3103448275862069	obs_x2		noiseParameter1	dataset1	0
condition1	4.064807779976922	0.41379310344827586	obs_x2		noiseParameter1	dataset1	0
condition1	3.8720084120403624	0.5172413793103449	obs_x2		noiseParameter1	dataset1	0
condition1	3.694271477334265	0.6206896551724138	obs_x2		noiseParameter1	dataset1	0
condition1	3.5284507488270833	0.7241379310344828	obs_x2		noiseParameter1	dataset1	0
condition1	3.375356991890807	0.8275862068965517	obs_x2		noiseParameter1	dataset1	0
condition1	3.2334981429501055	0.9310344827586207	obs_x2		noiseParameter1	dataset1	0
condition1	3.1014665070435594	1.0344827586206897	obs_x2		noiseParameter1	dataset1	0
condition1	2.978425492101139	1.1379310344827587	obs_x2		noiseParameter1	dataset1	0
condition1	2.864040934995538	1.2413793103448276	obs_x2		noiseParameter1	dataset1	0
condition1	2.757586634618534	1.3448275862068966	obs_x2		noiseParameter1	dataset1	0
condition1	2.6581268634130537	1.4482758620689655	obs_x2		noiseParameter1	dataset1	0
condition1	2.5659295491799567	1.5517241379310345	obs_x2		noiseParameter1	dataset1	0
condition1	2.4797684618933777	1.6551724137931034	obs_x2		noiseParameter1	dataset1	0
condition1	2.399664610014188	1.7586206896551724	obs_x2		noiseParameter1	dataset1	0
condition1	2.324170497352402	1.8620689655172413	obs_x2		noiseParameter1	dataset1	0
condition1	2.2531181102174638	1.9655172413793103	obs_x2		noiseParameter1	dataset1	0
condition1	2.1877346867742022	2.0689655172413794	obs_x2		noiseParameter1	dataset1	0
condition1	2.1256672362269184	2.1724137931034484	obs_x2		noiseParameter1	dataset1	0
condition1	2.0675194795591003	2.2758620689655173	obs_x2		noiseParameter1	dataset1	0
condition1	2.0133322368871363	2.3793103448275863	obs_x2		noiseParameter1	dataset1	0
condition1	1.9621319958947439	2.4827586206896552	obs_x2		noiseParameter1	dataset1	0
condition1	1.9137707108061728	2.586206896551724	obs_x2		noiseParameter1	dataset1	0
condition1	1.867689049222478	2.689655172413793	obs_x2		noiseParameter1	dataset1	0
condition1	1.8248171868852836	2.793103448275862	obs_x2		noiseParameter1	dataset1	0
condition1	1.7843326042208503	2.896551724137931	obs_x2		noiseParameter1	dataset1	0
condition1	1.746026973495345	3.0	obs_x2		noiseParameter1	dataset1	0
condition1	-9.222338899806739e-06	0.0	obs_x3		noiseParameter1	dataset1	0
condition1	-0.020216920066550813	0.10344827586206896	obs_x3		noiseParameter1	dataset1	0
condition1	-0.039518523687223084	0.20689655172413793	obs_x3		noiseParameter1	dataset1	0
condition1	-0.057906155520139044	0.3103448275862069	obs_x3		noiseParameter1	dataset1	0
condition1	-0.07538686470999746	0.41379310344827586	obs_x3		noiseParameter1	dataset1	0
condition1	-0.09205950573906245	0.5172413793103449	obs_x3		noiseParameter1	dataset1	0
condition1	-0.10796313487577107	0.6206896551724138	obs_x3		noiseParameter1	dataset1	0
condition1	-0.12304000776278103	0.7241379310344828	obs_x3		noiseParameter1	dataset1	0
condition1	-0.1373988879441562	0.8275862068965517	obs_x3		noiseParameter1	dataset1	0
condition1	-0.15104040662112422	0.9310344827586207	obs_x3		noiseParameter1	dataset1	0
condition1	-0.1639446208124972	1.0344827586206897	obs_x3		noiseParameter1	dataset1	0
condition1	-0.1761720323533462	1.1379310344827587	obs_x3		noiseParameter1	dataset1	0
condition1	-0.18780307261792376	1.2413793103448276	obs_x3		noiseParameter1	dataset1	0
condition1	-0.1987471728691541	1.3448275862068966	obs_x3		noiseParameter1	dataset1	0
condition1	-0.20919949232009769	1.4482758620689655	obs_x3		noiseParameter1	dataset1	0
condition1	-0.2189239367471861	1.5517241379310345	obs_x3		noiseParameter1	dataset1	0
condition1	-0.22816897897739305	1.6551724137931034	obs_x3		noiseParameter1	dataset1	0
condition1	-0.23686815949258885	1.7586206896551724	obs_x3		noiseParameter1	dataset1	0
condition1	-0.24503322203732714	1.8620689655172413	obs_x3		noiseParameter1	dataset1	0
condition1	-0.2527459942236998	1.9655172413793103	obs_x3		noiseParameter1	dataset1	0
condition1	-0.2599036193956595	2.0689655172413794	obs_x3		noiseParameter1	dataset1	0
condition1	-0.2666211811943607	2.1724137931034484	obs_x3		noiseParameter1	dataset1	0
condition1	-0.27288283033065946	2.2758620689655173	obs_x3		noiseParameter1	dataset1	0
condition1	-0.2787759977994002	2.3793103448275863	obs_x3		noiseParameter1	dataset1	0
condition1	-0.2842242913005688	2.4827586206896552	obs_x3		noiseParameter1	dataset1	0
condition1	-0.2892649511569845	2.586206896551724	obs_x3		noiseParameter1	dataset1	0
condition1	-0.29390347705306347	2.689655172413793	obs_x3		noiseParameter1	dataset1	0
condition1	-0.29821468662744155	2.793103448275862	obs_x3		noiseParameter1	dataset1	0
condition1	-0.3021796417364152	2.896551724137931	obs_x3		noiseParameter1	dataset1	0
condition1	-0.3057704342488951	3.0	obs_x3		noiseParameter1	dataset1	0
EOF
cat <<'EOF' > "./model.xml"
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created by libAntimony version v2.15.0 with libSBML version 5.20.2. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core" level="3" version="2">
  <model metaid="feedback" id="feedback">
    <listOfCompartments>
      <compartment sboTerm="SBO:0000410" id="default_compartment" spatialDimensions="3" size="1" constant="true"/>
    </listOfCompartments>
    <listOfSpecies>
      <species id="x1" compartment="default_compartment" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
      <species id="x2" compartment="default_compartment" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
      <species id="x3" compartment="default_compartment" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
    </listOfSpecies>
    <listOfParameters>
      <parameter id="init_x1" value="1" constant="true"/>
      <parameter id="init_x2" value="1" constant="true"/>
      <parameter id="init_x3" value="1" constant="true"/>
      <parameter id="a" value="1" constant="true"/>
      <parameter id="b" value="1" constant="true"/>
      <parameter id="c" value="1" constant="true"/>
      <parameter id="d" value="1" constant="true"/>
      <parameter id="obs_x1" constant="false"/>
      <parameter id="obs_x2" constant="false"/>
      <parameter id="obs_x3" constant="false"/>
    </listOfParameters>
    <listOfInitialAssignments>
      <initialAssignment symbol="x1">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <ci> init_x1 </ci>
        </math>
      </initialAssignment>
      <initialAssignment symbol="x2">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <ci> init_x2 </ci>
        </math>
      </initialAssignment>
      <initialAssignment symbol="x3">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <ci> init_x3 </ci>
        </math>
      </initialAssignment>
    </listOfInitialAssignments>
    <listOfRules>
      <rateRule variable="x1">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <times/>
            <apply>
              <minus/>
              <ci> a </ci>
            </apply>
            <ci> x1 </ci>
          </apply>
        </math>
      </rateRule>
      <rateRule variable="x2">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <times/>
            <apply>
              <minus/>
              <apply>
                <times/>
                <ci> b </ci>
                <ci> b </ci>
              </apply>
            </apply>
            <ci> x2 </ci>
          </apply>
        </math>
      </rateRule>
      <rateRule variable="x3">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <times/>
            <apply>
              <minus/>
              <apply>
                <plus/>
                <apply>
                  <times/>
                  <ci> c </ci>
                  <ci> c </ci>
                </apply>
                <apply>
                  <times/>
                  <ci> d </ci>
                  <ci> d </ci>
                </apply>
              </apply>
            </apply>
            <ci> x3 </ci>
          </apply>
        </math>
      </rateRule>
      <assignmentRule variable="obs_x1">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <plus/>
            <ci> x1 </ci>
            <apply>
              <times/>
              <ci> x2 </ci>
              <ci> x2 </ci>
            </apply>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="obs_x2">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <plus/>
            <ci> x2 </ci>
            <ci> x1 </ci>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="obs_x3">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <minus/>
            <ci> x3 </ci>
            <apply>
              <times/>
              <ci> x1 </ci>
              <ci> x1 </ci>
            </apply>
          </apply>
        </math>
      </assignmentRule>
    </listOfRules>
  </model>
</sbml>
EOF

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant