aGrUM  0.13.2
gum::prm::PRMFormAttribute< GUM_SCALAR > Class Template Reference

<agrum/PRM/elements/formAttribute.h> More...

#include <PRMFormAttribute.h>

+ Inheritance diagram for gum::prm::PRMFormAttribute< GUM_SCALAR >:
+ Collaboration diagram for gum::prm::PRMFormAttribute< GUM_SCALAR >:

Public Member Functions

 PRMFormAttribute (const PRMClass< GUM_SCALAR > &c, const std::string &name, const PRMType< GUM_SCALAR > &type, MultiDimImplementation< std::string > *impl=new MultiDimArray< std::string >())
 
virtual ~PRMFormAttribute ()
 
virtual PRMAttribute< GUM_SCALAR > * newFactory (const PRMClass< GUM_SCALAR > &c) const
 See gum::prm::PRMAttribute. More...
 
virtual PRMAttribute< GUM_SCALAR > * copy (Bijection< const DiscreteVariable *, const DiscreteVariable * > bij) const
 See gum::prm::PRMAttribute. More...
 
virtual void copyCpf (const Bijection< const DiscreteVariable *, const DiscreteVariable * > &bif, const PRMAttribute< GUM_SCALAR > &source)
 See gum::prm::PRMAttribute. More...
 
virtual PRMClassElement< GUM_SCALAR >::ClassElementType elt_type () const
 See gum::prm::PRMAttribute. More...
 
virtual PRMType< GUM_SCALAR > & type ()
 See gum::prm::PRMAttribute. More...
 
virtual const PRMType< GUM_SCALAR > & type () const
 See gum::prm::PRMAttribute. More...
 
virtual const Potential< GUM_SCALAR > & cpf () const
 See gum::prm::PRMAttribute. More...
 
virtual void addParent (const PRMClassElement< GUM_SCALAR > &elt)
 See gum::prm::PRMAttribute. More...
 
virtual void addChild (const PRMClassElement< GUM_SCALAR > &elt)
 See gum::prm::PRMAttribute. More...
 
virtual PRMAttribute< GUM_SCALAR > * getCastDescendant () const
 See gum::prm::PRMAttribute. More...
 
virtual void setAsCastDescendant (PRMAttribute< GUM_SCALAR > *attr)
 See gum::prm::PRMAttribute. More...
 
virtual void becomeCastDescendant (PRMType< GUM_SCALAR > &subtype)
 Change this attribute to be a cast descendant of a an attribute with type subtype. More...
 
virtual MultiDimImplementation< std::string > & formulas ()
 
virtual const MultiDimImplementation< std::string > & formulas () const
 
virtual void swap (const PRMType< GUM_SCALAR > &old_type, const PRMType< GUM_SCALAR > &new_type)
 Swap old_type with new_type in the PRMClassElement cpt. More...
 
Getters & setters
virtual void overload (PRMAttribute< GUM_SCALAR > *source)
 Set this as overload of source (necessayr to preserver internal pointers for MultiDims). More...
 
Getters & setters
NodeId id () const
 Returns the NodeId of this element in it's class DAG. More...
 
virtual void setId (NodeId id)
 Used to assign the id of this element. More...
 
virtual PRMObject::prm_type obj_type () const
 
Fast access to random variable's properties
const std::string & safeName () const
 Returns the safe name of this PRMClassElement, if any. More...
 
virtual std::string cast (const PRMType< GUM_SCALAR > &t) const
 Returns the name of the cast descendant with PRMType t of this PRMClassElement. More...
 
Getters & setters.
const std::string & name () const
 Returns the name of this object. More...
 
void name (const std::string &name)
 Change the name of the PRM Object. More...
 
Operators
bool operator== (const PRMObject &obj) const
 To PRMObject are equal if they have the same name (which is unique). More...
 
bool operator!= (const PRMObject &obj) const
 To PRMObject are equal if they have the same name (which is unique). More...
 

Protected Attributes

std::string _safeName
 The safe name of this PRMClassElement. More...
 

Protected Member Functions

virtual PRMType< GUM_SCALAR > * _type ()
 
virtual void _type (PRMType< GUM_SCALAR > *t)
 

Built-in type

enum  ClassElementType {
  prm_attribute, prm_aggregate, prm_refslot, prm_slotchain,
  prm_parameter
}
 Returns true if obj_ptr is of type PRMReferenceSlot. More...
 
static std::string enum2str (ClassElementType type)
 Returns true if obj_ptr is of type PRMReferenceSlot. More...
 
static INLINE bool isReferenceSlot (const PRMClassElement &elt)
 Returns true if obj_ptr is of type PRMReferenceSlot. More...
 
static INLINE bool isAttribute (const PRMClassElement &elt)
 Returns true if obj_ptr is of type PRMAttribute. More...
 
static INLINE bool isAggregate (const PRMClassElement &elt)
 Return true if obj is of type PRMAggregate. More...
 
static INLINE bool isSlotChain (const PRMClassElement &elt)
 Return true if obj is of type PRMSlotChain. More...
 
static INLINE bool isParameter (const PRMClassElement &elt)
 Return true if obj is of type PRMParameter. More...
 

Built-in types.

enum  prm_type : char {
  prm_type::ALL, prm_type::CLASS, prm_type::PRM_INTERFACE, prm_type::CLASS_ELT,
  prm_type::TYPE, prm_type::SYSTEM, prm_type::INSTANCE
}
 Enumeration of the different types of objects handled by a PRM. More...
 
static std::string enum2str (prm_type type)
 Returns the string representation of a PRMObject. More...
 
static std::string LEFT_CAST ()
 Enumeration of the different types of objects handled by a PRM. More...
 
static std::string RIGHT_CAST ()
 Enumeration of the different types of objects handled by a PRM. More...
 
static INLINE bool isClass (const PRMObject &obj)
 Returns true if obj_ptr is of type Class. More...
 
static INLINE bool isInterface (const PRMObject &obj)
 Returns true if obj_ptr is of type PRMInterface. More...
 
static INLINE bool isInstance (const PRMObject &obj)
 Returns true if obj_ptr is of type PRMInstance. More...
 

Detailed Description

template<typename GUM_SCALAR>
class gum::prm::PRMFormAttribute< GUM_SCALAR >

<agrum/PRM/elements/formAttribute.h>

PRMFormAttribute is a member of a Class in a PRM.

See also
PRM PRMFactory Class PRMClassElement PRMType<GUM_SCALAR> Potential PRMAttribute

Definition at line 47 of file PRMFormAttribute.h.

Member Enumeration Documentation

template<typename GUM_SCALAR>
enum gum::prm::PRMClassElement::ClassElementType
inherited

Returns true if obj_ptr is of type PRMReferenceSlot.

Enumerator
prm_attribute 
prm_aggregate 
prm_refslot 
prm_slotchain 
prm_parameter 

Definition at line 90 of file PRMClassElement.h.

enum gum::prm::PRMObject::prm_type : char
stronginherited

Enumeration of the different types of objects handled by a PRM.

The "all" type is used to tell that we want any kind of PRMType (useful with iterators for example). No PRMObject will ever have "all" as type.

Enumerator
ALL 
CLASS 
PRM_INTERFACE 
CLASS_ELT 
TYPE 
SYSTEM 
INSTANCE 

Definition at line 66 of file PRMObject.h.

66  : char {
67  ALL,
68  CLASS,
69  PRM_INTERFACE,
70  CLASS_ELT,
71  TYPE,
72  SYSTEM,
73  INSTANCE
74  };

Constructor & Destructor Documentation

template<typename GUM_SCALAR >
gum::prm::PRMFormAttribute< GUM_SCALAR >::PRMFormAttribute ( const PRMClass< GUM_SCALAR > &  c,
const std::string &  name,
const PRMType< GUM_SCALAR > &  type,
MultiDimImplementation< std::string > *  impl = new MultiDimArray< std::string >() 
)

Definition at line 40 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::prm::PRMClassElement< GUM_SCALAR >::_safeName, gum::MultiDimImplementation< GUM_SCALAR >::add(), gum::prm::PRMObject::LEFT_CAST(), gum::prm::PRMObject::name(), and gum::prm::PRMObject::RIGHT_CAST().

Referenced by gum::prm::PRMFormAttribute< GUM_SCALAR >::newFactory().

44  :
45  PRMAttribute< GUM_SCALAR >(name),
46  __type(new PRMType< GUM_SCALAR >(type)), __cpf(0), __formulas(impl),
47  __class(&c) {
48  GUM_CONSTRUCTOR(PRMFormAttribute);
49  __formulas->add(__type->variable());
50  this->_safeName =
52  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMFormAttribute(const PRMClass< GUM_SCALAR > &c, const std::string &name, const PRMType< GUM_SCALAR > &type, MultiDimImplementation< std::string > *impl=new MultiDimArray< std::string >())
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:32
virtual PRMType< GUM_SCALAR > & type()
See gum::prm::PRMAttribute.
virtual void add(const DiscreteVariable &v) override
Adds a new var to the variables of the multidimensional matrix.
static std::string LEFT_CAST()
Enumeration of the different types of objects handled by a PRM.
Definition: PRMObject.h:76
const PRMClass< GUM_SCALAR > * __class
A pointe toward the class of this attribute.
static std::string RIGHT_CAST()
Enumeration of the different types of objects handled by a PRM.
Definition: PRMObject.h:77
std::string _safeName
The safe name of this PRMClassElement.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
gum::prm::PRMFormAttribute< GUM_SCALAR >::~PRMFormAttribute ( )
virtual

Definition at line 55 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, and gum::prm::PRMFormAttribute< GUM_SCALAR >::__type.

55  {
56  GUM_DESTRUCTOR(PRMFormAttribute);
57  delete __type;
58  delete __cpf;
59  delete __formulas;
60  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMFormAttribute(const PRMClass< GUM_SCALAR > &c, const std::string &name, const PRMType< GUM_SCALAR > &type, MultiDimImplementation< std::string > *impl=new MultiDimArray< std::string >())
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
template<typename GUM_SCALAR >
gum::prm::PRMFormAttribute< GUM_SCALAR >::PRMFormAttribute ( const PRMFormAttribute< GUM_SCALAR > &  source)
private

Definition at line 257 of file PRMFormAttribute_tpl.h.

References GUM_ERROR, and gum::prm::PRMFormAttribute< GUM_SCALAR >::operator=().

258  :
259  PRMAttribute< GUM_SCALAR >(source.name()) {
260  GUM_CONS_CPY(PRMFormAttribute);
261  GUM_ERROR(OperationNotAllowed, "Cannot copy FormAttribute");
262  }
PRMFormAttribute(const PRMClass< GUM_SCALAR > &c, const std::string &name, const PRMType< GUM_SCALAR > &type, MultiDimImplementation< std::string > *impl=new MultiDimArray< std::string >())
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the call graph for this function:

Member Function Documentation

template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::__fillCpf ( ) const
private

Definition at line 271 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__class, gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::MultiDimImplementation< GUM_SCALAR >::contains(), gum::Instantiation::end(), gum::MultiDimContainer< GUM_SCALAR >::get(), GUM_ERROR, gum::Instantiation::inc(), gum::HashTable< Key, Val, Alloc >::insert(), gum::Formula::result(), gum::Instantiation::setFirst(), gum::Formula::variables(), and gum::MultiDimImplementation< GUM_SCALAR >::variablesSequence().

Referenced by gum::prm::PRMFormAttribute< GUM_SCALAR >::cpf().

271  {
272  try {
273  if (__cpf) { delete __cpf; }
274 
275  __cpf = new Potential< GUM_SCALAR >();
276 
277  for (auto var : __formulas->variablesSequence()) {
278  __cpf->add(*var);
279  }
280 
281  auto params = __class->scope();
282 
283  Instantiation inst(__formulas);
284  Instantiation jnst(__cpf);
285 
286  for (inst.setFirst(), jnst.setFirst(); !(inst.end() || jnst.end());
287  inst.inc(), jnst.inc()) {
288  // With CPT defined using rules, empty values can appear
289  auto val = __formulas->get(inst);
290  if (val == "") { val = "0.0"; }
291 
292  Formula f(val);
293 
294  for (auto item : params) {
295  f.variables().insert(item.first, item.second->value());
296  }
297 
298  __cpf->set(jnst, (GUM_SCALAR)f.result());
299  }
300 
301  GUM_ASSERT(inst.end() && jnst.end());
302 
303  } catch (Exception&) { GUM_ERROR(NotFound, "undefined value in cpt"); }
304  GUM_ASSERT(__formulas->contains(__type->variable()));
305  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
virtual const Sequence< const DiscreteVariable * > & variablesSequence() const override
Returns a const ref to the sequence of DiscreteVariable*.
const PRMClass< GUM_SCALAR > * __class
A pointe toward the class of this attribute.
virtual bool contains(const DiscreteVariable &v) const override
Returns true if var is in *this.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66
virtual GUM_SCALAR get(const Instantiation &i) const
Returns the value pointed by i.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
PRMType< GUM_SCALAR > * gum::prm::PRMFormAttribute< GUM_SCALAR >::_type ( )
protectedvirtual

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 371 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__type.

371  {
372  return __type;
373  }
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::_type ( PRMType< GUM_SCALAR > *  t)
protectedvirtual

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 376 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::MultiDimImplementation< GUM_SCALAR >::add(), gum::MultiDimImplementation< GUM_SCALAR >::contains(), gum::Instantiation::end(), GUM_ERROR, gum::Instantiation::inc(), gum::MultiDimContainer< GUM_SCALAR >::set(), gum::Instantiation::setFirst(), and gum::prm::PRMType< GUM_SCALAR >::variable().

376  {
377  if (__type->variable().domainSize() != t->variable().domainSize()) {
378  GUM_ERROR(OperationNotAllowed,
379  "Cannot replace types with difference domain size");
380  }
381  auto old = __formulas;
382 
383  __formulas = new MultiDimArray< std::string >();
384 
385  for (auto var : old->variablesSequence()) {
386  if (var != &(__type->variable())) {
387  __formulas->add(*var);
388  } else {
389  __formulas->add(t->variable());
390  }
391  }
392 
393  Instantiation inst(__formulas), jnst(old);
394 
395  for (inst.setFirst(), jnst.setFirst(); !(inst.end() || jnst.end());
396  inst.inc(), jnst.inc()) {
397  __formulas->set(inst, old->get(jnst));
398  }
399 
400  delete old;
401 
402  __type = t;
403 
404  if (__cpf) {
405  delete __cpf;
406  __cpf = 0;
407  }
408 
409  GUM_ASSERT(__formulas->contains(__type->variable()));
410  GUM_ASSERT(inst.end() && jnst.end());
411  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
virtual void set(const Instantiation &i, const GUM_SCALAR &value) const
Changes the value pointed by i.
virtual void add(const DiscreteVariable &v) override
Adds a new var to the variables of the multidimensional matrix.
virtual bool contains(const DiscreteVariable &v) const override
Returns true if var is in *this.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::addChild ( const PRMClassElement< GUM_SCALAR > &  elt)
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 179 of file PRMFormAttribute_tpl.h.

180  {}
template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::addParent ( const PRMClassElement< GUM_SCALAR > &  elt)
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 156 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::MultiDimImplementation< GUM_SCALAR >::add(), gum::MultiDimImplementation< GUM_SCALAR >::contains(), GUM_ERROR, gum::prm::PRMObject::name(), and gum::prm::PRMClassElement< GUM_SCALAR >::type().

157  {
158  try {
159  if (__cpf) {
160  delete __cpf;
161  __cpf = 0;
162  }
163  __formulas->add(elt.type().variable());
164  } catch (DuplicateElement&) {
165  std::stringstream msg;
166  msg << ": " << elt.name() << " as parent of " << this->name();
167  GUM_ERROR(DuplicateElement, msg.str());
168  } catch (OperationNotAllowed&) {
169  std::stringstream msg;
170  msg << ": " << elt.name() << " of wrong type as parent of "
171  << this->name();
172  GUM_ERROR(OperationNotAllowed, msg.str());
173  }
174 
175  GUM_ASSERT(__formulas->contains(__type->variable()));
176  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:32
virtual void add(const DiscreteVariable &v) override
Adds a new var to the variables of the multidimensional matrix.
virtual bool contains(const DiscreteVariable &v) const override
Returns true if var is in *this.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::becomeCastDescendant ( PRMType< GUM_SCALAR > &  subtype)
virtual

Change this attribute to be a cast descendant of a an attribute with type subtype.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 231 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::MultiDimImplementation< GUM_SCALAR >::add(), gum::Instantiation::end(), gum::Instantiation::inc(), gum::prm::PRMType< GUM_SCALAR >::label_map(), gum::Instantiation::pos(), gum::MultiDimContainer< GUM_SCALAR >::set(), gum::Instantiation::setFirst(), gum::prm::PRMFormAttribute< GUM_SCALAR >::type(), and gum::prm::PRMType< GUM_SCALAR >::variable().

232  {
233  delete __formulas;
234 
235  __formulas = new MultiDimArray< std::string >();
236  __formulas->add(type().variable());
237  __formulas->add(subtype.variable());
238 
239  Instantiation inst(__formulas);
240 
241  for (inst.setFirst(); !inst.end(); inst.inc()) {
242  auto my_pos = inst.pos(subtype.variable());
243  if (subtype.label_map()[my_pos] == inst.pos(type().variable())) {
244  __formulas->set(inst, "1");
245  } else {
246  __formulas->set(inst, "0");
247  }
248  }
249 
250  if (__cpf) {
251  delete __cpf;
252  __cpf = nullptr;
253  }
254  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
virtual PRMType< GUM_SCALAR > & type()
See gum::prm::PRMAttribute.
virtual void set(const Instantiation &i, const GUM_SCALAR &value) const
Changes the value pointed by i.
virtual void add(const DiscreteVariable &v) override
Adds a new var to the variables of the multidimensional matrix.

+ Here is the call graph for this function:

template<typename GUM_SCALAR>
INLINE std::string gum::prm::PRMClassElement< GUM_SCALAR >::cast ( const PRMType< GUM_SCALAR > &  t) const
virtualinherited

Returns the name of the cast descendant with PRMType t of this PRMClassElement.

Parameters
tThe type in which we want to cast this PRMClassElement.
Exceptions
OperationNotAllowedIf the cast is impossible.

Definition at line 71 of file PRMClassElement_tpl.h.

References GUM_ERROR, gum::prm::PRMObject::LEFT_CAST(), gum::prm::PRMObject::name(), gum::prm::PRMType< GUM_SCALAR >::name(), gum::prm::PRMObject::RIGHT_CAST(), and gum::prm::PRMClassElement< GUM_SCALAR >::type().

Referenced by gum::prm::PRMFactory< GUM_SCALAR >::addNoisyOrCompound(), gum::prm::PRMFormAttribute< GUM_SCALAR >::getCastDescendant(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::getCastDescendant(), gum::prm::PRMAggregate< GUM_SCALAR >::getCastDescendant(), and gum::prm::PRMClassElement< double >::isParameter().

71  {
72  if (type().isSubTypeOf(t)) {
73  return PRMObject::LEFT_CAST() + t.name() + PRMObject::RIGHT_CAST()
74  + name();
75  } else {
76  GUM_ERROR(OperationNotAllowed, "illegal cast");
77  }
78  }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:32
static std::string LEFT_CAST()
Enumeration of the different types of objects handled by a PRM.
Definition: PRMObject.h:76
static std::string RIGHT_CAST()
Enumeration of the different types of objects handled by a PRM.
Definition: PRMObject.h:77
virtual PRMType< GUM_SCALAR > & type()=0
Return a reference over the gum::PRMType of this class element.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
PRMAttribute< GUM_SCALAR > * gum::prm::PRMFormAttribute< GUM_SCALAR >::copy ( Bijection< const DiscreteVariable *, const DiscreteVariable * >  bij) const
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 71 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__class, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::Instantiation::end(), gum::MultiDimContainer< GUM_SCALAR >::get(), gum::Instantiation::inc(), gum::prm::PRMObject::name(), gum::Instantiation::setFirst(), gum::prm::PRMFormAttribute< GUM_SCALAR >::type(), and gum::MultiDimImplementation< GUM_SCALAR >::variablesSequence().

72  {
73  auto copy =
74  new PRMFormAttribute< GUM_SCALAR >(*__class, this->name(), this->type());
75  for (auto var : __formulas->variablesSequence()) {
76  if (var != &(__type->variable())) { copy->__formulas->add(*var); }
77  }
78 
79  Instantiation inst(*(copy->__formulas)), jnst(*__formulas);
80  for (inst.setFirst(), jnst.setFirst(); !(inst.end() || jnst.end());
81  inst.inc(), jnst.inc()) {
82  copy->__formulas->set(inst, __formulas->get(jnst));
83  }
84 
85  GUM_ASSERT(copy->__formulas->contains(copy->__type->variable()));
86  return copy;
87  }
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
virtual PRMAttribute< GUM_SCALAR > * copy(Bijection< const DiscreteVariable *, const DiscreteVariable * > bij) const
See gum::prm::PRMAttribute.
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:32
virtual PRMType< GUM_SCALAR > & type()
See gum::prm::PRMAttribute.
virtual const Sequence< const DiscreteVariable * > & variablesSequence() const override
Returns a const ref to the sequence of DiscreteVariable*.
const PRMClass< GUM_SCALAR > * __class
A pointe toward the class of this attribute.
virtual GUM_SCALAR get(const Instantiation &i) const
Returns the value pointed by i.

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::copyCpf ( const Bijection< const DiscreteVariable *, const DiscreteVariable * > &  bif,
const PRMAttribute< GUM_SCALAR > &  source 
)
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 90 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::MultiDimImplementation< GUM_SCALAR >::add(), gum::MultiDimImplementation< GUM_SCALAR >::contains(), gum::prm::PRMAttribute< GUM_SCALAR >::cpf(), gum::Instantiation::end(), gum::Instantiation::inc(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::second(), gum::MultiDimContainer< GUM_SCALAR >::set(), gum::Instantiation::setFirst(), gum::to_string(), and gum::prm::PRMAttribute< GUM_SCALAR >::type().

92  {
93  delete __formulas;
94  __formulas = new MultiDimArray< std::string >();
95 
96  for (const auto& var : source.cpf().variablesSequence()) {
97  __formulas->add(*(bij.second(var)));
98  }
99 
100  if (dynamic_cast< const PRMFormAttribute* >(&source)) {
101  const auto& src = static_cast< const PRMFormAttribute& >(source);
102 
103  Instantiation inst(__formulas), jnst(src.__formulas);
104 
105  for (inst.setFirst(), jnst.setFirst(); !(inst.end() || jnst.end());
106  inst.inc(), jnst.inc()) {
107  __formulas->set(inst, src.__formulas->get(jnst));
108  }
109 
110  GUM_ASSERT(inst.end() && jnst.end());
111 
112  } else {
113  Instantiation inst(__formulas), jnst(source.cpf());
114 
115  for (inst.setFirst(), jnst.setFirst(); !(inst.end() || jnst.end());
116  inst.inc(), jnst.inc()) {
117  auto val = std::to_string(source.cpf().get(jnst));
118  __formulas->set(inst, val);
119  }
120 
121  GUM_ASSERT(inst.end() && jnst.end());
122  }
123 
124  if (__cpf) {
125  delete __cpf;
126  __cpf = 0;
127  }
128 
129  GUM_ASSERT(__formulas->contains(__type->variable()));
130  GUM_ASSERT(!__formulas->contains(source.type().variable()));
131  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMFormAttribute(const PRMClass< GUM_SCALAR > &c, const std::string &name, const PRMType< GUM_SCALAR > &type, MultiDimImplementation< std::string > *impl=new MultiDimArray< std::string >())
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
std::string to_string(const Formula &f)
Definition: formula_inl.h:479
virtual void set(const Instantiation &i, const GUM_SCALAR &value) const
Changes the value pointed by i.
virtual void add(const DiscreteVariable &v) override
Adds a new var to the variables of the multidimensional matrix.
virtual bool contains(const DiscreteVariable &v) const override
Returns true if var is in *this.

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
const Potential< GUM_SCALAR > & gum::prm::PRMFormAttribute< GUM_SCALAR >::cpf ( ) const
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 150 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, and gum::prm::PRMFormAttribute< GUM_SCALAR >::__fillCpf().

150  {
151  if (__cpf == 0) { __fillCpf(); }
152  return *__cpf;
153  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
PRMClassElement< GUM_SCALAR >::ClassElementType gum::prm::PRMFormAttribute< GUM_SCALAR >::elt_type ( ) const
virtual
static std::string gum::prm::PRMObject::enum2str ( prm_type  type)
inlinestaticinherited

Returns the string representation of a PRMObject.

Definition at line 80 of file PRMObject.h.

References gum::prm::PRMObject::CLASS, gum::prm::PRMObject::CLASS_ELT, gum::prm::PRMObject::INSTANCE, gum::prm::PRMObject::PRM_INTERFACE, gum::prm::PRMObject::SYSTEM, and gum::prm::PRMObject::TYPE.

Referenced by gum::prm::operator<<().

80  {
81  switch (type) {
82  case prm_type::CLASS: return "PRMType::CLASS";
83 
84  case prm_type::CLASS_ELT: return "PRMType::CLASS_ELT";
85 
86  case prm_type::TYPE: return "PRMType::TYPE";
87 
88  case prm_type::SYSTEM: return "PRMType::SYSTEM";
89 
90  case prm_type::INSTANCE: return "PRMType::INSTANCE";
91 
92  case prm_type::PRM_INTERFACE: return "PRMType::PRM_INTERFACE";
93 
94  default: return "unknown";
95  }
96  }

+ Here is the caller graph for this function:

template<typename GUM_SCALAR>
static std::string gum::prm::PRMClassElement< GUM_SCALAR >::enum2str ( ClassElementType  type)
inlinestaticinherited

Returns true if obj_ptr is of type PRMReferenceSlot.

Definition at line 98 of file PRMClassElement.h.

98  {
99  switch (type) {
100  case prm_attribute: return "prm_attribute";
101 
102  case prm_aggregate: return "prm_aggregate";
103 
104  case prm_refslot: return "prm_refslot";
105 
106  case prm_slotchain: return "prm_slotchain";
107 
108  case prm_parameter: return "prm_parameter";
109 
110  default: return "unknown";
111  }
112  }
virtual PRMType< GUM_SCALAR > & type()=0
Return a reference over the gum::PRMType of this class element.
template<typename GUM_SCALAR >
MultiDimImplementation< std::string > & gum::prm::PRMFormAttribute< GUM_SCALAR >::formulas ( )
virtual

Definition at line 309 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, and gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas.

309  {
310  if (__cpf) {
311  delete __cpf;
312  __cpf = 0;
313  }
314  return *__formulas;
315  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
template<typename GUM_SCALAR >
const MultiDimImplementation< std::string > & gum::prm::PRMFormAttribute< GUM_SCALAR >::formulas ( ) const
virtual

Definition at line 319 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas.

319  {
320  return *__formulas;
321  }
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
template<typename GUM_SCALAR >
PRMAttribute< GUM_SCALAR > * gum::prm::PRMFormAttribute< GUM_SCALAR >::getCastDescendant ( ) const
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 184 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::prm::PRMScalarAttribute< GUM_SCALAR >::addParent(), gum::prm::PRMClassElement< GUM_SCALAR >::cast(), gum::MultiDimImplementation< GUM_SCALAR >::contains(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::cpf(), GUM_ERROR, gum::prm::PRMObject::name(), gum::prm::PRMFormAttribute< GUM_SCALAR >::type(), and gum::prm::PRMScalarAttribute< GUM_SCALAR >::type().

184  {
185  PRMScalarAttribute< GUM_SCALAR >* cast = 0;
186 
187  try {
188  cast =
189  new PRMScalarAttribute< GUM_SCALAR >(this->name(), type().superType());
190  } catch (NotFound&) {
191  GUM_ERROR(OperationNotAllowed,
192  "this ScalarAttribute can not have cast descendant");
193  }
194 
195  cast->addParent(*this);
196 
197  const DiscreteVariable& my_var = type().variable();
198  DiscreteVariable& cast_var = cast->type().variable();
199  Instantiation inst(cast->cpf());
200 
201  for (inst.setFirst(); !inst.end(); inst.inc()) {
202  if (type().label_map()[inst.val(my_var)] == inst.val(cast_var)) {
203  cast->cpf().set(inst, 1);
204  } else {
205  cast->cpf().set(inst, 0);
206  }
207  }
208 
209  GUM_ASSERT(__formulas->contains(__type->variable()));
210  return cast;
211  }
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:32
virtual std::string cast(const PRMType< GUM_SCALAR > &t) const
Returns the name of the cast descendant with PRMType t of this PRMClassElement.
virtual PRMType< GUM_SCALAR > & type()
See gum::prm::PRMAttribute.
virtual bool contains(const DiscreteVariable &v) const override
Returns true if var is in *this.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
INLINE NodeId gum::prm::PRMClassElement< GUM_SCALAR >::id ( ) const
inherited

Returns the NodeId of this element in it's class DAG.

Definition at line 50 of file PRMClassElement_tpl.h.

References gum::prm::PRMClassElement< GUM_SCALAR >::__id.

Referenced by gum::prm::PRMClass< GUM_SCALAR >::__addCastDescendants(), gum::prm::PRMInterface< GUM_SCALAR >::__addCastDescendants(), gum::prm::PRMClass< GUM_SCALAR >::__checkInterface(), gum::prm::PRMClass< GUM_SCALAR >::__checkRefInterface(), gum::prm::PRMInstance< GUM_SCALAR >::__copyAggregates(), gum::prm::PRMInstance< GUM_SCALAR >::__copyAttribute(), gum::prm::PRMSlotChain< GUM_SCALAR >::__copyLastElt(), gum::prm::SVE< GUM_SCALAR >::__getAggPotential(), gum::prm::PRMSystem< GUM_SCALAR >::__groundPotential(), gum::prm::PRMClass< GUM_SCALAR >::__inheritClass(), gum::prm::InstanceBayesNet< GUM_SCALAR >::__init(), gum::prm::ClassBayesNet< GUM_SCALAR >::__init(), gum::prm::PRMInstance< GUM_SCALAR >::__instantiateSlotChain(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadParameter(), gum::prm::PRMClass< GUM_SCALAR >::__overloadReference(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadReferenceSlot(), gum::prm::SVED< GUM_SCALAR >::_marginal(), gum::prm::SVE< GUM_SCALAR >::_marginal(), gum::prm::PRMInterface< GUM_SCALAR >::add(), gum::prm::PRMClass< GUM_SCALAR >::add(), gum::prm::PRMClass< GUM_SCALAR >::addArc(), gum::prm::PRMClass< GUM_SCALAR >::inheritAggregates(), gum::prm::PRMClassElement< double >::isParameter(), gum::prm::PRMClass< GUM_SCALAR >::overload(), gum::prm::PRMInterface< GUM_SCALAR >::overload(), gum::prm::PRMClassElement< GUM_SCALAR >::setId(), and gum::prm::PRMFactory< GUM_SCALAR >::startAttribute().

50  {
51  return __id;
52  }
NodeId __id
The node&#39;s id of this element.

+ Here is the caller graph for this function:

template<typename GUM_SCALAR>
static INLINE bool gum::prm::PRMClassElement< GUM_SCALAR >::isAggregate ( const PRMClassElement< GUM_SCALAR > &  elt)
inlinestaticinherited

Return true if obj is of type PRMAggregate.

Definition at line 125 of file PRMClassElement.h.

Referenced by gum::prm::PRMClass< GUM_SCALAR >::__checkInterface(), gum::prm::StructuredInference< GUM_SCALAR >::CData::CData(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::setInputNode(), and gum::prm::PRMClassElementContainer< GUM_SCALAR >::setOutputNode().

125  {
126  return elt.elt_type() == prm_aggregate;
127  }

+ Here is the caller graph for this function:

template<typename GUM_SCALAR>
static INLINE bool gum::prm::PRMClassElement< GUM_SCALAR >::isAttribute ( const PRMClassElement< GUM_SCALAR > &  elt)
inlinestaticinherited

Returns true if obj_ptr is of type PRMAttribute.

Definition at line 120 of file PRMClassElement.h.

Referenced by gum::prm::PRMClass< GUM_SCALAR >::__checkInterface().

120  {
121  return elt.elt_type() == prm_attribute;
122  }

+ Here is the caller graph for this function:

static INLINE bool gum::prm::PRMObject::isClass ( const PRMObject obj)
inlinestaticinherited

Returns true if obj_ptr is of type Class.

Definition at line 99 of file PRMObject.h.

References gum::prm::PRMObject::CLASS, and gum::prm::PRMObject::obj_type().

Referenced by gum::prm::PRMClass< GUM_SCALAR >::scope(), and gum::prm::PRMFactory< GUM_SCALAR >::startAttribute().

99  {
100  return obj.obj_type() == prm_type::CLASS;
101  }

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static INLINE bool gum::prm::PRMObject::isInstance ( const PRMObject obj)
inlinestaticinherited

Returns true if obj_ptr is of type PRMInstance.

Definition at line 109 of file PRMObject.h.

References gum::prm::PRMObject::INSTANCE, gum::prm::PRMObject::name(), gum::prm::PRMObject::obj_type(), gum::prm::PRMObject::operator!=(), gum::prm::PRMObject::operator=(), gum::prm::PRMObject::operator==(), gum::prm::PRMObject::PRMObject(), and gum::prm::PRMObject::~PRMObject().

109  {
110  return obj.obj_type() == prm_type::INSTANCE;
111  }

+ Here is the call graph for this function:

static INLINE bool gum::prm::PRMObject::isInterface ( const PRMObject obj)
inlinestaticinherited

Returns true if obj_ptr is of type PRMInterface.

Definition at line 104 of file PRMObject.h.

References gum::prm::PRMObject::obj_type(), and gum::prm::PRMObject::PRM_INTERFACE.

104  {
105  return obj.obj_type() == prm_type::PRM_INTERFACE;
106  }

+ Here is the call graph for this function:

template<typename GUM_SCALAR>
static INLINE bool gum::prm::PRMClassElement< GUM_SCALAR >::isParameter ( const PRMClassElement< GUM_SCALAR > &  elt)
inlinestaticinherited

Return true if obj is of type PRMParameter.

Definition at line 135 of file PRMClassElement.h.

135  {
136  return elt.elt_type() == prm_parameter;
137  }
template<typename GUM_SCALAR>
static INLINE bool gum::prm::PRMClassElement< GUM_SCALAR >::isReferenceSlot ( const PRMClassElement< GUM_SCALAR > &  elt)
inlinestaticinherited

Returns true if obj_ptr is of type PRMReferenceSlot.

Definition at line 115 of file PRMClassElement.h.

115  {
116  return elt.elt_type() == prm_refslot;
117  }
template<typename GUM_SCALAR>
static INLINE bool gum::prm::PRMClassElement< GUM_SCALAR >::isSlotChain ( const PRMClassElement< GUM_SCALAR > &  elt)
inlinestaticinherited

Return true if obj is of type PRMSlotChain.

Definition at line 130 of file PRMClassElement.h.

Referenced by gum::prm::PRMFactory< GUM_SCALAR >::__retrieveInputs().

130  {
131  return elt.elt_type() == prm_slotchain;
132  }

+ Here is the caller graph for this function:

static std::string gum::prm::PRMObject::LEFT_CAST ( )
inlinestaticinherited

Enumeration of the different types of objects handled by a PRM.

The "all" type is used to tell that we want any kind of PRMType (useful with iterators for example). No PRMObject will ever have "all" as type.

Definition at line 76 of file PRMObject.h.

Referenced by gum::prm::PRMClassElement< GUM_SCALAR >::cast(), gum::prm::decomposePath(), gum::prm::PRMAggregate< GUM_SCALAR >::PRMAggregate(), gum::prm::PRMFormAttribute< GUM_SCALAR >::PRMFormAttribute(), gum::prm::PRMReferenceSlot< GUM_SCALAR >::PRMReferenceSlot(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::PRMScalarAttribute(), and gum::prm::PRMSlotChain< GUM_SCALAR >::PRMSlotChain().

76 { return "("; }

+ Here is the caller graph for this function:

INLINE const std::string & gum::prm::PRMObject::name ( ) const
inherited

Returns the name of this object.

Definition at line 32 of file PRMObject_inl.h.

References gum::prm::PRMObject::__name.

Referenced by gum::prm::SVE< GUM_SCALAR >::__addDelayedVariable(), gum::prm::PRMClass< GUM_SCALAR >::__addIOInterfaceFlags(), gum::prm::PRMFactory< GUM_SCALAR >::__addParent(), gum::prm::PRMInstance< GUM_SCALAR >::__addReferingInstance(), gum::prm::PRMClass< GUM_SCALAR >::__checkInterface(), gum::prm::PRMFactory< GUM_SCALAR >::__checkInterfaceImplementation(), gum::prm::PRMClass< GUM_SCALAR >::__checkInterfaces(), gum::prm::o3prm::O3ClassFactory< GUM_SCALAR >::__checkRawCPT(), gum::prm::PRMClass< GUM_SCALAR >::__checkRefInterface(), gum::prm::PRMClass< GUM_SCALAR >::__checkRefInterfaces(), gum::prm::o3prm::O3ClassFactory< GUM_SCALAR >::__checkRuleCPTSumsTo1(), gum::prm::PRMInstance< GUM_SCALAR >::__copyAggregates(), gum::prm::PRMInstance< GUM_SCALAR >::__copyAttribute(), gum::prm::PRMSlotChain< GUM_SCALAR >::__copyLastElt(), gum::prm::PRMSystem< GUM_SCALAR >::__groundAttr(), gum::prm::PRMSystem< GUM_SCALAR >::__groundPotential(), gum::prm::PRMSystem< GUM_SCALAR >::__groundRef(), gum::prm::PRMClass< GUM_SCALAR >::__inheritClass(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadParameter(), gum::prm::PRMClass< GUM_SCALAR >::__overloadReference(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadReferenceSlot(), gum::prm::__print_attribute__(), gum::prm::__print_instance__(), gum::prm::gspan::StrictSearch< GUM_SCALAR >::__str(), gum::prm::StructuredInference< GUM_SCALAR >::__str(), gum::prm::PRMInterface< GUM_SCALAR >::add(), gum::prm::PRMSystem< GUM_SCALAR >::add(), gum::prm::PRMClass< GUM_SCALAR >::add(), gum::prm::PRMFactory< GUM_SCALAR >::addAggregator(), gum::prm::PRMFormAttribute< GUM_SCALAR >::addParent(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::addParent(), gum::prm::PRMClassElement< GUM_SCALAR >::cast(), gum::prm::PRMClass< GUM_SCALAR >::completeInheritance(), gum::prm::PRMFormAttribute< GUM_SCALAR >::copy(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::copy(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::exists(), gum::prm::o3prmr::O3prmrInterpreter::findAttributeName(), gum::prm::o3prmr::O3prmrInterpreter::findInstanceName(), gum::prm::PRMInterface< GUM_SCALAR >::get(), gum::prm::PRMSystem< GUM_SCALAR >::get(), gum::prm::PRMClass< GUM_SCALAR >::get(), gum::prm::PRMSystem< GUM_SCALAR >::getArray(), gum::prm::PRMSystem< GUM_SCALAR >::getArrayType(), gum::prm::PRMFormAttribute< GUM_SCALAR >::getCastDescendant(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::getCastDescendant(), gum::prm::PRMAggregate< GUM_SCALAR >::getCastDescendant(), gum::prm::PRMSystem< GUM_SCALAR >::groundedBN(), gum::prm::PRMClass< GUM_SCALAR >::inheritAggregates(), gum::prm::PRMClass< GUM_SCALAR >::isCastDescendant(), gum::prm::PRMObject::isInstance(), gum::prm::PRMObject::name(), gum::prm::PRMType< GUM_SCALAR >::name(), gum::prm::PRMFormAttribute< GUM_SCALAR >::newFactory(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::newFactory(), gum::prm::PRMType< GUM_SCALAR >::operator!=(), gum::prm::PRMObject::operator!=(), operator<<(), gum::prm::PRMType< GUM_SCALAR >::operator==(), gum::prm::PRMObject::operator==(), gum::prm::PRMInterface< GUM_SCALAR >::operator[](), gum::prm::PRMClass< GUM_SCALAR >::operator[](), gum::prm::PRMInterface< GUM_SCALAR >::overload(), gum::prm::PRMClass< GUM_SCALAR >::overload(), gum::prm::PRMAggregate< GUM_SCALAR >::PRMAggregate(), gum::prm::PRMFormAttribute< GUM_SCALAR >::PRMFormAttribute(), gum::prm::PRMParameter< GUM_SCALAR >::PRMParameter(), gum::prm::PRMReferenceSlot< GUM_SCALAR >::PRMReferenceSlot(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::PRMScalarAttribute(), gum::prm::PRMSlotChain< GUM_SCALAR >::PRMSlotChain(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::setInputNode(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::setOutputNode(), and gum::prm::PRMAggregate< double >::str2enum().

32 { return __name; }
std::string __name
Definition: PRMObject.h:197
INLINE void gum::prm::PRMObject::name ( const std::string &  name)
inherited

Change the name of the PRM Object.

Warning
Don't do this unless you know wath you are doing !

Definition at line 36 of file PRMObject_inl.h.

References gum::prm::PRMObject::__name, and gum::prm::PRMObject::name().

36 { __name = name; }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:32
std::string __name
Definition: PRMObject.h:197

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
PRMAttribute< GUM_SCALAR > * gum::prm::PRMFormAttribute< GUM_SCALAR >::newFactory ( const PRMClass< GUM_SCALAR > &  c) const
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 63 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMObject::name(), gum::MultiDimImplementation< GUM_SCALAR >::newFactory(), gum::prm::PRMFormAttribute< GUM_SCALAR >::PRMFormAttribute(), and gum::prm::PRMFormAttribute< GUM_SCALAR >::type().

64  {
65  auto impl = static_cast< MultiDimImplementation< std::string >* >(
66  this->__formulas->newFactory());
67  return new PRMFormAttribute(c, this->name(), this->type(), impl);
68  }
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMFormAttribute(const PRMClass< GUM_SCALAR > &c, const std::string &name, const PRMType< GUM_SCALAR > &type, MultiDimImplementation< std::string > *impl=new MultiDimArray< std::string >())
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:32
virtual PRMType< GUM_SCALAR > & type()
See gum::prm::PRMAttribute.
virtual MultiDimContainer< GUM_SCALAR > * newFactory() const override=0
Creates an empty clone of this MultiDimContainer.

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
INLINE PRMObject::prm_type gum::prm::PRMClassElement< GUM_SCALAR >::obj_type ( ) const
virtualinherited
See also
gum::PRMObject::obj_type().

Implements gum::prm::PRMObject.

Definition at line 55 of file PRMClassElement_tpl.h.

References gum::prm::PRMObject::CLASS_ELT.

Referenced by gum::prm::PRMClassElement< double >::isParameter().

+ Here is the caller graph for this function:

INLINE bool gum::prm::PRMObject::operator!= ( const PRMObject obj) const
inherited

To PRMObject are equal if they have the same name (which is unique).

Definition at line 46 of file PRMObject_inl.h.

References gum::prm::PRMObject::__name, and gum::prm::PRMObject::name().

Referenced by gum::prm::PRMObject::isInstance().

46  {
47  return __name != obj.name();
48  }
std::string __name
Definition: PRMObject.h:197

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
PRMFormAttribute< GUM_SCALAR > & gum::prm::PRMFormAttribute< GUM_SCALAR >::operator= ( const PRMFormAttribute< GUM_SCALAR > &  source)
private

Definition at line 266 of file PRMFormAttribute_tpl.h.

References GUM_ERROR.

Referenced by gum::prm::PRMFormAttribute< GUM_SCALAR >::PRMFormAttribute().

266  {
267  GUM_ERROR(OperationNotAllowed, "Cannot copy FormAttribute");
268  }
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the caller graph for this function:

INLINE bool gum::prm::PRMObject::operator== ( const PRMObject obj) const
inherited

To PRMObject are equal if they have the same name (which is unique).

Definition at line 40 of file PRMObject_inl.h.

References gum::prm::PRMObject::__name, and gum::prm::PRMObject::name().

Referenced by gum::prm::PRMObject::isInstance().

40  {
41  return __name == obj.name();
42  }
std::string __name
Definition: PRMObject.h:197

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename GUM_SCALAR>
void gum::prm::PRMAttribute< GUM_SCALAR >::overload ( PRMAttribute< GUM_SCALAR > *  source)
virtualinherited

Set this as overload of source (necessayr to preserver internal pointers for MultiDims).

Definition at line 49 of file PRMAttribute_tpl.h.

References gum::prm::PRMAttribute< GUM_SCALAR >::_type().

Referenced by gum::prm::PRMInterface< GUM_SCALAR >::__overloadAttribute(), and gum::prm::PRMClass< GUM_SCALAR >::__overloadAttribute().

49  {
50  auto old_type = this->_type();
51  this->_type(source->_type());
52  source->_type(old_type);
53  }
virtual PRMType< GUM_SCALAR > * _type()=0

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static std::string gum::prm::PRMObject::RIGHT_CAST ( )
inlinestaticinherited

Enumeration of the different types of objects handled by a PRM.

The "all" type is used to tell that we want any kind of PRMType (useful with iterators for example). No PRMObject will ever have "all" as type.

Definition at line 77 of file PRMObject.h.

Referenced by gum::prm::PRMClassElement< GUM_SCALAR >::cast(), gum::prm::decomposePath(), gum::prm::PRMAggregate< GUM_SCALAR >::PRMAggregate(), gum::prm::PRMFormAttribute< GUM_SCALAR >::PRMFormAttribute(), gum::prm::PRMReferenceSlot< GUM_SCALAR >::PRMReferenceSlot(), gum::prm::PRMScalarAttribute< GUM_SCALAR >::PRMScalarAttribute(), and gum::prm::PRMSlotChain< GUM_SCALAR >::PRMSlotChain().

77 { return ")"; }

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
INLINE const std::string & gum::prm::PRMClassElement< GUM_SCALAR >::safeName ( ) const
inherited

Returns the safe name of this PRMClassElement, if any.

This will only work if this PRMClassElement is an PRMAttribute or an PRMAggregate.

Returns
Returns the safe name of this PRMClassElement.
Exceptions
NotFound&Raised if this PRMClassElement does not have any safe name.

Definition at line 65 of file PRMClassElement_tpl.h.

References gum::prm::PRMClassElement< GUM_SCALAR >::_safeName.

Referenced by gum::prm::PRMClass< GUM_SCALAR >::__addCastDescendants(), gum::prm::PRMInterface< GUM_SCALAR >::__addCastDescendants(), gum::prm::PRMFactory< GUM_SCALAR >::__addParent(), gum::prm::PRMInstance< GUM_SCALAR >::__copyAttributeCPF(), gum::prm::SVED< GUM_SCALAR >::__getAggPotential(), gum::prm::PRMSystem< GUM_SCALAR >::__groundPotential(), gum::prm::PRMSystem< GUM_SCALAR >::__groundRef(), gum::prm::PRMClass< GUM_SCALAR >::__inheritClass(), gum::prm::PRMClass< GUM_SCALAR >::__overloadAggregate(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadParameter(), gum::prm::PRMClass< GUM_SCALAR >::__overloadReference(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadReferenceSlot(), gum::prm::__print_attribute__(), gum::prm::gspan::StrictSearch< GUM_SCALAR >::__str(), gum::prm::StructuredInference< GUM_SCALAR >::__str(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::_getIOFlag(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::_setIOFlag(), gum::prm::PRMInterface< GUM_SCALAR >::add(), gum::prm::PRMClass< GUM_SCALAR >::add(), gum::prm::PRMFactory< GUM_SCALAR >::addAggregator(), gum::prm::PRMFactory< GUM_SCALAR >::addAttribute(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::belongsTo(), gum::prm::PRMClass< GUM_SCALAR >::inheritAggregates(), gum::prm::PRMClassElement< double >::isParameter(), gum::prm::PRMClassElementContainer< GUM_SCALAR >::setInputNode(), and gum::prm::PRMClassElementContainer< GUM_SCALAR >::setOutputNode().

65  {
66  return _safeName;
67  }
std::string _safeName
The safe name of this PRMClassElement.

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::setAsCastDescendant ( PRMAttribute< GUM_SCALAR > *  attr)
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 214 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMAttribute< GUM_SCALAR >::becomeCastDescendant(), GUM_ERROR, gum::prm::PRMFormAttribute< GUM_SCALAR >::type(), and gum::prm::PRMAttribute< GUM_SCALAR >::type().

215  {
216  try {
217  type().setSuper(cast->type());
218  } catch (OperationNotAllowed&) {
219  GUM_ERROR(OperationNotAllowed,
220  "this ScalarAttribute can not have cast descendant");
221  } catch (WrongType&) {
222  std::stringstream msg;
223  msg << type().name() << " is not a subtype of " << cast->type().name();
224  GUM_ERROR(WrongType, msg.str());
225  }
226 
227  cast->becomeCastDescendant(type());
228  }
virtual std::string cast(const PRMType< GUM_SCALAR > &t) const
Returns the name of the cast descendant with PRMType t of this PRMClassElement.
virtual PRMType< GUM_SCALAR > & type()
See gum::prm::PRMAttribute.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
INLINE void gum::prm::PRMClassElement< GUM_SCALAR >::setId ( NodeId  id)
virtualinherited

Used to assign the id of this element.

Definition at line 60 of file PRMClassElement_tpl.h.

References gum::prm::PRMClassElement< GUM_SCALAR >::__id, and gum::prm::PRMClassElement< GUM_SCALAR >::id().

Referenced by gum::prm::PRMClass< GUM_SCALAR >::__addCastDescendants(), gum::prm::PRMInterface< GUM_SCALAR >::__addCastDescendants(), gum::prm::PRMClass< GUM_SCALAR >::__checkInterface(), gum::prm::PRMClass< GUM_SCALAR >::__checkRefInterface(), gum::prm::PRMSlotChain< GUM_SCALAR >::__copyLastElt(), gum::prm::PRMClass< GUM_SCALAR >::__inheritClass(), gum::prm::PRMInterface< GUM_SCALAR >::__inheritInterface(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadAttribute(), gum::prm::PRMClass< GUM_SCALAR >::__overloadParameter(), gum::prm::PRMClass< GUM_SCALAR >::__overloadReference(), gum::prm::PRMInterface< GUM_SCALAR >::__overloadReferenceSlot(), gum::prm::PRMInterface< GUM_SCALAR >::add(), gum::prm::PRMClass< GUM_SCALAR >::add(), gum::prm::PRMClass< GUM_SCALAR >::inheritAggregates(), gum::prm::PRMClass< GUM_SCALAR >::inheritReferenceSlots(), and gum::prm::PRMClassElement< double >::isParameter().

60  {
61  __id = id;
62  }
NodeId __id
The node&#39;s id of this element.
NodeId id() const
Returns the NodeId of this element in it&#39;s class DAG.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
void gum::prm::PRMFormAttribute< GUM_SCALAR >::swap ( const PRMType< GUM_SCALAR > &  old_type,
const PRMType< GUM_SCALAR > &  new_type 
)
virtual

Swap old_type with new_type in the PRMClassElement cpt.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 325 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__cpf, gum::prm::PRMFormAttribute< GUM_SCALAR >::__formulas, gum::prm::PRMFormAttribute< GUM_SCALAR >::__type, gum::MultiDimImplementation< GUM_SCALAR >::add(), gum::MultiDimImplementation< GUM_SCALAR >::contains(), gum::Instantiation::end(), GUM_ERROR, gum::Instantiation::inc(), gum::prm::PRMType< GUM_SCALAR >::name(), gum::MultiDimContainer< GUM_SCALAR >::set(), gum::Instantiation::setFirst(), and gum::prm::PRMType< GUM_SCALAR >::variable().

326  {
327  if (&(old_type) == __type) {
328  GUM_ERROR(OperationNotAllowed, "Cannot replace attribute own type");
329  }
330  if (old_type->domainSize() != new_type->domainSize()) {
331  GUM_ERROR(OperationNotAllowed,
332  "Cannot replace types with difference domain size");
333  }
334  if (!__formulas->contains(old_type.variable())) {
335  GUM_ERROR(NotFound, "could not find variable " + old_type.name());
336  }
337 
338  auto old = __formulas;
339 
340  __formulas = new MultiDimArray< std::string >();
341 
342  for (auto var : old->variablesSequence()) {
343  if (var != &(old_type.variable())) {
344  __formulas->add(*var);
345  } else {
346  __formulas->add(new_type.variable());
347  }
348  }
349 
350  Instantiation inst(__formulas), jnst(old);
351 
352  for (inst.setFirst(), jnst.setFirst(); !(inst.end() || jnst.end());
353  inst.inc(), jnst.inc()) {
354  __formulas->set(inst, old->get(jnst));
355  }
356 
357  delete old;
358 
359  if (__cpf) {
360  delete __cpf;
361  __cpf = 0;
362  }
363 
364  GUM_ASSERT(inst.end() && jnst.end());
365  GUM_ASSERT(__formulas->contains(__type->variable()));
366  GUM_ASSERT(!__formulas->contains(new_type.variable()));
367  GUM_ASSERT(__formulas->contains(new_type.variable()));
368  }
Potential< GUM_SCALAR > * __cpf
A pointer on the Potential of this attribute.
MultiDimImplementation< std::string > * __formulas
A pointer on the Potential of this attribute.
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.
virtual void set(const Instantiation &i, const GUM_SCALAR &value) const
Changes the value pointed by i.
virtual void add(const DiscreteVariable &v) override
Adds a new var to the variables of the multidimensional matrix.
virtual bool contains(const DiscreteVariable &v) const override
Returns true if var is in *this.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:66

+ Here is the call graph for this function:

template<typename GUM_SCALAR >
PRMType< GUM_SCALAR > & gum::prm::PRMFormAttribute< GUM_SCALAR >::type ( )
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 140 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__type.

Referenced by gum::prm::PRMFormAttribute< GUM_SCALAR >::becomeCastDescendant(), gum::prm::PRMFormAttribute< GUM_SCALAR >::copy(), gum::prm::PRMFormAttribute< GUM_SCALAR >::getCastDescendant(), gum::prm::PRMFormAttribute< GUM_SCALAR >::newFactory(), and gum::prm::PRMFormAttribute< GUM_SCALAR >::setAsCastDescendant().

140  {
141  return *__type;
142  }
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.

+ Here is the caller graph for this function:

template<typename GUM_SCALAR >
const PRMType< GUM_SCALAR > & gum::prm::PRMFormAttribute< GUM_SCALAR >::type ( ) const
virtual

See gum::prm::PRMAttribute.

Implements gum::prm::PRMAttribute< GUM_SCALAR >.

Definition at line 145 of file PRMFormAttribute_tpl.h.

References gum::prm::PRMFormAttribute< GUM_SCALAR >::__type.

145  {
146  return *__type;
147  }
PRMType< GUM_SCALAR > * __type
The random variable type of this attribute.

Member Data Documentation

template<typename GUM_SCALAR>
const PRMClass< GUM_SCALAR >* gum::prm::PRMFormAttribute< GUM_SCALAR >::__class
private

A pointe toward the class of this attribute.

Definition at line 121 of file PRMFormAttribute.h.

Referenced by gum::prm::PRMFormAttribute< GUM_SCALAR >::__fillCpf(), and gum::prm::PRMFormAttribute< GUM_SCALAR >::copy().


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