Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
StatisticProgress.h
Go to the documentation of this file.
1#ifndef STATISTIC_PROGRESS_H
2#define STATISTIC_PROGRESS_H
3
4#include <chrono>
5#include <cstddef>
6#include <cstdint>
7#include <iostream>
8#include <iomanip>
9#include <memory>
10#include <mutex>
11#include <sstream>
12#include <string>
13#include <utility>
14
17 std::string phase = "idle";
18 std::string message;
19 std::size_t completed = 0;
20 std::size_t total = 0;
21 std::size_t attempts = 0;
22 std::size_t failures = 0;
23 double fraction = 0.0;
24 double elapsed_seconds = 0.0;
25 double eta_seconds = -1.0; // negative means that no reliable ETA is available
26 bool finished = false;
27 std::uint64_t sequence = 0;
28};
29
32public:
33 void reset(const std::string& phase = "preparing", const std::string& message = "Preparing statistic workflow");
36
37private:
38 mutable std::mutex mutex_;
39 StatisticProgressEvent latest_ {};
40 std::uint64_t next_sequence_ = 1;
41};
42
45public:
46 StatisticProgressReporter(bool enabled,
47 std::size_t total,
48 std::size_t probe_draws = 5,
49 std::size_t update_every = 1,
50 std::ostream& os = std::cout,
51 std::string label = "Monte-Carlo",
52 std::string item_label = "accepted",
53 std::shared_ptr<StatisticProgressMonitor> monitor = nullptr,
54 std::string phase = "monte_carlo");
55
56 void accepted(std::size_t accepted_count, std::size_t attempts = 0, std::size_t failures = 0);
57 void finish(std::size_t accepted_count, std::size_t attempts, std::size_t failures);
58
59private:
60 double elapsed_seconds() const;
61 double eta_seconds(std::size_t accepted_count) const;
62 std::string eta_string(std::size_t accepted_count) const;
63 std::string bar(std::size_t accepted_count) const;
64 void publish(std::size_t accepted_count,
65 std::size_t attempts,
66 std::size_t failures,
67 bool finished,
68 const std::string& message);
69
70 bool enabled_ = false;
71 std::size_t total_ = 0;
72 std::size_t probe_draws_ = 5;
73 std::size_t update_every_ = 1;
74 std::ostream* os_ = nullptr;
75 std::chrono::steady_clock::time_point start_;
76 std::string label_ = "Monte-Carlo";
77 std::string item_label_ = "accepted";
78 std::shared_ptr<StatisticProgressMonitor> monitor_;
79 std::string phase_ = "monte_carlo";
80};
81
84public:
86 std::string label,
87 std::size_t total_steps,
88 std::ostream& os = std::cout,
89 std::shared_ptr<StatisticProgressMonitor> monitor = nullptr,
90 std::string phase = "chi2_pipeline");
91
92 void start(const std::string& message);
93 void step(std::size_t completed_steps, const std::string& message);
94 void finish(const std::string& message);
95
96private:
97 std::string bar(std::size_t completed_steps) const;
98 double elapsed_seconds() const;
99 std::string elapsed_string() const;
100 void publish(std::size_t completed_steps, const std::string& message, bool finished);
101
102 bool enabled_ = false;
103 std::string label_;
104 std::size_t total_steps_ = 0;
105 std::ostream* os_ = nullptr;
106 std::chrono::steady_clock::time_point start_;
107 std::shared_ptr<StatisticProgressMonitor> monitor_;
108 std::string phase_ = "chi2_pipeline";
109};
110
111#endif
void update(StatisticProgressEvent event)
StatisticProgressEvent snapshot() const
void reset(const std::string &phase="preparing", const std::string &message="Preparing statistic workflow")
void accepted(std::size_t accepted_count, std::size_t attempts=0, std::size_t failures=0)
void finish(std::size_t accepted_count, std::size_t attempts, std::size_t failures)
void finish(const std::string &message)
void start(const std::string &message)
void step(std::size_t completed_steps, const std::string &message)