Skip to content

Commit 5902056

Browse files
committed
Added src/dst endpoint filtering support for exploded edge filters in rust and python
1 parent 9242e98 commit 5902056

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

raphtory/src/db/graph/views/filter/model/exploded_edge_filter.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ use crate::{
1616
};
1717
use raphtory_core::utils::time::IntoTime;
1818
use std::{fmt, fmt::Display, ops::Deref, sync::Arc};
19+
use crate::db::graph::views::filter::edge_node_filtered_graph::EdgeNodeFilteredGraph;
20+
use crate::db::graph::views::filter::model::edge_filter::{EdgeEndpoint, Endpoint};
1921

2022
#[derive(Debug, Clone, PartialEq, Eq)]
2123
pub enum CompositeExplodedEdgeFilter {
24+
Src(CompositeNodeFilter),
25+
Dst(CompositeNodeFilter),
2226
Property(PropertyFilter<ExplodedEdgeFilter>),
2327
And(
2428
Box<CompositeExplodedEdgeFilter>,
@@ -34,6 +38,8 @@ pub enum CompositeExplodedEdgeFilter {
3438
impl Display for CompositeExplodedEdgeFilter {
3539
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3640
match self {
41+
CompositeExplodedEdgeFilter::Src(filter) => write!(f, "SRC({})", filter),
42+
CompositeExplodedEdgeFilter::Dst(filter) => write!(f, "DST({})", filter),
3743
CompositeExplodedEdgeFilter::Property(filter) => write!(f, "{}", filter),
3844
CompositeExplodedEdgeFilter::And(left, right) => write!(f, "({} AND {})", left, right),
3945
CompositeExplodedEdgeFilter::Or(left, right) => write!(f, "({} OR {})", left, right),
@@ -66,6 +72,22 @@ impl CreateFilter for CompositeExplodedEdgeFilter {
6672
graph: G,
6773
) -> Result<Self::EntityFiltered<'graph, G>, GraphError> {
6874
match self {
75+
CompositeExplodedEdgeFilter::Src(filter) => {
76+
let filtered_graph = filter.clone().create_filter(graph.clone())?;
77+
Ok(Arc::new(EdgeNodeFilteredGraph::new(
78+
graph,
79+
Endpoint::Src,
80+
filtered_graph
81+
)))
82+
},
83+
CompositeExplodedEdgeFilter::Dst(filter) => {
84+
let filtered_graph = filter.clone().create_filter(graph.clone())?;
85+
Ok(Arc::new(EdgeNodeFilteredGraph::new(
86+
graph,
87+
Endpoint::Dst,
88+
filtered_graph
89+
)))
90+
},
6991
CompositeExplodedEdgeFilter::Property(i) => Ok(Arc::new(i.create_filter(graph)?)),
7092
CompositeExplodedEdgeFilter::And(l, r) => Ok(Arc::new(
7193
AndFilter {
@@ -109,6 +131,16 @@ pub struct ExplodedEdgeFilter;
109131
impl PropertyFilterFactory<ExplodedEdgeFilter> for ExplodedEdgeFilter {}
110132

111133
impl ExplodedEdgeFilter {
134+
#[inline]
135+
pub fn src() -> EdgeEndpoint {
136+
EdgeEndpoint::src()
137+
}
138+
139+
#[inline]
140+
pub fn dst() -> EdgeEndpoint {
141+
EdgeEndpoint::dst()
142+
}
143+
112144
#[inline]
113145
pub fn window<S: IntoTime, E: IntoTime>(start: S, end: E) -> Windowed<ExplodedEdgeFilter> {
114146
Windowed::from_times(start, end)

raphtory/src/python/filter/edge_filter_builders.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use crate::{
1717
use pyo3::{exceptions::PyTypeError, pyclass, pymethods, Bound, PyAny, PyResult};
1818
use raphtory_api::core::entities::GID;
1919
use std::sync::Arc;
20+
use crate::db::graph::views::filter::model::exploded_edge_filter::ExplodedEdgeFilter;
2021

2122
#[pyclass(frozen, name = "EdgeEndpoint", module = "raphtory.filter")]
2223
#[derive(Clone)]
@@ -97,6 +98,16 @@ pub struct PyExplodedEdgeFilter;
9798

9899
#[pymethods]
99100
impl PyExplodedEdgeFilter {
101+
#[staticmethod]
102+
fn src() -> PyEdgeEndpoint {
103+
PyEdgeEndpoint(EdgeFilter::src())
104+
}
105+
106+
#[staticmethod]
107+
fn dst() -> PyEdgeEndpoint {
108+
PyEdgeEndpoint(EdgeFilter::dst())
109+
}
110+
100111
#[staticmethod]
101112
fn property(name: String) -> PropertyFilterBuilder<ExplodedEdgeFilter> {
102113
ExplodedEdgeFilter::property(name)

0 commit comments

Comments
 (0)