@@ -345,18 +345,40 @@ function parse_expression(
345
345
x:: MOI.ScalarQuadraticTerm ,
346
346
parent_index:: Int ,
347
347
)
348
- id_mul = data. operators. multivariate_operator_to_id[:* ]
349
- push! (expr. nodes, Node (NODE_CALL_MULTIVARIATE, id_mul, parent_index))
350
- mul_parent = length (expr. nodes)
351
- coef = x. coefficient
348
+ # There are four cases:
349
+ # (1): 1 * x * x --> ^(x, 2)
350
+ # (2): a * x * x --> *(a, ^(x, 2))
351
+ # (3): a * x * y --> *(a, x, y)
352
+ # (4): 1 * x * y --> *(x, y)
352
353
if x. variable_1 == x. variable_2
353
- coef /= 2
354
- end
355
- if ! isone (coef)
356
- parse_expression (data, expr, coef, mul_parent)
354
+ # Case (1): 1 * x * x --> ^(x, 2)
355
+ # Case (2): a * x * x --> *(a, ^(x, 2))
356
+ coef = x. coefficient / 2
357
+ parent = parent_index
358
+ if ! isone (coef)
359
+ id = data. operators. multivariate_operator_to_id[:* ]
360
+ push! (expr. nodes, Node (NODE_CALL_MULTIVARIATE, id, parent_index))
361
+ parent = length (expr. nodes)
362
+ parse_expression (data, expr, coef, parent)
363
+ parent
364
+ end
365
+ id = data. operators. multivariate_operator_to_id[:^ ]
366
+ push! (expr. nodes, Node (NODE_CALL_MULTIVARIATE, id, parent))
367
+ pow_parent = length (expr. nodes)
368
+ parse_expression (data, expr, x. variable_1, pow_parent)
369
+ parse_expression (data, expr, 2 , pow_parent)
370
+ else
371
+ # Case (3): a * x * y --> *(a, x, y)
372
+ # Case (4): 1 * x * y --> *(x, y)
373
+ id_mul = data. operators. multivariate_operator_to_id[:* ]
374
+ push! (expr. nodes, Node (NODE_CALL_MULTIVARIATE, id_mul, parent_index))
375
+ mul_parent = length (expr. nodes)
376
+ if ! isone (x. coefficient)
377
+ parse_expression (data, expr, x. coefficient, mul_parent)
378
+ end
379
+ parse_expression (data, expr, x. variable_1, mul_parent)
380
+ parse_expression (data, expr, x. variable_2, mul_parent)
357
381
end
358
- parse_expression (data, expr, x. variable_1, mul_parent)
359
- parse_expression (data, expr, x. variable_2, mul_parent)
360
382
return
361
383
end
362
384
0 commit comments