302302        return  ODESystem (eqs, t, vars, params; systems, name)
303303    end 
304304
305-     @component  function  FilteredInputFix (; name, x0 =  0 , T =  0.1 )
305+     @component  function  FilteredInputExplicit (; name, x0 =  0 , T =  0.1 )
306+         params =  @parameters  begin 
307+             k (t)[1 : 1 ] =  [x0]
308+             T =  T
309+         end 
310+         vars =  @variables  begin 
311+             x (t) =  k
312+             dx (t) =  0 
313+             ddx (t)
314+         end 
315+         systems =  []
316+         eqs =  [D (x) ~  dx
317+                D (dx) ~  ddx
318+                D (k[1 ]) ~  1.0 
319+                dx ~  (k[1 ] -  x) /  T]
320+         return  ODESystem (eqs, t, vars, params; systems, name)
321+     end 
322+ 
323+     @component  function  FilteredInputErr (; name, x0 =  0 , T =  0.1 )
306324        params =  @parameters  begin 
307325            k (t) =  x0
308326            T =  T
@@ -316,14 +334,14 @@ end
316334        eqs =  [D (x) ~  dx
317335               D (dx) ~  ddx
318336               dx ~  (k -  x) /  T
319-                D (k) ~  0 ]
337+                D (k) ~  missing ]
320338        return  ODESystem (eqs, t, vars, params; systems, name)
321339    end 
322340
323-     @named  sys =  FilteredInput ()
341+     @named  sys =  FilteredInputErr ()
324342    @test_throws  [" derivative of discrete variable" " k(t)" structural_simplify (sys)
325343
326-     @mtkbuild  sys =  FilteredInputFix ()
344+     @mtkbuild  sys =  FilteredInput ()
327345    vs =  Set ()
328346    for  eq in  equations (sys)
329347        ModelingToolkit. vars! (vs, eq)
334352
335353    @test  ! (D (sys. k) in  vs)
336354
355+     @mtkbuild  sys =  FilteredInputExplicit ()
356+     obsfn1 =  ModelingToolkit. build_explicit_observed_function (sys, sys. ddx)
357+     obsfn2 =  ModelingToolkit. build_explicit_observed_function (sys, sys. dx)
358+     u =  [1.0 ]
359+     p =  MTKParameters (sys, [sys. k =>  [2.0 ], sys. T =>  3.0 ])
360+     @test  obsfn1 (u, p, 0.0 ) ≈  (1  -  obsfn2 (u, p, 0.0 )) /  3.0 
361+ 
337362    @testset  " Called parameter still has derivative" begin 
338363        @component  function  FilteredInput2 (; name, x0 =  0 , T =  0.1 )
339364            ts =  collect (0.0 : 0.1 : 10.0 )
0 commit comments