Skip to content

Commit e1e15b8

Browse files
committed
dom's comments
1 parent fafb32a commit e1e15b8

File tree

2 files changed

+39
-43
lines changed

2 files changed

+39
-43
lines changed

src/pyscipopt/scip.pxi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3929,7 +3929,7 @@ cdef class Model:
39293929
"""
39303930
PY_SCIP_CALL(SCIPaddVarLocks(self._scip, var.scip_var, nlocksdown, nlocksup))
39313931

3932-
def addVarLocksType(self, Variable var, PY_SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup):
3932+
def addVarLocksType(self, Variable var, int locktype, int nlocksdown, int nlocksup):
39333933
"""
39343934
adds given values to lock numbers of type locktype of variable for rounding
39353935

tests/test_conshdlr.py

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ class MyConshdlr(Conshdlr):
4242
def __init__(self, shouldtrans, shouldcopy):
4343
self.shouldtrans = shouldtrans
4444
self.shouldcopy = shouldcopy
45-
self.first_time = True
4645

4746
def createData(self, constraint, nvars, othername):
4847
print("Creating data for my constraint: %s"%constraint.name)
@@ -69,34 +68,29 @@ def conslock(self, constraint, locktype, nlockspos, nlocksneg):
6968
calls.add("conslock")
7069
assert id(constraint) in ids
7170

72-
if self.first_time:
73-
self.first_time = False
71+
try:
7472
var = self.model.getVars()[0]
75-
n_locks_up = var.getNLocksUp()
76-
n_locks_down = var.getNLocksDown()
77-
n_locks_up_model = var.getNLocksUpType(SCIP_LOCKTYPE.MODEL)
78-
n_locks_up_conflict = var.getNLocksUpType(SCIP_LOCKTYPE.CONFLICT)
79-
n_locks_down_model = var.getNLocksDownType(SCIP_LOCKTYPE.MODEL)
80-
n_locks_down_conflict = var.getNLocksDownType(SCIP_LOCKTYPE.CONFLICT)
81-
assert n_locks_down == 2
82-
assert n_locks_up == 2
83-
assert n_locks_up_model == 2
84-
assert n_locks_up_conflict == 0
85-
assert n_locks_down_model == 2
86-
assert n_locks_down_conflict == 0
87-
88-
self.model.addVarLocksType(var, SCIP_LOCKTYPE.CONFLICT, nlockspos, nlocksneg)
73+
except ReferenceError:
74+
return
75+
76+
n_locks_up = var.getNLocksUp()
77+
n_locks_down = var.getNLocksDown()
78+
n_locks_up_model = var.getNLocksUpType(SCIP_LOCKTYPE.MODEL)
79+
n_locks_up_conflict = var.getNLocksUpType(SCIP_LOCKTYPE.CONFLICT)
80+
n_locks_down_model = var.getNLocksDownType(SCIP_LOCKTYPE.MODEL)
81+
n_locks_down_conflict = var.getNLocksDownType(SCIP_LOCKTYPE.CONFLICT)
82+
83+
self.model.addVarLocksType(var, locktype, nlockspos, nlocksneg)
84+
if locktype == SCIP_LOCKTYPE.CONFLICT:
8985
assert var.getNLocksUpType(SCIP_LOCKTYPE.CONFLICT) != n_locks_up_conflict or var.getNLocksDownType(SCIP_LOCKTYPE.CONFLICT) != n_locks_down_conflict
90-
assert var.getNLocksUpType(SCIP_LOCKTYPE.MODEL) == n_locks_up_conflict and var.getNLocksDownType(SCIP_LOCKTYPE.MODEL) == n_locks_down_conflict
86+
assert var.getNLocksUpType(SCIP_LOCKTYPE.MODEL) == n_locks_up_model and var.getNLocksDownType(SCIP_LOCKTYPE.MODEL) == n_locks_down_model
87+
elif locktype == SCIP_LOCKTYPE.MODEL:
88+
assert var.getNLocksUpType(SCIP_LOCKTYPE.CONFLICT) == n_locks_up_conflict and var.getNLocksDownType(SCIP_LOCKTYPE.CONFLICT) == n_locks_down_conflict
89+
assert var.getNLocksUpType(SCIP_LOCKTYPE.MODEL) != n_locks_up_model or var.getNLocksDownType(SCIP_LOCKTYPE.MODEL) != n_locks_down_model
90+
else:
91+
raise ValueError("Unknown locktype")
9192

92-
if locktype == SCIP_LOCKTYPE.MODEL:
93-
self.model.addVarLocks(var, nlockspos, nlocksneg)
94-
assert var.getNLocksUpType(SCIP_LOCKTYPE.MODEL) != n_locks_up_model or var.getNLocksDownType(SCIP_LOCKTYPE.MODEL) != n_locks_down_model
95-
elif locktype == SCIP_LOCKTYPE.CONFLICT:
96-
self.model.addVarLocks(var, nlockspos, nlocksneg)
97-
assert var.getNLocksUpType(SCIP_LOCKTYPE.CONFLICT) != n_locks_up_conflict or var.getNLocksDownType(SCIP_LOCKTYPE.CONFLICT) != n_locks_down_conflict
98-
99-
assert var.getNLocksDown() != n_locks_down or var.getNLocksUp() != n_locks_up
93+
assert var.getNLocksDown() != n_locks_down or var.getNLocksUp() != n_locks_up
10094

10195
## callbacks ##
10296
def consfree(self):
@@ -217,43 +211,43 @@ def consgetnvars(self, constraint):
217211
def test_conshdlr():
218212
def create_model():
219213
# create solver instance
220-
s = Model()
214+
model = Model()
221215

222216
# add some variables
223-
x = s.addVar("x", obj = -1.0, vtype = "I", lb=-10)
224-
y = s.addVar("y", obj = 1.0, vtype = "I", lb=-1000)
225-
z = s.addVar("z", obj = 1.0, vtype = "I", lb=-1000)
217+
x = model.addVar("x", obj = -1.0, vtype = "I", lb=-10)
218+
y = model.addVar("y", obj = 1.0, vtype = "I", lb=-1000)
219+
z = model.addVar("z", obj = 1.0, vtype = "I", lb=-1000)
226220

227221
# add some constraint
228-
s.addCons(314*x + 867*y + 860*z == 363)
229-
s.addCons(87*x + 875*y - 695*z == 423)
222+
model.addCons(314*x + 867*y + 860*z == 363)
223+
model.addCons(87*x + 875*y - 695*z == 423)
230224

231225
# create conshdlr and include it to SCIP
232226
conshdlr = MyConshdlr(shouldtrans=True, shouldcopy=False)
233-
s.includeConshdlr(conshdlr, "PyCons", "custom constraint handler implemented in python",
227+
model.includeConshdlr(conshdlr, "PyCons", "custom constraint handler implemented in python",
234228
sepapriority = 1, enfopriority = 1, chckpriority = 1, sepafreq = 10, propfreq = 50,
235229
eagerfreq = 1, maxprerounds = -1, delaysepa = False, delayprop = False, needscons = True,
236230
presoltiming = SCIP_PRESOLTIMING.FAST, proptiming = SCIP_PROPTIMING.BEFORELP)
237231

238-
cons1 = s.createCons(conshdlr, "cons1name")
232+
cons1 = model.createCons(conshdlr, "cons1name")
239233
ids.append(id(cons1))
240-
cons2 = s.createCons(conshdlr, "cons2name")
234+
cons2 = model.createCons(conshdlr, "cons2name")
241235
ids.append(id(cons2))
242236
conshdlr.createData(cons1, 10, "cons1_anothername")
243237
conshdlr.createData(cons2, 12, "cons2_anothername")
244238

245239
# add these constraints
246-
s.addPyCons(cons1)
247-
s.addPyCons(cons2)
248-
return s
240+
model.addPyCons(cons1)
241+
model.addPyCons(cons2)
242+
return model
249243

250-
s = create_model()
244+
model = create_model()
251245

252246
# solve problem
253-
s.optimize()
247+
model.optimize()
254248

255249
# so that consfree gets called
256-
del s
250+
del model
257251

258252
# check callbacks got called
259253
assert "consenfolp" in calls
@@ -279,4 +273,6 @@ def create_model():
279273
assert "consdisable" in calls
280274
#assert "consdelvars" in calls
281275
#assert "consprint" in calls
282-
assert "consgetnvars" in calls
276+
assert "consgetnvars" in calls
277+
278+
test_conshdlr()

0 commit comments

Comments
 (0)