print_arrays/
print_arrays.rs

1//! ---------------------------------------------------------
2//! Builds a demo table and prints it.
3//!
4//! Run with:
5//!     cargo run --example print_arrays
6//! ---------------------------------------------------------
7
8use std::sync::Arc;
9
10use minarrow::aliases::{BoolArr, CatArr, FltArr, IntArr, StrArr};
11use minarrow::enums::array::Array;
12use minarrow::{Bitmask, MaskedArray, NumericArray, Print, TextArray};
13
14#[cfg(feature = "views")]
15use minarrow::{ArrayV, BitmaskV, NumericArrayV, TextArrayV};
16
17#[cfg(feature = "datetime")]
18use minarrow::{DatetimeArray, TemporalArray};
19
20fn main() {
21    // Numeric (Integer, Float, all sizes)
22    let col_i32 = IntArr::<i32>::from_slice(&[1, 2, 3, 4, 5]);
23    let col_u32 = IntArr::<u32>::from_slice(&[100, 200, 300, 400, 500]);
24    let col_f32 = FltArr::<f32>::from_slice(&[1.1, 2.2, 3.3, 4.4, 5.5]);
25
26    // Boolean with nulls
27    let mut col_bool = BoolArr::from_slice(&[true, false, true, false, true]);
28    col_bool.set_null_mask(Some(Bitmask::from_bools(&[true, true, true, false, true])));
29
30    // String and Dictionary/Categorical
31    let col_str32 = StrArr::from_slice(&["red", "blue", "green", "yellow", "purple"]);
32
33    let col_cat32 = CatArr::<u32>::from_values(
34        ["apple", "banana", "cherry", "banana", "apple"]
35            .iter()
36            .copied(),
37    );
38
39    // Datetime
40    #[cfg(feature = "datetime")]
41    let col_dt32 = DatetimeArray::<i32>::from_slice(
42        &[1000, 2000, 3000, 4000, 5000],
43        Some(minarrow::enums::time_units::TimeUnit::Milliseconds),
44    );
45    #[cfg(feature = "datetime")]
46    let col_dt64 = DatetimeArray::<i64>::from_slice(
47        &[
48            1_000_000_000,
49            2_000_000_000,
50            3_000_000_000,
51            4_000_000_000,
52            5_000_000_000,
53        ],
54        Some(minarrow::enums::time_units::TimeUnit::Nanoseconds),
55    );
56
57    #[cfg(feature = "datetime")]
58    col_dt32.print();
59    #[cfg(feature = "datetime")]
60    println!("\n");
61    #[cfg(feature = "datetime")]
62    col_dt64.print();
63    #[cfg(feature = "datetime")]
64    println!("\n");
65
66    // --- Print NumericArray, TextArray, TemporalArray enums
67    println!("\n--- Enums: NumericArray, TextArray, TemporalArray ---");
68    NumericArray::Int32(Arc::new(col_i32.clone())).print();
69    println!("\n");
70    NumericArray::UInt32(Arc::new(col_u32.clone())).print();
71    println!("\n");
72    NumericArray::Float32(Arc::new(col_f32.clone())).print();
73    println!("\n");
74    TextArray::String32(Arc::new(col_str32.clone())).print();
75    println!("\n");
76    let _ = &TextArray::Categorical32(Arc::new(col_cat32.clone())).print();
77
78    println!("\n/ *** To display as dates, enable the optional 'chrono' feature *** /\n");
79
80    #[cfg(feature = "datetime")]
81    let _ = &TemporalArray::Datetime32(Arc::new(col_dt32.clone())).print();
82    println!("\n");
83    #[cfg(feature = "datetime")]
84    let _ = &TemporalArray::Datetime64(Arc::new(col_dt64.clone())).print();
85    println!("\n");
86
87    println!("\n--- Array (top-level) ---");
88    Array::from_int32(col_i32.clone()).print();
89    println!("\n");
90    Array::from_uint32(col_u32.clone()).print();
91    println!("\n");
92    Array::from_float32(col_f32.clone()).print();
93    println!("\n");
94    Array::from_string32(col_str32.clone()).print();
95    println!("\n");
96    Array::from_categorical32(col_cat32.clone()).print();
97    println!("\n");
98    #[cfg(feature = "datetime")]
99    Array::from_datetime_i32(col_dt32.clone()).print();
100    println!("\n");
101    // --- Print Array Views (ArrayV, NumericArrayV, TextArrayV, TemporalArrayV)
102    #[cfg(feature = "views")]
103    println!("\n--- Array Views ---");
104    #[cfg(feature = "views")]
105    ArrayV::new(Array::from_int32(col_i32.clone()), 1, 3).print();
106
107    let num_arr = NumericArray::Int32(Arc::new(col_i32.clone()));
108    num_arr.print();
109
110    #[cfg(feature = "views")]
111    let num_view = NumericArrayV::new(num_arr, 1, 3);
112    #[cfg(feature = "views")]
113    num_view.print();
114
115    let txt_arr = TextArray::String32(Arc::new(col_str32.clone()));
116    txt_arr.print();
117
118    #[cfg(feature = "views")]
119    let txt_view = TextArrayV::new(txt_arr, 1, 3);
120    #[cfg(feature = "views")]
121    txt_view.print();
122
123    #[cfg(all(feature = "datetime", feature = "views"))]
124    {
125        use minarrow::TemporalArrayV;
126
127        let tmp_arr = TemporalArray::Datetime32(Arc::new(col_dt32.clone()));
128        tmp_arr.print();
129        TemporalArrayV::new(tmp_arr, 1, 3).print();
130    }
131
132    // --- Print Bitmask and BitmaskV
133    println!("\n--- Bitmask & BitmaskV ---");
134    let bm = Bitmask::from_bools(&[true, false, true, true, false]);
135    bm.print();
136    #[cfg(feature = "views")]   
137    BitmaskV::new(bm.clone(), 1, 3).print();
138}