@@ -257,11 +257,34 @@ function _expr_to_constraint(expr::Expr)
257
257
end
258
258
end
259
259
260
- function _to_expr (
260
+ """
261
+ convert_to_expr(
262
+ data::NonlinearData,
263
+ expr::NonlinearExpression;
264
+ moi_output_format::Bool,
265
+ )
266
+
267
+ Convert the [`NonlinearExpression`](@ref) `expr` into a Julia `Expr`.
268
+
269
+ If `moi_output_format = true`:
270
+ * subexpressions will be converted to Julia `Expr` and substituted into the
271
+ output expression.
272
+ * the current value of each parameter will be interpolated into the expression
273
+ * variables will be represented in the form `x[MOI.VariableIndex(i)]`
274
+
275
+ If `moi_output_format = false`:
276
+ * subexpressions will be represented by a [`ExpressionIndex`](@ref) object.
277
+ * parameters will be represented by a [`ParameterIndex`](@ref) object.
278
+ * variables will be represennted by an [`MOI.VariableIndex`](@ref) object.
279
+
280
+ !!! warning
281
+ To use `moi_output_format = true`, you must have first called
282
+ [`MOI.initialize`](@ref) with `:ExprGraph` as a requested feature.
283
+ """
284
+ function convert_to_expr (
261
285
data:: NonlinearData ,
262
286
expr:: NonlinearExpression ;
263
- expand_subexpressions:: Bool = true ,
264
- use_x_ref:: Bool = false ,
287
+ moi_output_format:: Bool ,
265
288
)
266
289
tree = Any[]
267
290
for node in expr. nodes
@@ -274,16 +297,19 @@ function _to_expr(
274
297
elseif node. type == NODE_LOGIC
275
298
Expr (data. operators. logic_operators[node. index])
276
299
elseif node. type == NODE_MOI_VARIABLE
277
- x = MOI. VariableIndex (node. index)
278
- use_x_ref ? :(x[$ x]) : x
300
+ if moi_output_format
301
+ :(x[$ (MOI. VariableIndex (node. index))])
302
+ else
303
+ MOI. VariableIndex (node. index)
304
+ end
279
305
elseif node. type == NODE_PARAMETER
280
- if expand_subexpressions
306
+ if moi_output_format
281
307
data. parameters[node. index]
282
308
else
283
309
ParameterIndex (node. index)
284
310
end
285
311
elseif node. type == NODE_SUBEXPRESSION
286
- if expand_subexpressions
312
+ if moi_output_format
287
313
data. julia_expressions[node. index]
288
314
else
289
315
ExpressionIndex (node. index)
0 commit comments