make the Unary and Binary ops common
parent
88b36da602
commit
e0fedda712
|
@ -83,7 +83,7 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************ */
|
/* ************************************************************************ */
|
||||||
DecisionTreeFactor DecisionTreeFactor::apply(ADT::Unary op) const {
|
DecisionTreeFactor DecisionTreeFactor::apply(Unary op) const {
|
||||||
// apply operand
|
// apply operand
|
||||||
ADT result = ADT::apply(op);
|
ADT result = ADT::apply(op);
|
||||||
// Make a new factor
|
// Make a new factor
|
||||||
|
@ -91,7 +91,7 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************ */
|
/* ************************************************************************ */
|
||||||
DecisionTreeFactor DecisionTreeFactor::apply(ADT::UnaryAssignment op) const {
|
DecisionTreeFactor DecisionTreeFactor::apply(UnaryAssignment op) const {
|
||||||
// apply operand
|
// apply operand
|
||||||
ADT result = ADT::apply(op);
|
ADT result = ADT::apply(op);
|
||||||
// Make a new factor
|
// Make a new factor
|
||||||
|
@ -100,7 +100,7 @@ namespace gtsam {
|
||||||
|
|
||||||
/* ************************************************************************ */
|
/* ************************************************************************ */
|
||||||
DecisionTreeFactor DecisionTreeFactor::apply(const DecisionTreeFactor& f,
|
DecisionTreeFactor DecisionTreeFactor::apply(const DecisionTreeFactor& f,
|
||||||
ADT::Binary op) const {
|
Binary op) const {
|
||||||
map<Key, size_t> cs; // new cardinalities
|
map<Key, size_t> cs; // new cardinalities
|
||||||
// make unique key-cardinality map
|
// make unique key-cardinality map
|
||||||
for (Key j : keys()) cs[j] = cardinality(j);
|
for (Key j : keys()) cs[j] = cardinality(j);
|
||||||
|
@ -118,8 +118,8 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************ */
|
/* ************************************************************************ */
|
||||||
DecisionTreeFactor::shared_ptr DecisionTreeFactor::combine(
|
DecisionTreeFactor::shared_ptr DecisionTreeFactor::combine(size_t nrFrontals,
|
||||||
size_t nrFrontals, ADT::Binary op) const {
|
Binary op) const {
|
||||||
if (nrFrontals > size()) {
|
if (nrFrontals > size()) {
|
||||||
throw invalid_argument(
|
throw invalid_argument(
|
||||||
"DecisionTreeFactor::combine: invalid number of frontal "
|
"DecisionTreeFactor::combine: invalid number of frontal "
|
||||||
|
@ -146,7 +146,7 @@ namespace gtsam {
|
||||||
|
|
||||||
/* ************************************************************************ */
|
/* ************************************************************************ */
|
||||||
DecisionTreeFactor::shared_ptr DecisionTreeFactor::combine(
|
DecisionTreeFactor::shared_ptr DecisionTreeFactor::combine(
|
||||||
const Ordering& frontalKeys, ADT::Binary op) const {
|
const Ordering& frontalKeys, Binary op) const {
|
||||||
if (frontalKeys.size() > size()) {
|
if (frontalKeys.size() > size()) {
|
||||||
throw invalid_argument(
|
throw invalid_argument(
|
||||||
"DecisionTreeFactor::combine: invalid number of frontal "
|
"DecisionTreeFactor::combine: invalid number of frontal "
|
||||||
|
|
|
@ -51,6 +51,11 @@ namespace gtsam {
|
||||||
typedef std::shared_ptr<DecisionTreeFactor> shared_ptr;
|
typedef std::shared_ptr<DecisionTreeFactor> shared_ptr;
|
||||||
typedef AlgebraicDecisionTree<Key> ADT;
|
typedef AlgebraicDecisionTree<Key> ADT;
|
||||||
|
|
||||||
|
// Needed since we have definitions in both DiscreteFactor and DecisionTree
|
||||||
|
using Base::Binary;
|
||||||
|
using Base::Unary;
|
||||||
|
using Base::UnaryAssignment;
|
||||||
|
|
||||||
/// @name Standard Constructors
|
/// @name Standard Constructors
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
@ -182,21 +187,21 @@ namespace gtsam {
|
||||||
* Apply unary operator (*this) "op" f
|
* Apply unary operator (*this) "op" f
|
||||||
* @param op a unary operator that operates on AlgebraicDecisionTree
|
* @param op a unary operator that operates on AlgebraicDecisionTree
|
||||||
*/
|
*/
|
||||||
DecisionTreeFactor apply(ADT::Unary op) const;
|
DecisionTreeFactor apply(Unary op) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply unary operator (*this) "op" f
|
* Apply unary operator (*this) "op" f
|
||||||
* @param op a unary operator that operates on AlgebraicDecisionTree. Takes
|
* @param op a unary operator that operates on AlgebraicDecisionTree. Takes
|
||||||
* both the assignment and the value.
|
* both the assignment and the value.
|
||||||
*/
|
*/
|
||||||
DecisionTreeFactor apply(ADT::UnaryAssignment op) const;
|
DecisionTreeFactor apply(UnaryAssignment op) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply binary operator (*this) "op" f
|
* Apply binary operator (*this) "op" f
|
||||||
* @param f the second argument for op
|
* @param f the second argument for op
|
||||||
* @param op a binary operator that operates on AlgebraicDecisionTree
|
* @param op a binary operator that operates on AlgebraicDecisionTree
|
||||||
*/
|
*/
|
||||||
DecisionTreeFactor apply(const DecisionTreeFactor& f, ADT::Binary op) const;
|
DecisionTreeFactor apply(const DecisionTreeFactor& f, Binary op) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Combine frontal variables using binary operator "op"
|
* Combine frontal variables using binary operator "op"
|
||||||
|
@ -204,7 +209,7 @@ namespace gtsam {
|
||||||
* @param op a binary operator that operates on AlgebraicDecisionTree
|
* @param op a binary operator that operates on AlgebraicDecisionTree
|
||||||
* @return shared pointer to newly created DecisionTreeFactor
|
* @return shared pointer to newly created DecisionTreeFactor
|
||||||
*/
|
*/
|
||||||
shared_ptr combine(size_t nrFrontals, ADT::Binary op) const;
|
shared_ptr combine(size_t nrFrontals, Binary op) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Combine frontal variables in an Ordering using binary operator "op"
|
* Combine frontal variables in an Ordering using binary operator "op"
|
||||||
|
@ -212,7 +217,7 @@ namespace gtsam {
|
||||||
* @param op a binary operator that operates on AlgebraicDecisionTree
|
* @param op a binary operator that operates on AlgebraicDecisionTree
|
||||||
* @return shared pointer to newly created DecisionTreeFactor
|
* @return shared pointer to newly created DecisionTreeFactor
|
||||||
*/
|
*/
|
||||||
shared_ptr combine(const Ordering& keys, ADT::Binary op) const;
|
shared_ptr combine(const Ordering& keys, Binary op) const;
|
||||||
|
|
||||||
/// Enumerate all values into a map from values to double.
|
/// Enumerate all values into a map from values to double.
|
||||||
std::vector<std::pair<DiscreteValues, double>> enumerate() const;
|
std::vector<std::pair<DiscreteValues, double>> enumerate() const;
|
||||||
|
|
|
@ -46,6 +46,11 @@ class GTSAM_EXPORT DiscreteFactor : public Factor {
|
||||||
|
|
||||||
using Values = DiscreteValues; ///< backwards compatibility
|
using Values = DiscreteValues; ///< backwards compatibility
|
||||||
|
|
||||||
|
using Unary = std::function<double(const double&)>;
|
||||||
|
using UnaryAssignment =
|
||||||
|
std::function<double(const Assignment<Key>&, const double&)>;
|
||||||
|
using Binary = std::function<double(const double, const double)>;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Map of Keys and their cardinalities.
|
/// Map of Keys and their cardinalities.
|
||||||
std::map<Key, size_t> cardinalities_;
|
std::map<Key, size_t> cardinalities_;
|
||||||
|
|
|
@ -94,10 +94,6 @@ class GTSAM_EXPORT TableFactor : public DiscreteFactor {
|
||||||
typedef std::shared_ptr<TableFactor> shared_ptr;
|
typedef std::shared_ptr<TableFactor> shared_ptr;
|
||||||
typedef Eigen::SparseVector<double>::InnerIterator SparseIt;
|
typedef Eigen::SparseVector<double>::InnerIterator SparseIt;
|
||||||
typedef std::vector<std::pair<DiscreteValues, double>> AssignValList;
|
typedef std::vector<std::pair<DiscreteValues, double>> AssignValList;
|
||||||
using Unary = std::function<double(const double&)>;
|
|
||||||
using UnaryAssignment =
|
|
||||||
std::function<double(const Assignment<Key>&, const double&)>;
|
|
||||||
using Binary = std::function<double(const double, const double)>;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// @name Standard Constructors
|
/// @name Standard Constructors
|
||||||
|
|
Loading…
Reference in New Issue