Skip to content

Structural simplification fails on non-1-indexed variable array  #2670

@hersle

Description

@hersle

The example

using ModelingToolkit
using ModelingToolkit: t_nounits as t, D_nounits as D

@testset "Non-1-indexed variable array" begin
    @variables x(t)[0:1] # 0-indexed variable array
    sys = ODESystem([
        x[0] ~ 0.0
        D(x[1]) ~ x[0]
    ], t, [x], []; name=:sys)
    @test_nowarn sys = structural_simplify(sys)
    @test equations(sys) == [D(x[1]) ~ 0.0]
end

fails because this hack tries to access the 1-indexed vector [x[0], x[1]] at index [0]:

  BoundsError: attempt to access 2-element Vector{SymbolicUtils.BasicSymbolic{Real}} at index [0]
  Stacktrace:
    [1] getindex(A::Vector{SymbolicUtils.BasicSymbolic{Real}}, i1::Int64)
      @ Base .\essentials.jl:13
    [2] fast_substitute(expr::SymbolicUtils.BasicSymbolic{Real},
 subs::Dict{Any, Any}; operator::Type)
      @ Symbolics C:\Users\herma\.julia\packages\Symbolics\Eas9m\src\variable.jl:489
    [3] fast_substitute(eq::Equation, subs::Dict{Any, Any}; operator::Type)
      @ Symbolics C:\Users\herma\.julia\packages\Symbolics\Eas9m\src\variable.jl:455
    [4] tearing_reassemble(state::TearingState{ODESystem}, var_eq_matching::ModelingToolkit.BipartiteGraphs.Matching{Union{ModelingToolkit.BipartiteGraphs.Unassigned, ModelingToolkit.StructuralTransformations.SelectedState}, Vector{Union{ModelingToolkit.BipartiteGraphs.Unassigned, ModelingToolkit.StructuralTransformations.SelectedState, Int64}}}, full_var_eq_matching::Nothing; simplify::Bool, mm::ModelingToolkit.SparseMatrixCLIL{Int64, Int64}) 
      @ ModelingToolkit.StructuralTransformations C:\Users\herma\.julia\packages\ModelingToolkit\kByuD\src\structural_transformation\symbolics_tearing.jl:582
    [5] tearing_reassemble (repeats 2 times)
      @ C:\Users\herma\.julia\packages\ModelingToolkit\kByuD\src\structural_transformation\symbolics_tearing.jl:220 [inlined]   
    [6] #dummy_derivative#128
      @ C:\Users\herma\.julia\packages\ModelingToolkit\kByuD\src\structural_transformation\symbolics_tearing.jl:675 [inlined]   
    [7] _structural_simplify!(state::TearingState{ODESystem}, io::Nothing; simplify::Bool, check_consistency::Bool, fully_determined::Bool, warn_initialize_determined::Bool, dummy_derivative::Bool, kwargs::@Kwargs{})
      @ ModelingToolkit C:\Users\herma\.julia\packages\ModelingToolkit\kByuD\src\systems\systemstructure.jl:692
    [8] _structural_simplify!
      @ C:\Users\herma\.julia\packages\ModelingToolkit\kByuD\src\systems\systemstructure.jl:672 [inlined]
    [9] structural_simplify!(state::TearingState{ODESystem}, io::Nothing; simplify::Bool, check_consistency::Bool, fully_determined::Bool, warn_initialize_determined::Bool, kwargs::@Kwargs{}) 
      @ ModelingToolkit C:\Users\herma\.julia\packages\ModelingToolkit\kByuD\src\systems\systemstructure.jl:635
    ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions