@@ -336,3 +336,35 @@ def test_performance():
336336 orig_time = end_orig - start_orig
337337
338338 assert m .isGT (orig_time , matrix_time )
339+
340+
341+ def test_matrix_cons_indicator ():
342+ m = Model ()
343+ x = m .addMatrixVar ((2 , 3 ), vtype = "I" , ub = 10 )
344+ y = m .addMatrixVar (x .shape , vtype = "I" , ub = 10 )
345+ is_equal = m .addMatrixVar ((1 , 2 ), vtype = "B" )
346+
347+ # shape of cons is not equal to shape of is_equal
348+ with pytest .raises (Exception ):
349+ m .addMatrixConsIndicator (x >= y , is_equal )
350+
351+ for i in range (2 ):
352+ # test ndim=1 binvar
353+ m .addMatrixConsIndicator (x [i ] >= y [i ], is_equal [0 , i ])
354+ m .addMatrixConsIndicator (x [i ] <= y [i ], is_equal [0 , i ])
355+
356+ # test ndim=1 binvar
357+ m .addMatrixConsIndicator (x [i ] >= 5 , is_equal [0 , i ])
358+ m .addMatrixConsIndicator (y [i ] <= 5 , is_equal [0 , i ])
359+
360+ for i in range (3 ):
361+ # test ndim=2 binvar
362+ m .addMatrixConsIndicator (x [:, i ] >= y [:, i ], is_equal [0 ])
363+ m .addMatrixConsIndicator (x [:, i ] <= y [:, i ], is_equal [0 ])
364+
365+ m .setObjective (is_equal .sum (), "maximize" )
366+ m .optimize ()
367+
368+ assert m .getVal (is_equal ).sum () == 2
369+ assert (m .getVal (x ) == m .getVal (y )).all ().all ()
370+ assert (m .getVal (x ) == np .array ([[5 , 5 , 5 ], [5 , 5 , 5 ]])).all ().all ()
0 commit comments