PySMT 0.9.7.dev337__py2.py3-none-any.whl → 0.9.7.dev346__py2.py3-none-any.whl

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.
pysmt/__init__.py CHANGED
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- VERSION = (0, 9, 7, "dev", 337)
19
+ VERSION = (0, 9, 7, "dev", 346)
20
20
 
21
21
  # Try to provide human-readable version of latest commit for dev versions
22
22
  # E.g. v0.5.1-4-g49a49f2-wip
pysmt/cmd/install.py CHANGED
@@ -32,8 +32,8 @@ from pysmt import __version__ as pysmt_version
32
32
  Installer = namedtuple("Installer",
33
33
  ["InstallerClass", "version", "extra_params"])
34
34
  INSTALLERS = [
35
- Installer(MSatInstaller, "5.6.10", {}),
36
- Installer(CVC5Installer, "1.1.2", {}),
35
+ Installer(MSatInstaller, "5.6.16", {}),
36
+ Installer(CVC5Installer, "1.3.3", {}),
37
37
  Installer(CVC4Installer, "1.7-prerelease",
38
38
  {"git_version" : "391ab9df6c3fd9a3771864900c1718534c1e4666"}),
39
39
  Installer(Z3Installer, "4.15.0", {}),
@@ -231,6 +231,16 @@ class SolverInstaller(object):
231
231
  stderr.close()
232
232
 
233
233
 
234
+ @staticmethod
235
+ def replace_in_file(file_path, old_str, new_str):
236
+ """Replaces all occurrences of old_str with new_str in the given file"""
237
+ with open(file_path, "r") as f:
238
+ content = f.read()
239
+ content = content.replace(old_str, new_str)
240
+ with open(file_path, "w") as f:
241
+ f.write(content)
242
+
243
+
234
244
  @staticmethod
235
245
  def clean_dir(path):
236
246
  """Empties a (possibly non-existent) directory"""
@@ -34,14 +34,14 @@ class MSatInstaller(SolverInstaller):
34
34
  "ext": "tar.gz"
35
35
  }
36
36
  if self.os_name == "windows":
37
+ archive_name_template = "mathsat-{version}-{os}.{ext}"
37
38
  format["ext"] = "zip"
38
- format["arch"] = "msvc"
39
- format["os"] = "win64" if self.architecture == "x86_64" else "win32"
39
+ format["os"] = "win64"
40
40
  elif self.os_name == "darwin":
41
41
  # Since version 5.6.7 the architecture is not included in the
42
42
  # pkg name for the OSX release as it is considered a "univeral binary"
43
43
  archive_name_template = "mathsat-{version}-{os}.{ext}"
44
- format["os"] = "osx"
44
+ format["os"] = "macos"
45
45
 
46
46
  archive_name = archive_name_template.format(**format)
47
47
 
@@ -61,19 +61,25 @@ class MSatInstaller(SolverInstaller):
61
61
  if self.os_name == "windows":
62
62
  libdir = os.path.join(self.python_bindings_dir, "../lib")
63
63
  incdir = os.path.join(self.python_bindings_dir, "../include")
64
- gmp_h_url = "https://github.com/mikand/tamer-windows-deps/raw/master/gmp/include/gmp.h"
65
- mpir_dll_url = "https://github.com/Legrandin/mpir-windows-builds/blob/master/mpir-2.6.0_VS2015_%s/mpir.dll?raw=true" % self.bits
66
- mpir_lib_url = "https://github.com/Legrandin/mpir-windows-builds/blob/master/mpir-2.6.0_VS2015_%s/mpir.lib?raw=true" % self.bits
67
- setup_py_win_url = "https://github.com/pysmt/solvers_patches/raw/master/mathsat/setup-win.py"
68
-
69
- SolverInstaller.do_download(gmp_h_url, os.path.join(incdir, "gmp.h"))
70
- SolverInstaller.do_download(mpir_dll_url, os.path.join(libdir, "mpir.dll"))
71
- SolverInstaller.do_download(mpir_lib_url, os.path.join(libdir, "mpir.lib"))
72
64
 
73
- # Overwrite setup.py with the patched version
74
- setup_py = os.path.join(self.python_bindings_dir, "setup.py")
75
- SolverInstaller.mv(setup_py, setup_py + ".original")
76
- SolverInstaller.do_download(setup_py_win_url, setup_py)
65
+ gmp_win_url = "https://github.com/apotocki/gmp-win/releases/download/6.3.0/gmp-6.3.0.zip"
66
+ gmp_archive = os.path.join(self.base_dir, "gmp-6.3.0.zip")
67
+ gmp_dir = os.path.join(self.base_dir, "gmp-6.3.0")
68
+ SolverInstaller.clean_dir(gmp_dir)
69
+ SolverInstaller.do_download(url=gmp_win_url, file_name=gmp_archive)
70
+ SolverInstaller.unzip(gmp_archive, gmp_dir)
71
+
72
+ gmp_include_dir = os.path.join(self.base_dir, "gmp-6.3.0", "include")
73
+ gmp_lib_dir = os.path.join(self.base_dir, "gmp-6.3.0", "lib")
74
+ # gmp_dll_dir = os.path.join(self.base_dir, "gmp-6.3.0", "bin")
75
+ SolverInstaller.mv(os.path.join(gmp_include_dir, "gmp.h"), incdir)
76
+ SolverInstaller.mv(source=os.path.join(gmp_lib_dir, "gmpdll.lib"),
77
+ dest=os.path.join(libdir, "gmp.lib"))
78
+
79
+ # The MathSAT setup.py expects to link against "mpir" on Windows,
80
+ # but we link against "gmp", so we need to patch the setup.py
81
+ setup_py_path = os.path.join(self.python_bindings_dir, "setup.py")
82
+ SolverInstaller.replace_in_file(setup_py_path, "mpir", "gmp")
77
83
 
78
84
  # Run setup.py to compile the bindings
79
85
  if self.os_name in {"windows", "darwin"}:
@@ -89,11 +95,11 @@ class MSatInstaller(SolverInstaller):
89
95
  pdir = self.python_bindings_dir
90
96
  bdir = os.path.join(pdir, "build")
91
97
  sodir = glob.glob(bdir + "/lib.*")[0]
92
- libdir = os.path.join(self.python_bindings_dir, "../lib")
98
+ libdir = os.path.join(self.python_bindings_dir, "../bin")
93
99
 
94
100
  # First, we need the SWIG-generated wrapper
95
101
  for f in os.listdir(sodir):
96
- if f.endswith(".so") or f.endswith(".pyd"):
102
+ if "_mathsat" in f:
97
103
  SolverInstaller.mv(os.path.join(sodir, f), self.bindings_dir)
98
104
  SolverInstaller.mv(os.path.join(pdir, "mathsat.py"), self.bindings_dir)
99
105
 
@@ -103,7 +109,7 @@ class MSatInstaller(SolverInstaller):
103
109
  if f.endswith(".so") or f.endswith(".dll") or f.endswith(".dylib"):
104
110
  SolverInstaller.mv(os.path.join(libdir, f), self.bindings_dir)
105
111
 
106
- # Fix issue in MathSAT 5.6.10 linking to incorrect directory on OSX
112
+ # Fix issue in MathSAT 5.6.10 linking to incorrect directory on MacOS
107
113
  if self.os_name == "darwin":
108
114
  soname = glob.glob(self.bindings_dir + "/_mathsat*.so")[0]
109
115
  old_path = "/Users/alb/src/release/build/libmathsat.dylib"
@@ -37,7 +37,7 @@ class OptiMSatInstaller(SolverInstaller):
37
37
  archive_name = "optimathsat-%s-%s-%s.%s" % (solver_version, os_name,
38
38
  arch, ext)
39
39
 
40
- native_link = "http://optimathsat.disi.unitn.it/releases/optimathsat-%s/{archive_name}" % solver_version
40
+ native_link = "https://optimathsat.disi.unitn.it/releases/optimathsat-%s/{archive_name}" % solver_version
41
41
 
42
42
  SolverInstaller.__init__(self, install_dir=install_dir,
43
43
  bindings_dir=bindings_dir,
@@ -11,9 +11,10 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- import sys, os
14
+ import os
15
15
  import json
16
16
  import codecs
17
+ import glob
17
18
 
18
19
  import urllib.request
19
20
 
@@ -59,10 +60,8 @@ class PicoSATInstaller(SolverInstaller):
59
60
  SolverInstaller.run_python("setup.py build", directory=self.extract_path)
60
61
 
61
62
  def move(self):
62
- libdir = "lib.%s-%s-%s" % (self.os_name, self.architecture,
63
- self.python_version)
64
63
  bdir = os.path.join(self.extract_path, "build")
65
- sodir = os.path.join(bdir, libdir)
64
+ sodir = glob.glob(bdir + "/lib.*")[0]
66
65
 
67
66
  for f in os.listdir(sodir):
68
67
  if f.endswith(".so"):
pysmt/solvers/cvcfive.py CHANGED
@@ -15,8 +15,6 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
  #
18
- from __future__ import absolute_import
19
-
20
18
  from pysmt.exceptions import SolverAPINotFound
21
19
 
22
20
  try:
@@ -32,13 +30,13 @@ from pysmt.logics import PYSMT_LOGICS, ARRAYS_CONST_LOGICS
32
30
  from pysmt.solvers.solver import Solver, Converter, SolverOptions
33
31
  from pysmt.exceptions import (SolverReturnedUnknownResultError,
34
32
  InternalSolverError,
35
- NonLinearError, PysmtValueError,
33
+ PysmtValueError,
36
34
  PysmtTypeError)
37
35
  from pysmt.walkers import DagWalker
38
36
  from pysmt.solvers.smtlib import SmtLibBasicSolver, SmtLibIgnoreMixin
39
37
  from pysmt.solvers.eager import EagerModel
40
38
  from pysmt.decorators import catch_conversion_error
41
- from pysmt.constants import Fraction, is_pysmt_integer, to_python_integer
39
+ from pysmt.constants import Fraction, is_pysmt_integer
42
40
 
43
41
 
44
42
  class CVC5Options(SolverOptions):
@@ -51,43 +49,43 @@ class CVC5Options(SolverOptions):
51
49
  raise PysmtValueError("'unsat_cores_mode' option not supported.")
52
50
 
53
51
  @staticmethod
54
- def _set_option(cvc5, name, value):
52
+ def _set_option(cvc5_solver, name, value):
55
53
  try:
56
- cvc5.setOption(name, value)
54
+ cvc5_solver.setOption(name, value)
57
55
  except:
58
56
  raise PysmtValueError("Error setting the option '%s=%s'" % (name,value))
59
57
 
60
58
  def __call__(self, solver):
61
59
  if solver.logic_name == "QF_SLIA":
62
- self._set_option(solver.cvc5,
60
+ self._set_option(solver.cvc5_solver,
63
61
  "strings-exp", "true")
64
62
 
65
- self._set_option(solver.cvc5,
63
+ self._set_option(solver.cvc5_solver,
66
64
  "produce-models", str(self.generate_models).lower())
67
- self._set_option(solver.cvc5,
65
+ self._set_option(solver.cvc5_solver,
68
66
  "incremental", str(self.incremental).lower())
69
67
  if self.random_seed is not None:
70
- self._set_option(solver.cvc5,
68
+ self._set_option(solver.cvc5_solver,
71
69
  "seed", str(self.random_seed))
72
70
 
73
- # self._set_option(solver.cvc5, "miplib-trick", "true")
74
- # self._set_option(solver.cvc5, "miplib-trick-subs", "4")
75
- # self._set_option(solver.cvc5, "use-approx", "true")
76
- # self._set_option(solver.cvc5, "lemmas-on-replay-failure", "true")
77
- # self._set_option(solver.cvc5, "replay-early-close-depth", "4")
78
- # self._set_option(solver.cvc5, "replay-lemma-reject-cut", "128")
79
- # self._set_option(solver.cvc5, "replay-reject-cut", "512")
80
- # self._set_option(solver.cvc5, "unconstrained-simp", "true")
81
- # self._set_option(solver.cvc5, "use-soi", "true")
82
- # self._set_option(solver.cvc5, "pb-rewrites", "true")
83
- self._set_option(solver.cvc5, "ite-simp", "true")
84
- self._set_option(solver.cvc5, "simp-ite-compress", "true")
71
+ # self._set_option(solver.cvc5_solver, "miplib-trick", "true")
72
+ # self._set_option(solver.cvc5_solver, "miplib-trick-subs", "4")
73
+ # self._set_option(solver.cvc5_solver, "use-approx", "true")
74
+ # self._set_option(solver.cvc5_solver, "lemmas-on-replay-failure", "true")
75
+ # self._set_option(solver.cvc5_solver, "replay-early-close-depth", "4")
76
+ # self._set_option(solver.cvc5_solver, "replay-lemma-reject-cut", "128")
77
+ # self._set_option(solver.cvc5_solver, "replay-reject-cut", "512")
78
+ # self._set_option(solver.cvc5_solver, "unconstrained-simp", "true")
79
+ # self._set_option(solver.cvc5_solver, "use-soi", "true")
80
+ # self._set_option(solver.cvc5_solver, "pb-rewrites", "true")
81
+ # self._set_option(solver.cvc5_solver, "ite-simp", "true")
82
+ # self._set_option(solver.cvc5_solver, "simp-ite-compress", "true")
85
83
 
86
- #self._set_option(solver.cvc5, "nl-ext-tplanes", "true")
84
+ #self._set_option(solver.cvc5_solver, "nl-ext-tplanes", "true")
87
85
 
88
86
 
89
87
  for k,v in self.solver_options.items():
90
- self._set_option(solver.cvc5, str(k), str(v))
88
+ self._set_option(solver.cvc5_solver, str(k), str(v))
91
89
 
92
90
  # EOC CVC5Options
93
91
 
@@ -104,7 +102,7 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
104
102
  environment=environment,
105
103
  logic=logic,
106
104
  **options)
107
- self.cvc5 = cvc5.Solver()
105
+ self.cvc5_solver = cvc5.Solver()
108
106
  self.declarations = None
109
107
  self.logic_name = str(logic)
110
108
  if "t" in self.logic_name:
@@ -114,14 +112,14 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
114
112
  self.logic_name = "QF_LRA"
115
113
  elif self.logic_name == "BOOL":
116
114
  self.logic_name = "LRA"
117
- self.cvc5.setLogic(self.logic_name)
115
+ self.cvc5_solver.setLogic(self.logic_name)
118
116
 
119
117
  self.options(self)
120
118
 
121
- self.converter = CVC5Converter(environment, cvc5=self.cvc5)
119
+ self.converter = CVC5Converter(environment, parent_solver=self)
122
120
 
123
121
  def reset_assertions(self):
124
- self.cvc5.resetAssertions()
122
+ self.cvc5_solver.resetAssertions()
125
123
 
126
124
  def declare_variable(self, var):
127
125
  raise NotImplementedError
@@ -129,7 +127,7 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
129
127
  def add_assertion(self, formula, named=None):
130
128
  self._assert_is_boolean(formula)
131
129
  term = self.converter.convert(formula)
132
- self.cvc5.assertFormula(term)
130
+ self.cvc5_solver.assertFormula(term)
133
131
 
134
132
  def get_model(self):
135
133
  assignment = {}
@@ -143,10 +141,10 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
143
141
  def solve(self, assumptions=None):
144
142
  if assumptions is not None:
145
143
  cvc5_assumptions = [self.converter.convert(a) for a in assumptions]
146
- res = self.cvc5.checkSatAssuming(*cvc5_assumptions)
144
+ res = self.cvc5_solver.checkSatAssuming(*cvc5_assumptions)
147
145
  else:
148
146
  try:
149
- res = self.cvc5.checkSat()
147
+ res = self.cvc5_solver.checkSat()
150
148
  except Exception as ex:
151
149
  raise InternalSolverError(str(ex))
152
150
 
@@ -164,12 +162,12 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
164
162
  raise NotImplementedError("The solver is not incremental")
165
163
 
166
164
  for _ in range(levels):
167
- self.cvc5.push()
165
+ self.cvc5_solver.push()
168
166
  return
169
167
 
170
168
  def pop(self, levels=1):
171
169
  for _ in range(levels):
172
- self.cvc5.pop()
170
+ self.cvc5_solver.pop()
173
171
  return
174
172
 
175
173
  def print_model(self, name_filter=None):
@@ -185,7 +183,7 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
185
183
  def get_value(self, item):
186
184
  self._assert_no_function_type(item)
187
185
  term = self.converter.convert(item)
188
- cvc5_res = self.cvc5.getValue(term)
186
+ cvc5_res = self.cvc5_solver.getValue(term)
189
187
  res = self.converter.back(cvc5_res)
190
188
  if self.environment.stc.get_type(item).is_real_type() and \
191
189
  self.environment.stc.get_type(res).is_int_type():
@@ -193,7 +191,8 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
193
191
  return res
194
192
 
195
193
  def _exit(self):
196
- del self.cvc5
194
+ del self.cvc5_solver
195
+
197
196
 
198
197
  def set_option(self, name, value):
199
198
  """Sets an option.
@@ -202,16 +201,16 @@ class CVC5Solver(Solver, SmtLibBasicSolver, SmtLibIgnoreMixin):
202
201
  :type name: String
203
202
  :type value: String
204
203
  """
205
- self.cvc5.setOption(name, value)
204
+ self.cvc5_solver.setOption(name, value)
206
205
 
207
206
 
208
207
 
209
208
  class CVC5Converter(Converter, DagWalker):
210
209
 
211
- def __init__(self, environment, cvc5):
210
+ def __init__(self, environment, parent_solver):
212
211
  DagWalker.__init__(self, environment)
213
212
 
214
- self.cvc5 = cvc5
213
+ self.parent_solver = parent_solver
215
214
 
216
215
  self.declared_vars = {}
217
216
  self.backconversion = {}
@@ -219,13 +218,21 @@ class CVC5Converter(Converter, DagWalker):
219
218
  self._get_type = environment.stc.get_type
220
219
  return
221
220
 
221
+ @property
222
+ def cvc5_solver(self):
223
+ '''Returns the cvc5 solver instance from the parent solver.
224
+ This is needed because apparently cvc5.Solver cannot be aliased
225
+ (probably due to the wrapper) and therefore we cannot store it directly
226
+ in the converter.'''
227
+ return self.parent_solver.cvc5_solver
228
+
222
229
  def declare_variable(self, var):
223
230
  if not var.is_symbol():
224
231
  raise PysmtTypeError("Trying to declare as a variable something "
225
232
  "that is not a symbol: %s" % var)
226
233
  if var.symbol_name() not in self.declared_vars:
227
234
  cvc5_type = self._type_to_cvc5(var.symbol_type())
228
- decl = self.cvc5.mkConst(cvc5_type, var.symbol_name())
235
+ decl = self.cvc5_solver.mkConst(cvc5_type, var.symbol_name())
229
236
  self.declared_vars[var] = decl
230
237
 
231
238
  def back(self, expr):
@@ -260,13 +267,13 @@ class CVC5Converter(Converter, DagWalker):
260
267
  return self.walk(formula)
261
268
 
262
269
  def walk_and(self, formula, args, **kwargs):
263
- return self.cvc5.mkTerm(Kind.AND, *args)
270
+ return self.cvc5_solver.mkTerm(Kind.AND, *args)
264
271
 
265
272
  def walk_or(self, formula, args, **kwargs):
266
- return self.cvc5.mkTerm(Kind.OR, *args)
273
+ return self.cvc5_solver.mkTerm(Kind.OR, *args)
267
274
 
268
275
  def walk_not(self, formula, args, **kwargs):
269
- return self.cvc5.mkTerm(Kind.NOT, *args)
276
+ return self.cvc5_solver.mkTerm(Kind.NOT, *args)
270
277
 
271
278
  def walk_symbol(self, formula, args, **kwargs):
272
279
  #pylint: disable=unused-argument
@@ -275,238 +282,239 @@ class CVC5Converter(Converter, DagWalker):
275
282
  return self.declared_vars[formula]
276
283
 
277
284
  def walk_iff(self, formula, args, **kwargs):
278
- return self.cvc5.mkTerm(Kind.EQUAL, args[0], args[1])
285
+ return self.cvc5_solver.mkTerm(Kind.EQUAL, args[0], args[1])
279
286
 
280
287
  def walk_implies(self, formula, args, **kwargs):
281
- return self.cvc5.mkTerm(Kind.IMPLIES, args[0], args[1])
288
+ return self.cvc5_solver.mkTerm(Kind.IMPLIES, args[0], args[1])
282
289
 
283
290
  def walk_le(self, formula, args, **kwargs):
284
- return self.cvc5.mkTerm(Kind.LEQ, args[0], args[1])
291
+ return self.cvc5_solver.mkTerm(Kind.LEQ, args[0], args[1])
285
292
 
286
293
  def walk_lt(self, formula, args, **kwargs):
287
- return self.cvc5.mkTerm(Kind.LT, args[0], args[1])
294
+ return self.cvc5_solver.mkTerm(Kind.LT, args[0], args[1])
288
295
 
289
296
  def walk_ite(self, formula, args, **kwargs):
290
- return self.cvc5.mkTerm(Kind.ITE, args[0], args[1], args[2])
297
+ return self.cvc5_solver.mkTerm(Kind.ITE, args[0], args[1], args[2])
291
298
 
292
299
  def walk_real_constant(self, formula, **kwargs):
293
300
  frac = formula.constant_value()
294
301
  n,d = frac.numerator, frac.denominator
295
302
  rep = str(n) + "/" + str(d)
296
- return self.cvc5.mkReal(rep)
303
+ return self.cvc5_solver.mkReal(rep)
297
304
 
298
305
  def walk_int_constant(self, formula, **kwargs):
299
306
  assert is_pysmt_integer(formula.constant_value())
300
307
  rep = str(formula.constant_value())
301
- return self.cvc5.mkInteger(rep)
308
+ return self.cvc5_solver.mkInteger(rep)
302
309
 
303
310
  def walk_bool_constant(self, formula, **kwargs):
304
- return self.cvc5.mkBoolean(formula.constant_value())
311
+ return self.cvc5_solver.mkBoolean(formula.constant_value())
305
312
 
306
313
  def walk_exists(self, formula, args, **kwargs):
307
314
  (bound_formula, var_list) = \
308
315
  self._rename_bound_variables(args[0], formula.quantifier_vars())
309
- bound_vars_list = self.cvc5.mkTerm(Kind.VARIABLE_LIST, *var_list)
310
- return self.cvc5.mkTerm(Kind.EXISTS,
316
+ bound_vars_list = self.cvc5_solver.mkTerm(Kind.VARIABLE_LIST, *var_list)
317
+ return self.cvc5_solver.mkTerm(Kind.EXISTS,
311
318
  bound_vars_list,
312
319
  bound_formula)
313
320
 
314
321
  def walk_forall(self, formula, args, **kwargs):
315
322
  (bound_formula, var_list) = \
316
323
  self._rename_bound_variables(args[0], formula.quantifier_vars())
317
- bound_vars_list = self.cvc5.mkTerm(Kind.VARIABLE_LIST, *var_list)
318
- return self.cvc5.mkTerm(Kind.FORALL,
324
+ bound_vars_list = self.cvc5_solver.mkTerm(Kind.VARIABLE_LIST, *var_list)
325
+ return self.cvc5_solver.mkTerm(Kind.FORALL,
319
326
  bound_vars_list,
320
327
  bound_formula)
321
328
 
322
329
  def walk_plus(self, formula, args, **kwargs):
323
- return self.cvc5.mkTerm(Kind.ADD, *args)
330
+ return self.cvc5_solver.mkTerm(Kind.ADD, *args)
324
331
 
325
332
  def walk_array_store(self, formula, args, **kwargs):
326
- return self.cvc5.mkTerm(Kind.STORE, args[0], args[1], args[2])
333
+ return self.cvc5_solver.mkTerm(Kind.STORE, args[0], args[1], args[2])
327
334
 
328
335
  def walk_array_select(self, formula, args, **kwargs):
329
- return self.cvc5.mkTerm(Kind.SELECT, args[0], args[1])
336
+ return self.cvc5_solver.mkTerm(Kind.SELECT, args[0], args[1])
330
337
 
331
338
  def walk_minus(self, formula, args, **kwargs):
332
- return self.cvc5.mkTerm(Kind.SUB, args[0], args[1])
339
+ return self.cvc5_solver.mkTerm(Kind.SUB, args[0], args[1])
333
340
 
334
341
  def walk_equals(self, formula, args, **kwargs):
335
- return self.cvc5.mkTerm(Kind.EQUAL, args[0], args[1])
342
+ return self.cvc5_solver.mkTerm(Kind.EQUAL, args[0], args[1])
336
343
 
337
344
  def walk_times(self, formula, args, **kwargs):
338
- return self.cvc5.mkTerm(Kind.MULT, *args)
345
+ return self.cvc5_solver.mkTerm(Kind.MULT, *args)
339
346
 
340
347
  def walk_div(self, formula, args, **kwargs):
341
348
  if self.env.stc.get_type(formula).is_int_type():
342
- return self.cvc5.mkTerm(Kind.INTS_DIVISION, *args)
349
+ return self.cvc5_solver.mkTerm(Kind.INTS_DIVISION, *args)
343
350
  else:
344
- return self.cvc5.mkTerm(Kind.DIVISION, *args)
351
+ return self.cvc5_solver.mkTerm(Kind.DIVISION, *args)
345
352
 
346
353
  def walk_pow(self, formula, args, **kwargs):
347
- return self.cvc5.mkTerm(Kind.POW, args[0], self.cvc5.mkTerm(Kind.TO_REAL, args[1]))
354
+ return self.cvc5_solver.mkTerm(Kind.TO_REAL,
355
+ self.cvc5_solver.mkTerm(Kind.POW, args[0], args[1]))
348
356
 
349
357
  def walk_toreal(self, formula, args, **kwargs):
350
- return self.cvc5.mkTerm(Kind.TO_REAL, args[0])
358
+ return self.cvc5_solver.mkTerm(Kind.TO_REAL, args[0])
351
359
 
352
360
  def walk_function(self, formula, args, **kwargs):
353
361
  name = formula.function_name()
354
362
  if name not in self.declared_vars:
355
363
  self.declare_variable(name)
356
364
  decl = self.declared_vars[name]
357
- return self.cvc5.mkTerm(Kind.APPLY_UF, decl, *args)
365
+ return self.cvc5_solver.mkTerm(Kind.APPLY_UF, decl, *args)
358
366
 
359
367
  def walk_bv_constant(self, formula, **kwargs):
360
368
  v = formula.constant_value()
361
369
  width = formula.bv_width()
362
- return self.cvc5.mkBitVector(width, str(v), 10)
370
+ return self.cvc5_solver.mkBitVector(width, str(v), 10)
363
371
 
364
372
  def walk_bv_ult(self, formula, args, **kwargs):
365
- return self.cvc5.mkTerm(Kind.BITVECTOR_ULT, args[0], args[1])
373
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_ULT, args[0], args[1])
366
374
 
367
375
  def walk_bv_ule(self, formula, args, **kwargs):
368
- return self.cvc5.mkTerm(Kind.BITVECTOR_ULE, args[0], args[1])
376
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_ULE, args[0], args[1])
369
377
 
370
378
  def walk_bv_concat(self, formula, args, **kwargs):
371
- return self.cvc5.mkTerm(Kind.BITVECTOR_CONCAT, args[0], args[1])
379
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_CONCAT, args[0], args[1])
372
380
 
373
381
  def walk_bv_extract(self, formula, args, **kwargs):
374
- ext = self.cvc5.mkOp(Kind.BITVECTOR_EXTRACT,
382
+ ext = self.cvc5_solver.mkOp(Kind.BITVECTOR_EXTRACT,
375
383
  formula.bv_extract_end(),
376
384
  formula.bv_extract_start())
377
- return self.cvc5.mkTerm(ext, args[0])
385
+ return self.cvc5_solver.mkTerm(ext, args[0])
378
386
 
379
387
  def walk_bv_or(self, formula, args, **kwargs):
380
- return self.cvc5.mkTerm(Kind.BITVECTOR_OR, args[0], args[1])
388
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_OR, args[0], args[1])
381
389
 
382
390
  def walk_bv_not(self, formula, args, **kwargs):
383
- return self.cvc5.mkTerm(Kind.BITVECTOR_NOT, args[0])
391
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_NOT, args[0])
384
392
 
385
393
  def walk_bv_and(self, formula, args, **kwargs):
386
- return self.cvc5.mkTerm(Kind.BITVECTOR_AND, args[0], args[1])
394
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_AND, args[0], args[1])
387
395
 
388
396
  def walk_bv_xor(self, formula, args, **kwargs):
389
- return self.cvc5.mkTerm(Kind.BITVECTOR_XOR, args[0], args[1])
397
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_XOR, args[0], args[1])
390
398
 
391
399
  def walk_bv_add(self, formula, args, **kwargs):
392
- return self.cvc5.mkTerm(Kind.BITVECTOR_ADD, *args)
400
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_ADD, *args)
393
401
 
394
402
  def walk_bv_sub(self, formula, args, **kwargs):
395
- return self.cvc5.mkTerm(Kind.BITVECTOR_SUB, args[0], args[1])
403
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_SUB, args[0], args[1])
396
404
 
397
405
  def walk_bv_neg(self, formula, args, **kwargs):
398
- return self.cvc5.mkTerm(Kind.BITVECTOR_NEG, args[0])
406
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_NEG, args[0])
399
407
 
400
408
  def walk_bv_mul(self, formula, args, **kwargs):
401
- return self.cvc5.mkTerm(Kind.BITVECTOR_MULT, args[0], args[1])
409
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_MULT, args[0], args[1])
402
410
 
403
411
  def walk_bv_tonatural(self, formula, args, **kwargs):
404
- return self.cvc5.mkTerm(Kind.BITVECTOR_TO_NAT, args[0])
412
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_TO_NAT, args[0])
405
413
 
406
414
  def walk_bv_udiv(self, formula, args, **kwargs):
407
- return self.cvc5.mkTerm(Kind.BITVECTOR_UDIV, *args)
415
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_UDIV, *args)
408
416
 
409
417
  def walk_bv_urem(self, formula, args, **kwargs):
410
- return self.cvc5.mkTerm(Kind.BITVECTOR_UREM, *args)
418
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_UREM, *args)
411
419
 
412
420
  def walk_bv_lshl(self, formula, args, **kwargs):
413
- return self.cvc5.mkTerm(Kind.BITVECTOR_SHL, args[0], args[1])
421
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_SHL, args[0], args[1])
414
422
 
415
423
  def walk_bv_lshr(self, formula, args, **kwargs):
416
- return self.cvc5.mkTerm(Kind.BITVECTOR_LSHR, args[0], args[1])
424
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_LSHR, args[0], args[1])
417
425
 
418
426
  def walk_bv_rol(self, formula, args, **kwargs):
419
- ext = self.cvc5.mkOp(Kind.BITVECTOR_ROTATE_LEFT, formula.bv_rotation_step())
420
- return self.cvc5.mkTerm(ext, args[0])
427
+ ext = self.cvc5_solver.mkOp(Kind.BITVECTOR_ROTATE_LEFT, formula.bv_rotation_step())
428
+ return self.cvc5_solver.mkTerm(ext, args[0])
421
429
 
422
430
  def walk_bv_ror(self, formula, args, **kwargs):
423
- ext = self.cvc5.mkOp(Kind.BITVECTOR_ROTATE_RIGHT, formula.bv_rotation_step())
424
- return self.cvc5.mkTerm(ext, args[0])
431
+ ext = self.cvc5_solver.mkOp(Kind.BITVECTOR_ROTATE_RIGHT, formula.bv_rotation_step())
432
+ return self.cvc5_solver.mkTerm(ext, args[0])
425
433
 
426
434
  def walk_bv_zext(self, formula, args, **kwargs):
427
- ext = self.cvc5.mkOp(Kind.BITVECTOR_ZERO_EXTEND, formula.bv_extend_step())
428
- return self.cvc5.mkTerm(ext, args[0])
435
+ ext = self.cvc5_solver.mkOp(Kind.BITVECTOR_ZERO_EXTEND, formula.bv_extend_step())
436
+ return self.cvc5_solver.mkTerm(ext, args[0])
429
437
 
430
438
  def walk_bv_sext (self, formula, args, **kwargs):
431
- ext = self.cvc5.mkOp(Kind.BITVECTOR_SIGN_EXTEND, formula.bv_extend_step())
432
- return self.cvc5.mkTerm(ext, args[0])
439
+ ext = self.cvc5_solver.mkOp(Kind.BITVECTOR_SIGN_EXTEND, formula.bv_extend_step())
440
+ return self.cvc5_solver.mkTerm(ext, args[0])
433
441
 
434
442
  def walk_bv_slt(self, formula, args, **kwargs):
435
- return self.cvc5.mkTerm(Kind.BITVECTOR_SLT, args[0], args[1])
443
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_SLT, args[0], args[1])
436
444
 
437
445
  def walk_bv_sle(self, formula, args, **kwargs):
438
- return self.cvc5.mkTerm(Kind.BITVECTOR_SLE, args[0], args[1])
446
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_SLE, args[0], args[1])
439
447
 
440
448
  def walk_bv_comp(self, formula, args, **kwargs):
441
- return self.cvc5.mkTerm(Kind.BITVECTOR_COMP, args[0], args[1])
449
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_COMP, args[0], args[1])
442
450
 
443
451
  def walk_bv_sdiv(self, formula, args, **kwargs):
444
- return self.cvc5.mkTerm(Kind.BITVECTOR_SDIV, *args)
452
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_SDIV, *args)
445
453
 
446
454
  def walk_bv_srem(self, formula, args, **kwargs):
447
- return self.cvc5.mkTerm(Kind.BITVECTOR_SREM, *args)
455
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_SREM, *args)
448
456
 
449
457
  def walk_bv_ashr(self, formula, args, **kwargs):
450
- return self.cvc5.mkTerm(Kind.BITVECTOR_ASHR, args[0], args[1])
458
+ return self.cvc5_solver.mkTerm(Kind.BITVECTOR_ASHR, args[0], args[1])
451
459
 
452
460
  def walk_str_constant(self, formula, args, **kwargs):
453
- return self.cvc5.mkString(formula.constant_value())
461
+ return self.cvc5_solver.mkString(formula.constant_value())
454
462
 
455
463
  def walk_str_length (self, formula, args, **kwargs):
456
- return self.cvc5.mkTerm(Kind.STRING_LENGTH , args[0])
464
+ return self.cvc5_solver.mkTerm(Kind.STRING_LENGTH , args[0])
457
465
 
458
466
  def walk_str_concat(self, formula, args, **kwargs):
459
- return self.cvc5.mkTerm(Kind.STRING_CONCAT, *args)
467
+ return self.cvc5_solver.mkTerm(Kind.STRING_CONCAT, *args)
460
468
 
461
469
  def walk_str_contains(self, formula, args, **kwargs):
462
- return self.cvc5.mkTerm(Kind.STRING_CONTAINS, args[0], args[1])
470
+ return self.cvc5_solver.mkTerm(Kind.STRING_CONTAINS, args[0], args[1])
463
471
 
464
472
  def walk_str_indexof(self, formula, args, **kwargs):
465
- return self.cvc5.mkTerm(Kind.STRING_INDEXOF, args[0], args[1], args[2])
473
+ return self.cvc5_solver.mkTerm(Kind.STRING_INDEXOF, args[0], args[1], args[2])
466
474
 
467
475
  def walk_str_replace(self, formula, args, **kwargs):
468
- return self.cvc5.mkTerm(Kind.STRING_REPLACE, args[0], args[1], args[2])
476
+ return self.cvc5_solver.mkTerm(Kind.STRING_REPLACE, args[0], args[1], args[2])
469
477
 
470
478
  def walk_str_substr(self, formula, args, **kwargs):
471
- return self.cvc5.mkTerm(Kind.STRING_SUBSTR, args[0], args[1], args[2])
479
+ return self.cvc5_solver.mkTerm(Kind.STRING_SUBSTR, args[0], args[1], args[2])
472
480
 
473
481
  def walk_str_prefixof(self, formula, args, **kwargs):
474
- return self.cvc5.mkTerm(Kind.STRING_PREFIX, args[0], args[1])
482
+ return self.cvc5_solver.mkTerm(Kind.STRING_PREFIX, args[0], args[1])
475
483
 
476
484
  def walk_str_suffixof(self, formula, args, **kwargs):
477
- return self.cvc5.mkTerm(Kind.STRING_SUFFIX, args[0], args[1])
485
+ return self.cvc5_solver.mkTerm(Kind.STRING_SUFFIX, args[0], args[1])
478
486
 
479
487
  def walk_str_to_int(self, formula, args, **kwargs):
480
- return self.cvc5.mkTerm(Kind.STRING_TO_INT, args[0])
488
+ return self.cvc5_solver.mkTerm(Kind.STRING_TO_INT, args[0])
481
489
 
482
490
  def walk_int_to_str(self, formula, args, **kwargs):
483
- return self.cvc5.mkTerm(Kind.STRING_FROM_INT, args[0])
491
+ return self.cvc5_solver.mkTerm(Kind.STRING_FROM_INT, args[0])
484
492
 
485
493
  def walk_str_charat(self, formula, args, **kwargs):
486
- return self.cvc5.mkTerm(Kind.STRING_CHARAT, args[0], args[1])
494
+ return self.cvc5_solver.mkTerm(Kind.STRING_CHARAT, args[0], args[1])
487
495
 
488
496
  def _type_to_cvc5(self, tp):
489
497
  if tp.is_bool_type():
490
- return self.cvc5.getBooleanSort()
498
+ return self.cvc5_solver.getBooleanSort()
491
499
  elif tp.is_real_type():
492
- return self.cvc5.getRealSort()
500
+ return self.cvc5_solver.getRealSort()
493
501
  elif tp.is_int_type():
494
- return self.cvc5.getIntegerSort()
502
+ return self.cvc5_solver.getIntegerSort()
495
503
  elif tp.is_function_type():
496
504
  stps = [self._type_to_cvc5(x) for x in tp.param_types]
497
505
  rtp = self._type_to_cvc5(tp.return_type)
498
- return self.cvc5.mkFunctionSort(stps, rtp)
506
+ return self.cvc5_solver.mkFunctionSort(stps, rtp)
499
507
  elif tp.is_array_type():
500
508
  # Recursively convert the types of index and elem
501
509
  idx_cvc_type = self._type_to_cvc5(tp.index_type)
502
510
  elem_cvc_type = self._type_to_cvc5(tp.elem_type)
503
- return self.cvc5.mkArraySort(idx_cvc_type, elem_cvc_type)
511
+ return self.cvc5_solver.mkArraySort(idx_cvc_type, elem_cvc_type)
504
512
  elif tp.is_bv_type():
505
- return self.cvc5.mkBitVectorSort(tp.width)
513
+ return self.cvc5_solver.mkBitVectorSort(tp.width)
506
514
  elif tp.is_string_type():
507
- return self.cvc5.getStringSort()
515
+ return self.cvc5_solver.getStringSort()
508
516
  elif tp.is_custom_type():
509
- return self.cvc5.mkUninterpretedSort(str(tp))
517
+ return self.cvc5_solver.mkUninterpretedSort(str(tp))
510
518
  else:
511
519
  raise NotImplementedError("Unsupported type: %s" %tp)
512
520
 
@@ -539,7 +547,7 @@ class CVC5Converter(Converter, DagWalker):
539
547
  Returns a tuple (new_formula, new_var_list) in which the old
540
548
  variables have been replaced by the new variables in the list.
541
549
  """
542
- mkBoundVar = self.cvc5.mkVar
550
+ mkBoundVar = self.cvc5_solver.mkVar
543
551
  new_var_list = [mkBoundVar(self._type_to_cvc5(x.symbol_type()),
544
552
  x.symbol_name())
545
553
  for x in variables]
@@ -52,18 +52,18 @@ def execute_script_fname(smtfile, logic, expected_result):
52
52
  parser = SmtLibParser()
53
53
  script = parser.get_script_fname(smtfile)
54
54
  try:
55
- solver = Solver(logic=logic, incremental=False,
56
- generate_models=False)
57
- if logic == QF_UF and type(solver).__name__ == 'CVC5Solver':
58
- warnings.warn("Test (%s, %s) skipped because CVC5 can't handle QF_UF." % (logic, smtfile))
59
- return
60
- if logic == QF_LIA and type(solver).__name__ == 'CVC5Solver':
61
- warnings.warn("Test (%s, %s) skipped because CVC5 is very slow on QF_LIA tests" % (logic, smtfile))
62
- return
63
- if logic == QF_UF and type(solver).__name__ == 'BoolectorSolver':
64
- warnings.warn("Test (%s, %s) skipped because Boolector can't handle QF_UF." % (logic, smtfile))
65
- return
66
- log = script.evaluate(solver)
55
+ with Solver(logic=logic, incremental=False,
56
+ generate_models=False) as solver:
57
+ if logic == QF_UF and type(solver).__name__ == 'CVC5Solver':
58
+ warnings.warn("Test (%s, %s) skipped because CVC5 can't handle QF_UF." % (logic, smtfile))
59
+ return
60
+ if logic == QF_LIA and type(solver).__name__ == 'CVC5Solver':
61
+ warnings.warn("Test (%s, %s) skipped because CVC5 is very slow on QF_LIA tests" % (logic, smtfile))
62
+ return
63
+ if logic == QF_UF and type(solver).__name__ == 'BoolectorSolver':
64
+ warnings.warn("Test (%s, %s) skipped because Boolector can't handle QF_UF." % (logic, smtfile))
65
+ return
66
+ log = script.evaluate(solver)
67
67
  except NoSolverAvailableError:
68
68
  raise SkipTest("No solver for logic %s." % logic)
69
69
  except SolverReturnedUnknownResultError:
pysmt/test/test_bdd.py CHANGED
@@ -167,7 +167,7 @@ class TestBdd(TestCase):
167
167
  'dynamic_reordering':True}) as s:
168
168
  s.add_assertion(self.big_tree)
169
169
  self.assertTrue(s.solve())
170
- self.assertNotEquals(s.ddmanager.ReorderingStatus()[1], 0)
170
+ self.assertNotEqual(s.ddmanager.ReorderingStatus()[1], 0)
171
171
 
172
172
 
173
173
  if __name__ == '__main__':
@@ -1,12 +1,20 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: PySMT
3
- Version: 0.9.7.dev337
3
+ Version: 0.9.7.dev346
4
4
  Summary: A solver-agnostic library for SMT Formulae manipulation and solving
5
5
  Home-page: http://www.pysmt.org
6
6
  Author: PySMT Team
7
7
  Author-email: info@pysmt.org
8
8
  License: APACHE
9
- Platform: UNKNOWN
9
+ License-File: LICENSE
10
+ License-File: NOTICE
11
+ Dynamic: author
12
+ Dynamic: author-email
13
+ Dynamic: description
14
+ Dynamic: home-page
15
+ Dynamic: license
16
+ Dynamic: license-file
17
+ Dynamic: summary
10
18
 
11
19
  ============================================================
12
20
  pySMT: A library for SMT formulae manipulation and solving
@@ -48,5 +56,3 @@ Wanna know more?
48
56
  ================
49
57
 
50
58
  Visit http://www.pysmt.org
51
-
52
-
@@ -1,4 +1,4 @@
1
- pysmt/__init__.py,sha256=4qoWpE_YchHcFrvD6jeWloG3_PgCmssRGEMDiaBtTtY,1598
1
+ pysmt/__init__.py,sha256=muO5nvTTaN5smfBWY-ZDJHVY1zL6vSt0ln6uj_xWnW4,1598
2
2
  pysmt/__main__.py,sha256=rR-MV1QtLYqtVoJyY3m5B5Iz-lua0-5o6YSB0W4lKy8,1085
3
3
  pysmt/configuration.py,sha256=Iq_46QZ9z_jpBMk76euJWTqGEwHad2qyiEDPix5sXsA,4538
4
4
  pysmt/constants.py,sha256=QelM9r5fGWSq8UNjjYoEJK2FaLHRr4Z9NZxzjeajEWA,5249
@@ -22,17 +22,17 @@ pysmt/typing.py,sha256=GioU08mUxqsjFmmAYfBYj51mmJoBcFZDunc-t99QKng,17714
22
22
  pysmt/utils.py,sha256=t13jG-E8kQNxG_JmS79GDy3SnBohSobwjJTjZHFf3fE,2302
23
23
  pysmt/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  pysmt/cmd/check_version.py,sha256=FOumRpuGF1ntqm70QHJqZ6JEKeEamGMY-lp5XOqhPlo,2688
25
- pysmt/cmd/install.py,sha256=2p5o6hdqnejcNfF4nv0vmoi-wkCdaTCMLu5nL-GU9Hw,10468
25
+ pysmt/cmd/install.py,sha256=DtxqsZRx_qcxLWYpCVfG-Alv774aQT0PbiXC0-aymOk,10468
26
26
  pysmt/cmd/shell.py,sha256=7vfFcEYNBueQVeOEW7r38PdEfAdL71xby03BF7XR9ec,6112
27
27
  pysmt/cmd/installers/__init__.py,sha256=sJiTL66cCauRGJ6axZMJzSKM8io5DTzbWHaUpggSL1Q,1255
28
- pysmt/cmd/installers/base.py,sha256=1usHiBHrIBam9BlbVKG-6F52KPsIkJBeghkd_ckh-8U,12811
28
+ pysmt/cmd/installers/base.py,sha256=ajiPGGR2jGEA1ZxMqqh6S2hIPCLHyllbk40tVQeGwDk,13158
29
29
  pysmt/cmd/installers/bdd.py,sha256=Qq8YlYAVvxUqNXjoOlH9_Lhj4cj6WEt7HuhbSiF_L6k,2539
30
30
  pysmt/cmd/installers/btor.py,sha256=gUl_urKcWtbSYS_Vde_O7RJM0H-kRqh6hceTju-Sbcs,4995
31
31
  pysmt/cmd/installers/cvcfive.py,sha256=vWqAm5xF7IMY0JWEeyx3_ochCqyHx0dlcZBo9QcQ-uk,1460
32
32
  pysmt/cmd/installers/cvcfour.py,sha256=uBZkKIX4gZEMfjrhrparUSDydMcvGIGZM2Y8JYD0GzE,3916
33
- pysmt/cmd/installers/msat.py,sha256=hNz7TbqYrEg9I0vvkSaBiKdy4v8RxH8oXGhXQhgNIVU,5409
34
- pysmt/cmd/installers/optimsat.py,sha256=ijbFb8dl0t4ruzVH1mrgKWWpxvRoN_1ROY4KlvroPv4,3908
35
- pysmt/cmd/installers/pico.py,sha256=XJpVbY5YHboL3OEMBvjwv8QwKdJ7Y62Blb78tEGyMxU,3141
33
+ pysmt/cmd/installers/msat.py,sha256=PnHNSbMLB99SPCkv2cuK8LyWweJVa7cOOcGvsFTgzsU,5547
34
+ pysmt/cmd/installers/optimsat.py,sha256=wktjIyM47noeT2A9yT1MnghDU4RiZVpVCYK3egWyLv4,3909
35
+ pysmt/cmd/installers/pico.py,sha256=U4sXr1oj4BJJpO5H7vB8WqJ6OEPazpYkmmXP1XWhvys,3027
36
36
  pysmt/cmd/installers/yices.py,sha256=M99P641jqGtAWOgQpAQzt4T1KwmSClw1VDEETzsSZe0,3010
37
37
  pysmt/cmd/installers/z3.py,sha256=5wP6O-a602-y1cuEyr22bkdWnOWHx8bIaPQ24xDtxX8,1386
38
38
  pysmt/optimization/__init__.py,sha256=JXBHtcb4Lv-Sb8whc9JuGbRH2EBLWwtLUh3PL9HhNE8,650
@@ -54,7 +54,7 @@ pysmt/smtlib/parser/parser.py,sha256=jkxVWYKJWtB5Bct_Warif_bgQmiRfPhJNOhWFhl55Iw
54
54
  pysmt/solvers/__init__.py,sha256=JXBHtcb4Lv-Sb8whc9JuGbRH2EBLWwtLUh3PL9HhNE8,650
55
55
  pysmt/solvers/bdd.py,sha256=my3398_-8Rkqy1pluzZa7_12qsA43ARbs8-YAPqdMWs,15938
56
56
  pysmt/solvers/btor.py,sha256=2oT1PfXSGTSTPaXQUwVy0M799slSH2FJ-3QNb3YQmGw,25953
57
- pysmt/solvers/cvcfive.py,sha256=z8o4VxrZBC6sdb_JYTWfRS3BXdWJPznakN3k7rD4EY8,21073
57
+ pysmt/solvers/cvcfive.py,sha256=M8gnUvRDrELoLVVS_dUMcDALK047a-4A6evxiTC8Z-k,22201
58
58
  pysmt/solvers/cvcfour.py,sha256=odWm_MAgoPlhOf6gaarZQAqQS4fN-8PH-xGIYaiErQE,24538
59
59
  pysmt/solvers/dynmsat.py,sha256=RenEJwWD8qLWECnyq141_0qbw1GGB5uYKvzJ18_Fgbk,1917
60
60
  pysmt/solvers/eager.py,sha256=dyUHR6hmBcqn83NR4kFVhrpfneEpb9Uz4llP1fSaYs4,3374
@@ -74,7 +74,7 @@ pysmt/test/omt_examples.py,sha256=f1DKD3dtxWEsMRFYdj_ZLMR6vezP9rSTzmb83weux0Q,95
74
74
  pysmt/test/optimization_utils.py,sha256=z1z3cbfUbCeExylK1rnsiYR_NJTIUi3Z-OGH3y-7kwg,14266
75
75
  pysmt/test/test_array.py,sha256=OypmqKf_ciigxK1X_W2b9sm0EWOA3wqH376QXt7oGCM,6237
76
76
  pysmt/test/test_back.py,sha256=3O7XTx4WfuizjT7-yueZq6oGG-uqovkie7R3A5GklTk,3372
77
- pysmt/test/test_bdd.py,sha256=GsFiq0YQd3exbN9k2fCurKZlvDl3H2VAucYc9tKGKEc,6195
77
+ pysmt/test/test_bdd.py,sha256=CzOzP7CnTvhsg8KT5d8FPNSZ4uO9fI8deU1Xv8YUFIs,6194
78
78
  pysmt/test/test_bv.py,sha256=-pnOgslpMAeK9US4f_z4CU8LK0ZmDr-yceS1u1kwgps,12284
79
79
  pysmt/test/test_bv_simplification.py,sha256=gbXcSyjM9I9Zxlu5n43a66fW3RomarP2_DEj6IzYQTc,14637
80
80
  pysmt/test/test_cnf.py,sha256=Kbfe6-WUv2fWXmVaxFSPi-B4hIO9AvLitZxMySCvfes,4434
@@ -117,7 +117,7 @@ pysmt/test/test_walkers.py,sha256=AKVMvEUtMBht08bE1vCMaeMtdgGa6j_weDSHz_9Br3Q,94
117
117
  pysmt/test/configs/config1.ini,sha256=MAXPN6VVW-S7jpWmglMPN5a3JYgorTqKAF6cmfohMpo,224
118
118
  pysmt/test/configs/config_bad.ini,sha256=AOiZPmUcmAjVXOd5Bp4_euaYJG8EfccBy5iKUEcbxz8,88
119
119
  pysmt/test/smtlib/__init__.py,sha256=JXBHtcb4Lv-Sb8whc9JuGbRH2EBLWwtLUh3PL9HhNE8,650
120
- pysmt/test/smtlib/parser_utils.py,sha256=8pvCwJ0Ba_yGzC9wRmkuleAkSmdQnvxTm4rM5lD8bkQ,13678
120
+ pysmt/test/smtlib/parser_utils.py,sha256=L3RFUy_z1yqKPhyg1fOeTtEbgi4CDwSmiune865miyo,13725
121
121
  pysmt/test/smtlib/test_annotations.py,sha256=Zmj3xvPt10If2_2y39hqJqqXbSK_5X_qmPkLUNgjRA4,6296
122
122
  pysmt/test/smtlib/test_fuzzed.py,sha256=pswc1F2ngXMZo-laFOs6pXnDg69JMfGPx1vMTsXdAX0,2124
123
123
  pysmt/test/smtlib/test_generic_wrapper.py,sha256=Gn_cWynRWAFqUcAWpRgmJlkkwHcqdnARZN0-blRwM-Q,7869
@@ -143,10 +143,10 @@ pysmt/walkers/dag.py,sha256=pUdVTZx7CQyjrAb6jMfmsqS07J4kiDqHU8R4_9UvwkQ,5352
143
143
  pysmt/walkers/generic.py,sha256=q1j1T2RvCeJn1PM0H5d8vNV4FTYAEQgT7h8X5DJhDf8,4534
144
144
  pysmt/walkers/identitydag.py,sha256=f_D5qA198ayd3QO4u59fBX1RS_UiSBnPeV9O3ULvQv0,8737
145
145
  pysmt/walkers/tree.py,sha256=WIWN9IM0riWkaD40iP4Tt3BCN21iSdE1S7gRZqy56SU,2846
146
- PySMT-0.9.7.dev337.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
147
- PySMT-0.9.7.dev337.dist-info/METADATA,sha256=llt-p3vZt1Ly6hCzRAlptfBz9gO3Bu2uXR4_kemWylE,1617
148
- PySMT-0.9.7.dev337.dist-info/NOTICE,sha256=Ns-Jsa6nbqZUiTEEAM6HqioSZIxQ2RCJzxoBlWQaUfc,601
149
- PySMT-0.9.7.dev337.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
150
- PySMT-0.9.7.dev337.dist-info/entry_points.txt,sha256=si0hIk-v3V35G3p8QGINoQ4QW-v4RYDRqj-asgyCgeM,58
151
- PySMT-0.9.7.dev337.dist-info/top_level.txt,sha256=NwHQbpTaZMEvjIUdC0bvvj-WUyULe-nt-opK3YQNRMk,6
152
- PySMT-0.9.7.dev337.dist-info/RECORD,,
146
+ pysmt-0.9.7.dev346.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
147
+ pysmt-0.9.7.dev346.dist-info/licenses/NOTICE,sha256=Ns-Jsa6nbqZUiTEEAM6HqioSZIxQ2RCJzxoBlWQaUfc,601
148
+ pysmt-0.9.7.dev346.dist-info/METADATA,sha256=kJ0L1wXh12izU66HOhoY6B48Cg-oUm8R-IjH-ZOBrM4,1774
149
+ pysmt-0.9.7.dev346.dist-info/WHEEL,sha256=TdQ5LtNwLuxTCjgxN51AgdU5w-KkB9ttmLbzjTH02pg,109
150
+ pysmt-0.9.7.dev346.dist-info/entry_points.txt,sha256=gDc1XM0xTJJMDGC_nXd0kfbX-Omjke9Dn9F3awMLYIU,57
151
+ pysmt-0.9.7.dev346.dist-info/top_level.txt,sha256=NwHQbpTaZMEvjIUdC0bvvj-WUyULe-nt-opK3YQNRMk,6
152
+ pysmt-0.9.7.dev346.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.45.1)
2
+ Generator: setuptools (82.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -1,3 +1,2 @@
1
1
  [console_scripts]
2
2
  pysmt-install = pysmt.cmd.install:main
3
-