Skip to content

Commit ff7ff9d

Browse files
committed
impl edge node filtering, add few tests
1 parent 3251d27 commit ff7ff9d

16 files changed

+1057
-531
lines changed

raphtory/src/db/graph/views/filter/edge_field_filtered_graph.rs

Lines changed: 0 additions & 90 deletions
This file was deleted.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
use crate::{
2+
db::{
3+
api::{
4+
properties::internal::InheritPropertiesOps,
5+
view::internal::{
6+
Immutable, InheritEdgeHistoryFilter, InheritEdgeLayerFilterOps,
7+
InheritExplodedEdgeFilterOps, InheritLayerOps, InheritListOps, InheritMaterialize,
8+
InheritNodeFilterOps, InheritNodeHistoryFilter, InheritStorageOps,
9+
InheritTimeSemantics, InternalEdgeFilterOps, Static,
10+
},
11+
},
12+
graph::views::filter::model::{edge_filter::Endpoint, node_filter::CompositeNodeFilter},
13+
},
14+
prelude::GraphViewOps,
15+
};
16+
use raphtory_api::{core::entities::LayerIds, inherit::Base};
17+
use raphtory_storage::{
18+
core_ops::InheritCoreGraphOps,
19+
graph::edges::{edge_ref::EdgeStorageRef, edge_storage_ops::EdgeStorageOps},
20+
};
21+
22+
#[derive(Debug, Clone)]
23+
pub struct EdgeNodeFilteredGraph<G> {
24+
graph: G,
25+
endpoint: Endpoint,
26+
filter: CompositeNodeFilter,
27+
}
28+
29+
impl<G> EdgeNodeFilteredGraph<G> {
30+
#[inline]
31+
pub fn new(graph: G, endpoint: Endpoint, node_cf: CompositeNodeFilter) -> Self {
32+
Self {
33+
graph,
34+
endpoint,
35+
filter: node_cf,
36+
}
37+
}
38+
}
39+
40+
impl<G> Base for EdgeNodeFilteredGraph<G> {
41+
type Base = G;
42+
#[inline]
43+
fn base(&self) -> &Self::Base {
44+
&self.graph
45+
}
46+
}
47+
48+
impl<G> Static for EdgeNodeFilteredGraph<G> {}
49+
impl<G> Immutable for EdgeNodeFilteredGraph<G> {}
50+
51+
impl<'graph, G: GraphViewOps<'graph>> InheritCoreGraphOps for EdgeNodeFilteredGraph<G> {}
52+
impl<'graph, G: GraphViewOps<'graph>> InheritStorageOps for EdgeNodeFilteredGraph<G> {}
53+
impl<'graph, G: GraphViewOps<'graph>> InheritLayerOps for EdgeNodeFilteredGraph<G> {}
54+
impl<'graph, G: GraphViewOps<'graph>> InheritListOps for EdgeNodeFilteredGraph<G> {}
55+
impl<'graph, G: GraphViewOps<'graph>> InheritMaterialize for EdgeNodeFilteredGraph<G> {}
56+
impl<'graph, G: GraphViewOps<'graph>> InheritNodeFilterOps for EdgeNodeFilteredGraph<G> {}
57+
impl<'graph, G: GraphViewOps<'graph>> InheritPropertiesOps for EdgeNodeFilteredGraph<G> {}
58+
impl<'graph, G: GraphViewOps<'graph>> InheritTimeSemantics for EdgeNodeFilteredGraph<G> {}
59+
impl<'graph, G: GraphViewOps<'graph>> InheritNodeHistoryFilter for EdgeNodeFilteredGraph<G> {}
60+
impl<'graph, G: GraphViewOps<'graph>> InheritEdgeHistoryFilter for EdgeNodeFilteredGraph<G> {}
61+
impl<'graph, G: GraphViewOps<'graph>> InheritEdgeLayerFilterOps for EdgeNodeFilteredGraph<G> {}
62+
impl<'graph, G: GraphViewOps<'graph>> InheritExplodedEdgeFilterOps for EdgeNodeFilteredGraph<G> {}
63+
64+
impl<'graph, G: GraphViewOps<'graph>> InternalEdgeFilterOps for EdgeNodeFilteredGraph<G> {
65+
#[inline]
66+
fn internal_edge_filtered(&self) -> bool {
67+
true
68+
}
69+
70+
#[inline]
71+
fn internal_edge_list_trusted(&self) -> bool {
72+
false
73+
}
74+
75+
#[inline]
76+
fn internal_filter_edge(&self, edge: EdgeStorageRef, layer_ids: &LayerIds) -> bool {
77+
if !self.graph.internal_filter_edge(edge, layer_ids) {
78+
return false;
79+
}
80+
81+
// Fetch the endpoint node and delegate to the node composite filter.
82+
let ok = match self.endpoint {
83+
Endpoint::Src => self
84+
.filter
85+
.matches_node(&self.graph, self.graph.core_node(edge.src()).as_ref()),
86+
Endpoint::Dst => self
87+
.filter
88+
.matches_node(&self.graph, self.graph.core_node(edge.dst()).as_ref()),
89+
};
90+
ok
91+
}
92+
}

raphtory/src/db/graph/views/filter/edge_property_filtered_graph.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,12 @@ mod test_edge_property_filtered_graph {
107107
views::{
108108
deletion_graph::PersistentGraph,
109109
filter::model::{
110-
edge_filter::{EdgeFilter, EdgeFilterOps},
111-
property_filter::PropertyFilterOps,
110+
edge_filter::EdgeFilter, property_filter::PropertyFilterOps,
112111
ComposableFilter, PropertyFilterFactory,
113112
},
114113
},
115114
},
116115
},
117-
errors::GraphError,
118116
prelude::*,
119117
test_utils::{
120118
build_edge_deletions, build_edge_list, build_graph_from_edge_list, build_window,

raphtory/src/db/graph/views/filter/exploded_edge_property_filter.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ use crate::{
1010
InheritTimeSemantics, InternalExplodedEdgeFilterOps, Static,
1111
},
1212
},
13-
graph::views::filter::{internal::CreateFilter, model::edge_filter::ExplodedEdgeFilter},
13+
graph::views::filter::model::exploded_edge_filter::ExplodedEdgeFilter,
1414
},
15-
errors::GraphError,
1615
prelude::{GraphViewOps, LayerOps, PropertyFilter},
1716
};
1817
use raphtory_api::{
@@ -53,22 +52,6 @@ impl<'graph, G: GraphViewOps<'graph>> ExplodedEdgePropertyFilteredGraph<G> {
5352
}
5453
}
5554

56-
impl CreateFilter for PropertyFilter<ExplodedEdgeFilter> {
57-
type EntityFiltered<'graph, G: GraphViewOps<'graph>> = ExplodedEdgePropertyFilteredGraph<G>;
58-
59-
fn create_filter<'graph, G: GraphViewOps<'graph>>(
60-
self,
61-
graph: G,
62-
) -> Result<Self::EntityFiltered<'graph, G>, GraphError> {
63-
let prop_id = self.resolve_prop_id(graph.edge_meta(), graph.num_layers() > 1)?;
64-
Ok(ExplodedEdgePropertyFilteredGraph::new(
65-
graph.clone(),
66-
prop_id,
67-
self,
68-
))
69-
}
70-
}
71-
7255
impl<G> Base for ExplodedEdgePropertyFilteredGraph<G> {
7356
type Base = G;
7457

@@ -158,8 +141,9 @@ mod test_exploded_edge_property_filtered_graph {
158141
exploded_edge_property_filter::ExplodedEdgePropertyFilteredGraph,
159142
internal::CreateFilter,
160143
model::{
161-
edge_filter::ExplodedEdgeFilter, property_filter::PropertyFilterOps,
162-
PropertyFilterFactory, TryAsCompositeFilter,
144+
exploded_edge_filter::ExplodedEdgeFilter,
145+
property_filter::PropertyFilterOps, PropertyFilterFactory,
146+
TryAsCompositeFilter,
163147
},
164148
},
165149
},

0 commit comments

Comments
 (0)