1+ from pyscipopt import Model , SCIP_EVENTTYPE
2+ from pyscipopt .recipes .getLocalConss import *
3+ from helpers .utils import random_mip_1
4+
5+ def localconss (model , event ):
6+ local_conss = getLocalConss (model )
7+ assert len (local_conss [1 ]) == getNLocalConss (model )[1 ]
8+ assert len (local_conss [0 ]) == len (model .getConss ())
9+ assert local_conss [0 ] == model .getConss ()
10+
11+ vars = model .getVars ()
12+ if model .getCurrentNode ().getNumber () == 1 :
13+ pass
14+
15+ elif model .getCurrentNode ().getNumber () == 2 :
16+ model .data ["local_cons1" ] = model .addCons (vars [0 ] + vars [1 ] <= 1 , name = "c1" , local = True )
17+ assert getNLocalConss (model )[1 ] == 1
18+ assert getLocalConss (model )[1 ][0 ] == model .data ["local_cons1" ]
19+
20+ elif model .getCurrentNode ().getNumber () == 4 :
21+ local_conss = getLocalConss (model )
22+ model .data ["local_cons2" ] = model .addCons (vars [1 ] + vars [2 ] <= 1 , name = "c2" , local = True )
23+ model .data ["local_cons3" ] = model .addCons (vars [2 ] + vars [3 ] <= 1 , name = "c3" , local = True )
24+ assert getNLocalConss (model )[1 ] == 3
25+ assert getLocalConss (model )[1 ][0 ] == model .data ["local_cons1" ]
26+ assert getLocalConss (model )[1 ][1 ] == model .data ["local_cons2" ]
27+ assert getLocalConss (model )[1 ][2 ] == model .data ["local_cons3" ]
28+
29+ elif model .getCurrentNode ().getParent ().getNumber () not in [2 ,4 ]:
30+ assert getLocalConss (model ) == [model .getConss (), []]
31+
32+ def test_getLocalConss ():
33+ model = random_mip_1 (node_lim = 4 )
34+ model .data = {}
35+
36+ model .attachEventHandlerCallback (localconss , [SCIP_EVENTTYPE .NODEFOCUSED ])
37+ model .optimize ()
38+ assert len (model .data ) == 3
0 commit comments