@@ -101,9 +101,11 @@ function expand_derivatives(O::Term, simplify=true; occurances=nothing)
101101 x = if _iszero (t2)
102102 t2
103103 elseif _isone (t2)
104- derivative (o, i)
104+ d = derivative_idx (o, i)
105+ d isa NoDeriv ? D (o) : d
105106 else
106- t1 = derivative (o, i)
107+ t1 = derivative_idx (o, i)
108+ t1 = t1 isa NoDeriv ? D (o) : t1
107109 make_operation (* , [t1, t2])
108110 end
109111
@@ -157,7 +159,7 @@ julia> using ModelingToolkit
157159
158160julia> @variables x y;
159161
160- julia> ModelingToolkit.derivative (sin(x), 1)
162+ julia> ModelingToolkit.derivative_idx (sin(x), 1)
161163cos(x())
162164```
163165
@@ -171,15 +173,20 @@ sin(x()) * y() ^ 2
171173julia> typeof(myop.op) # Op is multiplication function
172174typeof(*)
173175
174- julia> ModelingToolkit.derivative (myop, 1) # wrt. sin(x)
176+ julia> ModelingToolkit.derivative_idx (myop, 1) # wrt. sin(x)
175177y() ^ 2
176178
177- julia> ModelingToolkit.derivative (myop, 2) # wrt. y^2
179+ julia> ModelingToolkit.derivative_idx (myop, 2) # wrt. y^2
178180sin(x())
179181```
180182"""
181- derivative (O:: Term , idx) = derivative (O. op, (O. args... ,), Val (idx))
182- derivative (O:: Any , :: Any ) = 0
183+ derivative_idx (O:: Any , :: Any ) = 0
184+ derivative_idx (O:: Term , idx) = derivative (O. op, (O. args... ,), Val (idx))
185+
186+ # Indicate that no derivative is defined.
187+ struct NoDeriv
188+ end
189+ derivative (f, args, v) = NoDeriv ()
183190
184191# Pre-defined derivatives
185192import DiffRules
0 commit comments