def set_universe(universe): if len(universe) != len(set(universe)): raise ValueError('duplicated elements found') _graphillion._num_elems(0) setset._obj2int = {} setset._int2obj = [None] for e in universe: setset._add_elem(e) setset._check_universe()
def _check_universe(): assert len(setset._int2obj) == _graphillion._num_elems() + 1 for e, i in viewitems(setset._obj2int): assert e == setset._int2obj[i] for i in range(1, len(setset._int2obj)): e = setset._int2obj[i] assert i == setset._obj2int[e]
def probability(self, probabilities): ps = [-1] * (_graphillion._num_elems() + 1) for e, p in viewitems(probabilities): i = setset._obj2int[e] ps[i] = p assert len([p for p in ps[1:] if p < 0 or 1 < p]) == 0 return _graphillion.setset.probability(self, ps)
def _optimize(self, weights, default, generator): ws = [default] * (_graphillion._num_elems() + 1) if weights: for e, w in viewitems(weights): i = setset._obj2int[e] ws[i] = w i = generator(self, ws) while (True): yield setset._conv_ret(next(i))
def _optimize(self, weights, default, generator): ws = [default] * (_graphillion._num_elems() + 1) if weights: for e, w in weights.iteritems(): i = setset._obj2int[e] ws[i] = w i = generator(self, ws) while (True): yield setset._conv_ret(i.next())
def _add_elem(elem): assert elem not in setset._obj2int if len(setset._obj2int) >= _graphillion._elem_limit(): m = 'too many elements are set, which must be %d or less' % _graphillion._elem_limit() raise RuntimeError(m) i = len(setset._int2obj) _graphillion.setset([set([i])]) setset._obj2int[elem] = i setset._int2obj.append(elem) assert len(setset._int2obj) == _graphillion._num_elems() + 1 assert setset._int2obj[i] == elem assert setset._obj2int[elem] == i
def _optimize(self, weights, default, generator): ws = [default] * (_graphillion._num_elems() + 1) if weights: for e, w in viewitems(weights): i = setset._obj2int[e] ws[i] = w i = generator(self, ws) while (True): try: yield setset._conv_ret(next(i)) except StopIteration: return
def _add_elem(elem): assert elem not in setset._obj2int if len(setset._obj2int) >= _graphillion._elem_limit(): m = 'not more than %d elements used' % _graphillion._elem_limit() raise RuntimeError, m i = len(setset._int2obj) _graphillion.setset([set([i])]) setset._obj2int[elem] = i setset._int2obj.append(elem) assert len(setset._int2obj) == _graphillion._num_elems() + 1 assert setset._int2obj[i] == elem assert setset._obj2int[elem] == i
def _repr(self, outer_braces=('[', ']'), inner_braces=('[', ']')): n = _graphillion._num_elems() w = {} for i in range(1, n + 1): e = setset._int2obj[i] w[e] = 1 + float(i) / n**2 ret = outer_braces[0] maxchar = 80 no_comma = True for s in setset.min_iter(self, w): if no_comma: no_comma = False else: ret += ', ' ret += inner_braces[0] + str(sorted(list(s)))[1:-1] + inner_braces[1] if len(ret) > maxchar - 2: break if len(ret) <= maxchar - 2: return ret + outer_braces[1] else: return ret[:(maxchar - 4)] + ' ...'