PySMT 0.9.6.dev65__tar.gz → 0.9.7.dev104__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.
Files changed (150) hide show
  1. {PySMT-0.9.6.dev65/PySMT.egg-info → PySMT-0.9.7.dev104}/PKG-INFO +2 -2
  2. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104/PySMT.egg-info}/PKG-INFO +2 -2
  3. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/PySMT.egg-info/SOURCES.txt +5 -3
  4. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/README.rst +3 -3
  5. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/docs/CHANGES.rst +38 -1
  6. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/docs/getting_started.rst +2 -2
  7. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/__init__.py +1 -1
  8. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/check_version.py +7 -5
  9. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/install.py +9 -9
  10. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/installers/__init__.py +4 -3
  11. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/installers/base.py +11 -10
  12. PySMT-0.9.7.dev104/pysmt/cmd/installers/cvcfive.py +42 -0
  13. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/installers/msat.py +2 -2
  14. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/installers/yices.py +18 -25
  15. PySMT-0.9.7.dev104/pysmt/cmd/installers/z3.py +38 -0
  16. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/configuration.py +1 -1
  17. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/constants.py +9 -0
  18. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/factory.py +10 -4
  19. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/parser/__init__.py +8 -0
  20. PySMT-0.9.7.dev104/pysmt/solvers/cvcfive.py +548 -0
  21. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/yices.py +129 -112
  22. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/configs/config1.ini +1 -1
  23. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/parser_utils.py +5 -2
  24. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_bv_simplification.py +4 -2
  25. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_cnf.py +2 -1
  26. PySMT-0.9.6.dev65/pysmt/test/test_cvc4_quantifiers.py → PySMT-0.9.7.dev104/pysmt/test/test_cvc_quantifiers.py +7 -7
  27. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_nia.py +10 -10
  28. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_nlira.py +5 -2
  29. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_portfolio.py +11 -11
  30. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_qe.py +2 -2
  31. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_rewritings.py +1 -1
  32. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_simplify.py +2 -2
  33. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_solving.py +14 -17
  34. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/setup.py +1 -1
  35. PySMT-0.9.6.dev65/pysmt/cmd/installers/z3.py +0 -85
  36. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/LICENSE +0 -0
  37. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/MANIFEST.in +0 -0
  38. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/NOTICE +0 -0
  39. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/PySMT.egg-info/dependency_links.txt +0 -0
  40. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/PySMT.egg-info/entry_points.txt +0 -0
  41. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/PySMT.egg-info/top_level.txt +0 -0
  42. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/docs/api_ref.rst +0 -0
  43. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/docs/development.rst +0 -0
  44. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/docs/index.rst +0 -0
  45. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/docs/tutorials/boolean_logic.rst +0 -0
  46. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/docs/tutorials.rst +0 -0
  47. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/__main__.py +0 -0
  48. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/__init__.py +0 -0
  49. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/installers/bdd.py +0 -0
  50. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/installers/btor.py +0 -0
  51. /PySMT-0.9.6.dev65/pysmt/cmd/installers/cvc4.py → /PySMT-0.9.7.dev104/pysmt/cmd/installers/cvcfour.py +0 -0
  52. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/installers/pico.py +0 -0
  53. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/cmd/shell.py +0 -0
  54. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/decorators.py +0 -0
  55. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/environment.py +0 -0
  56. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/exceptions.py +0 -0
  57. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/fnode.py +0 -0
  58. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/formula.py +0 -0
  59. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/logics.py +0 -0
  60. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/operators.py +0 -0
  61. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/oracles.py +0 -0
  62. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/parsing.py +0 -0
  63. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/printers.py +0 -0
  64. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/rewritings.py +0 -0
  65. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/shortcuts.py +0 -0
  66. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/simplifier.py +0 -0
  67. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/__init__.py +0 -0
  68. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/annotations.py +0 -0
  69. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/commands.py +0 -0
  70. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/parser/parser.py +0 -0
  71. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/printers.py +0 -0
  72. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/script.py +0 -0
  73. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/solver.py +0 -0
  74. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/smtlib/utils.py +0 -0
  75. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/__init__.py +0 -0
  76. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/bdd.py +0 -0
  77. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/btor.py +0 -0
  78. /PySMT-0.9.6.dev65/pysmt/solvers/cvc4.py → /PySMT-0.9.7.dev104/pysmt/solvers/cvcfour.py +0 -0
  79. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/eager.py +0 -0
  80. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/interpolation.py +0 -0
  81. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/msat.py +0 -0
  82. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/options.py +0 -0
  83. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/pico.py +0 -0
  84. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/portfolio.py +0 -0
  85. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/qelim.py +0 -0
  86. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/smtlib.py +0 -0
  87. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/solver.py +0 -0
  88. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/solvers/z3.py +0 -0
  89. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/substituter.py +0 -0
  90. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/__init__.py +0 -0
  91. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/configs/config_bad.ini +0 -0
  92. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/examples.py +0 -0
  93. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/__init__.py +0 -0
  94. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_annotations.py +0 -0
  95. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_fuzzed.py +0 -0
  96. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_generic_wrapper.py +0 -0
  97. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_griggio.py +0 -0
  98. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_model_validation.py +0 -0
  99. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_examples.py +0 -0
  100. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_extensibility.py +0 -0
  101. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_lra.py +0 -0
  102. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_arrays.py +0 -0
  103. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_lia.py +0 -0
  104. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_lira.py +0 -0
  105. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_lra.py +0 -0
  106. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_nia.py +0 -0
  107. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_nra.py +0 -0
  108. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_uf.py +0 -0
  109. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_qf_ufbv.py +0 -0
  110. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_parser_type_error.py +0 -0
  111. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/smtlib/test_smtlibscript.py +0 -0
  112. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_array.py +0 -0
  113. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_back.py +0 -0
  114. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_bdd.py +0 -0
  115. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_bv.py +0 -0
  116. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_configuration.py +0 -0
  117. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_constants.py +0 -0
  118. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_dwf.py +0 -0
  119. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_eager_model.py +0 -0
  120. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_env.py +0 -0
  121. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_euf.py +0 -0
  122. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_formula.py +0 -0
  123. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_hr_parsing.py +0 -0
  124. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_imports.py +0 -0
  125. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_int.py +0 -0
  126. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_interpolation.py +0 -0
  127. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_lira.py +0 -0
  128. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_logics.py +0 -0
  129. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_models.py +0 -0
  130. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_native_qe.py +0 -0
  131. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_oracles.py +0 -0
  132. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_printing.py +0 -0
  133. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_regressions.py +0 -0
  134. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_shannon_expansion.py +0 -0
  135. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_size.py +0 -0
  136. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_sorts.py +0 -0
  137. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_string.py +0 -0
  138. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_typechecker.py +0 -0
  139. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_unsat_cores.py +0 -0
  140. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_walker_ext.py +0 -0
  141. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/test/test_walkers.py +0 -0
  142. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/type_checker.py +0 -0
  143. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/typing.py +0 -0
  144. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/utils.py +0 -0
  145. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/walkers/__init__.py +0 -0
  146. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/walkers/dag.py +0 -0
  147. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/walkers/generic.py +0 -0
  148. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/walkers/identitydag.py +0 -0
  149. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/pysmt/walkers/tree.py +0 -0
  150. {PySMT-0.9.6.dev65 → PySMT-0.9.7.dev104}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: PySMT
3
- Version: 0.9.6.dev65
3
+ Version: 0.9.7.dev104
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
@@ -30,7 +30,7 @@ Description: ============================================================
30
30
 
31
31
  * MathSAT (http://mathsat.fbk.eu/)
32
32
  * Z3 (https://github.com/Z3Prover/z3/)
33
- * CVC4 (http://cvc4.cs.nyu.edu/web/)
33
+ * cvc5 (https://cvc5.github.io/)
34
34
  * Yices 2 (http://yices.csl.sri.com/)
35
35
  * CUDD (http://vlsi.colorado.edu/~fabio/CUDD/)
36
36
  * PicoSAT (http://fmv.jku.at/picosat/)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: PySMT
3
- Version: 0.9.6.dev65
3
+ Version: 0.9.7.dev104
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
@@ -30,7 +30,7 @@ Description: ============================================================
30
30
 
31
31
  * MathSAT (http://mathsat.fbk.eu/)
32
32
  * Z3 (https://github.com/Z3Prover/z3/)
33
- * CVC4 (http://cvc4.cs.nyu.edu/web/)
33
+ * cvc5 (https://cvc5.github.io/)
34
34
  * Yices 2 (http://yices.csl.sri.com/)
35
35
  * CUDD (http://vlsi.colorado.edu/~fabio/CUDD/)
36
36
  * PicoSAT (http://fmv.jku.at/picosat/)
@@ -45,7 +45,8 @@ pysmt/cmd/installers/__init__.py
45
45
  pysmt/cmd/installers/base.py
46
46
  pysmt/cmd/installers/bdd.py
47
47
  pysmt/cmd/installers/btor.py
48
- pysmt/cmd/installers/cvc4.py
48
+ pysmt/cmd/installers/cvcfive.py
49
+ pysmt/cmd/installers/cvcfour.py
49
50
  pysmt/cmd/installers/msat.py
50
51
  pysmt/cmd/installers/pico.py
51
52
  pysmt/cmd/installers/yices.py
@@ -62,7 +63,8 @@ pysmt/smtlib/parser/parser.py
62
63
  pysmt/solvers/__init__.py
63
64
  pysmt/solvers/bdd.py
64
65
  pysmt/solvers/btor.py
65
- pysmt/solvers/cvc4.py
66
+ pysmt/solvers/cvcfive.py
67
+ pysmt/solvers/cvcfour.py
66
68
  pysmt/solvers/eager.py
67
69
  pysmt/solvers/interpolation.py
68
70
  pysmt/solvers/msat.py
@@ -84,7 +86,7 @@ pysmt/test/test_bv_simplification.py
84
86
  pysmt/test/test_cnf.py
85
87
  pysmt/test/test_configuration.py
86
88
  pysmt/test/test_constants.py
87
- pysmt/test/test_cvc4_quantifiers.py
89
+ pysmt/test/test_cvc_quantifiers.py
88
90
  pysmt/test/test_dwf.py
89
91
  pysmt/test/test_eager_model.py
90
92
  pysmt/test/test_env.py
@@ -105,7 +105,7 @@ solving using multiple solvers and multiple solver configurations.
105
105
  x, y = Symbol("x"), Symbol("y")
106
106
  f = x.Implies(y)
107
107
 
108
- with Portfolio(["cvc4",
108
+ with Portfolio(["cvc5",
109
109
  "yices",
110
110
  ("msat", {"random_seed": 1}),
111
111
  ("msat", {"random_seed": 17}),
@@ -167,7 +167,7 @@ combinations. The following solvers are supported through native APIs:
167
167
 
168
168
  * MathSAT (http://mathsat.fbk.eu/)
169
169
  * Z3 (https://github.com/Z3Prover/z3/)
170
- * CVC4 (http://cvc4.cs.nyu.edu/web/)
170
+ * cvc5 (https://cvc5.github.io/)
171
171
  * Yices 2 (http://yices.csl.sri.com/)
172
172
  * CUDD (http://vlsi.colorado.edu/~fabio/CUDD/)
173
173
  * PicoSAT (http://fmv.jku.at/picosat/)
@@ -239,7 +239,7 @@ each of the available solvers.
239
239
  +------------------+-----------+--------------------------------+-------------+------------------------+------------+--------------+
240
240
  | Z3 | z3 | UF, LIA, LRA, BV, AX, NRA, NIA | Yes | z3 | Yes | No |
241
241
  +------------------+-----------+--------------------------------+-------------+------------------------+------------+--------------+
242
- | CVC4 | cvc4 | UF, LIA, LRA, BV, AX, S | Yes | No | No | No |
242
+ | cvc5 | cvc5 | UF, LIA, LRA, BV, AX, S | Yes | No | No | No |
243
243
  +------------------+-----------+--------------------------------+-------------+------------------------+------------+--------------+
244
244
  | Yices | yices | UF, LIA, LRA, BV | No | No | No | No |
245
245
  +------------------+-----------+--------------------------------+-------------+------------------------+------------+--------------+
@@ -1,6 +1,43 @@
1
1
  Change Log
2
2
  ==========
3
3
 
4
+ 0.9.6: 2022-06-24 -- CVC5 and upgraded solvers
5
+ ----------------------------------------------
6
+
7
+ **What's Changed**:
8
+
9
+ * Fixed issue #613 by @mikand in https://github.com/pysmt/pysmt/pull/710 - Thanks @ekiwi for reporting
10
+ * Fix missing file in Manifest by @marcogario in https://github.com/pysmt/pysmt/pull/718
11
+ * Upgrade MathSAT to 5.6.6 by @marcogario in https://github.com/pysmt/pysmt/pull/720
12
+ * CI: Avoid running on PR branch push by @marcogario in https://github.com/pysmt/pysmt/pull/721
13
+ * Upgrade MathSAT to 5.6.7 by @marcogario in https://github.com/pysmt/pysmt/pull/719
14
+ * Fix misspellings by @jayvdb in https://github.com/pysmt/pysmt/pull/724
15
+ * Upgrade Z3 to 4.8.17 by @marcogario in https://github.com/pysmt/pysmt/pull/723
16
+ * make FormulaContextualizer singleton in FormulaManager. by @enmag in https://github.com/pysmt/pysmt/pull/698
17
+ * README: Remove interpolants from Z3 by @marcogario in https://github.com/pysmt/pysmt/pull/727
18
+ * Parse logic str in Portfolio by @marcogario in https://github.com/pysmt/pysmt/pull/726
19
+ * Make sudoku.py Python3 compatible by @akumm2k in https://github.com/pysmt/pysmt/pull/734
20
+ * Fix the definition of BVXnor by @YikeZhou in https://github.com/pysmt/pysmt/pull/748
21
+ * Deterministic get_closer_logic by @marcogario in https://github.com/pysmt/pysmt/pull/733
22
+ * Grammar correction by @quantik-git in https://github.com/pysmt/pysmt/pull/750
23
+ * example/parallel.py: typo fix by @tias in https://github.com/pysmt/pysmt/pull/755
24
+ * Fix for pyximport by @marcogario in https://github.com/pysmt/pysmt/pull/766
25
+ * Remove deprecated distutils by @marcogario in https://github.com/pysmt/pysmt/pull/765
26
+ * Fixed removed imp module in Python 3.12 by @cybaol in https://github.com/pysmt/pysmt/pull/770
27
+ * [Boolector] Add support for const arrays and boolean indices/elements by @nbailluet in https://github.com/pysmt/pysmt/pull/771
28
+ * Update of all solvers by @mikand in https://github.com/pysmt/pysmt/pull/761
29
+
30
+ ## New Contributors
31
+ * @jayvdb made their first contribution in https://github.com/pysmt/pysmt/pull/724
32
+ * @akumm2k made their first contribution in https://github.com/pysmt/pysmt/pull/734
33
+ * @YikeZhou made their first contribution in https://github.com/pysmt/pysmt/pull/748
34
+ * @quantik-git made their first contribution in https://github.com/pysmt/pysmt/pull/750
35
+ * @tias made their first contribution in https://github.com/pysmt/pysmt/pull/755
36
+ * @cybaol made their first contribution in https://github.com/pysmt/pysmt/pull/770
37
+ * @nbailluet made their first contribution in https://github.com/pysmt/pysmt/pull/771
38
+
39
+ **Full Changelog**: https://github.com/pysmt/pysmt/compare/v0.9.5...v0.9.6
40
+
4
41
  0.9.5: 2022-05-28 -- 2 years of bugfixes
5
42
  ----------------------------------------
6
43
 
@@ -8,7 +45,7 @@ Intermediate release that collects 2 years of bugfixes and improvements.
8
45
 
9
46
  Python 2 was deprecated in version 0.9.0, and this version removes the use of compatible code for that version.
10
47
 
11
- ## What's Changed
48
+ **What's Changed**:
12
49
 
13
50
  * Add support for boolean-typed array in the AtomsOracle by @mikand in https://github.com/pysmt/pysmt/pull/644
14
51
  * Switched from nosetests to pytest by @mikand in https://github.com/pysmt/pysmt/pull/662
@@ -18,7 +18,7 @@ solver. Moreover, pySMT can leverage the API of the following solvers:
18
18
 
19
19
  * MathSAT (http://mathsat.fbk.eu/)
20
20
  * Z3 (https://github.com/Z3Prover/z3/)
21
- * CVC4 (http://cvc4.cs.nyu.edu/web/)
21
+ * cvc5 (https://cvc5.github.io/)
22
22
  * Yices 2 (http://yices.csl.sri.com/)
23
23
  * CUDD (http://vlsi.colorado.edu/~fabio/CUDD/)
24
24
  * PicoSAT (http://fmv.jku.at/picosat/)
@@ -204,7 +204,7 @@ Solver pySMT name
204
204
  ========= ==========
205
205
  MathSAT msat
206
206
  Z3 z3
207
- CVC4 cvc4
207
+ cvc5 cvc5
208
208
  Yices yices
209
209
  Boolector btor
210
210
  Picosat picosat
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- VERSION = (0, 9, 6, "dev", 65)
19
+ VERSION = (0, 9, 7, "dev", 104)
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
@@ -41,6 +41,11 @@ def check_version(module):
41
41
  import pyboolector
42
42
  version = "OK" # Just checking if import succeeds
43
43
 
44
+ elif module == "cvc5":
45
+ import cvc5
46
+ solver = cvc5.Solver()
47
+ version = solver.getVersion().decode('ascii')
48
+
44
49
  elif module == "cvc4":
45
50
  import CVC4
46
51
  version = CVC4.Configuration_getVersionString()
@@ -50,11 +55,8 @@ def check_version(module):
50
55
  version = picosat.picosat_version()
51
56
 
52
57
  elif module == "yices":
53
- import yicespy
54
- v = yicespy.__dict__['__YICES_VERSION']
55
- m = yicespy.__dict__['__YICES_VERSION_MAJOR']
56
- p = yicespy.__dict__['__YICES_VERSION_PATCHLEVEL']
57
- version = "%d.%d.%d" % (v, m, p)
58
+ import yices_api
59
+ version = yices_api.yices_python_version
58
60
  else:
59
61
  print("Invalid argument '%s'" % module)
60
62
  exit(-2)
@@ -20,8 +20,8 @@ import platform
20
20
  from collections import namedtuple
21
21
 
22
22
  from pysmt.cmd.installers import MSatInstaller, Z3Installer, PicoSATInstaller
23
- from pysmt.cmd.installers import CVC4Installer, YicesInstaller, BtorInstaller
24
- from pysmt.cmd.installers import CuddInstaller
23
+ from pysmt.cmd.installers import CVC5Installer, YicesInstaller, BtorInstaller
24
+ from pysmt.cmd.installers import CuddInstaller, CVC4Installer
25
25
  from pysmt.cmd.installers.base import solver_install_site
26
26
 
27
27
  from pysmt.environment import get_env
@@ -32,13 +32,13 @@ 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.7", {}),
35
+ Installer(MSatInstaller, "5.6.10", {}),
36
+ Installer(CVC5Installer, "1.1.2", {}),
36
37
  Installer(CVC4Installer, "1.7-prerelease",
37
38
  {"git_version" : "391ab9df6c3fd9a3771864900c1718534c1e4666"}),
38
- Installer(Z3Installer, "4.8.17", {"osx": "10.16"}),
39
- Installer(YicesInstaller, "2.6.2",
40
- {"yicespy_version": "f0768ffeec15ea310f830d10878971c9998454ac"}),
41
- Installer(BtorInstaller, "3.2.1", {}),
39
+ Installer(Z3Installer, "4.13.0", {}),
40
+ Installer(YicesInstaller, "2.6.4", {"yices_api_version": "1.1.5"}),
41
+ Installer(BtorInstaller, "3.2.3", {}),
42
42
  Installer(PicoSATInstaller, "965",
43
43
  {"pypicosat_minor_version" : "1708010052"}),
44
44
  Installer(CuddInstaller, "2.0.3",
@@ -56,7 +56,7 @@ def get_requested_solvers():
56
56
  keys = requested_solvers_str.split(",")
57
57
  requested_solvers = [x.lower().strip() for x in keys]
58
58
  if "all" in requested_solvers:
59
- requested_solvers = [x.InstallerClass.SOLVER for x in INSTALLERS]
59
+ requested_solvers = [x.InstallerClass.SOLVER for x in INSTALLERS if x != "cvc4"]
60
60
  return requested_solvers
61
61
 
62
62
 
@@ -206,7 +206,7 @@ def main():
206
206
  all_solvers = options.all_solvers
207
207
  for i in INSTALLERS:
208
208
  name = i.InstallerClass.SOLVER
209
- if all_solvers or getattr(options, name):
209
+ if (all_solvers and name != "cvc4") or getattr(options, name):
210
210
  solvers_to_install.append(i)
211
211
 
212
212
  # Env variable controlling the solvers to be installed or checked
@@ -14,11 +14,12 @@
14
14
 
15
15
  from pysmt.cmd.installers.msat import MSatInstaller
16
16
  from pysmt.cmd.installers.z3 import Z3Installer
17
- from pysmt.cmd.installers.cvc4 import CVC4Installer
17
+ from pysmt.cmd.installers.cvcfive import CVC5Installer
18
+ from pysmt.cmd.installers.cvcfour import CVC4Installer
18
19
  from pysmt.cmd.installers.yices import YicesInstaller
19
20
  from pysmt.cmd.installers.btor import BtorInstaller
20
21
  from pysmt.cmd.installers.pico import PicoSATInstaller
21
22
  from pysmt.cmd.installers.bdd import CuddInstaller
22
23
 
23
- assert MSatInstaller and Z3Installer and CVC4Installer and YicesInstaller
24
- assert BtorInstaller and PicoSATInstaller and CuddInstaller
24
+ assert MSatInstaller and Z3Installer and CVC5Installer and YicesInstaller
25
+ assert BtorInstaller and PicoSATInstaller and CuddInstaller and CVC4Installer
@@ -98,7 +98,7 @@ class SolverInstaller(object):
98
98
 
99
99
  def download(self):
100
100
  """Downloads the archive from one of the mirrors"""
101
- if not os.path.exists(self.archive_path):
101
+ if self.archive_path and not os.path.exists(self.archive_path):
102
102
  for turn in range(self.trials_404):
103
103
  for i, link in enumerate(self.download_links()):
104
104
  try:
@@ -115,15 +115,16 @@ class SolverInstaller(object):
115
115
 
116
116
  def unpack(self):
117
117
  """Unpacks the archive"""
118
- path = self.archive_path
119
- if path.endswith(".zip"):
120
- SolverInstaller.unzip(path, directory=self.base_dir)
121
- elif path.endswith(".tar.bz2"):
122
- SolverInstaller.untar(path, directory=self.base_dir, mode='r:bz2')
123
- elif path.endswith(".tar.gz"):
124
- SolverInstaller.untar(path, directory=self.base_dir)
125
- else:
126
- raise ValueError("Unsupported archive for extraction: %s" % path)
118
+ if self.archive_path:
119
+ path = self.archive_path
120
+ if path.endswith(".zip"):
121
+ SolverInstaller.unzip(path, directory=self.base_dir)
122
+ elif path.endswith(".tar.bz2"):
123
+ SolverInstaller.untar(path, directory=self.base_dir, mode='r:bz2')
124
+ elif path.endswith(".tar.gz"):
125
+ SolverInstaller.untar(path, directory=self.base_dir)
126
+ else:
127
+ raise ValueError("Unsupported archive for extraction: %s" % path)
127
128
 
128
129
  def compile(self):
129
130
  """Performs the compilation if needed"""
@@ -0,0 +1,42 @@
1
+ # Copyright 2014 Andrea Micheli and Marco Gario
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ from __future__ import absolute_import
15
+
16
+ import os
17
+ import sys
18
+ import multiprocessing
19
+
20
+ from pysmt.cmd.installers.base import SolverInstaller
21
+
22
+
23
+ class CVC5Installer(SolverInstaller):
24
+
25
+ SOLVER = "cvc5"
26
+
27
+ def __init__(self, install_dir, bindings_dir, solver_version,
28
+ mirror_link=None, git_tag='master'):
29
+ SolverInstaller.__init__(self, install_dir=install_dir,
30
+ bindings_dir=bindings_dir,
31
+ solver_version=solver_version,
32
+ mirror_link=mirror_link)
33
+
34
+ def move(self):
35
+ pass
36
+
37
+ def compile(self):
38
+ print(self.bindings_dir)
39
+ SolverInstaller.run_python("-m pip install --upgrade --target=%s cvc5==%s" % (self.bindings_dir, self.solver_version))
40
+
41
+ def get_installed_version(self):
42
+ return self.get_installed_version_script(self.bindings_dir, "cvc5")
@@ -103,10 +103,10 @@ class MSatInstaller(SolverInstaller):
103
103
  if f.endswith(".so") or f.endswith(".dll") or f.endswith(".dylib"):
104
104
  SolverInstaller.mv(os.path.join(libdir, f), self.bindings_dir)
105
105
 
106
- # Fix issue in MathSAT 5.5.1 linking to incorrect directory on OSX
106
+ # Fix issue in MathSAT 5.6.10 linking to incorrect directory on OSX
107
107
  if self.os_name == "darwin":
108
108
  soname = glob.glob(self.bindings_dir + "/_mathsat*.so")[0]
109
- old_path = "/Users/alb/src/build_mathsat5/opt/libmathsat.dylib"
109
+ old_path = "/Users/alb/src/release/build/libmathsat.dylib"
110
110
  new_path = "%s/libmathsat.dylib" % self.bindings_dir
111
111
  SolverInstaller.run("install_name_tool -change %s %s %s" %
112
112
  (old_path, new_path, soname))
@@ -23,7 +23,7 @@ class YicesInstaller(SolverInstaller):
23
23
  SOLVER = "yices"
24
24
 
25
25
  def __init__(self, install_dir, bindings_dir, solver_version,
26
- mirror_link=None, yicespy_version='HEAD'):
26
+ mirror_link=None, yices_api_version=None):
27
27
 
28
28
  archive_name = "Yices-%s.tar.gz" % (solver_version)
29
29
  native_link = "https://github.com/SRI-CSL/yices2/archive/{archive_name}"
@@ -34,29 +34,9 @@ class YicesInstaller(SolverInstaller):
34
34
  native_link=native_link,
35
35
  mirror_link=mirror_link)
36
36
 
37
+ self.yices_api_version = yices_api_version
37
38
  self.extract_path = os.path.join(self.base_dir, "yices2-Yices-%s" % self.solver_version)
38
- self.yices_path = os.path.join(self.bindings_dir, "yices_bin")
39
- self.yicespy_git_version = yicespy_version
40
-
41
- def install_yicespy(self):
42
- yicespy_git_version = self.yicespy_git_version
43
- yicespy_base_name = "yicespy"
44
- yicespy_archive_name = "%s.tar.gz" % yicespy_base_name
45
- yicespy_archive = os.path.join(self.base_dir, yicespy_archive_name)
46
- yicespy_dir_path = os.path.join(self.base_dir,
47
- yicespy_base_name + "-" + yicespy_git_version)
48
-
49
- yicespy_download_link = "https://codeload.github.com/pysmt/yicespy/tar.gz/%s" % (yicespy_git_version)
50
- SolverInstaller.do_download(yicespy_download_link, yicespy_archive)
51
-
52
- SolverInstaller.clean_dir(yicespy_dir_path)
53
-
54
- SolverInstaller.untar(yicespy_archive, self.base_dir)
55
- # Build yicespy
56
- SolverInstaller.run_python("setup.py --yices-dir=%s -- build_ext bdist_wheel --dist-dir=%s " % (self.yices_path, self.base_dir),
57
- directory=yicespy_dir_path)
58
- wheel_file = glob.glob(os.path.join(self.base_dir, "yicespy") + "*.whl")[0]
59
- SolverInstaller.unzip(wheel_file, self.bindings_dir)
39
+ self.yices_path = os.path.join(self.base_dir, "yices_bin")
60
40
 
61
41
  def compile(self):
62
42
  # Prepare an empty folder for installing yices
@@ -69,8 +49,21 @@ class YicesInstaller(SolverInstaller):
69
49
  SolverInstaller.run("make", directory=self.extract_path)
70
50
  SolverInstaller.run("make install", directory=self.extract_path)
71
51
 
72
- self.install_yicespy()
73
-
52
+ if self.yices_api_version is None:
53
+ SolverInstaller.run_python("-m pip install --upgrade --target=%s yices" % self.bindings_dir)
54
+ else:
55
+ SolverInstaller.run_python("-m pip install --upgrade --target=%s yices==%s" % (self.bindings_dir, self.yices_api_version))
56
+
57
+ libdir = os.path.join(self.yices_path, "lib")
58
+ yices_api_file = os.path.join(self.bindings_dir, "yices_api.py")
59
+ with open(yices_api_file, 'r') as f:
60
+ lines = f.readlines()
61
+ if "sys.stderr.write" in lines[215]:
62
+ lines.pop(215)
63
+ if "else" in lines[226]:
64
+ lines.insert(226, " if _loadYicesFromPath('%s', libyicespath):\n return\n" % libdir)
65
+ with open(yices_api_file, 'w') as f:
66
+ f.write("".join(lines))
74
67
 
75
68
  def get_installed_version(self):
76
69
  return self.get_installed_version_script(self.bindings_dir, "yices")
@@ -0,0 +1,38 @@
1
+ # Copyright 2014 Andrea Micheli and Marco Gario
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ from __future__ import absolute_import
15
+
16
+ import os
17
+ import glob
18
+
19
+ from pysmt.cmd.installers.base import SolverInstaller
20
+
21
+
22
+ class Z3Installer(SolverInstaller):
23
+
24
+ SOLVER = "z3"
25
+
26
+ def __init__(self, install_dir, bindings_dir, solver_version,
27
+ mirror_link=None):
28
+
29
+ SolverInstaller.__init__(self, install_dir=install_dir,
30
+ bindings_dir=bindings_dir,
31
+ solver_version=solver_version,
32
+ mirror_link=mirror_link)
33
+
34
+ def compile(self):
35
+ SolverInstaller.run_python("-m pip install --upgrade --target=%s z3-solver==%s" % (self.bindings_dir, self.solver_version))
36
+
37
+ def get_installed_version(self):
38
+ return self.get_installed_version_script(self.bindings_dir, "z3")
@@ -21,7 +21,7 @@ The following is an example of configuration file.
21
21
 
22
22
  [global]
23
23
  use_infix_notation: true
24
- solver_preference_list: msat z3 cvc4 z3-smt mathsat-smt
24
+ solver_preference_list: msat z3 cvc5 z3-smt mathsat-smt
25
25
 
26
26
  [smtlibsolver z3-smt]
27
27
  command: z3 -smt2 -in
@@ -182,6 +182,15 @@ if USE_Z3:
182
182
  def __hash__(self):
183
183
  return hash(self.sexpr())
184
184
 
185
+ def __del__(self):
186
+ # This might be a small memory leak, but it seems that Z3 does not
187
+ # like subclassing z3.z3num.Numeral
188
+ #
189
+ # For some reason, it performs a double free, we need to investigate
190
+ # if this is a pysmt issue or a z3 issue. For now, we accept the
191
+ # minimal memory leak of the algebraic constants
192
+ pass
193
+
185
194
  else:
186
195
  class Numeral(object):
187
196
  """Represents a Number (Algebraic)"""
@@ -38,8 +38,8 @@ from pysmt.solvers.qelim import (ShannonQuantifierEliminator,
38
38
  from pysmt.solvers.solver import SolverOptions
39
39
  from pysmt.solvers.portfolio import Portfolio
40
40
 
41
- DEFAULT_SOLVER_PREFERENCE_LIST = ['msat', 'z3', 'cvc4', 'yices', 'btor',
42
- 'picosat', 'bdd']
41
+ DEFAULT_SOLVER_PREFERENCE_LIST = ['msat', 'z3', 'cvc5', 'yices', 'btor',
42
+ 'picosat', 'bdd', 'cvc4']
43
43
  DEFAULT_QELIM_PREFERENCE_LIST = ['z3', 'msat_fm', 'msat_lw', 'bdd',
44
44
  'shannon', 'selfsub']
45
45
  DEFAULT_INTERPOLATION_PREFERENCE_LIST = ['msat']
@@ -230,7 +230,13 @@ class Factory(object):
230
230
  pass
231
231
 
232
232
  try:
233
- from pysmt.solvers.cvc4 import CVC4Solver
233
+ from pysmt.solvers.cvcfive import CVC5Solver
234
+ installed_solvers['cvc5'] = CVC5Solver
235
+ except SolverAPINotFound:
236
+ pass
237
+
238
+ try:
239
+ from pysmt.solvers.cvcfour import CVC4Solver
234
240
  installed_solvers['cvc4'] = CVC4Solver
235
241
  except SolverAPINotFound:
236
242
  pass
@@ -598,7 +604,7 @@ class Factory(object):
598
604
  # If PYSMT_SOLVER is "None" (literal None), the preference list will be empty
599
605
  #
600
606
  # Otherwise PYSMT_SOLVER is treated as a comma-separated list: e.g.
601
- # "msat, z3, cvc4"
607
+ # "msat, z3, cvc5"
602
608
  #
603
609
  import os
604
610
  ENV_SOLVER_LIST = os.environ.get("PYSMT_SOLVER")
@@ -90,6 +90,14 @@ else:
90
90
  else:
91
91
  import pyximport._pyximport3 as pyximport
92
92
 
93
+ if not hasattr(pyximport, "build_module"):
94
+ import sys
95
+ if sys.version_info < (3, 5):
96
+ # _pyximport3 module requires at least Python 3.5
97
+ import pyximport._pyximport2 as pyximport
98
+ else:
99
+ import pyximport._pyximport3 as pyximport
100
+
93
101
  pyx = pyximport.install()
94
102
  pyximport.uninstall(*pyx)
95
103
  build_dir = os.path.join(os.path.expanduser('~'), '.pyxbld')