@@ -1367,13 +1367,20 @@ PrecompileTools.@compile_workload begin
1367
1367
# at lowering time, not much of this would get precompiled without `@eval`
1368
1368
@eval begin
1369
1369
let
1370
- model = Model (
1370
+ # We don't care about this particular optimizer, but it still
1371
+ # exercises generic code paths that calls like
1372
+ # Model(HiGHS.Optimizer) also need.
1373
+ Model (
1371
1374
() -> MOI. Utilities. MockOptimizer (
1372
1375
MOI. Utilities. UniversalFallback (
1373
1376
MOI. Utilities. Model {Float64} (),
1374
1377
),
1375
1378
),
1376
1379
)
1380
+ # Use an empty model to build, which is a common use-case, and
1381
+ # doesn't bake in Utilities.MockOptimizer.
1382
+ model = Model ()
1383
+ set_silent (model)
1377
1384
@variables (model, begin
1378
1385
x1 >= 0
1379
1386
0 <= x2 <= 1
@@ -1385,8 +1392,9 @@ PrecompileTools.@compile_workload begin
1385
1392
x8[i = 1 : 3 ; isodd (i)], (start = i)
1386
1393
end )
1387
1394
@expressions (model, begin
1388
- a, - 1 + x1 + x2
1395
+ a, 2 * x1 + 3 * x2
1389
1396
b, 1 + x1^ 2 + x2
1397
+ nl_expr, sin (x1)
1390
1398
end )
1391
1399
@constraints (model, begin
1392
1400
c1, a >= 0
@@ -1400,42 +1408,22 @@ PrecompileTools.@compile_workload begin
1400
1408
[x1, x2, x1] in SecondOrderCone ()
1401
1409
[1.0 * x1 x2; x2 x1] >= 0 , PSDCone ()
1402
1410
1.0 * x1 ⟂ x2
1411
+ nl_expr <= 1
1403
1412
end )
1404
1413
@objective (model, Min, x1)
1405
1414
@objective (model, Max, a)
1406
1415
@objective (model, Min, b)
1407
- @NLconstraint (model, c9, 1 * sin (x1) + 2.0 * sin (a) + sin (b) <= 1 )
1408
- @NLparameter (model, p == 2 )
1409
- @NLexpression (model, expr, x1^ p)
1410
- @NLobjective (model, Min, 1 + expr)
1416
+ set_optimizer (
1417
+ model,
1418
+ () -> MOI. Utilities. MockOptimizer (
1419
+ MOI. Utilities. UniversalFallback (
1420
+ MOI. Utilities. Model {Float64} (),
1421
+ ),
1422
+ ),
1423
+ )
1411
1424
optimize! (model)
1412
- # This block could sit in MOI, but it's a public API at the JuMP
1413
- # level, so it can go here.
1414
- #
1415
- # We evaluate with a `view` because it's a common type for solvers
1416
- # like Ipopt to use.
1417
- d = NLPEvaluator (model)
1418
- MOI. features_available (d)
1419
- MOI. initialize (d, [:Grad , :Jac , :Hess ])
1420
- g = zeros (num_nonlinear_constraints (model))
1421
- v_g = view (g, 1 : length (g))
1422
- x = zeros (num_variables (model))
1423
- MOI. eval_objective (d, x)
1424
- MOI. eval_constraint (d, g, x)
1425
- MOI. eval_constraint (d, v_g, x)
1426
- MOI. eval_objective_gradient (d, g, x)
1427
- J = zeros (length (MOI. jacobian_structure (d)))
1428
- MOI. eval_constraint_jacobian (d, J, x)
1429
- v_J = view (J, 1 : length (J))
1430
- MOI. eval_constraint_jacobian (d, v_J, x)
1431
- H = zeros (length (MOI. hessian_lagrangian_structure (d)))
1432
- v_H = view (H, 1 : length (H))
1433
- MOI. eval_hessian_lagrangian (d, v_H, x, 1.0 , v_g)
1434
1425
end
1435
1426
end
1436
1427
end
1437
1428
1438
- include (" precompile.jl" )
1439
- _precompile_ ()
1440
-
1441
1429
end
0 commit comments