python-sat 1.9.dev14__tar.gz → 1.9.dev15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_sat-1.9.dev14/python_sat.egg-info → python_sat-1.9.dev15}/PKG-INFO +1 -1
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/hitman.py +2 -7
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/lsu.py +1 -1
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/__init__.py +1 -1
- {python_sat-1.9.dev14 → python_sat-1.9.dev15/python_sat.egg-info}/PKG-INFO +1 -1
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/python_sat.egg-info/SOURCES.txt +2 -0
- python_sat-1.9.dev15/tests/test_hitman.py +31 -0
- python_sat-1.9.dev15/tests/test_lsu.py +15 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/LICENSE.txt +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/MANIFEST.in +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/README.rst +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/allies/__init__.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/allies/approxmc.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/allies/unigen.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/bitwise.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/card.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/clset.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/common.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/itot.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/ladder.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/mto.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/pairwise.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/ptypes.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/pycard.cc +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/seqcounter.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/sortcard.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/cardenc/utils.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/__init__.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/bbscan.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/bica.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/fm.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/genhard.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/lbx.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/mcsls.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/models.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/musx.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/optux.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/primer.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/rc2.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/examples/usage.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pf_parse.cc +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pf_plus.cc +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pf_plus.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pf_py.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pf_scan.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pf_weight.cc +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pf_weight.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pyformula.cc +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/formula/pyformula.hh +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/_fileio.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/_utils.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/card.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/engines.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/formula.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/integer.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/pb.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/process.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/pysat/solvers.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/python_sat.egg-info/dependency_links.txt +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/python_sat.egg-info/requires.txt +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/python_sat.egg-info/top_level.txt +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/requirements.txt +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/setup.cfg +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/setup.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/cadical103.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/cadical153.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/cadical195.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/cadical300.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/glucose30.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/glucose41.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/glucose421.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/lingeling.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/maplechrono.zip +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/maplecm.zip +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/maplesat.zip +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/mergesat3.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/minicard.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/minisat22.tar.gz +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/minisatgh.zip +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/cadical103.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/cadical153.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/cadical195.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/cadical300.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/glucose30.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/glucose41.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/glucose421.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/gluecard30.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/gluecard41.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/kissat404.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/lingeling.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/maplechrono.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/maplecm.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/maplesat.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/mergesat3.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/minicard.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/minisat22.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/minisatep.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/patches/minisatgh.patch +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/prepare.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/solvers/pysolvers.cc +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_accum_stats.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_atmost.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_atmost1.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_atmostk.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_boolengine.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_clausification.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_cnf.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_empty_extclause.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_encode_pb_conditional.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_equals1.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_formula_parsing.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_formula_unique.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_idpool.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_integer.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_oom.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_process.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_propagate.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_unique_model.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_unique_mus.py +0 -0
- {python_sat-1.9.dev14 → python_sat-1.9.dev15}/tests/test_warmstart.py +0 -0
|
@@ -476,24 +476,19 @@ class Hitman(object):
|
|
|
476
476
|
|
|
477
477
|
if no_obj is False:
|
|
478
478
|
# a soft clause should be added for each new object
|
|
479
|
-
new_obj =
|
|
479
|
+
new_obj = sorted(set(abs(vid) for vid in clause if abs(vid) not in self.oracle.vmap.e2i))
|
|
480
480
|
else:
|
|
481
481
|
# this is a native AtMostK constraint
|
|
482
482
|
clause = [list(map(lambda a: self.idpool.id(a.obj) * (2 * a.sign - 1), clause[0])), clause[1]]
|
|
483
483
|
|
|
484
484
|
if no_obj is False:
|
|
485
485
|
# a soft clause should be added for each new object
|
|
486
|
-
new_obj =
|
|
487
|
-
|
|
488
|
-
# there may be duplicate literals if the constraint is weighted
|
|
489
|
-
new_obj = list(set(new_obj))
|
|
486
|
+
new_obj = sorted(set(abs(vid) for vid in clause[0] if abs(vid) not in self.oracle.vmap.e2i))
|
|
490
487
|
|
|
491
488
|
# adding the hard clause
|
|
492
489
|
self.oracle.add_clause(clause)
|
|
493
490
|
|
|
494
491
|
if no_obj is False:
|
|
495
|
-
# some of the literals may also have the opposite polarity
|
|
496
|
-
new_obj = [l if l in self.idpool.obj2id else -l for l in new_obj]
|
|
497
492
|
|
|
498
493
|
if self.htype != 'sat':
|
|
499
494
|
# new soft clauses
|
|
@@ -235,7 +235,7 @@ class LSU:
|
|
|
235
235
|
self._assert_lt(self.cost)
|
|
236
236
|
|
|
237
237
|
if is_sat:
|
|
238
|
-
self.model = filter(lambda l: abs(l) <= self.formula.nv, self.model)
|
|
238
|
+
self.model = list(filter(lambda l: abs(l) <= self.formula.nv, self.model))
|
|
239
239
|
if self.verbose:
|
|
240
240
|
if self.found_optimum():
|
|
241
241
|
print('s OPTIMUM FOUND')
|
|
@@ -107,8 +107,10 @@ tests/test_encode_pb_conditional.py
|
|
|
107
107
|
tests/test_equals1.py
|
|
108
108
|
tests/test_formula_parsing.py
|
|
109
109
|
tests/test_formula_unique.py
|
|
110
|
+
tests/test_hitman.py
|
|
110
111
|
tests/test_idpool.py
|
|
111
112
|
tests/test_integer.py
|
|
113
|
+
tests/test_lsu.py
|
|
112
114
|
tests/test_oom.py
|
|
113
115
|
tests/test_process.py
|
|
114
116
|
tests/test_propagate.py
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from pysat.examples.hitman import Atom, Hitman
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_add_hard_registers_new_object_with_mcs_enumerators():
|
|
5
|
+
for htype in ('lbx', 'mcsls'):
|
|
6
|
+
with Hitman(bootstrap_with=[['first']], htype=htype) as hitman:
|
|
7
|
+
hitman.add_hard([Atom('second')])
|
|
8
|
+
|
|
9
|
+
assert sorted(hitman.get()) == ['first', 'second']
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_add_hard_registers_weighted_new_objects_with_rc2():
|
|
13
|
+
weights = {'base': 1, 'expensive': 10, 'cheap': 1}
|
|
14
|
+
|
|
15
|
+
with Hitman(bootstrap_with=[['base']], weights=weights,
|
|
16
|
+
htype='sorted') as hitman:
|
|
17
|
+
hitman.add_hard([Atom('expensive'), Atom('cheap')], weights=weights)
|
|
18
|
+
|
|
19
|
+
assert sorted(hitman.get()) == ['base', 'cheap']
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_add_hard_registers_new_objects_with_sat():
|
|
23
|
+
with Hitman(bootstrap_with=[['base']], htype='sat',
|
|
24
|
+
solver='mgh') as hitman:
|
|
25
|
+
hitman.add_hard([Atom('left'), Atom('right')])
|
|
26
|
+
|
|
27
|
+
result = hitman.get()
|
|
28
|
+
|
|
29
|
+
assert 'base' in result
|
|
30
|
+
assert len(set(result) & {'left', 'right'}) == 1
|
|
31
|
+
assert set(hitman.oracle.vmap.e2i) == {1, 2, 3}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from pysat.examples.lsu import LSU
|
|
2
|
+
from pysat.formula import WCNF
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def test_get_model_returns_reusable_list():
|
|
6
|
+
formula = WCNF()
|
|
7
|
+
formula.append([1], weight=1)
|
|
8
|
+
|
|
9
|
+
with LSU(formula, solver='g3') as lsu:
|
|
10
|
+
assert lsu.solve() is True
|
|
11
|
+
|
|
12
|
+
model = lsu.get_model()
|
|
13
|
+
|
|
14
|
+
assert isinstance(model, list)
|
|
15
|
+
assert lsu.get_model() == model
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|