@@ -403,14 +403,14 @@ function Girsanov_transform(sys::SDESystem, u; θ0 = 1.0)
403
403
checks = false )
404
404
end
405
405
406
- function DiffEqBase. SDEFunction {iip} (sys:: SDESystem , dvs = unknowns (sys),
406
+ function DiffEqBase. SDEFunction {iip, specialize } (sys:: SDESystem , dvs = unknowns (sys),
407
407
ps = parameters (sys),
408
408
u0 = nothing ;
409
409
version = nothing , tgrad = false , sparse = false ,
410
410
jac = false , Wfact = false , eval_expression = false ,
411
411
eval_module = @__MODULE__ ,
412
412
checkbounds = false ,
413
- kwargs... ) where {iip}
413
+ kwargs... ) where {iip, specialize }
414
414
if ! iscomplete (sys)
415
415
error (" A completed `SDESystem` is required. Call `complete` or `structural_simplify` on the system before creating an `SDEFunction`" )
416
416
end
@@ -480,7 +480,7 @@ function DiffEqBase.SDEFunction{iip}(sys::SDESystem, dvs = unknowns(sys),
480
480
481
481
observedfun = ObservedFunctionCache (sys; eval_expression, eval_module)
482
482
483
- SDEFunction {iip} (f, g,
483
+ SDEFunction {iip, specialize } (f, g,
484
484
sys = sys,
485
485
jac = _jac === nothing ? nothing : _jac,
486
486
tgrad = _tgrad === nothing ? nothing : _tgrad,
@@ -505,6 +505,16 @@ function DiffEqBase.SDEFunction(sys::SDESystem, args...; kwargs...)
505
505
SDEFunction {true} (sys, args... ; kwargs... )
506
506
end
507
507
508
+ function DiffEqBase. SDEFunction {true} (sys:: SDESystem , args... ;
509
+ kwargs... )
510
+ SDEFunction {true, SciMLBase.AutoSpecialize} (sys, args... ; kwargs... )
511
+ end
512
+
513
+ function DiffEqBase. SDEFunction {false} (sys:: SDESystem , args... ;
514
+ kwargs... )
515
+ SDEFunction {false, SciMLBase.FullSpecialize} (sys, args... ; kwargs... )
516
+ end
517
+
508
518
"""
509
519
```julia
510
520
DiffEqBase.SDEFunctionExpr{iip}(sys::AbstractODESystem, dvs = unknowns(sys),
@@ -583,14 +593,16 @@ function SDEFunctionExpr(sys::SDESystem, args...; kwargs...)
583
593
SDEFunctionExpr {true} (sys, args... ; kwargs... )
584
594
end
585
595
586
- function DiffEqBase. SDEProblem {iip} (sys:: SDESystem , u0map = [], tspan = get_tspan (sys),
596
+ function DiffEqBase. SDEProblem {iip, specialize} (
597
+ sys:: SDESystem , u0map = [], tspan = get_tspan (sys),
587
598
parammap = DiffEqBase. NullParameters ();
588
599
sparsenoise = nothing , check_length = true ,
589
- callback = nothing , kwargs... ) where {iip}
600
+ callback = nothing , kwargs... ) where {iip, specialize }
590
601
if ! iscomplete (sys)
591
602
error (" A completed `SDESystem` is required. Call `complete` or `structural_simplify` on the system before creating an `SDEProblem`" )
592
603
end
593
- f, u0, p = process_DEProblem (SDEFunction{iip}, sys, u0map, parammap; check_length,
604
+ f, u0, p = process_DEProblem (
605
+ SDEFunction{iip, specialize}, sys, u0map, parammap; check_length,
594
606
kwargs... )
595
607
cbs = process_events (sys; callback, kwargs... )
596
608
sparsenoise === nothing && (sparsenoise = get (kwargs, :sparse , false ))
@@ -628,6 +640,21 @@ function DiffEqBase.SDEProblem(sys::SDESystem, args...; kwargs...)
628
640
SDEProblem {true} (sys, args... ; kwargs... )
629
641
end
630
642
643
+ function DiffEqBase. SDEProblem (sys:: SDESystem ,
644
+ u0map:: StaticArray ,
645
+ args... ;
646
+ kwargs... )
647
+ SDEProblem {false, SciMLBase.FullSpecialize} (sys, u0map, args... ; kwargs... )
648
+ end
649
+
650
+ function DiffEqBase. SDEProblem {true} (sys:: SDESystem , args... ; kwargs... )
651
+ SDEProblem {true, SciMLBase.AutoSpecialize} (sys, args... ; kwargs... )
652
+ end
653
+
654
+ function DiffEqBase. SDEProblem {false} (sys:: SDESystem , args... ; kwargs... )
655
+ SDEProblem {false, SciMLBase.FullSpecialize} (sys, args... ; kwargs... )
656
+ end
657
+
631
658
"""
632
659
```julia
633
660
DiffEqBase.SDEProblemExpr{iip}(sys::AbstractODESystem, u0map, tspan,
0 commit comments