Program Listing for File simulator.hpp

Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/qulacs-rtd/checkouts/latest/src/cppsim/simulator.hpp)

#pragma once

#include <cstdlib>

#include "circuit.hpp"
#include "type.hpp"
class QuantumStateBase;
class HermitianQuantumOperator;
using Observable = HermitianQuantumOperator;

class DllExport QuantumCircuitSimulator {
private:
    QuantumCircuit* _circuit;
    QuantumStateBase* _state;
    QuantumStateBase* _buffer;
    bool _own_state = false;

public:
    explicit QuantumCircuitSimulator(
        QuantumCircuit* circuit, QuantumStateBase* initial_state = NULL);

    ~QuantumCircuitSimulator();

    void initialize_state(ITYPE computationl_basis = 0);
    void initialize_random_state();
    void initialize_random_state(UINT seed);

    void simulate();

    void simulate_range(UINT start, UINT end);

    CPPCTYPE get_expectation_value(const Observable* observable);

    UINT get_gate_count();

    void copy_state_to_buffer();
    void copy_state_from_buffer();
    void swap_state_and_buffer();

    const QuantumStateBase* get_state_ptr() const { return _state; }
};