29 #ifndef GUM_PRM_FACTORY_H 30 #define GUM_PRM_FACTORY_H 38 #include <agrum/agrum.h> 39 #include <agrum/tools/core/list.h> 41 #include <agrum/tools/multidim/implementations/multiDimSparse.h> 42 #include <agrum/tools/variables/discreteVariable.h> 44 #include <agrum/PRM/IPRMFactory.h> 45 #include <agrum/PRM/PRM.h> 46 #include <agrum/PRM/utils_prm.h> 73 template <
typename GUM_SCALAR >
74 class PRMFactory:
public IPRMFactory {
89 PRMFactory(PRM< GUM_SCALAR >* prm);
92 PRMFactory(
const PRMFactory& from) =
delete;
95 PRMFactory& operator=(
const PRMFactory& from) =
delete;
99 virtual ~PRMFactory();
113 PRM< GUM_SCALAR >* prm()
const;
119 virtual PRMObject::prm_type currentType()
const override;
125 virtual PRMObject* getCurrent() override;
126 virtual const PRMObject* getCurrent()
const override;
139 virtual PRMObject* closeCurrent() override;
144 virtual std::string currentPackage()
const override;
154 PRMClass< GUM_SCALAR >& retrieveClass(
const std::string& name);
164 PRMType& retrieveType(
const std::string& name);
191 PRMType& retrieveCommonType(
192 const std::vector< PRMClassElement< GUM_SCALAR >* >& elts);
208 virtual void pushPackage(
const std::string& name) override;
215 virtual std::string popPackage() override;
236 virtual void addImport(
const std::string& name) override;
253 virtual void startDiscreteType(
const std::string& name,
254 std::string super =
"") override;
269 virtual void addLabel(
const std::string& l, std::string ext =
"") override;
277 virtual void endDiscreteType() override;
287 virtual void startDiscretizedType(
const std::string& name) override;
294 virtual void addTick(
double tick) override;
302 virtual void endDiscretizedType() override;
317 addRangeType(
const std::string& name,
long minVal,
long maxVal) override;
322 virtual bool isClassOrInterface(
const std::string& type)
const override;
323 virtual bool isArrayInCurrentSystem(
const std::string& name)
const override;
344 virtual void startClass(
const std::string& c,
345 const std::string& ext =
"",
346 const Set< std::string >* implements =
nullptr,
347 bool delayInheritance =
false) override;
352 virtual void continueClass(
const std::string& c) override;
361 virtual void endClass(
bool checkImplementations =
true) override;
383 virtual void startInterface(
const std::string& i,
384 const std::string& ext =
"",
385 bool delayInheritance =
false) override;
390 virtual void continueInterface(
const std::string& name) override;
396 virtual void addAttribute(
const std::string& type,
397 const std::string& name) override;
402 virtual void endInterface() override;
430 virtual void addAttribute(PRMAttribute< GUM_SCALAR >* attr);
436 virtual void startAttribute(
const std::string& type,
437 const std::string& name,
438 bool scalar_atttr =
false) override;
443 virtual void continueAttribute(
const std::string& name) override;
453 virtual void addParent(
const std::string& name) override;
474 void setRawCPFByLines(
const std::vector< GUM_SCALAR >& array);
496 void setRawCPFByColumns(
const std::vector< GUM_SCALAR >& array);
510 virtual void setCPFByRule(
const std::vector< std::string >& labels,
511 const std::vector< GUM_SCALAR >& values);
525 virtual void setCPFByRule(
const std::vector< std::string >& labels,
526 const std::vector< std::string >& values) override;
548 setRawCPFByFloatLines(
const std::vector<
float >& array) override;
571 setRawCPFByFloatColumns(
const std::vector<
float >& array) override;
594 setRawCPFByColumns(
const std::vector< std::string >& array) override;
616 setRawCPFByLines(
const std::vector< std::string >& array) override;
630 virtual void setCPFByFloatRule(
const std::vector< std::string >& labels,
631 const std::vector<
float >& values) override;
637 virtual void endAttribute() override;
656 void addParameter(
const std::string& type,
657 const std::string& name,
658 double value) override;
687 virtual void addAggregator(
const std::string& name,
688 const std::string& agg_type,
689 const std::vector< std::string >& chains,
690 const std::vector< std::string >& params,
691 std::string type =
"") override;
702 void startAggregator(
const std::string& name,
703 const std::string& agg_type,
704 const std::string& rv_type,
705 const std::vector< std::string >& params);
710 void continueAggregator(
const std::string& name);
716 void endAggregator();
743 addNoisyOrCompound(
const std::string& name,
744 const std::vector< std::string >& chains,
745 const std::vector<
float >& numbers,
747 const std::vector< std::string >& label) override;
758 virtual void addReferenceSlot(
const std::string& type,
759 const std::string& name,
760 bool isArray) override;
772 virtual void startSystem(
const std::string& name) override;
778 virtual void endSystem() override;
783 virtual void addInstance(
const std::string& type,
784 const std::string& name) override;
789 void addInstance(
const std::string& type,
790 const std::string& name,
791 const HashTable< std::string,
double >& params) override;
799 virtual void addArray(
const std::string& type,
800 const std::string& name,
806 virtual void incArray(
const std::string& l_i,
807 const std::string& r_i) override;
823 virtual void setReferenceSlot(
const std::string& left_instance,
824 const std::string& left_reference,
825 const std::string& right_instance) override;
841 virtual void setReferenceSlot(
const std::string& l_i,
842 const std::string& r_i) override;
857 std::string addPrefix__(
const std::string& str)
const;
864 PRMObject* checkStack__(Idx i, PRMObject::prm_type obj_type);
866 PRMClassElement< GUM_SCALAR >* checkStack__(
868 typename PRMClassElement< GUM_SCALAR >::ClassElementType obj_type);
870 PRMClassElementContainer< GUM_SCALAR >* checkStackContainter__(Idx i);
894 PRMType* retrieveType__(
const std::string& name)
const;
901 PRMClass< GUM_SCALAR >* retrieveClass__(
const std::string& name)
const;
908 PRMInterface< GUM_SCALAR >*
909 retrieveInterface__(
const std::string& name)
const;
924 PRMSlotChain< GUM_SCALAR >*
925 buildSlotChain__(PRMClassElementContainer< GUM_SCALAR >* start,
926 const std::string& name);
949 bool retrieveInputs__(PRMClass< GUM_SCALAR >* c,
950 const std::vector< std::string >& chains,
951 std::vector< PRMClassElement< GUM_SCALAR >* >& inputs);
975 PRMType* retrieveCommonType__(
976 const std::vector< PRMClassElement< GUM_SCALAR >* >& elts);
985 int typeDepth__(
const PRMType* t);
988 void checkInterfaceImplementation__(PRMClass< GUM_SCALAR >* c);
991 void addParent__(PRMClassElementContainer< GUM_SCALAR >* c,
992 PRMAttribute< GUM_SCALAR >* agg,
993 const std::string& name);
996 void addParent__(PRMClass< GUM_SCALAR >* c,
997 PRMAggregate< GUM_SCALAR >* agg,
998 const std::string& name);
1007 void addInstance__(PRMClass< GUM_SCALAR >* type,
const std::string& name);
1016 void buildAggregateCPF__(PRMSystem< GUM_SCALAR >* model);
1019 void instantiateSlotChain__(PRMSystem< GUM_SCALAR >* model,
1020 PRMInstance< GUM_SCALAR >* inst,
1021 PRMReferenceSlot< GUM_SCALAR >* ref,
1022 PRMSlotChain< GUM_SCALAR >* sc);
1030 retrieveInstanceSequence__(PRMInstance< GUM_SCALAR >* inst,
1031 Sequence< PRMInstance< GUM_SCALAR >* >& seq,
1032 PRMSlotChain< GUM_SCALAR >* sc);
1042 std::vector< std::string > packages__;
1045 std::vector< List< std::string >* > namespaces__;
1048 PRM< GUM_SCALAR >* prm__;
1051 std::vector< PRMObject* > stack__;
1054 HashTable< PRMAggregate< GUM_SCALAR >*, std::vector< std::string > >
1062 #include <agrum/PRM/PRMFactory_tpl.h>