[−][src]Struct math::iter::binned_interval_iter::BinnedIntervalIter
With imaginary bins of size bin_size and aligned at 0,
returns a value for each bin that intersects one or more intervals from
the original iterator iter, where the value at each intersection is
obtained by applying the operation specified by the aggregate_op for
all the overlapping intervals and their associated values, where the value
of each overlapping interval is multiplied by the length of the interval if
the aggregate_op is Sum.
Panics
The iterator will panic if the intervals returned by the original iter are
not disjoint or increasing.
Example
use math::{ interval::I64Interval, iter::binned_interval_iter::{AggregateOp, IntoBinnedIntervalIter}, partition::integer_interval_map::IntegerIntervalMap, }; let bin_size = 5; let mut interval_map = IntegerIntervalMap::new(); interval_map.aggregate(I64Interval::new(-1, 1), 2); interval_map.aggregate(I64Interval::new(14, 17), -1); // interval coordinates | value // -1 | 0 1 | ... | | | +2 // | | ... | 14 | 15 16 17 | -1 //--------------------------------------------- // 0.4|| 0.8 || ... || -0.2 || -0.6 | bin average // 2 || 4 || ... || -1 || -3 | bin sum // 2 || 2 || ... || -1 || -1 | bin max // 2 || 2 || ... || -1 || -1 | bin min assert_eq!( interval_map .iter() .into_binned_interval_iter( bin_size, AggregateOp::Average, Box::new(|(&interval, &val)| (interval, val as f64)) ) .collect::<Vec<(I64Interval, f64)>>(), vec![ (I64Interval::new(-5, -1), 0.4), (I64Interval::new(0, 4), 0.8), (I64Interval::new(10, 14), -0.2), (I64Interval::new(15, 19), -0.6), ] ); assert_eq!( interval_map .iter() .into_binned_interval_iter( bin_size, AggregateOp::Sum, Box::new(|(&interval, &val)| (interval, val)) ) .collect::<Vec<(I64Interval, i32)>>(), vec![ (I64Interval::new(-5, -1), 2), (I64Interval::new(0, 4), 4), (I64Interval::new(10, 14), -1), (I64Interval::new(15, 19), -3), ] ); assert_eq!( interval_map .iter() .into_binned_interval_iter( bin_size, AggregateOp::Max, Box::new(|(&interval, &val)| (interval, val)) ) .collect::<Vec<(I64Interval, i32)>>(), vec![ (I64Interval::new(-5, -1), 2), (I64Interval::new(0, 4), 2), (I64Interval::new(10, 14), -1), (I64Interval::new(15, 19), -1), ] ); assert_eq!( interval_map .iter() .into_binned_interval_iter( bin_size, AggregateOp::Min, Box::new(|(&interval, &val)| (interval, val)) ) .collect::<Vec<(I64Interval, i32)>>(), vec![ (I64Interval::new(-5, -1), 2), (I64Interval::new(0, 4), 2), (I64Interval::new(10, 14), -1), (I64Interval::new(15, 19), -1), ] );
Implementations
impl<I, V> BinnedIntervalIter<I, V> where
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd, [src]
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd,
pub fn new(
iter: I,
bin_size: i64,
aggregate_op: AggregateOp,
iter_item_interval_value_extractor: Box<dyn Fn(<I as Iterator>::Item) -> (I64Interval, V)>
) -> Self[src]
iter: I,
bin_size: i64,
aggregate_op: AggregateOp,
iter_item_interval_value_extractor: Box<dyn Fn(<I as Iterator>::Item) -> (I64Interval, V)>
) -> Self
Trait Implementations
impl<I, V> CommonRefinementZip<i64, (ContiguousIntegerSet<i64>, V), ContiguousIntegerSet<i64>, V> for BinnedIntervalIter<I, V> where
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd, [src]
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd,
pub fn get_interval_value_extractor(
&self
) -> Box<dyn Fn(Self::Item) -> (I64Interval, V)>[src]
&self
) -> Box<dyn Fn(Self::Item) -> (I64Interval, V)>
pub fn common_refinement_zip(
self,
other: Self
) -> CommonRefinementZipped<B, Self, X, P, V>ⓘ[src]
self,
other: Self
) -> CommonRefinementZipped<B, Self, X, P, V>ⓘ
pub fn into_common_refinement_zipped(
self
) -> CommonRefinementZipped<B, Self, X, P, V>ⓘ[src]
self
) -> CommonRefinementZipped<B, Self, X, P, V>ⓘ
impl<I, V> Iterator for BinnedIntervalIter<I, V> where
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd, [src]
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd,
type Item = (I64Interval, V)
The type of the elements being iterated over.
pub fn next(&mut self) -> Option<Self::Item>[src]
After every iteration, self.current_bin can be
None: indicating that the current interval has not been processed at allSome: indicating the last used bin
and self.current_interval_val can be
None: indicating that all the intervals have been processedSome: indicating that the current interval still has unprocessed elements
panics: if the intervals returned by the original iter are not
disjoint or increasing.
pub fn size_hint(&self) -> (usize, Option<usize>)1.0.0[src]
pub fn count(self) -> usize1.0.0[src]
pub fn last(self) -> Option<Self::Item>1.0.0[src]
pub fn advance_by(&mut self, n: usize) -> Result<(), usize>[src]
pub fn nth(&mut self, n: usize) -> Option<Self::Item>1.0.0[src]
pub fn step_by(self, step: usize) -> StepBy<Self>1.28.0[src]
pub fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter> where
U: IntoIterator<Item = Self::Item>, 1.0.0[src]
U: IntoIterator<Item = Self::Item>,
pub fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter> where
U: IntoIterator, 1.0.0[src]
U: IntoIterator,
pub fn map<B, F>(self, f: F) -> Map<Self, F> where
F: FnMut(Self::Item) -> B, 1.0.0[src]
F: FnMut(Self::Item) -> B,
pub fn for_each<F>(self, f: F) where
F: FnMut(Self::Item), 1.21.0[src]
F: FnMut(Self::Item),
pub fn filter<P>(self, predicate: P) -> Filter<Self, P> where
P: FnMut(&Self::Item) -> bool, 1.0.0[src]
P: FnMut(&Self::Item) -> bool,
pub fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F> where
F: FnMut(Self::Item) -> Option<B>, 1.0.0[src]
F: FnMut(Self::Item) -> Option<B>,
pub fn enumerate(self) -> Enumerate<Self>1.0.0[src]
pub fn peekable(self) -> Peekable<Self>1.0.0[src]
pub fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P> where
P: FnMut(&Self::Item) -> bool, 1.0.0[src]
P: FnMut(&Self::Item) -> bool,
pub fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P> where
P: FnMut(&Self::Item) -> bool, 1.0.0[src]
P: FnMut(&Self::Item) -> bool,
pub fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P> where
P: FnMut(Self::Item) -> Option<B>, [src]
P: FnMut(Self::Item) -> Option<B>,
pub fn skip(self, n: usize) -> Skip<Self>1.0.0[src]
pub fn take(self, n: usize) -> Take<Self>1.0.0[src]
pub fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F> where
F: FnMut(&mut St, Self::Item) -> Option<B>, 1.0.0[src]
F: FnMut(&mut St, Self::Item) -> Option<B>,
pub fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F> where
F: FnMut(Self::Item) -> U,
U: IntoIterator, 1.0.0[src]
F: FnMut(Self::Item) -> U,
U: IntoIterator,
pub fn flatten(self) -> Flatten<Self> where
Self::Item: IntoIterator, 1.29.0[src]
Self::Item: IntoIterator,
pub fn fuse(self) -> Fuse<Self>1.0.0[src]
pub fn inspect<F>(self, f: F) -> Inspect<Self, F> where
F: FnMut(&Self::Item), 1.0.0[src]
F: FnMut(&Self::Item),
pub fn by_ref(&mut self) -> &mut Self1.0.0[src]
#[must_use =
"if you really need to exhaust the iterator, consider `.for_each(drop)` instead"]pub fn collect<B>(self) -> B where
B: FromIterator<Self::Item>, 1.0.0[src]
B: FromIterator<Self::Item>,
pub fn partition<B, F>(self, f: F) -> (B, B) where
B: Default + Extend<Self::Item>,
F: FnMut(&Self::Item) -> bool, 1.0.0[src]
B: Default + Extend<Self::Item>,
F: FnMut(&Self::Item) -> bool,
pub fn partition_in_place<'a, T, P>(self, predicate: P) -> usize where
P: FnMut(&T) -> bool,
Self: DoubleEndedIterator<Item = &'a mut T>,
T: 'a, [src]
P: FnMut(&T) -> bool,
Self: DoubleEndedIterator<Item = &'a mut T>,
T: 'a,
pub fn is_partitioned<P>(self, predicate: P) -> bool where
P: FnMut(Self::Item) -> bool, [src]
P: FnMut(Self::Item) -> bool,
pub fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R where
F: FnMut(B, Self::Item) -> R,
R: Try<Ok = B>, 1.27.0[src]
F: FnMut(B, Self::Item) -> R,
R: Try<Ok = B>,
pub fn try_for_each<F, R>(&mut self, f: F) -> R where
F: FnMut(Self::Item) -> R,
R: Try<Ok = ()>, 1.27.0[src]
F: FnMut(Self::Item) -> R,
R: Try<Ok = ()>,
pub fn fold<B, F>(self, init: B, f: F) -> B where
F: FnMut(B, Self::Item) -> B, 1.0.0[src]
F: FnMut(B, Self::Item) -> B,
pub fn fold_first<F>(self, f: F) -> Option<Self::Item> where
F: FnMut(Self::Item, Self::Item) -> Self::Item, [src]
F: FnMut(Self::Item, Self::Item) -> Self::Item,
pub fn all<F>(&mut self, f: F) -> bool where
F: FnMut(Self::Item) -> bool, 1.0.0[src]
F: FnMut(Self::Item) -> bool,
pub fn any<F>(&mut self, f: F) -> bool where
F: FnMut(Self::Item) -> bool, 1.0.0[src]
F: FnMut(Self::Item) -> bool,
pub fn find<P>(&mut self, predicate: P) -> Option<Self::Item> where
P: FnMut(&Self::Item) -> bool, 1.0.0[src]
P: FnMut(&Self::Item) -> bool,
pub fn find_map<B, F>(&mut self, f: F) -> Option<B> where
F: FnMut(Self::Item) -> Option<B>, 1.30.0[src]
F: FnMut(Self::Item) -> Option<B>,
pub fn try_find<F, R>(
&mut self,
f: F
) -> Result<Option<Self::Item>, <R as Try>::Error> where
F: FnMut(&Self::Item) -> R,
R: Try<Ok = bool>, [src]
&mut self,
f: F
) -> Result<Option<Self::Item>, <R as Try>::Error> where
F: FnMut(&Self::Item) -> R,
R: Try<Ok = bool>,
pub fn position<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool, 1.0.0[src]
P: FnMut(Self::Item) -> bool,
pub fn rposition<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool,
Self: ExactSizeIterator + DoubleEndedIterator, 1.0.0[src]
P: FnMut(Self::Item) -> bool,
Self: ExactSizeIterator + DoubleEndedIterator,
pub fn max(self) -> Option<Self::Item> where
Self::Item: Ord, 1.0.0[src]
Self::Item: Ord,
pub fn min(self) -> Option<Self::Item> where
Self::Item: Ord, 1.0.0[src]
Self::Item: Ord,
pub fn max_by_key<B, F>(self, f: F) -> Option<Self::Item> where
B: Ord,
F: FnMut(&Self::Item) -> B, 1.6.0[src]
B: Ord,
F: FnMut(&Self::Item) -> B,
pub fn max_by<F>(self, compare: F) -> Option<Self::Item> where
F: FnMut(&Self::Item, &Self::Item) -> Ordering, 1.15.0[src]
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
pub fn min_by_key<B, F>(self, f: F) -> Option<Self::Item> where
B: Ord,
F: FnMut(&Self::Item) -> B, 1.6.0[src]
B: Ord,
F: FnMut(&Self::Item) -> B,
pub fn min_by<F>(self, compare: F) -> Option<Self::Item> where
F: FnMut(&Self::Item, &Self::Item) -> Ordering, 1.15.0[src]
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
pub fn rev(self) -> Rev<Self> where
Self: DoubleEndedIterator, 1.0.0[src]
Self: DoubleEndedIterator,
pub fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) where
FromA: Default + Extend<A>,
FromB: Default + Extend<B>,
Self: Iterator<Item = (A, B)>, 1.0.0[src]
FromA: Default + Extend<A>,
FromB: Default + Extend<B>,
Self: Iterator<Item = (A, B)>,
pub fn copied<'a, T>(self) -> Copied<Self> where
Self: Iterator<Item = &'a T>,
T: 'a + Copy, 1.36.0[src]
Self: Iterator<Item = &'a T>,
T: 'a + Copy,
pub fn cloned<'a, T>(self) -> Cloned<Self> where
Self: Iterator<Item = &'a T>,
T: 'a + Clone, 1.0.0[src]
Self: Iterator<Item = &'a T>,
T: 'a + Clone,
pub fn cycle(self) -> Cycle<Self> where
Self: Clone, 1.0.0[src]
Self: Clone,
pub fn sum<S>(self) -> S where
S: Sum<Self::Item>, 1.11.0[src]
S: Sum<Self::Item>,
pub fn product<P>(self) -> P where
P: Product<Self::Item>, 1.11.0[src]
P: Product<Self::Item>,
pub fn cmp<I>(self, other: I) -> Ordering where
I: IntoIterator<Item = Self::Item>,
Self::Item: Ord, 1.5.0[src]
I: IntoIterator<Item = Self::Item>,
Self::Item: Ord,
pub fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
I: IntoIterator, [src]
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
I: IntoIterator,
pub fn partial_cmp<I>(self, other: I) -> Option<Ordering> where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>, 1.5.0[src]
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
pub fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering> where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
I: IntoIterator, [src]
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
I: IntoIterator,
pub fn eq<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>, 1.5.0[src]
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
pub fn eq_by<I, F>(self, other: I, eq: F) -> bool where
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
I: IntoIterator, [src]
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
I: IntoIterator,
pub fn ne<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>, 1.5.0[src]
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
pub fn lt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>, 1.5.0[src]
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
pub fn le<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>, 1.5.0[src]
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
pub fn gt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>, 1.5.0[src]
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
pub fn ge<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>, 1.5.0[src]
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
pub fn is_sorted(self) -> bool where
Self::Item: PartialOrd<Self::Item>, [src]
Self::Item: PartialOrd<Self::Item>,
pub fn is_sorted_by<F>(self, compare: F) -> bool where
F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>, [src]
F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,
pub fn is_sorted_by_key<F, K>(self, f: F) -> bool where
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>, [src]
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>,
Auto Trait Implementations
impl<I, V> !RefUnwindSafe for BinnedIntervalIter<I, V>
impl<I, V> !Send for BinnedIntervalIter<I, V>
impl<I, V> !Sync for BinnedIntervalIter<I, V>
impl<I, V> Unpin for BinnedIntervalIter<I, V> where
I: Unpin,
V: Unpin,
I: Unpin,
V: Unpin,
impl<I, V> !UnwindSafe for BinnedIntervalIter<I, V>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<I, V> IntoBinnedIntervalIter<V> for I where
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd<V>, [src]
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd<V>,
pub fn into_binned_interval_iter(
Self,
i64,
AggregateOp,
Box<dyn Fn(<I as Iterator>::Item) + 'static, Global>
) -> BinnedIntervalIter<I, V>ⓘNotable traits for BinnedIntervalIter<I, V>
impl<I, V> Iterator for BinnedIntervalIter<I, V> where
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd, type Item = (I64Interval, V);[src]
Self,
i64,
AggregateOp,
Box<dyn Fn(<I as Iterator>::Item) + 'static, Global>
) -> BinnedIntervalIter<I, V>ⓘ
Notable traits for BinnedIntervalIter<I, V>
impl<I, V> Iterator for BinnedIntervalIter<I, V> where
I: Iterator,
V: Copy + Num + FromPrimitive + PartialOrd, type Item = (I64Interval, V);impl<I> IntoConcatIter for I where
I: Iterator, [src]
I: Iterator,
pub fn into_concat_iter(self, other: Self) -> ConcatenatedIter<Self>ⓘNotable traits for ConcatenatedIter<I>
impl<I: Iterator> Iterator for ConcatenatedIter<I> type Item = <I as Iterator>::Item;[src]
Notable traits for ConcatenatedIter<I>
impl<I: Iterator> Iterator for ConcatenatedIter<I> type Item = <I as Iterator>::Item;impl<I> IntoFlatZipIter<I> for I where
I: Iterator, [src]
I: Iterator,
pub fn flat_zip(Self, I) -> FlatZipIter<I>ⓘNotable traits for FlatZipIter<I>
impl<I: Iterator> Iterator for FlatZipIter<I> type Item = Vec<<I as Iterator>::Item>;[src]
Notable traits for FlatZipIter<I>
impl<I: Iterator> Iterator for FlatZipIter<I> type Item = Vec<<I as Iterator>::Item>;impl<I> IntoIterator for I where
I: Iterator, [src]
I: Iterator,
type Item = <I as Iterator>::Item
The type of the elements being iterated over.
type IntoIter = I
Which kind of iterator are we turning this into?
pub fn into_iter(self) -> I[src]
impl<I> IteratorRandom for I where
I: Iterator, [src]
I: Iterator,
pub fn choose<R>(self, rng: &mut R) -> Option<Self::Item> where
R: Rng + ?Sized, [src]
R: Rng + ?Sized,
pub fn choose_multiple_fill<R>(
self,
rng: &mut R,
buf: &mut [Self::Item]
) -> usize where
R: Rng + ?Sized, [src]
self,
rng: &mut R,
buf: &mut [Self::Item]
) -> usize where
R: Rng + ?Sized,
pub fn choose_multiple<R>(
self,
rng: &mut R,
amount: usize
) -> Vec<Self::Item, Global> where
R: Rng + ?Sized, [src]
self,
rng: &mut R,
amount: usize
) -> Vec<Self::Item, Global> where
R: Rng + ?Sized,
impl<T> Pointable for T
pub const ALIGN: usize
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
pub unsafe fn drop(ptr: usize)
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,