|
25 | 25 |
|
26 | 26 | for T in [:ODEProblem, :DDEProblem, :SDEProblem, :SDDEProblem, :DAEProblem,
|
27 | 27 | :BVProblem, :DiscreteProblem, :ImplicitDiscreteProblem]
|
28 |
| - for (pType, pCanonical) in [ |
29 |
| - (AbstractDict, :p), |
30 |
| - (AbstractArray{<:Pair}, :(Dict(p))), |
31 |
| - (AbstractArray, :(isempty(p) ? Dict() : Dict(parameters(sys) .=> p))) |
32 |
| - ], |
33 |
| - (uType, uCanonical) in [ |
34 |
| - (Nothing, :(Dict())), |
35 |
| - (AbstractDict, :u0), |
36 |
| - (AbstractArray{<:Pair}, :(Dict(u0))), |
37 |
| - (AbstractArray, :(isempty(u0) ? Dict() : Dict(unknowns(sys) .=> u0))) |
38 |
| - ] |
39 |
| - |
40 |
| - @eval function SciMLBase.$T(sys::System, u0::$uType, tspan, p::$pType; kw...) |
41 |
| - ctor = string($T) |
42 |
| - uCan = string($(QuoteNode(uCanonical))) |
43 |
| - pCan = string($(QuoteNode(pCanonical))) |
44 |
| - @warn """ |
45 |
| - `$ctor(sys, u0, tspan, p; kw...)` is deprecated. Use |
46 |
| - `$ctor(sys, merge($uCan, $pCan), tspan)` instead. |
47 |
| - """ |
48 |
| - SciMLBase.$T(sys, merge($uCanonical, $pCanonical), tspan; kw...) |
49 |
| - end |
50 |
| - @eval function SciMLBase.$T{iip}( |
51 |
| - sys::System, u0::$uType, tspan, p::$pType; kw...) where {iip} |
52 |
| - ctor = string($T{iip}) |
53 |
| - uCan = string($(QuoteNode(uCanonical))) |
54 |
| - pCan = string($(QuoteNode(pCanonical))) |
55 |
| - @warn """ |
56 |
| - `$ctor(sys, u0, tspan, p; kw...)` is deprecated. Use |
57 |
| - `$ctor(sys, merge($uCan, $pCan), tspan)` instead. |
58 |
| - """ |
59 |
| - return SciMLBase.$T{iip}(sys, merge($uCanonical, $pCanonical), tspan; kw...) |
60 |
| - end |
61 |
| - @eval function SciMLBase.$T{iip, spec}( |
62 |
| - sys::System, u0::$uType, tspan, p::$pType; kw...) where {iip, spec} |
63 |
| - ctor = string($T{iip, spec}) |
64 |
| - uCan = string($(QuoteNode(uCanonical))) |
65 |
| - pCan = string($(QuoteNode(pCanonical))) |
66 |
| - @warn """ |
67 |
| - `$ctor(sys, u0, tspan, p; kw...)` is deprecated. Use |
68 |
| - `$ctor(sys, merge($uCan, $pCan), tspan)` instead. |
69 |
| - """ |
70 |
| - return $T{iip, spec}(sys, merge($uCanonical, $pCanonical), tspan; kw...) |
71 |
| - end |
72 |
| - end |
73 |
| - |
74 |
| - for pType in [SciMLBase.NullParameters, Nothing], uType in [Any, Nothing] |
75 |
| - |
76 |
| - @eval function SciMLBase.$T(sys::System, u0::$uType, tspan, p::$pType; kw...) |
77 |
| - ctor = string($T) |
78 |
| - pT = string($(QuoteNode(pType))) |
79 |
| - @warn """ |
80 |
| - `$ctor(sys, u0, tspan, p::$pT; kw...)` is deprecated. Use |
81 |
| - `$ctor(sys, u0, tspan)` instead. |
82 |
| - """ |
83 |
| - $T(sys, u0, tspan; kw...) |
84 |
| - end |
85 |
| - @eval function SciMLBase.$T{iip}( |
86 |
| - sys::System, u0::$uType, tspan, p::$pType; kw...) where {iip} |
87 |
| - ctor = string($T{iip}) |
88 |
| - pT = string($(QuoteNode(pType))) |
89 |
| - @warn """ |
90 |
| - `$ctor(sys, u0, tspan, p::$pT; kw...)` is deprecated. Use |
91 |
| - `$ctor(sys, u0, tspan)` instead. |
92 |
| - """ |
93 |
| - return $T{iip}(sys, u0, tspan; kw...) |
| 28 | + @eval @fallback_iip_specialize function SciMLBase.$T{iip, spec}(sys::System, u0, tspan, p; kw...) where {iip, spec} |
| 29 | + @warn """ |
| 30 | + `$($T)(sys, u0, tspan, p)` is deprecated. Use `$($T)(sys, op, tspan)` instead and provide |
| 31 | + both unknown and parameter values in the operating point `op`. |
| 32 | + """ |
| 33 | + if u0 === nothing |
| 34 | + u0 = Dict() |
| 35 | + elseif u0 isa AbstractDict |
| 36 | + u0 = u0 |
| 37 | + elseif u0 isa AbstractArray{<:Pair} |
| 38 | + u0 = Dict(u0) |
| 39 | + elseif u0 isa AbstractArray |
| 40 | + u0 = isempty(u0) ? Dict() : Dict(unknowns(sys) .=> u0) |
94 | 41 | end
|
95 |
| - @eval function SciMLBase.$T{iip, spec}( |
96 |
| - sys::System, u0::$uType, tspan, p::$pType; kw...) where {iip, spec} |
97 |
| - ctor = string($T{iip, spec}) |
98 |
| - pT = string($(QuoteNode(pType))) |
99 |
| - @warn """ |
100 |
| - `$ctor(sys, u0, tspan, p::$pT; kw...)` is deprecated. Use |
101 |
| - `$ctor(sys, u0, tspan)` instead. |
102 |
| - """ |
103 |
| - return $T{iip, spec}(sys, u0, tspan; kw...) |
| 42 | + if p === nothing || p isa SciMLBase.NullParameters |
| 43 | + p = Dict() |
| 44 | + elseif p isa AbstractDict |
| 45 | + p = p |
| 46 | + elseif p isa AbstractArray{<:Pair} |
| 47 | + p = Dict(p) |
| 48 | + elseif p isa AbstractArray |
| 49 | + p = isempty(p) ? Dict() : Dict(parameters(sys) .=> p) |
104 | 50 | end
|
| 51 | + return SciMLBase.$T{iip, spec}(sys, merge(u0, p), tspan; kw...) |
105 | 52 | end
|
106 | 53 | end
|
107 | 54 |
|
108 | 55 | for T in [:NonlinearProblem, :NonlinearLeastSquaresProblem,
|
109 | 56 | :SCCNonlinearProblem, :OptimizationProblem, :SteadyStateProblem]
|
110 |
| - for (pType, pCanonical) in [ |
111 |
| - (AbstractDict, :p), |
112 |
| - (AbstractArray{<:Pair}, :(Dict(p))), |
113 |
| - (AbstractArray, :(isempty(p) ? Dict() : Dict(parameters(sys) .=> p))) |
114 |
| - ], |
115 |
| - (uType, uCanonical) in [ |
116 |
| - (Nothing, :(Dict())), |
117 |
| - (AbstractDict, :u0), |
118 |
| - (AbstractArray{<:Pair}, :(Dict(u0))), |
119 |
| - (AbstractArray, :(isempty(u0) ? Dict() : Dict(unknowns(sys) .=> u0))) |
120 |
| - ] |
121 |
| - |
122 |
| - @eval function SciMLBase.$T(sys::System, u0::$uType, p::$pType; kw...) |
123 |
| - ctor = string($T) |
124 |
| - uCan = string($(QuoteNode(uCanonical))) |
125 |
| - pCan = string($(QuoteNode(pCanonical))) |
126 |
| - @warn """ |
127 |
| - `$ctor(sys, u0, p; kw...)` is deprecated. Use `$ctor(sys, merge($uCan, $pCan))` |
128 |
| - instead. |
129 |
| - """ |
130 |
| - $T(sys, merge($uCanonical, $pCanonical); kw...) |
131 |
| - end |
132 |
| - @eval function SciMLBase.$T{iip}( |
133 |
| - sys::System, u0::$uType, p::$pType; kw...) where {iip} |
134 |
| - ctor = string($T{iip}) |
135 |
| - uCan = string($(QuoteNode(uCanonical))) |
136 |
| - pCan = string($(QuoteNode(pCanonical))) |
137 |
| - @warn """ |
138 |
| - `$ctor(sys, u0, p; kw...)` is deprecated. Use `$ctor(sys, merge($uCan, $pCan))` |
139 |
| - instead. |
140 |
| - """ |
141 |
| - return $T{iip}(sys, merge($uCanonical, $pCanonical); kw...) |
142 |
| - end |
143 |
| - @eval function SciMLBase.$T{iip, spec}( |
144 |
| - sys::System, u0::$uType, p::$pType; kw...) where {iip, spec} |
145 |
| - ctor = string($T{iip, spec}) |
146 |
| - uCan = string($(QuoteNode(uCanonical))) |
147 |
| - pCan = string($(QuoteNode(pCanonical))) |
148 |
| - @warn """ |
149 |
| - `$ctor(sys, u0, p; kw...)` is deprecated. Use `$ctor(sys, merge($uCan, $pCan))` |
150 |
| - instead. |
151 |
| - """ |
152 |
| - return $T{iip, spec}(sys, merge($uCanonical, $pCanonical); kw...) |
153 |
| - end |
154 |
| - end |
155 |
| - for pType in [SciMLBase.NullParameters, Nothing], uType in [Any, Nothing] |
156 |
| - |
157 |
| - @eval function SciMLBase.$T(sys::System, u0::$uType, p::$pType; kw...) |
158 |
| - ctor = string($T) |
159 |
| - pT = string($(QuoteNode(pType))) |
160 |
| - @warn """ |
161 |
| - `$ctor(sys, u0, p::$pT; kw...)` is deprecated. Use `$ctor(sys, u0)` instead |
162 |
| - """ |
163 |
| - $T(sys, u0; kw...) |
164 |
| - end |
165 |
| - @eval function SciMLBase.$T{iip}( |
166 |
| - sys::System, u0::$uType, p::$pType; kw...) where {iip} |
167 |
| - ctor = string($T{iip}) |
168 |
| - pT = string($(QuoteNode(pType))) |
169 |
| - @warn """ |
170 |
| - `$ctor(sys, u0, p::$pT; kw...)` is deprecated. Use `$ctor(sys, u0)` instead |
171 |
| - """ |
172 |
| - return $T{iip}(sys, u0; kw...) |
| 57 | + @eval @fallback_iip_specialize function SciMLBase.$T{iip, spec}(sys::System, u0, p; kw...) where {iip, spec} |
| 58 | + @warn """ |
| 59 | + `$($T)(sys, u0, p)` is deprecated. Use `$($T)(sys, op)` instead and provide |
| 60 | + both unknown and parameter values in the operating point `op`. |
| 61 | + """ |
| 62 | + if u0 === nothing |
| 63 | + u0 = Dict() |
| 64 | + elseif u0 isa AbstractDict |
| 65 | + u0 = u0 |
| 66 | + elseif u0 isa AbstractArray{<:Pair} |
| 67 | + u0 = Dict(u0) |
| 68 | + elseif u0 isa AbstractArray |
| 69 | + u0 = isempty(u0) ? Dict() : Dict(unknowns(sys) .=> u0) |
173 | 70 | end
|
174 |
| - @eval function SciMLBase.$T{iip, spec}( |
175 |
| - sys::System, u0::$uType, p::$pType; kw...) where {iip, spec} |
176 |
| - ctor = string($T{iip, spec}) |
177 |
| - pT = string($(QuoteNode(pType))) |
178 |
| - @warn """ |
179 |
| - `$ctor(sys, u0, p::$pT; kw...)` is deprecated. Use `$ctor(sys, u0)` instead |
180 |
| - """ |
181 |
| - return $T{iip, spec}(sys, u0; kw...) |
| 71 | + if p === nothing || p isa SciMLBase.NullParameters |
| 72 | + p = Dict() |
| 73 | + elseif p isa AbstractDict |
| 74 | + p = p |
| 75 | + elseif p isa AbstractArray{<:Pair} |
| 76 | + p = Dict(p) |
| 77 | + elseif p isa AbstractArray |
| 78 | + p = isempty(p) ? Dict() : Dict(parameters(sys) .=> p) |
182 | 79 | end
|
| 80 | + return SciMLBase.$T{iip, spec}(sys, merge(u0, p); kw...) |
183 | 81 | end
|
184 | 82 | end
|
185 | 83 |
|
|
0 commit comments