Skip to content

Commit 4dea72a

Browse files
committed
Support for Difference operators & symbolic mapreduce.
1 parent e71702b commit 4dea72a

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/systems/diffeqs/validation.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ instantiate(x) = 1
1313
instantiate(x::Num) = instantiate(value(x))
1414
function instantiate(x::Symbolic)
1515
vx = value(x)
16-
if vx isa Sym || operation(vx) isa Sym
17-
elseif operation(vx) isa Differential
16+
if vx isa Sym || operation(vx) isa Sym || (operation(vx) isa Term && operation(vx).f == getindex) || vx isa Symbolics.ArrayOp
1817
return oneunit(1 * vartype(vx))
18+
elseif operation(vx) isa Differential || operation(vx) isa Difference
1919
return instantiate(arguments(vx)[1]) / instantiate(arguments(arguments(vx)[1])[1])
2020
elseif vx isa Pow
2121
pargs = arguments(vx)
@@ -27,6 +27,12 @@ function instantiate(x::Symbolic)
2727
firstunit = unit(terms[1])
2828
@assert all(map(x -> ustrip(firstunit, x) == 1, terms[2:end]))
2929
return 1 * firstunit
30+
elseif operation(vx) == Symbolics._mapreduce
31+
if vx.arguments[2] == +
32+
instantiate(vx.arguments[3])
33+
else
34+
throw(ArgumentError("Unknown array operation $vx"))
35+
end
3036
else
3137
return oneunit(operation(vx)(instantiate.(arguments(vx))...))
3238
end

0 commit comments

Comments
 (0)