@@ -2397,19 +2397,25 @@ cdef void relayErrorMessage(void *messagehdlr, FILE *file, const char *msg) noex
23972397 fputs(msg, file )
23982398 fflush(file )
23992399
2400- cdef class VarArrayWrapper :
2400+ cdef class _VarArrayWrapper :
24012401 cdef SCIP_VAR** ptr
24022402 cdef int size
24032403
24042404 def __cinit__ (self , object vars ):
24052405 cdef int size = len (vars )
24062406 self .ptr = < SCIP_VAR** > malloc(size * sizeof(SCIP_VAR* ))
24072407
2408- for i, var in enumerate (vars ):
2409- if not isinstance (var, Variable):
2410- raise TypeError (" Expected Variable, got %s ." % type (var))
2408+ if size == 1 :
2409+ if not isinstance (vars , Variable):
2410+ raise TypeError (" Expected Variable, got %s ." % type (vars ))
2411+ else :
2412+ self .ptr[0 ] = (< Variable> vars ).scip_var
2413+ else :
2414+ for i, var in enumerate (vars ):
2415+ if not isinstance (var, Variable):
2416+ raise TypeError (" Expected Variable, got %s ." % type (var))
24112417
2412- self .ptr[i] = (< Variable> var).scip_var
2418+ self .ptr[i] = (< Variable> var).scip_var
24132419
24142420 def __dealloc__ (self ):
24152421 if self .ptr != NULL :
@@ -6345,17 +6351,6 @@ cdef class Model:
63456351
63466352 return pyCons
63476353
6348- def _convert_var_to_scipvar (self , vars , nvars ):
6349- cdef VarArrayWrapper wrapper = VarArrayWrapper(nvars)
6350-
6351- for i, var in enumerate (vars ):
6352- if not isinstance (var, Variable):
6353- raise TypeError (" Expected Variable, got %s ." % type (var))
6354-
6355- wrapper.ptr[i] = (< Variable> var).scip_var
6356-
6357- return wrapper
6358-
63596354 def addConsOr (self , vars , resvar , name = " " ,
63606355 initial = True , separate = True , enforce = True , check = True ,
63616356 propagate = True , local = False , modifiable = False , dynamic = False ,
@@ -6398,13 +6393,17 @@ cdef class Model:
63986393
63996394 """
64006395 cdef int nvars = len (vars )
6396+ cdef SCIP_VAR** _vars
64016397 cdef SCIP_VAR* _resvar
64026398 cdef SCIP_CONS* scip_cons
64036399 cdef int i
6400+ cdef _VarArrayWrapper wrapper
64046401
6405- _resvar = (< Variable> resvar).scip_var
6406- cdef VarArrayWrapper wrapper = VarArrayWrapper(vars )
6407- cdef SCIP_VAR** _vars = wrapper.ptr
6402+ wrapper = _VarArrayWrapper(resvar)
6403+ _resvar = wrapper.ptr
6404+
6405+ wrapper = _VarArrayWrapper(vars )
6406+ _vars = wrapper.ptr
64086407
64096408 if name == ' ' :
64106409 name = ' c' + str (SCIPgetNConss(self ._scip)+ 1 )
@@ -8271,9 +8270,10 @@ cdef class Model:
82718270 cdef SCIP_HEUR* _heur
82728271 cdef SCIP_Bool success
82738272 cdef int i
8274-
8275- for i , var in enumerate(sub_model.getVars()):
8276- vars [i] = (< Variable> var).scip_var
8273+ cdef _VarArrayWrapper wrapper
8274+
8275+ wrapper = _VarArrayWrapper(sub_model.getVars())
8276+ vars = wrapper.ptr
82778277
82788278 name = str_conversion(heur.name)
82798279 _heur = SCIPfindHeur(self ._scip, name)
0 commit comments