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);