ppforest2 v0.1.0
Projection Pursuit Decision Trees and Random Forests
Loading...
Searching...
No Matches
BenchmarkReport.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include "cli/Benchmark.hpp"
8#include "io/Output.hpp"
9#include "io/Table.hpp"
10#include <optional>
11#include <string>
12#include <unordered_map>
13#include <vector>
14
15namespace ppforest2::cli {
23 explicit Baseline(SuiteResult suite)
24 : SuiteResult(std::move(suite)) {
25 for (auto const& r : results) {
26 index_[r.name] = &r;
27 }
28 }
29
31 std::optional<std::reference_wrapper<ScenarioResult const>> find(std::string const& name) const {
32 auto it = index_.find(name);
33
34 if (it == index_.end()) {
35 return std::nullopt;
36 }
37
38 return std::cref(*it->second);
39 }
40
41 private:
42 std::unordered_map<std::string, ScenarioResult const*> index_;
43 };
44
53 double delta_threshold = 1.0;
54
55 explicit BenchmarkReport(SuiteResult const& r, std::optional<Baseline> const& b = std::nullopt)
56 : result(r)
57 , baseline(b) {}
58
65 struct Style {
66 virtual ~Style() = default;
67
68 protected:
69 friend struct BenchmarkReport;
70
71 virtual std::string good(std::string const& s) const = 0;
72 virtual std::string bad(std::string const& s) const = 0;
73 virtual std::string neutral(std::string const& s) const = 0;
74
75 using Columns = std::vector<ppforest2::io::layout::Column>;
76
77 virtual std::string format_title(std::string const& name, std::string const& timestamp) const = 0;
78 virtual std::string format_baseline_label(std::string const& timestamp) const = 0;
79 virtual std::string format_header(Columns const& columns) const = 0;
80 virtual std::string format_row(Columns const& columns, ppforest2::io::layout::Row const& cells) const = 0;
81 virtual std::string format_footer(std::size_t count, double total_ms) const = 0;
82 };
83
85 struct Text;
86
88 struct Markdown;
89
91 void print(io::Output& out, Style const& style) const;
92
94 nlohmann::json to_json() const;
95
97 std::string to_csv() const;
98
99 private:
100 SuiteResult const& result;
101 std::optional<Baseline> const& baseline;
102
103 static double delta_pct(double current, double baseline);
104 static std::vector<ppforest2::io::layout::Column> make_columns(bool has_baseline);
105
106 struct Deltas {
107 std::optional<double> time;
108 std::optional<double> rss;
109 std::optional<double> tr_err;
110 std::optional<double> te_err;
111 };
112
113 static Deltas compute_deltas(ScenarioResult const& r, Baseline const& baseline);
114 };
115
118 std::string good(std::string const& s) const override;
119 std::string bad(std::string const& s) const override;
120 std::string neutral(std::string const& s) const override;
121
122 std::string format_title(std::string const& name, std::string const& ts) const override;
123 std::string format_baseline_label(std::string const& ts) const override;
124 std::string format_header(Columns const& columns) const override;
125 std::string format_row(Columns const& columns, ppforest2::io::layout::Row const& cells) const override;
126 std::string format_footer(std::size_t count, double total_ms) const override;
127 };
128
131 std::string good(std::string const& s) const override;
132 std::string bad(std::string const& s) const override;
133 std::string neutral(std::string const& s) const override;
134
135 std::string format_title(std::string const& name, std::string const& ts) const override;
136 std::string format_baseline_label(std::string const& ts) const override;
137 std::string format_header(Columns const& columns) const override;
138 std::string format_row(Columns const& columns, ppforest2::io::layout::Row const& cells) const override;
139 std::string format_footer(std::size_t count, double total_ms) const override;
140 };
141}
Benchmark scenario types, JSON parsing, and subprocess-based execution.
Quiet-aware output context for CLI subcommands.
ANSI-safe column-driven table formatting.
Command-line interface: argument parsing, subcommands, and benchmark/evaluation orchestration.
Definition Benchmark.hpp:25
std::vector< std::string > Row
A row of pre-formatted cell strings.
Definition Table.hpp:77
A baseline suite with a pre-built name → result index.
Definition BenchmarkReport.hpp:22
Baseline(SuiteResult suite)
Definition BenchmarkReport.hpp:23
std::optional< std::reference_wrapper< ScenarioResult const > > find(std::string const &name) const
Find a scenario by name.
Definition BenchmarkReport.hpp:31
Markdown style with emoji indicators.
Definition BenchmarkReport.hpp:130
std::string format_header(Columns const &columns) const override
std::string format_footer(std::size_t count, double total_ms) const override
std::string good(std::string const &s) const override
std::string format_row(Columns const &columns, ppforest2::io::layout::Row const &cells) const override
std::string format_baseline_label(std::string const &ts) const override
std::string format_title(std::string const &name, std::string const &ts) const override
std::string bad(std::string const &s) const override
std::string neutral(std::string const &s) const override
Display style for benchmark report output.
Definition BenchmarkReport.hpp:65
virtual std::string neutral(std::string const &s) const =0
virtual std::string format_footer(std::size_t count, double total_ms) const =0
friend struct BenchmarkReport
Definition BenchmarkReport.hpp:69
std::vector< ppforest2::io::layout::Column > Columns
Definition BenchmarkReport.hpp:75
virtual std::string format_header(Columns const &columns) const =0
virtual std::string format_row(Columns const &columns, ppforest2::io::layout::Row const &cells) const =0
virtual std::string format_baseline_label(std::string const &timestamp) const =0
virtual std::string good(std::string const &s) const =0
virtual std::string format_title(std::string const &name, std::string const &timestamp) const =0
virtual std::string bad(std::string const &s) const =0
Terminal style with ANSI color decorators.
Definition BenchmarkReport.hpp:117
std::string neutral(std::string const &s) const override
std::string format_header(Columns const &columns) const override
std::string format_baseline_label(std::string const &ts) const override
std::string bad(std::string const &s) const override
std::string format_footer(std::size_t count, double total_ms) const override
std::string format_row(Columns const &columns, ppforest2::io::layout::Row const &cells) const override
std::string format_title(std::string const &name, std::string const &ts) const override
std::string good(std::string const &s) const override
nlohmann::json to_json() const
Export report as JSON, including deltas when baseline is present.
BenchmarkReport(SuiteResult const &r, std::optional< Baseline > const &b=std::nullopt)
Definition BenchmarkReport.hpp:55
double delta_threshold
Definition BenchmarkReport.hpp:53
void print(io::Output &out, Style const &style) const
Print formatted results to the given output.
std::string to_csv() const
Export report as CSV, including delta columns when baseline is present.
Result of running a single benchmark scenario.
Definition Benchmark.hpp:35
Aggregated results for an entire suite run.
Definition Benchmark.hpp:66
std::vector< ScenarioResult > results
Definition Benchmark.hpp:72
Quiet-aware, indentation-aware output context.
Definition Output.hpp:25