Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-core/src/serde/mod.rs
6940 views
1
pub mod chunked_array;
2
mod df;
3
pub mod series;
4
5
#[cfg(test)]
6
mod test {
7
use crate::chunked_array::flags::StatisticsFlags;
8
use crate::prelude::*;
9
use crate::series::IsSorted;
10
11
#[test]
12
fn test_serde() -> PolarsResult<()> {
13
let ca = UInt32Chunked::new("foo".into(), &[Some(1), None, Some(2)]);
14
15
let json = serde_json::to_string(&ca.clone().into_series()).unwrap();
16
17
let out = serde_json::from_str::<Series>(&json).unwrap();
18
assert!(ca.into_series().equals_missing(&out));
19
20
let ca = StringChunked::new("foo".into(), &[Some("foo"), None, Some("bar")]);
21
22
let json = serde_json::to_string(&ca.clone().into_series()).unwrap();
23
24
let out = serde_json::from_str::<Series>(&json).unwrap(); // uses `Deserialize<'de>`
25
assert!(ca.into_series().equals_missing(&out));
26
27
Ok(())
28
}
29
30
/// test using the `DeserializedOwned` trait
31
#[test]
32
fn test_serde_owned() {
33
let ca = UInt32Chunked::new("foo".into(), &[Some(1), None, Some(2)]);
34
35
let json = serde_json::to_string(&ca.clone().into_series()).unwrap();
36
37
let out = serde_json::from_reader::<_, Series>(json.as_bytes()).unwrap(); // uses `DeserializeOwned`
38
assert!(ca.into_series().equals_missing(&out));
39
}
40
41
fn sample_dataframe() -> DataFrame {
42
let s1 = Series::new("foo".into(), &[1, 2, 3]);
43
let s2 = Series::new("bar".into(), &[Some(true), None, Some(false)]);
44
let s3 = Series::new("string".into(), &["mouse", "elephant", "dog"]);
45
let s_list = Column::new("list".into(), &[s1.clone(), s1.clone(), s1.clone()]);
46
47
DataFrame::new(vec![s1.into(), s2.into(), s3.into(), s_list]).unwrap()
48
}
49
50
#[test]
51
fn test_serde_flags() {
52
let df = sample_dataframe();
53
54
for mut column in df.columns {
55
column.set_sorted_flag(IsSorted::Descending);
56
let json = serde_json::to_string(&column).unwrap();
57
let out = serde_json::from_reader::<_, Column>(json.as_bytes()).unwrap();
58
let f = out.get_flags();
59
assert_ne!(f, StatisticsFlags::empty());
60
assert_eq!(column.get_flags(), out.get_flags());
61
}
62
}
63
64
#[test]
65
fn test_serde_df_json() {
66
let df = sample_dataframe();
67
let json = serde_json::to_string(&df).unwrap();
68
let out = serde_json::from_str::<DataFrame>(&json).unwrap(); // uses `Deserialize<'de>`
69
assert!(df.equals_missing(&out));
70
}
71
72
/// test using the `DeserializedOwned` trait
73
#[test]
74
fn test_serde_df_owned_json() {
75
let df = sample_dataframe();
76
let json = serde_json::to_string(&df).unwrap();
77
78
let out = serde_json::from_reader::<_, DataFrame>(json.as_bytes()).unwrap(); // uses `DeserializeOwned`
79
assert!(df.equals_missing(&out));
80
}
81
82
// STRUCT REFACTOR
83
#[ignore]
84
#[test]
85
#[cfg(feature = "dtype-struct")]
86
fn test_serde_struct_series_owned_json() {
87
let row_1 = AnyValue::StructOwned(Box::new((
88
vec![
89
AnyValue::String("1:1"),
90
AnyValue::Null,
91
AnyValue::String("1:3"),
92
],
93
vec![
94
Field::new("fld_1".into(), DataType::String),
95
Field::new("fld_2".into(), DataType::String),
96
Field::new("fld_3".into(), DataType::String),
97
],
98
)));
99
let dtype = DataType::Struct(vec![
100
Field::new("fld_1".into(), DataType::String),
101
Field::new("fld_2".into(), DataType::String),
102
Field::new("fld_3".into(), DataType::String),
103
]);
104
let row_2 = AnyValue::StructOwned(Box::new((
105
vec![
106
AnyValue::String("2:1"),
107
AnyValue::String("2:2"),
108
AnyValue::String("2:3"),
109
],
110
vec![
111
Field::new("fld_1".into(), DataType::String),
112
Field::new("fld_2".into(), DataType::String),
113
Field::new("fld_3".into(), DataType::String),
114
],
115
)));
116
let row_3 = AnyValue::Null;
117
118
let s =
119
Series::from_any_values_and_dtype("item".into(), &[row_1, row_2, row_3], &dtype, false)
120
.unwrap();
121
let df = DataFrame::new(vec![s.into()]).unwrap();
122
123
let df_str = serde_json::to_string(&df).unwrap();
124
let out = serde_json::from_str::<DataFrame>(&df_str).unwrap();
125
assert!(df.equals_missing(&out));
126
}
127
}
128
129