44
55calls = []
66
7+
78class MyEvent (Eventhdlr ):
89
910 def eventinit (self ):
1011 calls .append ('eventinit' )
11- self .model .catchEvent (self .event_type , self )
12+
13+ self ._tracked_vars = []
14+ self ._tracked_rows = []
15+ if self .event_type & SCIP_EVENTTYPE .VARCHANGED :
16+ vars = self .model .getVars (transformed = True )
17+ if not vars :
18+ vars = [self .model .getTransformedVar (var ) for var in self .model .getVars ()]
19+ for var in vars :
20+ self .model .catchVarEvent (var , self .event_type , self )
21+ self ._tracked_vars .append (var )
22+ elif self .event_type & SCIP_EVENTTYPE .ROWCHANGED :
23+ try :
24+ if self .model .getNLPRows () == 0 :
25+ return
26+ rows = self .model .getLPRowsData ()
27+ except Exception :
28+ return
29+ for row in rows :
30+ self .model .catchRowEvent (row , self .event_type , self )
31+ self ._tracked_rows .append (row )
32+ else :
33+ self .model .catchEvent (self .event_type , self )
1234
1335 def eventexit (self ):
1436 # PR #828 fixes an error here, but the underlying cause might not be solved (self.model being deleted before dropEvent is called)
15- self .model .dropEvent (self .event_type , self )
37+ if self .event_type & SCIP_EVENTTYPE .VARCHANGED :
38+ for var in self ._tracked_vars :
39+ try :
40+ self .model .dropVarEvent (var , self .event_type , self )
41+ except ReferenceError :
42+ pass
43+ elif self .event_type & SCIP_EVENTTYPE .ROWCHANGED :
44+ for row in self ._tracked_rows :
45+ try :
46+ self .model .dropRowEvent (row , self .event_type , self )
47+ except ReferenceError :
48+ pass
49+ else :
50+ self .model .dropEvent (self .event_type , self )
1651
1752 def eventexec (self , event ):
1853 assert str (event ) == event .getName ()
@@ -32,19 +67,19 @@ def eventexec(self, event):
3267 elif self .event_type == SCIP_EVENTTYPE .BOUNDRELAXED :
3368 assert event .getType () in [SCIP_EVENTTYPE .LBRELAXED , SCIP_EVENTTYPE .UBRELAXED ]
3469 elif self .event_type == SCIP_EVENTTYPE .BOUNDCHANGED :
35- assert event .getType () in [ SCIP_EVENTTYPE .LBCHANGED , SCIP_EVENTTYPE . UBCHANGED ]
70+ assert event .getType () & SCIP_EVENTTYPE .BOUNDCHANGED
3671 elif self .event_type == SCIP_EVENTTYPE .GHOLECHANGED :
3772 assert event .getType () in [SCIP_EVENTTYPE .GHOLEADDED , SCIP_EVENTTYPE .GHOLEREMOVED ]
3873 elif self .event_type == SCIP_EVENTTYPE .LHOLECHANGED :
3974 assert event .getType () in [SCIP_EVENTTYPE .LHOLEADDED , SCIP_EVENTTYPE .LHOLEREMOVED ]
4075 elif self .event_type == SCIP_EVENTTYPE .HOLECHANGED :
4176 assert event .getType () in [SCIP_EVENTTYPE .GHOLECHANGED , SCIP_EVENTTYPE .LHOLECHANGED ]
4277 elif self .event_type == SCIP_EVENTTYPE .DOMCHANGED :
43- assert event .getType () in [ SCIP_EVENTTYPE .BOUNDCHANGED , SCIP_EVENTTYPE . HOLECHANGED ]
78+ assert event .getType () & SCIP_EVENTTYPE .DOMCHANGED
4479 elif self .event_type == SCIP_EVENTTYPE .VARCHANGED :
45- assert event .getType () in [ SCIP_EVENTTYPE .VARFIXED , SCIP_EVENTTYPE . VARUNLOCKED , SCIP_EVENTTYPE . OBJCHANGED , SCIP_EVENTTYPE . GBDCHANGED , SCIP_EVENTTYPE . DOMCHANGED , SCIP_EVENTTYPE . IMPLADDED , SCIP_EVENTTYPE . VARDELETED , SCIP_EVENTTYPE . TYPECHANGED ]
80+ assert event .getType () & SCIP_EVENTTYPE .VARCHANGED
4681 elif self .event_type == SCIP_EVENTTYPE .VAREVENT :
47- assert event .getType () in [ SCIP_EVENTTYPE .VARADDED , SCIP_EVENTTYPE . VARCHANGED , SCIP_EVENTTYPE . TYPECHANGED ]
82+ assert event .getType () & SCIP_EVENTTYPE .VAREVENT
4883 elif self .event_type == SCIP_EVENTTYPE .NODESOLVED :
4984 assert event .getType () in [SCIP_EVENTTYPE .NODEFEASIBLE , SCIP_EVENTTYPE .NODEINFEASIBLE , SCIP_EVENTTYPE .NODEBRANCHED ]
5085 elif self .event_type == SCIP_EVENTTYPE .NODEEVENT :
@@ -54,9 +89,9 @@ def eventexec(self, event):
5489 elif self .event_type == SCIP_EVENTTYPE .SOLFOUND :
5590 assert event .getType () in [SCIP_EVENTTYPE .POORSOLFOUND , SCIP_EVENTTYPE .BESTSOLFOUND ]
5691 elif self .event_type == SCIP_EVENTTYPE .ROWCHANGED :
57- assert event .getType () in [ SCIP_EVENTTYPE .ROWCOEFCHANGED , SCIP_EVENTTYPE . ROWCONSTCHANGED , SCIP_EVENTTYPE . ROWSIDECHANGED ]
92+ assert event .getType () & SCIP_EVENTTYPE .ROWCHANGED
5893 elif self .event_type == SCIP_EVENTTYPE .ROWEVENT :
59- assert event .getType () in [ SCIP_EVENTTYPE .ROWADDEDSEPA , SCIP_EVENTTYPE . ROWDELETEDSEPA , SCIP_EVENTTYPE . ROWADDEDLP , SCIP_EVENTTYPE . ROWDELETEDLP , SCIP_EVENTTYPE . ROWCHANGED ]
94+ assert event .getType () & SCIP_EVENTTYPE .ROWEVENT
6095 else :
6196 assert event .getType () == self .event_type
6297
0 commit comments