EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
Loading...
Searching...
No Matches
Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ > Class Template Reference

The parameters of a Rao-Blackwellized particle filter's state: weighted particles for one block of the state, each carrying a Gaussian, or a hybrid of Gaussians, over the rest. More...

#include <EmrysFilter/Distributions/ParticleGaussian.h>

Public Types

using Scalar = Scalar_
 the scalar type
using SpaceType = Space_
 the whole state space
using PathType = Path_
 the path naming the sampled block
using PinnedSpace = typename Split::PinnedSpace
 the sampled block's space
using RestSpace = typename Split::RestSpace
 the rest's space, in order
using CovarianceType = Covariance_
 SharedCovariance or PerPointCovariance.
using ConditionalType = Params<Component_>
 a particle's distribution over the rest: a Gaussian or a hybrid
using allocator_type = Allocator_
 the allocator, re-bound per buffer
using ParticlesType = ParticleSet<PinnedSpace, Scalar_, Allocator_>
 the particles of the block
using WeightArrayType = typename ParticlesType::WeightArrayType
 one entry per particle
using LogWeightsType = typename ParticlesType::LogWeightsType
 the particles' log-weights map
using MeansType = SampleSet<RestSpace, Scalar_>
 means over the rest, one per column
using DensityType
 what toDensity() returns

Public Member Functions

 ParticleGaussianParams (Space_ space, ParticlesType particles, ConditionalType const &conditional, Covariance_={})
 particles of the block in space, each with conditional as its Gaussian, or its hybrid, over the rest.
template<typename MeansDerived>
requires (!IsHybrid)
 ParticleGaussianParams (Space_ space, ParticlesType particles, Eigen::MatrixBase< MeansDerived > const &means, typename Moments< RestSpace, Scalar_ >::MatrixType const &cov, Covariance_={})
 particles of the block in space, particle i with the mean means.col(i) over the rest and the covariance cov, which the particles share or each start from.
 ParticleGaussianParams (Space_ space, ParticlesType particles, std::span< ConditionalType const > conditionals)
 particles of the block in space, particle i with the Gaussian, or the hybrid, conditionals[i] over the rest, from any contiguous storage, such as a vector or an array.
Space_ const & space () const
PinnedSpace const & pinnedSpace () const
RestSpace const & restSpace () const
BlockRows pinnedRows () const
auto const & restIndices () const
BlockRows pinnedDifferenceRows () const
auto const & restDifferenceIndices () const
Eigen::Index size () const
allocator_type get_allocator () const
void setCapacity (Eigen::Index capacity)
 Reserves room for capacity particles and their Gaussians, and makes holding more a precondition violation.
ParticlesType const & particles () const
auto particle (Eigen::Index i) const
LogWeightsType logWeights () const
Scalar logWeight (Eigen::Index i) const
std::expected< Scalar, WeightError > logTotalWeight () const
template<ExecutionPolicy P>
std::expected< Scalar, WeightError > logTotalWeight (P &&policy) const
 logTotalWeight() under policy, a reduction over the particles (see Execution policies).
std::expected< Scalar, WeightError > ess () const
template<ExecutionPolicy P>
std::expected< Scalar, WeightError > ess (P &&policy) const
 ess() under policy, reductions over the particles (see Execution policies).
Eigen::Index mostProbable () const
decltype(auto) conditional (Eigen::Index i) const
auto modes () const
Moments< RestSpace, Scalar_ >::MatrixType const & sharedCovariance () const
std::expected< void, NumericError > factorize () const
 Checks the weights and factorizes each particle's Gaussian, the one they share once, or checks each particle's hybrid, so that the density's collapse reads a distribution.
std::expected< DensityType, NumericError > toDensity () const &
 Checks the state (factorize()) and views it.
void toDensity () const &&=delete
 A density of a temporary would outlive it.
template<std::uniform_random_bit_generator G, typename R = resamplers::Systematic>
requires Resampler<R, Scalar, G>
std::expected< void, WeightError > resample (G &rng, Eigen::Index newSize, R const &resampler={})
 Resamples the particles to newSize in proportion to their weights with resampler, as ParticleSet::resample() does, each new particle taking its ancestor's Gaussian.
template<std::uniform_random_bit_generator G, typename R = resamplers::Systematic>
requires Resampler<R, Scalar, G>
std::expected< void, WeightError > resample (G &rng, R const &resampler={})
 Resamples to the current size().
template<ExecutionPolicy P, std::uniform_random_bit_generator G, typename R = resamplers::Systematic>
requires Resampler<R, Scalar, G>
std::expected< void, WeightError > resample (P &&policy, G &rng, Eigen::Index newSize, R const &resampler={})
 resample() under policy, as ParticleSet::resample() runs under one, with the ancestors' Gaussians gathered as a for-each (see Execution policies).
template<ExecutionPolicy P, std::uniform_random_bit_generator G, typename R = resamplers::Systematic>
requires Resampler<R, Scalar, G>
std::expected< void, WeightError > resample (P &&policy, G &rng, R const &resampler={})
 resample() to the current size() under policy.
std::expected< Scalar, WeightError > pruneBelow (Scalar logThreshold)
 Removes every particle whose normalized log-weight is below logThreshold, with its Gaussian, as ParticleSet::pruneBelow() does, and normalizes the weights of the rest.
std::expected< Scalar, WeightError > pruneTail (Scalar logFraction)
 Removes the lightest particles, with their Gaussians, as many as can be while their combined normalized weight stays below \( e^{\mathrm{logFraction}} \), as ParticleSet::pruneTail() does, and normalizes the weights of the rest.
std::expected< Scalar, WeightError > pruneToSize (Eigen::Index maxSize)
 Removes the lightest particles, with their Gaussians, until at most maxSize, at least one, remain, as ParticleSet::pruneToSize() does, and normalizes the weights of the rest.
template<typename Derived>
void setParticleStates (Eigen::MatrixBase< Derived > const &states)
 Replaces the particles' values of the sampled block with the columns of states, one per particle, keeping their weights and Gaussians, as Roughen does.

Static Public Attributes

static constexpr bool IsParams = true
 parameters, which views check

Friends

template<Space, typename, typename, typename, typename, RealScalar, typename, typename>
class RbParticleFilter
 The filter reweights and replaces the Gaussians.

Detailed Description

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
class Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >

The parameters of a Rao-Blackwellized particle filter's state: weighted particles for one block of the state, each carrying a Gaussian, or a hybrid of Gaussians, over the rest.

The marginalized particle representation of Doucet et al. (2000) and Schön, Gustafsson, and Nordlund (2005). The density is \( p(x) = \sum_i w_i \, \delta(x_p - p_i) \, \mathcal{N}(x_r; \mu_i, \Sigma_i) \): the block \( x_p \) named by the path Path_ is sampled, and the rest \(x_r \) is Gaussian given each particle. With Covariance_ SharedCovariance, every particle's Gaussian has the same covariance; with PerPointCovariance, each has its own (see RbParticleFilter).

With Component_ a HybridGaussian over the rest, each particle holds an IMM's state instead, \( p(x) = \sum_i w_i \, \delta(x_p - p_i) \sum_m P(m \mid i) \, \mathcal{N}(x_r; \mu_{im}, \Sigma_{im}) \), whose modes() sums the particles' mode probabilities. Such a state has PerPointCovariance, since mixing a particle's modes gives each particle covariances of its own.

The particles are a ParticleSet over the block, read through particles(). Upkeep (see Upkeep) applies to the state as it does to a ParticleSet: resample() copies each particle's Gaussian along with it, so upkeep::whenEss(std::less{}, 0.5, upkeep::resample(rng)) works unchanged, and Roughen moves the particles while leaving their Gaussians alone.

Build one with particleGaussian() from particles and a Gaussian over the rest, or draw one from a Gaussian over the whole state with drawParticleGaussian(). Its collapse is its density's, the ParticleGaussian from toDensity(), which checks the weights and the Gaussians first.

The particles and their Gaussians come from the allocator (see Allocation). A state given a capacity with setCapacity() reserves room for that many particles, Gaussians, and scratch, so resampling and updating at a steady size allocate nothing.

Template Parameters
Space_the whole state space
Path_the block the particles sample, as a tag or a TagPath
Covariance_SharedCovariance or PerPointCovariance
Scalar_scalar type, double by default
Allocator_allocator for the particles and Gaussians (see Allocation)
Component_each particle's distribution over the rest: a Gaussian, by default, or a HybridGaussian, in Scalar_
See also
class ParticleGaussian, RbParticleFilter, GridGaussianParams

Member Typedef Documentation

◆ DensityType

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
using Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::DensityType
Initial value:
The density of a Rao-Blackwellized particle filter's state, a checked view of its ParticleGaussianPar...
Definition ParticleGaussian.h:779

what toDensity() returns

Constructor & Destructor Documentation

◆ ParticleGaussianParams()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
template<typename MeansDerived>
requires (!IsHybrid)
Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::ParticleGaussianParams ( Space_ space,
ParticlesType particles,
Eigen::MatrixBase< MeansDerived > const & means,
typename Moments< RestSpace, Scalar_ >::MatrixType const & cov,
Covariance_ = {} )
inline

particles of the block in space, particle i with the mean means.col(i) over the rest and the covariance cov, which the particles share or each start from.

The means are copied into the state's storage, so a map over a buffer of one's own passes them without allocating.

Member Function Documentation

◆ conditional()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
decltype(auto) Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::conditional ( Eigen::Index i) const
inlinenodiscard
Returns
particle i's distribution over the rest of the state: its Gaussian, or its hybrid

◆ ess()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
std::expected< Scalar, WeightError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::ess ( ) const
inlinenodiscard
Returns
the effective sample size, or a WeightError if the weights are invalid

◆ factorize()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
std::expected< void, NumericError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::factorize ( ) const
inlinenodiscard

Checks the weights and factorizes each particle's Gaussian, the one they share once, or checks each particle's hybrid, so that the density's collapse reads a distribution.

It is const because it writes only the Gaussians' cached factorizations (see Distributions).

Returns
nothing on success, the NumericError of weights that fail to define a distribution, or that of the first Gaussian that fails to factorize

◆ get_allocator()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
allocator_type Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::get_allocator ( ) const
inlinenodiscard
Returns
the allocator the particles and Gaussians come from

◆ logTotalWeight()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
std::expected< Scalar, WeightError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::logTotalWeight ( ) const
inlinenodiscard
Returns
the log of the weights' sum, or a WeightError if they are invalid

◆ logWeight()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
Scalar Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::logWeight ( Eigen::Index i) const
inlinenodiscard
Returns
particle i's log-weight

◆ logWeights()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
LogWeightsType Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::logWeights ( ) const
inlinenodiscard
Returns
the particles' log-weights, not necessarily normalized

◆ modes()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
auto Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::modes ( ) const
inlinenodiscard
Returns
the probability of each mode, summed over the particles, \( P(m) = \sum_i \hat w_i \, P(m \mid i) \) with the weights normalized; the weights must define a distribution

◆ mostProbable()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
Eigen::Index Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::mostProbable ( ) const
inlinenodiscard
Returns
the index of the heaviest particle; ties go to the lowest

◆ particle()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
auto Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::particle ( Eigen::Index i) const
inlinenodiscard
Returns
particle i's value of the sampled block

◆ particles()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
ParticlesType const & Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::particles ( ) const
inlinenodiscard
Returns
the particles of the sampled block, with their weights

◆ pinnedDifferenceRows()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
BlockRows Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::pinnedDifferenceRows ( ) const
inlinenodiscard
Returns
the rows of the sampled block in the whole state's differences

◆ pinnedRows()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
BlockRows Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::pinnedRows ( ) const
inlinenodiscard
Returns
the rows of the sampled block in the whole state

◆ pinnedSpace()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
PinnedSpace const & Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::pinnedSpace ( ) const
inlinenodiscard
Returns
the sampled block's space, with its parameters

◆ pruneBelow()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
std::expected< Scalar, WeightError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::pruneBelow ( Scalar logThreshold)
inlinenodiscard

Removes every particle whose normalized log-weight is below logThreshold, with its Gaussian, as ParticleSet::pruneBelow() does, and normalizes the weights of the rest.

Returns
the log of the removed fraction of the total weight, -inf if nothing was removed, or, with nothing changed, the WeightError of logTotalWeight()

◆ pruneTail()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
std::expected< Scalar, WeightError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::pruneTail ( Scalar logFraction)
inlinenodiscard

Removes the lightest particles, with their Gaussians, as many as can be while their combined normalized weight stays below \( e^{\mathrm{logFraction}} \), as ParticleSet::pruneTail() does, and normalizes the weights of the rest.

Returns
the log of the removed fraction of the total weight, -inf if nothing was removed, or, with nothing changed, the WeightError of logTotalWeight()

◆ pruneToSize()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
std::expected< Scalar, WeightError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::pruneToSize ( Eigen::Index maxSize)
inlinenodiscard

Removes the lightest particles, with their Gaussians, until at most maxSize, at least one, remain, as ParticleSet::pruneToSize() does, and normalizes the weights of the rest.

Returns
the log of the removed fraction of the total weight, -inf if nothing was removed, or, with nothing changed, the WeightError of logTotalWeight()

◆ resample()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
template<std::uniform_random_bit_generator G, typename R = resamplers::Systematic>
requires Resampler<R, Scalar, G>
std::expected< void, WeightError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::resample ( G & rng,
Eigen::Index newSize,
R const & resampler = {} )
inlinenodiscard

Resamples the particles to newSize in proportion to their weights with resampler, as ParticleSet::resample() does, each new particle taking its ancestor's Gaussian.

Returns
nothing on success, or a WeightError (with the state unchanged) if the weights cannot be normalized

◆ restDifferenceIndices()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
auto const & Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::restDifferenceIndices ( ) const
inlinenodiscard
Returns
the rows of the rest of the state in the whole state's differences, in order

◆ restIndices()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
auto const & Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::restIndices ( ) const
inlinenodiscard
Returns
the rows of the rest of the state in the whole state, in order

◆ restSpace()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
RestSpace const & Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::restSpace ( ) const
inlinenodiscard
Returns
the space of the rest of the state, in order

◆ setCapacity()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
void Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::setCapacity ( Eigen::Index capacity)
inline

Reserves room for capacity particles and their Gaussians, and makes holding more a precondition violation.

It must be at least size().

◆ sharedCovariance()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
Moments< RestSpace, Scalar_ >::MatrixType const & Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::sharedCovariance ( ) const
inlinenodiscard
Returns
the covariance every particle's Gaussian shares

◆ size()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
Eigen::Index Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::size ( ) const
inlinenodiscard
Returns
the number of particles

◆ space()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
Space_ const & Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::space ( ) const
inlinenodiscard
Returns
the whole state space

◆ toDensity()

template<Space Space_, typename Path_, typename Covariance_ = SharedCovariance, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator, typename Component_ = Gaussian<typename internal::BlockSplit<Space_, Path_>::RestSpace, Scalar_>>
std::expected< DensityType, NumericError > Emrys::ParticleGaussianParams< Space_, Path_, Covariance_, Scalar_, Allocator_, Component_ >::toDensity ( ) const &
inlinenodiscard

Checks the state (factorize()) and views it.

Returns
a ParticleGaussian that checks this object, or the NumericError from factorize()

The documentation for this class was generated from the following file: