rxgraph 0.7.0__tar.gz → 0.9.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.
- {rxgraph-0.7.0 → rxgraph-0.9.0}/Cargo.lock +221 -2
- {rxgraph-0.7.0 → rxgraph-0.9.0}/Cargo.toml +1 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/PKG-INFO +16 -4
- {rxgraph-0.7.0 → rxgraph-0.9.0}/README.md +15 -3
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/Cargo.toml +2 -1
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/examples/native_row_lazy.rs +14 -4
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/arrow_value.rs +1 -1
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/value.rs +18 -2
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/examples/kernels.rs +85 -1
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/graph/graph.rs +29 -1
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/lib.rs +5 -3
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/python.rs +157 -9
- rxgraph-0.9.0/crates/rxgraph/src/traversal/algo.rs +684 -0
- rxgraph-0.9.0/crates/rxgraph/src/traversal/engine.rs +803 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/traversal/mod.rs +23 -1
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/traversal/native.rs +149 -299
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/traversal/registry.rs +134 -6
- rxgraph-0.9.0/crates/rxgraph/src/traversal/typed.rs +1574 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph-python/Cargo.toml +1 -1
- {rxgraph-0.7.0 → rxgraph-0.9.0}/python/rxgraph/__init__.pyi +19 -2
- {rxgraph-0.7.0 → rxgraph-0.9.0}/python/rxgraph/plugin.py +37 -8
- rxgraph-0.7.0/crates/rxgraph/src/traversal/algo.rs +0 -1425
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/README.md +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/benches/flight_routes.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/benches/memory.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/benches/payment_risk.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/examples/flight_routes.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/arrow.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/bind.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/eval.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/expr.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/mod.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/ops/list.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/ops/mod.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/ops/scalar.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/ops/string.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/ops/struct_.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/dsl/polars_json.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/examples/mod.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/graph/csr.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/graph/mod.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/graph/repo.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/traversal/config.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/traversal/kernel.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph/src/traversal/progress.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/crates/rxgraph-python/src/lib.rs +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/pyproject.toml +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/python/rxgraph/__init__.py +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/python/rxgraph/_graph_tables.py +0 -0
- {rxgraph-0.7.0 → rxgraph-0.9.0}/python/rxgraph/py.typed +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
# It is not intended for manual editing.
|
|
3
3
|
version = 4
|
|
4
4
|
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "adler2"
|
|
7
|
+
version = "2.0.1"
|
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
|
|
10
|
+
|
|
5
11
|
[[package]]
|
|
6
12
|
name = "ahash"
|
|
7
13
|
version = "0.8.12"
|
|
@@ -36,6 +42,21 @@ dependencies = [
|
|
|
36
42
|
"num-traits",
|
|
37
43
|
]
|
|
38
44
|
|
|
45
|
+
[[package]]
|
|
46
|
+
name = "alloc-no-stdlib"
|
|
47
|
+
version = "2.0.4"
|
|
48
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
49
|
+
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
|
|
50
|
+
|
|
51
|
+
[[package]]
|
|
52
|
+
name = "alloc-stdlib"
|
|
53
|
+
version = "0.2.4"
|
|
54
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
55
|
+
checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195"
|
|
56
|
+
dependencies = [
|
|
57
|
+
"alloc-no-stdlib",
|
|
58
|
+
]
|
|
59
|
+
|
|
39
60
|
[[package]]
|
|
40
61
|
name = "alloca"
|
|
41
62
|
version = "0.4.0"
|
|
@@ -329,12 +350,39 @@ version = "2.11.1"
|
|
|
329
350
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
330
351
|
checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
|
|
331
352
|
|
|
353
|
+
[[package]]
|
|
354
|
+
name = "brotli"
|
|
355
|
+
version = "8.0.4"
|
|
356
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
357
|
+
checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3"
|
|
358
|
+
dependencies = [
|
|
359
|
+
"alloc-no-stdlib",
|
|
360
|
+
"alloc-stdlib",
|
|
361
|
+
"brotli-decompressor",
|
|
362
|
+
]
|
|
363
|
+
|
|
364
|
+
[[package]]
|
|
365
|
+
name = "brotli-decompressor"
|
|
366
|
+
version = "5.0.3"
|
|
367
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
368
|
+
checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583"
|
|
369
|
+
dependencies = [
|
|
370
|
+
"alloc-no-stdlib",
|
|
371
|
+
"alloc-stdlib",
|
|
372
|
+
]
|
|
373
|
+
|
|
332
374
|
[[package]]
|
|
333
375
|
name = "bumpalo"
|
|
334
376
|
version = "3.20.3"
|
|
335
377
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
336
378
|
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
|
|
337
379
|
|
|
380
|
+
[[package]]
|
|
381
|
+
name = "byteorder"
|
|
382
|
+
version = "1.5.0"
|
|
383
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
384
|
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
|
385
|
+
|
|
338
386
|
[[package]]
|
|
339
387
|
name = "bytes"
|
|
340
388
|
version = "1.11.1"
|
|
@@ -354,6 +402,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
354
402
|
checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
|
|
355
403
|
dependencies = [
|
|
356
404
|
"find-msvc-tools",
|
|
405
|
+
"jobserver",
|
|
406
|
+
"libc",
|
|
357
407
|
"shlex",
|
|
358
408
|
]
|
|
359
409
|
|
|
@@ -615,6 +665,16 @@ dependencies = [
|
|
|
615
665
|
"rustc_version",
|
|
616
666
|
]
|
|
617
667
|
|
|
668
|
+
[[package]]
|
|
669
|
+
name = "flate2"
|
|
670
|
+
version = "1.1.9"
|
|
671
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
672
|
+
checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
|
|
673
|
+
dependencies = [
|
|
674
|
+
"miniz_oxide",
|
|
675
|
+
"zlib-rs",
|
|
676
|
+
]
|
|
677
|
+
|
|
618
678
|
[[package]]
|
|
619
679
|
name = "foldhash"
|
|
620
680
|
version = "0.1.5"
|
|
@@ -763,6 +823,12 @@ dependencies = [
|
|
|
763
823
|
"serde_core",
|
|
764
824
|
]
|
|
765
825
|
|
|
826
|
+
[[package]]
|
|
827
|
+
name = "integer-encoding"
|
|
828
|
+
version = "3.0.4"
|
|
829
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
830
|
+
checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02"
|
|
831
|
+
|
|
766
832
|
[[package]]
|
|
767
833
|
name = "inventory"
|
|
768
834
|
version = "0.3.24"
|
|
@@ -787,6 +853,16 @@ version = "1.0.18"
|
|
|
787
853
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
788
854
|
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
|
789
855
|
|
|
856
|
+
[[package]]
|
|
857
|
+
name = "jobserver"
|
|
858
|
+
version = "0.1.34"
|
|
859
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
860
|
+
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
|
|
861
|
+
dependencies = [
|
|
862
|
+
"getrandom 0.3.4",
|
|
863
|
+
"libc",
|
|
864
|
+
]
|
|
865
|
+
|
|
790
866
|
[[package]]
|
|
791
867
|
name = "js-sys"
|
|
792
868
|
version = "0.3.99"
|
|
@@ -880,6 +956,15 @@ version = "0.4.30"
|
|
|
880
956
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
881
957
|
checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5"
|
|
882
958
|
|
|
959
|
+
[[package]]
|
|
960
|
+
name = "lz4_flex"
|
|
961
|
+
version = "0.13.1"
|
|
962
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
963
|
+
checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e"
|
|
964
|
+
dependencies = [
|
|
965
|
+
"twox-hash",
|
|
966
|
+
]
|
|
967
|
+
|
|
883
968
|
[[package]]
|
|
884
969
|
name = "matrixmultiply"
|
|
885
970
|
version = "0.3.10"
|
|
@@ -896,6 +981,16 @@ version = "2.8.1"
|
|
|
896
981
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
897
982
|
checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
|
|
898
983
|
|
|
984
|
+
[[package]]
|
|
985
|
+
name = "miniz_oxide"
|
|
986
|
+
version = "0.8.9"
|
|
987
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
988
|
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
|
|
989
|
+
dependencies = [
|
|
990
|
+
"adler2",
|
|
991
|
+
"simd-adler32",
|
|
992
|
+
]
|
|
993
|
+
|
|
899
994
|
[[package]]
|
|
900
995
|
name = "ndarray"
|
|
901
996
|
version = "0.17.2"
|
|
@@ -998,6 +1093,15 @@ version = "11.1.5"
|
|
|
998
1093
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
999
1094
|
checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
|
|
1000
1095
|
|
|
1096
|
+
[[package]]
|
|
1097
|
+
name = "ordered-float"
|
|
1098
|
+
version = "2.10.1"
|
|
1099
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1100
|
+
checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
|
|
1101
|
+
dependencies = [
|
|
1102
|
+
"num-traits",
|
|
1103
|
+
]
|
|
1104
|
+
|
|
1001
1105
|
[[package]]
|
|
1002
1106
|
name = "page_size"
|
|
1003
1107
|
version = "0.6.0"
|
|
@@ -1008,6 +1112,45 @@ dependencies = [
|
|
|
1008
1112
|
"winapi",
|
|
1009
1113
|
]
|
|
1010
1114
|
|
|
1115
|
+
[[package]]
|
|
1116
|
+
name = "parquet"
|
|
1117
|
+
version = "58.3.0"
|
|
1118
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1119
|
+
checksum = "5dafa7d01085b62a47dd0c1829550a0a36710ea9c4fe358a05a85477cec8a908"
|
|
1120
|
+
dependencies = [
|
|
1121
|
+
"ahash",
|
|
1122
|
+
"arrow-array",
|
|
1123
|
+
"arrow-buffer",
|
|
1124
|
+
"arrow-data",
|
|
1125
|
+
"arrow-ipc",
|
|
1126
|
+
"arrow-schema",
|
|
1127
|
+
"arrow-select",
|
|
1128
|
+
"base64",
|
|
1129
|
+
"brotli",
|
|
1130
|
+
"bytes",
|
|
1131
|
+
"chrono",
|
|
1132
|
+
"flate2",
|
|
1133
|
+
"half",
|
|
1134
|
+
"hashbrown 0.17.1",
|
|
1135
|
+
"lz4_flex",
|
|
1136
|
+
"num-bigint",
|
|
1137
|
+
"num-integer",
|
|
1138
|
+
"num-traits",
|
|
1139
|
+
"paste",
|
|
1140
|
+
"seq-macro",
|
|
1141
|
+
"simdutf8",
|
|
1142
|
+
"snap",
|
|
1143
|
+
"thrift",
|
|
1144
|
+
"twox-hash",
|
|
1145
|
+
"zstd",
|
|
1146
|
+
]
|
|
1147
|
+
|
|
1148
|
+
[[package]]
|
|
1149
|
+
name = "paste"
|
|
1150
|
+
version = "1.0.15"
|
|
1151
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1152
|
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
|
|
1153
|
+
|
|
1011
1154
|
[[package]]
|
|
1012
1155
|
name = "phf"
|
|
1013
1156
|
version = "0.12.1"
|
|
@@ -1032,6 +1175,12 @@ version = "0.2.17"
|
|
|
1032
1175
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1033
1176
|
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
|
1034
1177
|
|
|
1178
|
+
[[package]]
|
|
1179
|
+
name = "pkg-config"
|
|
1180
|
+
version = "0.3.33"
|
|
1181
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1182
|
+
checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
|
|
1183
|
+
|
|
1035
1184
|
[[package]]
|
|
1036
1185
|
name = "plotters"
|
|
1037
1186
|
version = "0.3.7"
|
|
@@ -1302,13 +1451,14 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
|
|
1302
1451
|
|
|
1303
1452
|
[[package]]
|
|
1304
1453
|
name = "rxgraph"
|
|
1305
|
-
version = "0.
|
|
1454
|
+
version = "0.9.0"
|
|
1306
1455
|
dependencies = [
|
|
1307
1456
|
"anyhow",
|
|
1308
1457
|
"arrow",
|
|
1309
1458
|
"arrow-schema",
|
|
1310
1459
|
"criterion",
|
|
1311
1460
|
"inventory",
|
|
1461
|
+
"parquet",
|
|
1312
1462
|
"pretty_assertions",
|
|
1313
1463
|
"pyo3",
|
|
1314
1464
|
"pyo3-arrow",
|
|
@@ -1323,7 +1473,7 @@ dependencies = [
|
|
|
1323
1473
|
|
|
1324
1474
|
[[package]]
|
|
1325
1475
|
name = "rxgraph-python"
|
|
1326
|
-
version = "0.
|
|
1476
|
+
version = "0.9.0"
|
|
1327
1477
|
dependencies = [
|
|
1328
1478
|
"pyo3",
|
|
1329
1479
|
"rxgraph",
|
|
@@ -1350,6 +1500,12 @@ version = "1.0.28"
|
|
|
1350
1500
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1351
1501
|
checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
|
|
1352
1502
|
|
|
1503
|
+
[[package]]
|
|
1504
|
+
name = "seq-macro"
|
|
1505
|
+
version = "0.3.6"
|
|
1506
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1507
|
+
checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
|
|
1508
|
+
|
|
1353
1509
|
[[package]]
|
|
1354
1510
|
name = "serde"
|
|
1355
1511
|
version = "1.0.228"
|
|
@@ -1399,6 +1555,12 @@ version = "2.0.1"
|
|
|
1399
1555
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1400
1556
|
checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
|
|
1401
1557
|
|
|
1558
|
+
[[package]]
|
|
1559
|
+
name = "simd-adler32"
|
|
1560
|
+
version = "0.3.9"
|
|
1561
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1562
|
+
checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
|
|
1563
|
+
|
|
1402
1564
|
[[package]]
|
|
1403
1565
|
name = "simdutf8"
|
|
1404
1566
|
version = "0.1.5"
|
|
@@ -1423,6 +1585,12 @@ version = "1.15.1"
|
|
|
1423
1585
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1424
1586
|
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
|
1425
1587
|
|
|
1588
|
+
[[package]]
|
|
1589
|
+
name = "snap"
|
|
1590
|
+
version = "1.1.1"
|
|
1591
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1592
|
+
checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
|
|
1593
|
+
|
|
1426
1594
|
[[package]]
|
|
1427
1595
|
name = "sprs"
|
|
1428
1596
|
version = "0.11.4"
|
|
@@ -1481,6 +1649,17 @@ dependencies = [
|
|
|
1481
1649
|
"syn",
|
|
1482
1650
|
]
|
|
1483
1651
|
|
|
1652
|
+
[[package]]
|
|
1653
|
+
name = "thrift"
|
|
1654
|
+
version = "0.17.0"
|
|
1655
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1656
|
+
checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09"
|
|
1657
|
+
dependencies = [
|
|
1658
|
+
"byteorder",
|
|
1659
|
+
"integer-encoding",
|
|
1660
|
+
"ordered-float",
|
|
1661
|
+
]
|
|
1662
|
+
|
|
1484
1663
|
[[package]]
|
|
1485
1664
|
name = "tiny-keccak"
|
|
1486
1665
|
version = "2.0.2"
|
|
@@ -1500,6 +1679,12 @@ dependencies = [
|
|
|
1500
1679
|
"serde_json",
|
|
1501
1680
|
]
|
|
1502
1681
|
|
|
1682
|
+
[[package]]
|
|
1683
|
+
name = "twox-hash"
|
|
1684
|
+
version = "2.1.2"
|
|
1685
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1686
|
+
checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c"
|
|
1687
|
+
|
|
1503
1688
|
[[package]]
|
|
1504
1689
|
name = "unicode-ident"
|
|
1505
1690
|
version = "1.0.24"
|
|
@@ -1872,8 +2057,42 @@ dependencies = [
|
|
|
1872
2057
|
"syn",
|
|
1873
2058
|
]
|
|
1874
2059
|
|
|
2060
|
+
[[package]]
|
|
2061
|
+
name = "zlib-rs"
|
|
2062
|
+
version = "0.6.3"
|
|
2063
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2064
|
+
checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513"
|
|
2065
|
+
|
|
1875
2066
|
[[package]]
|
|
1876
2067
|
name = "zmij"
|
|
1877
2068
|
version = "1.0.21"
|
|
1878
2069
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1879
2070
|
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
|
|
2071
|
+
|
|
2072
|
+
[[package]]
|
|
2073
|
+
name = "zstd"
|
|
2074
|
+
version = "0.13.3"
|
|
2075
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2076
|
+
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
|
|
2077
|
+
dependencies = [
|
|
2078
|
+
"zstd-safe",
|
|
2079
|
+
]
|
|
2080
|
+
|
|
2081
|
+
[[package]]
|
|
2082
|
+
name = "zstd-safe"
|
|
2083
|
+
version = "7.2.4"
|
|
2084
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2085
|
+
checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d"
|
|
2086
|
+
dependencies = [
|
|
2087
|
+
"zstd-sys",
|
|
2088
|
+
]
|
|
2089
|
+
|
|
2090
|
+
[[package]]
|
|
2091
|
+
name = "zstd-sys"
|
|
2092
|
+
version = "2.0.16+zstd.1.5.7"
|
|
2093
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2094
|
+
checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748"
|
|
2095
|
+
dependencies = [
|
|
2096
|
+
"cc",
|
|
2097
|
+
"pkg-config",
|
|
2098
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rxgraph
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: 3.11
|
|
6
6
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -185,6 +185,17 @@ result = graph.search(
|
|
|
185
185
|
)
|
|
186
186
|
```
|
|
187
187
|
|
|
188
|
+
File-backed graphs use the same plugin path and keep Python out of the search
|
|
189
|
+
loop:
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
graph = rxg.Graph.from_parquet(
|
|
193
|
+
nodes="nodes.parquet",
|
|
194
|
+
edges="edges.parquet",
|
|
195
|
+
payloads="lazy",
|
|
196
|
+
)
|
|
197
|
+
```
|
|
198
|
+
|
|
188
199
|
The consumer's crate depends on `rxgraph` with the `python` feature (their own
|
|
189
200
|
crate is the `cdylib` that needs pyo3's `extension-module`; rxgraph's `python`
|
|
190
201
|
feature deliberately does not enable it):
|
|
@@ -195,17 +206,18 @@ rxgraph = { version = "0.6", features = ["python"] }
|
|
|
195
206
|
pyo3 = { version = "0.28", features = ["extension-module"] }
|
|
196
207
|
```
|
|
197
208
|
|
|
198
|
-
The Rust side implements `rxgraph::
|
|
209
|
+
The Rust side implements `rxgraph::TypedKernel`, decodes payload structs with
|
|
210
|
+
`TryFrom<rxgraph::ArrowRow<'_>>`, and ends with a small macro call:
|
|
199
211
|
|
|
200
212
|
```rust
|
|
201
|
-
rxgraph::
|
|
213
|
+
rxgraph::typed_plugin! {
|
|
202
214
|
module = _native;
|
|
203
215
|
"hop_budget" => HopBudget::from_params,
|
|
204
216
|
}
|
|
205
217
|
```
|
|
206
218
|
|
|
207
219
|
See [`examples/rust-kernel-plugin/`](examples/rust-kernel-plugin/README.md) for
|
|
208
|
-
the full guide, including the
|
|
220
|
+
the full guide, including the typed payload shape and the maturin build.
|
|
209
221
|
|
|
210
222
|
## Architecture
|
|
211
223
|
|
|
@@ -171,6 +171,17 @@ result = graph.search(
|
|
|
171
171
|
)
|
|
172
172
|
```
|
|
173
173
|
|
|
174
|
+
File-backed graphs use the same plugin path and keep Python out of the search
|
|
175
|
+
loop:
|
|
176
|
+
|
|
177
|
+
```python
|
|
178
|
+
graph = rxg.Graph.from_parquet(
|
|
179
|
+
nodes="nodes.parquet",
|
|
180
|
+
edges="edges.parquet",
|
|
181
|
+
payloads="lazy",
|
|
182
|
+
)
|
|
183
|
+
```
|
|
184
|
+
|
|
174
185
|
The consumer's crate depends on `rxgraph` with the `python` feature (their own
|
|
175
186
|
crate is the `cdylib` that needs pyo3's `extension-module`; rxgraph's `python`
|
|
176
187
|
feature deliberately does not enable it):
|
|
@@ -181,17 +192,18 @@ rxgraph = { version = "0.6", features = ["python"] }
|
|
|
181
192
|
pyo3 = { version = "0.28", features = ["extension-module"] }
|
|
182
193
|
```
|
|
183
194
|
|
|
184
|
-
The Rust side implements `rxgraph::
|
|
195
|
+
The Rust side implements `rxgraph::TypedKernel`, decodes payload structs with
|
|
196
|
+
`TryFrom<rxgraph::ArrowRow<'_>>`, and ends with a small macro call:
|
|
185
197
|
|
|
186
198
|
```rust
|
|
187
|
-
rxgraph::
|
|
199
|
+
rxgraph::typed_plugin! {
|
|
188
200
|
module = _native;
|
|
189
201
|
"hop_budget" => HopBudget::from_params,
|
|
190
202
|
}
|
|
191
203
|
```
|
|
192
204
|
|
|
193
205
|
See [`examples/rust-kernel-plugin/`](examples/rust-kernel-plugin/README.md) for
|
|
194
|
-
the full guide, including the
|
|
206
|
+
the full guide, including the typed payload shape and the maturin build.
|
|
195
207
|
|
|
196
208
|
## Architecture
|
|
197
209
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "rxgraph"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.9.0"
|
|
4
4
|
edition.workspace = true
|
|
5
5
|
rust-version.workspace = true
|
|
6
6
|
description = "High-performance graph traversal engine"
|
|
@@ -22,6 +22,7 @@ anyhow.workspace = true
|
|
|
22
22
|
arrow.workspace = true
|
|
23
23
|
arrow-schema.workspace = true
|
|
24
24
|
inventory.workspace = true
|
|
25
|
+
parquet.workspace = true
|
|
25
26
|
# Optional: only pulled in by the `python` feature for the PyO3 binding layer.
|
|
26
27
|
# `extension-module` is intentionally NOT enabled here; the final extension
|
|
27
28
|
# crate (cdylib) enables it, so this stays linkable/testable as an rlib.
|
|
@@ -6,7 +6,7 @@ use std::{
|
|
|
6
6
|
|
|
7
7
|
use anyhow::{Context, Result};
|
|
8
8
|
use rxgraph::{
|
|
9
|
-
GraphId, NodeId, RunOptions, TraversalStrategy, search_native,
|
|
9
|
+
GraphId, NodeId, RunOptions, TraversalStrategy, Value, search_native,
|
|
10
10
|
traversal::native::{self, GraphStore, OutgoingEdge},
|
|
11
11
|
};
|
|
12
12
|
|
|
@@ -113,7 +113,10 @@ impl native::Kernel for RiskKernel {
|
|
|
113
113
|
})
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
fn visit(
|
|
116
|
+
fn visit(
|
|
117
|
+
&self,
|
|
118
|
+
cx: &native::EdgeCtx<'_, '_, Self::Node, Self::Edge, Self::State>,
|
|
119
|
+
) -> Result<bool> {
|
|
117
120
|
let transfer = cx.edge()?;
|
|
118
121
|
let dest = cx.dest()?;
|
|
119
122
|
Ok(transfer.allowed
|
|
@@ -123,7 +126,7 @@ impl native::Kernel for RiskKernel {
|
|
|
123
126
|
|
|
124
127
|
fn next_state(
|
|
125
128
|
&self,
|
|
126
|
-
cx: &native::EdgeCtx<'_, Self::Node, Self::Edge, Self::State>,
|
|
129
|
+
cx: &native::EdgeCtx<'_, '_, Self::Node, Self::Edge, Self::State>,
|
|
127
130
|
) -> Result<Self::State> {
|
|
128
131
|
let transfer = cx.edge()?;
|
|
129
132
|
let dest = cx.dest()?;
|
|
@@ -136,9 +139,16 @@ impl native::Kernel for RiskKernel {
|
|
|
136
139
|
Ok(next)
|
|
137
140
|
}
|
|
138
141
|
|
|
139
|
-
fn stop(
|
|
142
|
+
fn stop(
|
|
143
|
+
&self,
|
|
144
|
+
cx: &native::EdgeCtx<'_, '_, Self::Node, Self::Edge, Self::State>,
|
|
145
|
+
) -> Result<bool> {
|
|
140
146
|
Ok(cx.dest()?.target && (!self.require_checkpoint || !cx.state().checkpoints.is_empty()))
|
|
141
147
|
}
|
|
148
|
+
|
|
149
|
+
fn state_row(&self, state: &Self::State) -> rxgraph::StateRow {
|
|
150
|
+
vec![("total_risk".to_string(), Value::U64(state.total_risk))]
|
|
151
|
+
}
|
|
142
152
|
}
|
|
143
153
|
|
|
144
154
|
struct FraudStore {
|
|
@@ -300,7 +300,7 @@ pub(crate) fn ipc_list_literal_to_value(bytes: &[u8]) -> Result<Value> {
|
|
|
300
300
|
.map(Value::List)
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
fn array_row_to_value(array: &dyn Array, row: usize) -> Result<Value> {
|
|
303
|
+
pub(crate) fn array_row_to_value(array: &dyn Array, row: usize) -> Result<Value> {
|
|
304
304
|
macro_rules! primitive {
|
|
305
305
|
($array:ty, $value:expr) => {
|
|
306
306
|
if let Some(array) = array.as_any().downcast_ref::<$array>() {
|
|
@@ -113,7 +113,7 @@ impl Value {
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
pub
|
|
116
|
+
pub fn as_list(&self) -> Result<Option<&[Value]>> {
|
|
117
117
|
match self {
|
|
118
118
|
Self::Null => Ok(None),
|
|
119
119
|
Self::List(values) => Ok(Some(values)),
|
|
@@ -121,7 +121,23 @@ impl Value {
|
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
pub
|
|
124
|
+
pub fn into_list(self) -> Result<Option<Vec<Value>>> {
|
|
125
|
+
match self {
|
|
126
|
+
Self::Null => Ok(None),
|
|
127
|
+
Self::List(values) => Ok(Some(values)),
|
|
128
|
+
other => bail!("expected list, got {other:?}"),
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
pub fn as_struct(&self) -> Result<Option<&[(String, Value)]>> {
|
|
133
|
+
match self {
|
|
134
|
+
Self::Null => Ok(None),
|
|
135
|
+
Self::Struct(fields) => Ok(Some(fields)),
|
|
136
|
+
other => bail!("expected struct, got {other:?}"),
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
pub fn into_struct(self) -> Result<Option<Vec<(String, Value)>>> {
|
|
125
141
|
match self {
|
|
126
142
|
Self::Null => Ok(None),
|
|
127
143
|
Self::Struct(fields) => Ok(Some(fields)),
|
|
@@ -10,7 +10,7 @@ use anyhow::{Result, anyhow};
|
|
|
10
10
|
use crate::{
|
|
11
11
|
dsl::{StateRow, Value},
|
|
12
12
|
graph::{Graph, NodeId, OwnedGraphId},
|
|
13
|
-
traversal::{EdgeCtx, Kernel},
|
|
13
|
+
traversal::{ArrowRow, EdgeCtx, Kernel, PayloadField, TypedKernel, native},
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
/// Per-path state for [`WeightedBudget`]: the weight accumulated so far.
|
|
@@ -118,3 +118,87 @@ crate::inventory::submit! {
|
|
|
118
118
|
make: |params| Ok(crate::boxed_run(WeightedBudget::from_params(params)?)),
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
+
|
|
122
|
+
#[derive(Clone, Debug)]
|
|
123
|
+
pub struct WeightedBudgetTyped {
|
|
124
|
+
pub weight_col: String,
|
|
125
|
+
pub budget: u64,
|
|
126
|
+
pub target: OwnedGraphId,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
130
|
+
pub struct BudgetEdge {
|
|
131
|
+
pub weight: u64,
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
impl TryFrom<ArrowRow<'_>> for BudgetEdge {
|
|
135
|
+
type Error = anyhow::Error;
|
|
136
|
+
|
|
137
|
+
fn try_from(row: ArrowRow<'_>) -> Result<Self> {
|
|
138
|
+
Ok(Self {
|
|
139
|
+
weight: row.u64("weight")?.unwrap_or(0),
|
|
140
|
+
})
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
impl TypedKernel for WeightedBudgetTyped {
|
|
145
|
+
type Node = ();
|
|
146
|
+
type Edge = BudgetEdge;
|
|
147
|
+
type State = BudgetState;
|
|
148
|
+
|
|
149
|
+
fn edge_fields(&self) -> Vec<PayloadField> {
|
|
150
|
+
vec![PayloadField::aliased(self.weight_col.clone(), "weight")]
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
fn initial_state(
|
|
154
|
+
&self,
|
|
155
|
+
_cx: &native::StartCtx<'_, Self::Node, Self::Edge>,
|
|
156
|
+
) -> Result<Self::State> {
|
|
157
|
+
Ok(BudgetState { spent: 0 })
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
fn visit(
|
|
161
|
+
&self,
|
|
162
|
+
cx: &native::EdgeCtx<'_, '_, Self::Node, Self::Edge, Self::State>,
|
|
163
|
+
) -> Result<bool> {
|
|
164
|
+
Ok(cx.state().spent.saturating_add(cx.edge()?.weight) <= self.budget)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
fn next_state(
|
|
168
|
+
&self,
|
|
169
|
+
cx: &native::EdgeCtx<'_, '_, Self::Node, Self::Edge, Self::State>,
|
|
170
|
+
) -> Result<Self::State> {
|
|
171
|
+
Ok(BudgetState {
|
|
172
|
+
spent: cx.state().spent.saturating_add(cx.edge()?.weight),
|
|
173
|
+
})
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
fn stop(
|
|
177
|
+
&self,
|
|
178
|
+
cx: &native::EdgeCtx<'_, '_, Self::Node, Self::Edge, Self::State>,
|
|
179
|
+
) -> Result<bool> {
|
|
180
|
+
Ok(cx.dest_external_id()? == Some(self.target.as_ref()))
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
fn state_row(&self, state: &Self::State) -> StateRow {
|
|
184
|
+
vec![("spent".to_string(), Value::U64(state.spent))]
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
impl WeightedBudgetTyped {
|
|
189
|
+
fn from_params(params: &serde_json::Value) -> Result<Self> {
|
|
190
|
+
let base = WeightedBudget::from_params(params)?;
|
|
191
|
+
Ok(Self {
|
|
192
|
+
weight_col: base.weight_col,
|
|
193
|
+
budget: base.budget,
|
|
194
|
+
target: base.target,
|
|
195
|
+
})
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
crate::inventory::submit! {
|
|
200
|
+
crate::TypedKernelEntry {
|
|
201
|
+
name: "weighted_budget",
|
|
202
|
+
make: |params| Ok(crate::boxed_typed_run(WeightedBudgetTyped::from_params(params)?)),
|
|
203
|
+
}
|
|
204
|
+
}
|