Add formatter
							parent
							
								
									c6925987e1
								
							
						
					
					
						commit
						c5e6650d67
					
				| 
						 | 
				
			
			@ -135,33 +135,31 @@ namespace gtsam {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  /* ************************************************************************* */
 | 
			
		||||
  // Check markdown representation looks as expected.
 | 
			
		||||
  std::string DecisionTreeFactor::_repr_markdown_() const {
 | 
			
		||||
  std::string DecisionTreeFactor::_repr_markdown_(
 | 
			
		||||
      const KeyFormatter& keyFormatter) const {
 | 
			
		||||
    std::stringstream ss;
 | 
			
		||||
 | 
			
		||||
    // Print out header and calculate number of rows.
 | 
			
		||||
    // Print out header and construct argument for `cartesianProduct`.
 | 
			
		||||
    std::vector<std::pair<Key, size_t>> pairs;
 | 
			
		||||
    ss << "|";
 | 
			
		||||
    for (auto& key : cardinalities_) {
 | 
			
		||||
      size_t k = key.second;
 | 
			
		||||
      ss << key.first << "(" << k << ")|";
 | 
			
		||||
    for (auto& key : keys()) {
 | 
			
		||||
      ss << keyFormatter(key) << "|";
 | 
			
		||||
      pairs.emplace_back(key, cardinalities_.at(key));
 | 
			
		||||
    }
 | 
			
		||||
    ss << "value|\n";
 | 
			
		||||
 | 
			
		||||
    // Print out separator with alignment hints.
 | 
			
		||||
    size_t n = cardinalities_.size();
 | 
			
		||||
    ss << "|";
 | 
			
		||||
    for (size_t j = 0; j < n; j++) ss << ":-:|";
 | 
			
		||||
    for (size_t j = 0; j < size(); j++) ss << ":-:|";
 | 
			
		||||
    ss << ":-:|\n";
 | 
			
		||||
 | 
			
		||||
    // Print out all rows.
 | 
			
		||||
    std::vector<std::pair<Key, size_t>> keys(cardinalities_.begin(),
 | 
			
		||||
                                             cardinalities_.end());
 | 
			
		||||
    const auto assignments = cartesianProduct(keys);
 | 
			
		||||
    for (auto &&assignment : assignments) {
 | 
			
		||||
    std::vector<std::pair<Key, size_t>> rpairs(pairs.rbegin(), pairs.rend());
 | 
			
		||||
    const auto assignments = cartesianProduct(rpairs);
 | 
			
		||||
    for (const auto& assignment : assignments) {
 | 
			
		||||
      ss << "|";
 | 
			
		||||
      for (auto& kv : assignment) ss << kv.second << "|";
 | 
			
		||||
      const double value = operator()(assignment);
 | 
			
		||||
      ss << value << "|\n";
 | 
			
		||||
      for (auto& key : keys()) ss << assignment.at(key) << "|";
 | 
			
		||||
      ss << operator()(assignment) << "|\n";
 | 
			
		||||
    }
 | 
			
		||||
    return ss.str();
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -167,7 +167,8 @@ namespace gtsam {
 | 
			
		|||
    /// @{
 | 
			
		||||
    
 | 
			
		||||
    /// Render as markdown table.
 | 
			
		||||
    std::string _repr_markdown_() const;
 | 
			
		||||
    std::string _repr_markdown_(
 | 
			
		||||
        const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
 | 
			
		||||
 | 
			
		||||
    /// @}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,19 +83,21 @@ TEST( DecisionTreeFactor, sum_max)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
// Check markdown representation looks as expected.
 | 
			
		||||
TEST(DecisionTreeFactor, markdown) {
 | 
			
		||||
  DiscreteKey v0(0, 3), v1(1, 2);
 | 
			
		||||
  DecisionTreeFactor f1(v0 & v1, "1 2  3 4  5 6");
 | 
			
		||||
  DiscreteKey A(12, 3), B(5, 2);
 | 
			
		||||
  DecisionTreeFactor f1(A & B, "1 2  3 4  5 6");
 | 
			
		||||
  string expected =
 | 
			
		||||
      "|0(3)|1(2)|value|\n"
 | 
			
		||||
      "|A|B|value|\n"
 | 
			
		||||
      "|:-:|:-:|:-:|\n"
 | 
			
		||||
      "|0|0|1|\n"
 | 
			
		||||
      "|1|0|3|\n"
 | 
			
		||||
      "|2|0|5|\n"
 | 
			
		||||
      "|0|1|2|\n"
 | 
			
		||||
      "|1|0|3|\n"
 | 
			
		||||
      "|1|1|4|\n"
 | 
			
		||||
      "|2|0|5|\n"
 | 
			
		||||
      "|2|1|6|\n";
 | 
			
		||||
  string actual = f1._repr_markdown_();
 | 
			
		||||
  auto formatter = [](Key key) { return key == 12 ? "A" : "B"; };
 | 
			
		||||
  string actual = f1._repr_markdown_(formatter);
 | 
			
		||||
  EXPECT(actual == expected);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue