24 backend.SetBondDimensionSummaryCallback(std::move(callback));
28 backend.SetBondDimensionCallback([callback = std::move(callback)](
const auto &dims) {
29 Eigen::Index maximum = 1;
31 maximum = std::max(maximum, dim);
57template <
typename T> std::vector<std::complex<double>>
ComplexTensorExpectationBatch(
const T &backend,
const std::vector<std::string> &paulis,
bool normalized)
61 return backend.ExpectationValues(paulis, normalized);
65 std::vector<std::complex<double>> values;
66 values.reserve(paulis.size());
67 for (
const auto &pauli : paulis)
68 values.push_back(normalized ? backend.ExpectationValue(pauli) : backend.UnnormalizedExpectationValue(pauli));
73template <
typename T> std::vector<std::complex<double>>
TensorExpectationBatch(T &backend,
const std::vector<std::string> &paulis)
77 return backend.ExpectationValues(paulis);
81 std::vector<std::complex<double>> values;
82 values.reserve(paulis.size());
83 for (
const auto &pauli : paulis)
85 if constexpr (std::is_same_v<T, QC::TensorNetworks::MPSSimulator>)
87 static const QC::Gates::PauliXGate<> x;
88 static const QC::Gates::PauliYGate<> y;
89 static const QC::Gates::PauliZGate<> z;
90 std::vector<QC::Gates::AppliedGate<>> gates;
91 for (
size_t q = 0; q < pauli.size(); ++q)
94 gates.emplace_back(x.getRawOperatorMatrix(), q);
96 gates.emplace_back(y.getRawOperatorMatrix(), q);
98 gates.emplace_back(z.getRawOperatorMatrix(), q);
100 values.push_back(backend.ExpectationValue(gates));
104 values.push_back(backend.ExpectationValue(pauli));