Skip to content

Commit 42f5119

Browse files
committed
Replace Expronicon with Moshi
1 parent 5cdb4ba commit 42f5119

7 files changed

+38
-44
lines changed

Project.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ DomainSets = "5b8099bc-c8ec-5219-889f-1d9e522a28bf"
2323
DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821"
2424
EnumX = "4e289a0a-7415-4d19-859d-a7e5c4648b56"
2525
ExprTools = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
26-
Expronicon = "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636"
2726
FindFirstFunctions = "64ca27bc-2ba2-4a57-88aa-44e436879224"
2827
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
2928
FunctionWrappers = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e"
@@ -36,6 +35,7 @@ Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
3635
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
3736
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
3837
MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078"
38+
Moshi = "2e0e35c7-a2e4-4343-998d-7ef72827ed2d"
3939
NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
4040
NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
4141
OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
@@ -101,7 +101,6 @@ DomainSets = "0.6, 0.7"
101101
DynamicQuantities = "^0.11.2, 0.12, 0.13, 1"
102102
EnumX = "1.0.4"
103103
ExprTools = "0.1.10"
104-
Expronicon = "0.8"
105104
FindFirstFunctions = "1"
106105
ForwardDiff = "0.10.3"
107106
FunctionWrappers = "1.1"
@@ -118,6 +117,7 @@ Libdl = "1"
118117
LinearAlgebra = "1"
119118
MLStyle = "0.4.17"
120119
ModelingToolkitStandardLibrary = "2.19"
120+
Moshi = "0.3"
121121
NaNMath = "0.3, 1"
122122
NonlinearSolve = "4.3"
123123
OffsetArrays = "1"

src/ModelingToolkit.jl

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ using SciMLBase: StandardODEProblem, StandardNonlinearProblem, handle_varmap, Ti
4949
using Distributed
5050
import JuliaFormatter
5151
using MLStyle
52+
import Moshi
53+
using Moshi.Data: @data
5254
using NonlinearSolve
5355
import SCCNonlinearSolve
5456
using Reexport

src/clock.jl

+9-17
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
1-
module InferredClock
2-
3-
export InferredTimeDomain
4-
5-
using Expronicon.ADT: @adt, @match
6-
using SciMLBase: TimeDomain
7-
8-
@adt InferredTimeDomain begin
1+
@data InferredClock begin
92
Inferred
103
InferredDiscrete
114
end
125

13-
Base.Broadcast.broadcastable(x::InferredTimeDomain) = Ref(x)
6+
const InferredTimeDomain = InferredClock.Type
7+
using .InferredClock: Inferred, InferredDiscrete
148

15-
end
16-
17-
using .InferredClock
9+
Base.Broadcast.broadcastable(x::InferredTimeDomain) = Ref(x)
1810

1911
struct VariableTimeDomain end
2012
Symbolics.option_to_metadata_type(::Val{:timedomain}) = VariableTimeDomain
@@ -29,7 +21,7 @@ true if `x` contains only continuous-domain signals.
2921
See also [`has_continuous_domain`](@ref)
3022
"""
3123
function is_continuous_domain(x)
32-
issym(x) && return getmetadata(x, VariableTimeDomain, false) == Continuous
24+
issym(x) && return getmetadata(x, VariableTimeDomain, false) == Continuous()
3325
!has_discrete_domain(x) && has_continuous_domain(x)
3426
end
3527

@@ -58,8 +50,8 @@ has_time_domain(x::Num) = has_time_domain(value(x))
5850
has_time_domain(x) = false
5951

6052
for op in [Differential]
61-
@eval input_timedomain(::$op, arg = nothing) = Continuous
62-
@eval output_timedomain(::$op, arg = nothing) = Continuous
53+
@eval input_timedomain(::$op, arg = nothing) = Continuous()
54+
@eval output_timedomain(::$op, arg = nothing) = Continuous()
6355
end
6456

6557
"""
@@ -104,8 +96,8 @@ function is_discrete_domain(x)
10496
!has_discrete_domain(x) && has_continuous_domain(x)
10597
end
10698

107-
sampletime(c) = @match c begin
108-
PeriodicClock(dt, _...) => dt
99+
sampletime(c) = Moshi.Match.@match c begin
100+
PeriodicClock(dt) => dt
109101
_ => nothing
110102
end
111103

src/discretedomain.jl

+6-6
Original file line numberDiff line numberDiff line change
@@ -226,28 +226,28 @@ Base.:-(k::ShiftIndex, i::Int) = k + (-i)
226226
"""
227227
input_timedomain(op::Operator)
228228
229-
Return the time-domain type (`Continuous` or `InferredDiscrete`) that `op` operates on.
229+
Return the time-domain type (`Continuous()` or `InferredDiscrete()`) that `op` operates on.
230230
"""
231231
function input_timedomain(s::Shift, arg = nothing)
232232
if has_time_domain(arg)
233233
return get_time_domain(arg)
234234
end
235-
InferredDiscrete
235+
InferredDiscrete()
236236
end
237237

238238
"""
239239
output_timedomain(op::Operator)
240240
241-
Return the time-domain type (`Continuous` or `InferredDiscrete`) that `op` results in.
241+
Return the time-domain type (`Continuous()` or `InferredDiscrete()`) that `op` results in.
242242
"""
243243
function output_timedomain(s::Shift, arg = nothing)
244244
if has_time_domain(t, arg)
245245
return get_time_domain(t, arg)
246246
end
247-
InferredDiscrete
247+
InferredDiscrete()
248248
end
249249

250-
input_timedomain(::Sample, _ = nothing) = Continuous
250+
input_timedomain(::Sample, _ = nothing) = Continuous()
251251
output_timedomain(s::Sample, _ = nothing) = s.clock
252252

253253
function input_timedomain(h::Hold, arg = nothing)
@@ -256,7 +256,7 @@ function input_timedomain(h::Hold, arg = nothing)
256256
end
257257
InferredDiscrete # the Hold accepts any discrete
258258
end
259-
output_timedomain(::Hold, _ = nothing) = Continuous
259+
output_timedomain(::Hold, _ = nothing) = Continuous()
260260

261261
sampletime(op::Sample, _ = nothing) = sampletime(op.clock)
262262
sampletime(op::ShiftIndex, _ = nothing) = sampletime(op.clock)

src/systems/clock_inference.jl

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ end
88
function ClockInference(ts::TransformationState)
99
@unpack structure = ts
1010
@unpack graph = structure
11-
eq_domain = TimeDomain[Continuous for _ in 1:nsrcs(graph)]
12-
var_domain = TimeDomain[Continuous for _ in 1:ndsts(graph)]
11+
eq_domain = TimeDomain[Continuous() for _ in 1:nsrcs(graph)]
12+
var_domain = TimeDomain[Continuous() for _ in 1:ndsts(graph)]
1313
inferred = BitSet()
1414
for (i, v) in enumerate(get_fullvars(ts))
1515
d = get_time_domain(ts, v)
@@ -151,7 +151,7 @@ function split_system(ci::ClockInference{S}) where {S}
151151
get!(clock_to_id, d) do
152152
cid = (cid_counter[] += 1)
153153
push!(id_to_clock, d)
154-
if d == Continuous
154+
if d == Continuous()
155155
continuous_id[] = cid
156156
end
157157
cid

src/systems/systemstructure.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ function structural_simplify!(state::TearingState, io = nothing; simplify = fals
662662
Dict(v => 0.0 for v in Iterators.flatten(inputs)))
663663
end
664664
ps = [sym isa CallWithMetadata ? sym :
665-
setmetadata(sym, VariableTimeDomain, get(time_domains, sym, Continuous))
665+
setmetadata(sym, VariableTimeDomain, get(time_domains, sym, Continuous()))
666666
for sym in get_ps(sys)]
667667
@set! sys.ps = ps
668668
else

test/clock.jl

+15-15
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,19 @@ k = ShiftIndex(d)
7777

7878
d = Clock(dt)
7979
# Note that TearingState reorders the equations
80-
@test eqmap[1] == Continuous
80+
@test eqmap[1] == Continuous()
8181
@test eqmap[2] == d
8282
@test eqmap[3] == d
8383
@test eqmap[4] == d
84-
@test eqmap[5] == Continuous
85-
@test eqmap[6] == Continuous
84+
@test eqmap[5] == Continuous()
85+
@test eqmap[6] == Continuous()
8686

8787
@test varmap[yd] == d
8888
@test varmap[ud] == d
8989
@test varmap[r] == d
90-
@test varmap[x] == Continuous
91-
@test varmap[y] == Continuous
92-
@test varmap[u] == Continuous
90+
@test varmap[x] == Continuous()
91+
@test varmap[y] == Continuous()
92+
@test varmap[u] == Continuous()
9393

9494
@info "Testing shift normalization"
9595
dt = 0.1
@@ -192,10 +192,10 @@ eqs = [yd ~ Sample(dt)(y)
192192
@test varmap[ud1] == d
193193
@test varmap[yd2] == d2
194194
@test varmap[ud2] == d2
195-
@test varmap[r] == Continuous
196-
@test varmap[x] == Continuous
197-
@test varmap[y] == Continuous
198-
@test varmap[u] == Continuous
195+
@test varmap[r] == Continuous()
196+
@test varmap[x] == Continuous()
197+
@test varmap[y] == Continuous()
198+
@test varmap[u] == Continuous()
199199

200200
@info "test composed systems"
201201

@@ -241,14 +241,14 @@ eqs = [yd ~ Sample(dt)(y)
241241
ci, varmap = infer_clocks(cl)
242242

243243
@test varmap[f.x] == Clock(0.5)
244-
@test varmap[p.x] == Continuous
245-
@test varmap[p.y] == Continuous
244+
@test varmap[p.x] == Continuous()
245+
@test varmap[p.y] == Continuous()
246246
@test varmap[c.ud] == Clock(0.5)
247247
@test varmap[c.yd] == Clock(0.5)
248-
@test varmap[c.y] == Continuous
248+
@test varmap[c.y] == Continuous()
249249
@test varmap[f.y] == Clock(0.5)
250250
@test varmap[f.u] == Clock(0.5)
251-
@test varmap[p.u] == Continuous
251+
@test varmap[p.u] == Continuous()
252252
@test varmap[c.r] == Clock(0.5)
253253

254254
## Multiple clock rates
@@ -474,7 +474,7 @@ eqs = [yd ~ Sample(dt)(y)
474474

475475
## Test continuous clock
476476

477-
c = ModelingToolkit.SolverStepClock
477+
c = ModelingToolkit.SolverStepClock()
478478
k = ShiftIndex(c)
479479

480480
@mtkmodel CounterSys begin

0 commit comments

Comments
 (0)