diff --git a/.github/workflows/test_during_pr.yml b/.github/workflows/test_during_pr.yml index 8f5d4dc419..134c41b80d 100644 --- a/.github/workflows/test_during_pr.yml +++ b/.github/workflows/test_during_pr.yml @@ -1,4 +1,4 @@ -name: Run tests during PR +name: Run PR tests on: pull_request: branches: diff --git a/db4-storage/src/loaders/mod.rs b/db4-storage/src/loaders/mod.rs deleted file mode 100644 index 7a2c1f2f00..0000000000 --- a/db4-storage/src/loaders/mod.rs +++ /dev/null @@ -1,516 +0,0 @@ -use crate::{EdgeSegmentOps, NodeSegmentOps, error::StorageError, pages::GraphStore}; -use arrow::buffer::ScalarBuffer; -use arrow_array::{ - Array, PrimitiveArray, RecordBatch, TimestampMicrosecondArray, TimestampMillisecondArray, - TimestampNanosecondArray, types::Int64Type, -}; -use arrow_csv::reader::Format; -use arrow_schema::{ArrowError, DataType, Schema, TimeUnit}; -use bytemuck::checked::cast_slice_mut; -use either::Either; -use parquet::arrow::arrow_reader::ParquetRecordBatchReaderBuilder; -use raphtory_api::core::{ - entities::properties::prop::PropType, - storage::{dict_mapper::MaybeNew, timeindex::TimeIndexEntry}, -}; -use raphtory_core::entities::{EID, VID, graph::logical_to_physical::Mapping}; -use rayon::prelude::*; -use std::{ - fs::File, - path::{Path, PathBuf}, - sync::{ - Arc, - atomic::{self, AtomicBool, AtomicUsize}, - }, -}; - -pub struct Loader<'a> { - path: PathBuf, - src_col: Either<&'a str, usize>, - dst_col: Either<&'a str, usize>, - time_col: Either<&'a str, usize>, - format: FileFormat, -} - -pub enum FileFormat { - CSV { - delimiter: u8, - has_header: bool, - sample_records: usize, - }, - Parquet, -} - -pub struct Rows { - rb: RecordBatch, - src: usize, - dst: usize, - t_properties: Vec, - t_indices: Vec, - time_col: ScalarBuffer, -} - -impl Rows { - pub fn srcs(&self) -> Result { - let arr = self.rb.column(self.src); - let arr = arr.as_ref(); - let srcs = NodeCol::try_from(arr)?; - Ok(srcs) - } - - pub fn dsts(&self) -> Result { - let arr = self.rb.column(self.dst); - let arr = arr.as_ref(); - let dsts = NodeCol::try_from(arr)?; - Ok(dsts) - } - - pub fn time(&self) -> &[i64] { - &self.time_col - } - - pub fn properties( - &self, - prop_id_resolver: impl Fn(&str, PropType) -> Result, StorageError>, - ) -> Result { - combine_properties_arrow( - &self.t_properties, - &self.t_indices, - self.rb.columns(), - prop_id_resolver, - ) - } - - fn new(rb: RecordBatch, src: usize, dst: usize, time: usize) -> Result { - let (t_indices, t_properties): (Vec<_>, Vec<_>) = rb - .schema() - .fields() - .iter() - .enumerate() - .filter_map(|(id, f)| { - if id == src || id == dst || id == time { - None - } else { - Some((id, f.name().to_owned())) - } - }) - .unzip(); - - let time_arr = rb.column(time); - let values = if let Some(arr) = time_arr - .as_any() - .downcast_ref::>() - { - arr.values().clone() - } else if let Some(arr) = time_arr.as_any().downcast_ref::() { - let arr_to_millis = - arrow::compute::cast(&arr, &DataType::Timestamp(TimeUnit::Millisecond, None))?; - let arr = arr_to_millis - .as_any() - .downcast_ref::() - .unwrap(); - arr.values().clone() - } else if let Some(arr) = time_arr - .as_any() - .downcast_ref::() - { - let arr_to_millis = - arrow::compute::cast(&arr, &DataType::Timestamp(TimeUnit::Millisecond, None))?; - let arr = arr_to_millis - .as_any() - .downcast_ref::() - .unwrap(); - arr.values().clone() - } else if let Some(arr) = time_arr - .as_any() - .downcast_ref::() - { - arr.values().clone() - } else { - return Err(StorageError::ArrowRS(ArrowError::CastError(format!( - "failed to cast time column {} to i64", - time_arr.data_type() - )))); - }; - - Ok(Self { - rb, - src, - dst, - t_indices, - t_properties, - time_col: values, - }) - } - - fn num_rows(&self) -> usize { - self.rb.num_rows() - } -} - -impl<'a> Loader<'a> { - pub fn new( - path: &Path, - src_col: Either<&'a str, usize>, - dst_col: Either<&'a str, usize>, - time_col: Either<&'a str, usize>, - format: FileFormat, - ) -> Result { - Ok(Self { - path: path.to_owned(), - src_col, - dst_col, - time_col, - format, - }) - } - - pub fn iter_file( - &self, - path: &Path, - rows_per_batch: usize, - ) -> Result> + Send>, StorageError> { - match &self.format { - FileFormat::CSV { - delimiter, - has_header, - sample_records, - } => { - let file = File::open(path).unwrap(); - let (schema, _) = Format::default() - .with_header(*has_header) - .with_delimiter(*delimiter) - .infer_schema(file, Some(*sample_records))?; - let schema = Arc::new(schema); - - let (src, dst, time) = self.src_dst_time_cols(&schema)?; - - let file = File::open(path)?; - - let reader = arrow_csv::reader::ReaderBuilder::new(schema.clone()) - .with_header(*has_header) - .with_delimiter(*delimiter) - .with_batch_size(rows_per_batch) - .build(file)?; - Ok(Box::new(reader.map(move |rb| { - rb.map_err(StorageError::from) - .and_then(|rb| Rows::new(rb, src, dst, time)) - }))) - } - FileFormat::Parquet => { - let file = File::open(path)?; - let builder = - ParquetRecordBatchReaderBuilder::try_new(file)?.with_batch_size(rows_per_batch); - - let (src, dst, time) = self.src_dst_time_cols(&builder.schema())?; - let reader = builder.build()?; - Ok(Box::new(reader.map(move |rb| { - rb.map_err(StorageError::from) - .and_then(|rb| Rows::new(rb, src, dst, time)) - }))) - } - } - } - - pub fn iter( - &self, - rows_per_batch: usize, - ) -> Result> + Send>, StorageError> { - if self.path.is_dir() { - let mut files = vec![]; - for entry in std::fs::read_dir(&self.path)? { - let entry = entry?; - if entry.file_type()?.is_file() { - files.push(entry.path()); - } - } - let iterators: Vec<_> = files - .into_iter() - .map(|path| self.iter_file(&path, rows_per_batch)) - .collect::, _>>()?; - Ok(Box::new(iterators.into_iter().flatten())) - } else { - Ok(self.iter_file(&self.path, rows_per_batch)?) - } - } - - fn src_dst_time_cols(&self, schema: &Schema) -> Result<(usize, usize, usize), StorageError> { - let src_field = match self.src_col { - Either::Left(name) => schema.index_of(name)?, - Either::Right(idx) => idx, - }; - let dst_field = match self.dst_col { - Either::Left(name) => schema.index_of(name)?, - Either::Right(idx) => idx, - }; - - let time_field = match self.time_col { - Either::Left(name) => schema.index_of(name)?, - Either::Right(idx) => idx, - }; - - Ok((src_field, dst_field, time_field)) - } - - pub fn load_into< - NS: NodeSegmentOps, - ES: EdgeSegmentOps, - EXT: Clone + Default + Send + Sync, - >( - &self, - graph: &GraphStore, - rows_per_batch: usize, - ) -> Result { - let mut src_col_resolved: Vec = vec![]; - let mut dst_col_resolved: Vec = vec![]; - let mut eid_col_resolved: Vec = vec![]; - let mut eids_exist: Vec = vec![]; // exists or needs to be created - - let max_edge_id = AtomicUsize::new(graph.edges().num_edges().saturating_sub(1)); - - let resolver = Mapping::new(); - - let next_id = AtomicUsize::new(0); - let mut offset = 0; - - let now = std::time::Instant::now(); - for chunk in self.iter(rows_per_batch)? { - let now_chunk = std::time::Instant::now(); - let rb = chunk?; - - let props = rb.properties(|name, p_type| { - graph - .edge_meta() - .resolve_prop_id(name, p_type, false) - .map_err(StorageError::from) - })?; - - let srcs = rb.srcs()?; - let dsts = rb.dsts()?; - - src_col_resolved.resize_with(rb.num_rows(), Default::default); - srcs.par_iter() - .zip(src_col_resolved.par_iter_mut()) - .try_for_each(|(gid, resolved)| { - let gid = gid.ok_or_else(|| LoadError::MissingSrcError)?; - let id = resolver - .get_or_init(gid, || VID(next_id.fetch_add(1, atomic::Ordering::Relaxed))) - .unwrap() - .inner(); - *resolved = id; - Ok::<(), StorageError>(()) - })?; - - dst_col_resolved.resize_with(rb.num_rows(), Default::default); - dsts.par_iter() - .zip(dst_col_resolved.par_iter_mut()) - .try_for_each(|(gid, resolved)| { - let gid = gid.ok_or_else(|| LoadError::MissingDstError)?; - let id = resolver - .get_or_init(gid, || VID(next_id.fetch_add(1, atomic::Ordering::Relaxed))) - .unwrap() - .inner(); - *resolved = id; - Ok::<(), StorageError>(()) - })?; - - eid_col_resolved.resize_with(rb.num_rows(), Default::default); - eids_exist.resize_with(rb.num_rows(), Default::default); - let eid_col_shared = atomic_usize_from_mut_slice(cast_slice_mut(&mut eid_col_resolved)); - - let num_pages = - next_id.load(atomic::Ordering::Relaxed) / graph.nodes().max_page_len() + 1; - graph.nodes().grow(num_pages); - - let mut node_writers = graph.nodes().locked(); - - node_writers.par_iter_mut().try_for_each(|locked_page| { - for (row, (&src, &dst)) in src_col_resolved - .iter() - .zip(dst_col_resolved.iter()) - .enumerate() - { - if let Some(src_pos) = locked_page.resolve_pos(src) { - let mut writer = locked_page.writer(); - if let Some(edge_id) = writer.get_out_edge(src_pos, dst) { - eid_col_shared[row].store(edge_id.0, atomic::Ordering::Relaxed); - eids_exist[row].store(true, atomic::Ordering::Relaxed); - } else { - let edge_id = EID(max_edge_id.fetch_add(1, atomic::Ordering::Relaxed)); - writer.add_outbound_edge(0, src_pos, dst, edge_id.with_layer(0), 0); // FIXME: when we update this to work with layers use the correct layer - eid_col_shared[row].store(edge_id.0, atomic::Ordering::Relaxed); - eids_exist[row].store(false, atomic::Ordering::Relaxed); - } - } - } - - Ok::<_, StorageError>(()) - })?; - - node_writers.par_iter_mut().try_for_each(|locked_page| { - for (&edge_id, (&src, &dst)) in eid_col_resolved - .iter() - .zip(src_col_resolved.iter().zip(&dst_col_resolved)) - { - if let Some(dst_pos) = locked_page.resolve_pos(dst) { - let mut writer = locked_page.writer(); - if !writer.get_inb_edge(dst_pos, src).is_some() { - let edge_id = EID(edge_id.0); - writer.add_inbound_edge(0, dst_pos, src, edge_id.with_layer(0), 0); // FIXME: when we update this to work with layers use the correct layer - } - } - } - - Ok::<_, StorageError>(()) - })?; - - // now edges - - let num_pages = - max_edge_id.load(atomic::Ordering::Relaxed) / graph.edges().max_page_len() + 1; - - graph.edges().grow(num_pages); - - let mut edge_writers = graph.edges().locked(); - - let time_col = rb.time(); - - edge_writers.iter_mut().for_each(|edge_writer| { - for (row_idx, ((((&src, &dst), &eid), edge_exists), time)) in src_col_resolved - .iter() - .zip(&dst_col_resolved) - .zip(&eid_col_resolved) - .zip( - eids_exist - .iter() - .map(|exists| exists.load(atomic::Ordering::Relaxed)), - ) - .zip(time_col) - .enumerate() - { - if let Some(local_pos) = edge_writer.resolve_pos(eid) { - let mut writer = edge_writer.writer(); - let time = TimeIndexEntry::new(*time, offset + row_idx); - writer.add_edge( - time, - Some(local_pos), - src, - dst, - props.iter_row(row_idx), - 0, - Some(edge_exists), - ); - } - } - }); - - src_col_resolved.clear(); - dst_col_resolved.clear(); - eid_col_resolved.clear(); - eids_exist.clear(); - offset += rb.num_rows(); - } - - Ok(resolver) - } -} - -#[cfg(test)] -mod test { - use crate::{Layer, pages::test_utils::check_load_support}; - use proptest::{collection::vec, prelude::*}; - - fn check_load(edges: &[(i64, u64, u64)], max_page_len: usize) { - check_load_support(edges, false, |path| { - Layer::<()>::new(path, max_page_len, max_page_len) - }); - } - - #[test] - fn test_one_edge() { - check_load(&[(0, 0, 1)], 32); - } - - #[test] - fn test_load_graph_from_csv() { - let edge_strat = (1u64..100).prop_flat_map(|num_nodes| { - (1usize..100).prop_flat_map(move |num_edges| { - vec(((0i64..100), (0..num_nodes), (0..num_nodes)), num_edges) - }) - }); - - proptest!(|(edges in edge_strat, max_page_len in 1usize .. 100)| { - check_load(&edges, max_page_len); - }); - } - - #[test] - fn teas_load_graph_from_csv_5() { - let edges = [ - (42, 16, 24), - (96, 41, 8), - (37, 9, 9), - (62, 37, 57), - (12, 49, 23), - (8, 60, 44), - (56, 35, 0), - (9, 48, 58), - (59, 20, 37), - (36, 17, 46), - ]; - let max_page_len = 7; - check_load(&edges, max_page_len); - } - - #[test] - fn test_load_graph_from_csv_4() { - let edges = [ - (27, 20, 85), - (2, 29, 77), - (55, 59, 22), - (72, 47, 73), - (26, 66, 36), - (22, 39, 37), - (5, 49, 88), - (2, 48, 13), - (97, 23, 57), - ]; - let max_page_len = 8; - check_load(&edges, max_page_len); - } - - #[test] - fn test_load_graph_from_csv_1() { - let edges = [(0, 33, 31), (1, 12, 20), (2, 22, 32)]; - - check_load(&edges, 32); - } - - #[test] - fn test_load_graph_from_csv_2() { - let edges = [ - (0, 23, 61), - (1, 52, 14), - (2, 62, 62), - (3, 13, 9), - (4, 29, 6), - (5, 13, 7), - ]; - - check_load(&edges, 5); - } - - #[test] - fn test_load_graph_from_csv_3() { - let edges = [(0, 0, 32)]; - - check_load(&edges, 51); - } - - #[test] - fn test_edges_1() { - let edges = [(0, 1, 0), (0, 0, 0), (0, 0, 0)]; - - check_load(&edges, 32); - } -} diff --git a/python/test_utils/filters_setup.py b/python/test_utils/filters_setup.py index 9e963c3944..08c4ce378a 100644 --- a/python/test_utils/filters_setup.py +++ b/python/test_utils/filters_setup.py @@ -58,7 +58,7 @@ def init_graph(graph): for time, id, props, node_type in nodes: graph.add_node(time, id, props, node_type) - edge_data = [ + edges = [ ( 1, "1", @@ -94,7 +94,7 @@ def init_graph(graph): (4, "John Mayer", "Jimmy Page", {"p2": 6, "p3": 1, "p20": "Gold_ship"}, None), ] - for time, src, dst, props, edge_type in edge_data: + for time, src, dst, props, edge_type in edges: graph.add_edge(time, src, dst, props, edge_type) return graph @@ -142,7 +142,7 @@ def init_graph2(graph): for time, id, props, node_type in nodes: graph.add_node(time, id, props, node_type) - edge_data = [ + edges = [ ( 1, 1, @@ -170,14 +170,14 @@ def init_graph2(graph): (3, 2, 1, {"p2": 6, "p3": 1, "p10": "Paper_airplane"}, None), ] - for time, src, dst, props, edge_type in edge_data: + for time, src, dst, props, edge_type in edges: graph.add_edge(time, src, dst, props, edge_type) return graph def init_graph3(graph): - edge_data = [ + edges = [ ( 1, 1, @@ -222,7 +222,7 @@ def init_graph3(graph): (3, 2, 1, {"p2": 6, "p3": 1, "p10": "Paper_airplane"}, None), ] - for time, src, dst, props, edge_type in edge_data: + for time, src, dst, props, edge_type in edges: graph.add_edge(time, src, dst, props, edge_type) return graph @@ -270,7 +270,7 @@ def init_graph4(graph): for time, id, props, node_type in nodes: graph.add_node(time, id, props, node_type) - edge_data = [ + edges = [ ( 1, 1, @@ -298,7 +298,7 @@ def init_graph4(graph): (3, 2, 1, {"p2": 6, "p3": 1, "p10": "Paper_airplane"}, None), ] - for time, src, dst, props, edge_type in edge_data: + for time, src, dst, props, edge_type in edges: graph.add_edge(time, src, dst, props, edge_type) graph.delete_edge(4, 3, 4, None, None) diff --git a/python/test_utils/utils.py b/python/test_utils/utils.py index 4bba4ed5f9..80f776f1f5 100644 --- a/python/test_utils/utils.py +++ b/python/test_utils/utils.py @@ -60,33 +60,11 @@ def sort_by_gql_name_or_id(d): return d -if "DISK_TEST_MARK" in os.environ: - - def with_disk_graph(func): - def inner(graph): - def inner2(graph, tmpdirname): - g = graph.to_disk_graph(tmpdirname) - func(g) - - func(graph) - with tempfile.TemporaryDirectory() as tmpdirname: - inner2(graph, tmpdirname) - - return inner - -else: - - def with_disk_graph(func): - return func - - -def with_disk_variants(init_fn, variants=None): +def with_variants(init_fn, variants=None): if variants is None: variants = [ "graph", "persistent_graph", - "event_disk_graph", - "persistent_disk_graph", ] if isinstance(variants, str): @@ -110,26 +88,6 @@ def wrapper(): pg = init_fn(PersistentGraph()) check(pg) - if "DISK_TEST_MARK" in os.environ: - from raphtory import DiskGraphStorage - - with tempfile.TemporaryDirectory() as tmpdir: - if ( - "event_disk_graph" in variants - or "persistent_disk_graph" in variants - ): - g = init_fn(Graph()) - g.to_disk_graph(tmpdir) - disk = DiskGraphStorage.load_from_dir(tmpdir) - - if "event_disk_graph" in variants: - check(disk.to_events()) - - if "persistent_disk_graph" in variants: - check(disk.to_persistent()) - - del disk - return wrapper return decorator diff --git a/python/tests/test_base_install/test_filters/semantics/test_edge_property_filter_semantics.py b/python/tests/test_base_install/test_filters/semantics/test_edge_property_filter_semantics.py index f67c7a9866..98e040beee 100644 --- a/python/tests/test_base_install/test_filters/semantics/test_edge_property_filter_semantics.py +++ b/python/tests/test_base_install/test_filters/semantics/test_edge_property_filter_semantics.py @@ -5,7 +5,7 @@ init_edges_graph2, combined, ) -from utils import with_disk_variants +from utils import with_variants import pytest @@ -23,8 +23,7 @@ def init_graph_for_event_ids(graph): return graph -# Disk graph doesn't have constant edge properties -@with_disk_variants(init_edges_graph, variants=["graph"]) +@with_variants(init_edges_graph, variants=["graph"]) def test_metadata_semantics(): def check(graph): filter_expr = filter.Edge.metadata("p1") == 1 @@ -46,7 +45,7 @@ def check(graph): return check -@with_disk_variants(init_edges_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_edges_graph, variants=["graph"]) def test_temporal_any_semantics(): def check(graph): filter_expr = filter.Edge.property("p1").temporal().any() == 1 @@ -68,9 +67,9 @@ def check(graph): return check -@with_disk_variants( +@with_variants( init_fn=combined([init_edges_graph, init_graph_for_event_ids]), - variants=["graph", "event_disk_graph"], + variants=["graph"], ) def test_temporal_any_semantics_for_event_ids(): def check(graph): @@ -95,7 +94,7 @@ def check(graph): return check -@with_disk_variants(init_edges_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_edges_graph, variants=["graph"]) def test_temporal_last_semantics(): def check(graph): filter_expr = filter.Edge.property("p1").temporal().last() == 1 @@ -108,9 +107,9 @@ def check(graph): return check -@with_disk_variants( +@with_variants( init_fn=combined([init_edges_graph, init_graph_for_event_ids]), - variants=["graph", "event_disk_graph"], + variants=["graph"], ) def test_temporal_latest_semantics_for_event_ids3(): def check(graph): @@ -131,7 +130,7 @@ def check(graph): return check -@with_disk_variants(init_edges_graph, variants=["graph"]) +@with_variants(init_edges_graph, variants=["graph"]) def test_property_semantics(): def check(graph): filter_expr = filter.Edge.property("p1") == 1 @@ -150,8 +149,7 @@ def check(graph): return check -# Disk graph doesn't have constant edge properties -@with_disk_variants(init_edges_graph, variants=["event_disk_graph"]) +@with_variants(init_edges_graph, variants=["graph"]) def test_property_semantics2(): def check(graph): filter_expr = filter.Edge.property("p1") == 1 @@ -164,7 +162,7 @@ def check(graph): return check -@with_disk_variants( +@with_variants( init_fn=combined([init_edges_graph, init_graph_for_event_ids]), variants=["graph"], ) @@ -187,10 +185,9 @@ def check(graph): return check -# TODO: Const properties not supported for disk_graph. -@with_disk_variants( +@with_variants( init_fn=combined([init_edges_graph, init_graph_for_event_ids]), - variants=["event_disk_graph"], + variants=["graph"], ) def test_property_semantics_for_event_ids_dsg(): def check(graph): @@ -211,7 +208,7 @@ def check(graph): return check -@with_disk_variants(init_edges_graph1, variants=["graph"]) +@with_variants(init_edges_graph1, variants=["graph"]) def test_property_semantics_only_metadata(): def check(graph): filter_expr = filter.Edge.metadata("p1") == 1 @@ -222,8 +219,7 @@ def check(graph): return check -# Disk graph doesn't have constant edge properties -@with_disk_variants(init_edges_graph1, variants=["event_disk_graph"]) +@with_variants(init_edges_graph1, variants=["graph"]) def test_property_semantics_only_metadata2(): def check(graph): filter_expr = filter.Edge.metadata("p1") == 1 @@ -236,7 +232,7 @@ def check(graph): return check -@with_disk_variants(init_edges_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_edges_graph2, variants=["graph"]) def test_property_semantics_only_temporal(): def check(graph): filter_expr = filter.Edge.property("p1") == 1 diff --git a/python/tests/test_base_install/test_filters/semantics/test_node_property_filter_semantics.py b/python/tests/test_base_install/test_filters/semantics/test_node_property_filter_semantics.py index df653e7a34..67ce669836 100644 --- a/python/tests/test_base_install/test_filters/semantics/test_node_property_filter_semantics.py +++ b/python/tests/test_base_install/test_filters/semantics/test_node_property_filter_semantics.py @@ -5,7 +5,7 @@ init_nodes_graph2, combined, ) -from utils import with_disk_variants +from utils import with_variants def init_graph_for_event_ids(graph): @@ -18,7 +18,7 @@ def init_graph_for_event_ids(graph): return graph -@with_disk_variants(init_nodes_graph) +@with_variants(init_nodes_graph) def test_metadata_semantics(): def check(graph): filter_expr = filter.Node.metadata("p1") == 1 @@ -29,7 +29,7 @@ def check(graph): return check -@with_disk_variants(init_nodes_graph) +@with_variants(init_nodes_graph) def test_temporal_any_semantics(): def check(graph): filter_expr = filter.Node.property("p1").temporal().any() == 1 @@ -40,7 +40,7 @@ def check(graph): return check -@with_disk_variants( +@with_variants( init_fn=combined([init_nodes_graph, init_graph_for_event_ids]), ) def test_temporal_any_semantics_for_event_ids(): @@ -55,7 +55,7 @@ def check(graph): return check -@with_disk_variants(init_nodes_graph) +@with_variants(init_nodes_graph) def test_temporal_last_semantics(): def check(graph): filter_expr = filter.Node.property("p1").temporal().last() == 1 @@ -66,7 +66,7 @@ def check(graph): return check -@with_disk_variants( +@with_variants( init_fn=combined([init_nodes_graph, init_graph_for_event_ids]), ) def test_temporal_latest_semantics_for_event_ids(): @@ -79,7 +79,7 @@ def check(graph): return check -@with_disk_variants(init_nodes_graph) +@with_variants(init_nodes_graph) def test_property_semantics(): def check(graph): filter_expr = filter.Node.property("p1") == 1 @@ -91,7 +91,7 @@ def check(graph): return check -@with_disk_variants( +@with_variants( init_fn=combined([init_nodes_graph, init_graph_for_event_ids]), ) def test_property_semantics_for_event_ids(): @@ -104,7 +104,7 @@ def check(graph): return check -@with_disk_variants(init_nodes_graph1) +@with_variants(init_nodes_graph1) def test_property_semantics_only_metadata(): def check(graph): filter_expr = filter.Node.metadata("p1") == 1 @@ -115,7 +115,7 @@ def check(graph): return check -@with_disk_variants(init_nodes_graph2) +@with_variants(init_nodes_graph2) def test_property_semantics_only_temporal(): def check(graph): filter_expr = filter.Node.property("p1") == 1 diff --git a/python/tests/test_base_install/test_filters/test_edge_composite_filter.py b/python/tests/test_base_install/test_filters/test_edge_composite_filter.py index 4114e5dd41..c47ed76c4b 100644 --- a/python/tests/test_base_install/test_filters/test_edge_composite_filter.py +++ b/python/tests/test_base_install/test_filters/test_edge_composite_filter.py @@ -1,9 +1,9 @@ from raphtory import filter from filters_setup import init_graph -from utils import with_disk_variants +from utils import with_variants -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edge_composite_filter(): def check(graph): filter_expr1 = filter.Edge.property("p2") == 2 @@ -27,12 +27,11 @@ def check(graph): ) assert result_ids == expected_ids - # TODO: Enable this test once string property is fixed for disk_storage_graph - # filter_expr1 = filter.Edge.property("p2") < 9 - # filter_expr2 = filter.Edge.property("p1") == "shivam_kapoor" - # result_ids = sorted(graph.filter(filter_expr1 & filter_expr2).edges.id) - # expected_ids = [("1", "2")] - # assert result_ids == expected_ids + filter_expr1 = filter.Edge.property("p2") < 9 + filter_expr2 = filter.Edge.property("p1") == "shivam_kapoor" + result_ids = sorted(graph.filter(filter_expr1 & filter_expr2).edges.id) + expected_ids = [("1", "2")] + assert result_ids == expected_ids filter_expr1 = filter.Edge.property("p2") < 9 filter_expr2 = filter.Edge.property("p3") < 9 @@ -46,12 +45,11 @@ def check(graph): ] assert result_ids == expected_ids - # TODO: Enable this test once string property is fixed for disk_storage_graph - # filter_expr1 = filter.Edge.src().name() == "1" - # filter_expr2 = filter.Edge.property("p1") == "shivam_kapoor" - # result_ids = sorted(graph.filter(filter_expr1 & filter_expr2).edges.id) - # expected_ids = [("1", "2")] - # assert result_ids == expected_ids + filter_expr1 = filter.Edge.src().name() == "1" + filter_expr2 = filter.Edge.property("p1") == "shivam_kapoor" + result_ids = sorted(graph.filter(filter_expr1 & filter_expr2).edges.id) + expected_ids = [("1", "2")] + assert result_ids == expected_ids filter_expr1 = filter.Edge.dst().name() == "1" filter_expr2 = filter.Edge.property("p2") <= 6 @@ -59,18 +57,17 @@ def check(graph): expected_ids = sorted([("2", "1"), ("3", "1")]) assert result_ids == expected_ids - # TODO: Enable this test once string property is fixed for disk_storage_graph - # filter_expr1 = filter.Edge.src().name() == "1" - # filter_expr2 = filter.Edge.property("p1") == "shivam_kapoor" - # filter_expr3 = filter.Edge.property("p3") == 5 - # result_ids = sorted(graph.filter((filter_expr1 & filter_expr2) | filter_expr3).edges.id) - # expected_ids = [("1", "2")] - # assert result_ids == expected_ids + filter_expr1 = filter.Edge.src().name() == "1" + filter_expr2 = filter.Edge.property("p1") == "shivam_kapoor" + filter_expr3 = filter.Edge.property("p3") == 5 + result_ids = sorted(graph.filter((filter_expr1 & filter_expr2) | filter_expr3).edges.id) + expected_ids = [("1", "2")] + assert result_ids == expected_ids return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_not_edge_composite_filter(): def check(graph): filter_expr1 = filter.Edge.dst().name() == "1" diff --git a/python/tests/test_base_install/test_filters/test_edge_endpoint_filters.py b/python/tests/test_base_install/test_filters/test_edge_endpoint_filters.py index de4bb2f236..2bde83ab47 100644 --- a/python/tests/test_base_install/test_filters/test_edge_endpoint_filters.py +++ b/python/tests/test_base_install/test_filters/test_edge_endpoint_filters.py @@ -1,10 +1,10 @@ from raphtory import filter from filters_setup import init_graph, create_test_graph -from utils import with_disk_variants +from utils import with_variants import pytest -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_src_property_eq(): def check(graph): expr = filter.Edge.src().property("p2") == 2 @@ -15,7 +15,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_dst_property_contains(): def check(graph): # dst node "3" has p20 == "Gold_boat"; dst node "4" has p20 updated from Gold_boat to Gold_ship so it doesn't appear here @@ -27,7 +27,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_dst_property_any_contains(): def check(graph): # dst node "3" has p20 == "Gold_boat"; dst node "4" has p20 updated from Gold_boat to Gold_ship so it appears with .temporal().any() @@ -39,7 +39,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_dst_property_gt(): def check(graph): expr = filter.Edge.dst().property("p100") > 55 @@ -52,7 +52,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_edges_src_property_temporal_sum(): def check(graph): expr = filter.Edge.src().property("prop6").temporal().last().sum() == 12 @@ -63,7 +63,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_edges_src_property_any_equals(): def check(graph): # src node "d" doesn't exist as src; src of edges are a,b,c; node "a" has prop8 = [2,3,3] @@ -75,7 +75,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_edges_src_metadata_sum_with_same_name_property(): def check(graph): # src node "a" metadata prop1 sum == 36 @@ -88,7 +88,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_edges_src_metadata_avg(): def check(graph): expr = filter.Edge.src().metadata("prop2").avg() <= 2.0 @@ -99,7 +99,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_src_property_and_edge_property(): def check(graph): expr = (filter.Edge.src().property("p2") == 2) & ( @@ -112,7 +112,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_src_and_dst_property(): def check(graph): expr = (filter.Edge.src().property("p2") == 2) & ( @@ -125,7 +125,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_src_or_dst_property(): def check(graph): expr = (filter.Edge.src().property("p2") == 2) | ( @@ -138,7 +138,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_edges_src_property_and_dst_name(): def check(graph): expr = (filter.Edge.src().property("prop1") >= 20) & ( @@ -151,7 +151,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_edges_src_metadata_and_edge_property(): def check(graph): expr = (filter.Edge.src().metadata("prop1").sum() == 36) & ( @@ -165,7 +165,7 @@ def check(graph): # node_type endpoint filters -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_src_node_type_eq(): def check(graph): expr = filter.Edge.src().node_type() == "fire_nation" @@ -176,7 +176,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_dst_node_type_contains(): def check(graph): expr = filter.Edge.dst().node_type().contains("nomads") @@ -187,7 +187,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_src_and_dst_node_type(): def check(graph): expr = filter.Edge.src().node_type().starts_with( @@ -200,7 +200,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_src_or_dst_node_type(): def check(graph): expr = (filter.Edge.src().node_type() == "air_nomads") | ( @@ -213,7 +213,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_not_src_node_type(): def check(graph): expr = ~filter.Edge.src().node_type().contains("fire") @@ -231,7 +231,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_edges_src_node_type_eq_compose_with_edge_prop(): def check(graph): # edge ("c","d") has eprop1 > 20 but src node_type isn't fire_nation, so not included here diff --git a/python/tests/test_base_install/test_filters/test_edge_filter.py b/python/tests/test_base_install/test_filters/test_edge_filter.py index ba794987ae..0ca7735f46 100644 --- a/python/tests/test_base_install/test_filters/test_edge_filter.py +++ b/python/tests/test_base_install/test_filters/test_edge_filter.py @@ -1,10 +1,10 @@ from raphtory import filter from filters_setup import init_graph, init_graph2, init_graph4 -from utils import with_disk_variants +from utils import with_variants import pytest -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_eq(): def check(graph): filter_expr = filter.Edge.src().name() == "2" @@ -15,7 +15,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_ne(): def check(graph): filter_expr = filter.Edge.src().name() != "1" @@ -35,7 +35,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_in(): def check(graph): filter_expr = filter.Edge.src().name().is_in(["1"]) @@ -51,7 +51,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_not_in(): def check(graph): filter_expr = filter.Edge.src().name().is_not_in(["1"]) @@ -71,7 +71,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_dst_eq(): def check(graph): filter_expr = filter.Edge.dst().name() == "1" @@ -82,7 +82,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_dst_ne(): def check(graph): filter_expr = filter.Edge.dst().name() != "2" @@ -102,7 +102,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_dst_in(): def check(graph): filter_expr = filter.Edge.dst().name().is_in(["2"]) @@ -118,7 +118,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_dst_not_in(): def check(graph): filter_expr = filter.Edge.dst().name().is_not_in(["1"]) @@ -137,7 +137,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edge_for_src_dst(): def check(graph): filter_expr1 = filter.Edge.src().name() == "3" @@ -149,7 +149,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_dst_starts_with(): def check(graph): filter_expr = filter.Edge.src().name().starts_with("John Mayer") @@ -175,7 +175,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_dst_ends_with(): def check(graph): filter_expr = filter.Edge.src().name().ends_with("John Mayer") @@ -201,7 +201,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_contains(): def check(graph): filter_expr = filter.Edge.src().name().contains("Mayer") @@ -212,7 +212,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_src_not_contains(): def check(graph): filter_expr = filter.Edge.src().name().not_contains("Mayer") @@ -232,7 +232,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_fuzzy_search(): def check(graph): filter_expr = filter.Edge.src().name().fuzzy_search("John", 2, True) @@ -253,7 +253,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_not_src(): def check(graph): filter_expr = filter.Edge.src().name().not_contains("Mayer") @@ -264,7 +264,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_eq(): def check(graph): filter_expr = filter.Edge.src().id() == "2" @@ -275,7 +275,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_num_ids_for_dst_id_eq(): def check(graph): filter_expr = filter.Edge.dst().id() == 2 @@ -286,7 +286,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_ne(): def check(graph): filter_expr = filter.Edge.src().id() != "2" @@ -305,7 +305,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_num_ids_for_dst_id_ne(): def check(graph): filter_expr = filter.Edge.dst().id() != 2 @@ -316,7 +316,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_is_in(): def check(graph): filter_expr = filter.Edge.src().id().is_in(["2"]) @@ -327,7 +327,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_num_ids_for_dst_id_is_in(): def check(graph): filter_expr = filter.Edge.dst().id().is_in([2]) @@ -338,7 +338,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_is_not_in(): def check(graph): filter_expr = filter.Edge.src().id().is_not_in(["2"]) @@ -357,7 +357,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_num_ids_for_dst_id_is_not_in(): def check(graph): filter_expr = filter.Edge.dst().id().is_not_in([2]) @@ -368,7 +368,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_lt(): def check(graph): filter_expr = filter.Edge.src().id() < 2 @@ -379,7 +379,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_le(): def check(graph): filter_expr = filter.Edge.src().id() <= 2 @@ -390,7 +390,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_gt(): def check(graph): filter_expr = filter.Edge.src().id() > 2 @@ -401,7 +401,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph2, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_ge(): def check(graph): filter_expr = filter.Edge.src().id() >= 2 @@ -412,7 +412,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_str_ids_for_src_id_starts_with(): def check(graph): filter_expr = filter.Edge.src().id().starts_with("David") @@ -423,7 +423,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_dst_ids_for_dst_id_ends_with(): def check(graph): filter_expr = filter.Edge.dst().id().ends_with("Mayer") @@ -434,7 +434,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_dst_ids_for_dst_id_contains(): def check(graph): filter_expr = filter.Edge.dst().id().contains("May") @@ -445,7 +445,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_dst_ids_for_dst_id_not_contains(): def check(graph): filter_expr = filter.Edge.dst().id().not_contains("May") @@ -465,7 +465,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_src_ids_for_src_id_is_in(): def check(graph): filter_expr = filter.Edge.src().id().is_in(["David Gilmour"]) @@ -476,7 +476,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_with_src_ids_for_src_id_is_not_in(): def check(graph): filter_expr = filter.Edge.src().id().is_not_in(["David Gilmour"]) @@ -496,7 +496,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_edges_with_str_ids_error(): def check(graph): filter_expr = filter.Edge.src().id() == 3 @@ -509,7 +509,7 @@ def check(graph): return check -@with_disk_variants(init_graph2) +@with_variants(init_graph2) def test_filter_edges_with_num_ids_error(): def check(graph): filter_expr = filter.Edge.src().id() == "3" @@ -522,7 +522,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_filter_edges_is_active(): def check(graph): filter_expr = filter.Edge.is_active() @@ -535,7 +535,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_filter_edges_windowed_is_active(): def check(graph): filter_expr = filter.Edge.window(1, 4).is_active() @@ -548,7 +548,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["persistent_graph"]) +@with_variants(init_graph, variants=["persistent_graph"]) def test_filter_edges_snapshot_at_is_active(): def check(graph): filter_expr = filter.Edge.snapshot_at(4).is_active() @@ -561,7 +561,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["persistent_graph"]) +@with_variants(init_graph, variants=["persistent_graph"]) def test_filter_edges_is_valid(): def check(graph): filter_expr = filter.Edge.is_valid() @@ -582,7 +582,7 @@ def check(graph): return check -@with_disk_variants(init_graph4, variants=["graph", "persistent_graph"]) +@with_variants(init_graph4, variants=["graph", "persistent_graph"]) def test_filter_edges_is_deleted(): def check(graph): filter_expr = filter.Edge.is_deleted() @@ -593,7 +593,7 @@ def check(graph): return check -@with_disk_variants(init_graph4, variants=["graph", "persistent_graph"]) +@with_variants(init_graph4, variants=["graph", "persistent_graph"]) def test_filter_edges_is_self_loop_persistent(): def check(graph): filter_expr = filter.Edge.is_self_loop() @@ -604,7 +604,7 @@ def check(graph): return check -@with_disk_variants(init_graph4, variants=["graph", "persistent_graph"]) +@with_variants(init_graph4, variants=["graph", "persistent_graph"]) def test_filter_edges_is_self_loop_wp(): def check(graph): filter_expr = filter.Edge.is_self_loop() diff --git a/python/tests/test_base_install/test_filters/test_edge_property_filter.py b/python/tests/test_base_install/test_filters/test_edge_property_filter.py index 77333e51c7..1b007e984a 100644 --- a/python/tests/test_base_install/test_filters/test_edge_property_filter.py +++ b/python/tests/test_base_install/test_filters/test_edge_property_filter.py @@ -1,11 +1,11 @@ from filters_setup import U32_MAX, U64_MAX, I64_MAX, U16_MAX, U8_MAX from raphtory import filter, Prop from filters_setup import init_graph, init_graph3, create_test_graph2 -from utils import with_disk_variants +from utils import with_variants import pytest -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_eq(): def check(graph): filter_expr = filter.Edge.property("p2") == 2 @@ -16,7 +16,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_ne(): def check(graph): filter_expr = filter.Edge.property("p2") != 2 @@ -36,7 +36,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_lt(): def check(graph): filter_expr = filter.Edge.property("p2") < 10 @@ -57,7 +57,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_le(): def check(graph): filter_expr = filter.Edge.property("p2") <= 6 @@ -78,7 +78,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_gt(): def check(graph): filter_expr = filter.Edge.property("p2") > 2 @@ -98,7 +98,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edges_for_property_ge(): def check(graph): filter_expr = filter.Edge.property("p2") >= 2 @@ -119,7 +119,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_in(): def check(graph): filter_expr = filter.Edge.property("p2").is_in([]) @@ -162,7 +162,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_not_in(): def check(graph): filter_expr = filter.Edge.property("p2").is_not_in([6]) @@ -173,7 +173,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_is_some(): def check(graph): filter_expr = filter.Edge.property("p2").is_some() @@ -194,7 +194,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_is_none(): def check(graph): filter_expr = filter.Edge.property("p3").is_none() @@ -205,7 +205,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_starts_with(): def check(graph): filter_expr = filter.Edge.property("p10").starts_with("Paper") @@ -260,7 +260,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_ends_with(): def check(graph): filter_expr = filter.Edge.property("p10").ends_with("ship") @@ -303,7 +303,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_contains(): def check(graph): filter_expr = filter.Edge.property("p10").contains("Paper") @@ -336,7 +336,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_property_not_contains(): def check(graph): filter_expr = filter.Edge.property("p10").not_contains("ship") @@ -371,7 +371,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "event_disk_graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_edges_for_not_property(): def check(graph): filter_expr = filter.Edge.property("p3").is_none() @@ -395,7 +395,7 @@ def _pairs(edges): # ------ SUM ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_u8s(): def check(graph): # [1,2,3] -> 6 @@ -405,7 +405,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_u16s(): def check(graph): # [1000,2000] -> 3000 @@ -415,7 +415,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_u32s(): def check(graph): # [2_000_000,3_000_000] -> 5_000_000 @@ -425,7 +425,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_u64s(): def check(graph): # [1,2] -> 3 @@ -435,7 +435,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_i32s(): def check(graph): # [1,-2,3] -> 2 @@ -445,7 +445,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_i64s(): def check(graph): # [-1,-2] -> -3 @@ -455,7 +455,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_f32s(): def check(graph): expr = filter.Edge.property("p_f32s").sum() == Prop.f64(3.0) @@ -464,7 +464,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_sum_f64s(): def check(graph): # [1.5,2.5] -> 4.0 @@ -475,7 +475,7 @@ def check(graph): # ------ AVG ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_avg_u8s(): def check(graph): expr = filter.Edge.property("p_u8s").avg() == Prop.f64(2.0) # 6/3 @@ -484,7 +484,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_avg_u16s(): def check(graph): expr = filter.Edge.property("p_u16s").avg() == Prop.f64(1500.0) @@ -493,7 +493,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_avg_u32s(): def check(graph): expr = filter.Edge.property("p_u32s").avg() == Prop.f64(2_500_000.0) @@ -502,7 +502,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_avg_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").avg() == Prop.f64(1.5) @@ -511,7 +511,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_avg_i32s(): def check(graph): expr = filter.Edge.property("p_i32s").avg() == Prop.f64((1 - 2 + 3) / 3.0) @@ -520,7 +520,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_avg_i64s(): def check(graph): expr = filter.Edge.property("p_i64s").avg() == Prop.f64((-1 - 2) / 2.0) @@ -529,7 +529,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_avg_f64s(): def check(graph): expr = filter.Edge.property("p_f64s").avg() == Prop.f64(2.0) # (1.5+2.5)/2 @@ -539,7 +539,7 @@ def check(graph): # ------ LEN ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_u8s(): def check(graph): expr = filter.Edge.property("p_u8s").len() == Prop.u64(3) @@ -548,7 +548,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_u16s(): def check(graph): expr = filter.Edge.property("p_u16s").len() == Prop.u64(2) @@ -557,7 +557,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_u32s(): def check(graph): expr = filter.Edge.property("p_u32s").len() == Prop.u64(2) @@ -566,7 +566,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").len() == Prop.u64(2) @@ -575,7 +575,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_i32s(): def check(graph): expr = filter.Edge.property("p_i32s").len() == Prop.u64(3) @@ -584,7 +584,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_i64s(): def check(graph): expr = filter.Edge.property("p_i64s").len() == Prop.u64(2) @@ -593,7 +593,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_f64s(): def check(graph): expr = filter.Edge.property("p_f64s").len() == Prop.u64(2) @@ -602,7 +602,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_strs(): def check(graph): expr = filter.Edge.property("p_strs").len() == Prop.u64(3) @@ -611,7 +611,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_bools(): def check(graph): expr = filter.Edge.property("p_bools").len() == Prop.u64(2) @@ -620,7 +620,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_len_zero_on_empty_lists(): def check(graph): expr = filter.Edge.property("p_u8s").len() == Prop.u64(0) @@ -630,7 +630,7 @@ def check(graph): # ------ MIN ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_min_u8s(): def check(graph): expr = filter.Edge.property("p_u8s").min() == Prop.u8(1) @@ -639,7 +639,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_min_u16s(): def check(graph): expr = filter.Edge.property("p_u16s").min() == Prop.u16(1000) @@ -648,7 +648,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_min_u32s(): def check(graph): expr = filter.Edge.property("p_u32s").min() == Prop.u32(1_000_000) @@ -657,7 +657,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_min_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").min() == Prop.u64(1) @@ -666,7 +666,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_min_i32s(): def check(graph): # [-100,0,100] on (d->a) @@ -676,7 +676,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_min_i64s(): def check(graph): expr = filter.Edge.property("p_i64s").min() == Prop.i64(-2) @@ -685,7 +685,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_min_f64s(): def check(graph): # [-1.5,0.0,1.5] on (d->a) @@ -696,7 +696,7 @@ def check(graph): # ------ MAX ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_max_u8s(): def check(graph): # [255] for (d->a) @@ -706,7 +706,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_max_u16s(): def check(graph): expr = filter.Edge.property("p_u16s").max() == Prop.u16(65535) @@ -715,7 +715,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_max_u32s(): def check(graph): expr = filter.Edge.property("p_u32s").max() == Prop.u32(U32_MAX) @@ -724,7 +724,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_max_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").max() == Prop.u64(U64_MAX) @@ -733,7 +733,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_max_i32s(): def check(graph): expr = filter.Edge.property("p_i32s").max() == Prop.i32(2_147_483_647) @@ -742,7 +742,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_max_i64s(): def check(graph): expr = filter.Edge.property("p_i64s").max() == Prop.i64(I64_MAX) @@ -751,7 +751,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_max_f64s(): def check(graph): expr = filter.Edge.property("p_f64s").max() == Prop.f64(3.0) @@ -761,7 +761,7 @@ def check(graph): # ------ last ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_last_sum_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").temporal().last().sum() == Prop.u64(30) @@ -771,7 +771,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_last_avg_i32s(): def check(graph): expr = filter.Edge.property("p_i32s").temporal().last().avg() == Prop.f64( @@ -783,7 +783,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_last_min_u8s(): def check(graph): expr = filter.Edge.property("p_u8s").temporal().last().min() == Prop.u8(1) @@ -793,7 +793,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_last_max_f64s(): def check(graph): expr = filter.Edge.property("p_f64s").temporal().last().max() == Prop.f64(1.5) @@ -803,7 +803,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_last_len_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").temporal().last().len() == Prop.u64(2) @@ -814,7 +814,7 @@ def check(graph): # ------ all ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_all_sum_i64s(): def check(graph): expr = filter.Edge.property("p_i64s").temporal().all().sum() == Prop.i64(-3) @@ -824,7 +824,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_all_avg_f32s(): def check(graph): expr = filter.Edge.property("p_f32s").temporal().all().avg() == Prop.f64(2.0) @@ -834,7 +834,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_all_min_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").temporal().all().min() == Prop.u64(1) @@ -844,7 +844,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_all_max_u32s(): def check(graph): expr = filter.Edge.property("p_u32s").temporal().all().max() == Prop.u32( @@ -856,7 +856,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_all_len_u16s(): def check(graph): expr = filter.Edge.property("p_u16s").temporal().all().len() == Prop.u64(2) @@ -867,7 +867,7 @@ def check(graph): # ------ first ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_first_sum_u8s(): def check(graph): expr = filter.Edge.property("p_u8s").temporal().first().sum() == Prop.u64(6) @@ -877,7 +877,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_first_avg_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").temporal().first().avg() == Prop.f64(30.0) @@ -887,7 +887,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_first_min_i32s(): def check(graph): expr = filter.Edge.property("p_i32s").temporal().first().min() == Prop.i32(-2) @@ -897,7 +897,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_first_max_f64s(): def check(graph): expr = filter.Edge.property("p_f64s").temporal().first().max() == Prop.f64(1.5) @@ -907,7 +907,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_first_len_u32s(): def check(graph): expr = filter.Edge.property("p_u32s").temporal().first().len() == Prop.u64(0) @@ -918,7 +918,7 @@ def check(graph): # ------ any ------ -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_any_sum_u64s(): def check(graph): expr = filter.Edge.property("p_u64s").temporal().any().sum() == Prop.u64(3) @@ -928,7 +928,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_any_avg_i32s(): def check(graph): expr = filter.Edge.property("p_i32s").temporal().any().avg() == Prop.f64(0.0) @@ -938,7 +938,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_any_min_f32s(): def check(graph): expr = filter.Edge.property("p_f32s").temporal().any().min() == Prop.f32(-1.5) @@ -948,7 +948,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_any_max_u8s(): def check(graph): expr = filter.Edge.property("p_u8s").temporal().any().max() == Prop.u8(U8_MAX) @@ -958,7 +958,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_temporal_any_len_f64s(): def check(graph): expr = filter.Edge.property("p_f64s").temporal().any().len() == Prop.u64(3) @@ -968,7 +968,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_empty_list_agg(): def check(graph): expr = filter.Edge.property("p_i64s").len() == Prop.u64(0) @@ -978,7 +978,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_overflow_max_values(): def check(graph): # max checks @@ -1023,7 +1023,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_unsupported_ops_agg(): def check(graph): # STARTS_WITH on SUM @@ -1059,7 +1059,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_any(): def check(graph): expr = filter.Edge.property("p_u8s").any() == Prop.u8(2) @@ -1068,7 +1068,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_property_all(): def check(graph): expr = filter.Edge.property("p_bools").all() == Prop.bool(True) @@ -1077,7 +1077,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_first_any(): def check(graph): expr = filter.Edge.property("p_u64s").temporal().first().any() == Prop.u64(2) @@ -1086,7 +1086,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_first_all(): def check(graph): expr = filter.Edge.property("p_bools").temporal().first().all() == Prop.bool( @@ -1097,7 +1097,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_last_any(): def check(graph): expr = filter.Edge.property("p_i64s").temporal().last().any() == Prop.i64(-2) @@ -1106,7 +1106,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_last_all(): def check(graph): expr = filter.Edge.property("p_f32s").temporal().last().all() == Prop.f32(3.0) @@ -1115,7 +1115,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_all_any(): def check(graph): expr = filter.Edge.property("p_bools").temporal().all().any() == Prop.bool( @@ -1126,7 +1126,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_all_all(): def check(graph): expr = filter.Edge.property("p_bools").temporal().all().all() == Prop.bool( @@ -1137,7 +1137,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_any_any(): def check(graph): expr = filter.Edge.property("p_strs").temporal().any().any() == Prop.str("x") @@ -1146,7 +1146,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph2, variants=["graph"]) +@with_variants(create_test_graph2, variants=["graph"]) def test_edge_temporal_property_any_all(): def check(graph): expr = filter.Edge.property("p_strs").temporal().any().all() == Prop.str( @@ -1157,7 +1157,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_edges_getitem_property_filter_expr(): def check(graph): filter_expr = filter.Edge.property("p2") > 5 @@ -1185,7 +1185,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_exploded_edges_getitem_property_filter_expr(): def check(graph): filter_expr = filter.Edge.property("p2") == 4 @@ -1232,7 +1232,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_nested_edges_getitem_property_filter_expr(): def check(graph): filter_expr = filter.Edge.property("p2") > 5 @@ -1289,7 +1289,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_nested_exploded_edges_getitem_property_filter_expr(): def check(graph): filter_expr = filter.Edge.property("p2") == 4 @@ -1376,7 +1376,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_nodes_nested_edges_getitem_property_filter_expr(): def check(graph): filter_expr = filter.Edge.property("p2") > 5 @@ -1442,7 +1442,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edge_property_temporal_sum(): def check(graph): expr = filter.Edge.property("p2").temporal().sum() < 10 @@ -1460,7 +1460,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edge_property_temporal_avg(): def check(graph): expr = filter.Edge.property("p2").temporal().avg() == 6.0 @@ -1476,7 +1476,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edge_property_temporal_min(): def check(graph): expr = filter.Edge.property("p3").temporal().min() == 1 @@ -1492,7 +1492,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edge_property_temporal_max(): def check(graph): expr = filter.Edge.property("p2").temporal().max() == 6 @@ -1508,7 +1508,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph"]) +@with_variants(init_graph, variants=["graph"]) def test_edge_property_temporal_len(): def check(graph): expr = filter.Edge.property("p3").temporal().len() == Prop.u64(1) @@ -1524,7 +1524,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_edges_temporal_layer_eq(): def check(graph): expr = ( @@ -1536,7 +1536,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_edges_temporal_layer_eq_is_empty(): def check(graph): expr = ( @@ -1548,7 +1548,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants="graph") +@with_variants(init_graph, variants="graph") def test_filter_edges_at(): def check(graph): expr = filter.Edge.at(1).property("p10").temporal().last() == "Paper_airplane" @@ -1563,7 +1563,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants="persistent_graph") +@with_variants(init_graph, variants="persistent_graph") def test_filter_edges_at_persistent(): def check(graph): expr = filter.Edge.at(3).property("p10").temporal().last() == "Paper_airplane" @@ -1572,7 +1572,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_edges_before(): def check(graph): expr = ( @@ -1586,7 +1586,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants="graph") +@with_variants(init_graph, variants="graph") def test_filter_edges_after(): def check(graph): expr = ( @@ -1600,7 +1600,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants="persistent_graph") +@with_variants(init_graph, variants="persistent_graph") def test_filter_edges_after_persistent(): def check(graph): expr = ( @@ -1614,7 +1614,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants="graph") +@with_variants(init_graph, variants="graph") def test_filter_edges_latest(): def check(graph): expr = filter.Edge.latest().property("p2").temporal().sum() >= 0 @@ -1631,7 +1631,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants="persistent_graph") +@with_variants(init_graph, variants="persistent_graph") def test_filter_edges_latest_persistent(): def check(graph): expr = ( @@ -1645,7 +1645,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_edges_snapshot_at(): def check(graph): expr = ( @@ -1668,7 +1668,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_edges_snapshot_latest(): def check(graph): expr = ( @@ -1686,7 +1686,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("graph")) +@with_variants(init_graph3, variants=("graph")) def test_filter_edges_layer_latest(): def check(graph): expr = ( @@ -1699,7 +1699,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("graph")) +@with_variants(init_graph3, variants=("graph")) def test_filter_edges_latest_layer(): def check(graph): expr = ( @@ -1712,7 +1712,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("graph")) +@with_variants(init_graph3, variants=("graph")) def test_filter_edges_graph_filter_window(): def check(graph): expr = filter.Graph.window(1, 3) @@ -1721,7 +1721,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("graph")) +@with_variants(init_graph3, variants=("graph")) def test_filter_edges_graph_filter_layer(): def check(graph): expr = filter.Graph.layer("fire_nation") @@ -1730,7 +1730,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("graph")) +@with_variants(init_graph3, variants=("graph")) def test_filter_edges_graph_filter_window_layer(): def check(graph): expr = filter.Graph.window(1, 3).layer("fire_nation") @@ -1739,7 +1739,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("graph")) +@with_variants(init_graph3, variants=("graph")) def test_filter_edges_graph_filter_at(): def check(graph): expr = filter.Graph.at(2) @@ -1748,7 +1748,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("persistent_graph")) +@with_variants(init_graph3, variants=("persistent_graph")) def test_filter_edges_graph_filter_before(): def check(graph): expr = filter.Graph.before(4) @@ -1763,7 +1763,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("persistent_graph")) +@with_variants(init_graph3, variants=("persistent_graph")) def test_filter_edges_graph_filter_after(): def check(graph): expr = filter.Graph.after(7) @@ -1778,7 +1778,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=("graph")) +@with_variants(init_graph3, variants=("graph")) def test_filter_edges_graph_filter_latest(): def check(graph): expr = filter.Graph.latest() @@ -1787,7 +1787,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=(["graph", "persistent_graph"])) +@with_variants(init_graph3, variants=(["graph", "persistent_graph"])) def test_filter_edges_graph_filter_snapshot_at(): def check(graph): expr = filter.Graph.snapshot_at(7) @@ -1802,7 +1802,7 @@ def check(graph): return check -@with_disk_variants(init_graph3, variants=(["graph", "persistent_graph"])) +@with_variants(init_graph3, variants=(["graph", "persistent_graph"])) def test_filter_edges_graph_filter_snapshot_latest(): def check(graph): expr = filter.Graph.snapshot_latest() diff --git a/python/tests/test_base_install/test_filters/test_node_composite_filter.py b/python/tests/test_base_install/test_filters/test_node_composite_filter.py index fd1ad504d9..af03bac5be 100644 --- a/python/tests/test_base_install/test_filters/test_node_composite_filter.py +++ b/python/tests/test_base_install/test_filters/test_node_composite_filter.py @@ -1,9 +1,9 @@ from raphtory import filter from filters_setup import init_graph, create_test_graph -from utils import with_disk_variants +from utils import with_variants -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_node_composite_filter(): def check(graph): filter_expr1 = filter.Node.property("p2") == 2 @@ -48,7 +48,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_not_node_composite_filter(): def check(graph): filter_expr1 = filter.Node.name() == "2" @@ -66,7 +66,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=["graph", "persistent_graph"]) +@with_variants(create_test_graph, variants=["graph", "persistent_graph"]) def test_out_neighbours_composite_filter(): def check(graph): filter_expr1 = filter.Node.name() == "d" @@ -85,7 +85,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=["graph", "persistent_graph"]) +@with_variants(create_test_graph, variants=["graph", "persistent_graph"]) def test_in_neighbours_composite_filter(): def check(graph): filter_expr1 = filter.Node.name() == "a" @@ -109,7 +109,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=["graph", "persistent_graph"]) +@with_variants(create_test_graph, variants=["graph", "persistent_graph"]) def test_neighbours_composite_filter(): def check(graph): filter_expr = filter.Node.property("prop4") == False diff --git a/python/tests/test_base_install/test_filters/test_node_filter.py b/python/tests/test_base_install/test_filters/test_node_filter.py index e95c238493..4d4747cc45 100644 --- a/python/tests/test_base_install/test_filters/test_node_filter.py +++ b/python/tests/test_base_install/test_filters/test_node_filter.py @@ -1,10 +1,10 @@ from raphtory import filter from filters_setup import init_graph, init_graph2, create_test_graph -from utils import with_disk_variants +from utils import with_variants import pytest -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_name_eq(): def check(graph): filter_expr = filter.Node.name() == "3" @@ -15,7 +15,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_name_ne(): def check(graph): filter_expr = filter.Node.name() != "2" @@ -26,7 +26,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_name_in(): def check(graph): filter_expr = filter.Node.name().is_in(["1"]) @@ -42,7 +42,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_name_not_in(): def check(graph): filter_expr = filter.Node.name().is_not_in(["1"]) @@ -53,7 +53,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_eq(): def check(graph): filter_expr = filter.Node.node_type() == "fire_nation" @@ -64,7 +64,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_ne(): def check(graph): filter_expr = filter.Node.node_type() != "fire_nation" @@ -75,7 +75,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_in(): def check(graph): filter_expr = filter.Node.node_type().is_in(["fire_nation"]) @@ -91,7 +91,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_not_in(): def check(graph): filter_expr = filter.Node.node_type().is_not_in(["fire_nation"]) @@ -102,7 +102,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_starts_with(): def check(graph): filter_expr = filter.Node.node_type().starts_with("fire") @@ -118,7 +118,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_ends_with(): def check(graph): filter_expr = filter.Node.node_type().ends_with("tion") @@ -134,7 +134,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_contains(): def check(graph): filter_expr = filter.Node.node_type().contains("fire") @@ -145,7 +145,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_node_type_not_contains(): def check(graph): filter_expr = filter.Node.node_type().not_contains("fire") @@ -156,7 +156,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_fuzzy_search(): def check(graph): filter_expr = filter.Node.node_type().fuzzy_search("fire", 2, True) @@ -177,7 +177,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_not_node_type(): def check(graph): filter_expr = filter.Node.node_type().is_not_in(["fire_nation"]) @@ -188,7 +188,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_with_str_ids_for_node_id_eq(): def check(graph): filter_expr = filter.Node.id() == "3" @@ -199,7 +199,7 @@ def check(graph): return check -@with_disk_variants(init_graph2) +@with_variants(init_graph2) def test_filter_nodes_with_num_ids_for_node_id_eq(): def check(graph): filter_expr = filter.Node.id() == 3 @@ -210,7 +210,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_with_str_ids_for_node_id_ne(): def check(graph): filter_expr = filter.Node.id() != "3" @@ -221,7 +221,7 @@ def check(graph): return check -@with_disk_variants(init_graph2) +@with_variants(init_graph2) def test_filter_nodes_with_num_ids_for_node_id_ne(): def check(graph): filter_expr = filter.Node.id() != 3 @@ -232,7 +232,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_with_str_ids_for_node_id_is_in(): def check(graph): filter_expr = filter.Node.id().is_in(["1"]) @@ -243,7 +243,7 @@ def check(graph): return check -@with_disk_variants(init_graph2) +@with_variants(init_graph2) def test_filter_nodes_with_num_ids_for_node_id_is_in(): def check(graph): filter_expr = filter.Node.id().is_in([1]) @@ -254,7 +254,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_with_str_ids_for_node_id_is_not_in(): def check(graph): filter_expr = filter.Node.id().is_not_in(["1"]) @@ -265,7 +265,7 @@ def check(graph): return check -@with_disk_variants(init_graph2) +@with_variants(init_graph2) def test_filter_nodes_with_num_ids_for_node_id_is_not_in(): def check(graph): filter_expr = filter.Node.id().is_not_in([1]) @@ -276,7 +276,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_with_str_ids_error(): def check(graph): filter_expr = filter.Node.id() == 3 @@ -289,7 +289,7 @@ def check(graph): return check -@with_disk_variants(init_graph2) +@with_variants(init_graph2) def test_filter_nodes_with_num_ids_error(): def check(graph): filter_expr = filter.Node.id() == "3" @@ -302,7 +302,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_filter_nodes_is_active(): def check(graph): filter_expr = filter.Node.is_active() @@ -313,7 +313,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_select_nodes_is_active(): def check(graph): filter_expr = filter.Node.is_active() @@ -324,7 +324,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_filter_nodes_windowed_is_active(): def check(graph): filter_expr = filter.Node.window(1, 2).is_active() @@ -335,7 +335,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=["graph", "persistent_graph"]) +@with_variants(create_test_graph, variants=["graph", "persistent_graph"]) def test_filter_nodes_windowed_is_active_not(): def check(graph): filter_expr = filter.Node.window(1, 2).is_active() @@ -346,7 +346,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_filter_nodes_latest_is_active(): def check(graph): filter_expr = filter.Node.latest().is_active() @@ -357,7 +357,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_select_nodes_latest_is_active(): def check(graph): filter_expr = filter.Node.latest().is_active() @@ -368,7 +368,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph"]) +@with_variants(init_graph, variants=["graph"]) def test_filter_nodes_snapshot_latest_is_active(): def check(graph): filter_expr = filter.Node.snapshot_latest().is_active() @@ -381,7 +381,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["persistent_graph"]) +@with_variants(init_graph, variants=["persistent_graph"]) def test_filter_nodes_snapshot_latest_is_active_persistent(): def check(graph): filter_expr = filter.Node.snapshot_latest().is_active() @@ -392,7 +392,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_filter_nodes_at_is_active(): def check(graph): filter_expr = filter.Node.at(2).is_active() @@ -403,7 +403,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=["graph", "persistent_graph"]) +@with_variants(init_graph, variants=["graph", "persistent_graph"]) def test_select_nodes_at_is_active(): def check(graph): filter_expr = filter.Node.at(2).is_active() @@ -414,7 +414,7 @@ def check(graph): return check -@with_disk_variants(init_graph2) +@with_variants(init_graph2) def test_filter_nodes_neighbours(): def check(graph): filter_expr = filter.Graph.window(1, 5) diff --git a/python/tests/test_base_install/test_filters/test_node_property_filter.py b/python/tests/test_base_install/test_filters/test_node_property_filter.py index 41824dbd5c..b78e048796 100644 --- a/python/tests/test_base_install/test_filters/test_node_property_filter.py +++ b/python/tests/test_base_install/test_filters/test_node_property_filter.py @@ -1,11 +1,11 @@ from raphtory import filter, Prop from filters_setup import init_graph, init_graph2, create_test_graph, create_test_graph2 -from utils import with_disk_variants +from utils import with_variants import pytest import re -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_eq(): def check(graph): filter_expr = filter.Node.property("p2") == 2 @@ -21,7 +21,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_ne(): def check(graph): filter_expr = filter.Node.property("p2") != 2 @@ -32,7 +32,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_lt(): def check(graph): filter_expr = filter.Node.property("p2") < 10 @@ -43,7 +43,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_le(): def check(graph): filter_expr = filter.Node.property("p2") <= 6 @@ -54,7 +54,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_gt(): def check(graph): filter_expr = filter.Node.property("p2") > 2 @@ -65,7 +65,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_nodes_for_property_ge(): def check(graph): filter_expr = filter.Node.property("p2") >= 2 @@ -76,7 +76,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_in(): def check(graph): filter_expr = filter.Node.property("p2").is_in([6]) @@ -92,7 +92,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_not_in(): def check(graph): filter_expr = filter.Node.property("p2").is_not_in([6]) @@ -103,7 +103,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_is_some(): def check(graph): filter_expr = filter.Node.property("p2").is_some() @@ -114,7 +114,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_is_none(): def check(graph): filter_expr = filter.Node.property("p2").is_none() @@ -125,7 +125,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_by_props_added_at_different_times(): def check(graph): filter_expr1 = filter.Node.property("p4") == "pometry" @@ -137,7 +137,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_starts_with(): def check(graph): filter_expr = filter.Node.property("p10").starts_with("Paper") @@ -180,7 +180,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_ends_with(): def check(graph): filter_expr = filter.Node.property("p10").ends_with("ship") @@ -223,7 +223,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_contains(): def check(graph): filter_expr = filter.Node.property("p10").contains("Paper") @@ -256,7 +256,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_property_not_contains(): def check(graph): filter_expr = filter.Node.property("p10").not_contains("ship") @@ -291,7 +291,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_filter_nodes_for_not_property(): def check(graph): filter_expr = filter.Node.property("p2") > 2 @@ -302,7 +302,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_property_sum(): def check(graph): # Since this graph is created in python prop5 values are all i64 @@ -314,7 +314,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_property_avg(): def check(graph): filter_expr = filter.Node.property("prop5").avg() == 2.0 @@ -325,7 +325,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_property_min(): def check(graph): filter_expr = filter.Node.property("prop5").min() == 1 @@ -336,7 +336,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_property_max(): def check(graph): filter_expr = filter.Node.property("prop5").max() == 3 @@ -347,7 +347,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_property_len(): def check(graph): filter_expr = filter.Node.property("prop7").len() == Prop.u64(3) @@ -358,7 +358,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_last_property_sum(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().last().sum() == 12 @@ -369,7 +369,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_last_property_avg(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().last().avg() == 4.0 @@ -380,7 +380,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_last_property_min(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().last().min() == 3 @@ -391,7 +391,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_last_property_max(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().last().max() == 5 @@ -402,7 +402,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_last_property_len(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().last().len() == Prop.u64( @@ -415,7 +415,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_any_property_sum(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().any().sum() == 12 @@ -431,7 +431,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_any_property_avg(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().any().avg() == 2.0 @@ -447,7 +447,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_any_property_min(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().any().min() == 1 @@ -463,7 +463,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_any_property_max(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().any().max() == 3 @@ -479,7 +479,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_any_property_len(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().any().len() == Prop.u64( @@ -492,7 +492,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_all_property_sum(): def check(graph): filter_expr = filter.Node.property("prop5").temporal().all().sum() == 6 @@ -508,7 +508,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_all_property_avg(): def check(graph): filter_expr = filter.Node.property("prop5").temporal().all().avg() == 2.0 @@ -524,7 +524,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_all_property_min(): def check(graph): filter_expr = filter.Node.property("prop5").temporal().all().min() == 1 @@ -540,7 +540,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_all_property_max(): def check(graph): filter_expr = filter.Node.property("prop5").temporal().all().max() == 3 @@ -556,7 +556,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_all_property_len(): def check(graph): filter_expr = filter.Node.property("prop5").temporal().all().len() == Prop.u64( @@ -569,7 +569,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_first_property_sum(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().first().sum() == 6 @@ -580,7 +580,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_first_property_avg(): def check(graph): filter_expr = filter.Node.property("prop5").temporal().first().avg() == 2.0 @@ -591,7 +591,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_first_property_min(): def check(graph): filter_expr = filter.Node.property("prop5").temporal().first().min() == 1 @@ -602,7 +602,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_first_property_max(): def check(graph): filter_expr = filter.Node.property("prop6").temporal().first().max() == 3 @@ -613,7 +613,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_first_property_len(): def check(graph): filter_expr = filter.Node.property( @@ -626,7 +626,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_metadata_sum(): def check(graph): filter_expr = filter.Node.metadata("prop4").sum() == 23 @@ -637,7 +637,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_metadata_avg(): def check(graph): filter_expr = filter.Node.metadata("prop1").avg() == 12.0 @@ -648,7 +648,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_metadata_min(): def check(graph): filter_expr = filter.Node.metadata("prop2").min() == -2 @@ -659,7 +659,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_metadata_any(): def check(graph): filter_expr = filter.Node.metadata("prop2").any() == -2 @@ -670,7 +670,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_metadata_all(): def check(graph): filter_expr = filter.Node.metadata("prop4").all() > 10 @@ -681,7 +681,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_property_any(): def check(graph): filter_expr = filter.Node.property("prop8").any().is_in([3]) @@ -692,7 +692,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_property_all(): def check(graph): filter_expr = filter.Node.property("prop8").all() == 3 @@ -703,7 +703,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporary_property_first_any(): def check(graph): filter_expr = filter.Node.property("prop8").temporal().first().any() == 3 @@ -714,7 +714,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporary_property_first_all(): def check(graph): filter_expr = filter.Node.property("prop8").temporal().first().all() == 2 @@ -725,7 +725,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporary_property_last_any(): def check(graph): filter_expr = filter.Node.property("prop8").temporal().last().any() == 3 @@ -736,7 +736,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporary_property_last_all(): def check(graph): filter_expr = filter.Node.property("prop8").temporal().last().all() > 1 @@ -752,7 +752,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporary_property_any_any(): def check(graph): filter_expr = filter.Node.property("prop8").temporal().any().any() == 3 @@ -768,7 +768,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporary_property_any_all(): def check(graph): filter_expr = filter.Node.property("prop8").temporal().any().all() == 2 @@ -784,7 +784,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_with_with_qualifier_on_non_string(): def check(graph): filter_expr = filter.Node.property("prop8").any() == "3" @@ -797,7 +797,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_with_with_qualifier_alongside_illegal_operators(): def check(graph): filter_expr = filter.Node.property("prop8").any().is_some() @@ -810,7 +810,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_with_with_qualifier_alongside_illegal_agg_operators(): def check(graph): filter_expr = filter.Node.property("prop8").all().len() > 0 @@ -830,7 +830,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_metadata_max(): def check(graph): filter_expr = filter.Node.metadata("prop2").max() == 3 @@ -841,7 +841,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_metadata_len(): def check(graph): filter_expr = filter.Node.metadata("prop4").len() == Prop.u64(2) @@ -852,7 +852,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_nodes_getitem_property_filter_expr(): def check(graph): # Test 1 @@ -917,7 +917,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_path_from_graph_nodes_getitem_property_filter_expr(): def check(graph): filter_expr = filter.Node.property("p100") > 30 @@ -1006,7 +1006,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_path_from_node_nodes_getitem_property_filter_expr(): def check(graph): filter_expr = filter.Node.property("p100") > 30 @@ -1039,7 +1039,7 @@ def check(graph): return check -@with_disk_variants(init_graph) +@with_variants(init_graph) def test_prop_not_found_error(): def check(graph): filter_expr = filter.Node.property("p").any().is_some() @@ -1052,7 +1052,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_sum(): def check(graph): filter_expr = filter.Node.property("p9").temporal().sum() == 15 @@ -1063,7 +1063,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_avg(): def check(graph): filter_expr = filter.Node.property("p2").temporal().avg() < 10.0 @@ -1074,7 +1074,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_min(): def check(graph): filter_expr = filter.Node.property("p100").temporal().min().is_in([60, 50, 100]) @@ -1085,7 +1085,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_max(): def check(graph): filter_expr = filter.Node.property("p100").temporal().max().is_not_in([1, 2, 3]) @@ -1096,7 +1096,7 @@ def check(graph): return check -@with_disk_variants(init_graph, variants=("graph", "persistent_graph")) +@with_variants(init_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_len(): def check(graph): filter_expr = filter.Node.property("p2").temporal().len() == Prop.u64(1) @@ -1112,7 +1112,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_eq(): def check(graph): filter_expr = filter.Node.property("prop1").temporal() == [60] @@ -1123,7 +1123,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_ne(): def check(graph): filter_expr = filter.Node.property("prop1").temporal() != [60] @@ -1134,7 +1134,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_for_temporal_property_fails(): def check(graph): filter_expr = filter.Node.property("prop1").temporal() == 60 @@ -1156,7 +1156,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_temporal_window_sum_ge(): def check(graph): expr = filter.Node.window(1, 2).property("prop5").temporal().last().sum() >= 12 @@ -1168,7 +1168,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_two_windows_and(): def check(graph): filter1 = ( @@ -1182,7 +1182,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_window_out_of_range_is_empty(): def check(graph): expr = filter.Node.window(10, 20).property("prop5").temporal().sum() >= 0 @@ -1191,7 +1191,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_temporal_layer_sum_ge(): def check(graph): expr = ( @@ -1212,7 +1212,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_at(): def check(graph): expr = filter.Node.at(1).property("prop5").temporal().last().sum() >= 10 @@ -1224,7 +1224,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_before(): def check(graph): expr = filter.Node.before(2).property("prop5").temporal().last().sum() == 6 @@ -1236,7 +1236,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_after(): def check(graph): expr = filter.Node.after(1).property("prop5").temporal().sum() >= 0 @@ -1248,7 +1248,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_latest(): def check(graph): expr = filter.Node.latest().property("prop6").temporal().last().sum() == 12 @@ -1260,7 +1260,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_snapshot_at(): def check(graph): expr = filter.Node.snapshot_at(1).property("prop5").temporal().last().sum() == 6 @@ -1277,7 +1277,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_snapshot_latest(): def check(graph): expr = ( @@ -1292,7 +1292,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_window_latest(): def check(graph): expr = ( @@ -1304,7 +1304,7 @@ def check(graph): return check -@with_disk_variants(create_test_graph, variants=("graph", "persistent_graph")) +@with_variants(create_test_graph, variants=("graph", "persistent_graph")) def test_filter_nodes_latest_window(): def check(graph): expr = ( @@ -1316,7 +1316,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=("graph", "persistent_graph")) +@with_variants(init_graph2, variants=("graph", "persistent_graph")) def test_filter_nodes_layer_latest(): def check(graph): expr = ( @@ -1329,7 +1329,7 @@ def check(graph): return check -@with_disk_variants(init_graph2, variants=("graph", "persistent_graph")) +@with_variants(init_graph2, variants=("graph", "persistent_graph")) def test_filter_nodes_latest_layer(): def check(graph): expr = ( diff --git a/python/tests/test_base_install/test_graphdb/test_graphdb.py b/python/tests/test_base_install/test_graphdb/test_graphdb.py index c0bc9add08..e39f83e19b 100644 --- a/python/tests/test_base_install/test_graphdb/test_graphdb.py +++ b/python/tests/test_base_install/test_graphdb/test_graphdb.py @@ -17,13 +17,11 @@ import numpy as np import pandas as pd -import pandas.core.frame import pyarrow as pa import pytest from numpy.testing import assert_equal as check_arr from pytest import fixture from raphtory import Graph, PersistentGraph, algorithms, graph_loader -from utils import with_disk_graph base_dir = Path(__file__).parent edges = [(1, 1, 2), (2, 1, 3), (-1, 2, 1), (0, 1, 1), (7, 3, 2), (1, 1, 1)] @@ -60,12 +58,8 @@ def create_graph_with_deletions(): def test_graph_len_edge_len(): g = create_graph() - @with_disk_graph - def assert_len_edge_len(g): - assert g.count_nodes() == 3 - assert g.count_edges() == 5 - - assert_len_edge_len(g) + assert g.count_nodes() == 3 + assert g.count_edges() == 5 def test_graph_pickle(): @@ -95,238 +89,196 @@ def test_persistent_graph_pickle(): def test_id_iterable(): g = create_graph() - @with_disk_graph - def check_id_iterable(g): - assert g.nodes.id.max() == 3 - assert g.nodes.id.min() == 1 - assert set(g.nodes.id.collect()) == {1, 2, 3} - out_neighbours = g.nodes.out_neighbours.id.collect() - out_neighbours = (set(n) for n in out_neighbours) - out_neighbours = dict(zip(g.nodes.id, out_neighbours)) + assert g.nodes.id.max() == 3 + assert g.nodes.id.min() == 1 + assert set(g.nodes.id.collect()) == {1, 2, 3} + out_neighbours = g.nodes.out_neighbours.id.collect() + out_neighbours = (set(n) for n in out_neighbours) + out_neighbours = dict(zip(g.nodes.id, out_neighbours)) - assert out_neighbours == {1: {1, 2, 3}, 2: {1}, 3: {2}} + assert out_neighbours == {1: {1, 2, 3}, 2: {1}, 3: {2}} - check_id_iterable(g) def test_degree_iterable(): g = create_graph() - @with_disk_graph - def check_degree_iterable(g): - assert g.nodes.degree().min() == 2 - assert g.nodes.degree().max() == 3 - assert g.nodes.in_degree().min() == 1 - assert g.nodes.in_degree().max() == 2 - assert g.nodes.out_degree().min() == 1 - assert g.nodes.out_degree().max() == 3 - assert isclose(g.nodes.degree().mean(), 7 / 3) - assert g.nodes.degree().sum() == 7 - degrees = g.nodes.degree().collect() - degrees.sort() - assert degrees == [2, 2, 3] + assert g.nodes.degree().min() == 2 + assert g.nodes.degree().max() == 3 + assert g.nodes.in_degree().min() == 1 + assert g.nodes.in_degree().max() == 2 + assert g.nodes.out_degree().min() == 1 + assert g.nodes.out_degree().max() == 3 + assert isclose(g.nodes.degree().mean(), 7 / 3) + assert g.nodes.degree().sum() == 7 + degrees = g.nodes.degree().collect() + degrees.sort() + assert degrees == [2, 2, 3] - check_degree_iterable(g) def test_nodes_time_iterable(): g = create_graph() - @with_disk_graph - def check(g): - assert g.nodes.earliest_time.min().t == -1 - assert g.nodes.latest_time.max().t == 7 + assert g.nodes.earliest_time.min().t == -1 + assert g.nodes.latest_time.max().t == 7 - check(g) def test_graph_has_edge(): g = create_graph() - @with_disk_graph - def check(g): - assert not g.window(-1, 1).has_edge(1, 3) - assert g.window(-1, 3).has_edge(1, 3) - assert not g.window(10, 11).has_edge(1, 3) + assert not g.window(-1, 1).has_edge(1, 3) + assert g.window(-1, 3).has_edge(1, 3) + assert not g.window(10, 11).has_edge(1, 3) - check(g) def test_graph_has_node(): g = create_graph() - @with_disk_graph - def check(g): - assert g.has_node(3) + assert g.has_node(3) - check(g) def test_windowed_graph_has_node(): g = create_graph() - @with_disk_graph - def check(g): - assert g.window(-1, 1).has_node(1) + assert g.window(-1, 1).has_node(1) - check(g) def test_windowed_graph_get_node(): g = create_graph() - @with_disk_graph - def check(g): - view = g.window(0, sys.maxsize) + view = g.window(0, sys.maxsize) - assert view.node(1).id == 1 - assert view.node(10) is None - assert view.node(1).degree() == 3 + assert view.node(1).id == 1 + assert view.node(10) is None + assert view.node(1).degree() == 3 - check(g) def test_edge_sorting(): g = create_graph() - @with_disk_graph - def check(g): - assert sorted(g.edges, key=lambda e: e.id) == sorted(g.edges) - assert sorted(g.edges.explode(), key=lambda e: (*e.id, e.time)) == sorted( - g.edges.explode() - ) + assert sorted(g.edges, key=lambda e: e.id) == sorted(g.edges) + assert sorted(g.edges.explode(), key=lambda e: (*e.id, e.time)) == sorted( + g.edges.explode() + ) - check(g) def test_windowed_graph_degree(): g = create_graph() - @with_disk_graph - def check(g): - view = g.window(0, sys.maxsize) + view = g.window(0, sys.maxsize) - degrees = [v.degree() for v in view.nodes] - degrees.sort() + degrees = [v.degree() for v in view.nodes] + degrees.sort() - assert degrees == [2, 2, 3] + assert degrees == [2, 2, 3] - in_degrees = [v.in_degree() for v in view.nodes] - in_degrees.sort() + in_degrees = [v.in_degree() for v in view.nodes] + in_degrees.sort() - assert in_degrees == [1, 1, 2] + assert in_degrees == [1, 1, 2] - out_degrees = [v.out_degree() for v in view.nodes] - out_degrees.sort() + out_degrees = [v.out_degree() for v in view.nodes] + out_degrees.sort() - assert out_degrees == [0, 1, 3] + assert out_degrees == [0, 1, 3] - check(g) def test_windowed_graph_get_edge(): g = create_graph() - @with_disk_graph - def check(g): - max_size = sys.maxsize - min_size = -sys.maxsize - 1 + max_size = sys.maxsize + min_size = -sys.maxsize - 1 - view = g.window(min_size, max_size) + view = g.window(min_size, max_size) - assert (view.edge(1, 3).src.id, view.edge(1, 3).dst.id) == (1, 3) - assert view.edge(2, 3) is None - assert view.edge(6, 5) is None + assert (view.edge(1, 3).src.id, view.edge(1, 3).dst.id) == (1, 3) + assert view.edge(2, 3) is None + assert view.edge(6, 5) is None - assert (view.node(1).id, view.node(3).id) == (1, 3) + assert (view.node(1).id, view.node(3).id) == (1, 3) - view = g.window(2, 3) - assert (view.edge(1, 3).src.id, view.edge(1, 3).dst.id) == (1, 3) + view = g.window(2, 3) + assert (view.edge(1, 3).src.id, view.edge(1, 3).dst.id) == (1, 3) - view = g.window(3, 7) - assert view.edge(1, 3) is None + view = g.window(3, 7) + assert view.edge(1, 3) is None - check(g) def test_windowed_graph_edges(): g = create_graph() - @with_disk_graph - def check(g): - view = g.window(0, sys.maxsize) + view = g.window(0, sys.maxsize) - edges = {v.id: sorted(v.edges.id) for v in view.nodes} - assert edges == { - 1: [(1, 1), (1, 2), (1, 3)], - 2: [(1, 2), (3, 2)], - 3: [(1, 3), (3, 2)], - } + edges = {v.id: sorted(v.edges.id) for v in view.nodes} + assert edges == { + 1: [(1, 1), (1, 2), (1, 3)], + 2: [(1, 2), (3, 2)], + 3: [(1, 3), (3, 2)], + } - in_edges = {v.id: sorted(v.in_edges.id) for v in view.nodes} - assert in_edges == {1: [(1, 1)], 2: [(1, 2), (3, 2)], 3: [(1, 3)]} + in_edges = {v.id: sorted(v.in_edges.id) for v in view.nodes} + assert in_edges == {1: [(1, 1)], 2: [(1, 2), (3, 2)], 3: [(1, 3)]} - out_edges = {v.id: sorted(v.out_edges.id) for v in view.nodes} + out_edges = {v.id: sorted(v.out_edges.id) for v in view.nodes} - assert out_edges == {1: [(1, 1), (1, 2), (1, 3)], 2: [], 3: [(3, 2)]} + assert out_edges == {1: [(1, 1), (1, 2), (1, 3)], 2: [], 3: [(3, 2)]} - check(g) def test_windowed_graph_node_ids(): g = create_graph() - @with_disk_graph - def check(g): - vs = [v for v in g.window(-1, 2).nodes.id] - vs.sort() - assert vs == [1, 2] # this makes clear that the end of the range is exclusive + vs = [v for v in g.window(-1, 2).nodes.id] + vs.sort() + assert vs == [1, 2] # this makes clear that the end of the range is exclusive - vs = [v for v in g.window(-5, 3).nodes.id] - vs.sort() - assert vs == [1, 2, 3] + vs = [v for v in g.window(-5, 3).nodes.id] + vs.sort() + assert vs == [1, 2, 3] - check(g) def test_windowed_graph_nodes(): g = create_graph() - @with_disk_graph - def check(g): - view = g.window(-1, 0) - nodes = list(view.nodes.id) - assert nodes == [1, 2] + view = g.window(-1, 0) + nodes = list(view.nodes.id) + assert nodes == [1, 2] - check(g) def test_windowed_graph_neighbours(): g = create_graph() - @with_disk_graph - def check(g): - max_size = sys.maxsize - min_size = -sys.maxsize - 1 + max_size = sys.maxsize + min_size = -sys.maxsize - 1 - view = g.window(min_size, max_size) + view = g.window(min_size, max_size) - neighbours = dict( - zip(view.nodes.id, (sorted(v) for v in view.nodes.neighbours.id)) - ) - assert neighbours == {1: [1, 2, 3], 2: [1, 3], 3: [1, 2]} + neighbours = dict( + zip(view.nodes.id, (sorted(v) for v in view.nodes.neighbours.id)) + ) + assert neighbours == {1: [1, 2, 3], 2: [1, 3], 3: [1, 2]} - in_neighbours = dict( - zip(view.nodes.id, (sorted(v) for v in view.nodes.in_neighbours.id)) - ) - assert in_neighbours == {1: [1, 2], 2: [1, 3], 3: [1]} + in_neighbours = dict( + zip(view.nodes.id, (sorted(v) for v in view.nodes.in_neighbours.id)) + ) + assert in_neighbours == {1: [1, 2], 2: [1, 3], 3: [1]} - out_neighbours = dict( - zip(view.nodes.id, (sorted(v) for v in view.nodes.out_neighbours.id)) - ) - assert out_neighbours == {1: [1, 2, 3], 2: [1], 3: [2]} + out_neighbours = dict( + zip(view.nodes.id, (sorted(v) for v in view.nodes.out_neighbours.id)) + ) + assert out_neighbours == {1: [1, 2, 3], 2: [1], 3: [2]} - check(g) def test_name(): @@ -342,14 +294,11 @@ def test_getitem(): g.add_node(0, 1, {"cost": 0}) g.add_node(1, 1, {"cost": 1}) - @with_disk_graph - def check(g): - assert ( - g.node(1).properties.temporal.get("cost") - == g.node(1).properties.temporal["cost"] - ) + assert ( + g.node(1).properties.temporal.get("cost") + == g.node(1).properties.temporal["cost"] + ) - check(g) def test_entity_history_date_time(): @@ -614,315 +563,312 @@ def create_graph_history_1(): def test_node_properties(): g = create_graph_history_1() - @with_disk_graph - def check(g): - # testing property history - def history_test(key, value): - if value is None: - assert g.node(1).properties.temporal.get(key) is None - assert g.nodes.properties.temporal.get(key) is None - assert g.nodes.out_neighbours.properties.temporal.get(key) is None - else: - assert g.node(1).properties.temporal.get(key).items() == value - assert g.nodes.properties.temporal.get(key).items() == [value] - assert g.nodes.out_neighbours.properties.temporal.get(key).items() == [ - [value] - ] - - # we're comparing EventTime values so we need to pass the event id, here as a tuple - history_test("prop 1", [((1, 1), 1), ((2, 2), 2)]) - history_test("prop 2", [((2, 2), 0.6), ((3, 3), 0.9)]) - history_test("prop 3", [((1, 1), "hi"), ((3, 3), "hello")]) - history_test("prop 4", [((1, 1), True), ((2, 2), False), ((3, 3), True)]) - history_test("undefined", None) - - def time_history_test(time, key, value): - if value is None: - assert g.at(time).node(1).properties.temporal.get(key) is None - assert g.at(time).nodes.properties.temporal.get(key) is None - assert ( - g.at(time).nodes.out_neighbours.properties.temporal.get(key) is None - ) - else: - assert g.at(time).node(1).properties.temporal.get(key).items() == value - assert g.at(time).nodes.properties.temporal.get(key).items() == [value] - assert g.at(time).nodes.out_neighbours.properties.temporal.get( - key - ).items() == [[value]] - - time_history_test(1, "prop 4", [((1, 1), True)]) - time_history_test(1, "static prop", None) - - def time_static_property_test(time, key, value): - gg = g.before(time + 1) - if value is None: - assert gg.node(1).metadata.get(key) is None - assert gg.nodes.metadata.get(key) is None - assert gg.nodes.out_neighbours.metadata.get(key) is None - else: - assert gg.node(1).metadata.get(key) == value - assert gg.nodes.metadata.get(key) == [value] - assert gg.nodes.out_neighbours.metadata.get(key) == [[value]] - - def static_property_test(key, value): - if value is None: - assert g.node(1).metadata.get(key) is None - assert g.nodes.metadata.get(key) is None - assert g.nodes.out_neighbours.metadata.get(key) is None - else: - assert g.node(1).metadata.get(key) == value - assert g.nodes.metadata.get(key) == [value] - assert g.nodes.out_neighbours.metadata.get(key) == [[value]] - - time_static_property_test(1, "static prop", 123) - time_static_property_test(100, "static prop", 123) - static_property_test("static prop", 123) - static_property_test("prop 4", None) - - # testing property - def time_property_test(time, key, value): - gg = g.before(time + 1) - if value is None: - assert gg.node(1).properties.get(key) is None - else: - assert gg.node(1).properties.get(key) == value - assert gg.nodes.properties.get(key) == [value] - assert gg.nodes.out_neighbours.properties.get(key) == [[value]] - - def meta_test(key, value): - if value is None: - assert g.node(1).metadata.get(key) is None - assert g.nodes.metadata.get(key) is None - assert g.nodes.out_neighbours.metadata.get(key) is None - else: - assert g.node(1).metadata.get(key) == value - assert g.nodes.metadata.get(key) == [value] - assert g.nodes.out_neighbours.metadata.get(key) == [[value]] - - def no_static_property_test(key, value): - if value is None: - assert g.node(1).properties.temporal.get(key) is None - assert g.nodes.properties.temporal.get(key) is None - assert g.nodes.out_neighbours.properties.temporal.get(key) is None - else: - assert g.node(1).properties.temporal.get(key).value() == value - assert g.nodes.properties.temporal.get(key).value() == [value] - assert g.nodes.out_neighbours.properties.temporal.get(key).value() == [ - [value] - ] - - meta_test("static prop", 123) - assert g.node(1).metadata["static prop"] == 123 - no_static_property_test("static prop", None) - no_static_property_test("prop 1", 2) - time_property_test(2, "prop 2", 0.6) - time_property_test(1, "prop 2", None) - - # testing properties - assert g.node(1).properties == { - "prop 2": 0.9, - "prop 3": "hello", - "prop 1": 2, - "prop 4": True, - } + # testing property history + def history_test(key, value): + if value is None: + assert g.node(1).properties.temporal.get(key) is None + assert g.nodes.properties.temporal.get(key) is None + assert g.nodes.out_neighbours.properties.temporal.get(key) is None + else: + assert g.node(1).properties.temporal.get(key).items() == value + assert g.nodes.properties.temporal.get(key).items() == [value] + assert g.nodes.out_neighbours.properties.temporal.get(key).items() == [ + [value] + ] + + # we're comparing EventTime values so we need to pass the event id, here as a tuple + history_test("prop 1", [((1, 1), 1), ((2, 2), 2)]) + history_test("prop 2", [((2, 2), 0.6), ((3, 3), 0.9)]) + history_test("prop 3", [((1, 1), "hi"), ((3, 3), "hello")]) + history_test("prop 4", [((1, 1), True), ((2, 2), False), ((3, 3), True)]) + history_test("undefined", None) - assert g.node(1).metadata == { - "static prop": 123, - } + def time_history_test(time, key, value): + if value is None: + assert g.at(time).node(1).properties.temporal.get(key) is None + assert g.at(time).nodes.properties.temporal.get(key) is None + assert ( + g.at(time).nodes.out_neighbours.properties.temporal.get(key) is None + ) + else: + assert g.at(time).node(1).properties.temporal.get(key).items() == value + assert g.at(time).nodes.properties.temporal.get(key).items() == [value] + assert g.at(time).nodes.out_neighbours.properties.temporal.get( + key + ).items() == [[value]] - # find all nodes that match properties - [n] = g.find_nodes( - { - "prop 3": "hello", - "prop 1": 2, - } - ) - assert n == g.node(1) + time_history_test(1, "prop 4", [((1, 1), True)]) + time_history_test(1, "static prop", None) - empty_list = g.find_nodes({"prop 1": 2, "prop 3": "hi"}) - assert len(empty_list) == 0 + def time_static_property_test(time, key, value): + gg = g.before(time + 1) + if value is None: + assert gg.node(1).metadata.get(key) is None + assert gg.nodes.metadata.get(key) is None + assert gg.nodes.out_neighbours.metadata.get(key) is None + else: + assert gg.node(1).metadata.get(key) == value + assert gg.nodes.metadata.get(key) == [value] + assert gg.nodes.out_neighbours.metadata.get(key) == [[value]] - assert g.nodes.properties == { - "prop 2": [0.9], - "prop 3": ["hello"], - "prop 1": [2], - "prop 4": [True], - } + def static_property_test(key, value): + if value is None: + assert g.node(1).metadata.get(key) is None + assert g.nodes.metadata.get(key) is None + assert g.nodes.out_neighbours.metadata.get(key) is None + else: + assert g.node(1).metadata.get(key) == value + assert g.nodes.metadata.get(key) == [value] + assert g.nodes.out_neighbours.metadata.get(key) == [[value]] - assert g.nodes.out_neighbours.properties == { - "prop 2": [[0.9]], - "prop 3": [["hello"]], - "prop 1": [[2]], - "prop 4": [[True]], - } + time_static_property_test(1, "static prop", 123) + time_static_property_test(100, "static prop", 123) + static_property_test("static prop", 123) + static_property_test("prop 4", None) - assert g.nodes.metadata == { - "static prop": [123], - } + # testing property + def time_property_test(time, key, value): + gg = g.before(time + 1) + if value is None: + assert gg.node(1).properties.get(key) is None + else: + assert gg.node(1).properties.get(key) == value + assert gg.nodes.properties.get(key) == [value] + assert gg.nodes.out_neighbours.properties.get(key) == [[value]] - assert g.nodes.out_neighbours.metadata == { - "static prop": [[123]], - } + def meta_test(key, value): + if value is None: + assert g.node(1).metadata.get(key) is None + assert g.nodes.metadata.get(key) is None + assert g.nodes.out_neighbours.metadata.get(key) is None + else: + assert g.node(1).metadata.get(key) == value + assert g.nodes.metadata.get(key) == [value] + assert g.nodes.out_neighbours.metadata.get(key) == [[value]] + + def no_static_property_test(key, value): + if value is None: + assert g.node(1).properties.temporal.get(key) is None + assert g.nodes.properties.temporal.get(key) is None + assert g.nodes.out_neighbours.properties.temporal.get(key) is None + else: + assert g.node(1).properties.temporal.get(key).value() == value + assert g.nodes.properties.temporal.get(key).value() == [value] + assert g.nodes.out_neighbours.properties.temporal.get(key).value() == [ + [value] + ] + + meta_test("static prop", 123) + assert g.node(1).metadata["static prop"] == 123 + no_static_property_test("static prop", None) + no_static_property_test("prop 1", 2) + time_property_test(2, "prop 2", 0.6) + time_property_test(1, "prop 2", None) - assert g.node(1).properties.temporal.latest() == { - "prop 2": 0.9, + # testing properties + assert g.node(1).properties == { + "prop 2": 0.9, + "prop 3": "hello", + "prop 1": 2, + "prop 4": True, + } + + assert g.node(1).metadata == { + "static prop": 123, + } + + # find all nodes that match properties + [n] = g.find_nodes( + { "prop 3": "hello", "prop 1": 2, - "prop 4": True, - } - assert g.nodes.properties.temporal.latest() == { - "prop 2": [0.9], - "prop 3": ["hello"], - "prop 1": [2], - "prop 4": [True], - } - assert g.nodes.out_neighbours.properties.temporal.latest() == { - "prop 2": [[0.9]], - "prop 3": [["hello"]], - "prop 1": [[2]], - "prop 4": [[True]], } + ) + assert n == g.node(1) - assert g.before(3).node(1).properties == { - "prop 1": 2, - "prop 4": False, - "prop 2": 0.6, - "prop 3": "hi", - } - assert g.before(3).nodes.properties == { - "prop 1": [2], - "prop 4": [False], - "prop 2": [0.6], - "prop 3": ["hi"], - } - assert g.before(3).nodes.out_neighbours.properties == { - "prop 1": [[2]], - "prop 4": [[False]], - "prop 2": [[0.6]], - "prop 3": [["hi"]], - } + empty_list = g.find_nodes({"prop 1": 2, "prop 3": "hi"}) + assert len(empty_list) == 0 - assert g.before(3).node(1).metadata == { - "static prop": 123, - } - assert g.before(3).nodes.metadata == { - "static prop": [123], - } - assert g.before(3).nodes.out_neighbours.metadata == { - "static prop": [[123]], - } + assert g.nodes.properties == { + "prop 2": [0.9], + "prop 3": ["hello"], + "prop 1": [2], + "prop 4": [True], + } - # testing property histories - assert g.node(1).properties.temporal == { - "prop 3": [(1, "hi"), (3, "hello")], - "prop 1": [(1, 1), (2, 2)], - "prop 4": [(1, True), (2, False), (3, True)], - "prop 2": [(2, 0.6), (3, 0.9)], - } - assert g.nodes.properties.temporal == { - "prop 3": [[(1, "hi"), (3, "hello")]], - "prop 1": [[(1, 1), (2, 2)]], - "prop 4": [[(1, True), (2, False), (3, True)]], - "prop 2": [[(2, 0.6), (3, 0.9)]], - } - assert g.nodes.out_neighbours.properties.temporal == { - "prop 3": [[[(1, "hi"), (3, "hello")]]], - "prop 1": [[[(1, 1), (2, 2)]]], - "prop 4": [[[(1, True), (2, False), (3, True)]]], - "prop 2": [[[(2, 0.6), (3, 0.9)]]], - } + assert g.nodes.out_neighbours.properties == { + "prop 2": [[0.9]], + "prop 3": [["hello"]], + "prop 1": [[2]], + "prop 4": [[True]], + } - assert g.at(2).node(1).properties.temporal == { - "prop 2": [(2, 0.6)], - "prop 4": [(2, False)], - "prop 1": [(2, 2)], - } - assert g.before(3).nodes.properties.temporal == { - "prop 2": [[(2, 0.6)]], - "prop 4": [[(1, True), (2, False)]], - "prop 1": [[(1, 1), (2, 2)]], - "prop 3": [[(1, "hi")]], - } - assert g.before(3).nodes.out_neighbours.properties.temporal == { - "prop 2": [[[(2, 0.6)]]], - "prop 4": [[[(1, True), (2, False)]]], - "prop 1": [[[(1, 1), (2, 2)]]], - "prop 3": [[[(1, "hi")]]], - } + assert g.nodes.metadata == { + "static prop": [123], + } - # testing property names - expected_names = sorted(["prop 4", "prop 1", "prop 2", "prop 3"]) - assert sorted(g.node(1).properties.keys()) == expected_names - assert sorted(g.nodes.properties.keys()) == expected_names - assert sorted(g.nodes.out_neighbours.properties.keys()) == expected_names - - expected_names_no_static = sorted(["prop 4", "prop 1", "prop 2", "prop 3"]) - assert sorted(g.node(1).properties.temporal.keys()) == expected_names_no_static - assert sorted(g.nodes.properties.temporal.keys()) == expected_names_no_static - assert ( - sorted(g.nodes.out_neighbours.properties.temporal.keys()) - == expected_names_no_static - ) + assert g.nodes.out_neighbours.metadata == { + "static prop": [[123]], + } - expected_names_no_static_at_1 = ["prop 1", "prop 2", "prop 3", "prop 4"] - assert sorted(g.at(1).node(1).properties.temporal.keys()) == [ - "prop 1", - "prop 3", - "prop 4", - ] - assert ( - sorted(g.at(1).nodes.properties.temporal.keys()) - == expected_names_no_static_at_1 - ) - assert ( - sorted(g.at(1).nodes.out_neighbours.properties.temporal.keys()) - == expected_names_no_static_at_1 - ) + assert g.node(1).properties.temporal.latest() == { + "prop 2": 0.9, + "prop 3": "hello", + "prop 1": 2, + "prop 4": True, + } + assert g.nodes.properties.temporal.latest() == { + "prop 2": [0.9], + "prop 3": ["hello"], + "prop 1": [2], + "prop 4": [True], + } + assert g.nodes.out_neighbours.properties.temporal.latest() == { + "prop 2": [[0.9]], + "prop 3": [["hello"]], + "prop 1": [[2]], + "prop 4": [[True]], + } + + assert g.before(3).node(1).properties == { + "prop 1": 2, + "prop 4": False, + "prop 2": 0.6, + "prop 3": "hi", + } + assert g.before(3).nodes.properties == { + "prop 1": [2], + "prop 4": [False], + "prop 2": [0.6], + "prop 3": ["hi"], + } + assert g.before(3).nodes.out_neighbours.properties == { + "prop 1": [[2]], + "prop 4": [[False]], + "prop 2": [[0.6]], + "prop 3": [["hi"]], + } + + assert g.before(3).node(1).metadata == { + "static prop": 123, + } + assert g.before(3).nodes.metadata == { + "static prop": [123], + } + assert g.before(3).nodes.out_neighbours.metadata == { + "static prop": [[123]], + } + + # testing property histories + assert g.node(1).properties.temporal == { + "prop 3": [(1, "hi"), (3, "hello")], + "prop 1": [(1, 1), (2, 2)], + "prop 4": [(1, True), (2, False), (3, True)], + "prop 2": [(2, 0.6), (3, 0.9)], + } + assert g.nodes.properties.temporal == { + "prop 3": [[(1, "hi"), (3, "hello")]], + "prop 1": [[(1, 1), (2, 2)]], + "prop 4": [[(1, True), (2, False), (3, True)]], + "prop 2": [[(2, 0.6), (3, 0.9)]], + } + assert g.nodes.out_neighbours.properties.temporal == { + "prop 3": [[[(1, "hi"), (3, "hello")]]], + "prop 1": [[[(1, 1), (2, 2)]]], + "prop 4": [[[(1, True), (2, False), (3, True)]]], + "prop 2": [[[(2, 0.6), (3, 0.9)]]], + } + + assert g.at(2).node(1).properties.temporal == { + "prop 2": [(2, 0.6)], + "prop 4": [(2, False)], + "prop 1": [(2, 2)], + } + assert g.before(3).nodes.properties.temporal == { + "prop 2": [[(2, 0.6)]], + "prop 4": [[(1, True), (2, False)]], + "prop 1": [[(1, 1), (2, 2)]], + "prop 3": [[(1, "hi")]], + } + assert g.before(3).nodes.out_neighbours.properties.temporal == { + "prop 2": [[[(2, 0.6)]]], + "prop 4": [[[(1, True), (2, False)]]], + "prop 1": [[[(1, 1), (2, 2)]]], + "prop 3": [[[(1, "hi")]]], + } + + # testing property names + expected_names = sorted(["prop 4", "prop 1", "prop 2", "prop 3"]) + assert sorted(g.node(1).properties.keys()) == expected_names + assert sorted(g.nodes.properties.keys()) == expected_names + assert sorted(g.nodes.out_neighbours.properties.keys()) == expected_names + + expected_names_no_static = sorted(["prop 4", "prop 1", "prop 2", "prop 3"]) + assert sorted(g.node(1).properties.temporal.keys()) == expected_names_no_static + assert sorted(g.nodes.properties.temporal.keys()) == expected_names_no_static + assert ( + sorted(g.nodes.out_neighbours.properties.temporal.keys()) + == expected_names_no_static + ) + + expected_names_no_static_at_1 = ["prop 1", "prop 2", "prop 3", "prop 4"] + assert sorted(g.at(1).node(1).properties.temporal.keys()) == [ + "prop 1", + "prop 3", + "prop 4", + ] + assert ( + sorted(g.at(1).nodes.properties.temporal.keys()) + == expected_names_no_static_at_1 + ) + assert ( + sorted(g.at(1).nodes.out_neighbours.properties.temporal.keys()) + == expected_names_no_static_at_1 + ) - # testing has_property - assert "prop 4" in g.node(1).properties - assert "prop 4" in g.nodes.properties - assert "prop 4" in g.nodes.out_neighbours.properties + # testing has_property + assert "prop 4" in g.node(1).properties + assert "prop 4" in g.nodes.properties + assert "prop 4" in g.nodes.out_neighbours.properties - assert "prop 2" in g.node(1).properties - assert "prop 2" in g.nodes.properties - assert "prop 2" in g.nodes.out_neighbours.properties + assert "prop 2" in g.node(1).properties + assert "prop 2" in g.nodes.properties + assert "prop 2" in g.nodes.out_neighbours.properties - assert "prop 5" not in g.node(1).properties - assert "prop 5" not in g.nodes.properties - assert "prop 5" not in g.nodes.out_neighbours.properties + assert "prop 5" not in g.node(1).properties + assert "prop 5" not in g.nodes.properties + assert "prop 5" not in g.nodes.out_neighbours.properties - assert ( - "prop 2" not in g.at(1).node(1).properties.as_dict() - ) # TODO should be as dict? - # assert "prop 2" not in g.at(1).nodes.properties #TODO Do these make sense any more? - # assert "prop 2" not in g.at(1).nodes.out_neighbours.properties #TODO Do these make sense any more? + assert ( + "prop 2" not in g.at(1).node(1).properties.as_dict() + ) # TODO should be as dict? + # assert "prop 2" not in g.at(1).nodes.properties #TODO Do these make sense any more? + # assert "prop 2" not in g.at(1).nodes.out_neighbours.properties #TODO Do these make sense any more? - assert "static prop" in g.node(1).metadata - assert "static prop" in g.nodes.metadata - assert "static prop" in g.nodes.out_neighbours.metadata + assert "static prop" in g.node(1).metadata + assert "static prop" in g.nodes.metadata + assert "static prop" in g.nodes.out_neighbours.metadata - assert "static prop" in g.at(1).node(1).metadata - assert "static prop" in g.at(1).nodes.metadata - assert "static prop" in g.at(1).nodes.out_neighbours.metadata + assert "static prop" in g.at(1).node(1).metadata + assert "static prop" in g.at(1).nodes.metadata + assert "static prop" in g.at(1).nodes.out_neighbours.metadata - assert "static prop" not in g.at(1).node(1).properties.temporal - assert "static prop" not in g.at(1).nodes.properties.temporal - assert "static prop" not in g.at(1).nodes.out_neighbours.properties.temporal + assert "static prop" not in g.at(1).node(1).properties.temporal + assert "static prop" not in g.at(1).nodes.properties.temporal + assert "static prop" not in g.at(1).nodes.out_neighbours.properties.temporal - assert "static prop" in g.node(1).metadata - assert "static prop" in g.nodes.metadata - assert "static prop" in g.nodes.out_neighbours.metadata + assert "static prop" in g.node(1).metadata + assert "static prop" in g.nodes.metadata + assert "static prop" in g.nodes.out_neighbours.metadata - assert "prop 2" not in g.node(1).metadata - assert "prop 2" not in g.nodes.metadata - assert "prop 2" not in g.nodes.out_neighbours.metadata + assert "prop 2" not in g.node(1).metadata + assert "prop 2" not in g.nodes.metadata + assert "prop 2" not in g.nodes.out_neighbours.metadata - assert "static prop" in g.at(1).node(1).metadata - assert "static prop" in g.at(1).nodes.metadata - assert "static prop" in g.at(1).nodes.out_neighbours.metadata + assert "static prop" in g.at(1).node(1).metadata + assert "static prop" in g.at(1).nodes.metadata + assert "static prop" in g.at(1).nodes.out_neighbours.metadata - check(g) def test_decimal_property(): @@ -954,179 +900,170 @@ def test_decimal_property(): }, ) - @with_disk_graph - def check(g): - assert g.node(2).properties.temporal.get("d_max").items() == [ + assert g.node(2).properties.temporal.get("d_max").items() == [ + (2, Decimal("9999999999999999999999999999.999999999")), + (3, Decimal("9999999999999999999999999999.999999999")), + ] + + assert g.edge(1, 1).properties.temporal.get("d_min").items() == [ + (0, Decimal("-9999999999999999999999999999.999999999")), + (3, Decimal("-9999999999999999999999999999.999999999")), + ] + + assert g.node(2).properties.temporal == { + "d_max": [ (2, Decimal("9999999999999999999999999999.999999999")), (3, Decimal("9999999999999999999999999999.999999999")), - ] - - assert g.edge(1, 1).properties.temporal.get("d_min").items() == [ - (0, Decimal("-9999999999999999999999999999.999999999")), + ], + "d_min": [ + (2, Decimal("-9999999999999999999999999999.999999999")), (3, Decimal("-9999999999999999999999999999.999999999")), - ] - - assert g.node(2).properties.temporal == { - "d_max": [ - (2, Decimal("9999999999999999999999999999.999999999")), - (3, Decimal("9999999999999999999999999999.999999999")), - ], - "d_min": [ - (2, Decimal("-9999999999999999999999999999.999999999")), - (3, Decimal("-9999999999999999999999999999.999999999")), - ], - "d_int": [ - (2, Decimal("9999999999999999999999999999")), - (3, Decimal("9999999999999999999999999999")), - ], - "d_small_neg": [(2, Decimal("-0.1")), (3, Decimal("-0.1"))], - "d_small_pos": [(2, Decimal("0.1")), (3, Decimal("0.1"))], - "d_medium": [ - (2, Decimal("104447267751554560119.000000000")), - (3, Decimal("104447267751554560119.000000000")), - ], - } + ], + "d_int": [ + (2, Decimal("9999999999999999999999999999")), + (3, Decimal("9999999999999999999999999999")), + ], + "d_small_neg": [(2, Decimal("-0.1")), (3, Decimal("-0.1"))], + "d_small_pos": [(2, Decimal("0.1")), (3, Decimal("0.1"))], + "d_medium": [ + (2, Decimal("104447267751554560119.000000000")), + (3, Decimal("104447267751554560119.000000000")), + ], + } - assert g.node(2).properties.temporal.get("d_small_pos").sum() == Decimal("0.2") - assert g.node(2).properties.temporal.get("d_small_neg").sum() == Decimal("-0.2") - assert g.node(2).properties.temporal.get("d_medium").sum() == Decimal( - "208894535503109120238.000000000" - ) + assert g.node(2).properties.temporal.get("d_small_pos").sum() == Decimal("0.2") + assert g.node(2).properties.temporal.get("d_small_neg").sum() == Decimal("-0.2") + assert g.node(2).properties.temporal.get("d_medium").sum() == Decimal( + "208894535503109120238.000000000" + ) - check(g) def test_edge_properties(): g = create_graph_edge_properties() - @with_disk_graph - def check_temporal_properties(g): - # testing property history - assert g.edge(1, 2).properties.temporal.get("prop 1") == [(1, 1), (2, 2)] - assert g.edge(1, 2).properties.temporal.get("prop 2") == [(2, 0.6), (3, 0.9)] - assert g.edge(1, 2).properties.temporal.get("prop 3") == [ - (1, "hi"), - (3, "hello"), - ] - assert g.edge(1, 2).properties.temporal.get("prop 4") == [ - (1, True), - (2, False), - (3, True), - ] - assert g.edge(1, 2).properties.temporal.get("undefined") is None - assert g.at(1).edge(1, 2).properties.temporal.get("prop 4") == [(1, True)] - assert g.at(1).edge(1, 2).properties.temporal.get("static prop") is None - - assert g.at(1).edge(1, 2).properties.temporal == { - "prop 4": [(1, True)], - "prop 1": [(1, 1)], - "prop 3": [(1, "hi")], - } + # testing property history + assert g.edge(1, 2).properties.temporal.get("prop 1") == [(1, 1), (2, 2)] + assert g.edge(1, 2).properties.temporal.get("prop 2") == [(2, 0.6), (3, 0.9)] + assert g.edge(1, 2).properties.temporal.get("prop 3") == [ + (1, "hi"), + (3, "hello"), + ] + assert g.edge(1, 2).properties.temporal.get("prop 4") == [ + (1, True), + (2, False), + (3, True), + ] + assert g.edge(1, 2).properties.temporal.get("undefined") is None + assert g.at(1).edge(1, 2).properties.temporal.get("prop 4") == [(1, True)] + assert g.at(1).edge(1, 2).properties.temporal.get("static prop") is None + + assert g.at(1).edge(1, 2).properties.temporal == { + "prop 4": [(1, True)], + "prop 1": [(1, 1)], + "prop 3": [(1, "hi")], + } - assert g.edge(1, 2).properties.temporal.latest() == { - "prop 2": 0.9, - "prop 3": "hello", - "prop 1": 2, - "prop 4": True, - } + assert g.edge(1, 2).properties.temporal.latest() == { + "prop 2": 0.9, + "prop 3": "hello", + "prop 1": 2, + "prop 4": True, + } - # testing property histories - assert g.edge(1, 2).properties.temporal == { - "prop 3": [(1, "hi"), (3, "hello")], - "prop 1": [(1, 1), (2, 2)], - "prop 4": [(1, True), (2, False), (3, True)], - "prop 2": [(2, 0.6), (3, 0.9)], - } + # testing property histories + assert g.edge(1, 2).properties.temporal == { + "prop 3": [(1, "hi"), (3, "hello")], + "prop 1": [(1, 1), (2, 2)], + "prop 4": [(1, True), (2, False), (3, True)], + "prop 2": [(2, 0.6), (3, 0.9)], + } - assert g.at(2).edge(1, 2).properties.temporal == { - "prop 2": [(2, 0.6)], - "prop 4": [(2, False)], - "prop 1": [(2, 2)], - } + assert g.at(2).edge(1, 2).properties.temporal == { + "prop 2": [(2, 0.6)], + "prop 4": [(2, False)], + "prop 1": [(2, 2)], + } - assert g.after(2).edge(1, 2).properties.temporal == { - "prop 2": [(3, 0.9)], - "prop 3": [(3, "hello")], - "prop 4": [(3, True)], - } + assert g.after(2).edge(1, 2).properties.temporal == { + "prop 2": [(3, 0.9)], + "prop 3": [(3, "hello")], + "prop 4": [(3, True)], + } - assert sorted(g.edge(1, 2).properties.temporal.keys()) == sorted( - ["prop 4", "prop 1", "prop 2", "prop 3"] - ) + assert sorted(g.edge(1, 2).properties.temporal.keys()) == sorted( + ["prop 4", "prop 1", "prop 2", "prop 3"] + ) - assert sorted(g.at(1).edge(1, 2).properties.temporal.keys()) == [ - "prop 1", - "prop 3", - "prop 4", - ] - - # find all edges that match properties - [e] = g.at(1).find_edges({"prop 1": 1, "prop 3": "hi"}) - assert e == g.edge(1, 2) - - empty_list = g.at(1).find_edges({"prop 1": 1, "prop 3": "hx"}) - assert len(empty_list) == 0 - - # testing has_property - assert "prop 4" in g.edge(1, 2).properties - assert "prop 2" in g.edge(1, 2).properties - assert "prop 5" not in g.edge(1, 2).properties - assert ( - "prop 2" not in g.at(1).edge(1, 2).properties.as_dict() - ) # TODO should be as dict? - Properties now returns all keys here - - def check(g): - assert g.at(1).edge(1, 2).metadata.get("static prop") == 123 - assert g.before(101).edge(1, 2).metadata.get("static prop") == 123 - assert g.edge(1, 2).metadata.get("static prop") == 123 - assert g.edge(1, 2).metadata.get("prop 4") is None - - # testing property - assert g.edge(1, 2).metadata.get("static prop") == 123 - assert g.edge(1, 2).metadata["static prop"] == 123 - assert g.edge(1, 2).properties.temporal.get("static prop") is None - assert g.edge(1, 2).properties.temporal.get("prop 1").value() == 2 - assert g.at(2).edge(1, 2).properties.get("prop 2") == 0.6 - assert g.at(1).edge(1, 2).properties.get("prop 2") is None - - # testing properties - assert g.edge(1, 2).properties == { - "prop 2": 0.9, - "prop 3": "hello", - "prop 1": 2, - "prop 4": True, - } + assert sorted(g.at(1).edge(1, 2).properties.temporal.keys()) == [ + "prop 1", + "prop 3", + "prop 4", + ] - assert g.before(3).edge(1, 2).properties == { - "prop 1": 2, - "prop 4": False, - "prop 2": 0.6, - "prop 3": "hi", - } + # find all edges that match properties + [e] = g.at(1).find_edges({"prop 1": 1, "prop 3": "hi"}) + assert e == g.edge(1, 2) - assert g.edge(1, 2).metadata == { - "static prop": 123, - } + empty_list = g.at(1).find_edges({"prop 1": 1, "prop 3": "hx"}) + assert len(empty_list) == 0 - assert g.before(3).edge(1, 2).metadata == { - "static prop": 123, - } + # testing has_property + assert "prop 4" in g.edge(1, 2).properties + assert "prop 2" in g.edge(1, 2).properties + assert "prop 5" not in g.edge(1, 2).properties + assert ( + "prop 2" not in g.at(1).edge(1, 2).properties.as_dict() + ) # TODO should be as dict? - Properties now returns all keys here + + assert g.at(1).edge(1, 2).metadata.get("static prop") == 123 + assert g.before(101).edge(1, 2).metadata.get("static prop") == 123 + assert g.edge(1, 2).metadata.get("static prop") == 123 + assert g.edge(1, 2).metadata.get("prop 4") is None - # testing property names - assert sorted(g.edge(1, 2).properties.keys()) == sorted( - ["prop 4", "prop 1", "prop 2", "prop 3"] - ) + # testing property + assert g.edge(1, 2).metadata.get("static prop") == 123 + assert g.edge(1, 2).metadata["static prop"] == 123 + assert g.edge(1, 2).properties.temporal.get("static prop") is None + assert g.edge(1, 2).properties.temporal.get("prop 1").value() == 2 + assert g.at(2).edge(1, 2).properties.get("prop 2") == 0.6 + assert g.at(1).edge(1, 2).properties.get("prop 2") is None + + # testing properties + assert g.edge(1, 2).properties == { + "prop 2": 0.9, + "prop 3": "hello", + "prop 1": 2, + "prop 4": True, + } + + assert g.before(3).edge(1, 2).properties == { + "prop 1": 2, + "prop 4": False, + "prop 2": 0.6, + "prop 3": "hi", + } + + assert g.edge(1, 2).metadata == { + "static prop": 123, + } + + assert g.before(3).edge(1, 2).metadata == { + "static prop": 123, + } - assert "static prop" in g.edge(1, 2).metadata - assert "static prop" in g.at(1).edge(1, 2).metadata - assert "static prop" not in g.at(1).edge(1, 2).properties.temporal + # testing property names + assert sorted(g.edge(1, 2).properties.keys()) == sorted( + ["prop 4", "prop 1", "prop 2", "prop 3"] + ) - assert "static prop" in g.edge(1, 2).metadata - assert "prop 2" not in g.edge(1, 2).metadata - assert "static prop" in g.at(1).edge(1, 2).metadata + assert "static prop" in g.edge(1, 2).metadata + assert "static prop" in g.at(1).edge(1, 2).metadata + assert "static prop" not in g.at(1).edge(1, 2).properties.temporal - check_temporal_properties(g) - check(g) + assert "static prop" in g.edge(1, 2).metadata + assert "prop 2" not in g.edge(1, 2).metadata + assert "static prop" in g.at(1).edge(1, 2).metadata def create_graph_edge_properties(): @@ -1181,16 +1118,13 @@ def test_map_and_list_property(): def test_exploded_edge_time(): g = graph_loader.lotr_graph() - @with_disk_graph - def check(g): - e = g.edge("Frodo", "Gandalf") - his = e.history.t.collect() - exploded_his = [] - for ee in e.explode(): - exploded_his.append(ee.time) - check_arr(his, exploded_his) + e = g.edge("Frodo", "Gandalf") + his = e.history.t.collect() + exploded_his = [] + for ee in e.explode(): + exploded_his.append(ee.time) + check_arr(his, exploded_his) - check(g) def test_algorithms(): @@ -1200,53 +1134,47 @@ def test_algorithms(): g.add_edge(2, 2, 3, {"prop1": 1}) g.add_edge(3, 3, 1, {"prop1": 1}) - @with_disk_graph - def check(g): - view = g.window(0, 4) - triangles = algorithms.local_triangle_count(view, 1) - average_degree = algorithms.average_degree(view) - max_out_degree = algorithms.max_out_degree(view) - max_in_degree = algorithms.max_in_degree(view) - min_out_degree = algorithms.min_out_degree(view) - min_in_degree = algorithms.min_in_degree(view) - graph_density = algorithms.directed_graph_density(view) - clustering_coefficient = algorithms.local_clustering_coefficient(view, 1) - - assert triangles == 1 - assert average_degree == 2.0 - assert graph_density == 0.5 - assert max_out_degree == 1 - assert max_in_degree == 1 - assert min_out_degree == 1 - assert min_in_degree == 1 - assert clustering_coefficient == 1.0 - - lotr_clustering_coefficient = algorithms.local_clustering_coefficient( - lotr_graph, "Frodo" - ) - lotr_local_triangle_count = algorithms.local_triangle_count(lotr_graph, "Frodo") - assert lotr_clustering_coefficient == 0.1984313725490196 - assert lotr_local_triangle_count == 253 + view = g.window(0, 4) + triangles = algorithms.local_triangle_count(view, 1) + average_degree = algorithms.average_degree(view) + max_out_degree = algorithms.max_out_degree(view) + max_in_degree = algorithms.max_in_degree(view) + min_out_degree = algorithms.min_out_degree(view) + min_in_degree = algorithms.min_in_degree(view) + graph_density = algorithms.directed_graph_density(view) + clustering_coefficient = algorithms.local_clustering_coefficient(view, 1) + + assert triangles == 1 + assert average_degree == 2.0 + assert graph_density == 0.5 + assert max_out_degree == 1 + assert max_in_degree == 1 + assert min_out_degree == 1 + assert min_in_degree == 1 + assert clustering_coefficient == 1.0 + + lotr_clustering_coefficient = algorithms.local_clustering_coefficient( + lotr_graph, "Frodo" + ) + lotr_local_triangle_count = algorithms.local_triangle_count(lotr_graph, "Frodo") + assert lotr_clustering_coefficient == 0.1984313725490196 + assert lotr_local_triangle_count == 253 - check(g) def test_graph_time_api(): g = create_graph() - @with_disk_graph - def check(g): - earliest_time = g.earliest_time.t - latest_time = g.latest_time.t - assert len(list(g.rolling(1))) == latest_time - earliest_time + 1 - assert len(list(g.expanding(2))) == math.ceil( - (latest_time + 1 - earliest_time) / 2 - ) + earliest_time = g.earliest_time.t + latest_time = g.latest_time.t + assert len(list(g.rolling(1))) == latest_time - earliest_time + 1 + assert len(list(g.expanding(2))) == math.ceil( + (latest_time + 1 - earliest_time) / 2 + ) - w = g.window(2, 6) - assert len(list(w.rolling(window=10, step=3))) == 2 + w = g.window(2, 6) + assert len(list(w.rolling(window=10, step=3))) == 2 - check(g) def test_save_missing_dir(): @@ -1267,63 +1195,57 @@ def test_save_load_graph(): g.add_edge(5, 12, 13, {"prop1": 1321, "prop2": 9.8, "prop3": "test"}) g.add_edge(6, 13, 11, {"prop1": 645, "prop2": 9.8, "prop3": "test"}) - @with_disk_graph - def check(g): - view = g.window(0, 10) - assert g.has_node(13) - assert view.node(13).in_degree() == 1 - assert view.node(13).out_degree() == 1 - assert view.node(13).degree() == 2 - - triangles = algorithms.local_triangle_count( - view, 13 - ) # How many triangles is 13 involved in - assert triangles == 1 - - v = view.node(11) - assert v.properties.temporal == { - "type": [(1, "wallet")], - "balance": [(1, 99.5)], - } + view = g.window(0, 10) + assert g.has_node(13) + assert view.node(13).in_degree() == 1 + assert view.node(13).out_degree() == 1 + assert view.node(13).degree() == 2 + + triangles = algorithms.local_triangle_count( + view, 13 + ) # How many triangles is 13 involved in + assert triangles == 1 + + v = view.node(11) + assert v.properties.temporal == { + "type": [(1, "wallet")], + "balance": [(1, 99.5)], + } - with tempfile.TemporaryDirectory() as tmpdirname: - graph_abs_path = os.path.join(tmpdirname, "test_graph.bin") - g.save_to_file(graph_abs_path) + with tempfile.TemporaryDirectory() as tmpdirname: + graph_abs_path = os.path.join(tmpdirname, "test_graph.bin") + g.save_to_file(graph_abs_path) - del g + del g - g = Graph.load_from_file(graph_abs_path) + g = Graph.load_from_file(graph_abs_path) - view = g.window(0, 10) - assert g.has_node(13) - assert view.node(13).in_degree() == 1 - del view - del g + view = g.window(0, 10) + assert g.has_node(13) + assert view.node(13).in_degree() == 1 + del view + del g - check(g) def test_graph_at(): g = create_graph() - @with_disk_graph - def check(g): - view = g.at(1) - assert view.node(1).degree() == 2 - assert view.node(2).degree() == 1 + view = g.at(1) + assert view.node(1).degree() == 2 + assert view.node(2).degree() == 1 - view = g.before(3) - assert view.node(1).degree() == 3 - assert view.node(3).degree() == 1 + view = g.before(3) + assert view.node(1).degree() == 3 + assert view.node(3).degree() == 1 - view = g.before(8) - assert view.node(3).degree() == 2 + view = g.before(8) + assert view.node(3).degree() == 2 - view = g.after(6) - assert view.node(2).degree() == 1 - assert view.node(3).degree() == 1 + view = g.after(6) + assert view.node(2).degree() == 1 + assert view.node(3).degree() == 1 - check(g) def test_add_node_string_multiple_types_fail(): @@ -1409,15 +1331,12 @@ def test_all_neighbours_window(): g.add_edge(3, 3, 2, {}) g.add_edge(4, 2, 4, {}) - @with_disk_graph - def check(g): - view = g.before(3) - v = view.node(2) - assert list(v.window(0, 2).in_neighbours.id) == [1] - assert list(v.window(0, 2).out_neighbours.id) == [3] - assert list(v.window(0, 2).neighbours.id) == [1, 3] + view = g.before(3) + v = view.node(2) + assert list(v.window(0, 2).in_neighbours.id) == [1] + assert list(v.window(0, 2).out_neighbours.id) == [3] + assert list(v.window(0, 2).neighbours.id) == [1, 3] - check(g) def test_all_degrees_window(): @@ -1430,21 +1349,18 @@ def test_all_degrees_window(): g.add_edge(4, 2, 4, {}) g.add_edge(5, 2, 1, {}) - @with_disk_graph - def check(g): - view = g.before(5) - v = view.node(2) - assert v.window(0, 4).in_degree() == 3 - assert v.after(1).in_degree() == 2 - assert v.before(3).in_degree() == 2 - assert v.window(0, 4).out_degree() == 1 - assert v.after(1).out_degree() == 1 - assert v.before(end=3).out_degree() == 1 - assert v.window(0, 4).degree() == 3 - assert v.after(1).degree() == 2 - assert v.before(end=3).degree() == 2 + view = g.before(5) + v = view.node(2) + assert v.window(0, 4).in_degree() == 3 + assert v.after(1).in_degree() == 2 + assert v.before(3).in_degree() == 2 + assert v.window(0, 4).out_degree() == 1 + assert v.after(1).out_degree() == 1 + assert v.before(end=3).out_degree() == 1 + assert v.window(0, 4).degree() == 3 + assert v.after(1).degree() == 2 + assert v.before(end=3).degree() == 2 - check(g) def test_all_edge_window(): @@ -1457,37 +1373,34 @@ def test_all_edge_window(): g.add_edge(4, 2, 4, {}) g.add_edge(5, 2, 1, {}) - @with_disk_graph - def check(g): - view = g.before(5) - v = view.node(2) - assert sorted(v.window(0, 4).in_edges.src.id) == [1, 3, 4] - assert sorted(v.before(end=4).in_edges.src.id) == [1, 3, 4] - assert sorted(v.after(start=1).in_edges.src.id) == [3, 4] - assert sorted(v.window(0, 4).out_edges.dst.id) == [3] - assert sorted(v.before(end=3).out_edges.dst.id) == [3] - assert sorted(v.after(start=1).out_edges.dst.id) == [4] - assert sorted((e.src.id, e.dst.id) for e in v.window(0, 4).edges) == [ - (1, 2), - (2, 3), - (3, 2), - (4, 2), - ] - assert sorted((e.src.id, e.dst.id) for e in v.before(end=4).edges) == [ - (1, 2), - (2, 3), - (3, 2), - (4, 2), - ] - assert sorted((e.src.id, e.dst.id) for e in v.after(start=0).edges) == [ - (1, 2), - (2, 3), - (2, 4), - (3, 2), - (4, 2), - ] - - check(g) + view = g.before(5) + v = view.node(2) + assert sorted(v.window(0, 4).in_edges.src.id) == [1, 3, 4] + assert sorted(v.before(end=4).in_edges.src.id) == [1, 3, 4] + assert sorted(v.after(start=1).in_edges.src.id) == [3, 4] + assert sorted(v.window(0, 4).out_edges.dst.id) == [3] + assert sorted(v.before(end=3).out_edges.dst.id) == [3] + assert sorted(v.after(start=1).out_edges.dst.id) == [4] + assert sorted((e.src.id, e.dst.id) for e in v.window(0, 4).edges) == [ + (1, 2), + (2, 3), + (3, 2), + (4, 2), + ] + assert sorted((e.src.id, e.dst.id) for e in v.before(end=4).edges) == [ + (1, 2), + (2, 3), + (3, 2), + (4, 2), + ] + assert sorted((e.src.id, e.dst.id) for e in v.after(start=0).edges) == [ + (1, 2), + (2, 3), + (2, 4), + (3, 2), + (4, 2), + ] + def test_static_prop_change(): @@ -1533,11 +1446,8 @@ def test_triplet_count(): g.add_edge(0, 2, 3, {}) g.add_edge(0, 3, 1, {}) - @with_disk_graph - def check(g): - assert algorithms.triplet_count(g) == 3 + assert algorithms.triplet_count(g) == 3 - check(g) def test_global_clustering_coeffficient(): @@ -1550,12 +1460,9 @@ def test_global_clustering_coeffficient(): g.add_edge(0, 4, 1, {}) g.add_edge(0, 5, 2, {}) - @with_disk_graph - def check(g): - assert algorithms.global_clustering_coefficient(g) == 0.5454545454545454 - assert algorithms.global_clustering_coefficient(g.at(0)) == 0.5454545454545454 + assert algorithms.global_clustering_coefficient(g) == 0.5454545454545454 + assert algorithms.global_clustering_coefficient(g.at(0)) == 0.5454545454545454 - check(g) def test_edge_time_apis(): @@ -1566,38 +1473,35 @@ def test_edge_time_apis(): g.add_edge(3, 4, 5, {"prop2": 12}) g.add_edge(4, 1, 5, {"prop2": 13}) - @with_disk_graph - def check(g): - v = g.node(1) - e = g.edge(1, 2) + v = g.node(1) + e = g.edge(1, 2) - for e in e.expanding(1): - assert e.src.name == "1" - assert e.dst.name == "2" + for e in e.expanding(1): + assert e.src.name == "1" + assert e.dst.name == "2" - ls = [] - for e in v.edges: - ls.append(e.src.name) - ls.append(e.dst.name) + ls = [] + for e in v.edges: + ls.append(e.src.name) + ls.append(e.dst.name) - assert ls == ["1", "2", "1", "5"] + assert ls == ["1", "2", "1", "5"] - v = g.node(2) - ls = [] - for e in v.in_edges: - ls.append(e.src.name) - ls.append(e.dst.name) + v = g.node(2) + ls = [] + for e in v.in_edges: + ls.append(e.src.name) + ls.append(e.dst.name) - assert ls == ["1", "2"] + assert ls == ["1", "2"] - ls = [] - for e in v.out_edges: - ls.append(e.src.name) - ls.append(e.dst.name) + ls = [] + for e in v.out_edges: + ls.append(e.src.name) + ls.append(e.dst.name) - assert ls == ["2", "4"] + assert ls == ["2", "4"] - check(g) def test_edge_earliest_latest_time(): @@ -1609,21 +1513,18 @@ def test_edge_earliest_latest_time(): g.add_edge(1, 1, 3, {}) g.add_edge(2, 1, 3, {}) - @with_disk_graph - def check(g): - assert g.edge(1, 2).earliest_time == 0 - assert g.edge(1, 2).latest_time == 2 + assert g.edge(1, 2).earliest_time == 0 + assert g.edge(1, 2).latest_time == 2 - assert list(g.node(1).edges.earliest_time) == [0, 0] - assert list(g.node(1).edges.latest_time) == [2, 2] - assert list(g.node(1).at(1).edges.earliest_time) == [1, 1] - assert list(g.node(1).before(1).edges.earliest_time) == [0, 0] - assert list(g.node(1).after(1).edges.earliest_time) == [2, 2] - assert list(g.node(1).at(1).edges.latest_time) == [1, 1] - assert list(g.node(1).before(1).edges.latest_time) == [0, 0] - assert list(g.node(1).after(1).edges.latest_time) == [2, 2] + assert list(g.node(1).edges.earliest_time) == [0, 0] + assert list(g.node(1).edges.latest_time) == [2, 2] + assert list(g.node(1).at(1).edges.earliest_time) == [1, 1] + assert list(g.node(1).before(1).edges.earliest_time) == [0, 0] + assert list(g.node(1).after(1).edges.earliest_time) == [2, 2] + assert list(g.node(1).at(1).edges.latest_time) == [1, 1] + assert list(g.node(1).before(1).edges.latest_time) == [0, 0] + assert list(g.node(1).after(1).edges.latest_time) == [2, 2] - check(g) def test_node_earliest_time(): @@ -1632,21 +1533,19 @@ def test_node_earliest_time(): g.add_node(1, 1, {}) g.add_node(2, 1, {}) - # @with_disk_graph FIXME: need special handling for nodes additions from Graph - def check(g): - view = g.at(1) - assert view.node(1).earliest_time == 1 - assert view.node(1).latest_time == 1 + # FIXME: need special handling for nodes additions from Graph + view = g.at(1) + assert view.node(1).earliest_time == 1 + assert view.node(1).latest_time == 1 - view = g.after(0) - assert view.node(1).earliest_time == 1 - assert view.node(1).latest_time == 2 + view = g.after(0) + assert view.node(1).earliest_time == 1 + assert view.node(1).latest_time == 2 - view = g.before(3) - assert view.node(1).earliest_time == 0 - assert view.node(1).latest_time == 2 + view = g.before(3) + assert view.node(1).earliest_time == 0 + assert view.node(1).latest_time == 2 - check(g) def test_node_history(): @@ -1658,13 +1557,11 @@ def test_node_history(): g.add_node(4, 1, {}) g.add_node(8, 1, {}) - # @with_disk_graph FIXME: need special handling for nodes additions from Graph - def check(g): - check_arr(g.node(1).history.t.collect(), [1, 2, 3, 4, 8]) - view = g.window(1, 8) - check_arr(view.node(1).history.t.collect(), [1, 2, 3, 4]) + # FIXME: need special handling for nodes additions from Graph + check_arr(g.node(1).history.t.collect(), [1, 2, 3, 4, 8]) + view = g.window(1, 8) + check_arr(view.node(1).history.t.collect(), [1, 2, 3, 4]) - check(g) g = Graph() @@ -1673,13 +1570,11 @@ def check(g): g.add_node(7, "Lord Farquaad", {}) g.add_node(8, "Lord Farquaad", {}) - # @with_disk_graph FIXME: need special handling for nodes additions from Graph - def check(g): - check_arr(g.node("Lord Farquaad").history.t.collect(), [4, 6, 7, 8]) - view = g.window(1, 8) - check_arr(view.node("Lord Farquaad").history.t.collect(), [4, 6, 7]) + # FIXME: need special handling for nodes additions from Graph + check_arr(g.node("Lord Farquaad").history.t.collect(), [4, 6, 7, 8]) + view = g.window(1, 8) + check_arr(view.node("Lord Farquaad").history.t.collect(), [4, 6, 7]) - check(g) def test_edge_history(): @@ -1721,92 +1616,89 @@ def test_edge_history(): def test_lotr_edge_history(): g = graph_loader.lotr_graph() - @with_disk_graph - def check(g): - check_arr( - g.edge("Frodo", "Gandalf").history.t.collect(), - [ - 329, - 555, - 861, - 1056, - 1130, - 1160, - 1234, - 1241, - 1390, - 1417, - 1656, - 1741, - 1783, - 1785, - 1792, - 1804, - 1809, - 1999, - 2056, - 2254, - 2925, - 2999, - 3703, - 3914, - 4910, - 5620, - 5775, - 6381, - 6531, - 6578, - 6661, - 6757, - 7041, - 7356, - 8183, - 8190, - 8276, - 8459, - 8598, - 8871, - 9098, - 9343, - 9903, - 11189, - 11192, - 11279, - 11365, - 14364, - 21551, - 21706, - 23212, - 26958, - 27060, - 29024, - 30173, - 30737, - 30744, - 31023, - 31052, - 31054, - 31103, - 31445, - 32656, - ], - ) - check_arr( - g.before(1000).edge("Frodo", "Gandalf").history.t.collect(), [329, 555, 861] - ) - check_arr( - g.edge("Frodo", "Gandalf").before(1000).history.t.collect(), [329, 555, 861] - ) - check_arr( - g.window(100, 1000).edge("Frodo", "Gandalf").history.t.collect(), - [329, 555, 861], - ) - check_arr( - g.edge("Frodo", "Gandalf").window(100, 1000).history.t.collect(), - [329, 555, 861], - ) + check_arr( + g.edge("Frodo", "Gandalf").history.t.collect(), + [ + 329, + 555, + 861, + 1056, + 1130, + 1160, + 1234, + 1241, + 1390, + 1417, + 1656, + 1741, + 1783, + 1785, + 1792, + 1804, + 1809, + 1999, + 2056, + 2254, + 2925, + 2999, + 3703, + 3914, + 4910, + 5620, + 5775, + 6381, + 6531, + 6578, + 6661, + 6757, + 7041, + 7356, + 8183, + 8190, + 8276, + 8459, + 8598, + 8871, + 9098, + 9343, + 9903, + 11189, + 11192, + 11279, + 11365, + 14364, + 21551, + 21706, + 23212, + 26958, + 27060, + 29024, + 30173, + 30737, + 30744, + 31023, + 31052, + 31054, + 31103, + 31445, + 32656, + ], + ) + check_arr( + g.before(1000).edge("Frodo", "Gandalf").history.t.collect(), [329, 555, 861] + ) + check_arr( + g.edge("Frodo", "Gandalf").before(1000).history.t.collect(), [329, 555, 861] + ) + check_arr( + g.window(100, 1000).edge("Frodo", "Gandalf").history.t.collect(), + [329, 555, 861], + ) + check_arr( + g.edge("Frodo", "Gandalf").window(100, 1000).history.t.collect(), + [329, 555, 861], + ) - check(g) # def test_generic_taint_loader(): @@ -1837,34 +1729,32 @@ def test_layer(): g.add_edge(0, 1, 6, layer="layer1") g.add_edge(0, 1, 4, layer="layer2") - # @with_disk_graph FIXME: no multi layer support - def check(g): - assert g.default_layer().count_edges() == 1 - assert g.layers(["layer1"]).count_edges() == 3 - assert g.layers(["layer2"]).count_edges() == 1 - - assert g.exclude_layers(["layer1"]).count_edges() == 2 - assert g.exclude_layer("layer1").count_edges() == 2 - assert g.exclude_layers(["layer1", "layer2"]).count_edges() == 1 - assert g.exclude_layer("layer2").count_edges() == 4 - - with pytest.raises( - Exception, - match=re.escape( - """Invalid layer: test_layer. Valid layers: ["_default", "layer1", "layer2"]""" - ), - ): - g.layers(["test_layer"]) + # FIXME: no multi layer support + assert g.default_layer().count_edges() == 1 + assert g.layers(["layer1"]).count_edges() == 3 + assert g.layers(["layer2"]).count_edges() == 1 - with pytest.raises( - Exception, - match=re.escape( - """Invalid layer: test_layer. Valid layers: ["_default", "layer1", "layer2"]""" - ), - ): - g.edge(1, 2).layers(["test_layer"]) + assert g.exclude_layers(["layer1"]).count_edges() == 2 + assert g.exclude_layer("layer1").count_edges() == 2 + assert g.exclude_layers(["layer1", "layer2"]).count_edges() == 1 + assert g.exclude_layer("layer2").count_edges() == 4 + + with pytest.raises( + Exception, + match=re.escape( + """Invalid layer: test_layer. Valid layers: ["_default", "layer1", "layer2"]""" + ), + ): + g.layers(["test_layer"]) + + with pytest.raises( + Exception, + match=re.escape( + """Invalid layer: test_layer. Valid layers: ["_default", "layer1", "layer2"]""" + ), + ): + g.edge(1, 2).layers(["test_layer"]) - check(g) def test_layer_node(): @@ -1890,19 +1780,17 @@ def test_rolling_as_iterable(): g.add_node(1, 1) g.add_node(4, 4) - # @with_disk_graph FIXME: need special handling for nodes additions from Graph - def check(g): - rolling = g.rolling(1) + # FIXME: need special handling for nodes additions from Graph + rolling = g.rolling(1) - # a normal operation is reusing the object returned by rolling twice, to get both results and an index. - # So the following should work fine: - n_nodes = [w.count_nodes() for w in rolling] - time_index = [w.start for w in rolling] + # a normal operation is reusing the object returned by rolling twice, to get both results and an index. + # So the following should work fine: + n_nodes = [w.count_nodes() for w in rolling] + time_index = [w.start for w in rolling] - assert n_nodes == [1, 0, 0, 1] - assert time_index == [1, 2, 3, 4] + assert n_nodes == [1, 0, 0, 1] + assert time_index == [1, 2, 3, 4] - check(g) def test_layer_name(): @@ -1961,37 +1849,34 @@ def test_time(): g.add_edge(0, 0, 2) g.add_edge(1, 0, 2) - @with_disk_graph - def check(g): - error_msg = ( - "The time function is only available once an edge has been exploded via .explode(). " - "You may want to retrieve the history for this edge via .history(), or the earliest/latest time via earliest_time or latest_time" - ) - # with pytest.raises(Exception) as e: - # g.edges.time() - # assert str(e.value) == error_msg + error_msg = ( + "The time function is only available once an edge has been exploded via .explode(). " + "You may want to retrieve the history for this edge via .history(), or the earliest/latest time via earliest_time or latest_time" + ) + # with pytest.raises(Exception) as e: + # g.edges.time() + # assert str(e.value) == error_msg - assert list(g.edges.explode().time) == [0, 0, 1] + assert list(g.edges.explode().time) == [0, 0, 1] - # with pytest.raises(Exception) as e: - # g.edge(0, 2).time() - # assert str(e.value) == error_msg + # with pytest.raises(Exception) as e: + # g.edge(0, 2).time() + # assert str(e.value) == error_msg - assert list(g.edge(0, 2).explode().time) == [0, 1] + assert list(g.edge(0, 2).explode().time) == [0, 1] - # with pytest.raises(Exception) as e: - # g.nodes.neighbours.edges.time() - # assert str(e.value) == error_msg + # with pytest.raises(Exception) as e: + # g.nodes.neighbours.edges.time() + # assert str(e.value) == error_msg - assert [ - list(iterator) for iterator in g.nodes.neighbours.edges.explode().time - ] == [ - [0, 0, 1], - [0, 0, 1], - [0, 0, 1], - ] + assert [ + list(iterator) for iterator in g.nodes.neighbours.edges.explode().time + ] == [ + [0, 0, 1], + [0, 0, 1], + [0, 0, 1], + ] - check(g) def test_window_size(): @@ -1999,54 +1884,46 @@ def test_window_size(): g.add_node(1, 1) g.add_node(4, 4) - @with_disk_graph - def check(g): - assert g.window_size is None - assert g.window(1, 5).window_size == 4 + assert g.window_size is None + assert g.window(1, 5).window_size == 4 - check(g) def test_time_index(): g = Graph() - @with_disk_graph - def check(g): - w = g.window("2020-01-01", "2020-01-03") - rolling = w.rolling("1 day") - time_index = rolling.time_index() - assert list(time_index) == [ - datetime(2020, 1, 1, 23, 59, 59, 999000, tzinfo=utc), - datetime(2020, 1, 2, 23, 59, 59, 999000, tzinfo=utc), - ] + w = g.window("2020-01-01", "2020-01-03") + rolling = w.rolling("1 day") + time_index = rolling.time_index() + assert list(time_index) == [ + datetime(2020, 1, 1, 23, 59, 59, 999000, tzinfo=utc), + datetime(2020, 1, 2, 23, 59, 59, 999000, tzinfo=utc), + ] - w = g.window(1, 3) - rolling = w.rolling(1) - time_index = rolling.time_index() - assert list(time_index) == [1, 2] + w = g.window(1, 3) + rolling = w.rolling(1) + time_index = rolling.time_index() + assert list(time_index) == [1, 2] - w = g.window(0, 100) - rolling = w.rolling(50) - time_index = rolling.time_index(center=True) - assert list(time_index) == [25, 75] + w = g.window(0, 100) + rolling = w.rolling(50) + time_index = rolling.time_index(center=True) + assert list(time_index) == [25, 75] - check(g) def test_datetime_props(): g = Graph() - # @with_disk_graph FIXME support for DateTime properties - def check(g): - dt1 = datetime(2020, 1, 1, 23, 59, 59, 999000) - g.add_node(0, 0, {"time": dt1}) - assert g.node(0).properties.get("time") == dt1 + # FIXME: DateTime properties + dt1 = datetime(2020, 1, 1, 23, 59, 59, 999000) + g.add_node(0, 0, {"time": dt1}) + assert g.node(0).properties.get("time") == dt1 - dt2 = datetime(2020, 1, 1, 23, 59, 59, 999999) - g.add_node(0, 1, {"time": dt2}) - assert g.node(1).properties.get("time") == dt2 + dt2 = datetime(2020, 1, 1, 23, 59, 59, 999999) + g.add_node(0, 1, {"time": dt2}) + assert g.node(1).properties.get("time") == dt2 - check(g) def test_date_time(): @@ -2057,23 +1934,20 @@ def test_date_time(): g.add_edge("2014-02-04", 1, 4) g.add_edge("2014-02-05", 1, 2) - @with_disk_graph - def check(g): - assert g.earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert g.latest_time == datetime(2014, 2, 5, 0, 0, tzinfo=utc) + assert g.earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert g.latest_time == datetime(2014, 2, 5, 0, 0, tzinfo=utc) - e = g.edge(1, 3) - exploded_edges = [] - for edge in e.explode(): - exploded_edges.append(edge.time.dt) - assert exploded_edges == [datetime(2014, 2, 3, tzinfo=utc)] - assert g.edge(1, 2).earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert g.edge(1, 2).latest_time == datetime(2014, 2, 5, 0, 0, tzinfo=utc) + e = g.edge(1, 3) + exploded_edges = [] + for edge in e.explode(): + exploded_edges.append(edge.time.dt) + assert exploded_edges == [datetime(2014, 2, 3, tzinfo=utc)] + assert g.edge(1, 2).earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert g.edge(1, 2).latest_time == datetime(2014, 2, 5, 0, 0, tzinfo=utc) - assert g.node(1).earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert g.node(1).latest_time == datetime(2014, 2, 5, 0, 0, tzinfo=utc) + assert g.node(1).earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert g.node(1).latest_time == datetime(2014, 2, 5, 0, 0, tzinfo=utc) - check(g) def test_float_ts(): @@ -2101,30 +1975,27 @@ def test_date_time_window(): g.add_edge("2014-02-05", 1, 2) g.add_edge("2014-02-06", 1, 2) - @with_disk_graph - def check(g): - view = g.window("2014-02-02", "2014-02-04") - view2 = g.window("2014-02-02", "2014-02-05") + view = g.window("2014-02-02", "2014-02-04") + view2 = g.window("2014-02-02", "2014-02-05") - assert view.start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert view.end == datetime(2014, 2, 4, 0, 0, tzinfo=utc) + assert view.start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert view.end == datetime(2014, 2, 4, 0, 0, tzinfo=utc) - assert view.earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert view.latest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) + assert view.earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert view.latest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) - assert view2.edge(1, 2).start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert view2.edge(1, 2).end == datetime(2014, 2, 5, 0, 0, tzinfo=utc) + assert view2.edge(1, 2).start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert view2.edge(1, 2).end == datetime(2014, 2, 5, 0, 0, tzinfo=utc) - assert view.node(1).earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert view.node(1).latest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) + assert view.node(1).earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert view.node(1).latest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) - e = view.edge(1, 2) - exploded_edges = [] - for edge in e.explode(): - exploded_edges.append(edge.time.dt) - assert exploded_edges == [datetime(2014, 2, 2, tzinfo=utc)] + e = view.edge(1, 2) + exploded_edges = [] + for edge in e.explode(): + exploded_edges.append(edge.time.dt) + assert exploded_edges == [datetime(2014, 2, 2, tzinfo=utc)] - check(g) def test_datetime_add_node(): @@ -2135,24 +2006,22 @@ def test_datetime_add_node(): g.add_node(datetime(2014, 2, 5), 4) g.add_node(datetime(2014, 2, 6), 5) - # @with_disk_graph FIXME: need special handling for nodes additions from Graph - def check(g): - view = g.window("2014-02-02", "2014-02-04") - view2 = g.window("2014-02-02", "2014-02-05") + # FIXME: need special handling for nodes additions from Graph + view = g.window("2014-02-02", "2014-02-04") + view2 = g.window("2014-02-02", "2014-02-05") - assert view.start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert view.end == datetime(2014, 2, 4, 0, 0, tzinfo=utc) + assert view.start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert view.end == datetime(2014, 2, 4, 0, 0, tzinfo=utc) - assert view2.earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert view2.latest_time == datetime(2014, 2, 4, 0, 0, tzinfo=utc) + assert view2.earliest_time == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert view2.latest_time == datetime(2014, 2, 4, 0, 0, tzinfo=utc) - assert view2.node(1).start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) - assert view2.node(1).end == datetime(2014, 2, 5, 0, 0, tzinfo=utc) + assert view2.node(1).start == datetime(2014, 2, 2, 0, 0, tzinfo=utc) + assert view2.node(1).end == datetime(2014, 2, 5, 0, 0, tzinfo=utc) - assert view.node(2).earliest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) - assert view.node(2).latest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) + assert view.node(2).earliest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) + assert view.node(2).latest_time == datetime(2014, 2, 3, 0, 0, tzinfo=utc) - check(g) def test_equivalent_nodes_edges_and_sets(): @@ -2164,76 +2033,64 @@ def test_equivalent_nodes_edges_and_sets(): g.add_edge(1, 1, 2) g.add_edge(1, 2, 3) - @with_disk_graph - def check(g): - assert g.node(1) == g.node(1) - assert list(g.node(1).neighbours)[0] == list(g.node(3).neighbours)[0] - assert set(g.node(1).neighbours) == set(g.node(3).neighbours) - assert set(g.node(1).out_edges) == set(g.node(2).in_edges) + assert g.node(1) == g.node(1) + assert list(g.node(1).neighbours)[0] == list(g.node(3).neighbours)[0] + assert set(g.node(1).neighbours) == set(g.node(3).neighbours) + assert set(g.node(1).out_edges) == set(g.node(2).in_edges) - assert g.edge(1, 1) == g.edge(1, 1) + assert g.edge(1, 1) == g.edge(1, 1) - check(g) def test_subgraph(): g = create_graph() - @with_disk_graph - def check(g): - empty_graph = g.subgraph([]) - assert empty_graph.nodes.collect() == [] + empty_graph = g.subgraph([]) + assert empty_graph.nodes.collect() == [] - node1 = g.node(1) - subgraph = g.subgraph([node1]) - assert subgraph.nodes.collect() == [node1] + node1 = g.node(1) + subgraph = g.subgraph([node1]) + assert subgraph.nodes.collect() == [node1] - subgraph_from_str = g.subgraph(["1"]) - assert subgraph_from_str.nodes.collect() == [node1] + subgraph_from_str = g.subgraph(["1"]) + assert subgraph_from_str.nodes.collect() == [node1] - subgraph_from_int = g.subgraph([1]) - assert subgraph_from_int.nodes.collect() == [node1] + subgraph_from_int = g.subgraph([1]) + assert subgraph_from_int.nodes.collect() == [node1] - mg = subgraph.materialize() - assert mg.nodes.collect()[0].properties["type"] == "wallet" - assert mg.nodes.collect()[0].name == "1" + mg = subgraph.materialize() + assert mg.nodes.collect()[0].properties["type"] == "wallet" + assert mg.nodes.collect()[0].name == "1" - props = {"prop 4": 11, "prop 5": "world", "prop 6": False} - mg.add_properties(1, props) + props = {"prop 4": 11, "prop 5": "world", "prop 6": False} + mg.add_properties(1, props) - props = {"prop 1": 1, "prop 2": "hi", "prop 3": True} - mg.add_metadata(props) - x = mg.properties.keys() - x.sort() - assert x == ["prop 4", "prop 5", "prop 6"] - x = mg.metadata.keys() - x.sort() - assert x == ["prop 1", "prop 2", "prop 3"] + props = {"prop 1": 1, "prop 2": "hi", "prop 3": True} + mg.add_metadata(props) + x = mg.properties.keys() + x.sort() + assert x == ["prop 4", "prop 5", "prop 6"] + x = mg.metadata.keys() + x.sort() + assert x == ["prop 1", "prop 2", "prop 3"] - check(g) def test_exclude_nodes(): g = create_graph() - @with_disk_graph - def check(g): - exclude_nodes = g.exclude_nodes([1]) - assert sorted(exclude_nodes.nodes.id.collect()) == [2, 3] + exclude_nodes = g.exclude_nodes([1]) + assert sorted(exclude_nodes.nodes.id.collect()) == [2, 3] - check(g) def test_nbr(): g = create_graph() - @with_disk_graph - def check(g): - r = [e.nbr.name for e in g.edges] - r.sort() - assert r == ["1", "1", "2", "2", "3"] + r = [e.nbr.name for e in g.edges] + r.sort() + assert r == ["1", "1", "2", "2", "3"] - check(g) def test_materialize_graph(): @@ -2255,92 +2112,88 @@ def test_materialize_graph(): g.add_metadata(sprop) assert g.metadata == sprop - # @with_disk_graph FIXME: need special handling for nodes additions from Graph, support for metadata on edges - def check(g): - def check_g_inner(mg): - assert mg.node(1).properties.get("type") == "wallet" - assert mg.node(4).metadata == {"abc": "xyz"} - assert mg.node(4).metadata.get("abc") == "xyz" - check_arr(mg.node(1).history.t.collect(), [-1, 0, 0, 1, 1, 2]) - check_arr(mg.node(4).history.t.collect(), [6, 8]) - assert len(mg.nodes.id.collect()) == 4 - assert set(mg.nodes.id.collect()) == {1, 3, 2, 4} - assert set(mg.edges.id) == {(1, 1), (1, 2), (1, 3), (2, 1), (3, 2), (2, 4)} - assert len(g.nodes.id.collect()) == len(mg.nodes.id.collect()) - assert set(g.nodes.id.collect()) == set(mg.nodes.id.collect()) - assert set(g.edges.id) == set(mg.edges.id) - assert mg.node(1).metadata == {} - assert mg.node(4).metadata == {"abc": "xyz"} - assert g.edge(1, 2).id == (1, 2) - assert mg.edge(1, 2).id == (1, 2) - assert mg.has_edge(1, 2) - assert g.has_edge(1, 2) - assert mg.has_edge(2, 1) - assert g.has_edge(2, 1) - - check_g_inner(g) - - mg = g.materialize() - - check_g_inner(mg) - - sprop2 = {"sprop 3": 11, "sprop 4": 10} - mg.add_metadata(sprop2) - sprop.update(sprop2) - assert mg.metadata == sprop - - check(g) + # FIXME: need special handling for nodes additions from Graph, support for metadata on edges + def check_g_inner(mg): + assert mg.node(1).properties.get("type") == "wallet" + assert mg.node(4).metadata == {"abc": "xyz"} + assert mg.node(4).metadata.get("abc") == "xyz" + check_arr(mg.node(1).history.t.collect(), [-1, 0, 0, 1, 1, 2]) + check_arr(mg.node(4).history.t.collect(), [6, 8]) + assert len(mg.nodes.id.collect()) == 4 + assert set(mg.nodes.id.collect()) == {1, 3, 2, 4} + assert set(mg.edges.id) == {(1, 1), (1, 2), (1, 3), (2, 1), (3, 2), (2, 4)} + assert len(g.nodes.id.collect()) == len(mg.nodes.id.collect()) + assert set(g.nodes.id.collect()) == set(mg.nodes.id.collect()) + assert set(g.edges.id) == set(mg.edges.id) + assert mg.node(1).metadata == {} + assert mg.node(4).metadata == {"abc": "xyz"} + assert g.edge(1, 2).id == (1, 2) + assert mg.edge(1, 2).id == (1, 2) + assert mg.has_edge(1, 2) + assert g.has_edge(1, 2) + assert mg.has_edge(2, 1) + assert g.has_edge(2, 1) + + check_g_inner(g) + + mg = g.materialize() + + check_g_inner(mg) + + sprop2 = {"sprop 3": 11, "sprop 4": 10} + mg.add_metadata(sprop2) + sprop.update(sprop2) + assert mg.metadata == sprop + def test_deletions(): g = create_graph_with_deletions() - # @with_disk_graph FIXME: add support for edge deletions - def check(g): - deleted_edge = g.edge(edges[0][1], edges[0][2]) - for e in edges: - assert g.at(e[0]).has_edge(e[1], e[2]) - assert g.after(e[0]).has_edge(e[1], e[2]) + # FIXME: add support for edge deletions + deleted_edge = g.edge(edges[0][1], edges[0][2]) + for e in edges: + assert g.at(e[0]).has_edge(e[1], e[2]) + assert g.after(e[0]).has_edge(e[1], e[2]) - for e in edges[:-1]: - # last update is an existing edge - assert not g.before(e[0]).has_edge(e[1], e[2]) + for e in edges[:-1]: + # last update is an existing edge + assert not g.before(e[0]).has_edge(e[1], e[2]) - # deleted at window start - assert deleted_edge.window(10, 20).is_deleted() - assert not deleted_edge.window(10, 20).is_valid() - assert deleted_edge.window(10, 20).earliest_time.is_none() - assert deleted_edge.window(10, 20).latest_time.is_none() + # deleted at window start + assert deleted_edge.window(10, 20).is_deleted() + assert not deleted_edge.window(10, 20).is_valid() + assert deleted_edge.window(10, 20).earliest_time.is_none() + assert deleted_edge.window(10, 20).latest_time.is_none() - # deleted before window start - assert deleted_edge.window(15, 20).is_deleted() - assert not deleted_edge.window(15, 20).is_valid() - assert deleted_edge.window(15, 20).earliest_time.is_none() - assert deleted_edge.window(15, 20).latest_time.is_none() + # deleted before window start + assert deleted_edge.window(15, 20).is_deleted() + assert not deleted_edge.window(15, 20).is_valid() + assert deleted_edge.window(15, 20).earliest_time.is_none() + assert deleted_edge.window(15, 20).latest_time.is_none() - # deleted in window - assert deleted_edge.window(5, 20).is_deleted() - assert not deleted_edge.window(5, 20).is_valid() - assert deleted_edge.window(5, 20).earliest_time == 5 - assert deleted_edge.window(5, 20).latest_time == 10 + # deleted in window + assert deleted_edge.window(5, 20).is_deleted() + assert not deleted_edge.window(5, 20).is_valid() + assert deleted_edge.window(5, 20).earliest_time == 5 + assert deleted_edge.window(5, 20).latest_time == 10 - # check deleted edge is gone at 10 - assert not g.after(start=10).has_edge(edges[0][1], edges[0][2]) - assert not g.at(10).has_edge(edges[0][1], edges[0][2]) - assert g.before(10).has_edge(edges[0][1], edges[0][2]) + # check deleted edge is gone at 10 + assert not g.after(start=10).has_edge(edges[0][1], edges[0][2]) + assert not g.at(10).has_edge(edges[0][1], edges[0][2]) + assert g.before(10).has_edge(edges[0][1], edges[0][2]) - # check not deleted edges are still there - for e in edges[1:]: - assert g.after(start=10).has_edge(e[1], e[2]) + # check not deleted edges are still there + for e in edges[1:]: + assert g.after(start=10).has_edge(e[1], e[2]) - assert list(deleted_edge.explode().latest_time) == [10] - assert list(deleted_edge.explode().earliest_time) == [edges[0][0]] + assert list(deleted_edge.explode().latest_time) == [10] + assert list(deleted_edge.explode().earliest_time) == [edges[0][0]] - # check rolling and expanding behaviour - assert not list(g.before(1).node(1).after(1).rolling(1)) - assert not list(g.after(0).edge(1, 1).before(1).expanding(1)) + # check rolling and expanding behaviour + assert not list(g.before(1).node(1).after(1).rolling(1)) + assert not list(g.after(0).edge(1, 1).before(1).expanding(1)) - check(g) def test_edge_layer(): @@ -2348,26 +2201,22 @@ def test_edge_layer(): g.add_edge(1, 1, 2, layer="layer 1").add_metadata({"test_prop": "test_val"}) g.add_edge(1, 2, 3, layer="layer 2").add_metadata({"test_prop": "test_val 2"}) - # @with_disk_graph #FIXME: add support for edge metadata - def check(g): - assert g.edges.metadata.get("test_prop") == [ - {"layer 1": "test_val"}, - {"layer 2": "test_val 2"}, - ] + # FIXME: add support for edge metadata + assert g.edges.metadata.get("test_prop") == [ + {"layer 1": "test_val"}, + {"layer 2": "test_val 2"}, + ] - check(g) def test_layers_earliest_time(): g = Graph() e = g.add_edge(1, 1, 2, layer="test") - # @with_disk_graph # FIXME: add support for multiple layers - def check(g): - e = g.edge(1, 2) - assert e.earliest_time == 1 + # FIXME: add support for multiple layers + e = g.edge(1, 2) + assert e.earliest_time == 1 - check(g) def test_edge_explode_layers(): @@ -2377,33 +2226,31 @@ def test_edge_explode_layers(): g.add_edge(1, 2, 1, {"layer": 1}, layer="1") g.add_edge(1, 2, 1, {"layer": 2}, layer="2") - # @with_disk_graph # FIXME: add edge multi layer support - def check(g): - layered_edges = g.edge(1, 2).explode_layers() - e_layers = [ee.layer_names for ee in layered_edges] - e_layer_prop = [[str(ee.properties["layer"])] for ee in layered_edges] - assert e_layers == e_layer_prop - - nested_layered_edges = g.nodes.out_edges.explode_layers() - e_layers = [[ee.layer_names for ee in edges] for edges in nested_layered_edges] - e_layer_prop = [ - [[str(ee.properties["layer"])] for ee in layered_edges] - for layered_edges in nested_layered_edges - ] - assert e_layers == e_layer_prop - - nested_layered_edges = g.nodes.out_neighbours.out_edges.explode_layers() - e_layers = [ - [ee.layer_names for ee in layered_edges] - for layered_edges in nested_layered_edges - ] - e_layer_prop = [ - [[str(ee.properties["layer"])] for ee in layered_edges] - for layered_edges in nested_layered_edges - ] - assert e_layers == e_layer_prop - - check(g) + # FIXME: add edge multi layer support + layered_edges = g.edge(1, 2).explode_layers() + e_layers = [ee.layer_names for ee in layered_edges] + e_layer_prop = [[str(ee.properties["layer"])] for ee in layered_edges] + assert e_layers == e_layer_prop + + nested_layered_edges = g.nodes.out_edges.explode_layers() + e_layers = [[ee.layer_names for ee in edges] for edges in nested_layered_edges] + e_layer_prop = [ + [[str(ee.properties["layer"])] for ee in layered_edges] + for layered_edges in nested_layered_edges + ] + assert e_layers == e_layer_prop + + nested_layered_edges = g.nodes.out_neighbours.out_edges.explode_layers() + e_layers = [ + [ee.layer_names for ee in layered_edges] + for layered_edges in nested_layered_edges + ] + e_layer_prop = [ + [[str(ee.properties["layer"])] for ee in layered_edges] + for layered_edges in nested_layered_edges + ] + assert e_layers == e_layer_prop + def test_starend_edges(): @@ -2412,41 +2259,38 @@ def test_starend_edges(): g.add_edge(2, 1, 2) g.add_edge(3, 1, 2) - @with_disk_graph - def check(g): - old_latest_time_way = [] - for e in g.edges: - old_latest_time_way.append(e.latest_time) - - assert old_latest_time_way == list(g.edges.latest_time) - - old_earliest_time_way = [] - for e in g.edges: - old_earliest_time_way.append(e.earliest_time) - assert old_earliest_time_way == list(g.edges.earliest_time) - - old_latest_time_nested_way = [] - old_earliest_time_nested_way = [] - for edges in g.nodes.edges: - for edge in edges: - old_latest_time_nested_way.append(edge.latest_time) - old_earliest_time_nested_way.append(edge.earliest_time) - - assert old_latest_time_nested_way == [ - item for sublist in g.nodes.edges.latest_time.collect() for item in sublist - ] - assert old_earliest_time_nested_way == [ - item - for sublist in g.nodes.edges.earliest_time.collect() - for item in sublist - ] - gw = g.window(1, 3) - assert gw.edges.start == gw.start - assert gw.edges.end == gw.end - assert gw.nodes.edges.start == gw.start - assert gw.nodes.edges.end == gw.end - - check(g) + old_latest_time_way = [] + for e in g.edges: + old_latest_time_way.append(e.latest_time) + + assert old_latest_time_way == list(g.edges.latest_time) + + old_earliest_time_way = [] + for e in g.edges: + old_earliest_time_way.append(e.earliest_time) + assert old_earliest_time_way == list(g.edges.earliest_time) + + old_latest_time_nested_way = [] + old_earliest_time_nested_way = [] + for edges in g.nodes.edges: + for edge in edges: + old_latest_time_nested_way.append(edge.latest_time) + old_earliest_time_nested_way.append(edge.earliest_time) + + assert old_latest_time_nested_way == [ + item for sublist in g.nodes.edges.latest_time.collect() for item in sublist + ] + assert old_earliest_time_nested_way == [ + item + for sublist in g.nodes.edges.earliest_time.collect() + for item in sublist + ] + gw = g.window(1, 3) + assert gw.edges.start == gw.start + assert gw.edges.end == gw.end + assert gw.nodes.edges.start == gw.start + assert gw.nodes.edges.end == gw.end + def test_date_time_edges(): @@ -2457,25 +2301,22 @@ def test_date_time_edges(): g.add_edge("2014-02-04", 1, 4) g.add_edge("2014-02-05", 1, 2) - @with_disk_graph - def check(g): - old_date_way = [] - for edges in g.nodes.edges.explode(): - for edge in edges: - old_date_way.append(edge.time.dt) + old_date_way = [] + for edges in g.nodes.edges.explode(): + for edge in edges: + old_date_way.append(edge.time.dt) - assert old_date_way == [ - item - for sublist in g.nodes.edges.explode().time.dt.collect() - for item in sublist - ] - gw = g.window("2014-02-02", "2014-02-05") - assert gw.edges.start == gw.start - assert gw.edges.end == gw.end - assert gw.nodes.edges.start == gw.start - assert gw.nodes.edges.end == gw.end + assert old_date_way == [ + item + for sublist in g.nodes.edges.explode().time.dt.collect() + for item in sublist + ] + gw = g.window("2014-02-02", "2014-02-05") + assert gw.edges.start == gw.start + assert gw.edges.end == gw.end + assert gw.nodes.edges.start == gw.start + assert gw.nodes.edges.end == gw.end - check(g) def test_layer_edges(): @@ -2485,19 +2326,16 @@ def test_layer_edges(): g.add_edge(3, 1, 2, layer="layer 3") layer_names = ["layer 1", "layer 2", "layer 3"] - @with_disk_graph - def check(g): - old_layer_way = [] - for e in g.edges: - old_layer_way.append(e.layer("layer 1")) - assert old_layer_way == list(g.edges.layer("layer 1")) + old_layer_way = [] + for e in g.edges: + old_layer_way.append(e.layer("layer 1")) + assert old_layer_way == list(g.edges.layer("layer 1")) - old_layers_way = [] - for e in g.edges: - old_layers_way.append(e.layers(layer_names)) - assert old_layers_way == list(g.edges.layers(layer_names)) + old_layers_way = [] + for e in g.edges: + old_layers_way.append(e.layers(layer_names)) + assert old_layers_way == list(g.edges.layers(layer_names)) - check(g) def test_window_edges(): @@ -2507,29 +2345,23 @@ def test_window_edges(): g.add_edge(3, 1, 2) g.add_edge(4, 1, 2) - @with_disk_graph - def check(g): - old_window_way = [] - for e in g.edges: - old_window_way.append(e.window(2, 3)) - assert old_window_way == list(g.edges.window(2, 3)) + old_window_way = [] + for e in g.edges: + old_window_way.append(e.window(2, 3)) + assert old_window_way == list(g.edges.window(2, 3)) - check(g) def test_weird_windows(): g = Graph() g.add_edge(1, 1, 2) - @with_disk_graph - def check(g): - with pytest.raises( - Exception, - match="'ddd' is not a valid datetime. Valid formats are RFC3339, RFC2822, %Y-%m-%d, %Y-%m-%dT%H:%M:%S%.3f, %Y-%m-%dT%H:%M:%S%, %Y-%m-%d %H:%M:%S%.3f and %Y-%m-%d %H:%M:%S%", - ): - g.window("ddd", "aaa") + with pytest.raises( + Exception, + match="'ddd' is not a valid datetime. Valid formats are RFC3339, RFC2822, %Y-%m-%d, %Y-%m-%dT%H:%M:%S%.3f, %Y-%m-%dT%H:%M:%S%, %Y-%m-%d %H:%M:%S%.3f and %Y-%m-%d %H:%M:%S%", + ): + g.window("ddd", "aaa") - check(g) def test_at_edges(): @@ -2539,14 +2371,11 @@ def test_at_edges(): g.add_edge(3, 1, 2) g.add_edge(4, 1, 2) - @with_disk_graph - def check(g): - old_at_way = [] - for e in g.edges: - old_at_way.append(e.at(2)) - assert old_at_way == list(g.edges.at(2)) + old_at_way = [] + for e in g.edges: + old_at_way.append(e.at(2)) + assert old_at_way == list(g.edges.at(2)) - check(g) def test_snapshot(): @@ -2577,43 +2406,40 @@ def test_one_hop_filter_reset(): g.add_edge(2, 3, 4, {"layer": 2}, "2") g.add_edge(0, 1, 3, {"layer": 2}, "2") - @with_disk_graph - def check(g): - v = g.node(1) + v = g.node(1) - # filtering resets on neighbours - out_out = v.at(0).layer("1").out_neighbours.layer("2").out_neighbours.id - assert out_out == [3] + # filtering resets on neighbours + out_out = v.at(0).layer("1").out_neighbours.layer("2").out_neighbours.id + assert out_out == [3] - out_out = ( - v.at(0) - .layer("1") - .out_neighbours.layer("2") - .out_edges.properties.get("layer") - ) - assert out_out == [2] + out_out = ( + v.at(0) + .layer("1") + .out_neighbours.layer("2") + .out_edges.properties.get("layer") + ) + assert out_out == [2] - out_out = v.at(0).out_neighbours.after(1).out_neighbours.id - assert out_out == [4] + out_out = v.at(0).out_neighbours.after(1).out_neighbours.id + assert out_out == [4] - earliest_time = v.at(0).out_neighbours.after(1).out_edges.earliest_time.min() - assert earliest_time == 2 + earliest_time = v.at(0).out_neighbours.after(1).out_edges.earliest_time.min() + assert earliest_time == 2 - # filter applies to edges - layers = set(v.layer("1").edges.explode_layers().layer_name) - assert layers == {"1"} + # filter applies to edges + layers = set(v.layer("1").edges.explode_layers().layer_name) + assert layers == {"1"} - # dst and src on edge reset the filter - degrees = v.at(0).layer("1").edges.dst.out_degree() - assert degrees == [1] + # dst and src on edge reset the filter + degrees = v.at(0).layer("1").edges.dst.out_degree() + assert degrees == [1] - # graph level filter is preserved - out_out_2 = ( - g.at(0).node(1).layer("1").out_neighbours.layer("2").out_neighbours.id - ) - assert len(out_out_2) == 0 + # graph level filter is preserved + out_out_2 = ( + g.at(0).node(1).layer("1").out_neighbours.layer("2").out_neighbours.id + ) + assert len(out_out_2) == 0 - check(g) def test_type_filter(): @@ -2800,39 +2626,36 @@ def test_time_exploded_edges(): g.add_edge(3, 1, 2) g.add_edge(4, 1, 3) - @with_disk_graph - def check(g): - time = [] - for e in g.edges.explode(): - time.append(e.time) - assert list(g.edges.explode().time) == time - - date_time = [] - for e in g.edges.explode(): - date_time.append(e.time.dt) - assert list(g.edges.explode().time.dt) == date_time - - time_nested = [] - for edges in g.nodes.edges.explode(): - for edge in edges: - time_nested.append(edge.time) - assert [ - item - for sublist in g.nodes.edges.explode().time.collect() - for item in sublist - ] == time_nested - - date_time_nested = [] - for edges in g.nodes.edges.explode(): - for edge in edges: - date_time_nested.append(edge.time.dt) - assert [ - item - for sublist in g.nodes.edges.explode().time.dt.collect() - for item in sublist - ] == date_time_nested - - check(g) + time = [] + for e in g.edges.explode(): + time.append(e.time) + assert list(g.edges.explode().time) == time + + date_time = [] + for e in g.edges.explode(): + date_time.append(e.time.dt) + assert list(g.edges.explode().time.dt) == date_time + + time_nested = [] + for edges in g.nodes.edges.explode(): + for edge in edges: + time_nested.append(edge.time) + assert [ + item + for sublist in g.nodes.edges.explode().time.collect() + for item in sublist + ] == time_nested + + date_time_nested = [] + for edges in g.nodes.edges.explode(): + for edge in edges: + date_time_nested.append(edge.time.dt) + assert [ + item + for sublist in g.nodes.edges.explode().time.dt.collect() + for item in sublist + ] == date_time_nested + def test_leading_zeroes_ids(): @@ -2859,13 +2682,10 @@ def test_node_types(): a = g.add_node(0, "A", None, None) b = g.add_node(0, "B", None, "BTYPE") - @with_disk_graph - def check(g): - assert a.node_type == None - assert b.node_type == "BTYPE" - assert set(g.nodes.node_type) == {None, "BTYPE"} + assert a.node_type == None + assert b.node_type == "BTYPE" + assert set(g.nodes.node_type) == {None, "BTYPE"} - check(g) def test_node_types_change(): @@ -2915,12 +2735,9 @@ def test_NaN_NaT_as_properties(): g = Graph() g.load_nodes(time="time", id="id", data=df, properties=["floats"]) - @with_disk_graph - def check(g): - assert g.node(103).properties.temporal.get("floats").items() == [(30, 2.4)] - assert g.node(101).properties.temporal.get("floats") == [] + assert g.node(103).properties.temporal.get("floats").items() == [(30, 2.4)] + assert g.node(101).properties.temporal.get("floats") == [] - check(g) def test_unique_temporal_properties(): @@ -2941,38 +2758,36 @@ def test_unique_temporal_properties(): g.add_node(2, 3, {"name": "avatar2"}) g.add_node(3, 3, {"name": "avatar2"}) - # @with_disk_graph # FIXME need disk graph to support temporal properties - def check(g): - assert g.edge(1, 2).properties.temporal.get("status").ordered_dedupe(True) == [ - (2, "open"), - (3, "review"), - (4, "open"), - (10, "in-progress"), - ] - assert g.edge(1, 2).properties.temporal.get("status").ordered_dedupe(False) == [ - (1, "open"), - (3, "review"), - (4, "open"), - (5, "in-progress"), - ] - assert g.properties.temporal.get("name").ordered_dedupe(True) == [ - (1, "tarzan"), - (3, "tarzan2"), - ] - assert g.properties.temporal.get("name").ordered_dedupe(False) == [ - (1, "tarzan"), - (2, "tarzan2"), - ] - assert g.node(3).properties.temporal.get("name").ordered_dedupe(True) == [ - (1, "avatar1"), - (3, "avatar2"), - ] - assert g.node(3).properties.temporal.get("name").ordered_dedupe(False) == [ - (1, "avatar1"), - (2, "avatar2"), - ] - - check(g) + # FIXME: temporal properties + assert g.edge(1, 2).properties.temporal.get("status").ordered_dedupe(True) == [ + (2, "open"), + (3, "review"), + (4, "open"), + (10, "in-progress"), + ] + assert g.edge(1, 2).properties.temporal.get("status").ordered_dedupe(False) == [ + (1, "open"), + (3, "review"), + (4, "open"), + (5, "in-progress"), + ] + assert g.properties.temporal.get("name").ordered_dedupe(True) == [ + (1, "tarzan"), + (3, "tarzan2"), + ] + assert g.properties.temporal.get("name").ordered_dedupe(False) == [ + (1, "tarzan"), + (2, "tarzan2"), + ] + assert g.node(3).properties.temporal.get("name").ordered_dedupe(True) == [ + (1, "avatar1"), + (3, "avatar2"), + ] + assert g.node(3).properties.temporal.get("name").ordered_dedupe(False) == [ + (1, "avatar1"), + (2, "avatar2"), + ] + g.add_node(4, 3, {"i64": 1}) g.add_node(5, 3, {"i64": 1}) @@ -2993,68 +2808,66 @@ def check(g): g.add_node(18, 3, {"map": {"name": "bob", "value list": [1, 2, 3]}}) g.add_node(19, 3, {"map": {"name": "bob", "value list": [1, 2]}}) - def check(g): - assert list(g.edge(1, 2).properties.temporal.get("status")) == [ - (1, "open"), - (2, "open"), - (3, "review"), - (4, "open"), - (5, "in-progress"), - (10, "in-progress"), - ] - assert sorted(g.edge(1, 2).properties.temporal.get("status").unique()) == [ - "in-progress", - "open", - "review", - ] - assert list(g.properties.temporal.get("name")) == [ - (1, "tarzan"), - (2, "tarzan2"), - (3, "tarzan2"), - ] - assert sorted(g.properties.temporal.get("name").unique()) == [ - "tarzan", - "tarzan2", - ] - assert list(g.node(3).properties.temporal.get("name")) == [ - (1, "avatar1"), - (2, "avatar2"), - (3, "avatar2"), - ] - assert sorted(g.node(3).properties.temporal.get("name").unique()) == [ - "avatar1", - "avatar2", - ] - assert sorted(g.node(3).properties.temporal.get("i64").unique()) == [1, 5] - assert sorted(g.node(3).properties.temporal.get("f64").unique()) == [1.2, 1.3] - assert sorted(g.node(3).properties.temporal.get("bool").unique()) == [ - False, - True, - ] - assert sorted( - list(v) for v in g.node(3).properties.temporal.get("list").unique() - ) == [ - [1, 2, 3], - [2, 3], - ] - assert sorted(g.node(3).properties.temporal.get("date").unique()) == [ - datetime_obj, - datetime_obj2, - ] - actual_list = g.node(3).properties.temporal.get("map").unique() - expected_list = [ - {"name": "bob", "value list": [1, 2]}, - {"name": "bob", "value list": [1, 2, 3]}, - ] - sorted_actual_list = sorted( - actual_list, key=lambda d: (d["name"], tuple(d["value list"])) - ) - sorted_expected_list = sorted( - expected_list, key=lambda d: (d["name"], tuple(d["value list"])) - ) - check_arr(sorted_actual_list, sorted_expected_list) + assert list(g.edge(1, 2).properties.temporal.get("status")) == [ + (1, "open"), + (2, "open"), + (3, "review"), + (4, "open"), + (5, "in-progress"), + (10, "in-progress"), + ] + assert sorted(g.edge(1, 2).properties.temporal.get("status").unique()) == [ + "in-progress", + "open", + "review", + ] + assert list(g.properties.temporal.get("name")) == [ + (1, "tarzan"), + (2, "tarzan2"), + (3, "tarzan2"), + ] + assert sorted(g.properties.temporal.get("name").unique()) == [ + "tarzan", + "tarzan2", + ] + assert list(g.node(3).properties.temporal.get("name")) == [ + (1, "avatar1"), + (2, "avatar2"), + (3, "avatar2"), + ] + assert sorted(g.node(3).properties.temporal.get("name").unique()) == [ + "avatar1", + "avatar2", + ] + assert sorted(g.node(3).properties.temporal.get("i64").unique()) == [1, 5] + assert sorted(g.node(3).properties.temporal.get("f64").unique()) == [1.2, 1.3] + assert sorted(g.node(3).properties.temporal.get("bool").unique()) == [ + False, + True, + ] + assert sorted( + list(v) for v in g.node(3).properties.temporal.get("list").unique() + ) == [ + [1, 2, 3], + [2, 3], + ] + assert sorted(g.node(3).properties.temporal.get("date").unique()) == [ + datetime_obj, + datetime_obj2, + ] + actual_list = g.node(3).properties.temporal.get("map").unique() + expected_list = [ + {"name": "bob", "value list": [1, 2]}, + {"name": "bob", "value list": [1, 2, 3]}, + ] + sorted_actual_list = sorted( + actual_list, key=lambda d: (d["name"], tuple(d["value list"])) + ) + sorted_expected_list = sorted( + expected_list, key=lambda d: (d["name"], tuple(d["value list"])) + ) + check_arr(sorted_actual_list, sorted_expected_list) - check(g) def test_create_node_graph(): diff --git a/python/tests/test_timezone.py b/python/tests/test_timezone.py index c56e54fac5..70cf4bd15e 100644 --- a/python/tests/test_timezone.py +++ b/python/tests/test_timezone.py @@ -31,7 +31,7 @@ def test_datetime_with_timezone(): localized_datetime = timezone.localize(naive_datetime) g.add_node(localized_datetime, 1) - # @with_disk_graph FIXME: need special handling for nodes additions from Graph + # FIXME: need special handling for nodes additions from Graph def check(g): assert g.node(1).history.dt.collect() == results diff --git a/raphtory-api/src/core/entities/mod.rs b/raphtory-api/src/core/entities/mod.rs index 2959371455..7c1e149c74 100644 --- a/raphtory-api/src/core/entities/mod.rs +++ b/raphtory-api/src/core/entities/mod.rs @@ -707,7 +707,7 @@ mod tests { use proptest::{prop_assert, prop_assert_eq, proptest}; #[test] - fn test_elid_layer() { + fn test_elid_layer_proptest() { proptest!(|(eid in 0..=MAX_EID, layer in 0..=usize::MAX)| { let elid = EID(eid).with_layer(LayerId(layer)); prop_assert_eq!(elid.layer(), LayerId(layer)); @@ -721,7 +721,7 @@ mod tests { } #[test] - fn test_elid_deletion() { + fn test_elid_deletion_proptest() { proptest!(|(eid in 0..=MAX_EID, layer in 0..=usize::MAX)| { let elid = EID(eid).with_layer_deletion(LayerId(layer)); prop_assert_eq!(elid.layer(), LayerId(layer)); diff --git a/raphtory-api/src/core/entities/properties/meta.rs b/raphtory-api/src/core/entities/properties/meta.rs index 6113f87596..c84196b3e1 100644 --- a/raphtory-api/src/core/entities/properties/meta.rs +++ b/raphtory-api/src/core/entities/properties/meta.rs @@ -234,11 +234,17 @@ impl Meta { } } +/// Manages the mapping of property names to their IDs and types. #[derive(Default, Debug, Serialize, Deserialize)] pub struct PropMapper { + /// Maps property names to their IDs. id_mapper: DictMapper, - row_size: AtomicUsize, + + /// Property types indexed by property ID. dtypes: Arc>>, + + /// Estimated size in bytes of a single row of properties maintained by this mapper. + row_size: AtomicUsize, } impl Deref for PropMapper { @@ -300,8 +306,10 @@ impl PropMapper { let wrapped_id = self.id_mapper.get_or_create_id(prop); let id = wrapped_id.inner(); let dtype_read = self.dtypes.read_recursive(); + if let Some(old_type) = dtype_read.get(id) { let mut unified = false; + if unify_types(&dtype, old_type, &mut unified).is_ok() { if !unified { // means the types were equal, no change needed @@ -315,11 +323,25 @@ impl PropMapper { }); } } - drop(dtype_read); // drop the read lock and wait for write lock as type did not exist yet + + // Drop the read lock and grab the write lock in order to add the new + // prop type or unify the existing prop type. + drop(dtype_read); + let mut dtype_write = self.dtypes.write(); + match dtype_write.get(id).cloned() { Some(old_type) => { - if let Ok(tpe) = unify_types(&dtype, &old_type, &mut false) { + let mut unified = false; + + if let Ok(tpe) = unify_types(&dtype, &old_type, &mut unified) { + if unified { + // The row size needs to account for the difference in sizes + // between the newly unified type and the old type. + let delta = tpe.est_size() - old_type.est_size(); + self.row_size.fetch_add(delta, atomic::Ordering::Relaxed); + } + dtype_write[id] = tpe; Ok(wrapped_id) } else { @@ -331,10 +353,12 @@ impl PropMapper { } } None => { - // vector not resized yet, resize it and set the dtype and return id + // vector not resized yet; resize it, set the new dtype and return the id. dtype_write.resize(id + 1, PropType::Empty); + self.row_size .fetch_add(dtype.est_size(), atomic::Ordering::Relaxed); + dtype_write[id] = dtype; Ok(wrapped_id) } @@ -371,37 +395,37 @@ impl PropMapper { WriteLockedPropMapper { dict_mapper: self.id_mapper.write(), d_types: self.dtypes.write(), + row_size: &self.row_size, } } } -pub struct LockedPropMapper<'a> { - dict_mapper: LockedDictMapper<'a>, - d_types: RwLockReadGuard<'a, Vec>, -} - +/// Write-locked view of a [`PropMapper`]. pub struct WriteLockedPropMapper<'a> { + /// Maps property names to their IDs. dict_mapper: WriteLockedDictMapper<'a>, + + /// Property types indexed by property ID. d_types: RwLockWriteGuard<'a, Vec>, + + /// Estimated size in bytes of a single row of properties maintained by this mapper. + row_size: &'a AtomicUsize, } impl<'a> WriteLockedPropMapper<'a> { - pub fn get_dtype(&'a self, prop_id: usize) -> Option<&'a PropType> { - self.d_types.get(prop_id) - } + pub fn new_id_and_dtype(&mut self, key: impl Into, dtype: PropType) -> usize { + let id = self.dict_mapper.get_or_create_id(&key.into()); + let dtypes = self.d_types.deref_mut(); - /// Fast check for property type without unifying the types - /// Returns: - /// - `Some(Either::Left(id))` if the property type can be unified - /// - `Some(Either::Right(id))` if the property type is already set and no unification is needed - /// - `None` if the property type is not set - /// - `Err(PropError::PropertyTypeError)` if the property type cannot be unified - pub fn fast_proptype_check( - &mut self, - prop: &str, - dtype: PropType, - ) -> Result>, PropError> { - fast_proptype_check(self.dict_mapper.map(), &self.d_types, prop, dtype) + if dtypes.len() <= id.inner() { + dtypes.resize(id.inner() + 1, PropType::Empty); + } + + self.row_size + .fetch_add(dtype.est_size(), atomic::Ordering::Relaxed); + + dtypes[id.inner()] = dtype; + id.inner() } pub fn set_id_and_dtype(&mut self, key: impl Into, id: usize, dtype: PropType) { @@ -409,6 +433,19 @@ impl<'a> WriteLockedPropMapper<'a> { self.set_dtype(id, dtype); } + pub fn set_dtype(&mut self, id: usize, dtype: PropType) { + let dtypes = self.d_types.deref_mut(); + + if dtypes.len() <= id { + dtypes.resize(id + 1, PropType::Empty); + } + + self.row_size + .fetch_add(dtype.est_size(), atomic::Ordering::Relaxed); + + dtypes[id] = dtype; + } + pub fn set_or_unify_id_and_dtype( &mut self, key: impl Into, @@ -419,19 +456,16 @@ impl<'a> WriteLockedPropMapper<'a> { self.set_or_unify_dtype(id, dtype) } - pub fn set_dtype(&mut self, id: usize, dtype: PropType) { - let dtypes = self.d_types.deref_mut(); - if dtypes.len() <= id { - dtypes.resize(id + 1, PropType::Empty); - } - dtypes[id] = dtype; - } - pub fn set_or_unify_dtype(&mut self, id: usize, dtype: PropType) -> Result<(), PropError> { let dtypes = self.d_types.deref_mut(); + match dtypes.get_mut(id) { None => { dtypes.resize(id + 1, PropType::Empty); + + self.row_size + .fetch_add(dtype.est_size(), atomic::Ordering::Relaxed); + dtypes[id] = dtype; } Some(old_dtype) => { @@ -440,20 +474,34 @@ impl<'a> WriteLockedPropMapper<'a> { *old_dtype = unified_type; } } + Ok(()) } - pub fn new_id_and_dtype(&mut self, key: impl Into, dtype: PropType) -> usize { - let id = self.dict_mapper.get_or_create_id(&key.into()); - let dtypes = self.d_types.deref_mut(); - if dtypes.len() <= id.inner() { - dtypes.resize(id.inner() + 1, PropType::Empty); - } - dtypes[id.inner()] = dtype; - id.inner() + pub fn get_dtype(&'a self, prop_id: usize) -> Option<&'a PropType> { + self.d_types.get(prop_id) + } + + /// Fast check for property type without unifying the types + /// Returns: + /// - `Some(Either::Left(id))` if the property type can be unified + /// - `Some(Either::Right(id))` if the property type is already set and no unification is needed + /// - `None` if the property type is not set + /// - `Err(PropError::PropertyTypeError)` if the property type cannot be unified + pub fn fast_proptype_check( + &mut self, + prop: &str, + dtype: PropType, + ) -> Result>, PropError> { + fast_proptype_check(self.dict_mapper.map(), &self.d_types, prop, dtype) } } +pub struct LockedPropMapper<'a> { + dict_mapper: LockedDictMapper<'a>, + d_types: RwLockReadGuard<'a, Vec>, +} + impl<'a> LockedPropMapper<'a> { pub fn get_id(&self, prop: &str) -> Option { self.dict_mapper.get_id(prop) @@ -597,4 +645,36 @@ mod tests { assert_eq!(prop_mapper.get_dtype(0), Some(PropType::U8)); assert_eq!(prop_mapper.get_dtype(1), Some(PropType::U16)); } + + #[test] + fn test_unify_types_increases_row_size() { + let map_1 = PropType::map([("name", PropType::Str)]); + let map_2 = PropType::map([("location", PropType::Str)]); + + let mut unified = false; + let expected_type = unify_types(&map_1, &map_2, &mut unified).unwrap(); + let expected_delta = expected_type.est_size() - map_1.est_size(); + + assert!(unified); + assert!(expected_delta > 0, "should grow est_size on unify"); + + let prop_mapper = PropMapper::default(); + prop_mapper + .get_or_create_and_validate("attrs", map_1.clone()) + .unwrap(); + + let before = prop_mapper.row_size(); + + assert_eq!(before, map_1.est_size()); + + prop_mapper + .get_or_create_and_validate("attrs", map_2.clone()) + .unwrap(); + + let after = prop_mapper.row_size(); + + assert_eq!(after, before + expected_delta); + assert_eq!(after, expected_type.est_size()); + assert_eq!(prop_mapper.get_dtype(0), Some(expected_type)); + } } diff --git a/raphtory-api/src/core/input/input_node.rs b/raphtory-api/src/core/input/input_node.rs index 9958ab4859..4b8a60f3c1 100644 --- a/raphtory-api/src/core/input/input_node.rs +++ b/raphtory-api/src/core/input/input_node.rs @@ -98,14 +98,14 @@ mod test { } #[test] - fn test_u64_string_works() { + fn test_u64_string_works_proptest() { proptest!(|(n in any::())| { assert_eq!(n.to_string().id(), n); }); } #[test] - fn test_if_str_parses_it_is_a_u64() { + fn test_if_str_parses_it_is_a_u64_proptest() { proptest!(|(s in any::())| { let res = parse_u64_strict(&s); if let Some(n) = res { diff --git a/raphtory-api/src/core/storage/dict_mapper.rs b/raphtory-api/src/core/storage/dict_mapper.rs index 0cc0c6c57b..6f7b3fbefe 100644 --- a/raphtory-api/src/core/storage/dict_mapper.rs +++ b/raphtory-api/src/core/storage/dict_mapper.rs @@ -466,7 +466,7 @@ mod test { } #[test] - fn check_dict_mapper_concurrent_write() { + fn check_dict_mapper_concurrent_write_proptest() { proptest!(|(write: Vec)| { let n = 100; let mapper: DictMapper = DictMapper::default(); diff --git a/raphtory-api/src/core/storage/timeindex.rs b/raphtory-api/src/core/storage/timeindex.rs index 13defb156e..8bcef2bfc4 100644 --- a/raphtory-api/src/core/storage/timeindex.rs +++ b/raphtory-api/src/core/storage/timeindex.rs @@ -294,7 +294,7 @@ impl AsTime for EventTime { mod test { use super::*; #[test] - fn symetric_next_previous() { + fn symetric_next_previous_proptest() { proptest::proptest!(|(t in i64::MIN..=i64::MAX, s in 0..=usize::MAX)| { let event_time = EventTime(t, s); assert_eq!(event_time, event_time.next().previous()); diff --git a/raphtory-core/src/entities/nodes/structure/adjset.rs b/raphtory-core/src/entities/nodes/structure/adjset.rs index 1409f93529..316a800ccb 100644 --- a/raphtory-core/src/entities/nodes/structure/adjset.rs +++ b/raphtory-core/src/entities/nodes/structure/adjset.rs @@ -248,7 +248,7 @@ mod tadjset_tests { use proptest::{arbitrary::any, prop_assert, proptest}; #[test] - fn insert_fuzz() { + fn insert_fuzz_proptest() { proptest!(|(input in any::>())| { let mut ts: AdjSet = AdjSet::default(); for (e, i) in input.iter().enumerate() { diff --git a/raphtory-core/src/storage/lazy_vec.rs b/raphtory-core/src/storage/lazy_vec.rs index c2085f432a..5fdcaa1edc 100644 --- a/raphtory-core/src/storage/lazy_vec.rs +++ b/raphtory-core/src/storage/lazy_vec.rs @@ -399,7 +399,7 @@ mod lazy_vec_tests { } #[test] - fn lazy_vec_is_opt_vec_push() { + fn lazy_vec_is_opt_vec_push_proptest() { proptest!(|( v in Vec::>::arbitrary(), )| { diff --git a/raphtory-core/src/storage/string_col.rs b/raphtory-core/src/storage/string_col.rs index 7db77168d3..08c78fd2ca 100644 --- a/raphtory-core/src/storage/string_col.rs +++ b/raphtory-core/src/storage/string_col.rs @@ -370,7 +370,7 @@ mod tests { use raphtory_api::core::storage::arc_str::OptionAsStr; #[test] - fn test_upsert_and_push() { + fn test_upsert_and_push_proptest() { proptest!(|(mut old_values in proptest::collection::vec(any::>(), 0..100usize), new_value in any::(), new_index in 0..100usize)|{ let mut col = StringCol::default(); for v in &old_values { diff --git a/raphtory-itertools/src/merge.rs b/raphtory-itertools/src/merge.rs index f1b54cb614..645ba46f09 100644 --- a/raphtory-itertools/src/merge.rs +++ b/raphtory-itertools/src/merge.rs @@ -297,7 +297,7 @@ mod tests { use proptest::{arbitrary::any, prelude::*, proptest}; #[test] - fn test_merge() { + fn test_merge_proptest() { proptest!(|(input in any::>>().prop_map(|mut input| { for inner in input.iter_mut() { inner.sort(); @@ -314,7 +314,7 @@ mod tests { } #[test] - fn test_reverse() { + fn test_reverse_proptest() { proptest!(|(input in any::>>().prop_map(|mut input| { for inner in input.iter_mut() { inner.sort(); @@ -332,7 +332,7 @@ mod tests { } #[test] - fn test_custom_merge_fn() { + fn test_custom_merge_fn_proptest() { proptest!(|(input in any::>>().prop_map(|mut input| { for inner in input.iter_mut() { inner.sort(); @@ -349,7 +349,7 @@ mod tests { } #[test] - fn test_custom_merge_fn_rev() { + fn test_custom_merge_fn_rev_proptest() { proptest!(|(input in any::>>().prop_map(|mut input| { for inner in input.iter_mut() { inner.sort(); diff --git a/raphtory-tests/tests/algo_tests/community_detection.rs b/raphtory-tests/tests/algo_tests/community_detection.rs index db3b02060d..4c50272f08 100644 --- a/raphtory-tests/tests/algo_tests/community_detection.rs +++ b/raphtory-tests/tests/algo_tests/community_detection.rs @@ -124,12 +124,12 @@ fn test_all_nodes_assigned_inner_unweighted(edges: Vec<(u64, u64)>) { proptest! { #[test] - fn test_all_nodes_in_communities(edges in any::>().prop_map(|mut v| {v.iter_mut().for_each(|(_, _, w)| *w = w.abs()); v})) { + fn test_all_nodes_in_communities_proptest(edges in any::>().prop_map(|mut v| {v.iter_mut().for_each(|(_, _, w)| *w = w.abs()); v})) { test_all_nodes_assigned_inner(edges) } #[test] - fn test_all_nodes_assigned_unweighted(edges in any::>().prop_map(|v| v.into_iter().map(|(s, d)| (s as u64, d as u64)).collect::>())) { + fn test_all_nodes_assigned_unweighted_proptest(edges in any::>().prop_map(|v| v.into_iter().map(|(s, d)| (s as u64, d as u64)).collect::>())) { test_all_nodes_assigned_inner_unweighted(edges) } } diff --git a/raphtory-tests/tests/cached_view.rs b/raphtory-tests/tests/cached_view.rs index e38cb94999..e9c132490a 100644 --- a/raphtory-tests/tests/cached_view.rs +++ b/raphtory-tests/tests/cached_view.rs @@ -83,7 +83,7 @@ fn test_mask_the_window_50pc() { } #[test] -fn masked_always_equals() { +fn masked_always_equals_proptest() { fn check(edge_list: &[(u8, u8, i16, u8)]) { let graph = Graph::new(); for (src, dst, ts, layer) in edge_list { diff --git a/raphtory-tests/tests/db_tests.rs b/raphtory-tests/tests/db_tests.rs index 8c655cc4d5..89709810ff 100644 --- a/raphtory-tests/tests/db_tests.rs +++ b/raphtory-tests/tests/db_tests.rs @@ -151,7 +151,7 @@ fn test_empty_graph() { } #[test] -fn test_multithreaded_add_edge() { +fn test_multithreaded_add_edge_proptest() { proptest!(|(edges: Vec<(u64, u64)>)| { let g = Graph::new(); edges.par_iter().enumerate().for_each(|(t, (i, j))| { @@ -162,7 +162,7 @@ fn test_multithreaded_add_edge() { } #[test] -fn test_multithreaded_add_edge_both_directions() { +fn test_multithreaded_add_edge_both_directions_proptest() { proptest!(|(edges: Vec<(u64, u64)>)| { let g = Graph::new(); let mut self_loop_count = 0; @@ -181,7 +181,7 @@ fn test_multithreaded_add_edge_both_directions() { } #[test] -fn add_node_grows_graph_len() { +fn add_node_grows_graph_len_proptest() { proptest!(|(vs: Vec<(i64, u64)>)| { let g = Graph::new(); @@ -197,7 +197,7 @@ fn add_node_grows_graph_len() { } #[test] -fn add_node_gets_names() { +fn add_node_gets_names_proptest() { proptest!(|(vs: Vec)| { global_info_logger(); let g = Graph::new(); @@ -220,7 +220,7 @@ fn add_node_gets_names() { } #[test] -fn add_edge_grows_graph_edge_len() { +fn add_edge_grows_graph_edge_len_proptest() { proptest!(|(edges: Vec<(i64, u64, u64)>)| { let g = Graph::new(); @@ -259,7 +259,7 @@ fn simple_add_edge() { } #[test] -fn add_edge_works() { +fn add_edge_works_proptest() { proptest!(|(edges: Vec<(i64, u64, u64)>)| { let g = Graph::new(); for &(t, src, dst) in edges.iter() { @@ -271,7 +271,7 @@ fn add_edge_works() { } #[test] -fn get_edge_works() { +fn get_edge_works_proptest() { proptest!(|(edges: Vec<(i64, u64, u64)>)| { let g = Graph::new(); for &(t, src, dst) in edges.iter() { @@ -2158,7 +2158,7 @@ fn test_graph_metadata_with_maps() { } #[test] -fn test_graph_metadata_names() { +fn test_graph_metadata_names_proptest() { proptest!(|(u64_props: HashMap)| { let g = Graph::new(); @@ -2179,7 +2179,7 @@ fn test_graph_metadata_names() { } #[test] -fn test_graph_temporal_props() { +fn test_graph_temporal_props_proptest() { proptest!(|(str_props: HashMap)| { global_info_logger(); @@ -2785,7 +2785,7 @@ fn test_unique_layers() { } #[test] -fn node_from_id_is_consistent() { +fn node_from_id_is_consistent_proptest() { proptest!(|(nodes: Vec)| { let g = Graph::new(); for v in nodes.iter() { @@ -2815,7 +2815,7 @@ fn large_id_is_consistent() { } #[test] -fn exploded_edge_times_is_consistent() { +fn exploded_edge_times_is_consistent_proptest() { let edges = proptest::collection::vec( ( 0u64..100, @@ -3640,7 +3640,7 @@ fn test_id_filter() { } #[test] -fn test_indexed() { +fn test_indexed_proptest() { proptest!(|(graph in build_graph_strat(10, 10, 10, 10, false), nodes in subsequence((0..10).collect::>(), 0..10))| { let graph = Graph::from(build_graph(&graph)); let expected_node_ids = nodes.iter().copied().filter(|&id| graph.has_node(id)).collect::>(); @@ -3650,7 +3650,7 @@ fn test_indexed() { } #[test] -fn materialize_window_prop_test() { +fn materialize_window_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>())| { let g = Graph::from(build_graph(&graph_f)); let gw = g.window(w.start, w.end); diff --git a/raphtory-tests/tests/df_loaders.rs b/raphtory-tests/tests/df_loaders.rs index 9aa2b5f6f5..fd72594ee8 100644 --- a/raphtory-tests/tests/df_loaders.rs +++ b/raphtory-tests/tests/df_loaders.rs @@ -241,7 +241,7 @@ mod io_tests { } #[test] - fn test_load_edges() { + fn test_load_edges_proptest() { proptest!(|(edges in build_edge_list(1000, 100), chunk_size in 1usize..=1000)| { let distinct_edges = edges.iter().map(|(src, dst, _, _, _)| (src, dst)).collect::>().len(); let df_view = build_df(chunk_size, &edges); @@ -427,7 +427,7 @@ mod io_tests { } #[test] - fn test_load_edges_str() { + fn test_load_edges_str_proptest() { proptest!(|(edges in build_edge_list_str(100, 100), chunk_size in 1usize..=100)| { let distinct_edges = edges.iter().map(|(src, dst, _, _, _)| (src, dst)).collect::>().len(); let df_view = build_df_str(chunk_size, &edges); @@ -1244,7 +1244,7 @@ mod parquet_tests { } #[test] - fn write_graph_props_to_parquet() { + fn write_graph_props_to_parquet_proptest() { proptest!(|(props in build_props_dyn(0..=10))| { check_graph_props(props, true); }); @@ -1260,13 +1260,13 @@ mod parquet_tests { } #[test] - fn write_nodes_any_props_to_parquet() { + fn write_nodes_any_props_to_parquet_proptest() { proptest!(|(nodes in build_nodes_dyn(0..=10, 0..=10, 0..=10))| { build_and_check_parquet_encoding(nodes.into()); }); } #[test] - fn write_edges_any_props_to_parquet() { + fn write_edges_any_props_to_parquet_proptest() { proptest!(|(edges in build_edge_list_dyn(0..=10, 0..=10, 0..=10, 0..=10, true))| { build_and_check_parquet_encoding(edges.into()); }); @@ -1291,7 +1291,7 @@ mod parquet_tests { } #[test] - fn write_graph_to_parquet() { + fn write_graph_to_parquet_proptest() { proptest!(|(graph in build_graph_strat(10, 10, 10, 10, true))| { build_and_check_parquet_encoding(graph); }) diff --git a/raphtory-tests/tests/edge_property_filter.rs b/raphtory-tests/tests/edge_property_filter.rs index 22792314b4..c5193456c4 100644 --- a/raphtory-tests/tests/edge_property_filter.rs +++ b/raphtory-tests/tests/edge_property_filter.rs @@ -133,7 +133,7 @@ fn test_filter() { } #[test] -fn test_filter_gt() { +fn test_filter_gt_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -152,7 +152,7 @@ fn test_filter_gt() { } #[test] -fn test_filter_ge() { +fn test_filter_ge_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -171,7 +171,7 @@ fn test_filter_ge() { } #[test] -fn test_filter_lt() { +fn test_filter_lt_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -190,7 +190,7 @@ fn test_filter_lt() { } #[test] -fn test_filter_le() { +fn test_filter_le_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -209,7 +209,7 @@ fn test_filter_le() { } #[test] -fn test_filter_eq() { +fn test_filter_eq_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -228,7 +228,7 @@ fn test_filter_eq() { } #[test] -fn test_filter_ne() { +fn test_filter_ne_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -247,7 +247,7 @@ fn test_filter_ne() { } #[test] -fn test_graph_materialise_window() { +fn test_graph_materialise_window_proptest() { proptest!(|(edges in build_edge_list(100, 100), edge_deletions in build_edge_deletions(100, 100), v in any::(), (start, end) in build_window())| { let g = build_graph_from_edge_list(&edges); for (src, dst, t) in edge_deletions { @@ -294,7 +294,7 @@ fn check_persistent_graph_mat_window( } #[test] -fn test_persistent_graph_materialise_window() { +fn test_persistent_graph_materialise_window_proptest() { proptest!(|(edges in build_edge_list(100, 100), edge_deletions in build_edge_deletions(100, 100), v in any::(), (start, end) in build_window())| { check_persistent_graph_mat_window(&edges, edge_deletions, v, (start, end)); }) diff --git a/raphtory-tests/tests/exploded_edge_property_filter.rs b/raphtory-tests/tests/exploded_edge_property_filter.rs index 62de62f69b..6b0fb2f830 100644 --- a/raphtory-tests/tests/exploded_edge_property_filter.rs +++ b/raphtory-tests/tests/exploded_edge_property_filter.rs @@ -162,7 +162,7 @@ fn edge_attr( } #[test] -fn test_filter_gt() { +fn test_filter_gt_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -184,7 +184,7 @@ fn test_filter_gt() { } #[test] -fn test_filter_gt_persistent() { +fn test_filter_gt_persistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::() )| { @@ -217,7 +217,7 @@ fn test_one_edge() { } #[test] -fn test_filter_ge() { +fn test_filter_ge_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -231,7 +231,7 @@ fn test_filter_ge() { } #[test] -fn test_filter_ge_persistent() { +fn test_filter_ge_persistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::() )| { @@ -271,7 +271,7 @@ fn test_filter_persistent_single_filtered_edge() { } #[test] -fn test_filter_lt() { +fn test_filter_lt_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -285,7 +285,7 @@ fn test_filter_lt() { } #[test] -fn test_filter_lt_persistent() { +fn test_filter_lt_persistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::() )| { @@ -304,7 +304,7 @@ fn test_filter_lt_persistent() { } #[test] -fn test_filter_le() { +fn test_filter_le_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -318,7 +318,7 @@ fn test_filter_le() { } #[test] -fn test_filter_le_persistent() { +fn test_filter_le_persistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::() )| { @@ -337,7 +337,7 @@ fn test_filter_le_persistent() { } #[test] -fn test_filter_eq() { +fn test_filter_eq_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -360,7 +360,7 @@ fn test_filter_eq_one_edge() { } #[test] -fn test_filter_eq_persistent() { +fn test_filter_eq_persistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::() )| { @@ -379,7 +379,7 @@ fn test_filter_eq_persistent() { } #[test] -fn test_filter_ne() { +fn test_filter_ne_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -393,7 +393,7 @@ fn test_filter_ne() { } #[test] -fn test_filter_ne_persistent() { +fn test_filter_ne_persistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::() )| { @@ -412,7 +412,7 @@ fn test_filter_ne_persistent() { } #[test] -fn test_filter_window() { +fn test_filter_window_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::(), (start, end) in build_window() )| { @@ -426,7 +426,7 @@ fn test_filter_window() { } #[test] -fn test_filter_window_persistent() { +fn test_filter_window_persistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::(), (start, end) in build_window() )| { @@ -445,7 +445,7 @@ fn test_filter_window_persistent() { } #[test] -fn test_filter_materialise_is_consistent() { +fn test_filter_materialise_is_consistent_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -459,7 +459,7 @@ fn test_filter_materialise_is_consistent() { } #[test] -fn test_filter_persistent_materialise_is_consistent() { +fn test_filter_persistent_materialise_is_consistent_proptest() { proptest!(|( edges in build_edge_list_with_deletions(100, 100), v in any::() )| { @@ -481,7 +481,7 @@ fn test_filter_persistent_materialise_is_consistent() { #[test] #[ignore = "need a way to add a node without timestamp"] -fn test_filter_on_nodes() { +fn test_filter_on_nodes_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::() )| { @@ -508,7 +508,7 @@ fn test_filter_on_nodes_simple() { } #[test] -fn test_filter_on_node() { +fn test_filter_on_node_proptest() { proptest!(|( edges in build_edge_list(100, 2), v in any::() )| { @@ -529,7 +529,7 @@ fn test_filter_on_node() { } #[test] -fn test_filter_materialise_window_is_consistent() { +fn test_filter_materialise_window_is_consistent_proptest() { proptest!(|( edges in build_edge_list(100, 100), v in any::(), (start, end) in build_window() )| { @@ -600,7 +600,7 @@ fn test_persistent_graph_explode_semantics() { } #[test] -fn test_persistent_graph_materialise() { +fn test_persistent_graph_materialise_proptest() { proptest!(|(edges in build_edge_list(100, 100), edge_deletions in build_edge_deletions(100, 100), v in any::())| { let g = build_graph_from_edge_list(&edges); let g = g.persistent_graph(); @@ -630,7 +630,7 @@ fn test_single_filtered_edge_persistent() { } #[test] -fn test_persistent_graph_materialise_window() { +fn test_persistent_graph_materialise_window_proptest() { proptest!(|(edges in build_edge_list(100, 100), edge_deletions in build_edge_deletions(100, 100), v in any::(), (start, end) in build_window())| { let g = build_graph_from_edge_list(&edges); let g = g.persistent_graph(); diff --git a/raphtory-tests/tests/node_property_filter.rs b/raphtory-tests/tests/node_property_filter.rs index 9de876ccdc..e612f3323b 100644 --- a/raphtory-tests/tests/node_property_filter.rs +++ b/raphtory-tests/tests/node_property_filter.rs @@ -257,7 +257,7 @@ fn test_node_property_filter_on_graph() { } #[test] -fn test_filter_gt() { +fn test_filter_gt_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100), v in any::() )| { @@ -280,7 +280,7 @@ fn test_filter_gt() { } #[test] -fn test_filter_ge() { +fn test_filter_ge_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100), v in any::() )| { @@ -302,7 +302,7 @@ fn test_filter_ge() { } #[test] -fn test_filter_lt() { +fn test_filter_lt_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100), v in any::() )| { @@ -324,7 +324,7 @@ fn test_filter_lt() { } #[test] -fn test_filter_le() { +fn test_filter_le_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100), v in any::() )| { @@ -346,7 +346,7 @@ fn test_filter_le() { } #[test] -fn test_filter_eq() { +fn test_filter_eq_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100), v in any::() )| { @@ -368,7 +368,7 @@ fn test_filter_eq() { } #[test] -fn test_filter_ne() { +fn test_filter_ne_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100), v in any::() )| { @@ -390,7 +390,7 @@ fn test_filter_ne() { } #[test] -fn test_filter_is_some() { +fn test_filter_is_some_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100), )| { @@ -412,7 +412,7 @@ fn test_filter_is_some() { } #[test] -fn test_filter_is_none() { +fn test_filter_is_none_proptest() { proptest!(|( edges in build_edge_list(100, 100), nodes in build_node_props(100) )| { diff --git a/raphtory-tests/tests/serialise_test.rs b/raphtory-tests/tests/serialise_test.rs index 5e69d1fdc1..1530f48e80 100644 --- a/raphtory-tests/tests/serialise_test.rs +++ b/raphtory-tests/tests/serialise_test.rs @@ -428,7 +428,7 @@ mod serialise_test { } #[test] - fn encode_decode_prop_test() { + fn encode_decode_proptest() { proptest!(|(edges in build_edge_list(100, 100))| { let g = build_graph_from_edge_list(&edges); let bytes = g.encode_to_bytes().unwrap(); diff --git a/raphtory-tests/tests/test_deletions.rs b/raphtory-tests/tests/test_deletions.rs index daf778f165..6a0afc03ad 100644 --- a/raphtory-tests/tests/test_deletions.rs +++ b/raphtory-tests/tests/test_deletions.rs @@ -166,7 +166,7 @@ fn test_materialize_only_deletion() { } #[test] -fn materialize_prop_test() { +fn materialize_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true))| { let g = PersistentGraph::from(build_graph(&graph_f)); let gm = g.materialize().unwrap(); @@ -175,7 +175,7 @@ fn materialize_prop_test() { } #[test] -fn materialize_window_prop_test() { +fn materialize_window_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>())| { let g = PersistentGraph::from(build_graph(&graph_f)); let gw = g.window(w.start, w.end); @@ -241,7 +241,7 @@ fn test_deletion_at_window_start() { } #[test] -fn materialize_window_layers_prop_test() { +fn materialize_window_layers_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>(), l in subsequence(&["a", "b"], 0..=2), num_threads in 1..=16usize)| { let pool = ThreadPoolBuilder::new().num_threads(num_threads).build().unwrap(); pool.install(|| { diff --git a/raphtory-tests/tests/test_layers.rs b/raphtory-tests/tests/test_layers.rs index 52f0013faf..81b5441803 100644 --- a/raphtory-tests/tests/test_layers.rs +++ b/raphtory-tests/tests/test_layers.rs @@ -12,7 +12,7 @@ use raphtory_tests::{ use serde_json::json; #[test] -fn prop_test_layering() { +fn proptest_layering() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, false), layer in proptest::sample::subsequence(&["_default", "a", "b"], 0..3))| { let g_layer_expected = Graph::from(build_graph_layer(&graph_f, &layer)); let g = Graph::from(build_graph(&graph_f)); @@ -66,7 +66,7 @@ fn test_failure3() { } #[test] -fn prop_test_layering_persistent_graph() { +fn proptest_layering_persistent_graph() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), layer in proptest::sample::subsequence(&["_default", "a", "b"], 0..3))| { let g_layer_expected = PersistentGraph::from(build_graph_layer(&graph_f, &layer)); let g = PersistentGraph::from(build_graph(&graph_f)); diff --git a/raphtory-tests/tests/test_materialize.rs b/raphtory-tests/tests/test_materialize.rs index 9c3a5763df..1c46ebc430 100644 --- a/raphtory-tests/tests/test_materialize.rs +++ b/raphtory-tests/tests/test_materialize.rs @@ -66,7 +66,7 @@ fn test_graph_properties() { } #[test] -fn materialize_prop_test() { +fn materialize_proptest() { proptest!(|(edges in build_edge_list(100, 100), w in any::>())| { let g = build_graph_from_edge_list(&edges); test_storage!(&g, |g| { diff --git a/raphtory-tests/tests/tests_node_type_filtered_subgraph.rs b/raphtory-tests/tests/tests_node_type_filtered_subgraph.rs index 2ce756de22..fb8190bb59 100644 --- a/raphtory-tests/tests/tests_node_type_filtered_subgraph.rs +++ b/raphtory-tests/tests/tests_node_type_filtered_subgraph.rs @@ -67,7 +67,7 @@ fn test_type_filtered_subgraph() { } #[test] -fn materialize_prop_test() { +fn materialize_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), node_types in make_node_types())| { let g = Graph::from(build_graph(&graph_f)).subgraph_node_types(node_types); let gm = g.materialize().unwrap(); @@ -76,7 +76,7 @@ fn materialize_prop_test() { } #[test] -fn materialize_type_window_prop_test() { +fn materialize_type_window_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>(), node_types in make_node_types())| { let g = Graph::from(build_graph(&graph_f)).subgraph_node_types(node_types); let gvw = g.window(w.start, w.end); @@ -98,7 +98,7 @@ fn materialize_type_window_prop_test_failure() { } #[test] -fn materialize_window_type_prop_test() { +fn materialize_window_type_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>(), node_types in make_node_types())| { let g = Graph::from(build_graph(&graph_f)); let gvw = g.window(w.start, w.end).subgraph_node_types(node_types); diff --git a/raphtory-tests/tests/valid_graph.rs b/raphtory-tests/tests/valid_graph.rs index 9807f54439..59d61fdfa2 100644 --- a/raphtory-tests/tests/valid_graph.rs +++ b/raphtory-tests/tests/valid_graph.rs @@ -46,7 +46,7 @@ fn test_valid_graph_events() -> Result<(), GraphError> { } #[test] -fn materialize_prop_test_persistent() { +fn materialize_proptest_persistent() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true))| { let g = PersistentGraph::from(build_graph(&graph_f)).valid(); let gm = g.materialize().unwrap(); @@ -70,7 +70,7 @@ fn test_explode_layers() { } #[test] -fn materialize_prop_test_events() { +fn materialize_proptest_events() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true))| { let g = Graph::from(build_graph(&graph_f)).valid(); let gm = g.materialize().unwrap(); @@ -121,7 +121,7 @@ fn test_single_deleted_edge_persistent() { } #[test] -fn materialize_valid_window_persistent_prop_test() { +fn materialize_valid_window_persistent_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>())| { let g = PersistentGraph::from(build_graph(&graph_f)); let gvw = g.valid().window(w.start, w.end); @@ -141,7 +141,7 @@ fn test_deletions_in_window_but_edge_valid() { } #[test] -fn materialize_valid_window_events_prop_test() { +fn materialize_valid_window_events_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>())| { let g = Graph::from(build_graph(&graph_f)); let gvw = g.valid().window(w.start, w.end); @@ -151,7 +151,7 @@ fn materialize_valid_window_events_prop_test() { } #[test] -fn materialize_window_valid_persistent_prop_test() { +fn materialize_window_valid_persistent_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>())| { let g = PersistentGraph::from(build_graph(&graph_f)); let gvw = g.window(w.start, w.end).valid(); @@ -161,7 +161,7 @@ fn materialize_window_valid_persistent_prop_test() { } #[test] -fn materialize_window_valid_events_prop_test() { +fn materialize_window_valid_events_proptest() { proptest!(|(graph_f in build_graph_strat(10, 10, 10, 10, true), w in any::>())| { let g = Graph::from(build_graph(&graph_f)); let gvw = g.window(w.start, w.end).valid(); diff --git a/raphtory-tests/tests/views_test.rs b/raphtory-tests/tests/views_test.rs index c5d1a8199a..435df284a8 100644 --- a/raphtory-tests/tests/views_test.rs +++ b/raphtory-tests/tests/views_test.rs @@ -129,7 +129,7 @@ fn graph_has_node_check_fail() { } #[test] -fn windowed_graph_has_node() { +fn windowed_graph_has_node_proptest() { proptest!(|(mut vs: Vec<(i64, u64)>)| { global_info_logger(); prop_assume!(!vs.is_empty()); @@ -166,7 +166,7 @@ fn windowed_graph_has_node() { } #[test] -fn windowed_graph_has_edge() { +fn windowed_graph_has_edge_proptest() { proptest!(|(mut edges: Vec<(i64, (u64, u64))>)| { prop_assume!(!edges.is_empty()); @@ -200,7 +200,7 @@ fn windowed_graph_has_edge() { } #[test] -fn windowed_graph_edge_count() { +fn windowed_graph_edge_count_proptest() { proptest!(|(mut edges: Vec<(i64, (u64, u64))>, window: Range)| { global_info_logger(); prop_assume!(window.end >= window.start); @@ -231,7 +231,7 @@ fn windowed_graph_edge_count() { } #[test] -fn trivial_window_has_all_edges() { +fn trivial_window_has_all_edges_proptest() { proptest!(|(edges: Vec<(i64, u64, u64)>)| { let g = Graph::new(); edges @@ -249,7 +249,7 @@ fn trivial_window_has_all_edges() { } #[test] -fn large_node_in_window() { +fn large_node_in_window_proptest() { proptest!(|(dsts: Vec)| { let dsts: Vec = dsts.into_iter().unique().collect(); let n = dsts.len(); diff --git a/raphtory/src/core/state/mod.rs b/raphtory/src/core/state/mod.rs index e4c9cc30ae..4359e6a7bd 100644 --- a/raphtory/src/core/state/mod.rs +++ b/raphtory/src/core/state/mod.rs @@ -25,7 +25,7 @@ mod state_test { }; #[test] - fn check_merge_2_vecs() { + fn check_merge_2_vecs_proptest() { proptest!(|(mut a: Vec, b: Vec)| { let len_a = a.len(); let len_b = b.len();