pub struct ColIndexMapping {
target_size: usize,
map: Vec<Option<usize>>,
}Expand description
ColIndexMapping is a partial mapping from usize to usize.
It is used in optimizer for transformation of column index.
Fields§
§target_size: usizeThe size of the target space, i.e. target index is in the range (0..target_size).
map: Vec<Option<usize>>Each subscript is mapped to the corresponding element.
Implementations§
Source§impl ColIndexMapping
impl ColIndexMapping
Sourcepub fn new(map: Vec<Option<usize>>, target_size: usize) -> Self
pub fn new(map: Vec<Option<usize>>, target_size: usize) -> Self
Create a partial mapping which maps from the subscripts range (0..map.len()) to
(0..target_size). Each subscript is mapped to the corresponding element.
pub fn into_parts(self) -> (Vec<Option<usize>>, usize)
pub fn to_parts(&self) -> (&[Option<usize>], usize)
pub fn put(&mut self, src: usize, tar: Option<usize>)
pub fn identity(size: usize) -> Self
pub fn is_identity(&self) -> bool
pub fn identity_or_none(source_size: usize, target_size: usize) -> Self
pub fn empty(source_size: usize, target_size: usize) -> Self
Sourcepub fn with_shift_offset(source_num: usize, offset: isize) -> Self
pub fn with_shift_offset(source_num: usize, offset: isize) -> Self
Create a partial mapping which maps range (0..source_num) to range
(offset..offset+source_num).
§Examples
Positive offset:
let mapping = ColIndexMapping::with_shift_offset(3, 3);
assert_eq!(mapping.map(0), 3);
assert_eq!(mapping.map(1), 4);
assert_eq!(mapping.map(2), 5);Negative offset:
let mapping = ColIndexMapping::with_shift_offset(6, -3);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(1), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.map(3), 0);
assert_eq!(mapping.map(4), 1);
assert_eq!(mapping.map(5), 2);
assert_eq!(mapping.try_map(6), None);Sourcepub fn with_remaining_columns(cols: &[usize], src_size: usize) -> Self
pub fn with_remaining_columns(cols: &[usize], src_size: usize) -> Self
Maps the smallest index to 0, the next smallest to 1, and so on.
It is useful for column pruning.
§Examples
let mut remaining_cols = vec![1, 3];
let mapping = ColIndexMapping::with_remaining_columns(&remaining_cols, 4);
assert_eq!(mapping.map(1), 0);
assert_eq!(mapping.map(3), 1);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.try_map(4), None);pub fn with_included_columns(cols: &[usize], src_size: usize) -> Self
Sourcepub fn with_removed_columns(cols: &[usize], src_size: usize) -> Self
pub fn with_removed_columns(cols: &[usize], src_size: usize) -> Self
Remove the given columns, and maps the remaining columns to a consecutive range starting from 0.
§Examples
let mut removed_cols = vec![0, 2, 4];
let mapping = ColIndexMapping::with_removed_columns(&removed_cols, 5);
assert_eq!(mapping.map(1), 0);
assert_eq!(mapping.map(3), 1);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.try_map(4), None);Sourcepub fn composite(&self, following: &Self) -> Self
pub fn composite(&self, following: &Self) -> Self
Compose column index mappings.
For example if this maps 0->5,
and following maps 5->1,
Then the composite has 0->5->1 => 0->1.
pub fn clone_with_offset(&self, offset: usize) -> Self
Sourcepub fn union(&self, other: &Self) -> Self
pub fn union(&self, other: &Self) -> Self
Union two mapping, the result mapping target_size and source size will be the max size
of the two mappings.
§Panics
Will panic if a source appears in both to mapping
Sourcepub fn inverse(&self) -> Option<Self>
pub fn inverse(&self) -> Option<Self>
Inverse the mapping. If a target corresponds to more than one source, return None.
Sourcepub fn mapping_pairs(&self) -> impl Iterator<Item = (usize, usize)> + '_
pub fn mapping_pairs(&self) -> impl Iterator<Item = (usize, usize)> + '_
return iter of (src, dst) order by src
Sourcepub fn try_map(&self, index: usize) -> Option<usize>
pub fn try_map(&self, index: usize) -> Option<usize>
Try mapping the source index to the target index.
Sourcepub fn try_map_all(
&self,
indices: impl IntoIterator<Item = usize>,
) -> Option<Vec<usize>>
pub fn try_map_all( &self, indices: impl IntoIterator<Item = usize>, ) -> Option<Vec<usize>>
Try mapping all the source indices to the target indices. Returns None if any of the
indices is not mapped.
Sourcepub fn map(&self, index: usize) -> usize
pub fn map(&self, index: usize) -> usize
§Panics
Will panic if index >= self.source_size() or index is not mapped.
Sourcepub fn target_size(&self) -> usize
pub fn target_size(&self) -> usize
Returns the size of the target range. Target index is in the range (0..target_size).
Sourcepub fn source_size(&self) -> usize
pub fn source_size(&self) -> usize
Returns the size of the source range. Source index is in the range (0..source_size).
pub fn is_empty(&self) -> bool
pub fn is_injective(&self) -> bool
Source§impl ColIndexMapping
impl ColIndexMapping
pub fn to_protobuf(&self) -> PbColIndexMapping
pub fn from_protobuf(prost: &PbColIndexMapping) -> ColIndexMapping
Trait Implementations§
Source§impl Clone for ColIndexMapping
impl Clone for ColIndexMapping
Source§fn clone(&self) -> ColIndexMapping
fn clone(&self) -> ColIndexMapping
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ColIndexMapping
impl Debug for ColIndexMapping
Source§impl Hash for ColIndexMapping
impl Hash for ColIndexMapping
Source§impl PartialEq for ColIndexMapping
impl PartialEq for ColIndexMapping
impl Eq for ColIndexMapping
impl StructuralPartialEq for ColIndexMapping
Auto Trait Implementations§
impl Freeze for ColIndexMapping
impl RefUnwindSafe for ColIndexMapping
impl Send for ColIndexMapping
impl Sync for ColIndexMapping
impl Unpin for ColIndexMapping
impl UnwindSafe for ColIndexMapping
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level].§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n].§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n] with metric_level set to
MetricLevel::Debug and relabel_num set to 1.§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SameOrElseExt for Twhere
T: Eq,
impl<T> SameOrElseExt for Twhere
T: Eq,
Source§fn same_or_else(self, other: T, f: impl FnOnce() -> T) -> T
fn same_or_else(self, other: T, f: impl FnOnce() -> T) -> T
self and other are equal, if so, return self, otherwise return the result of f().§impl<T> Scope for T
impl<T> Scope for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.