cpp-stat-bench 0.24.0
Benchmark library with statistics for C++.
Loading...
Searching...
No Matches
parameter_to_time_line_plot.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2025 MusicScience37 (Kenta Kabashima)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
21
22#include <iterator>
23#include <utility>
24#include <vector>
25
26#include <fmt/base.h>
27#include <fmt/format.h>
28#include <plotly_plotter/figure.h>
29#include <plotly_plotter/figure_builders/line.h>
30#include <plotly_plotter/figure_builders/scatter.h>
31#include <plotly_plotter/write_html.h>
32
33#include "common_labels.h"
34#include "create_data_table.h"
38
39namespace stat_bench {
40namespace plots {
41
43 param::ParameterName parameter_name, PlotOptions options)
44 : parameter_name_(std::move(parameter_name)),
45 options_(options),
46 name_for_file_(create_name_for_file(parameter_name_, options_)) {}
47
48auto ParameterToTimeLinePlot::name_for_file() const -> const util::Utf8String& {
49 return name_for_file_;
50}
51
53 const BenchmarkGroupName& group_name,
54 const std::vector<measurer::Measurement>& measurements,
55 const std::string& file_path) {
56 (void)group_name;
57
58 const auto& title = measurer_name.str();
59
60 std::vector<param::ParameterName> parameter_names;
61 parameter_names.push_back(parameter_name_);
62 if (!options_.subplot_column_parameter_name().empty()) {
63 parameter_names.emplace_back(
64 options_.subplot_column_parameter_name().data());
65 }
66 if (!options_.subplot_row_parameter_name().empty()) {
67 parameter_names.emplace_back(
68 options_.subplot_row_parameter_name().data());
69 }
70
71 const auto data_table =
72 create_data_table_with_mean_time(measurements, parameter_names);
73 auto figure_builder = plotly_plotter::figure_builders::line(data_table)
74 .x(parameter_name_.str().str())
75 .y(time_label)
76 .error_y(time_error_label)
77 .group(case_name_label)
78 .log_x(options_.log_parameter())
79 .log_y(true);
80 if (!options_.subplot_column_parameter_name().empty()) {
81 figure_builder.subplot_column(
82 options_.subplot_column_parameter_name().data());
83 }
84 if (!options_.subplot_row_parameter_name().empty()) {
85 figure_builder.subplot_row(
86 options_.subplot_row_parameter_name().data());
87 }
88 auto figure = figure_builder.create();
89 figure.title(title.str());
90 plotly_plotter::write_html(file_path, figure);
91}
92
93auto ParameterToTimeLinePlot::create_name_for_file(
94 const param::ParameterName& parameter_name, const PlotOptions& options)
96 fmt::memory_buffer buffer;
97 fmt::format_to(std::back_inserter(buffer), "by_{}",
98 util::escape_for_file_name(parameter_name.str()));
99 if (!options.subplot_column_parameter_name().empty()) {
100 fmt::format_to(std::back_inserter(buffer), "_by_{}",
102 options.subplot_column_parameter_name().data())));
103 }
104 if (!options.subplot_row_parameter_name().empty()) {
105 fmt::format_to(std::back_inserter(buffer), "_by_{}",
107 util::Utf8String(options.subplot_row_parameter_name().data())));
108 }
109 return util::Utf8String(std::string(buffer.data(), buffer.size()));
110}
111
112} // namespace plots
113} // namespace stat_bench
Class of names of groups of benchmarks.
Class of options for plots.
Class of names of measurers.
auto str() const noexcept -> const util::Utf8String &
Get the string of the name.
Class of names of parameters.
ParameterToTimeLinePlot(param::ParameterName parameter_name, PlotOptions options)
Constructor.
void write(const measurer::MeasurerName &measurer_name, const BenchmarkGroupName &group_name, const std::vector< measurer::Measurement > &measurements, const std::string &file_path) override
Write a plot.
auto name_for_file() const -> const util::Utf8String &override
Get a name for output files.
Class of UTF-8 encoded string.
Definition utf8_string.h:35
Definition of constants for labels in plots.
Declaration of create_data_table function.
Declaration of escape_for_file_name function.
Definition of MeasurerName class.
Namespace of plotting.
Definition box_plot.h:28
constexpr const char * time_label
Label for processing time in plots.
auto create_data_table_with_mean_time(const std::vector< measurer::Measurement > &measurements, const std::vector< param::ParameterName > &parameter_names) -> plotly_plotter::data_table
Create a data table with the mean of processing time.
constexpr const char * time_error_label
Label for errors of processing time in plots.
constexpr const char * case_name_label
Label for case names in plots.
Namespace of utility functions and classes.
auto escape_for_file_name(const Utf8String &input) -> Utf8String
Escape a string for a file name.
Namespace of stat_bench source codes.
STL namespace.
Definition of ParameterToTimeLinePlot class.
Declaration of check_glob_pattern function.