Skip to content

Commit b822dbc

Browse files
committed
Refactor event handling in _TraceRun class to improve clarity and maintainability. Introduced a set to track caught events, ensuring proper cleanup during event execution. Updated event initialization and execution methods for consistency.
1 parent f646e51 commit b822dbc

1 file changed

Lines changed: 13 additions & 11 deletions

File tree

src/pyscipopt/recipes/realtime_trace_jsonl.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,27 @@ def __init__(self, model, path=None):
3131
self.path = path
3232
self._fh = None
3333
self._handler = None
34-
34+
self._caught_events = set()
3535
self._last_snapshot = {}
3636

3737
def __enter__(self):
3838
if not hasattr(self.model, "data") or self.model.data is None:
3939
self.model.data = {}
40-
self.model.data.setdefault("trace", [])
40+
self.model.data["trace"] = []
4141

4242
if self.path is not None:
4343
self._fh = open(self.path, "w")
4444

4545
class _TraceEventhdlr(Eventhdlr):
46-
def eventinit(s):
47-
self.model.catchEvent(SCIP_EVENTTYPE.BESTSOLFOUND, s)
48-
self.model.catchEvent(SCIP_EVENTTYPE.DUALBOUNDIMPROVED, s)
46+
def eventinit(hdlr):
47+
for et in (
48+
SCIP_EVENTTYPE.BESTSOLFOUND,
49+
SCIP_EVENTTYPE.DUALBOUNDIMPROVED,
50+
):
51+
self.model.catchEvent(et, hdlr)
52+
self._caught_events.add(et)
4953

50-
def eventexec(s, event):
54+
def eventexec(hdlr, event):
5155
et = event.getType()
5256
if et == SCIP_EVENTTYPE.BESTSOLFOUND:
5357
snapshot = self._snapshot_now()
@@ -91,14 +95,12 @@ def __exit__(self, exc_type, exc, tb):
9195
self._fh = None
9296

9397
if self._handler is not None:
94-
for et in (
95-
SCIP_EVENTTYPE.BESTSOLFOUND,
96-
SCIP_EVENTTYPE.DUALBOUNDIMPROVED,
97-
):
98+
for et in self._caught_events:
9899
try:
99100
self.model.dropEvent(et, self._handler)
100101
except Exception:
101-
pass
102+
pass # Best-effort cleanup; continue dropping remaining events
103+
self._caught_events.clear()
102104
self._handler = None
103105

104106
return False

0 commit comments

Comments
 (0)