PySMT 0.9.6.dev65__py2.py3-none-any.whl → 0.9.7.dev104__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-0.9.6.dev65.dist-info → PySMT-0.9.7.dev104.dist-info}/METADATA +2 -2
- {PySMT-0.9.6.dev65.dist-info → PySMT-0.9.7.dev104.dist-info}/RECORD +36 -34
- pysmt/__init__.py +1 -1
- pysmt/cmd/check_version.py +7 -5
- pysmt/cmd/install.py +9 -9
- pysmt/cmd/installers/__init__.py +4 -3
- pysmt/cmd/installers/base.py +11 -10
- pysmt/cmd/installers/cvcfive.py +42 -0
- pysmt/cmd/installers/msat.py +2 -2
- pysmt/cmd/installers/yices.py +18 -25
- pysmt/cmd/installers/z3.py +3 -50
- pysmt/configuration.py +1 -1
- pysmt/constants.py +9 -0
- pysmt/factory.py +10 -4
- pysmt/smtlib/parser/__init__.py +8 -0
- pysmt/solvers/cvcfive.py +548 -0
- pysmt/solvers/yices.py +129 -112
- pysmt/test/configs/config1.ini +1 -1
- pysmt/test/smtlib/parser_utils.py +5 -2
- pysmt/test/test_bv_simplification.py +4 -2
- pysmt/test/test_cnf.py +2 -1
- pysmt/test/{test_cvc4_quantifiers.py → test_cvc_quantifiers.py} +7 -7
- pysmt/test/test_nia.py +10 -10
- pysmt/test/test_nlira.py +5 -2
- pysmt/test/test_portfolio.py +11 -11
- pysmt/test/test_qe.py +2 -2
- pysmt/test/test_rewritings.py +1 -1
- pysmt/test/test_simplify.py +2 -2
- pysmt/test/test_solving.py +14 -17
- {PySMT-0.9.6.dev65.dist-info → PySMT-0.9.7.dev104.dist-info}/LICENSE +0 -0
- {PySMT-0.9.6.dev65.dist-info → PySMT-0.9.7.dev104.dist-info}/NOTICE +0 -0
- {PySMT-0.9.6.dev65.dist-info → PySMT-0.9.7.dev104.dist-info}/WHEEL +0 -0
- {PySMT-0.9.6.dev65.dist-info → PySMT-0.9.7.dev104.dist-info}/entry_points.txt +0 -0
- {PySMT-0.9.6.dev65.dist-info → PySMT-0.9.7.dev104.dist-info}/top_level.txt +0 -0
- /pysmt/cmd/installers/{cvc4.py → cvcfour.py} +0 -0
- /pysmt/solvers/{cvc4.py → cvcfour.py} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PySMT
|
|
3
|
-
Version: 0.9.
|
|
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
|
|
@@ -32,7 +32,7 @@ The following solvers are supported through native APIs:
|
|
|
32
32
|
|
|
33
33
|
* MathSAT (http://mathsat.fbk.eu/)
|
|
34
34
|
* Z3 (https://github.com/Z3Prover/z3/)
|
|
35
|
-
*
|
|
35
|
+
* cvc5 (https://cvc5.github.io/)
|
|
36
36
|
* Yices 2 (http://yices.csl.sri.com/)
|
|
37
37
|
* CUDD (http://vlsi.colorado.edu/~fabio/CUDD/)
|
|
38
38
|
* PicoSAT (http://fmv.jku.at/picosat/)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
pysmt/__init__.py,sha256=
|
|
1
|
+
pysmt/__init__.py,sha256=KJugOyK6fEcU0mMk2bH5CVhNiTzjX1OYEO30Nifq734,1598
|
|
2
2
|
pysmt/__main__.py,sha256=rR-MV1QtLYqtVoJyY3m5B5Iz-lua0-5o6YSB0W4lKy8,1085
|
|
3
|
-
pysmt/configuration.py,sha256=
|
|
4
|
-
pysmt/constants.py,sha256=
|
|
3
|
+
pysmt/configuration.py,sha256=q4Ncd6f2d0VZUpyQAOR8sTPlTodgDnYhUBeRgYYXqTE,4539
|
|
4
|
+
pysmt/constants.py,sha256=QelM9r5fGWSq8UNjjYoEJK2FaLHRr4Z9NZxzjeajEWA,5249
|
|
5
5
|
pysmt/decorators.py,sha256=hBIKVkHlT0QD7H5yGmJIqn2MOafAZM-S2wPLvS2eB4c,3964
|
|
6
6
|
pysmt/environment.py,sha256=rdaxQ0uwmMPmcW4d5WnTYAyHNSCpRTgzRLaXQccG5-4,6522
|
|
7
7
|
pysmt/exceptions.py,sha256=uG3FochPO1Y18cv1lXUjQtNbW-qZKd68zqs8oo2OEF4,4420
|
|
8
|
-
pysmt/factory.py,sha256=
|
|
8
|
+
pysmt/factory.py,sha256=6QFbob7LV3x8uT4w2nG_rHqXWCqbwNg5oCUMPhpnwmY,24107
|
|
9
9
|
pysmt/fnode.py,sha256=zKZP4yda8JxK6AXW3vCasRLYsLH5NzK_2Bjiy5ogtqo,33256
|
|
10
10
|
pysmt/formula.py,sha256=baexe5-GgrG7z_qH3Wb9s8XQqFcBgyLXnv8Rik5t2YY,43318
|
|
11
11
|
pysmt/logics.py,sha256=yJ1Yv24dVj4LlpnbspgcRT1t5e65RmvGas_bdHOGCAA,28774
|
|
@@ -21,18 +21,19 @@ pysmt/type_checker.py,sha256=g5Mbh42ZxsjtLHnS0qizYLZ3kH3bMtNkIuyiZtTuinE,13273
|
|
|
21
21
|
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
|
-
pysmt/cmd/check_version.py,sha256=
|
|
25
|
-
pysmt/cmd/install.py,sha256=
|
|
24
|
+
pysmt/cmd/check_version.py,sha256=yeY_USo11j60iLjpNcAvq5gAj2i43IiOWcP1dwJS3Rw,2352
|
|
25
|
+
pysmt/cmd/install.py,sha256=l3a-eBhsBIKvR1PEeNM9WYvQH46Ie8vUOzzh6VmWVzs,10239
|
|
26
26
|
pysmt/cmd/shell.py,sha256=ww1juthvLnJQciVHWxYvTJaA5W3-Np0ORfESyePF0bI,4333
|
|
27
|
-
pysmt/cmd/installers/__init__.py,sha256=
|
|
28
|
-
pysmt/cmd/installers/base.py,sha256=
|
|
27
|
+
pysmt/cmd/installers/__init__.py,sha256=nHJaEXfCpsEkzBy0NL91P9extUda6jb0u88nwPYTvGo,1170
|
|
28
|
+
pysmt/cmd/installers/base.py,sha256=1usHiBHrIBam9BlbVKG-6F52KPsIkJBeghkd_ckh-8U,12811
|
|
29
29
|
pysmt/cmd/installers/bdd.py,sha256=Qq8YlYAVvxUqNXjoOlH9_Lhj4cj6WEt7HuhbSiF_L6k,2539
|
|
30
30
|
pysmt/cmd/installers/btor.py,sha256=0fsCJEKqQ_Y4HURYNct-F3ui8Zsk5qd4Gp0AWRXAUBo,4067
|
|
31
|
-
pysmt/cmd/installers/
|
|
32
|
-
pysmt/cmd/installers/
|
|
31
|
+
pysmt/cmd/installers/cvcfive.py,sha256=PRSuEd2_y2qQO0G3gUGtCsKB2PMV40C1WwjpgbJkefE,1493
|
|
32
|
+
pysmt/cmd/installers/cvcfour.py,sha256=uBZkKIX4gZEMfjrhrparUSDydMcvGIGZM2Y8JYD0GzE,3916
|
|
33
|
+
pysmt/cmd/installers/msat.py,sha256=euWgHJO9IBbb6Bpf2vQlQoJ6tfRy9TstT0o9LRyedS8,5418
|
|
33
34
|
pysmt/cmd/installers/pico.py,sha256=XJpVbY5YHboL3OEMBvjwv8QwKdJ7Y62Blb78tEGyMxU,3141
|
|
34
|
-
pysmt/cmd/installers/yices.py,sha256=
|
|
35
|
-
pysmt/cmd/installers/z3.py,sha256=
|
|
35
|
+
pysmt/cmd/installers/yices.py,sha256=M99P641jqGtAWOgQpAQzt4T1KwmSClw1VDEETzsSZe0,3010
|
|
36
|
+
pysmt/cmd/installers/z3.py,sha256=5wP6O-a602-y1cuEyr22bkdWnOWHx8bIaPQ24xDtxX8,1386
|
|
36
37
|
pysmt/smtlib/__init__.py,sha256=JXBHtcb4Lv-Sb8whc9JuGbRH2EBLWwtLUh3PL9HhNE8,650
|
|
37
38
|
pysmt/smtlib/annotations.py,sha256=BKL6CbUTVFxT-PojRNetfcPtor9ExAOzcxng0Ic25-k,4167
|
|
38
39
|
pysmt/smtlib/commands.py,sha256=RG0swe9N0r4i7TuiivjKbalm8pBeULDLd5TG9lAdy0U,1940
|
|
@@ -40,12 +41,13 @@ pysmt/smtlib/printers.py,sha256=jjX3qAHdbRd5BkKfMcjIrV305f43TDyZY0FwGFrEQRM,2455
|
|
|
40
41
|
pysmt/smtlib/script.py,sha256=4tATsRYDavjz1DVKXzfVVZxVXYOtBRhh4Ya0Ng4XxHY,13387
|
|
41
42
|
pysmt/smtlib/solver.py,sha256=dWBzYBuYDVyCsQI1KlqndxpqX4xHQUDcHAuefwbHv24,7987
|
|
42
43
|
pysmt/smtlib/utils.py,sha256=XNp7mW1DB6cZRtQhkAOTR-xrwYaGDBEcF3Q-edKDeU8,2043
|
|
43
|
-
pysmt/smtlib/parser/__init__.py,sha256=
|
|
44
|
+
pysmt/smtlib/parser/__init__.py,sha256=Tgl8AAjZPmCrABGmKRSC4Yu634mn8r22qn18M3u-pfk,4771
|
|
44
45
|
pysmt/smtlib/parser/parser.py,sha256=3eMEhW6t2XHSK_1EkGmjB4ZWrg6kWgfwVDVcyOxyWS0,58387
|
|
45
46
|
pysmt/solvers/__init__.py,sha256=JXBHtcb4Lv-Sb8whc9JuGbRH2EBLWwtLUh3PL9HhNE8,650
|
|
46
47
|
pysmt/solvers/bdd.py,sha256=my3398_-8Rkqy1pluzZa7_12qsA43ARbs8-YAPqdMWs,15938
|
|
47
48
|
pysmt/solvers/btor.py,sha256=DFBnYsa4oG8GC58UWvKf6FHwVK9AmnOQ8ytrEaYlZbI,25295
|
|
48
|
-
pysmt/solvers/
|
|
49
|
+
pysmt/solvers/cvcfive.py,sha256=z8o4VxrZBC6sdb_JYTWfRS3BXdWJPznakN3k7rD4EY8,21073
|
|
50
|
+
pysmt/solvers/cvcfour.py,sha256=odWm_MAgoPlhOf6gaarZQAqQS4fN-8PH-xGIYaiErQE,24538
|
|
49
51
|
pysmt/solvers/eager.py,sha256=Py2_XaFj7YIOotH3Zv14JhmyLiZPTxKwzLuLztFqNIs,3297
|
|
50
52
|
pysmt/solvers/interpolation.py,sha256=PYvn81xp5or_p3wE4-ReI5OMY06s7nzuNvM0zs9_XyI,1851
|
|
51
53
|
pysmt/solvers/msat.py,sha256=34PJPLIMZZmrhtq1N-L3qm38cI_I0kBWe-K_xMeDb5Q,54967
|
|
@@ -55,7 +57,7 @@ pysmt/solvers/portfolio.py,sha256=OrWMzlFugE9wsKSKGolwsB6atadkt0nE_3e3TGg-3k8,91
|
|
|
55
57
|
pysmt/solvers/qelim.py,sha256=Fjy54lbyIKahAzGajhaihXYQyYn97h83Ud2er-zjwcw,4822
|
|
56
58
|
pysmt/solvers/smtlib.py,sha256=6gGq-UdCVrrdmliCNl2RByyn5qMqBtVVDP_sB2jXiQ8,8998
|
|
57
59
|
pysmt/solvers/solver.py,sha256=lOOdtGKWaWdqQDLSUDS-GunZ60EeKJAYIVfmeimzuy0,17663
|
|
58
|
-
pysmt/solvers/yices.py,sha256=
|
|
60
|
+
pysmt/solvers/yices.py,sha256=ZU3iqj29oKnqDnDnPnfKvS1QBAGEMecrQgZ14qRsoUQ,24489
|
|
59
61
|
pysmt/solvers/z3.py,sha256=_XMiY04kJVdpyfBSN8p5qPaEsCjZ60uBr4na55Vcq1k,40768
|
|
60
62
|
pysmt/test/__init__.py,sha256=9YsAQOuHVQ4N8MzKN9U0eAfRjPiKBVH_D_xV1MJZjkg,4985
|
|
61
63
|
pysmt/test/examples.py,sha256=XymEXLmIZxMtS9qTfzrXYbi4DBaMTgPzd_ijKh1H2aM,39485
|
|
@@ -63,11 +65,11 @@ pysmt/test/test_array.py,sha256=OypmqKf_ciigxK1X_W2b9sm0EWOA3wqH376QXt7oGCM,6237
|
|
|
63
65
|
pysmt/test/test_back.py,sha256=3O7XTx4WfuizjT7-yueZq6oGG-uqovkie7R3A5GklTk,3372
|
|
64
66
|
pysmt/test/test_bdd.py,sha256=GsFiq0YQd3exbN9k2fCurKZlvDl3H2VAucYc9tKGKEc,6195
|
|
65
67
|
pysmt/test/test_bv.py,sha256=-pnOgslpMAeK9US4f_z4CU8LK0ZmDr-yceS1u1kwgps,12284
|
|
66
|
-
pysmt/test/test_bv_simplification.py,sha256=
|
|
67
|
-
pysmt/test/test_cnf.py,sha256=
|
|
68
|
+
pysmt/test/test_bv_simplification.py,sha256=gbXcSyjM9I9Zxlu5n43a66fW3RomarP2_DEj6IzYQTc,14637
|
|
69
|
+
pysmt/test/test_cnf.py,sha256=_pYNU9y06o5dJNK3zg7TINDHjI6FMduSayn7fyyxVp0,3363
|
|
68
70
|
pysmt/test/test_configuration.py,sha256=uyCmS8-cdeI844TGqmzHBlFPtHBJhT_mKrrWJUF0AN0,3757
|
|
69
71
|
pysmt/test/test_constants.py,sha256=wdqc9duJ8Ykt1LCxy2CL3Mt_7Gal5-bCVL7QT5GHS3s,4618
|
|
70
|
-
pysmt/test/
|
|
72
|
+
pysmt/test/test_cvc_quantifiers.py,sha256=a40NDyPKNynVpqq9M5pDTR8qFL_EumR8whw8escxP4I,1850
|
|
71
73
|
pysmt/test/test_dwf.py,sha256=nQubO2IYjW3NnRjNz3xkhpXgK_5coZp9uZ_U-ElmFRw,2850
|
|
72
74
|
pysmt/test/test_eager_model.py,sha256=hF9V8wQYXVeyW2Bo4sACa98xeJtfOMYjMvjWMHQaGag,3662
|
|
73
75
|
pysmt/test/test_env.py,sha256=tshVfiKotjMUNXl0RCo7-itTnVJimWGPyMkuGHX_B6I,4118
|
|
@@ -81,28 +83,28 @@ pysmt/test/test_lira.py,sha256=1B4y1y2U-5CttF6h22tniJkAedUDIwjp1Ad0_Ha_s-8,2175
|
|
|
81
83
|
pysmt/test/test_logics.py,sha256=Nppv0G7z0XIE8wHyWI3F04Vy1PY2iMVwvjyDcYBeS8A,6980
|
|
82
84
|
pysmt/test/test_models.py,sha256=npqGoF-3DgAw0DTx6se32ZEZRFBJDcnkppzgyjLDbps,2748
|
|
83
85
|
pysmt/test/test_native_qe.py,sha256=RGZgwbpAkPBTjIqcCbOkZ_nQXIDZ4Fznrr7Ldx6oA38,3439
|
|
84
|
-
pysmt/test/test_nia.py,sha256=
|
|
85
|
-
pysmt/test/test_nlira.py,sha256=
|
|
86
|
+
pysmt/test/test_nia.py,sha256=x51d0X5jnZnxTPvPLrlD0WilunZ5uNrDU4vWY78_xpU,6640
|
|
87
|
+
pysmt/test/test_nlira.py,sha256=s2sTnkgYNxikMxyKkR9_0GJoRr017Dm7Bx8dbqgRpyw,4957
|
|
86
88
|
pysmt/test/test_oracles.py,sha256=cHBPTUoi9cPmIvR-DG4bbzohOaBdUJzpKLoQXImxS_c,5615
|
|
87
|
-
pysmt/test/test_portfolio.py,sha256=
|
|
89
|
+
pysmt/test/test_portfolio.py,sha256=k0Jdrdr-EX-BVCxqYNUS3YjC77aCpzzdhezjB8U3OCM,7125
|
|
88
90
|
pysmt/test/test_printing.py,sha256=iKOSUrA3aOsG27RQ84fXNqsUGmVHcGgN8mt05ThVGAw,8749
|
|
89
|
-
pysmt/test/test_qe.py,sha256=
|
|
91
|
+
pysmt/test/test_qe.py,sha256=k8zYX-lcij0ua9yuRXl7wErUklEgLSEh68QDpV8J9xs,7157
|
|
90
92
|
pysmt/test/test_regressions.py,sha256=OHBptJUWQnUkXT17VH4z9Qea0QQeUF2v4sw_RYyottE,20119
|
|
91
|
-
pysmt/test/test_rewritings.py,sha256=
|
|
93
|
+
pysmt/test/test_rewritings.py,sha256=1eeseDwZyQD2VrOFBABXHTYJFJOXszP4olbCNeLcwfA,15607
|
|
92
94
|
pysmt/test/test_shannon_expansion.py,sha256=yaiZuB24wj1Zi-KdzRTmWuzAVaF9bQ603uto7zi6XBs,3082
|
|
93
|
-
pysmt/test/test_simplify.py,sha256=
|
|
95
|
+
pysmt/test/test_simplify.py,sha256=ckQn_DUxVvGspaRNZmSPHkudhpUlG5K2w6C0wDqhL1w,7620
|
|
94
96
|
pysmt/test/test_size.py,sha256=p3aqCMHfBiGLxvF0P8hE-PRQTT8VMPIJCjblq8Txh1w,3261
|
|
95
|
-
pysmt/test/test_solving.py,sha256
|
|
97
|
+
pysmt/test/test_solving.py,sha256=8x9dNHbICFzHmCLZDR_Nnm3ScRal6seGoRRA89uOB4w,24906
|
|
96
98
|
pysmt/test/test_sorts.py,sha256=erfInyPH91WVB8JBUYLteTo5X5skKKP3vEXdUUKC-YE,6033
|
|
97
99
|
pysmt/test/test_string.py,sha256=Y6VBfkLNKuePo8-HIzcwBH3eaYj0i-k1Y8tpFyw03zw,8096
|
|
98
100
|
pysmt/test/test_typechecker.py,sha256=obrRf5LSkrZjw2Kn7B4WNWVUykE7c9tU3jW-dEteHBs,6977
|
|
99
101
|
pysmt/test/test_unsat_cores.py,sha256=J-ip4SInZ9l96NCsLsKmvIiSI04hKpdyrPeKRh6b6aM,6563
|
|
100
102
|
pysmt/test/test_walker_ext.py,sha256=4x6Ew522P_0fLpKRIL0_0igB4I3_VrWWA4juuqolhag,3522
|
|
101
103
|
pysmt/test/test_walkers.py,sha256=AKVMvEUtMBht08bE1vCMaeMtdgGa6j_weDSHz_9Br3Q,9481
|
|
102
|
-
pysmt/test/configs/config1.ini,sha256=
|
|
104
|
+
pysmt/test/configs/config1.ini,sha256=MAXPN6VVW-S7jpWmglMPN5a3JYgorTqKAF6cmfohMpo,224
|
|
103
105
|
pysmt/test/configs/config_bad.ini,sha256=AOiZPmUcmAjVXOd5Bp4_euaYJG8EfccBy5iKUEcbxz8,88
|
|
104
106
|
pysmt/test/smtlib/__init__.py,sha256=JXBHtcb4Lv-Sb8whc9JuGbRH2EBLWwtLUh3PL9HhNE8,650
|
|
105
|
-
pysmt/test/smtlib/parser_utils.py,sha256=
|
|
107
|
+
pysmt/test/smtlib/parser_utils.py,sha256=1e1AnrVgHbjL-nKGz-vbJfvECMc2iNEnAwCEi1cia4o,8635
|
|
106
108
|
pysmt/test/smtlib/test_annotations.py,sha256=AyL8tZUMySQgUOmT8UPB_dnEglWCOo5EXM6kQxL_I3o,6209
|
|
107
109
|
pysmt/test/smtlib/test_fuzzed.py,sha256=pswc1F2ngXMZo-laFOs6pXnDg69JMfGPx1vMTsXdAX0,2124
|
|
108
110
|
pysmt/test/smtlib/test_generic_wrapper.py,sha256=Gn_cWynRWAFqUcAWpRgmJlkkwHcqdnARZN0-blRwM-Q,7869
|
|
@@ -126,10 +128,10 @@ pysmt/walkers/dag.py,sha256=pUdVTZx7CQyjrAb6jMfmsqS07J4kiDqHU8R4_9UvwkQ,5352
|
|
|
126
128
|
pysmt/walkers/generic.py,sha256=q1j1T2RvCeJn1PM0H5d8vNV4FTYAEQgT7h8X5DJhDf8,4534
|
|
127
129
|
pysmt/walkers/identitydag.py,sha256=f_D5qA198ayd3QO4u59fBX1RS_UiSBnPeV9O3ULvQv0,8737
|
|
128
130
|
pysmt/walkers/tree.py,sha256=WIWN9IM0riWkaD40iP4Tt3BCN21iSdE1S7gRZqy56SU,2846
|
|
129
|
-
PySMT-0.9.
|
|
130
|
-
PySMT-0.9.
|
|
131
|
-
PySMT-0.9.
|
|
132
|
-
PySMT-0.9.
|
|
133
|
-
PySMT-0.9.
|
|
134
|
-
PySMT-0.9.
|
|
135
|
-
PySMT-0.9.
|
|
131
|
+
PySMT-0.9.7.dev104.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
132
|
+
PySMT-0.9.7.dev104.dist-info/METADATA,sha256=xEPujFNbAZvFTwyiKqBow_Dtv_F6ldODqPdWvXP-txM,1617
|
|
133
|
+
PySMT-0.9.7.dev104.dist-info/NOTICE,sha256=Ns-Jsa6nbqZUiTEEAM6HqioSZIxQ2RCJzxoBlWQaUfc,601
|
|
134
|
+
PySMT-0.9.7.dev104.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
135
|
+
PySMT-0.9.7.dev104.dist-info/entry_points.txt,sha256=si0hIk-v3V35G3p8QGINoQ4QW-v4RYDRqj-asgyCgeM,58
|
|
136
|
+
PySMT-0.9.7.dev104.dist-info/top_level.txt,sha256=NwHQbpTaZMEvjIUdC0bvvj-WUyULe-nt-opK3YQNRMk,6
|
|
137
|
+
PySMT-0.9.7.dev104.dist-info/RECORD,,
|
pysmt/__init__.py
CHANGED
pysmt/cmd/check_version.py
CHANGED
|
@@ -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
|
|
54
|
-
|
|
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)
|
pysmt/cmd/install.py
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
39
|
-
Installer(YicesInstaller, "2.6.
|
|
40
|
-
|
|
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
|
pysmt/cmd/installers/__init__.py
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
pysmt/cmd/installers/base.py
CHANGED
|
@@ -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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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")
|
pysmt/cmd/installers/msat.py
CHANGED
|
@@ -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.
|
|
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/
|
|
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))
|
pysmt/cmd/installers/yices.py
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
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")
|
pysmt/cmd/installers/z3.py
CHANGED
|
@@ -24,62 +24,15 @@ class Z3Installer(SolverInstaller):
|
|
|
24
24
|
SOLVER = "z3"
|
|
25
25
|
|
|
26
26
|
def __init__(self, install_dir, bindings_dir, solver_version,
|
|
27
|
-
mirror_link=None
|
|
28
|
-
arch = self.architecture
|
|
29
|
-
if arch == "x86_64":
|
|
30
|
-
arch = "x64"
|
|
31
|
-
|
|
32
|
-
system = self.os_name
|
|
33
|
-
if system == "linux":
|
|
34
|
-
system = "glibc-2.31"
|
|
35
|
-
elif system == "darwin":
|
|
36
|
-
system = "osx-%s" % osx
|
|
37
|
-
elif system == "windows":
|
|
38
|
-
system = "win"
|
|
39
|
-
|
|
40
|
-
if git_version is None:
|
|
41
|
-
# Stable versions template
|
|
42
|
-
if commit:
|
|
43
|
-
archive_name = "z3-%s.%s-%s-%s.zip" % (solver_version, commit, arch, system)
|
|
44
|
-
else:
|
|
45
|
-
archive_name = "z3-%s-%s-%s.zip" % (solver_version, arch, system)
|
|
46
|
-
native_link = "https://github.com/Z3Prover/z3/releases/download/z3-" + solver_version + "/{archive_name}"
|
|
47
|
-
# print(native_link)
|
|
48
|
-
else:
|
|
49
|
-
# Nightly build template
|
|
50
|
-
archive_name = "z3-%s.%s-%s-%s.zip" % (solver_version, git_version, arch, system)
|
|
51
|
-
native_link = "https://github.com/pysmt/Z3bin/blob/master/nightly/{archive_name}?raw=true"
|
|
27
|
+
mirror_link=None):
|
|
52
28
|
|
|
53
29
|
SolverInstaller.__init__(self, install_dir=install_dir,
|
|
54
30
|
bindings_dir=bindings_dir,
|
|
55
31
|
solver_version=solver_version,
|
|
56
|
-
archive_name=archive_name,
|
|
57
|
-
native_link=native_link,
|
|
58
32
|
mirror_link=mirror_link)
|
|
59
33
|
|
|
60
|
-
def
|
|
61
|
-
|
|
62
|
-
libfiles = []
|
|
63
|
-
if self.os_name == "linux":
|
|
64
|
-
libfiles += glob.glob(bpath + '/*.so')
|
|
65
|
-
elif self.os_name == "darwin":
|
|
66
|
-
libfiles += glob.glob(bpath + '/*.a')
|
|
67
|
-
libfiles += glob.glob(bpath + '/*.dylib')
|
|
68
|
-
elif self.os_name == "windows":
|
|
69
|
-
libfiles += glob.glob(bpath + '/*.dll')
|
|
70
|
-
libfiles += glob.glob(bpath + '/*.lib')
|
|
71
|
-
|
|
72
|
-
SolverInstaller.mv(os.path.join(bpath, "python/z3"), self.bindings_dir)
|
|
73
|
-
|
|
74
|
-
# z3 will check for shared libraries in z3/lib, before builtins.Z3_LIB_DIRS,
|
|
75
|
-
# and Z3_LIBRARY_PATH env var lookup (or OS-level LD_LIBRARY_PATH)
|
|
76
|
-
# (see z3/z3core.py)
|
|
77
|
-
libpath = os.path.join(self.bindings_dir, "z3/lib/")
|
|
78
|
-
if not os.path.exists(libpath):
|
|
79
|
-
os.mkdir(libpath)
|
|
80
|
-
|
|
81
|
-
for f in libfiles:
|
|
82
|
-
SolverInstaller.mv(f, libpath)
|
|
34
|
+
def compile(self):
|
|
35
|
+
SolverInstaller.run_python("-m pip install --upgrade --target=%s z3-solver==%s" % (self.bindings_dir, self.solver_version))
|
|
83
36
|
|
|
84
37
|
def get_installed_version(self):
|
|
85
38
|
return self.get_installed_version_script(self.bindings_dir, "z3")
|
pysmt/configuration.py
CHANGED
|
@@ -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
|
|
24
|
+
solver_preference_list: msat z3 cvc5 z3-smt mathsat-smt
|
|
25
25
|
|
|
26
26
|
[smtlibsolver z3-smt]
|
|
27
27
|
command: z3 -smt2 -in
|
pysmt/constants.py
CHANGED
|
@@ -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)"""
|
pysmt/factory.py
CHANGED
|
@@ -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', '
|
|
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.
|
|
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,
|
|
607
|
+
# "msat, z3, cvc5"
|
|
602
608
|
#
|
|
603
609
|
import os
|
|
604
610
|
ENV_SOLVER_LIST = os.environ.get("PYSMT_SOLVER")
|
pysmt/smtlib/parser/__init__.py
CHANGED
|
@@ -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')
|