1#![allow(non_camel_case_types, unused_imports)]
2use itertools::Itertools;
3use super::types::*;
4
5#[derive(Clone)]
6pub enum Series {
7 date(Vec<da>),
8 datetime(Vec<dt>),
9 time(Vec<tt>),
10 f32(Vec<f32>),
11}
12
13pub struct Df<T> {
14 pub index: T,
15 pub value: Vec<Series>,
16 pub column: Vec<&'static str>,
17}
18
19use std::ops::Add;
20use std::iter::{Map, Zip};
21use std::vec::IntoIter;
22
23pub struct MyVec1(Vec<f32>);
26
27impl Add for MyVec1 {
28 type Output = Map<Zip<IntoIter<f32>, IntoIter<f32>>, fn((f32, f32)) -> f32>;
29 fn add(self, rhs: MyVec1) -> Self::Output {
30 self.0.into_iter().zip(rhs.0).map(|(x, y)| x + y)
31 }
32}
33
34
35
36impl Add<&Self> for Series {
39 type Output = Series;
40 fn add(self, rhs: &Self) -> Self::Output {
41 if let (Series::f32(mut data1), Series::f32(data2)) = (self, rhs) {
42 data1.iter_mut()
43 .zip(data2.iter())
44 .for_each(|(x, y)| *x += y);
45 Series::f32(data1)
46 } else {
47 panic!("dddd")
48 }
49 }
50}
51
52impl Add<f32> for Series {
53 type Output = Series;
54 fn add(self, rhs: f32) -> Self::Output {
55 if let Series::f32(mut data1) = self {
56 data1.iter_mut()
57 .for_each(|x| *x += rhs);
58 Series::f32(data1)
59 } else {
60 panic!("dddd")
61 }
62 }
63}
64
65impl FromIterator<f32> for Series {
66 fn from_iter<T: IntoIterator<Item = f32>>(iter: T) -> Self {
67 let mut res_vec = vec![];
68 for x in iter {
69 res_vec.push(x);
70 }
71 Series::f32(res_vec)
72 }
73}
74
75impl Series {
76 pub fn iter(&self) -> std::slice::Iter<'_, f32> {
77 if let Series::f32(data) = self {
78 data.iter()
79 } else {
80 panic!("expect f32")
81 }
82 }
83}