Skip to content

Commit 6d8a82a

Browse files
feat: support zero-argument operators
1 parent cc3f4bd commit 6d8a82a

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

src/systems/clock_inference.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ function is_time_domain_conversion(v)
285285
o isa Operator || return false
286286
itd = input_timedomain(o)
287287
allequal(itd) || return true
288+
isempty(itd) && return true
288289
otd = output_timedomain(o)
289290
itd[1] == otd || return true
290291
return false

src/systems/systemstructure.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,8 @@ function TearingState(sys; quick_cancel = false, check = true, sort_eqs = true)
456456

457457
if !symbolic_contains(v, dvs)
458458
isvalid = iscall(v) &&
459-
(operation(v) isa Shift || is_transparent_operator(operation(v)))
459+
(operation(v) isa Shift || isempty(arguments(v)) ||
460+
is_transparent_operator(operation(v)))
460461
v′ = v
461462
while !isvalid && iscall(v′) && operation(v′) isa Union{Differential, Shift}
462463
v′ = arguments(v′)[1]

src/utils.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -633,15 +633,21 @@ can be checked using `check_scope_depth`.
633633
This function should return `nothing`.
634634
"""
635635
function collect_vars!(unknowns, parameters, expr, iv; depth = 0, op = Symbolics.Operator)
636+
expr = unwrap(expr)
636637
if issym(expr)
637638
return collect_var!(unknowns, parameters, expr, iv; depth)
638639
end
639-
for var in vars(expr; op)
640-
while iscall(var) && operation(var) isa op
641-
validate_operator(operation(var), arguments(var), iv; context = expr)
642-
var = arguments(var)[1]
640+
varsbuf = OrderedSet()
641+
vars!(varsbuf, expr; op)
642+
for var in varsbuf
643+
if iscall(var) && operation(var) isa op
644+
args = arguments(var)
645+
validate_operator(operation(var), args, iv; context = expr)
646+
isempty(args) && continue
647+
push!(varsbuf, args[1])
648+
else
649+
collect_var!(unknowns, parameters, var, iv; depth)
643650
end
644-
collect_var!(unknowns, parameters, var, iv; depth)
645651
end
646652
return nothing
647653
end
@@ -1184,4 +1190,4 @@ function wrap_with_D(n, D, repeats)
11841190
else
11851191
wrap_with_D(D(n), D, repeats - 1)
11861192
end
1187-
end
1193+
end

0 commit comments

Comments
 (0)