Skip to content

Commit ed2de3e

Browse files
authored
Merge pull request #885 from SciML/myb/init_metadata
Add unit and connect metadata
2 parents c5dc992 + 8288006 commit ed2de3e

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Setfield = "0.7"
6565
SpecialFunctions = "0.7, 0.8, 0.9, 0.10, 1.0"
6666
StaticArrays = "0.10, 0.11, 0.12, 1.0"
6767
SymbolicUtils = "0.8.3, 0.9"
68-
Symbolics = "0.1.7"
68+
Symbolics = "0.1.8"
6969
TreeViews = "0.3"
7070
UnPack = "0.1, 1.0"
7171
Unitful = "1.1"

src/variables.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
struct VariableUnit end
2+
struct VariableConnectType end
3+
Symbolics.option_to_metadata_type(::Val{:unit}) = VariableUnit
4+
Symbolics.option_to_metadata_type(::Val{:connect}) = VariableConnectType
5+
16
"""
27
$(SIGNATURES)
38
Takes a list of pairs of `variables=>values` and an ordered list of variables

test/variable_parsing.jl

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,60 @@ x1 = Num[Variable{FnType{Tuple{Any}, Real}}(:x, 1)(t.val),
6363

6464
@variables a[1:11,1:2]
6565
@variables a()
66+
67+
using Symbolics: value, VariableDefaultValue
68+
using ModelingToolkit: VariableConnectType, VariableUnit, rename
69+
using Unitful
70+
71+
vals = [1,2,3,4]
72+
@variables x=1 xs[1:4]=vals ys[1:5]=1
73+
74+
@test getmetadata(x, VariableDefaultValue) === 1
75+
@test getmetadata.(xs, (VariableDefaultValue,)) == vals
76+
@test getmetadata.(ys, (VariableDefaultValue,)) == ones(Int, 5)
77+
78+
struct Flow end
79+
u = u"m^3/s"
80+
@variables begin
81+
x = [1, 2], [connect=Flow,unit=u]
82+
y = 2
83+
end
84+
85+
@test getmetadata(x, VariableDefaultValue) == [1, 2]
86+
@test getmetadata(x, VariableConnectType) == Flow
87+
@test getmetadata(x, VariableUnit) == u
88+
@test getmetadata(y, VariableDefaultValue) === 2
89+
90+
@variables begin
91+
x, [connect=Flow,unit=u]
92+
y = 2, [connect=Flow]
93+
end
94+
95+
@test !hasmetadata(x, VariableDefaultValue)
96+
@test getmetadata(x, VariableConnectType) == Flow
97+
@test getmetadata(x, VariableUnit) == u
98+
@test getmetadata(y, VariableDefaultValue) === 2
99+
@test getmetadata(y, VariableConnectType) == Flow
100+
101+
a = rename(value(x), :a)
102+
@test !hasmetadata(x, VariableDefaultValue)
103+
@test getmetadata(x, VariableConnectType) == Flow
104+
@test getmetadata(x, VariableUnit) == u
105+
106+
@variables t x(t)=1 [connect=Flow,unit=u]
107+
108+
@test getmetadata(x, VariableDefaultValue) == 1
109+
@test getmetadata(x, VariableConnectType) == Flow
110+
@test getmetadata(x, VariableUnit) == u
111+
112+
a = rename(value(x), :a)
113+
@test getmetadata(a, VariableDefaultValue) == 1
114+
@test getmetadata(a, VariableConnectType) == Flow
115+
@test getmetadata(a, VariableUnit) == u
116+
117+
@parameters p=2 [unit=u"m",]
118+
@test getmetadata(p, VariableDefaultValue) == 2
119+
@test !hasmetadata(p, VariableConnectType)
120+
@test getmetadata(p, VariableUnit) == u"m"
121+
122+
@test_throws Any (@macroexpand @parameters p=2 [unit=u"m",abc=2])

0 commit comments

Comments
 (0)