Skip to content

Commit a6493dc

Browse files
committed
Merge branch 'master_filter' into features/edge-srcdst
# Conflicts: # python/python/raphtory/filter/__init__.pyi # python/tests/test_base_install/test_filters/test_node_property_filter.py # python/tests/test_base_install/test_graphql/test_filters/test_neighbours_filter.py # raphtory-benchmark/benches/search_bench.rs # raphtory-graphql/schema.graphql # raphtory-graphql/src/model/graph/edge.rs # raphtory-graphql/src/model/graph/edges.rs # raphtory-graphql/src/model/graph/filtering.rs # raphtory-graphql/src/model/graph/graph.rs # raphtory-graphql/src/model/graph/node.rs # raphtory-graphql/src/model/graph/nodes.rs # raphtory-graphql/src/model/graph/path_from_node.rs # raphtory/src/db/graph/views/filter/exploded_edge_property_filter.rs # raphtory/src/db/graph/views/filter/mod.rs # raphtory/src/db/graph/views/filter/model/edge_filter.rs # raphtory/src/db/graph/views/filter/model/mod.rs # raphtory/src/db/graph/views/filter/model/node_filter.rs # raphtory/src/db/graph/views/filter/model/property_filter.rs # raphtory/src/python/filter/edge_filter_builders.rs # raphtory/src/python/filter/mod.rs # raphtory/src/python/filter/node_filter_builders.rs # raphtory/src/python/filter/property_filter_builders.rs # raphtory/src/python/filter/window_filter.rs # raphtory/src/search/edge_filter_executor.rs # raphtory/src/search/exploded_edge_filter_executor.rs # raphtory/src/search/mod.rs
2 parents a377f00 + 969e405 commit a6493dc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+3879
-3813
lines changed

python/python/raphtory/filter/__init__.pyi

Lines changed: 125 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@ import pyvis # type: ignore
2424

2525
__all__ = [
2626
"FilterExpr",
27+
"FilterOps",
2728
"PropertyFilterOps",
2829
"Node",
29-
"EdgeFilterOp",
30-
"EdgeEndpoint",
31-
"Edge",
32-
"ExplodedEdge",
33-
"Property",
34-
"Metadata",
3530
"NodeWindow",
31+
"Edge",
32+
"EdgeEndpoint",
33+
"EdgeFilterOp",
34+
"EdgeIdFilterOp",
3635
"EdgeWindow",
36+
"ExplodedEdge",
37+
"ExplodedEdgeEndpoint",
38+
"ExplodedEdgeFilterOp",
39+
"ExplodedEdgeIdFilterOp",
3740
"ExplodedEdgeWindow",
3841
]
3942

@@ -53,7 +56,7 @@ class FilterExpr(object):
5356
def __ror__(self, value):
5457
"""Return value|self."""
5558

56-
class PropertyFilterOps(object):
59+
class FilterOps(object):
5760
def __eq__(self, value):
5861
"""Return self==value."""
5962

@@ -90,6 +93,8 @@ class PropertyFilterOps(object):
9093
def not_contains(self, value): ...
9194
def starts_with(self, value): ...
9295
def sum(self): ...
96+
97+
class PropertyFilterOps(FilterOps):
9398
def temporal(self): ...
9499

95100
class Node(object):
@@ -127,6 +132,30 @@ class Node(object):
127132
@staticmethod
128133
def window(py_start, py_end): ...
129134

135+
class NodeWindow(object):
136+
def metadata(self, name): ...
137+
def property(self, name): ...
138+
139+
class Edge(object):
140+
@staticmethod
141+
def dst(): ...
142+
@staticmethod
143+
def metadata(name): ...
144+
@staticmethod
145+
def property(name): ...
146+
@staticmethod
147+
def src(): ...
148+
@staticmethod
149+
def window(start, end): ...
150+
151+
class EdgeEndpoint(object):
152+
def id(self): ...
153+
def metadata(self, name): ...
154+
def name(self): ...
155+
def node_type(self): ...
156+
def property(self, name): ...
157+
def window(self, py_start, py_end): ...
158+
130159
class EdgeFilterOp(object):
131160
def __eq__(self, value):
132161
"""Return self==value."""
@@ -154,11 +183,38 @@ class EdgeFilterOp(object):
154183
def not_contains(self, value): ...
155184
def starts_with(self, value): ...
156185

157-
class EdgeEndpoint(object):
158-
def id(self): ...
159-
def name(self): ...
186+
class EdgeIdFilterOp(object):
187+
def __eq__(self, value):
188+
"""Return self==value."""
160189

161-
class Edge(object):
190+
def __ge__(self, value):
191+
"""Return self>=value."""
192+
193+
def __gt__(self, value):
194+
"""Return self>value."""
195+
196+
def __le__(self, value):
197+
"""Return self<=value."""
198+
199+
def __lt__(self, value):
200+
"""Return self<value."""
201+
202+
def __ne__(self, value):
203+
"""Return self!=value."""
204+
205+
def contains(self, value): ...
206+
def ends_with(self, value): ...
207+
def fuzzy_search(self, value, levenshtein_distance, prefix_match): ...
208+
def is_in(self, values): ...
209+
def is_not_in(self, values): ...
210+
def not_contains(self, value): ...
211+
def starts_with(self, value): ...
212+
213+
class EdgeWindow(object):
214+
def metadata(self, name): ...
215+
def property(self, name): ...
216+
217+
class ExplodedEdge(object):
162218
@staticmethod
163219
def dst(): ...
164220
@staticmethod
@@ -168,28 +224,69 @@ class Edge(object):
168224
@staticmethod
169225
def src(): ...
170226
@staticmethod
171-
def window(py_start, py_end): ...
227+
def window(start, end): ...
172228

173-
class ExplodedEdge(object):
174-
@staticmethod
175-
def metadata(name): ...
176-
@staticmethod
177-
def property(name): ...
178-
@staticmethod
179-
def window(py_start, py_end): ...
229+
class ExplodedEdgeEndpoint(object):
230+
def id(self): ...
231+
def metadata(self, name): ...
232+
def name(self): ...
233+
def node_type(self): ...
234+
def property(self, name): ...
235+
def window(self, py_start, py_end): ...
180236

181-
class Property(PropertyFilterOps):
182-
def temporal(self): ...
237+
class ExplodedEdgeFilterOp(object):
238+
def __eq__(self, value):
239+
"""Return self==value."""
183240

184-
class Metadata(PropertyFilterOps): ...
241+
def __ge__(self, value):
242+
"""Return self>=value."""
185243

186-
class NodeWindow(object):
187-
def metadata(self, name): ...
188-
def property(self, name): ...
244+
def __gt__(self, value):
245+
"""Return self>value."""
189246

190-
class EdgeWindow(object):
191-
def metadata(self, name): ...
192-
def property(self, name): ...
247+
def __le__(self, value):
248+
"""Return self<=value."""
249+
250+
def __lt__(self, value):
251+
"""Return self<value."""
252+
253+
def __ne__(self, value):
254+
"""Return self!=value."""
255+
256+
def contains(self, value): ...
257+
def ends_with(self, value): ...
258+
def fuzzy_search(self, value, levenshtein_distance, prefix_match): ...
259+
def is_in(self, values): ...
260+
def is_not_in(self, values): ...
261+
def not_contains(self, value): ...
262+
def starts_with(self, value): ...
263+
264+
class ExplodedEdgeIdFilterOp(object):
265+
def __eq__(self, value):
266+
"""Return self==value."""
267+
268+
def __ge__(self, value):
269+
"""Return self>=value."""
270+
271+
def __gt__(self, value):
272+
"""Return self>value."""
273+
274+
def __le__(self, value):
275+
"""Return self<=value."""
276+
277+
def __lt__(self, value):
278+
"""Return self<value."""
279+
280+
def __ne__(self, value):
281+
"""Return self!=value."""
282+
283+
def contains(self, value): ...
284+
def ends_with(self, value): ...
285+
def fuzzy_search(self, value, levenshtein_distance, prefix_match): ...
286+
def is_in(self, values): ...
287+
def is_not_in(self, values): ...
288+
def not_contains(self, value): ...
289+
def starts_with(self, value): ...
193290

194291
class ExplodedEdgeWindow(object):
195292
def metadata(self, name): ...

python/tests/test_base_install/test_filters/test_edge_endpoint_filters.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def check(graph):
1111
result = sorted(graph.filter(expr).edges.id)
1212
expected = sorted([("2", "1"), ("2", "3")])
1313
assert result == expected
14+
1415
return check
1516

1617

@@ -22,8 +23,10 @@ def check(graph):
2223
result = sorted(graph.filter(expr).edges.id)
2324
expected = sorted([("2", "3")])
2425
assert result == expected
26+
2527
return check
2628

29+
2730
@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"])
2831
def test_edges_dst_property_any_contains():
2932
def check(graph):
@@ -32,6 +35,7 @@ def check(graph):
3235
result = sorted(graph.filter(expr).edges.id)
3336
expected = sorted([("2", "3"), ("3", "4")])
3437
assert result == expected
38+
3539
return check
3640

3741

@@ -40,8 +44,11 @@ def test_edges_dst_property_gt():
4044
def check(graph):
4145
expr = filter.Edge.dst().property("p100") > 55
4246
result = sorted(graph.filter(expr).edges.id)
43-
expected = sorted([("2", "3")]) # edge (2,3) is at times 2 and 3; IDs dedup by view
47+
expected = sorted(
48+
[("2", "3")]
49+
) # edge (2,3) is at times 2 and 3; IDs dedup by view
4450
assert result == expected
51+
4552
return check
4653

4754

@@ -52,6 +59,7 @@ def check(graph):
5259
result = sorted(graph.filter(expr).edges.id)
5360
expected = sorted([("a", "d")])
5461
assert result == expected
62+
5563
return check
5664

5765

@@ -63,6 +71,7 @@ def check(graph):
6371
result = sorted(graph.filter(expr).edges.id)
6472
expected = sorted([("a", "d")])
6573
assert result == expected
74+
6675
return check
6776

6877

@@ -75,6 +84,7 @@ def check(graph):
7584
result = sorted(graph.filter(expr).edges.id)
7685
expected = sorted([("a", "d")])
7786
assert result == expected
87+
7888
return check
7989

8090

@@ -85,6 +95,7 @@ def check(graph):
8595
result = sorted(graph.filter(expr).edges.id)
8696
expected = sorted([("a", "d"), ("b", "d")])
8797
assert result == expected
98+
8899
return check
89100

90101

@@ -97,8 +108,10 @@ def check(graph):
97108
result = sorted(graph.filter(expr).edges.id)
98109
expected = sorted([("2", "3")])
99110
assert result == expected
111+
100112
return check
101113

114+
102115
@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"])
103116
def test_edges_src_and_dst_property():
104117
def check(graph):
@@ -108,6 +121,7 @@ def check(graph):
108121
result = sorted(graph.filter(expr).edges.id)
109122
expected = sorted([("2", "3")])
110123
assert result == expected
124+
111125
return check
112126

113127

@@ -120,30 +134,33 @@ def check(graph):
120134
result = sorted(graph.filter(expr).edges.id)
121135
expected = sorted([("2", "1"), ("2", "3")])
122136
assert result == expected
137+
123138
return check
124139

125140

126141
@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph"))
127142
def test_edges_src_property_and_dst_name():
128143
def check(graph):
129144
expr = (filter.Edge.src().property("prop1") >= 20) & (
130-
filter.Edge.dst().name() == "d"
145+
filter.Edge.dst().name() == "d"
131146
)
132147
result = sorted(graph.filter(expr).edges.id)
133148
expected = sorted([("a", "d"), ("c", "d")])
134149
assert result == expected
150+
135151
return check
136152

137153

138154
@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph"))
139155
def test_edges_src_metadata_and_edge_property():
140156
def check(graph):
141157
expr = (filter.Edge.src().metadata("prop1").sum() == 36) & (
142-
filter.Edge.property("eprop1") > 20
158+
filter.Edge.property("eprop1") > 20
143159
)
144160
result = sorted(graph.filter(expr).edges.id)
145161
expected = sorted([("a", "d")])
146162
assert result == expected
163+
147164
return check
148165

149166

@@ -173,10 +190,9 @@ def check(graph):
173190
@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"])
174191
def test_edges_src_and_dst_node_type():
175192
def check(graph):
176-
expr = (
177-
filter.Edge.src().node_type().starts_with("fire")
178-
& filter.Edge.dst().node_type().contains("nomads")
179-
)
193+
expr = filter.Edge.src().node_type().starts_with(
194+
"fire"
195+
) & filter.Edge.dst().node_type().contains("nomads")
180196
result = sorted(graph.filter(expr).edges.id)
181197
expected = sorted([("1", "2")])
182198
assert result == expected
@@ -187,9 +203,8 @@ def check(graph):
187203
@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"])
188204
def test_edges_src_or_dst_node_type():
189205
def check(graph):
190-
expr = (
191-
(filter.Edge.src().node_type() == "air_nomads")
192-
| (filter.Edge.dst().node_type() == "fire_nation")
206+
expr = (filter.Edge.src().node_type() == "air_nomads") | (
207+
filter.Edge.dst().node_type() == "fire_nation"
193208
)
194209
result = sorted(graph.filter(expr).edges.id)
195210
expected = sorted([("2", "3"), ("2", "1"), ("3", "1")])
@@ -220,12 +235,11 @@ def check(graph):
220235
def test_edges_src_node_type_eq_compose_with_edge_prop():
221236
def check(graph):
222237
# edge ("c","d") has eprop1 > 20 but src node_type isn't fire_nation, so not included here
223-
expr = (
224-
(filter.Edge.src().node_type() == "fire_nation")
225-
& (filter.Edge.property("eprop1") > 20)
238+
expr = (filter.Edge.src().node_type() == "fire_nation") & (
239+
filter.Edge.property("eprop1") > 20
226240
)
227241
result = sorted(graph.filter(expr).edges.id)
228242
expected = sorted([("a", "d")])
229243
assert result == expected
230244

231-
return check
245+
return check

0 commit comments

Comments
 (0)