1use crate::toolkit::array::AFloat;
6use numpy::{
7 datetime::{units::Nanoseconds, Datetime},
8 ndarray::{Array1, Array2, ArrayView1, ArrayView2},
9 PyFixedString,
10};
11
12mod io;
13mod meta;
14mod ops;
15
16pub const COLUMNS_NBYTES: usize = 32;
17pub type IndexDtype = Datetime<Nanoseconds>;
18pub type ColumnsDtype = PyFixedString<COLUMNS_NBYTES>;
19pub const INDEX_NBYTES: usize = core::mem::size_of::<IndexDtype>();
20
21#[derive(Debug)]
22pub struct OwnedDataFrame<T: AFloat> {
23 pub index: Array1<IndexDtype>,
24 pub columns: Array1<ColumnsDtype>,
25 pub values: Array2<T>,
26}
27#[derive(Debug)]
28pub struct DataFrameView<'a, T: AFloat> {
29 pub index: ArrayView1<'a, IndexDtype>,
30 pub columns: ArrayView1<'a, ColumnsDtype>,
31 pub values: ArrayView2<'a, T>,
32}
33
34pub enum DataFrame<'a, T: AFloat> {
35 View(DataFrameView<'a, T>),
36 Owned(OwnedDataFrame<T>),
37}