PySMT 0.9.7.dev408__tar.gz → 0.9.7.dev414__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 (164) hide show
  1. {pysmt-0.9.7.dev408/PySMT.egg-info → pysmt-0.9.7.dev414}/PKG-INFO +1 -1
  2. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414/PySMT.egg-info}/PKG-INFO +1 -1
  3. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/__init__.py +1 -1
  4. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/substituter.py +5 -3
  5. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_walkers.py +16 -1
  6. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/LICENSE +0 -0
  7. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/MANIFEST.in +0 -0
  8. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/NOTICE +0 -0
  9. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/PySMT.egg-info/SOURCES.txt +0 -0
  10. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/PySMT.egg-info/dependency_links.txt +0 -0
  11. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/PySMT.egg-info/entry_points.txt +0 -0
  12. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/PySMT.egg-info/top_level.txt +0 -0
  13. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/README.rst +0 -0
  14. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/docs/CHANGES.rst +0 -0
  15. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/docs/api_ref.rst +0 -0
  16. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/docs/development.rst +0 -0
  17. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/docs/getting_started.rst +0 -0
  18. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/docs/index.rst +0 -0
  19. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/docs/tutorials/boolean_logic.rst +0 -0
  20. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/docs/tutorials.rst +0 -0
  21. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/__main__.py +0 -0
  22. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/__init__.py +0 -0
  23. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/check_version.py +0 -0
  24. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/install.py +0 -0
  25. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/__init__.py +0 -0
  26. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/base.py +0 -0
  27. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/bdd.py +0 -0
  28. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/btor.py +0 -0
  29. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/cvcfive.py +0 -0
  30. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/cvcfour.py +0 -0
  31. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/msat.py +0 -0
  32. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/optimsat.py +0 -0
  33. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/pico.py +0 -0
  34. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/yices.py +0 -0
  35. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/installers/z3.py +0 -0
  36. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/cmd/shell.py +0 -0
  37. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/configuration.py +0 -0
  38. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/constants.py +0 -0
  39. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/decorators.py +0 -0
  40. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/environment.py +0 -0
  41. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/exceptions.py +0 -0
  42. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/factory.py +0 -0
  43. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/fnode.py +0 -0
  44. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/formula.py +0 -0
  45. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/logics.py +0 -0
  46. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/operators.py +0 -0
  47. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/optimization/__init__.py +0 -0
  48. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/optimization/goal.py +0 -0
  49. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/optimization/msat.py +0 -0
  50. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/optimization/optimizer.py +0 -0
  51. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/optimization/optimsat.py +0 -0
  52. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/optimization/yices.py +0 -0
  53. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/optimization/z3.py +0 -0
  54. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/oracles.py +0 -0
  55. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/parsing.py +0 -0
  56. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/printers.py +0 -0
  57. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/rewritings.py +0 -0
  58. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/shortcuts.py +0 -0
  59. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/simplifier.py +0 -0
  60. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/__init__.py +0 -0
  61. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/annotations.py +0 -0
  62. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/commands.py +0 -0
  63. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/parser/__init__.py +0 -0
  64. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/parser/parser.py +0 -0
  65. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/printers.py +0 -0
  66. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/script.py +0 -0
  67. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/solver.py +0 -0
  68. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/smtlib/utils.py +0 -0
  69. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/__init__.py +0 -0
  70. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/bdd.py +0 -0
  71. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/btor.py +0 -0
  72. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/cvcfive.py +0 -0
  73. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/cvcfour.py +0 -0
  74. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/dynmsat.py +0 -0
  75. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/eager.py +0 -0
  76. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/interpolation.py +0 -0
  77. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/msat.py +0 -0
  78. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/options.py +0 -0
  79. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/pico.py +0 -0
  80. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/portfolio.py +0 -0
  81. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/qelim.py +0 -0
  82. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/smtlib.py +0 -0
  83. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/solver.py +0 -0
  84. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/yices.py +0 -0
  85. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/solvers/z3.py +0 -0
  86. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/__init__.py +0 -0
  87. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/configs/config1.ini +0 -0
  88. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/configs/config_bad.ini +0 -0
  89. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/examples.py +0 -0
  90. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/omt_examples.py +0 -0
  91. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/optimization_utils.py +0 -0
  92. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/__init__.py +0 -0
  93. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/parser_utils.py +0 -0
  94. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_annotations.py +0 -0
  95. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_fuzzed.py +0 -0
  96. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_generic_wrapper.py +0 -0
  97. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_griggio.py +0 -0
  98. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_model_validation.py +0 -0
  99. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_omt_lib_solver.py +0 -0
  100. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_examples.py +0 -0
  101. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_extensibility.py +0 -0
  102. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_lra.py +0 -0
  103. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_omt.py +0 -0
  104. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_arrays.py +0 -0
  105. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_lia.py +0 -0
  106. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_lira.py +0 -0
  107. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_lra.py +0 -0
  108. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_nia.py +0 -0
  109. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_nra.py +0 -0
  110. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_uf.py +0 -0
  111. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_qf_ufbv.py +0 -0
  112. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_parser_type_error.py +0 -0
  113. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/smtlib/test_smtlibscript.py +0 -0
  114. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_array.py +0 -0
  115. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_back.py +0 -0
  116. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_bdd.py +0 -0
  117. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_bv.py +0 -0
  118. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_bv_simplification.py +0 -0
  119. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_cnf.py +0 -0
  120. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_configuration.py +0 -0
  121. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_constants.py +0 -0
  122. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_cvc_quantifiers.py +0 -0
  123. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_dwf.py +0 -0
  124. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_eager_model.py +0 -0
  125. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_env.py +0 -0
  126. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_euf.py +0 -0
  127. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_formula.py +0 -0
  128. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_hr_parsing.py +0 -0
  129. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_imports.py +0 -0
  130. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_int.py +0 -0
  131. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_interpolation.py +0 -0
  132. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_lira.py +0 -0
  133. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_logics.py +0 -0
  134. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_models.py +0 -0
  135. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_native_qe.py +0 -0
  136. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_nia.py +0 -0
  137. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_nlira.py +0 -0
  138. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_optimization.py +0 -0
  139. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_optimizing.py +0 -0
  140. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_oracles.py +0 -0
  141. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_portfolio.py +0 -0
  142. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_printing.py +0 -0
  143. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_qe.py +0 -0
  144. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_regressions.py +0 -0
  145. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_rewritings.py +0 -0
  146. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_shannon_expansion.py +0 -0
  147. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_simplify.py +0 -0
  148. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_size.py +0 -0
  149. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_solving.py +0 -0
  150. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_sorts.py +0 -0
  151. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_string.py +0 -0
  152. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_typechecker.py +0 -0
  153. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_unsat_cores.py +0 -0
  154. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/test/test_walker_ext.py +0 -0
  155. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/type_checker.py +0 -0
  156. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/typing.py +0 -0
  157. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/utils.py +0 -0
  158. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/walkers/__init__.py +0 -0
  159. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/walkers/dag.py +0 -0
  160. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/walkers/generic.py +0 -0
  161. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/walkers/identitydag.py +0 -0
  162. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/pysmt/walkers/tree.py +0 -0
  163. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/setup.cfg +0 -0
  164. {pysmt-0.9.7.dev408 → pysmt-0.9.7.dev414}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PySMT
3
- Version: 0.9.7.dev408
3
+ Version: 0.9.7.dev414
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PySMT
3
- Version: 0.9.7.dev408
3
+ Version: 0.9.7.dev414
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
@@ -19,7 +19,7 @@
19
19
  from typing import Tuple, Union
20
20
 
21
21
 
22
- VERSION: Union[Tuple[int, int, int], Tuple[int, int, int, str, int]] = (0, 9, 7, "dev", 408)
22
+ VERSION: Union[Tuple[int, int, int], Tuple[int, int, int, str, int]] = (0, 9, 7, "dev", 414)
23
23
 
24
24
  # Try to provide human-readable version of latest commit for dev versions
25
25
  # E.g. v0.5.1-4-g49a49f2-wip
@@ -151,7 +151,8 @@ class Substituter(pysmt.walkers.IdentityDagWalker):
151
151
  # 2. We apply the substitution on the quantifier body with
152
152
  # the new 'reduced' map
153
153
  sub = self.__class__(self.env)
154
- res_formula = sub.substitute(formula.arg(0), new_subs)
154
+ res_formula = sub.substitute(formula.arg(0), subs=new_subs,
155
+ interpretations=kwargs.get('interpretations', None))
155
156
 
156
157
  # 3. We invoke the relevant function (walk_exists or
157
158
  # walk_forall) to compute the substitution
@@ -304,8 +305,9 @@ class MSSubstituter(Substituter):
304
305
  def __init__(self, env):
305
306
  Substituter.__init__(self, env=env)
306
307
 
307
- def substitute(self, formula, subs):
308
- return Substituter.substitute(self, formula, subs)
308
+ def substitute(self, formula, subs=None, interpretations=None):
309
+ return Substituter.substitute(self, formula, subs,
310
+ interpretations=interpretations)
309
311
 
310
312
  def _substitute(self, formula, substitutions):
311
313
  """Returns the substitution for formula, if one is defined, otherwise
@@ -26,7 +26,7 @@ from pysmt.test import TestCase, main
26
26
  from pysmt.formula import FormulaManager
27
27
  from pysmt.test.examples import get_example_formulae
28
28
  from pysmt.exceptions import UnsupportedOperatorError, PysmtTypeError
29
- from pysmt.substituter import MSSubstituter, MGSubstituter
29
+ from pysmt.substituter import FunctionInterpretation, MSSubstituter, MGSubstituter
30
30
 
31
31
 
32
32
  class TestWalkers(TestCase):
@@ -78,6 +78,21 @@ class TestWalkers(TestCase):
78
78
  with self.assertRaisesRegex(PysmtTypeError, "substitute()"):
79
79
  substitute(f, {x:x})
80
80
 
81
+ def test_substituter_interpretations_in_quantifiers(self):
82
+ x = Symbol("x", INT)
83
+ UF_XOR = Symbol('uf_xor', FunctionType(INT, [INT, INT]))
84
+ f = ForAll([x], Equals(Function(UF_XOR, [x, x]), Int(0)))
85
+
86
+ class XORInterpreter(FunctionInterpretation):
87
+ def __init__(self): pass
88
+ def interpret(self, env, args):
89
+ if args[0] == args[1]: return Int(0)
90
+ return Function(UF_XOR, args)
91
+
92
+ subs = f.substitute({}, interpretations={UF_XOR: XORInterpreter()})
93
+
94
+ self.assertEqual(subs, ForAll([x], Equals(Int(0), Int(0))))
95
+
81
96
  def test_undefined_node(self):
82
97
  varA = Symbol("At", INT)
83
98
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes