diff --git a/src/systems/abstractsystem.jl b/src/systems/abstractsystem.jl index 248768b8d4..d301f2ae23 100644 --- a/src/systems/abstractsystem.jl +++ b/src/systems/abstractsystem.jl @@ -1019,12 +1019,7 @@ function Base.getproperty( end function getvar(sys::AbstractSystem, name::Symbol; namespace = does_namespacing(sys)) systems = get_systems(sys) - if isdefined(sys, name) - Base.depwarn( - "`sys.name` like `sys.$name` is deprecated. Use getters like `get_$name` instead.", - "sys.$name") - return getfield(sys, name) - elseif !isempty(systems) + if !isempty(systems) i = findfirst(x -> nameof(x) == name, systems) if i !== nothing return namespace ? renamespace(sys, systems[i]) : systems[i] @@ -1079,19 +1074,14 @@ function getvar(sys::AbstractSystem, name::Symbol; namespace = does_namespacing( end function Base.setproperty!(sys::AbstractSystem, prop::Symbol, val) - # We use this weird syntax because `parameters` and `unknowns` calls are - # potentially expensive. - if (params = parameters(sys); - idx = findfirst(s -> getname(s) == prop, params); - idx !== nothing) - get_defaults(sys)[params[idx]] = value(val) - elseif (sts = unknowns(sys); - idx = findfirst(s -> getname(s) == prop, sts); - idx !== nothing) - get_defaults(sys)[sts[idx]] = value(val) - else - setfield!(sys, prop, val) - end + error(""" + `setproperty!` on systems is invalid. Systems are immutable data structures, and \ + modifications to fields should be made by constructing a new system. This can be done \ + easily using packages such as Setfield.jl. + + If you are looking for the old behavior of updating the default of a variable via \ + `setproperty!`, this should now be done by mutating `ModelingToolkit.get_defaults(sys)`. + """) end apply_to_variables(f::F, ex) where {F} = _apply_to_variables(f, ex) diff --git a/test/model_parsing.jl b/test/model_parsing.jl index 88fa7faac7..a615a1d616 100644 --- a/test/model_parsing.jl +++ b/test/model_parsing.jl @@ -977,7 +977,7 @@ end @testset "Multiple extend statements" begin @named multiple_extend = MultipleExtend() - @test collect(nameof.(multiple_extend.systems)) == [:inmodel_b, :inmodel] + @test collect(nameof.(get_systems(multiple_extend))) == [:inmodel_b, :inmodel] @test MultipleExtend.structure[:extend][1] == [:inmodel, :b, :inmodel_b] @test tosymbol.(parameters(multiple_extend)) == [:b, :inmodel_b₊p, :inmodel₊p] end diff --git a/test/symbolic_parameters.jl b/test/symbolic_parameters.jl index 6a6a434ccc..15b19b320a 100644 --- a/test/symbolic_parameters.jl +++ b/test/symbolic_parameters.jl @@ -21,7 +21,7 @@ u0 = [ z => u - 0.1 ] ns = System(eqs, [x, y, z], [σ, ρ, β], name = :ns, defaults = [par; u0]) -ns.y = u * 1.1 +ModelingToolkit.get_defaults(ns)[y] = u * 1.1 resolved = ModelingToolkit.varmap_to_vars(Dict(), parameters(ns), defaults = ModelingToolkit.defaults(ns)) @test resolved == [1, 0.1 + 1, (0.1 + 1) * 1.1] @@ -33,8 +33,8 @@ sol = solve(prob, NewtonRaphson()) @variables a @parameters b top = System([0 ~ -a + ns.x + b], [a], [b], systems = [ns], name = :top) -top.b = ns.σ * 0.5 -top.ns.x = u * 0.5 +ModelingToolkit.get_defaults(top)[b] = ns.σ * 0.5 +ModelingToolkit.get_defaults(top)[ns.x] = unknowns(ns, u) * 0.5 res = ModelingToolkit.varmap_to_vars(Dict(), parameters(top), defaults = ModelingToolkit.defaults(top))