egglog 7.2.0__tar.gz → 8.0.0__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.

Potentially problematic release.


This version of egglog might be problematic. Click here for more details.

Files changed (128) hide show
  1. {egglog-7.2.0 → egglog-8.0.0}/.github/dependabot.yml +15 -0
  2. {egglog-7.2.0 → egglog-8.0.0}/.github/workflows/version.yml +4 -1
  3. {egglog-7.2.0 → egglog-8.0.0}/.gitignore +2 -0
  4. {egglog-7.2.0 → egglog-8.0.0}/Cargo.lock +93 -19
  5. egglog-8.0.0/Cargo.toml +42 -0
  6. egglog-8.0.0/Makefile +24 -0
  7. {egglog-7.2.0 → egglog-8.0.0}/PKG-INFO +32 -31
  8. {egglog-7.2.0 → egglog-8.0.0}/docs/changelog.md +10 -0
  9. {egglog-7.2.0 → egglog-8.0.0}/docs/conf.py +8 -0
  10. {egglog-7.2.0 → egglog-8.0.0}/docs/index.md +2 -11
  11. {egglog-7.2.0 → egglog-8.0.0}/docs/reference/contributing.md +5 -2
  12. {egglog-7.2.0 → egglog-8.0.0}/docs/reference/python-integration.md +54 -0
  13. {egglog-7.2.0 → egglog-8.0.0}/pyproject.toml +10 -5
  14. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/bindings.pyi +63 -23
  15. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/builtins.py +49 -6
  16. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/conversion.py +31 -8
  17. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/declarations.py +83 -4
  18. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/egraph.py +241 -173
  19. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/egraph_state.py +137 -61
  20. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/higher_order_functions.py +3 -8
  21. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/exp/array_api.py +274 -92
  22. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/exp/array_api_jit.py +1 -4
  23. egglog-8.0.0/python/egglog/exp/array_api_loopnest.py +145 -0
  24. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/exp/array_api_numba.py +1 -1
  25. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/exp/array_api_program_gen.py +51 -12
  26. egglog-8.0.0/python/egglog/functionalize.py +91 -0
  27. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/pretty.py +84 -40
  28. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/runtime.py +52 -39
  29. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/thunk.py +30 -18
  30. egglog-8.0.0/python/egglog/visualizer.css +1 -0
  31. egglog-8.0.0/python/egglog/visualizer.js +35753 -0
  32. egglog-8.0.0/python/egglog/visualizer_widget.py +39 -0
  33. egglog-8.0.0/python/tests/__snapshots__/test_array_api/TestLDA.test_optimize.py +75 -0
  34. {egglog-7.2.0 → egglog-8.0.0}/python/tests/__snapshots__/test_array_api/TestLDA.test_source_optimized.py +9 -9
  35. egglog-8.0.0/python/tests/__snapshots__/test_array_api/TestLDA.test_trace.py +77 -0
  36. egglog-8.0.0/python/tests/__snapshots__/test_bindings/TestEGraph.test_parse_program.py +122 -0
  37. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_array_api.py +4 -4
  38. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_bindings.py +100 -59
  39. egglog-8.0.0/python/tests/test_functionalize.py +61 -0
  40. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_high_level.py +9 -8
  41. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_py_object_sort.py +12 -9
  42. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_runtime.py +1 -1
  43. egglog-8.0.0/python/tests/test_unstable_fn.py +368 -0
  44. {egglog-7.2.0 → egglog-8.0.0}/src/conversions.rs +82 -58
  45. {egglog-7.2.0 → egglog-8.0.0}/src/egraph.rs +17 -17
  46. {egglog-7.2.0 → egglog-8.0.0}/src/error.rs +6 -3
  47. {egglog-7.2.0 → egglog-8.0.0}/src/lib.rs +4 -2
  48. {egglog-7.2.0 → egglog-8.0.0}/src/py_object_sort.rs +27 -21
  49. {egglog-7.2.0 → egglog-8.0.0}/src/serialize.rs +10 -1
  50. egglog-7.2.0/Cargo.toml +0 -33
  51. egglog-7.2.0/python/egglog/graphviz_widget.py +0 -34
  52. egglog-7.2.0/python/egglog/widget.css +0 -6
  53. egglog-7.2.0/python/egglog/widget.js +0 -50
  54. egglog-7.2.0/python/tests/__snapshots__/test_array_api/TestLDA.test_optimize.py +0 -68
  55. egglog-7.2.0/python/tests/__snapshots__/test_array_api/TestLDA.test_trace.py +0 -75
  56. egglog-7.2.0/python/tests/test_unstable_fn.py +0 -184
  57. {egglog-7.2.0 → egglog-8.0.0}/.github/workflows/CI.yml +0 -0
  58. {egglog-7.2.0 → egglog-8.0.0}/.pre-commit-config.yaml +0 -0
  59. {egglog-7.2.0 → egglog-8.0.0}/.readthedocs.yaml +0 -0
  60. {egglog-7.2.0 → egglog-8.0.0}/CITATION.cff +0 -0
  61. {egglog-7.2.0 → egglog-8.0.0}/LICENSE +0 -0
  62. {egglog-7.2.0 → egglog-8.0.0}/README.md +0 -0
  63. {egglog-7.2.0 → egglog-8.0.0}/conftest.py +0 -0
  64. {egglog-7.2.0 → egglog-8.0.0}/docs/.gitignore +0 -0
  65. {egglog-7.2.0 → egglog-8.0.0}/docs/_templates/comments.html +0 -0
  66. {egglog-7.2.0 → egglog-8.0.0}/docs/environment.yml +0 -0
  67. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/.gitignore +0 -0
  68. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2023_07_presentation.ipynb +0 -0
  69. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2023_11_09_portland_state.ipynb +0 -0
  70. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2023_11_17_pytensor.ipynb +0 -0
  71. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2023_11_pydata_lightning_talk.ipynb +0 -0
  72. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2023_12_02_congruence_closure-1.png +0 -0
  73. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2023_12_02_congruence_closure-2.png +0 -0
  74. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2023_12_02_congruence_closure.md +0 -0
  75. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2024_03_17_community_talk.ipynb +0 -0
  76. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/2024_03_17_map.svg +0 -0
  77. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/big_graph.svg +0 -0
  78. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/define_and_define.md +0 -0
  79. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/ecosystem-graph.png +0 -0
  80. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/egg.png +0 -0
  81. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/indexing_pushdown.ipynb +0 -0
  82. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/moa.png +0 -0
  83. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/optional_values.md +0 -0
  84. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation/pldi_2023_presentation.ipynb +0 -0
  85. {egglog-7.2.0 → egglog-8.0.0}/docs/explanation.md +0 -0
  86. {egglog-7.2.0 → egglog-8.0.0}/docs/how-to-guides.md +0 -0
  87. {egglog-7.2.0 → egglog-8.0.0}/docs/reference/bindings.md +0 -0
  88. {egglog-7.2.0 → egglog-8.0.0}/docs/reference/egglog-translation.md +0 -0
  89. {egglog-7.2.0 → egglog-8.0.0}/docs/reference/high-level.md +0 -0
  90. {egglog-7.2.0 → egglog-8.0.0}/docs/reference/usage.md +0 -0
  91. {egglog-7.2.0 → egglog-8.0.0}/docs/reference.md +0 -0
  92. {egglog-7.2.0 → egglog-8.0.0}/docs/tutorials/getting-started.ipynb +0 -0
  93. {egglog-7.2.0 → egglog-8.0.0}/docs/tutorials/screenshot-1.png +0 -0
  94. {egglog-7.2.0 → egglog-8.0.0}/docs/tutorials/screenshot-2.png +0 -0
  95. {egglog-7.2.0 → egglog-8.0.0}/docs/tutorials/sklearn.ipynb +0 -0
  96. {egglog-7.2.0 → egglog-8.0.0}/docs/tutorials.md +0 -0
  97. {egglog-7.2.0 → egglog-8.0.0}/increment_version.py +0 -0
  98. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/__init__.py +0 -0
  99. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/config.py +0 -0
  100. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/README.rst +0 -0
  101. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/__init__.py +0 -0
  102. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/bool.py +0 -0
  103. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/eqsat_basic.py +0 -0
  104. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/fib.py +0 -0
  105. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/lambda_.py +0 -0
  106. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/matrix.py +0 -0
  107. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/ndarrays.py +0 -0
  108. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/resolution.py +0 -0
  109. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/examples/schedule_demo.py +0 -0
  110. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/exp/__init__.py +0 -0
  111. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/exp/program_gen.py +0 -0
  112. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/exp/siu_examples.py +0 -0
  113. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/ipython_magic.py +0 -0
  114. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/py.typed +0 -0
  115. {egglog-7.2.0 → egglog-8.0.0}/python/egglog/type_constraint_solver.py +0 -0
  116. {egglog-7.2.0 → egglog-8.0.0}/python/tests/__init__.py +0 -0
  117. {egglog-7.2.0 → egglog-8.0.0}/python/tests/__snapshots__/test_program_gen/test_to_string.py +0 -0
  118. {egglog-7.2.0 → egglog-8.0.0}/python/tests/conftest.py +0 -0
  119. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_convert.py +0 -0
  120. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_modules.py +0 -0
  121. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_pretty.py +0 -0
  122. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_program_gen.py +0 -0
  123. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_type_constraint_solver.py +0 -0
  124. {egglog-7.2.0 → egglog-8.0.0}/python/tests/test_typing.py +0 -0
  125. {egglog-7.2.0 → egglog-8.0.0}/rust-toolchain.toml +0 -0
  126. {egglog-7.2.0 → egglog-8.0.0}/src/utils.rs +0 -0
  127. {egglog-7.2.0 → egglog-8.0.0}/stubtest_allow +0 -0
  128. {egglog-7.2.0 → egglog-8.0.0}/test-data/unit/check-high-level.test +0 -0
@@ -9,11 +9,26 @@ updates:
9
9
  directory: "/"
10
10
  schedule:
11
11
  interval: "weekly"
12
+ groups:
13
+ rust-production:
14
+ dependency-type: "production"
15
+ rust-development:
16
+ dependency-type: "development"
12
17
  - package-ecosystem: "github-actions"
13
18
  directory: "/"
14
19
  schedule:
15
20
  interval: "weekly"
21
+ groups:
22
+ actions-production:
23
+ dependency-type: "production"
24
+ actions-development:
25
+ dependency-type: "development"
16
26
  - package-ecosystem: "pip"
17
27
  directory: "/"
18
28
  schedule:
19
29
  interval: "weekly"
30
+ groups:
31
+ python-production:
32
+ dependency-type: "production"
33
+ python-development:
34
+ dependency-type: "development"
@@ -53,6 +53,8 @@ jobs:
53
53
  - uses: actions/checkout@v4
54
54
  with:
55
55
  ref: version-${{ needs.bump.outputs.version }}
56
+ - name: Setup QEMU
57
+ uses: docker/setup-qemu-action@v1
56
58
  - uses: PyO3/maturin-action@v1.42.1
57
59
  with:
58
60
  manylinux: auto
@@ -93,7 +95,8 @@ jobs:
93
95
  - uses: PyO3/maturin-action@v1.42.1
94
96
  with:
95
97
  command: build
96
- args: --release -o dist --universal2 --find-interpreter
98
+ target: universal2-apple-darwin
99
+ args: --release -o dist --find-interpreter
97
100
  - name: Upload wheels
98
101
  uses: actions/upload-artifact@v4
99
102
  with:
@@ -83,3 +83,5 @@ Source.*
83
83
  3
84
84
  4
85
85
  inlined
86
+ visualizer.tgz
87
+ package
@@ -135,6 +135,15 @@ version = "2.4.0"
135
135
  source = "registry+https://github.com/rust-lang/crates.io-index"
136
136
  checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
137
137
 
138
+ [[package]]
139
+ name = "bitmaps"
140
+ version = "2.1.0"
141
+ source = "registry+https://github.com/rust-lang/crates.io-index"
142
+ checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2"
143
+ dependencies = [
144
+ "typenum",
145
+ ]
146
+
138
147
  [[package]]
139
148
  name = "block-buffer"
140
149
  version = "0.10.4"
@@ -144,6 +153,12 @@ dependencies = [
144
153
  "generic-array",
145
154
  ]
146
155
 
156
+ [[package]]
157
+ name = "byteorder"
158
+ version = "1.5.0"
159
+ source = "registry+https://github.com/rust-lang/crates.io-index"
160
+ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
161
+
147
162
  [[package]]
148
163
  name = "cc"
149
164
  version = "1.0.83"
@@ -284,14 +299,15 @@ checksum = "675e35c02a51bb4d4618cb4885b3839ce6d1787c97b664474d9208d074742e20"
284
299
 
285
300
  [[package]]
286
301
  name = "egglog"
287
- version = "0.1.0"
288
- source = "git+https://github.com/egraphs-good/egglog?rev=fb4a9f114f9bb93154d6eff0dbab079b5cb4ebb6#fb4a9f114f9bb93154d6eff0dbab079b5cb4ebb6"
302
+ version = "0.2.0"
303
+ source = "git+https://github.com/saulshanabrook/egg-smol?rev=a555b2f5e82c684442775cc1a5da94b71930113c#a555b2f5e82c684442775cc1a5da94b71930113c"
289
304
  dependencies = [
290
305
  "clap",
291
306
  "egraph-serialize",
292
307
  "env_logger",
293
308
  "generic_symbolic_expressions",
294
309
  "hashbrown 0.14.1",
310
+ "im-rc",
295
311
  "indexmap",
296
312
  "instant",
297
313
  "lalrpop",
@@ -311,8 +327,8 @@ dependencies = [
311
327
  ]
312
328
 
313
329
  [[package]]
314
- name = "egglog-python"
315
- version = "7.2.0"
330
+ name = "egglog_python"
331
+ version = "8.0.0"
316
332
  dependencies = [
317
333
  "egglog",
318
334
  "egraph-serialize",
@@ -329,7 +345,7 @@ dependencies = [
329
345
  [[package]]
330
346
  name = "egraph-serialize"
331
347
  version = "0.1.0"
332
- source = "git+https://github.com/egraphs-good/egraph-serialize?rev=5838c036623e91540831745b1574539e01c8cb23#5838c036623e91540831745b1574539e01c8cb23"
348
+ source = "git+https://github.com/saulshanabrook/egraph-serialize?rev=1c205fcc6d3426800b828e9264dbadbd4a5ef6e9#1c205fcc6d3426800b828e9264dbadbd4a5ef6e9"
333
349
  dependencies = [
334
350
  "graphviz-rust",
335
351
  "indexmap",
@@ -396,9 +412,9 @@ dependencies = [
396
412
 
397
413
  [[package]]
398
414
  name = "fastrand"
399
- version = "2.0.1"
415
+ version = "2.1.0"
400
416
  source = "registry+https://github.com/rust-lang/crates.io-index"
401
- checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
417
+ checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
402
418
 
403
419
  [[package]]
404
420
  name = "fixedbitset"
@@ -418,8 +434,9 @@ dependencies = [
418
434
 
419
435
  [[package]]
420
436
  name = "generic_symbolic_expressions"
421
- version = "5.0.3"
422
- source = "git+https://github.com/oflatt/symbolic-expressions?rev=655b6a4c06b4b3d3b2300e17779860b4abe440f0#655b6a4c06b4b3d3b2300e17779860b4abe440f0"
437
+ version = "5.0.4"
438
+ source = "registry+https://github.com/rust-lang/crates.io-index"
439
+ checksum = "597eb584fb7cfd1935294fc3608a453fc35a58dfa9da4299c8fd3bc75a4c0b4b"
423
440
 
424
441
  [[package]]
425
442
  name = "getrandom"
@@ -485,6 +502,20 @@ version = "2.1.0"
485
502
  source = "registry+https://github.com/rust-lang/crates.io-index"
486
503
  checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
487
504
 
505
+ [[package]]
506
+ name = "im-rc"
507
+ version = "15.1.0"
508
+ source = "registry+https://github.com/rust-lang/crates.io-index"
509
+ checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe"
510
+ dependencies = [
511
+ "bitmaps",
512
+ "rand_core",
513
+ "rand_xoshiro",
514
+ "sized-chunks",
515
+ "typenum",
516
+ "version_check",
517
+ ]
518
+
488
519
  [[package]]
489
520
  name = "indexmap"
490
521
  version = "2.2.6"
@@ -730,9 +761,9 @@ dependencies = [
730
761
 
731
762
  [[package]]
732
763
  name = "pest"
733
- version = "2.7.4"
764
+ version = "2.7.11"
734
765
  source = "registry+https://github.com/rust-lang/crates.io-index"
735
- checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4"
766
+ checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95"
736
767
  dependencies = [
737
768
  "memchr",
738
769
  "thiserror",
@@ -741,9 +772,9 @@ dependencies = [
741
772
 
742
773
  [[package]]
743
774
  name = "pest_derive"
744
- version = "2.7.4"
775
+ version = "2.7.11"
745
776
  source = "registry+https://github.com/rust-lang/crates.io-index"
746
- checksum = "35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8"
777
+ checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a"
747
778
  dependencies = [
748
779
  "pest",
749
780
  "pest_generator",
@@ -751,9 +782,9 @@ dependencies = [
751
782
 
752
783
  [[package]]
753
784
  name = "pest_generator"
754
- version = "2.7.4"
785
+ version = "2.7.11"
755
786
  source = "registry+https://github.com/rust-lang/crates.io-index"
756
- checksum = "bc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123a"
787
+ checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183"
757
788
  dependencies = [
758
789
  "pest",
759
790
  "pest_meta",
@@ -764,9 +795,9 @@ dependencies = [
764
795
 
765
796
  [[package]]
766
797
  name = "pest_meta"
767
- version = "2.7.4"
798
+ version = "2.7.11"
768
799
  source = "registry+https://github.com/rust-lang/crates.io-index"
769
- checksum = "1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708d"
800
+ checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f"
770
801
  dependencies = [
771
802
  "once_cell",
772
803
  "pest",
@@ -806,9 +837,12 @@ checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
806
837
 
807
838
  [[package]]
808
839
  name = "ppv-lite86"
809
- version = "0.2.17"
840
+ version = "0.2.20"
810
841
  source = "registry+https://github.com/rust-lang/crates.io-index"
811
- checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
842
+ checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
843
+ dependencies = [
844
+ "zerocopy",
845
+ ]
812
846
 
813
847
  [[package]]
814
848
  name = "precomputed-hash"
@@ -940,6 +974,15 @@ dependencies = [
940
974
  "serde",
941
975
  ]
942
976
 
977
+ [[package]]
978
+ name = "rand_xoshiro"
979
+ version = "0.6.0"
980
+ source = "registry+https://github.com/rust-lang/crates.io-index"
981
+ checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa"
982
+ dependencies = [
983
+ "rand_core",
984
+ ]
985
+
943
986
  [[package]]
944
987
  name = "redox_syscall"
945
988
  version = "0.2.16"
@@ -1090,6 +1133,16 @@ version = "0.3.11"
1090
1133
  source = "registry+https://github.com/rust-lang/crates.io-index"
1091
1134
  checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
1092
1135
 
1136
+ [[package]]
1137
+ name = "sized-chunks"
1138
+ version = "0.6.5"
1139
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1140
+ checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e"
1141
+ dependencies = [
1142
+ "bitmaps",
1143
+ "typenum",
1144
+ ]
1145
+
1093
1146
  [[package]]
1094
1147
  name = "smallvec"
1095
1148
  version = "1.11.0"
@@ -1368,3 +1421,24 @@ name = "windows_x86_64_msvc"
1368
1421
  version = "0.48.0"
1369
1422
  source = "registry+https://github.com/rust-lang/crates.io-index"
1370
1423
  checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
1424
+
1425
+ [[package]]
1426
+ name = "zerocopy"
1427
+ version = "0.7.35"
1428
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1429
+ checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
1430
+ dependencies = [
1431
+ "byteorder",
1432
+ "zerocopy-derive",
1433
+ ]
1434
+
1435
+ [[package]]
1436
+ name = "zerocopy-derive"
1437
+ version = "0.7.35"
1438
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1439
+ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
1440
+ dependencies = [
1441
+ "proc-macro2",
1442
+ "quote",
1443
+ "syn 2.0.60",
1444
+ ]
@@ -0,0 +1,42 @@
1
+ [package]
2
+ name = "egglog_python"
3
+ version = "8.0.0"
4
+ edition = "2021"
5
+
6
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7
+ [lib]
8
+ name = "egglog"
9
+ crate-type = ["cdylib"]
10
+
11
+ [dependencies]
12
+ pyo3 = { version = "0.21", features = ["extension-module"] }
13
+
14
+ # https://github.com/egraphs-good/egglog/compare/ceed816e9369570ffed9feeba157b19471dda70d...main
15
+ # egglog = { git = "https://github.com/egraphs-good/egglog", rev = "fb4a9f114f9bb93154d6eff0dbab079b5cb4ebb6" }
16
+ # egglog = { path = "../egg-smol" }
17
+ # egglog = { git = "https://github.com/oflatt/egg-smol", branch = "oflatt-fast-terms" }
18
+ egglog = { git = "https://github.com/saulshanabrook/egg-smol", rev = "a555b2f5e82c684442775cc1a5da94b71930113c" }
19
+ egraph-serialize = { git = "https://github.com/saulshanabrook/egraph-serialize", rev = "1c205fcc6d3426800b828e9264dbadbd4a5ef6e9", features = [
20
+ "serde",
21
+ "graphviz",
22
+ ] }
23
+ # egraph-serialize = { path = "../egraph-serialize", features = [
24
+ # "serde",
25
+ # "graphviz",
26
+ # ] }
27
+ serde_json = "*"
28
+ pyo3-log = "0.10.0"
29
+ log = "0.4.21"
30
+ lalrpop-util = { version = "0.20.2", features = ["lexer"] }
31
+ ordered-float = "*"
32
+ uuid = { version = "1.8.0", features = ["v4"] }
33
+ num-rational = "*"
34
+
35
+ # Use unreleased version of egraph-serialize in egglog as well
36
+ # [patch.crates-io]
37
+ # egraph-serialize = { git = "https://github.com/egraphs-good/egraph-serialize", rev = "5838c036623e91540831745b1574539e01c8cb23" }
38
+ # egraph-serialize = { path = "../egraph-serialize" }
39
+
40
+ # enable debug symbols for easier profiling
41
+ # [profile.release]
42
+ # debug = 1
egglog-8.0.0/Makefile ADDED
@@ -0,0 +1,24 @@
1
+
2
+ all: python/egglog/visualizer.js
3
+
4
+
5
+
6
+ # download visualizer release from github
7
+ #
8
+ visualizer.tgz:
9
+ curl -s https://api.github.com/repos/egraphs-good/egraph-visualizer/releases/latest \
10
+ | grep "browser_download_url.*tgz" \
11
+ | cut -d : -f 2,3 \
12
+ | tr -d \" \
13
+ | wget -qi - -O visualizer.tgz
14
+
15
+ # extract visualizer release
16
+ python/egglog/visualizer.js python/egglog/visualizer.css: visualizer.tgz
17
+ tar -xzf visualizer.tgz
18
+ rm visualizer.tgz
19
+ mv package/dist/index.js python/egglog/visualizer.js
20
+ mv package/dist/style.css python/egglog/visualizer.css
21
+ rm -rf package
22
+
23
+ clean:
24
+ rm -rf package python/egglog/visualizer.css python/egglog/visualizer.js visualizer.tgz
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: egglog
3
- Version: 7.2.0
3
+ Version: 8.0.0
4
4
  Classifier: Environment :: MacOS X
5
5
  Classifier: Environment :: Win32 (MS Windows)
6
6
  Classifier: Intended Audience :: Developers
@@ -19,37 +19,38 @@ Classifier: Typing :: Typed
19
19
  Requires-Dist: typing-extensions
20
20
  Requires-Dist: black
21
21
  Requires-Dist: graphviz
22
- Requires-Dist: pytest; extra == 'test'
23
- Requires-Dist: mypy; extra == 'test'
24
- Requires-Dist: syrupy; extra == 'test'
25
- Requires-Dist: egglog[array]; extra == 'test'
26
- Requires-Dist: pytest-codspeed; extra == 'test'
27
- Requires-Dist: pytest-benchmark; extra == 'test'
28
- Requires-Dist: pytest-xdist; extra == 'test'
29
- Requires-Dist: scikit-learn; extra == 'array'
30
- Requires-Dist: array_api_compat; extra == 'array'
31
- Requires-Dist: numba==0.59.1; extra == 'array'
32
- Requires-Dist: llvmlite==0.42.0; extra == 'array'
33
- Requires-Dist: pre-commit; extra == 'dev'
34
- Requires-Dist: ruff; extra == 'dev'
35
- Requires-Dist: mypy; extra == 'dev'
36
- Requires-Dist: anywidget[dev]; extra == 'dev'
37
- Requires-Dist: egglog[docs,test]; extra == 'dev'
38
- Requires-Dist: pydata-sphinx-theme; extra == 'docs'
39
- Requires-Dist: myst-nb; extra == 'docs'
40
- Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
41
- Requires-Dist: sphinx-gallery; extra == 'docs'
42
- Requires-Dist: nbconvert; extra == 'docs'
43
- Requires-Dist: matplotlib; extra == 'docs'
44
- Requires-Dist: anywidget; extra == 'docs'
45
- Requires-Dist: seaborn; extra == 'docs'
46
- Requires-Dist: egglog[array]; extra == 'docs'
47
- Requires-Dist: line-profiler; extra == 'docs'
48
- Requires-Dist: sphinxcontrib-mermaid; extra == 'docs'
49
- Requires-Dist: ablog; extra == 'docs'
50
- Provides-Extra: test
22
+ Requires-Dist: anywidget
23
+ Requires-Dist: scikit-learn ; extra == 'array'
24
+ Requires-Dist: array-api-compat ; extra == 'array'
25
+ Requires-Dist: numba ==0.59.1 ; extra == 'array'
26
+ Requires-Dist: llvmlite ==0.42.0 ; extra == 'array'
27
+ Requires-Dist: pre-commit ; extra == 'dev'
28
+ Requires-Dist: ruff ; extra == 'dev'
29
+ Requires-Dist: mypy ; extra == 'dev'
30
+ Requires-Dist: anywidget[dev] ; extra == 'dev'
31
+ Requires-Dist: egglog[docs,test] ; extra == 'dev'
32
+ Requires-Dist: pytest ; extra == 'test'
33
+ Requires-Dist: mypy ; extra == 'test'
34
+ Requires-Dist: syrupy ; extra == 'test'
35
+ Requires-Dist: egglog[array] ; extra == 'test'
36
+ Requires-Dist: pytest-codspeed ; extra == 'test'
37
+ Requires-Dist: pytest-benchmark ; extra == 'test'
38
+ Requires-Dist: pytest-xdist ; extra == 'test'
39
+ Requires-Dist: pydata-sphinx-theme ; extra == 'docs'
40
+ Requires-Dist: myst-nb ; extra == 'docs'
41
+ Requires-Dist: sphinx-autodoc-typehints ; extra == 'docs'
42
+ Requires-Dist: sphinx-gallery ; extra == 'docs'
43
+ Requires-Dist: nbconvert ; extra == 'docs'
44
+ Requires-Dist: matplotlib ; extra == 'docs'
45
+ Requires-Dist: anywidget ; extra == 'docs'
46
+ Requires-Dist: seaborn ; extra == 'docs'
47
+ Requires-Dist: egglog[array] ; extra == 'docs'
48
+ Requires-Dist: line-profiler ; extra == 'docs'
49
+ Requires-Dist: sphinxcontrib-mermaid ; extra == 'docs'
50
+ Requires-Dist: ablog ; extra == 'docs'
51
51
  Provides-Extra: array
52
52
  Provides-Extra: dev
53
+ Provides-Extra: test
53
54
  Provides-Extra: docs
54
55
  License-File: LICENSE
55
56
  Summary: e-graphs in Python built around the the egglog rust library
@@ -4,6 +4,16 @@ _This project uses semantic versioning_
4
4
 
5
5
  ## UNRELEASED
6
6
 
7
+ ## 8.0.0 (2024-10-17)
8
+
9
+ - Adds ability to use anonymous functions where callables are needed. These are automatically transformed to egglog
10
+ functions with default rewrites.
11
+ - Upgrade [egglog](https://github.com/egraphs-good/egglog/compare/fb4a9f114f9bb93154d6eff0dbab079b5cb4ebb6...saulshanabrook:egg-smol:a555b2f5e82c684442775cc1a5da94b71930113c)
12
+ - Adds source annotations to expressions for tracebacks
13
+ - Adds ability to inline other functions besides primitives in serialized output
14
+ - Adds `remove` and `set` methods to `Vec`
15
+ - Upgrades to use the new egraph-visualizer so we can have interactive visualizations
16
+
7
17
  ## 7.2.0 (2024-05-23)
8
18
 
9
19
  - Adds ability to use function bodies as default rewrites ([#167](https://github.com/egraphs-good/egglog-python/pull/167))
@@ -72,6 +72,14 @@ extensions = [
72
72
  ]
73
73
 
74
74
 
75
+ ##
76
+ # Intersphinx
77
+ ##
78
+
79
+ intersphinx_mapping = {
80
+ "python": ("https://docs.python.org/3", None),
81
+ }
82
+
75
83
  ##
76
84
  # Sphinx Gallery
77
85
  # https://sphinx-gallery.github.io/stable/configuration.html#build-pattern
@@ -2,9 +2,9 @@
2
2
  file_format: mystnb
3
3
  ---
4
4
 
5
- # [`egglog`](https://github.com/egraphs-good/egglog/) Python
5
+ # `egglog` Python
6
6
 
7
- `egglog` is a Python package that provides bindings to the Rust library of the same name,
7
+ `egglog` is a Python package that provides bindings to [the Rust library of the same name](https://github.com/egraphs-good/egglog/),
8
8
  allowing you to use e-graphs in Python for optimization, symbolic computation, and analysis.
9
9
 
10
10
  It wraps the Rust library [`egglog`](https://github.com/egraphs-good/egglog) which
@@ -13,14 +13,10 @@ See the ["Better Together: Unifying Datalog and Equality Saturation"](https://ar
13
13
 
14
14
  > We present egglog, a fixpoint reasoning system that unifies Datalog and equality saturation (EqSat). Like Datalog, it supports efficient incremental execution, cooperating analyses, and lattice-based reasoning. Like EqSat, it supports term rewriting, efficient congruence closure, and extraction of optimized terms.
15
15
 
16
- ## [Installation](./reference/usage)
17
-
18
16
  ```shell
19
17
  pip install egglog
20
18
  ```
21
19
 
22
- ## Example
23
-
24
20
  ```{code-cell} python
25
21
  from __future__ import annotations
26
22
  from egglog import *
@@ -49,15 +45,10 @@ def _num_rule(a: Num, b: Num, c: Num, i: i64, j: i64):
49
45
  yield rewrite(Num(i) * Num(j)).to(Num(i * j))
50
46
 
51
47
  egraph.saturate()
52
- ```
53
-
54
- ```{code-cell} python
55
48
  egraph.check(eq(expr1).to(expr2))
56
49
  egraph.extract(expr1)
57
50
  ```
58
51
 
59
- ## Contents
60
-
61
52
  ```{toctree}
62
53
  :maxdepth: 2
63
54
  tutorials
@@ -32,10 +32,13 @@ conda activate egglog-python
32
32
  Then install the package in editable mode with the development dependencies:
33
33
 
34
34
  ```bash
35
- pip install -e .[dev]
35
+ maturin develop -E dev,docs,test,array
36
36
  ```
37
37
 
38
- Anytime you change the rust code, you can run `pip install -e .` to recompile the rust code.
38
+ Anytime you change the rust code, you can run `maturin develop -E` to recompile the rust code.
39
+
40
+ If you would like to download a new version of the visualizer source, run `make clean; make`. This will download
41
+ the most recent released version from the github actions artifact in the [egraph-visualizer](https://github.com/egraphs-good/egraph-visualizer) repo. It is checked in because it's a pain to get cargo to include only one git ignored file while ignoring the rest of the files that were ignored.
39
42
 
40
43
  ### Running Tests
41
44
 
@@ -428,6 +428,33 @@ Note that this is all built on the [unstable function support added as a sort to
428
428
  While this sort is exposed directly at the high level with the `UnstableFn` class, we don't reccomend depending on it directly, and instead
429
429
  using the builtin Python type annotations. This will allow us to change the implementation in the future without breaking user code.
430
430
 
431
+ ### Unwrapped functions
432
+
433
+ We also support using normal python functions, either named or anonymous, as values. These will automatically be wrapped as egglog functions when passed to a function which expects an egglog function.
434
+
435
+ ```{code-cell} python
436
+ x = MathList.EMPTY.append(Math(1))
437
+ added_two = x.map(lambda x: x + Math(2))
438
+ check_eq(added_two, MathList.EMPTY.append(Math(1) + Math(2)), (math_list_ruleset + run()) * 10)
439
+ ```
440
+
441
+ Their definition will be added to the default rulset, unless they are defined in the body of a function themselves or
442
+ in a rule function:
443
+
444
+ ```{code-cell} python
445
+ @function(ruleset=math_list_ruleset)
446
+ def map_add_two(x: MathList) -> MathList:
447
+ return x.map(lambda x: x + Math(2))
448
+
449
+ check_eq(map_add_two(MathList.EMPTY.append(Math(1))), MathList.EMPTY.append(Math(1) + Math(2)), math_list_ruleset.saturate())
450
+ ```
451
+
452
+ Their name will just be the body of the function, so that two anonymous functions with the same body will be considered equal.
453
+
454
+ ```{code-cell} python
455
+ added_two
456
+ ```
457
+
431
458
  ## Default Replacements
432
459
 
433
460
  When defining a function or a constant, you can also provide a default replacement value. This is useful when
@@ -510,3 +537,30 @@ egraph.run(other_math_ruleset * 2)
510
537
  egraph.check(eq(x).to(WrappedMath(math_float(3.14)) + WrappedMath(math_float(3.14))))
511
538
  egraph
512
539
  ```
540
+
541
+ ## Visualization
542
+
543
+ The default renderer for the e-graph in a Jupyter Notebook [an interactive Javascript visualizer](https://github.com/egraphs-good/egraph-visualizer):
544
+
545
+ ```{code-cell} python
546
+ egraph
547
+ ```
548
+
549
+ You can also customize the visualization through using the <inv:egglog.EGraph.display> method:
550
+
551
+ ```{code-cell} python
552
+ egraph.display()
553
+ ```
554
+
555
+ If you would like to visualize the progression of the e-graph over time, you can use the <inv:egglog.EGraph.saturate> method to
556
+ run a number of iterations and then visualize the e-graph at each step:
557
+
558
+ ```{code-cell} python
559
+ egraph = EGraph()
560
+ egraph.register(Math(2) + Math(100))
561
+ i, j = vars_("i j", i64)
562
+ r = ruleset(
563
+ rewrite(Math(i) + Math(j)).to(Math(i + j)),
564
+ )
565
+ egraph.saturate(r)
566
+ ```
@@ -1,5 +1,5 @@
1
1
  [build-system]
2
- requires = ["maturin>=0.13,<0.14"]
2
+ requires = ["maturin>=1.0,<2.0"]
3
3
  build-backend = "maturin"
4
4
 
5
5
  [project]
@@ -25,7 +25,7 @@ classifiers = [
25
25
  "Topic :: Software Development :: Interpreters",
26
26
  "Typing :: Typed",
27
27
  ]
28
- dependencies = ["typing-extensions", "black", "graphviz"]
28
+ dependencies = ["typing-extensions", "black", "graphviz", "anywidget"]
29
29
 
30
30
  [project.optional-dependencies]
31
31
 
@@ -62,7 +62,7 @@ docs = [
62
62
  "ablog",
63
63
  ]
64
64
 
65
- [tool.ruff]
65
+ [tool.ruff.lint]
66
66
  ignore = [
67
67
  # Allow uppercase vars
68
68
  "N806",
@@ -74,7 +74,7 @@ ignore = [
74
74
  # Allow exec
75
75
  "S102",
76
76
  "S307",
77
- "PGH001",
77
+ "S307",
78
78
  # allow star imports
79
79
  "F405",
80
80
  "F403",
@@ -173,12 +173,16 @@ ignore = [
173
173
  "D401",
174
174
  # Allow private member refs
175
175
  "SLF001",
176
+ # allow blind exception to add context
177
+ "BLE001",
176
178
  ]
179
+ select = ["ALL"]
180
+
181
+ [tool.ruff]
177
182
 
178
183
  line-length = 120
179
184
  # Allow lines to be as long as 120.
180
185
  src = ["python"]
181
- select = ["ALL"]
182
186
  extend-exclude = ["python/tests/__snapshots__"]
183
187
  unsafe-fixes = true
184
188
 
@@ -201,6 +205,7 @@ exclude = ["__snapshots__", "_build", "^conftest.py$"]
201
205
 
202
206
  [tool.maturin]
203
207
  python-source = "python"
208
+ module-name = "egglog.bindings"
204
209
 
205
210
  [tool.pytest.ini_options]
206
211
  addopts = ["--import-mode=importlib"]