Skip to content

Commit dd80bd3

Browse files
Merge pull request #3655 from AayushSabharwal/as/rm-get-set-property
refactor: remove deprecated `getproperty` behavior, disable `setproperty!` on systems
2 parents 94446d3 + 6307c1d commit dd80bd3

File tree

3 files changed

+13
-23
lines changed

3 files changed

+13
-23
lines changed

src/systems/abstractsystem.jl

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,12 +1019,7 @@ function Base.getproperty(
10191019
end
10201020
function getvar(sys::AbstractSystem, name::Symbol; namespace = does_namespacing(sys))
10211021
systems = get_systems(sys)
1022-
if isdefined(sys, name)
1023-
Base.depwarn(
1024-
"`sys.name` like `sys.$name` is deprecated. Use getters like `get_$name` instead.",
1025-
"sys.$name")
1026-
return getfield(sys, name)
1027-
elseif !isempty(systems)
1022+
if !isempty(systems)
10281023
i = findfirst(x -> nameof(x) == name, systems)
10291024
if i !== nothing
10301025
return namespace ? renamespace(sys, systems[i]) : systems[i]
@@ -1079,19 +1074,14 @@ function getvar(sys::AbstractSystem, name::Symbol; namespace = does_namespacing(
10791074
end
10801075

10811076
function Base.setproperty!(sys::AbstractSystem, prop::Symbol, val)
1082-
# We use this weird syntax because `parameters` and `unknowns` calls are
1083-
# potentially expensive.
1084-
if (params = parameters(sys);
1085-
idx = findfirst(s -> getname(s) == prop, params);
1086-
idx !== nothing)
1087-
get_defaults(sys)[params[idx]] = value(val)
1088-
elseif (sts = unknowns(sys);
1089-
idx = findfirst(s -> getname(s) == prop, sts);
1090-
idx !== nothing)
1091-
get_defaults(sys)[sts[idx]] = value(val)
1092-
else
1093-
setfield!(sys, prop, val)
1094-
end
1077+
error("""
1078+
`setproperty!` on systems is invalid. Systems are immutable data structures, and \
1079+
modifications to fields should be made by constructing a new system. This can be done \
1080+
easily using packages such as Setfield.jl.
1081+
1082+
If you are looking for the old behavior of updating the default of a variable via \
1083+
`setproperty!`, this should now be done by mutating `ModelingToolkit.get_defaults(sys)`.
1084+
""")
10951085
end
10961086

10971087
apply_to_variables(f::F, ex) where {F} = _apply_to_variables(f, ex)

test/model_parsing.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,7 @@ end
977977

978978
@testset "Multiple extend statements" begin
979979
@named multiple_extend = MultipleExtend()
980-
@test collect(nameof.(multiple_extend.systems)) == [:inmodel_b, :inmodel]
980+
@test collect(nameof.(get_systems(multiple_extend))) == [:inmodel_b, :inmodel]
981981
@test MultipleExtend.structure[:extend][1] == [:inmodel, :b, :inmodel_b]
982982
@test tosymbol.(parameters(multiple_extend)) == [:b, :inmodel_b₊p, :inmodel₊p]
983983
end

test/symbolic_parameters.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ u0 = [
2121
z => u - 0.1
2222
]
2323
ns = System(eqs, [x, y, z], [σ, ρ, β], name = :ns, defaults = [par; u0])
24-
ns.y = u * 1.1
24+
ModelingToolkit.get_defaults(ns)[y] = u * 1.1
2525
resolved = ModelingToolkit.varmap_to_vars(Dict(), parameters(ns),
2626
defaults = ModelingToolkit.defaults(ns))
2727
@test resolved == [1, 0.1 + 1, (0.1 + 1) * 1.1]
@@ -33,8 +33,8 @@ sol = solve(prob, NewtonRaphson())
3333
@variables a
3434
@parameters b
3535
top = System([0 ~ -a + ns.x + b], [a], [b], systems = [ns], name = :top)
36-
top.b = ns.σ * 0.5
37-
top.ns.x = u * 0.5
36+
ModelingToolkit.get_defaults(top)[b] = ns.σ * 0.5
37+
ModelingToolkit.get_defaults(top)[ns.x] = unknowns(ns, u) * 0.5
3838

3939
res = ModelingToolkit.varmap_to_vars(Dict(), parameters(top),
4040
defaults = ModelingToolkit.defaults(top))

0 commit comments

Comments
 (0)