def __bool__(self): """Coerce the value to a bool Numeric values can be coerced to bool only if the value / expression is constant. Fixed (but non-constant) or variable values will raise an exception. Raises: PyomoException """ # Note that we want to implement __bool__, as scalar numeric # components (e.g., Param, Var) implement __len__ (since they # are implicit containers), and Python falls back on __len__ if # __bool__ is not defined. if self.is_constant(): return bool(self()) raise PyomoException(""" Cannot convert non-constant Pyomo numeric value (%s) to bool. This error is usually caused by using a Var, unit, or mutable Param in a Boolean context such as an "if" statement. For example, >>> m.x = Var() >>> if not m.x: ... pass would cause this exception.""".strip() % (self, ))
def solve(self, model, timer: HierarchicalTimer = None): avail = self.available() if not avail: raise PyomoException( f'Solver {self.__class__} is not available ({avail}).') if self._last_results_object is not None: self._last_results_object.solution_loader.invalidate() if timer is None: timer = HierarchicalTimer() try: TempfileManager.push() if self.config.filename is None: self._filename = TempfileManager.create_tempfile() else: self._filename = self.config.filename TempfileManager.add_tempfile(self._filename + '.lp', exists=False) TempfileManager.add_tempfile(self._filename + '.log', exists=False) timer.start('write lp file') self._writer.write(model, self._filename + '.lp', timer=timer) timer.stop('write lp file') res = self._apply_solver(timer) self._last_results_object = res if self.config.report_timing: logger.info('\n' + str(timer)) return res finally: # finally, clean any temporary files registered with the # temp file manager, created/populated *directly* by this # plugin. TempfileManager.pop(remove=not self.config.keepfiles) if not self.config.keepfiles: self._filename = None
def __bool__(self): if not self.is_constant(): raise PyomoException('Cannot convert non-constant expression ' 'to bool. This error is usually caused by ' 'using an expression in a boolean context ' 'such as an if statement. For example, \n' ' m.x = Var()\n' ' if m.x <= 0:\n' ' ...\n' 'would cause this exception.') return bool(self())
def __bool__(self): if self.is_constant(): return bool(self()) raise PyomoException(""" Cannot convert non-constant Pyomo expression (%s) to bool. This error is usually caused by using a Var, unit, or mutable Param in a Boolean context such as an "if" statement, or when checking container membership or equality. For example, >>> m.x = Var() >>> if m.x >= 1: ... pass and >>> m.y = Var() >>> if m.y in [m.x, m.y]: ... pass would both cause this exception.""".strip() % (self, ))