release 0.5.4
This commit is contained in:
@@ -2,7 +2,6 @@ use super::aggregator::AggTimeWeightOutputAvg;
|
||||
use super::aggregator::AggregatorNumeric;
|
||||
use super::aggregator::AggregatorTimeWeight;
|
||||
use super::timeweight::timeweight_events_dyn::BinnedEventsTimeweightDynbox;
|
||||
use super::___;
|
||||
use core::fmt;
|
||||
use err::thiserror;
|
||||
use err::ThisError;
|
||||
@@ -123,20 +122,6 @@ where
|
||||
vals: <EVT as EventValueType>::Container,
|
||||
}
|
||||
|
||||
macro_rules! try_to_events_dim0 {
|
||||
($sty:ty, $this:expr) => {
|
||||
let this = $this;
|
||||
if let Some(evs) = this.as_any_ref().downcast_ref::<ContainerEvents<$sty>>() {
|
||||
use crate::eventsdim0::EventsDim0;
|
||||
let tss: VecDeque<_> = this.tss.iter().map(|x| x.ns()).collect();
|
||||
let pulses = tss.iter().map(|_| 0).collect();
|
||||
let values = evs.vals.clone();
|
||||
let ret = EventsDim0::<$sty> { tss, pulses, values };
|
||||
return Box::new(ret);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
impl<EVT> ContainerEvents<EVT>
|
||||
where
|
||||
EVT: EventValueType,
|
||||
@@ -193,12 +178,6 @@ where
|
||||
self.tss.push_back(ts);
|
||||
self.vals.push_back(val);
|
||||
}
|
||||
|
||||
pub fn to_events_dim0(&self) -> Box<dyn items_0::Events> {
|
||||
try_to_events_dim0!(f64, self);
|
||||
let styn = any::type_name::<EVT>();
|
||||
todo!("TODO to_container_events for {styn}")
|
||||
}
|
||||
}
|
||||
|
||||
impl<EVT> fmt::Debug for ContainerEvents<EVT>
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
use crate::binsdim0::BinsDim0;
|
||||
use crate::timebin::ChooseIndicesForTimeBin;
|
||||
use crate::timebin::ChooseIndicesForTimeBinEvents;
|
||||
use crate::timebin::TimeAggregatorCommonV0Func;
|
||||
use crate::timebin::TimeAggregatorCommonV0Trait;
|
||||
use crate::IsoDateTime;
|
||||
use err::Error;
|
||||
use items_0::collect_s::CollectableDyn;
|
||||
@@ -12,7 +7,6 @@ use items_0::collect_s::ToJsonResult;
|
||||
use items_0::container::ByteEstimate;
|
||||
use items_0::overlap::HasTimestampDeque;
|
||||
use items_0::scalar_ops::ScalarOps;
|
||||
use items_0::AppendAllFrom;
|
||||
use items_0::Appendable;
|
||||
use items_0::AsAnyMut;
|
||||
use items_0::AsAnyRef;
|
||||
@@ -220,16 +214,6 @@ impl<STY: ScalarOps> HasTimestampDeque for EventsDim0<STY> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<STY> ChooseIndicesForTimeBin for EventsDim0<STY> {
|
||||
fn choose_indices_unweight(&self, beg: u64, end: u64) -> (Option<usize>, usize, usize) {
|
||||
ChooseIndicesForTimeBinEvents::choose_unweight(beg, end, &self.tss)
|
||||
}
|
||||
|
||||
fn choose_indices_timeweight(&self, beg: u64, end: u64) -> (Option<usize>, usize, usize) {
|
||||
ChooseIndicesForTimeBinEvents::choose_timeweight(beg, end, &self.tss)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct EventsDim0ChunkOutput<STY> {
|
||||
tss: VecDeque<u64>,
|
||||
@@ -855,33 +839,6 @@ mod test_frame {
|
||||
panic!()
|
||||
};
|
||||
assert_eq!(item.tss(), &[123]);
|
||||
#[cfg(DISABLED)]
|
||||
{
|
||||
eprintln!("NOW WE SEE: {:?}", item);
|
||||
// type_name_of_val alloc::boxed::Box<dyn items_0::Events>
|
||||
eprintln!("0 {:22?}", item.as_any_mut().type_id());
|
||||
eprintln!("A {:22?}", std::any::TypeId::of::<Box<dyn items_0::Events>>());
|
||||
eprintln!("B {:22?}", std::any::TypeId::of::<dyn items_0::Events>());
|
||||
eprintln!("C {:22?}", std::any::TypeId::of::<&dyn items_0::Events>());
|
||||
eprintln!("D {:22?}", std::any::TypeId::of::<&mut dyn items_0::Events>());
|
||||
eprintln!("E {:22?}", std::any::TypeId::of::<&mut Box<dyn items_0::Events>>());
|
||||
eprintln!("F {:22?}", std::any::TypeId::of::<Box<EventsDim0<f32>>>());
|
||||
eprintln!("G {:22?}", std::any::TypeId::of::<&EventsDim0<f32>>());
|
||||
eprintln!("H {:22?}", std::any::TypeId::of::<&mut EventsDim0<f32>>());
|
||||
eprintln!("I {:22?}", std::any::TypeId::of::<Box<Box<EventsDim0<f32>>>>());
|
||||
//let item = item.as_mut();
|
||||
//eprintln!("1 {:22?}", item.type_id());
|
||||
/*
|
||||
let item = if let Some(item) =
|
||||
items_0::collect_s::Collectable::as_any_mut(item).downcast_ref::<Box<EventsDim0<f32>>>()
|
||||
{
|
||||
item
|
||||
} else {
|
||||
panic!()
|
||||
};
|
||||
*/
|
||||
//eprintln!("Final value: {item:?}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ pub mod streams;
|
||||
#[cfg(test)]
|
||||
pub mod test;
|
||||
pub mod testgen;
|
||||
pub mod timebin;
|
||||
pub mod transform;
|
||||
|
||||
use channelevents::ChannelEvents;
|
||||
|
||||
@@ -1,139 +0,0 @@
|
||||
use items_0::AppendEmptyBin;
|
||||
use items_0::Empty;
|
||||
use items_0::HasNonemptyFirstBin;
|
||||
use items_0::WithLen;
|
||||
use netpod::log::*;
|
||||
use netpod::range::evrange::SeriesRange;
|
||||
use std::any;
|
||||
use std::collections::VecDeque;
|
||||
use std::ops::Range;
|
||||
|
||||
#[allow(unused)]
|
||||
macro_rules! trace_init { ($($arg:tt)*) => ( if true { trace!($($arg)*); }) }
|
||||
|
||||
#[allow(unused)]
|
||||
macro_rules! trace_ingest_item { ($($arg:tt)*) => ( if true { trace!($($arg)*); }) }
|
||||
|
||||
#[allow(unused)]
|
||||
macro_rules! trace_ingest_event { ($($arg:tt)*) => ( if false { trace!($($arg)*); }) }
|
||||
|
||||
#[allow(unused)]
|
||||
macro_rules! trace_ingest_detail { ($($arg:tt)*) => ( if true { trace!($($arg)*); }) }
|
||||
|
||||
pub trait ChooseIndicesForTimeBin {
|
||||
fn choose_indices_unweight(&self, beg: u64, end: u64) -> (Option<usize>, usize, usize);
|
||||
fn choose_indices_timeweight(&self, beg: u64, end: u64) -> (Option<usize>, usize, usize);
|
||||
}
|
||||
|
||||
pub struct ChooseIndicesForTimeBinEvents {}
|
||||
|
||||
impl ChooseIndicesForTimeBinEvents {
|
||||
pub fn choose_unweight(beg: u64, end: u64, tss: &VecDeque<u64>) -> (Option<usize>, usize, usize) {
|
||||
// TODO improve via binary search.
|
||||
let mut one_before = None;
|
||||
let mut j = 0;
|
||||
let mut k = tss.len();
|
||||
for (i1, &ts) in tss.iter().enumerate() {
|
||||
if ts >= end {
|
||||
break;
|
||||
} else if ts >= beg {
|
||||
} else {
|
||||
one_before = Some(i1);
|
||||
j = i1 + 1;
|
||||
}
|
||||
}
|
||||
(one_before, j, k)
|
||||
}
|
||||
|
||||
pub fn choose_timeweight(beg: u64, end: u64, tss: &VecDeque<u64>) -> (Option<usize>, usize, usize) {
|
||||
let self_name = "choose_timeweight";
|
||||
// TODO improve via binary search.
|
||||
let mut one_before = None;
|
||||
let mut j = 0;
|
||||
let mut k = tss.len();
|
||||
for (i1, &ts) in tss.iter().enumerate() {
|
||||
if ts >= end {
|
||||
trace_ingest_event!("{self_name} ingest {:6} {:20} AFTER", i1, ts);
|
||||
// TODO count all the ignored events for stats
|
||||
k = i1;
|
||||
break;
|
||||
} else if ts >= beg {
|
||||
trace_ingest_event!("{self_name} ingest {:6} {:20} INSIDE", i1, ts);
|
||||
} else {
|
||||
trace_ingest_event!("{self_name} ingest {:6} {:20} BEFORE", i1, ts);
|
||||
one_before = Some(i1);
|
||||
j = i1 + 1;
|
||||
}
|
||||
}
|
||||
trace_ingest_item!("{self_name} chosen {one_before:?} {j:?} {k:?}");
|
||||
(one_before, j, k)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait TimeAggregatorCommonV0Trait {
|
||||
type Input: WithLen + ChooseIndicesForTimeBin + 'static;
|
||||
type Output: WithLen + Empty + AppendEmptyBin + HasNonemptyFirstBin + 'static;
|
||||
fn type_name() -> &'static str;
|
||||
fn common_range_current(&self) -> &SeriesRange;
|
||||
fn common_ingest_unweight_range(&mut self, item: &Self::Input, r: Range<usize>);
|
||||
fn common_ingest_one_before(&mut self, item: &Self::Input, j: usize);
|
||||
fn common_ingest_range(&mut self, item: &Self::Input, r: Range<usize>);
|
||||
}
|
||||
|
||||
pub struct TimeAggregatorCommonV0Func {}
|
||||
|
||||
impl TimeAggregatorCommonV0Func {
|
||||
pub fn ingest_unweight<B>(binner: &mut B, item: &B::Input)
|
||||
where
|
||||
B: TimeAggregatorCommonV0Trait,
|
||||
{
|
||||
let self_name = B::type_name();
|
||||
// TODO
|
||||
let items_seen = 777;
|
||||
trace_ingest_item!(
|
||||
"{self_name}::ingest_unweight item len {} items_seen {}",
|
||||
item.len(),
|
||||
items_seen
|
||||
);
|
||||
let rng = B::common_range_current(binner);
|
||||
if rng.is_time() {
|
||||
let beg = rng.beg_u64();
|
||||
let end = rng.end_u64();
|
||||
let (one_before, j, k) = item.choose_indices_unweight(beg, end);
|
||||
if let Some(j) = one_before {
|
||||
//<B as TimeAggregatorCommonV0Trait>::common_ingest_one_before(binner, item, j);
|
||||
}
|
||||
<B as TimeAggregatorCommonV0Trait>::common_ingest_unweight_range(binner, item, j..k);
|
||||
} else {
|
||||
error!("TODO ingest_unweight for pulse range");
|
||||
err::todo();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn ingest_time_weight<B>(binner: &mut B, item: &B::Input)
|
||||
where
|
||||
B: TimeAggregatorCommonV0Trait,
|
||||
{
|
||||
let self_name = B::type_name();
|
||||
// TODO
|
||||
let items_seen = 777;
|
||||
trace_ingest_item!(
|
||||
"{self_name}::ingest_time_weight item len {} items_seen {}",
|
||||
item.len(),
|
||||
items_seen
|
||||
);
|
||||
let rng = B::common_range_current(binner);
|
||||
if rng.is_time() {
|
||||
let beg = rng.beg_u64();
|
||||
let end = rng.end_u64();
|
||||
let (one_before, j, k) = item.choose_indices_timeweight(beg, end);
|
||||
if let Some(j) = one_before {
|
||||
<B as TimeAggregatorCommonV0Trait>::common_ingest_one_before(binner, item, j);
|
||||
}
|
||||
<B as TimeAggregatorCommonV0Trait>::common_ingest_range(binner, item, j..k);
|
||||
} else {
|
||||
error!("TODO ingest_time_weight for pulse range");
|
||||
err::todo();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user