|
1 | 1 | #include "qx/simulation_result.hpp" |
2 | 2 |
|
3 | 3 | #include <fmt/core.h> |
| 4 | +#include <fmt/ranges.h> |
4 | 5 |
|
5 | 6 | #include <cstdint> // uint8_t |
6 | 7 | #include <ostream> |
@@ -34,37 +35,27 @@ std::uint8_t SimulationResult::get_bit_measurement( |
34 | 35 | return static_cast<std::uint8_t>(state_string[state_string.size() - index - 1] - '0'); |
35 | 36 | } |
36 | 37 |
|
| 38 | +std::ostream& operator<<(std::ostream& os, const Measurement& measurement) { |
| 39 | + return os << (measurement.state.empty() |
| 40 | + ? std::string{} |
| 41 | + : fmt::format("state='{}', count='{}'", measurement.state, measurement.count)); |
| 42 | +} |
| 43 | + |
| 44 | +std::ostream& operator<<(std::ostream& os, const SuperposedState& superposed_state) { |
| 45 | + return os << fmt::format("value='{1}', amplitude='{2:.{0}f} + {3:.{0}f}i', norm='{4:.{0}f}'", |
| 46 | + config::OUTPUT_DECIMALS, |
| 47 | + superposed_state.value, |
| 48 | + superposed_state.amplitude.real, |
| 49 | + superposed_state.amplitude.imag, |
| 50 | + superposed_state.amplitude.norm); |
| 51 | +} |
| 52 | + |
37 | 53 | std::ostream& operator<<(std::ostream& os, const SimulationResult& simulation_result) { |
38 | | - fmt::print(os, "State:\n"); |
39 | | - for (const auto& superposed_state : simulation_result.state) { |
40 | | - fmt::print(os, |
41 | | - "\t{1} {2:.{0}f} + {3:.{0}f}i (norm = {4:.{0}f})\n", |
42 | | - config::OUTPUT_DECIMALS, |
43 | | - superposed_state.value, |
44 | | - superposed_state.amplitude.real, |
45 | | - superposed_state.amplitude.imag, |
46 | | - superposed_state.amplitude.norm); |
47 | | - } |
48 | | - fmt::print(os, "Measurements:\n"); |
49 | | - for (const auto& measurement : simulation_result.measurements) { |
50 | | - fmt::print(os, |
51 | | - "\t{1} {2}/{3} (count/shots % = {4:.{0}f})\n", |
52 | | - config::OUTPUT_DECIMALS, |
53 | | - measurement.state, |
54 | | - measurement.count, |
55 | | - simulation_result.shots_done, |
56 | | - static_cast<double>(measurement.count) / static_cast<double>(simulation_result.shots_done)); |
57 | | - } |
58 | | - fmt::print(os, "Bit measurements:\n"); |
59 | | - for (const auto& bit_measurement : simulation_result.bit_measurements) { |
60 | | - fmt::print(os, |
61 | | - "\t{1} {2}/{3} (count/shots % = {4:.{0}f})\n", |
62 | | - config::OUTPUT_DECIMALS, |
63 | | - bit_measurement.state, |
64 | | - bit_measurement.count, |
65 | | - simulation_result.shots_done, |
66 | | - static_cast<double>(bit_measurement.count) / static_cast<double>(simulation_result.shots_done)); |
67 | | - } |
| 54 | + fmt::print(os, "Shots requested: {}\n", simulation_result.shots_requested); |
| 55 | + fmt::print(os, "Shots done: {}\n", simulation_result.shots_done); |
| 56 | + fmt::print(os, "State:\n\t{}\n", fmt::join(simulation_result.state, "\n\t")); |
| 57 | + fmt::print(os, "Measurements:\n\t{}\n", fmt::join(simulation_result.measurements, "\n\t")); |
| 58 | + fmt::print(os, "Bit measurements:\n\t{}\n", fmt::join(simulation_result.bit_measurements, "\n\t")); |
68 | 59 | fmt::print(os, "Qubit register:\n\t{}\n", simulation_result.qubit_register); |
69 | 60 | fmt::print(os, "Bit register:\n\t{}", simulation_result.bit_register); |
70 | 61 | return os; |
|
0 commit comments