Program Listing for File observable.hpp¶
↰ Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/qulacs-rtd/checkouts/latest/src/cppsim/observable.hpp
)
#pragma once
#include <iostream>
#include <string>
#include <utility>
#include <vector>
#include "general_quantum_operator.hpp"
#include "pauli_operator.hpp"
#include "type.hpp"
class QuantumStateBase;
class PauliOperator;
class GeneralQuantumOperator;
class DllExport HermitianQuantumOperator : public GeneralQuantumOperator {
public:
using GeneralQuantumOperator::GeneralQuantumOperator;
void add_operator(const PauliOperator* mpt) override;
void add_operator_move(PauliOperator* mpt) override;
void add_operator_copy(const PauliOperator* mpt) override;
void add_operator(CPPCTYPE coef, std::string pauli_string) override;
CPPCTYPE get_expectation_value(
const QuantumStateBase* state) const override;
CPPCTYPE solve_ground_state_eigenvalue_by_lanczos_method(
QuantumStateBase* init_state, const UINT iter_count,
const CPPCTYPE mu = 0.0) const;
virtual HermitianQuantumOperator* copy() const override {
auto hermitian_quantum_operator =
new HermitianQuantumOperator(this->get_qubit_count());
for (auto pauli : this->get_terms()) {
hermitian_quantum_operator->add_operator_copy(pauli);
}
return hermitian_quantum_operator;
};
std::string to_string() const override;
};
namespace observable {
DllExport HermitianQuantumOperator* create_observable_from_openfermion_file(
std::string file_path);
DllExport HermitianQuantumOperator* create_observable_from_openfermion_text(
const std::string& text);
DllExport std::pair<HermitianQuantumOperator*, HermitianQuantumOperator*>
create_split_observable(std::string file_path);
DllExport HermitianQuantumOperator* from_ptree(
const boost::property_tree::ptree& pt);
} // namespace observable
using Observable = HermitianQuantumOperator;
ComplexMatrix DllExport convert_observable_to_matrix(
const HermitianQuantumOperator& observable);