![]() |
aGrUM
0.20.2
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 45 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 72 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 53 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 64 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
gum::Potential< GUM_SCALAR >::~Potential | ( | ) |
Destructor.
Definition at line 115 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 343 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 181 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 350 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 650 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 655 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 385 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 192 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
protected |
Definition at line 515 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 285 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 380 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 373 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 290 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 271 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 221 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 174 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 613 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 291 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 391 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 398 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 203 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 255 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Definition at line 260 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 605 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 246 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 303 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 231 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 265 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 216 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 224 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 636 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 153 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 147 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 309 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 315 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 421 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 503 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 308 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 301 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 493 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 455 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 483 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 446 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 473 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 436 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 463 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 427 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 145 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 163 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 153 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 184 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 331 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 703 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 713 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 708 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 121 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 693 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 357 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 373 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtualinherited |
Definition at line 314 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 160 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inline |
the function to be used to add two Potentials
Definition at line 508 of file potential.h.
References gum::Potential< GUM_SCALAR >::operator==().
|
inline |
the function to be used to multiply two Potentials
Definition at line 429 of file potential.h.
|
inline |
the function to be used to multiply a Potential and a scalar
Definition at line 438 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 397 of file potential.h.
|
inline |
the function to be used to add a GUM_SCALAR to a Potential
Definition at line 407 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 subtract two Potentials
Definition at line 412 of file potential.h.
|
inline |
the function to be used to substract a GUM_SCALAR from a Potential
Definition at line 424 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 476 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 480 of file potential.h.
|
inline |
the function to be used to divide two Potentials
Definition at line 443 of file potential.h.
|
inline |
the function to be used to divide a Potential by a scalar
Definition at line 454 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 485 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 489 of file potential.h.
|
inline |
the function to be used to add two Potentials
Definition at line 512 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 94 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 104 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 129 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inline |
the function to be used to add two Potentials
Definition at line 494 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 83 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 336 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 183 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 279 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 137 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 570 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 587 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 660 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 687 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 681 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 360 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 249 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 526 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 549 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 427 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 408 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 162 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 204 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 241 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 213 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 232 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 223 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 295 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 129 of file potential_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
protectedinherited |
protecte method to swap the implementation behind the Potential
Definition at line 404 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 420 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 517 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 415 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 297 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 266 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 272 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 323 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
mutableprotectedinherited |
The true container.
Definition at line 250 of file multiDimDecorator.h.
|
mutableprotectedinherited |
value of the MultiDimDecorator if no dimension.
Definition at line 264 of file multiDimDecorator.h.