Struct constriction::stream::model::LookupDecoderModel
source · pub struct LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, const PRECISION: usize>where
Probability: BitArray,{ /* private fields */ }Expand description
A tabularized DecoderModel that is optimized for fast decoding of i.i.d. symbols
You will usually want to use this type through one of the type aliases
SmallContiguousLookupDecoderModel or SmallNonContiguousLookupDecoderModel. See
these types for extended documentation and examples.
Implementations§
source§impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Symbol: Copy + Default,
impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Symbol: Copy + Default,
sourcepub fn from_symbols_and_floating_point_probabilities<F>(
symbols: &[Symbol],
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
pub fn from_symbols_and_floating_point_probabilities<F>(
symbols: &[Symbol],
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
Create a LookupDecoderModel over arbitrary symbols.
TODO: example
sourcepub fn from_symbols_and_nonzero_fixed_point_probabilities<S, P>(
symbols: S,
probabilities: P,
infer_last_probability: bool
) -> Result<Self, ()>where
S: IntoIterator<Item = Symbol>,
P: IntoIterator,
P::Item: Borrow<Probability>,
pub fn from_symbols_and_nonzero_fixed_point_probabilities<S, P>(
symbols: S,
probabilities: P,
infer_last_probability: bool
) -> Result<Self, ()>where
S: IntoIterator<Item = Symbol>,
P: IntoIterator,
P::Item: Borrow<Probability>,
Create a LookupDecoderModel over arbitrary symbols.
TODO: example
sourcepub fn from_iterable_entropy_model<'m, M>(model: &'m M) -> Selfwhere
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
pub fn from_iterable_entropy_model<'m, M>(model: &'m M) -> Selfwhere
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
TODO: test
source§impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Symbol: Copy + Default,
impl<Symbol, Probability, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Symbol: Copy + Default,
sourcepub fn from_floating_point_probabilities_contiguous<F>(
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
pub fn from_floating_point_probabilities_contiguous<F>(
probabilities: &[F]
) -> Result<Self, ()>where
F: FloatCore + Sum<F> + Into<f64>,
Probability: Into<f64> + AsPrimitive<usize>,
f64: AsPrimitive<Probability>,
usize: AsPrimitive<Probability>,
Create a LookupDecoderModel over a contiguous range of symbols.
TODO: example
sourcepub fn from_nonzero_fixed_point_probabilities_contiguous<I>(
probabilities: I,
infer_last_probability: bool
) -> Result<Self, ()>where
I: IntoIterator,
I::Item: Borrow<Probability>,
pub fn from_nonzero_fixed_point_probabilities_contiguous<I>(
probabilities: I,
infer_last_probability: bool
) -> Result<Self, ()>where
I: IntoIterator,
I::Item: Borrow<Probability>,
Create a LookupDecoderModel over a contiguous range of symbols using fixed point arighmetic.
Example
source§impl<Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
impl<Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
sourcepub fn as_view(
&self
) -> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<&[Probability]>, &[Probability], PRECISION>
pub fn as_view(
&self
) -> LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<&[Probability]>, &[Probability], PRECISION>
Makes a very cheap shallow copy of the model that can be used much like a shared reference.
The returned LookupDecoderModel implements Copy, which is a requirement for some
methods, such as Decode::decode_iid_symbols. These methods could also accept a
shared reference to a NonContiguousCategoricalDecoderModel (since all references
to entropy models are also entropy models, and all shared references implement
Copy), but passing a view instead may be slightly more efficient because it
avoids one level of dereferencing.
sourcepub fn as_contiguous_categorical(
&self
) -> ContiguousCategoricalEntropyModel<Probability, &[Probability], PRECISION>
pub fn as_contiguous_categorical(
&self
) -> ContiguousCategoricalEntropyModel<Probability, &[Probability], PRECISION>
TODO: documentation
sourcepub fn into_contiguous_categorical(
self
) -> ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>
pub fn into_contiguous_categorical(
self
) -> ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>
TODO: documentation
source§impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
sourcepub fn as_view(
&self
) -> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<&[(Probability, Symbol)]>, &[Probability], PRECISION>
pub fn as_view(
&self
) -> LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<&[(Probability, Symbol)]>, &[Probability], PRECISION>
Makes a very cheap shallow copy of the model that can be used much like a shared reference.
The returned LookupDecoderModel implements Copy, which is a requirement for some
methods, such as Decode::decode_iid_symbols. These methods could also accept a
shared reference to a NonContiguousCategoricalDecoderModel (since all references
to entropy models are also entropy models, and all shared references implement
Copy), but passing a view instead may be slightly more efficient because it
avoids one level of dereferencing.
Trait Implementations§
source§impl<Symbol: Clone, Probability, SymbolTable: Clone, LookupTable: Clone, const PRECISION: usize> Clone for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>where
Probability: BitArray + Clone,
impl<Symbol: Clone, Probability, SymbolTable: Clone, LookupTable: Clone, const PRECISION: usize> Clone for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>where
Probability: BitArray + Clone,
source§fn clone(
&self
) -> LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
fn clone(
&self
) -> LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl<Symbol: Debug, Probability, SymbolTable: Debug, LookupTable: Debug, const PRECISION: usize> Debug for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>where
Probability: BitArray + Debug,
impl<Symbol: Debug, Probability, SymbolTable: Debug, LookupTable: Debug, const PRECISION: usize> Debug for LookupDecoderModel<Symbol, Probability, SymbolTable, LookupTable, PRECISION>where
Probability: BitArray + Debug,
source§impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> DecoderModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
Table: SymbolTable<Symbol, Probability>,
LookupTable: AsRef<[Probability]>,
Symbol: Clone,
impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> DecoderModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
Table: SymbolTable<Symbol, Probability>,
LookupTable: AsRef<[Probability]>,
Symbol: Clone,
source§fn quantile_function(
&self,
quantile: Probability
) -> (Symbol, Probability, Probability::NonZero)
fn quantile_function(
&self,
quantile: Probability
) -> (Symbol, Probability, Probability::NonZero)
source§impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> EntropyModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
impl<Symbol, Probability, Table, LookupTable, const PRECISION: usize> EntropyModel<PRECISION> for LookupDecoderModel<Symbol, Probability, Table, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
source§impl<'m, Probability, Table, const PRECISION: usize> From<&'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
impl<'m, Probability, Table, const PRECISION: usize> From<&'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Vec<Probability>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
source§fn from(
model: &'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>
) -> Self
fn from(
model: &'m ContiguousCategoricalEntropyModel<Probability, Table, PRECISION>
) -> Self
source§impl<'m, Symbol, Probability, M, const PRECISION: usize> From<&'m M> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
Symbol: Copy + Default,
usize: AsPrimitive<Probability>,
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
impl<'m, Symbol, Probability, M, const PRECISION: usize> From<&'m M> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Vec<(Probability, Symbol)>>, Box<[Probability]>, PRECISION>where
Probability: BitArray + Into<usize>,
Symbol: Copy + Default,
usize: AsPrimitive<Probability>,
M: IterableEntropyModel<'m, PRECISION, Symbol = Symbol, Probability = Probability> + ?Sized,
source§impl<'m, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
impl<'m, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Probability, Probability, ContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[Probability]>,
LookupTable: AsRef<[Probability]>,
§type Iter = SymbolTableIter<Probability, Probability, ContiguousSymbolTable<&'m [Probability]>>
type Iter = SymbolTableIter<Probability, Probability, ContiguousSymbolTable<&'m [Probability]>>
symbol_table. Read moresource§fn symbol_table(&'m self) -> Self::Iter
fn symbol_table(&'m self) -> Self::Iter
source§fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
symbol_table, but yields both cumulatives and probabilities in
floating point representation. Read moresource§fn entropy_base2<F>(&'m self) -> Fwhere
F: Float + Sum,
Self::Probability: Into<F>,
fn entropy_base2<F>(&'m self) -> Fwhere
F: Float + Sum,
Self::Probability: Into<F>,
source§impl<'m, Symbol, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Symbol: Clone + 'm,
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
impl<'m, Symbol, Probability, Table, LookupTable, const PRECISION: usize> IterableEntropyModel<'m, PRECISION> for LookupDecoderModel<Symbol, Probability, NonContiguousSymbolTable<Table>, LookupTable, PRECISION>where
Symbol: Clone + 'm,
Probability: BitArray + Into<usize>,
usize: AsPrimitive<Probability>,
Table: AsRef<[(Probability, Symbol)]>,
LookupTable: AsRef<[Probability]>,
§type Iter = SymbolTableIter<Symbol, Probability, NonContiguousSymbolTable<&'m [(Probability, Symbol)]>>
type Iter = SymbolTableIter<Symbol, Probability, NonContiguousSymbolTable<&'m [(Probability, Symbol)]>>
symbol_table. Read moresource§fn symbol_table(&'m self) -> Self::Iter
fn symbol_table(&'m self) -> Self::Iter
source§fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
fn floating_point_symbol_table<F>(
&'m self
) -> FloatingPointSymbolTable<F, Self::Iter, PRECISION> ⓘwhere
F: From<Self::Probability>,
symbol_table, but yields both cumulatives and probabilities in
floating point representation. Read more