X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/blobdiff_plain/f3795845e035704393ac7c2efdeb061df71a9b67..675e4575c2fe1315d30b845f9ab6168da30085e3:/linpy/polyhedra.py diff --git a/linpy/polyhedra.py b/linpy/polyhedra.py index 543e673..9fdf6e7 100644 --- a/linpy/polyhedra.py +++ b/linpy/polyhedra.py @@ -87,22 +87,20 @@ class Polyhedron(Domain): if inequalities is not None: raise TypeError('too many arguments') return equalities.aspolyhedron() - if equalities is None: - equalities = [] - else: - for i, equality in enumerate(equalities): + sc_equalities = [] + if equalities is not None: + for equality in equalities: if not isinstance(equality, LinExpr): raise TypeError('equalities must be linear expressions') - equalities[i] = equality.scaleint() - if inequalities is None: - inequalities = [] - else: - for i, inequality in enumerate(inequalities): + sc_equalities.append(equality.scaleint()) + sc_inequalities = [] + if inequalities is not None: + for inequality in inequalities: if not isinstance(inequality, LinExpr): raise TypeError('inequalities must be linear expressions') - inequalities[i] = inequality.scaleint() - symbols = cls._xsymbols(equalities + inequalities) - islbset = cls._toislbasicset(equalities, inequalities, symbols) + sc_inequalities.append(inequality.scaleint()) + symbols = cls._xsymbols(sc_equalities + sc_inequalities) + islbset = cls._toislbasicset(sc_equalities, sc_inequalities, symbols) return cls._fromislbasicset(islbset, symbols) @property @@ -175,6 +173,9 @@ class Polyhedron(Domain): def widen(self, other): """ Compute the standard widening of two polyhedra, à la Halbwachs. + + In its current implementation, this method is slow and should not be + used on large polyhedra. """ if not isinstance(other, Polyhedron): raise ValueError('argument must be a Polyhedron instance')