![]() |
aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
|
aGrUM's Potential is a multi-dimensional array with tensor operators. More...
#include <agrum/tools/multidim/potential.h>
Public Member Functions | |
Constructors, Destructors and Copy | |
Potential () | |
Default constructor. More... | |
Potential (MultiDimImplementation< GUM_SCALAR > *aContent) | |
Creates an potential around aContent. More... | |
Potential (MultiDimImplementation< GUM_SCALAR > *aContent, const MultiDimContainer< GUM_SCALAR > &src) | |
Copy constructor. More... | |
Potential (const Potential< GUM_SCALAR > &src) | |
Copy constructor & assignment. More... | |
Potential< GUM_SCALAR > & | operator= (const Potential< GUM_SCALAR > &src) |
Default constructor. More... | |
Potential (Potential< GUM_SCALAR > &&from) | |
move constructor & assignement More... | |
Potential< GUM_SCALAR > & | operator= (Potential< GUM_SCALAR > &&src) |
Default constructor. More... | |
~Potential () | |
Destructor. More... | |
MultiDimContainer implementation | |
virtual Potential< GUM_SCALAR > * | newFactory () const |
Default implementation of MultiDimContainer::set(). More... | |
Class operation for Potential instances | |
const Potential< GUM_SCALAR > & | random () const |
generate a random Potential with each parameter in [0,1] More... | |
const Potential< GUM_SCALAR > & | randomDistribution () const |
generate a random Distribution in the Potential More... | |
const Potential< GUM_SCALAR > & | randomCPT () const |
generate a random CPT in the Potential More... | |
const Potential< GUM_SCALAR > & | noising (GUM_SCALAR alpha) const |
add a noise in a CPT by mixing (1-alpha)this+alpha.randomCPT() More... | |
Potential< GUM_SCALAR > | margSumOut (const Set< const DiscreteVariable * > &del_vars) const |
Projection using sum as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | margSumIn (const Set< const DiscreteVariable * > &kept_vars) const |
Projection using sum as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | margProdOut (const Set< const DiscreteVariable * > &del_vars) const |
Projection using multiplication as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | margProdIn (const Set< const DiscreteVariable * > &kept_vars) const |
Projection using multiplication as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | margMinOut (const Set< const DiscreteVariable * > &del_vars) const |
Projection using min as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | margMinIn (const Set< const DiscreteVariable * > &kept_vars) const |
Projection using min as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | margMaxOut (const Set< const DiscreteVariable * > &del_vars) const |
Projection using max as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | margMaxIn (const Set< const DiscreteVariable * > &kept_vars) const |
Projection using max as operation (and implementation-optimized operations) More... | |
Potential< GUM_SCALAR > | isNonZeroMap () const |
create a boolean-like potential using the predicate isNonZero More... | |
GUM_SCALAR | sum () const |
sum of all elements in the Potential More... | |
GUM_SCALAR | product () const |
product of all elements in the Potential More... | |
GUM_SCALAR | max () const |
max of all elements in the Potential More... | |
GUM_SCALAR | min () const |
min of all elements in the Potential More... | |
GUM_SCALAR | maxNonOne () const |
max of all non one elements in the Potential More... | |
GUM_SCALAR | minNonZero () const |
min of all non zero elements in the Potential More... | |
Set< Instantiation > | findAll (GUM_SCALAR v) const |
set of instantiation corresponding to the parameter v in the Potential More... | |
Set< Instantiation > | argmax () const |
set of instantiation corresponding to the max in the Potential More... | |
Set< Instantiation > | argmin () const |
set of instantiation corresponding to the min in the Potential More... | |
GUM_SCALAR | entropy () const |
entropy of the Potential More... | |
Potential< GUM_SCALAR > | reorganize (const std::vector< const DiscreteVariable * > &vars) const |
create a new Potential with another order More... | |
Potential< GUM_SCALAR > | reorganize (const std::vector< std::string > &vars) const |
create a new Potential with another order More... | |
Potential< GUM_SCALAR > | extract (const Instantiation &inst) const |
create a new Potential extracted from *this given a partial instantiation More... | |
Potential< GUM_SCALAR > | putFirst (const DiscreteVariable *var) const |
create a new Potential with a certain variable in first More... | |
Potential< GUM_SCALAR > | putFirst (const std::string &varname) const |
create a new Potential with a certain variable in first More... | |
const Potential< GUM_SCALAR > & | fillWith (const Potential< GUM_SCALAR > &src) const |
copy a Potential data using name of variables and labels (not necessarily the same variables in the same orders) More... | |
const Potential< GUM_SCALAR > & | fillWith (const Potential< GUM_SCALAR > &src, const std::vector< std::string > &mapSrc) const |
copy a Potential data using the sequence of names in mapSrc to find the corresponding variables. More... | |
const Potential< GUM_SCALAR > & | fillWith (const std::vector< GUM_SCALAR > &data) const |
Automatically fills the potential with the values in v. More... | |
const Potential< GUM_SCALAR > & | fillWith (const GUM_SCALAR &val) const |
Automatically fills this MultiDimContainer with the value v. More... | |
const Potential< GUM_SCALAR > & | abs () const |
Apply abs on every element of the container. More... | |
const Potential< GUM_SCALAR > & | sq () const |
apply $x^2$ on every element of the container More... | |
const Potential< GUM_SCALAR > & | log2 () const |
apply $log_2(x)$ on every element of the container More... | |
const Potential< GUM_SCALAR > | new_abs () const |
Create a new potential and apply abs on every element of the container. More... | |
const Potential< GUM_SCALAR > | new_sq () const |
Create a new potential and apply $x^2$ on every element of the container. More... | |
const Potential< GUM_SCALAR > | new_log2 () const |
Create a new potential and apply $log_2(x)$ on every element of the container. More... | |
const Potential< GUM_SCALAR > & | normalize () const |
normalisation of this do nothing if sum is 0 More... | |
GUM_SCALAR | KL (const Potential< GUM_SCALAR > &p) const |
compute KL divergence between this and p Checks the compatibility and then compute KL divergence More... | |
const Potential< GUM_SCALAR > & | normalizeAsCPT (const Idx &varId=0) const |
normalisation of this as a CPT for the variable varId More... | |
const Potential< GUM_SCALAR > & | scale (GUM_SCALAR v) const |
multiply (each value of) *this by v More... | |
const Potential< GUM_SCALAR > & | translate (GUM_SCALAR v) const |
add v to (each value of) *this More... | |
const Potential< GUM_SCALAR > & | inverse (void) const |
the function to inverse (each value of) *this More... | |
Idx | draw () const |
get a value at random from a 1-D distribution More... | |
Potential algebra operators | |
Potential< GUM_SCALAR > | operator+ (const Potential< GUM_SCALAR > &p2) const |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > | operator+ (const GUM_SCALAR &v) const |
the function to be used to add a GUM_SCALAR to a Potential More... | |
Potential< GUM_SCALAR > | operator- (const Potential< GUM_SCALAR > &p2) const |
the function to be used to subtract two Potentials More... | |
Potential< GUM_SCALAR > | operator- (const GUM_SCALAR &v) const |
the function to be used to substract a GUM_SCALAR from a Potential More... | |
Potential< GUM_SCALAR > | operator* (const Potential< GUM_SCALAR > &p2) const |
the function to be used to multiply two Potentials More... | |
Potential< GUM_SCALAR > | operator* (const GUM_SCALAR &v) const |
the function to be used to multiply a Potential and a scalar More... | |
Potential< GUM_SCALAR > | operator/ (const Potential< GUM_SCALAR > &p2) const |
the function to be used to divide two Potentials More... | |
Potential< GUM_SCALAR > | operator/ (const GUM_SCALAR &v) const |
the function to be used to divide a Potential by a scalar More... | |
Potential< GUM_SCALAR > & | operator+= (const Potential< GUM_SCALAR > &r) |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator+= (const GUM_SCALAR &v) |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator*= (const Potential< GUM_SCALAR > &r) |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator*= (const GUM_SCALAR &v) |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator-= (const Potential< GUM_SCALAR > &r) |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator-= (const GUM_SCALAR &v) |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator/= (const Potential< GUM_SCALAR > &r) |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator/= (const GUM_SCALAR &v) |
the function to be used to add two Potentials More... | |
bool | operator== (const Potential< GUM_SCALAR > &r) const |
the function to be used to add two Potentials More... | |
bool | operator!= (const Potential< GUM_SCALAR > &r) const |
the function to be used to add two Potentials More... | |
Potential< GUM_SCALAR > & | operator<< (const DiscreteVariable &v) |
the function to be used to add two Potentials More... | |
virtual std::string | toString () const |
the function to be used to add two Potentials More... | |
MultiDimInterface implementation | |
virtual Idx | nbrDim () const final |
Returns the number of vars in the multidimensional container. More... | |
virtual Size | domainSize () const final |
Returns the product of the variables domain size. More... | |
virtual void | add (const DiscreteVariable &v) final |
Adds a new var to the variables of the multidimensional matrix. More... | |
virtual void | erase (const DiscreteVariable &var) final |
Removes a var from the variables of the multidimensional matrix. More... | |
virtual void | erase (const std::string &name) final |
virtual const Sequence< const DiscreteVariable *> & | variablesSequence () const final |
Returns a const ref to the sequence of DiscreteVariable*. More... | |
virtual const DiscreteVariable & | variable (Idx) const final |
Returns a const ref to the ith var. More... | |
virtual const DiscreteVariable & | variable (const std::string &name) const final |
Returns the variable with the name. More... | |
virtual Idx | pos (const DiscreteVariable &var) const final |
Returns the index of a variable. More... | |
virtual bool | contains (const DiscreteVariable &var) const final |
Returns true if var is in *this. More... | |
virtual bool | empty () const final |
Returns true if no var is in *this. More... | |
MultiDimAddressable implementation | |
virtual bool | unregisterSlave (Instantiation &i) final |
Unregister i as a slave of this MultiDimAdressable. More... | |
virtual bool | registerSlave (Instantiation &i) final |
Register i as a slave of this MultiDimAdressable. More... | |
virtual void | changeNotification (const Instantiation &i, const DiscreteVariable *const var, Idx oldval, Idx newval) final |
Listen to changes in a given Instantiation. More... | |
virtual void | setChangeNotification (const Instantiation &i) final |
Listen to an assignment of a value in a Instantiation. More... | |
virtual void | setFirstNotification (const Instantiation &i) final |
Listen to setFirst in a given Instantiation. More... | |
virtual void | setLastNotification (const Instantiation &i) final |
Listen to setLast in a given Instantiation. More... | |
virtual void | setIncNotification (const Instantiation &i) final |
Listen to increment in a given Instantiation. More... | |
virtual void | setDecNotification (const Instantiation &i) final |
Listen to increment in each recorded Instantiation. More... | |
virtual void | notifyChange () const final |
MultiDimContainer implementation | |
virtual void | set (const Instantiation &i, const GUM_SCALAR &value) const final |
Default implementation of MultiDimContainer::set(). More... | |
virtual GUM_SCALAR | get (const Instantiation &i) const final |
Default implementation of MultiDimContainer::get(). More... | |
virtual void | fill (const GUM_SCALAR &d) const final |
Default implementation of MultiDimContainer::set(). More... | |
virtual void | populate (const std::vector< GUM_SCALAR > &v) const final |
Automatically fills this MultiDimContainer with the values in v. More... | |
virtual void | apply (std::function< GUM_SCALAR(GUM_SCALAR) > f) const final |
Apply a function on every element of the container. More... | |
virtual GUM_SCALAR | reduce (std::function< GUM_SCALAR(GUM_SCALAR, GUM_SCALAR) > f, GUM_SCALAR base) const final |
compute lfold for this container More... | |
virtual void | beginMultipleChanges () final |
Default implementation of MultiDimContainer::set(). More... | |
virtual void | endMultipleChanges () final |
Default implementation of MultiDimContainer::set(). More... | |
virtual void | endMultipleChanges (const GUM_SCALAR &) final |
Default implementation of MultiDimContainer::set(). More... | |
virtual std::string | toString (const Instantiation *i) const |
Default implementation of MultiDimContainer::set(). More... | |
Accessors / Modifiers | |
virtual void | populate (std::initializer_list< GUM_SCALAR > l) const |
Automatically fills this MultiDimContainer with the values in l. More... | |
GUM_SCALAR | operator[] (const Instantiation &i) const |
An [] operator using a Instantiation as argument. More... | |
Various methods. | |
virtual const MultiDimImplementation< GUM_SCALAR > * | content () const final |
Returns the implementation for this object (may be *this). More... | |
virtual MultiDimImplementation< GUM_SCALAR > * | content () final |
Returns the implementation for this object (may be *this). More... | |
Copy methods. | |
virtual void | copyFrom (const MultiDimContainer< GUM_SCALAR > &src) const |
Basic copy of a MultiDimContainer. More... | |
virtual void | copyFrom (const MultiDimContainer< GUM_SCALAR > &src, Instantiation *p_i) const |
Basic copy of a MultiDimContainer. More... | |
virtual void | extractFrom (const MultiDimContainer< GUM_SCALAR > &src, const Instantiation &mask) |
Basic extraction of a MultiDimContainer. More... | |
virtual MultiDimAdressable & | getMasterRef () |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer. More... | |
virtual const MultiDimAdressable & | getMasterRef () const |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer. More... | |
virtual void | copy (const MultiDimContainer< GUM_SCALAR > &src) |
Removes all variables in this MultiDimContainer and copy the content of src, variables included. More... | |
Various methods. | |
bool | operator== (const MultiDimContainer< GUM_SCALAR > &p) const |
Test if this MultiDimContainer is equal to p. More... | |
bool | operator!= (const MultiDimContainer< GUM_SCALAR > &p) const |
Test if this MultiDimContainer is different of p. More... | |
Accessors / Modifiers | |
void | replace (const DiscreteVariable &x, const DiscreteVariable &y) |
Replace variables in this multidim. More... | |
Protected Attributes | |
MultiDimImplementation< GUM_SCALAR > * | content_ |
The true container. More... | |
GUM_SCALAR | empty_value_ |
value of the MultiDimDecorator if no dimension. More... | |
Protected Member Functions | |
Set< const DiscreteVariable *> | complementVars_ (const Set< const DiscreteVariable * > &del_vars) const |
virtual void | replace_ (const DiscreteVariable *x, const DiscreteVariable *y) |
This is called by MultiDimContainer::replace() to proceed with the replacing between x and y. More... | |
void | swapContent_ (MultiDimImplementation< GUM_SCALAR > *aContent) const |
protecte method to swap the implementation behind the Potential More... | |
GUM_SCALAR & | get_ (const Instantiation &i) const final |
Return a data, given a Insantiation - final method. More... | |
aGrUM's Potential is a multi-dimensional array with tensor operators.
It is used to represent probabilities and utilities in aGrUMs' multidimensional (graphical) models.
Using the decorator pattern, this representation is independent from the implementation of the multidimensional matrix.
GUM_SCALAR | The type of the scalar stored in this multidimensional matrix. |
Definition at line 59 of file potential.h.
INLINE gum::Potential< GUM_SCALAR >::Potential | ( | ) |
Default constructor.
Creates an empty null dimensional matrix with a MultiDimArray as its implementation.
Definition at line 37 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
explicit |
Creates an potential around aContent.
aContent | The implementation of this Potential. |
Definition at line 44 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
gum::Potential< GUM_SCALAR >::Potential | ( | MultiDimImplementation< GUM_SCALAR > * | aContent, |
const MultiDimContainer< GUM_SCALAR > & | src | ||
) |
Copy constructor.
The newly created Potential share the variables and the values from src, but no instantiation is associated to it. It allows to force the chosen implementation and to copy the data from src.
aContent | The implementation to use in this Potential. |
src | The MultiDimContainer to copy. |
Definition at line 69 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE gum::Potential< GUM_SCALAR >::Potential | ( | const Potential< GUM_SCALAR > & | src | ) |
Copy constructor & assignment.
Definition at line 51 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE gum::Potential< GUM_SCALAR >::Potential | ( | Potential< GUM_SCALAR > && | from | ) |
move constructor & assignement
move constructor
Definition at line 62 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
gum::Potential< GUM_SCALAR >::~Potential | ( | ) |
Destructor.
Definition at line 109 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::abs | ( | ) | const |
Apply abs on every element of the container.
Definition at line 325 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Adds a new var to the variables of the multidimensional matrix.
v | The new var. |
DuplicateElement | Raised if the variable already belongs to the sequence of variables. |
OperationNotAllowed | Raised if this object is non mutable. |
Implements gum::MultiDimInterface.
Definition at line 175 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Apply a function on every element of the container.
f | the function to apply |
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 325 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Set< Instantiation > gum::Potential< GUM_SCALAR >::argmax | ( | ) | const |
set of instantiation corresponding to the max in the Potential
Definition at line 612 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Set< Instantiation > gum::Potential< GUM_SCALAR >::argmin | ( | ) | const |
set of instantiation corresponding to the min in the Potential
Definition at line 617 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 358 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Listen to changes in a given Instantiation.
i | The Instantiation to listen. |
var | The changed dim. |
oldval | The old value. |
newval | The changed value. |
Implements gum::MultiDimAdressable.
Definition at line 185 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
protected |
Definition at line 489 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns true if var is in *this.
v | A DiscreteVariable. |
Implements gum::MultiDimInterface.
Definition at line 264 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns the implementation for this object (may be *this).
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 353 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns the implementation for this object (may be *this).
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 346 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Removes all variables in this MultiDimContainer and copy the content of src, variables included.
src | The MultiDimContainer to copy. |
Reimplemented in gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >, gum::MultiDimFunctionGraph< GUM_SCALAR >, and gum::MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy >.
Definition at line 272 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Basic copy of a MultiDimContainer.
This method is virtual because it should be optimized in certain MultiDimContainer.
src | The MultiDimContainer src which values are copied. This is a full copy with no verification of dimensions. |
OperationNotAllowed | Raised if src does not have the same domain size than this MultiDimContainer. |
Reimplemented in gum::aggregator::MultiDimAggregator< GUM_SCALAR >, gum::MultiDimICIModel< GUM_SCALAR >, and gum::MultiDimArray< GUM_SCALAR >.
Definition at line 255 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Basic copy of a MultiDimContainer.
This method is virtual because it should be optimized in certain MultiDimContainer.
src | The MultiDimContainer src which values are copied. |
p_i | Give the order to iterate in this MultiDimContainer during the copy (nullptr will correctly copy if this is a reorganization of src). |
OperationNotAllowed | Raised if src does not have the same domain size than this MultiDimContainer. |
Reimplemented in gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >, gum::MultiDimFunctionGraph< GUM_SCALAR >, and gum::MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy >.
Definition at line 209 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns the product of the variables domain size.
Implements gum::MultiDimInterface.
Definition at line 168 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Idx gum::Potential< GUM_SCALAR >::draw | ( | ) | const |
get a value at random from a 1-D distribution
Definition at line 578 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns true if no var is in *this.
Implements gum::MultiDimInterface.
Definition at line 269 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 363 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 368 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE GUM_SCALAR gum::Potential< GUM_SCALAR >::entropy | ( | ) | const |
entropy of the Potential
Definition at line 196 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Removes a var from the variables of the multidimensional matrix.
OperationNotAllowed | Raised if this object is non mutable. |
NotFound | Raised if v does not belong to this. |
Implements gum::MultiDimInterface.
Definition at line 238 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Definition at line 243 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::extract | ( | const Instantiation & | inst | ) | const |
create a new Potential extracted from *this given a partial instantiation
Definition at line 570 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Basic extraction of a MultiDimContainer.
This method is virtual because it should be optimized in certain MultiDimContainer.
src | The MultiDimContainer src which datas are copied. |
mask | partial instantiation of variables of the Potential : the |
extraction will concern every variable not in the instantiation and the copy of data will use the (relevant) values in this instantiation.
Definition at line 231 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 280 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::fillWith | ( | const Potential< GUM_SCALAR > & | src | ) | const |
copy a Potential data using name of variables and labels (not necessarily the same variables in the same orders)
InvalidArgument | if the Potential is not compatible with this |
Definition at line 222 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::fillWith | ( | const Potential< GUM_SCALAR > & | src, |
const std::vector< std::string > & | mapSrc | ||
) | const |
copy a Potential data using the sequence of names in mapSrc to find the corresponding variables.
For instance, to copy the potential P(A,B,C) in Q(D,E,A) with the mapping P.A<->Q.E, P.B<->Q.A, P.C<->Q.D (assuming that the corresponding variables have the same domain size and the order of labels):
InvalidArgument | if the Potential is not compatible with this |
Definition at line 255 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::fillWith | ( | const std::vector< GUM_SCALAR > & | data | ) | const |
Automatically fills the potential with the values in v.
v | Vector of values. |
SizeError | Raised if v size's does not matches this MultiDimContainer domain size. |
Definition at line 208 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::fillWith | ( | const GUM_SCALAR & | val | ) | const |
Automatically fills this MultiDimContainer with the value v.
v | contains the data. |
Definition at line 215 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Set< Instantiation > gum::Potential< GUM_SCALAR >::findAll | ( | GUM_SCALAR | v | ) | const |
set of instantiation corresponding to the parameter v in the Potential
Definition at line 600 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Default implementation of MultiDimContainer::get().
Calls get_ as a l-value.
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 147 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalprotectedvirtualinherited |
Return a data, given a Insantiation - final method.
i | The instantiation. |
NullElement | |
NotFound |
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 142 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer.
Implements gum::MultiDimAdressable.
Reimplemented in gum::MultiDimBucket< GUM_SCALAR >.
Definition at line 290 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer.
Implements gum::MultiDimAdressable.
Reimplemented in gum::MultiDimBucket< GUM_SCALAR >.
Definition at line 295 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::inverse | ( | void | ) | const |
the function to inverse (each value of) *this
Definition at line 398 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::isNonZeroMap | ( | ) | const |
create a boolean-like potential using the predicate isNonZero
Definition at line 476 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE GUM_SCALAR gum::Potential< GUM_SCALAR >::KL | ( | const Potential< GUM_SCALAR > & | p | ) | const |
compute KL divergence between this and p Checks the compatibility and then compute KL divergence
gum::InvalidArgument | if p is not compatible with $this (dimension, variables) |
gum::FatalError | if a zero is found in p or this and not in the other. |
Definition at line 294 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::log2 | ( | ) | const |
apply $log_2(x)$ on every element of the container
Definition at line 288 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margMaxIn | ( | const Set< const DiscreteVariable * > & | kept_vars | ) | const |
Projection using max as operation (and implementation-optimized operations)
kept_vars | is the set of vars to keep |
Definition at line 468 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margMaxOut | ( | const Set< const DiscreteVariable * > & | del_vars | ) | const |
Projection using max as operation (and implementation-optimized operations)
del_vars | is the set of vars to eliminate |
Definition at line 432 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margMinIn | ( | const Set< const DiscreteVariable * > & | kept_vars | ) | const |
Projection using min as operation (and implementation-optimized operations)
kept_vars | is the set of vars to keep |
Definition at line 459 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margMinOut | ( | const Set< const DiscreteVariable * > & | del_vars | ) | const |
Projection using min as operation (and implementation-optimized operations)
del_vars | is the set of vars to eliminate |
Definition at line 423 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margProdIn | ( | const Set< const DiscreteVariable * > & | kept_vars | ) | const |
Projection using multiplication as operation (and implementation-optimized operations)
kept_vars | is the set of vars to keep |
Definition at line 449 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margProdOut | ( | const Set< const DiscreteVariable * > & | del_vars | ) | const |
Projection using multiplication as operation (and implementation-optimized operations)
del_vars | is the set of vars to eliminate |
Definition at line 414 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margSumIn | ( | const Set< const DiscreteVariable * > & | kept_vars | ) | const |
Projection using sum as operation (and implementation-optimized operations)
kept_vars | is the set of vars to keep |
Definition at line 440 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::margSumOut | ( | const Set< const DiscreteVariable * > & | del_vars | ) | const |
Projection using sum as operation (and implementation-optimized operations)
del_vars | is the set of vars to eliminate |
Definition at line 405 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE GUM_SCALAR gum::Potential< GUM_SCALAR >::max | ( | ) | const |
max of all elements in the Potential
Definition at line 138 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
GUM_SCALAR gum::Potential< GUM_SCALAR >::maxNonOne | ( | ) | const |
max of all non one elements in the Potential
Definition at line 156 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE GUM_SCALAR gum::Potential< GUM_SCALAR >::min | ( | ) | const |
min of all elements in the Potential
Definition at line 146 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE GUM_SCALAR gum::Potential< GUM_SCALAR >::minNonZero | ( | ) | const |
min of all non zero elements in the Potential
Definition at line 177 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns the number of vars in the multidimensional container.
Implements gum::MultiDimInterface.
Definition at line 307 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
const Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::new_abs | ( | ) | const |
Create a new potential and apply abs on every element of the container.
Definition at line 660 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
const Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::new_log2 | ( | ) | const |
Create a new potential and apply $log_2(x)$ on every element of the container.
Definition at line 670 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
const Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::new_sq | ( | ) | const |
Create a new potential and apply $x^2$ on every element of the container.
Definition at line 665 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimDecorator< GUM_SCALAR >.
Definition at line 115 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::noising | ( | GUM_SCALAR | alpha | ) | const |
add a noise in a CPT by mixing (1-alpha)this+alpha.randomCPT()
Definition at line 651 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::normalize | ( | ) | const |
normalisation of this do nothing if sum is 0
Definition at line 338 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::normalizeAsCPT | ( | const Idx & | varId = 0 | ) | const |
normalisation of this as a CPT for the variable varId
If the Potential is empty, the argument is not used.
FatalError | it some distribution sums to 0, or if varId>=nbrDim() |
Definition at line 354 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Definition at line 291 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
Test if this MultiDimContainer is different of p.
p | The MultiDimContainer to test for inequality. |
Definition at line 154 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inline |
the function to be used to add two Potentials
Definition at line 490 of file potential.h.
References gum::Potential< GUM_SCALAR >::operator==().
|
inline |
the function to be used to multiply two Potentials
Definition at line 413 of file potential.h.
|
inline |
the function to be used to multiply a Potential and a scalar
Definition at line 421 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 449 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 453 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 384 of file potential.h.
|
inline |
the function to be used to add a GUM_SCALAR to a Potential
Definition at line 392 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 440 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 444 of file potential.h.
|
inline |
the function to be used to subtract two Potentials
Definition at line 397 of file potential.h.
|
inline |
the function to be used to substract a GUM_SCALAR from a Potential
Definition at line 408 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 458 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 462 of file potential.h.
|
inline |
the function to be used to divide two Potentials
Definition at line 426 of file potential.h.
|
inline |
the function to be used to divide a Potential by a scalar
Definition at line 436 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 467 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 471 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 492 of file potential.h.
Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::operator= | ( | const Potential< GUM_SCALAR > & | src | ) |
Default constructor.
Creates an empty null dimensional matrix with a MultiDimArray as its implementation.
Definition at line 89 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::operator= | ( | Potential< GUM_SCALAR > && | src | ) |
Default constructor.
Creates an empty null dimensional matrix with a MultiDimArray as its implementation.
Definition at line 98 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
Test if this MultiDimContainer is equal to p.
p | The MultiDimContainer to test for equality. |
Definition at line 124 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inline |
the function to be used to add two Potentials
Definition at line 476 of file potential.h.
Referenced by gum::Potential< GUM_SCALAR >::operator!=().
|
inherited |
An [] operator using a Instantiation as argument.
i | An Instantiation. |
Definition at line 79 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Automatically fills this MultiDimContainer with the values in v.
The order used to fill this MultiDimContainer is the same as with an instantiation over it.
v | Vector of values. |
SizeError | Raised if v size's does not matches this MultiDimContainer domain size. |
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 312 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Automatically fills this MultiDimContainer with the values in l.
The order used to fill this MultiDimContainer is the same as with an instantiation over it.
l | contains the data. |
SizeError | Raised if l size's does not matches this MultiDimContainer domain size. |
Reimplemented in gum::MultiDimBijArray< GUM_SCALAR >, gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >, gum::MultiDimFunctionGraph< GUM_SCALAR >, and gum::MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy >.
Definition at line 174 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns the index of a variable.
v | The variable for which the index is returned. |
NotFound | Raised if v is not in this multidimensional matrix. |
Implements gum::MultiDimInterface.
Definition at line 259 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE GUM_SCALAR gum::Potential< GUM_SCALAR >::product | ( | ) | const |
product of all elements in the Potential
Definition at line 130 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::putFirst | ( | const DiscreteVariable * | var | ) | const |
create a new Potential with a certain variable in first
InvalidArgument | if the var is not in the potential |
Definition at line 540 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::putFirst | ( | const std::string & | varname | ) | const |
create a new Potential with a certain variable in first
InvalidArgument | if the var is not in the potential |
Definition at line 555 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::random | ( | ) | const |
generate a random Potential with each parameter in [0,1]
Definition at line 622 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::randomCPT | ( | ) | const |
generate a random CPT in the Potential
Definition at line 646 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::randomDistribution | ( | ) | const |
generate a random Distribution in the Potential
Definition at line 641 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
compute lfold for this container
f | the function to apply |
base | the initial value |
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 335 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Register i as a slave of this MultiDimAdressable.
i | The Instantiation to enslave. |
Implements gum::MultiDimAdressable.
Definition at line 233 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::reorganize | ( | const std::vector< const DiscreteVariable * > & | vars | ) | const |
create a new Potential with another order
InvalidArgument | if not all and only the vars of the potential are in vars |
Definition at line 500 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
Potential< GUM_SCALAR > gum::Potential< GUM_SCALAR >::reorganize | ( | const std::vector< std::string > & | vars | ) | const |
create a new Potential with another order
InvalidArgument | if not all and only the vars of the potential are in vars |
Definition at line 522 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
Replace variables in this multidim.
If x is in this MultiDim and y has the same domain size, then x will be replace by y in this MultiDim.
x | The variable in this which will be replaced. |
y | The variable replacing y. |
NotFound | Raised if x does not belong to this MultiDim. |
OperationNotAllowed | If y and x are not interchangeable. |
DuplicateElement | If y is already in this MultiDim. |
Definition at line 35 of file multiDimInterface_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
protectedvirtualinherited |
This is called by MultiDimContainer::replace() to proceed with the replacing between x and y.
This is called only when everything have been checked.
x | The variable to replace in |
y | The second variable to swap. |
Implements gum::MultiDimInterface.
Definition at line 394 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::scale | ( | GUM_SCALAR | v | ) | const |
multiply (each value of) *this by v
Definition at line 386 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 156 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Listen to an assignment of a value in a Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 198 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Listen to increment in each recorded Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 226 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Listen to setFirst in a given Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 205 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Listen to increment in a given Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 219 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Listen to setLast in a given Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 212 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::sq | ( | ) | const |
apply $x^2$ on every element of the container
Definition at line 282 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE GUM_SCALAR gum::Potential< GUM_SCALAR >::sum | ( | ) | const |
sum of all elements in the Potential
Definition at line 122 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
protectedinherited |
protecte method to swap the implementation behind the Potential
Definition at line 373 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 388 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inlinevirtual |
the function to be used to add two Potentials
Reimplemented from gum::MultiDimDecorator< GUM_SCALAR >.
Definition at line 497 of file potential.h.
INLINE const Potential< GUM_SCALAR > & gum::Potential< GUM_SCALAR >::translate | ( | GUM_SCALAR | v | ) | const |
add v to (each value of) *this
Definition at line 392 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Unregister i as a slave of this MultiDimAdressable.
i | The Instantiation to free. |
Implements gum::MultiDimAdressable.
Definition at line 275 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns a const ref to the ith var.
param i An index of this multidimensional matrix.
NotFound | Raised if i does not reference a variable in this multidimensional matrix. |
Implements gum::MultiDimInterface.
Definition at line 248 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns the variable with the name.
name | The index of the variable |
NotFound | Raised if the element cannot be found. |
Implements gum::MultiDimInterface.
Definition at line 254 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Returns a const ref to the sequence of DiscreteVariable*.
Implements gum::MultiDimInterface.
Definition at line 300 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
mutableprotectedinherited |
The true container.
Definition at line 247 of file multiDimDecorator.h.
|
mutableprotectedinherited |
value of the MultiDimDecorator if no dimension.
Definition at line 261 of file multiDimDecorator.h.