Skip to content

Commit 78e73af

Browse files
Merge pull request #35 from SciML/symanalysis
[WIP] SymbolicAnalysis integration
2 parents a6773e5 + b45eebc commit 78e73af

13 files changed

+286
-32
lines changed

Project.toml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,15 @@ ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
88
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
99
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
1010
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
11+
Manifolds = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
12+
PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150"
1113
Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
1214
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1315
SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462"
1416
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
17+
SymbolicAnalysis = "4297ee4d-0239-47d8-ba5d-195ecdf594fe"
18+
SymbolicIndexingInterface = "2efcf032-c050-4f8e-a9bb-153293bab1f5"
19+
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
1520

1621
[weakdeps]
1722
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
@@ -20,7 +25,6 @@ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
2025
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
2126
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
2227
SparseDiffTools = "47a9eef4-7e08-11e9-0b38-333d64bd3804"
23-
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
2428
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
2529
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
2630

@@ -30,7 +34,7 @@ OptimizationFiniteDiffExt = "FiniteDiff"
3034
OptimizationForwardDiffExt = "ForwardDiff"
3135
OptimizationMTKExt = "ModelingToolkit"
3236
OptimizationReverseDiffExt = "ReverseDiff"
33-
OptimizationSparseDiffExt = ["SparseDiffTools", "Symbolics", "ReverseDiff"]
37+
OptimizationSparseDiffExt = ["SparseDiffTools", "ReverseDiff"]
3438
OptimizationTrackerExt = "Tracker"
3539
OptimizationZygoteExt = "Zygote"
3640

@@ -42,7 +46,6 @@ Enzyme = "0.12.12"
4246
FiniteDiff = "2.12"
4347
ForwardDiff = "0.10.26"
4448
LinearAlgebra = "1.9, 1.10"
45-
ModelingToolkit = "8.74, 9"
4649
Reexport = "1.2"
4750
Requires = "1"
4851
ReverseDiff = "1.14"

ext/OptimizationFiniteDiffExt.jl

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true}, x,
115115
hess_prototype = f.hess_prototype,
116116
cons_jac_prototype = f.cons_jac_prototype,
117117
cons_hess_prototype = f.cons_hess_prototype,
118-
lag_h, f.lag_hess_prototype)
118+
lag_h = lag_h,
119+
lag_hess_prototype = f.lag_hess_prototype,
120+
sys = f.sys,
121+
expr = f.expr,
122+
cons_expr = f.cons_expr)
119123
end
120124

121125
function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
@@ -231,7 +235,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
231235
hess_prototype = f.hess_prototype,
232236
cons_jac_prototype = f.cons_jac_prototype,
233237
cons_hess_prototype = f.cons_hess_prototype,
234-
lag_h, f.lag_hess_prototype)
238+
lag_h = lag_h,
239+
lag_hess_prototype = f.lag_hess_prototype,
240+
sys = f.sys,
241+
expr = f.expr,
242+
cons_expr = f.cons_expr)
235243
end
236244

237245
function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x,
@@ -339,7 +347,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x
339347
hess_prototype = f.hess_prototype,
340348
cons_jac_prototype = f.cons_jac_prototype,
341349
cons_hess_prototype = f.cons_hess_prototype,
342-
lag_h, f.lag_hess_prototype)
350+
lag_h = lag_h,
351+
lag_hess_prototype = f.lag_hess_prototype,
352+
sys = f.sys,
353+
expr = f.expr,
354+
cons_expr = f.cons_expr)
343355
end
344356

345357
function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
@@ -448,7 +460,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
448460
hess_prototype = f.hess_prototype,
449461
cons_jac_prototype = f.cons_jac_prototype,
450462
cons_hess_prototype = f.cons_hess_prototype,
451-
lag_h, f.lag_hess_prototype)
463+
lag_h = lag_h,
464+
lag_hess_prototype = f.lag_hess_prototype,
465+
sys = f.sys,
466+
expr = f.expr,
467+
cons_expr = f.cons_expr)
452468
end
453469

454470
end

ext/OptimizationForwardDiffExt.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
165165
hess_prototype = f.hess_prototype,
166166
cons_jac_prototype = f.cons_jac_prototype,
167167
cons_hess_prototype = f.cons_hess_prototype,
168-
lag_h, f.lag_hess_prototype)
168+
lag_h = lag_h,
169+
lag_hess_prototype = f.lag_hess_prototype,
170+
sys = f.sys,
171+
expr = f.expr,
172+
cons_expr = f.cons_expr)
169173
end
170174

171175
function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x,
@@ -327,7 +331,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
327331
hess_prototype = f.hess_prototype,
328332
cons_jac_prototype = f.cons_jac_prototype,
329333
cons_hess_prototype = f.cons_hess_prototype,
330-
lag_h, f.lag_hess_prototype)
334+
lag_h = lag_h,
335+
lag_hess_prototype = f.lag_hess_prototype,
336+
sys = f.sys,
337+
expr = f.expr,
338+
cons_expr = f.cons_expr)
331339
end
332340

333341
end

ext/OptimizationReverseDiffExt.jl

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true}, x,
148148
hess_prototype = f.hess_prototype,
149149
cons_jac_prototype = f.cons_jac_prototype,
150150
cons_hess_prototype = f.cons_hess_prototype,
151-
lag_h, f.lag_hess_prototype)
151+
lag_h = lag_h,
152+
lag_hess_prototype = f.lag_hess_prototype,
153+
sys = f.sys,
154+
expr = f.expr,
155+
cons_expr = f.cons_expr)
152156
end
153157

154158
function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
@@ -285,7 +289,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
285289
hess_prototype = f.hess_prototype,
286290
cons_jac_prototype = f.cons_jac_prototype,
287291
cons_hess_prototype = f.cons_hess_prototype,
288-
lag_h, f.lag_hess_prototype)
292+
lag_h = lag_h,
293+
lag_hess_prototype = f.lag_hess_prototype,
294+
sys = f.sys,
295+
expr = f.expr,
296+
cons_expr = f.cons_expr)
289297
end
290298

291299
function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x,
@@ -422,7 +430,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x
422430
hess_prototype = f.hess_prototype,
423431
cons_jac_prototype = f.cons_jac_prototype,
424432
cons_hess_prototype = f.cons_hess_prototype,
425-
lag_h, f.lag_hess_prototype)
433+
lag_h = lag_h,
434+
lag_hess_prototype = f.lag_hess_prototype,
435+
sys = f.sys,
436+
expr = f.expr,
437+
cons_expr = f.cons_expr)
426438
end
427439

428440
function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
@@ -559,7 +571,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
559571
hess_prototype = f.hess_prototype,
560572
cons_jac_prototype = f.cons_jac_prototype,
561573
cons_hess_prototype = f.cons_hess_prototype,
562-
lag_h, f.lag_hess_prototype)
574+
lag_h = lag_h,
575+
lag_hess_prototype = f.lag_hess_prototype,
576+
sys = f.sys,
577+
expr = f.expr,
578+
cons_expr = f.cons_expr)
563579
end
564580

565581
end

ext/OptimizationSparseFiniteDiff.jl

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true}, x,
126126
cons_jac_colorvec = cons_jac_colorvec,
127127
cons_hess_prototype = getfield.(conshess_caches, :sparsity),
128128
cons_hess_colorvec = getfield.(conshess_caches, :colors),
129-
lag_h, f.lag_hess_prototype)
129+
lag_h = lag_h,
130+
lag_hess_prototype = f.lag_hess_prototype,
131+
sys = f.sys,
132+
expr = f.expr,
133+
cons_expr = f.cons_expr)
130134
end
131135

132136
function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
@@ -262,7 +266,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
262266
cons_jac_colorvec = cons_jac_colorvec,
263267
cons_hess_prototype = getfield.(conshess_caches, :sparsity),
264268
cons_hess_colorvec = getfield.(conshess_caches, :colors),
265-
lag_h, f.lag_hess_prototype)
269+
lag_h = lag_h,
270+
lag_hess_prototype = f.lag_hess_prototype,
271+
sys = f.sys,
272+
expr = f.expr,
273+
cons_expr = f.cons_expr)
266274
end
267275

268276
function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x,
@@ -394,7 +402,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x
394402
cons_jac_colorvec = cons_jac_colorvec,
395403
cons_hess_prototype = getfield.(conshess_caches, :sparsity),
396404
cons_hess_colorvec = getfield.(conshess_caches, :colors),
397-
lag_h, f.lag_hess_prototype)
405+
lag_h = lag_h,
406+
lag_hess_prototype = f.lag_hess_prototype,
407+
sys = f.sys,
408+
expr = f.expr,
409+
cons_expr = f.cons_expr)
398410
end
399411

400412
function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
@@ -521,5 +533,9 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
521533
cons_jac_colorvec = cons_jac_colorvec,
522534
cons_hess_prototype = getfield.(conshess_caches, :sparsity),
523535
cons_hess_colorvec = getfield.(conshess_caches, :colors),
524-
lag_h, f.lag_hess_prototype)
536+
lag_h = lag_h,
537+
lag_hess_prototype = f.lag_hess_prototype,
538+
sys = f.sys,
539+
expr = f.expr,
540+
cons_expr = f.cons_expr)
525541
end

ext/OptimizationSparseForwardDiff.jl

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true}, x,
105105
cons_jac_prototype = cons_jac_prototype,
106106
cons_hess_prototype = getfield.(cons_hess_caches, :sparsity),
107107
cons_hess_colorvec = getfield.(cons_hess_caches, :colors),
108-
lag_h, f.lag_hess_prototype)
108+
lag_h = lag_h,
109+
lag_hess_prototype = f.lag_hess_prototype,
110+
sys = f.sys,
111+
expr = f.expr,
112+
cons_expr = f.cons_expr)
109113
end
110114

111115
function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
@@ -220,7 +224,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
220224
cons_jac_colorvec = cons_jac_colorvec,
221225
cons_hess_prototype = getfield.(cons_hess_caches, :sparsity),
222226
cons_hess_colorvec = getfield.(cons_hess_caches, :colors),
223-
lag_h, f.lag_hess_prototype)
227+
lag_h = lag_h,
228+
lag_hess_prototype = f.lag_hess_prototype,
229+
sys = f.sys,
230+
expr = f.expr,
231+
cons_expr = f.cons_expr)
224232
end
225233

226234
function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x,
@@ -328,7 +336,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x
328336
cons_jac_prototype = cons_jac_prototype,
329337
cons_hess_prototype = getfield.(cons_hess_caches, :sparsity),
330338
cons_hess_colorvec = getfield.(cons_hess_caches, :colors),
331-
lag_h, f.lag_hess_prototype)
339+
lag_h = lag_h,
340+
lag_hess_prototype = f.lag_hess_prototype,
341+
sys = f.sys,
342+
expr = f.expr,
343+
cons_expr = f.cons_expr)
332344
end
333345

334346
function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
@@ -439,5 +451,9 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
439451
cons_jac_prototype = cons_jac_prototype,
440452
cons_hess_prototype = getfield.(cons_hess_caches, :sparsity),
441453
cons_hess_colorvec = getfield.(cons_hess_caches, :colors),
442-
lag_h, f.lag_hess_prototype)
454+
lag_h = lag_h,
455+
lag_hess_prototype = f.lag_hess_prototype,
456+
sys = f.sys,
457+
expr = f.expr,
458+
cons_expr = f.cons_expr)
443459
end

ext/OptimizationSparseReverseDiff.jl

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true}, x,
176176
cons_jac_colorvec = cons_jac_colorvec,
177177
cons_hess_prototype = conshess_sparsity,
178178
cons_hess_colorvec = conshess_colors,
179-
lag_h, f.lag_hess_prototype)
179+
lag_h = lag_h,
180+
lag_hess_prototype = f.lag_hess_prototype,
181+
sys = f.sys,
182+
expr = f.expr,
183+
cons_expr = f.cons_expr)
180184
end
181185

182186
function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
@@ -376,7 +380,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
376380
cons_jac_colorvec = cons_jac_colorvec,
377381
cons_hess_prototype = conshess_sparsity,
378382
cons_hess_colorvec = conshess_colors,
379-
lag_h, f.lag_hess_prototype)
383+
lag_h = lag_h,
384+
lag_hess_prototype = f.lag_hess_prototype,
385+
sys = f.sys,
386+
expr = f.expr,
387+
cons_expr = f.cons_expr)
380388
end
381389

382390
function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x,
@@ -553,7 +561,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x
553561
cons_jac_colorvec = cons_jac_colorvec,
554562
cons_hess_prototype = conshess_sparsity,
555563
cons_hess_colorvec = conshess_colors,
556-
lag_h, f.lag_hess_prototype)
564+
lag_h = lag_h,
565+
lag_hess_prototype = f.lag_hess_prototype,
566+
sys = f.sys,
567+
expr = f.expr,
568+
cons_expr = f.cons_expr)
557569
end
558570

559571
function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
@@ -731,5 +743,9 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
731743
cons_jac_colorvec = cons_jac_colorvec,
732744
cons_hess_prototype = conshess_sparsity,
733745
cons_hess_colorvec = conshess_colors,
734-
lag_h, f.lag_hess_prototype)
746+
lag_h = lag_h,
747+
lag_hess_prototype = f.lag_hess_prototype,
748+
sys = f.sys,
749+
expr = f.expr,
750+
cons_expr = f.cons_expr)
735751
end

ext/OptimizationZygoteExt.jl

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true}, x,
8181
hess_prototype = f.hess_prototype,
8282
cons_jac_prototype = f.cons_jac_prototype,
8383
cons_hess_prototype = f.cons_hess_prototype,
84-
lag_h, f.lag_hess_prototype)
84+
lag_h = lag_h,
85+
lag_hess_prototype = f.lag_hess_prototype,
86+
sys = f.sys,
87+
expr = f.expr,
88+
cons_expr = f.cons_expr)
8589
end
8690

8791
function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
@@ -159,7 +163,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{true},
159163
hess_prototype = f.hess_prototype,
160164
cons_jac_prototype = f.cons_jac_prototype,
161165
cons_hess_prototype = f.cons_hess_prototype,
162-
lag_h, f.lag_hess_prototype)
166+
lag_h = lag_h,
167+
lag_hess_prototype = f.lag_hess_prototype,
168+
sys = f.sys,
169+
expr = f.expr,
170+
cons_expr = f.cons_expr)
163171
end
164172

165173
function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x,
@@ -240,7 +248,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false}, x
240248
hess_prototype = f.hess_prototype,
241249
cons_jac_prototype = f.cons_jac_prototype,
242250
cons_hess_prototype = f.cons_hess_prototype,
243-
lag_h, f.lag_hess_prototype)
251+
lag_h = lag_h,
252+
lag_hess_prototype = f.lag_hess_prototype,
253+
sys = f.sys,
254+
expr = f.expr,
255+
cons_expr = f.cons_expr)
244256
end
245257

246258
function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
@@ -323,7 +335,11 @@ function OptimizationBase.instantiate_function(f::OptimizationFunction{false},
323335
hess_prototype = f.hess_prototype,
324336
cons_jac_prototype = f.cons_jac_prototype,
325337
cons_hess_prototype = f.cons_hess_prototype,
326-
lag_h, f.lag_hess_prototype)
338+
lag_h = lag_h,
339+
lag_hess_prototype = f.lag_hess_prototype,
340+
sys = f.sys,
341+
expr = f.expr,
342+
cons_expr = f.cons_expr)
327343
end
328344

329345
end

src/OptimizationBase.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ if !isdefined(Base, :get_extension)
99
end
1010

1111
using ArrayInterface, Base.Iterators, SparseArrays, LinearAlgebra
12-
12+
using SymbolicIndexingInterface
13+
using SymbolicAnalysis: propagate_sign, propagate_curvature, propagate_gcurvature,
14+
getcurvature, getgcurvature, getsign
15+
import Symbolics
16+
import Manifolds
17+
import Symbolics: variable, Equation, Inequality, unwrap, @variables
1318
import SciMLBase: OptimizationProblem,
1419
OptimizationFunction, ObjSense,
1520
MaxSense, MinSense, OptimizationStats

0 commit comments

Comments
 (0)