MCPcopy Create free account
hub / github.com/Pometry/Raphtory / extract_properties

Function extract_properties

raphtory/src/python/utils/export.rs:13–107  ·  view source on GitHub ↗
(
    include_property_history: bool,
    convert_datetime: bool,
    explode: bool,
    column_names: &Vec<String>,
    is_prop_both_temp_and_const: &HashSet<String>,
    properties: &Properties<P>,

Source from the content-addressed store, hash-verified

11use std::collections::{HashMap, HashSet};
12
13pub(crate) fn extract_properties<P>(
14 include_property_history: bool,
15 convert_datetime: bool,
16 explode: bool,
17 column_names: &Vec<String>,
18 is_prop_both_temp_and_const: &HashSet<String>,
19 properties: &Properties<P>,
20 metadata: &Metadata<P>,
21 properties_map: &mut HashMap<String, Prop>,
22 prop_time_dict: &mut HashMap<i64, HashMap<String, Prop>>,
23 start_time: i64,
24) where
25 P: InternalPropertiesOps + Clone,
26{
27 properties_map.extend(metadata.iter_filtered().map(|(name, prop)| {
28 let column_name = if is_prop_both_temp_and_const.contains(name.as_ref()) {
29 format!("{}_metadata", name)
30 } else {
31 name.to_string()
32 };
33 (column_name, prop.clone())
34 }));
35
36 if explode {
37 let mut empty_dict = HashMap::new();
38 column_names.clone().iter().for_each(|name| {
39 let _ = empty_dict.insert(name.clone(), Prop::from(""));
40 });
41
42 if properties.temporal().iter().count() == 0 {
43 if properties_map.is_empty() {
44 // node is empty so add as empty time
45 let _ = prop_time_dict.insert(start_time, empty_dict.clone());
46 } else {
47 metadata.iter_filtered().for_each(|(name, prop_val)| {
48 if !prop_time_dict.contains_key(&start_time) {
49 let _ = prop_time_dict.insert(start_time, empty_dict.clone());
50 }
51 let data_dict = prop_time_dict.get_mut(&0i64).unwrap();
52 let _ = data_dict.insert(name.to_string(), prop_val);
53 })
54 }
55 }
56 properties
57 .temporal()
58 .histories()
59 .iter()
60 .for_each(|(prop_name, (t, prop_val))| {
61 let time = t.t();
62 let column_name = if is_prop_both_temp_and_const.contains(prop_name.as_ref()) {
63 format!("{}_temporal", prop_name)
64 } else {
65 prop_name.to_string()
66 };
67 if !prop_time_dict.contains_key(&time) {
68 prop_time_dict.insert(time, empty_dict.clone());
69 }
70 let data_dict = prop_time_dict.get_mut(&time).unwrap();

Callers 2

to_dfMethod · 0.85
to_dfMethod · 0.85

Calls 15

ListEnum · 0.85
extendMethod · 0.80
to_stringMethod · 0.80
contains_keyMethod · 0.80
unwrapMethod · 0.80
collect_vecMethod · 0.80
mapMethod · 0.45
iter_filteredMethod · 0.45
containsMethod · 0.45
as_refMethod · 0.45
cloneMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected