Skip to content

Commit 0681e75

Browse files
committed
Unityper update
1 parent 00f98e1 commit 0681e75

File tree

14 files changed

+78
-87
lines changed

14 files changed

+78
-87
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ SimpleNonlinearSolve = "0.1.0"
7878
SpecialFunctions = "0.7, 0.8, 0.9, 0.10, 1.0, 2"
7979
StaticArrays = "0.10, 0.11, 0.12, 1.0"
8080
SymbolicIndexingInterface = "0.1, 0.2"
81-
SymbolicUtils = "0.19"
81+
SymbolicUtils = "0.19, 0.20"
8282
Symbolics = "4.9"
8383
UnPack = "0.1, 1.0"
8484
Unitful = "1.1"

src/ModelingToolkit.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ import SymbolicIndexingInterface: independent_variables, states, parameters
3939
export independent_variables, states, parameters
4040
import SymbolicUtils
4141
import SymbolicUtils: istree, arguments, operation, similarterm, promote_symtype,
42-
Symbolic, Term, Add, Mul, Pow, Sym, FnType,
43-
@rule, Rewriters, substitute, metadata
42+
Symbolic, isadd, ismul, ispow, issym, FnType,
43+
@rule, Rewriters, substitute, metadata, BasicSymbolic,
44+
Sym, Term
4445
using SymbolicUtils.Code
4546
import SymbolicUtils.Code: toexpr
4647
import SymbolicUtils.Rewriters: Chain, Postwalk, Prewalk, Fixpoint

src/clock.jl

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,14 @@ const InferredDomain = Union{Inferred, InferredDiscrete}
1313
Symbolics.option_to_metadata_type(::Val{:timedomain}) = TimeDomain
1414

1515
"""
16-
is_continuous_domain(x::Sym)
17-
Determine if variable `x` is a continuous-time variable.
18-
"""
19-
is_continuous_domain(x::Sym) = getmetadata(x, TimeDomain, false) isa Continuous
20-
21-
"""
22-
is_discrete_domain(x::Sym)
23-
Determine if variable `x` is a discrete-time variable.
16+
is_continuous_domain(x)
17+
true if `x` contains only continuous-domain signals.
18+
See also [`has_continuous_domain`](@ref)
2419
"""
25-
is_discrete_domain(x::Sym) = getmetadata(x, TimeDomain, false) isa Discrete
26-
27-
# is_discrete_domain(x::Sym) = isvarkind(Discrete, x)
28-
29-
has_continuous_domain(x::Sym) = is_continuous_domain(x)
30-
has_discrete_domain(x::Sym) = is_discrete_domain(x)
20+
function is_continuous_domain(x)
21+
issym(x) && return getmetadata(x, TimeDomain, false) isa Continuous
22+
!has_discrete_domain(x) && has_continuous_domain(x)
23+
end
3124

3225
function get_time_domain(x)
3326
if istree(x) && operation(x) isa Operator
@@ -39,10 +32,10 @@ end
3932
get_time_domain(x::Num) = get_time_domain(value(x))
4033

4134
"""
42-
has_time_domain(x::Sym)
35+
has_time_domain(x)
4336
Determine if variable `x` has a time-domain attributed to it.
4437
"""
45-
function has_time_domain(x::Union{Sym, Term})
38+
function has_time_domain(x::Symbolic)
4639
# getmetadata(x, Continuous, nothing) !== nothing ||
4740
# getmetadata(x, Discrete, nothing) !== nothing
4841
getmetadata(x, TimeDomain, nothing) !== nothing
@@ -60,14 +53,20 @@ end
6053
true if `x` contains discrete signals (`x` may or may not contain continuous-domain signals). `x` may be an expression or equation.
6154
See also [`is_discrete_domain`](@ref)
6255
"""
63-
has_discrete_domain(x) = hasshift(x) || hassample(x) || hashold(x)
56+
function has_discrete_domain(x)
57+
issym(x) && return is_discrete_domain(x)
58+
hasshift(x) || hassample(x) || hashold(x)
59+
end
6460

6561
"""
6662
has_continuous_domain(x)
6763
true if `x` contains continuous signals (`x` may or may not contain discrete-domain signals). `x` may be an expression or equation.
6864
See also [`is_continuous_domain`](@ref)
6965
"""
70-
has_continuous_domain(x) = hasderiv(x) || hasdiff(x) || hassample(x) || hashold(x)
66+
function has_continuous_domain(x)
67+
issym(x) && return is_continuous_domain(x)
68+
hasderiv(x) || hasdiff(x) || hassample(x) || hashold(x)
69+
end
7170

7271
"""
7372
is_hybrid_domain(x)
@@ -80,14 +79,10 @@ is_hybrid_domain(x) = has_discrete_domain(x) && has_continuous_domain(x)
8079
true if `x` contains only discrete-domain signals.
8180
See also [`has_discrete_domain`](@ref)
8281
"""
83-
is_discrete_domain(x) = has_discrete_domain(x) && !has_continuous_domain(x)
84-
85-
"""
86-
is_continuous_domain(x)
87-
true if `x` contains only continuous-domain signals.
88-
See also [`has_continuous_domain`](@ref)
89-
"""
90-
is_continuous_domain(x) = !has_discrete_domain(x) && has_continuous_domain(x)
82+
function is_discrete_domain(x)
83+
issym(x) && return getmetadata(x, TimeDomain, false) isa Discrete
84+
has_discrete_domain(x) && !has_continuous_domain(x)
85+
end
9186

9287
struct ClockInferenceException <: Exception
9388
msg::Any

src/constants.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ function isconstant(x)
99
end
1010

1111
"""
12-
toconstant(s::Sym)
12+
toconstant(s)
1313
1414
Maps the parameter to a constant. The parameter must have a default.
1515
"""
16-
function toconstant(s::Sym)
16+
function toconstant(s)
1717
hasmetadata(s, Symbolics.VariableDefaultValue) ||
1818
throw(ArgumentError("Constant `$(s)` must be assigned a default value."))
1919
setmetadata(s, MTKConstantCtx, true)

src/inputoutput.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ function outputs(sys)
1919
lhss = [eq.lhs for eq in o]
2020
unique([filter(isoutput, states(sys))
2121
filter(isoutput, parameters(sys))
22-
filter(x -> x isa Term && isoutput(x), rhss) # observed can return equations with complicated expressions, we are only looking for single Terms
23-
filter(x -> x isa Term && isoutput(x), lhss)])
22+
filter(x -> istree(x) && isoutput(x), rhss) # observed can return equations with complicated expressions, we are only looking for single Terms
23+
filter(x -> istree(x) && isoutput(x), lhss)])
2424
end
2525

2626
"""

src/parameters.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function isparameter(x)
2525
end
2626

2727
"""
28-
toparam(s::Sym)
28+
toparam(s)
2929
3030
Maps the variable to a paramter.
3131
"""
@@ -41,7 +41,7 @@ end
4141
toparam(s::Num) = wrap(toparam(value(s)))
4242

4343
"""
44-
tovar(s::Sym)
44+
tovar(s)
4545
4646
Maps the variable to a state.
4747
"""

src/systems/abstractsystem.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ function time_varying_as_func(x, sys::AbstractTimeDependentSystem)
572572
#
573573
# This is done by just making `x` the argument of the function.
574574
if istree(x) &&
575-
operation(x) isa Sym &&
575+
issym(operation(x)) &&
576576
!(length(arguments(x)) == 1 && isequal(arguments(x)[1], get_iv(sys)))
577577
return operation(x)
578578
end
@@ -616,7 +616,7 @@ AbstractSysToExpr(sys) = AbstractSysToExpr(sys, states(sys))
616616
function (f::AbstractSysToExpr)(O)
617617
!istree(O) && return toexpr(O)
618618
any(isequal(O), f.states) && return nameof(operation(O)) # variables
619-
if isa(operation(O), Sym)
619+
if issym(operation(O))
620620
return build_expr(:call, Any[nameof(operation(O)); f.(arguments(O))])
621621
end
622622
return build_expr(:call, Any[operation(O); f.(arguments(O))])
@@ -645,7 +645,7 @@ end
645645
function round_trip_expr(t, var2name)
646646
name = get(var2name, t, nothing)
647647
name !== nothing && return name
648-
t isa Sym && return nameof(t)
648+
issym(t) && return nameof(t)
649649
istree(t) || return t
650650
f = round_trip_expr(operation(t), var2name)
651651
args = map(Base.Fix2(round_trip_expr, var2name), arguments(t))

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ function calculate_massmatrix(sys::AbstractODESystem; simplify = false)
200200
M = zeros(length(eqs), length(eqs))
201201
state2idx = Dict(s => i for (i, s) in enumerate(dvs))
202202
for (i, eq) in enumerate(eqs)
203-
if eq.lhs isa Term && operation(eq.lhs) isa Differential
203+
if istree(eq.lhs) && operation(eq.lhs) isa Differential
204204
st = var_from_nested_derivative(eq.lhs)[1]
205205
j = state2idx[st]
206206
M[i, j] = 1

src/systems/diffeqs/odesystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ struct ODESystem <: AbstractODESystem
3131
"""The ODEs defining the system."""
3232
eqs::Vector{Equation}
3333
"""Independent variable."""
34-
iv::Sym
34+
iv::BasicSymbolic{Real}
3535
"""
3636
Dependent (state) variables. Must not contain the independent variable.
3737

src/systems/diffeqs/sdesystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ struct SDESystem <: AbstractODESystem
3737
"""The expressions defining the diffusion term."""
3838
noiseeqs::AbstractArray
3939
"""Independent variable."""
40-
iv::Sym
40+
iv::BasicSymbolic{Real}
4141
"""Dependent (state) variables. Must not contain the independent variable."""
4242
states::Vector
4343
"""Parameter variables. Must not contain the independent variable."""

0 commit comments

Comments
 (0)