.. index:: pair: class; QPanda::SingleAmplitudeQVM .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m: class QPanda::SingleAmplitudeQVM ================================ .. toctree:: :hidden: Overview ~~~~~~~~ Quantum machine for single amplitude simulation. :ref:`More...` .. ref-code-block:: cpp :class: doxyrest-overview-code-block #include class SingleAmplitudeQVM: public :ref:`QPanda::QVM`, public :ref:`QPanda::TraversalInterface` { public: // methods virtual void :ref:`init`(); void :ref:`run`(:ref:`QProg`& prog, :ref:`QVec`& qv, size_t max_rank = 30, size_t alloted_time = 5); void :ref:`run`(:ref:`QProg`& prog, :ref:`QVec`& qv, size_t max_rank, const std::vector<:ref:`qprog_sequence_t`>& sequences); size_t :ref:`getSequence`(const std::vector& quickbb_vertice, std::vector<:ref:`qprog_sequence_t`>& sequence_vec); void :target:`getQuickMapVertice`(std::vector>& map_vector); :ref:`qstate_type` :ref:`pMeasureBinindex`(std::string index); :ref:`qstate_type` :ref:`pMeasureDecindex`(std::string index); :ref:`prob_dict` :ref:`getProbDict`(:ref:`QVec` qlist); :ref:`prob_dict` :ref:`probRunDict`(:ref:`QProg`& prog, :ref:`QVec` qlist); :ref:`prob_dict` :target:`getProbDict`(const std::vector& qaddrs_list); :ref:`prob_dict` :target:`probRunDict`( :ref:`QProg`& prog, const std::vector& qaddrs_list ); virtual void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumProgram`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, bool& is_dagger ); virtual void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumCircuit`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, bool& is_dagger ); virtual void :target:`execute`( std::shared_ptr<:ref:`AbstractControlFlowNode`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, bool& is_dagger ); virtual void :target:`execute`( std::shared_ptr<:ref:`AbstractClassicalProg`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, bool& is_dagger ); virtual void :target:`execute`( std::shared_ptr<:ref:`AbstractQGateNode`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, bool& is_dagger ); virtual void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumMeasure`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, bool& is_dagger ); virtual void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumReset`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, bool& is_dagger ); }; Inherited Members ----------------- .. ref-code-block:: cpp :class: doxyrest-overview-inherited-code-block public: // methods virtual :ref:`Qubit`* :ref:`allocateQubitThroughPhyAddress`(size_t) = 0; virtual :ref:`Qubit`* :ref:`allocateQubitThroughVirAddress`(size_t) = 0; virtual void :ref:`init`() = 0; virtual :ref:`QMachineStatus`* :ref:`getStatus`() const = 0; virtual std::map :ref:`directlyRun`(:ref:`QProg`& qProg) = 0; virtual std::map :ref:`runWithConfiguration`(:ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, rapidjson::Document&) = 0; virtual std::map :ref:`runWithConfiguration`(:ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, int) = 0; virtual std::map<:ref:`GateType`, size_t> :ref:`getGateTimeMap`() const = 0; virtual void :ref:`finalize`() = 0; virtual :ref:`QStat` :ref:`getQState`() const = 0; virtual size_t :ref:`getVirtualQubitAddress`(:ref:`Qubit`*) const = 0; virtual bool :ref:`swapQubitPhysicalAddress`(:ref:`Qubit`*, :ref:`Qubit`*) = 0; virtual void :ref:`setConfig`(const :ref:`Configuration`&) = 0; virtual :ref:`Qubit`* :ref:`allocateQubit`() = 0; virtual :ref:`QVec` :ref:`allocateQubits`(size_t) = 0; virtual :ref:`ClassicalCondition` :ref:`allocateCBit`() = 0; virtual :ref:`ClassicalCondition` :ref:`allocateCBit`(size_t) = 0; virtual std::vector<:ref:`ClassicalCondition`> :ref:`allocateCBits`(size_t) = 0; virtual void :ref:`Free_Qubit`(:ref:`Qubit`*) = 0; virtual void :ref:`Free_Qubits`(:ref:`QVec`&) = 0; virtual void :ref:`Free_CBit`(:ref:`ClassicalCondition`&) = 0; virtual void :ref:`Free_CBits`(std::vector<:ref:`ClassicalCondition`>&) = 0; virtual size_t :ref:`getAllocateQubit`() = 0; virtual size_t :ref:`getAllocateCMem`() = 0; virtual void :ref:`setConfigure`(const :ref:`Configuration`&) = 0; virtual :ref:`Qubit`* :ref:`qAlloc`() = 0; virtual :ref:`QVec` :ref:`qAllocMany`(size_t qubit_count) = 0; virtual :ref:`ClassicalCondition` :ref:`cAlloc`() = 0; virtual :ref:`ClassicalCondition` :ref:`cAlloc`(size_t) = 0; virtual std::vector<:ref:`ClassicalCondition`> :ref:`cAllocMany`(size_t) = 0; virtual void :ref:`qFree`(:ref:`Qubit`*) = 0; virtual void :ref:`qFreeAll`(:ref:`QVec`&) = 0; virtual void :ref:`cFree`(:ref:`ClassicalCondition`&) = 0; virtual void :ref:`cFreeAll`(std::vector<:ref:`ClassicalCondition`>&) = 0; virtual size_t :ref:`getAllocateQubitNum`() = 0; virtual size_t :ref:`getAllocateCMemNum`() = 0; virtual void :ref:`initState`(const :ref:`QStat`& state = {}, const :ref:`QVec`& qlist = {}) = 0; virtual size_t :ref:`get_allocate_qubits`(:ref:`QVec`&) = 0; virtual size_t :ref:`get_allocate_cbits`(std::vector<:ref:`ClassicalCondition`>&) = 0; virtual double :ref:`get_expectation`(:ref:`QProg`, const QHamiltonian&, const :ref:`QVec`&) = 0; virtual double :ref:`get_expectation`(:ref:`QProg`, const QHamiltonian&, const :ref:`QVec`&, int) = 0; virtual void :ref:`initState`(const :ref:`QStat`& state = {}, const :ref:`QVec`& qlist = {}); virtual :ref:`Qubit`* :ref:`allocateQubitThroughPhyAddress`(size_t); virtual :ref:`Qubit`* :ref:`allocateQubitThroughVirAddress`(size_t); virtual :ref:`QMachineStatus`* :ref:`getStatus`() const; virtual :ref:`QResult`* :ref:`getResult`(); virtual std::map :ref:`getResultMap`(); virtual void :ref:`finalize`(); virtual std::map :ref:`directlyRun`(:ref:`QProg`& qProg); virtual std::map :ref:`runWithConfiguration`(:ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, rapidjson::Document&); virtual std::map :ref:`runWithConfiguration`(:ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, int); virtual std::map :ref:`runWithConfiguration`(:ref:`QProg`&, std::vector&, int); virtual std::map<:ref:`GateType`, size_t> :ref:`getGateTimeMap`() const; virtual :ref:`QStat` :ref:`getQState`() const; virtual size_t :ref:`getVirtualQubitAddress`(:ref:`Qubit`*) const; virtual bool :ref:`swapQubitPhysicalAddress`(:ref:`Qubit`*, :ref:`Qubit`*); virtual void :ref:`set_random_engine`(:ref:`RandomEngine`* rng); virtual void :ref:`setConfig`(const :ref:`Configuration`& config); virtual :ref:`Qubit`* :ref:`allocateQubit`(); virtual :ref:`QVec` :ref:`allocateQubits`(size_t); virtual :ref:`ClassicalCondition` :ref:`allocateCBit`(); virtual std::vector<:ref:`ClassicalCondition`> :ref:`allocateCBits`(size_t); virtual :ref:`ClassicalCondition` :ref:`allocateCBit`(size_t); virtual size_t :ref:`getAllocateQubit`(); virtual size_t :ref:`getAllocateCMem`(); virtual void :ref:`Free_Qubit`(:ref:`Qubit`*); virtual void :ref:`Free_Qubits`(:ref:`QVec`&); virtual void :ref:`Free_CBit`(:ref:`ClassicalCondition`&); virtual void :ref:`Free_CBits`(std::vector<:ref:`ClassicalCondition`>&); virtual void :ref:`setConfigure`(const :ref:`Configuration`&); virtual :ref:`Qubit`* :ref:`qAlloc`(); virtual :ref:`QVec` :ref:`qAllocMany`(size_t qubit_count); virtual :ref:`ClassicalCondition` :ref:`cAlloc`(); virtual :ref:`ClassicalCondition` :ref:`cAlloc`(size_t); virtual std::vector<:ref:`ClassicalCondition`> :ref:`cAllocMany`(size_t); virtual void :ref:`qFree`(:ref:`Qubit`*); virtual void :ref:`qFreeAll`(:ref:`QVec`&); virtual void :ref:`cFree`(:ref:`ClassicalCondition`&); virtual void :ref:`cFreeAll`(std::vector<:ref:`ClassicalCondition`>&); virtual size_t :ref:`getAllocateQubitNum`(); virtual size_t :ref:`getAllocateCMemNum`(); virtual size_t :ref:`get_allocate_qubits`(:ref:`QVec`&); virtual size_t :ref:`get_allocate_cbits`(std::vector<:ref:`ClassicalCondition`>&); virtual double :ref:`get_expectation`(:ref:`QProg`, const QHamiltonian&, const :ref:`QVec`&); virtual double :ref:`get_expectation`(:ref:`QProg`, const QHamiltonian&, const :ref:`QVec`&, int); virtual void :ref:`execute`( std::shared_ptr<:ref:`AbstractQGateNode`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, Args&&... func_args ); virtual void :ref:`execute`( std::shared_ptr<:ref:`AbstractQuantumMeasure`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, Args&&... func_args ); virtual void :ref:`execute`( std::shared_ptr<:ref:`AbstractQuantumReset`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, Args&&... func_args ); virtual void :ref:`execute`( std::shared_ptr<:ref:`AbstractControlFlowNode`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, Args&&... func_args ); virtual void :ref:`execute`( std::shared_ptr<:ref:`AbstractQuantumCircuit`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, Args&&... func_args ); virtual void :ref:`execute`( std::shared_ptr<:ref:`AbstractQuantumProgram`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, Args&&... func_args ); virtual void :ref:`execute`( std::shared_ptr<:ref:`AbstractClassicalProg`> cur_node, std::shared_ptr<:ref:`QNode`> parent_node, Args&&... func_args ); .. _details-class_q_panda_1_1_single_amplitude_q_v_m: Detailed Documentation ~~~~~~~~~~~~~~~~~~~~~~ Quantum machine for single amplitude simulation. .. rubric:: See also: :ref:`QuantumMachine ` Methods ------- .. index:: pair: function; init .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1ac0f906d961b7823a0ebf46d9811a0719: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual void init() init .. rubric:: Returns: void .. index:: pair: function; run .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1a59317db84cdedfac78f9d45b8c172335: .. ref-code-block:: cpp :class: doxyrest-title-code-block void run(:ref:`QProg`& prog, :ref:`QVec`& qv, size_t max_rank = 30, size_t alloted_time = 5) run .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QVec& - qubits vector * - size_t - rank number * - size_t - run :ref:`QuickBB ` alloted time .. index:: pair: function; run .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1a1667931ed1725b4e03cd77d3c7a5d06d: .. ref-code-block:: cpp :class: doxyrest-title-code-block void run(:ref:`QProg`& prog, :ref:`QVec`& qv, size_t max_rank, const std::vector<:ref:`qprog_sequence_t`>& sequences) run .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QVec& - qubits vector * - size_t - rank number * - size_t - quantum program contraction sequence .. index:: pair: function; getSequence .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1ae201333b87affa9de36b5f7832d8ef93: .. ref-code-block:: cpp :class: doxyrest-title-code-block size_t getSequence( const std::vector& quickbb_vertice, std::vector<:ref:`qprog_sequence_t`>& sequence_vec ) get quantum program contraction sequence .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - const - std::vector& quickbb vertice * - std::vector& - quantum program contraction sequence .. rubric:: Returns: size_t sequence number .. index:: pair: function; pMeasureBinindex .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1a88a7e83db80d771fee56fd89a885ac1d: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`qstate_type` pMeasureBinindex(std::string index) PMeasure by binary index. example: pMeasureBinindex("0000000000") .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - binary index .. rubric:: Returns: qstate_type double .. index:: pair: function; pMeasureDecindex .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1adab416607edb0b2191fcf88052590a39: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`qstate_type` pMeasureDecindex(std::string index) PMeasure by decimal index. example: pMeasureDecindex("1") .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - decimal index .. rubric:: Returns: qstate_type double .. index:: pair: function; getProbDict .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1a98fb346bd3ee3bf0e6d93a905fc3d456: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`prob_dict` getProbDict(:ref:`QVec` qlist) get probability by qubits .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - const - :ref:`QVec ` & qubits vector .. rubric:: Returns: prob_dict .. index:: pair: function; probRunDict .. _doxid-class_q_panda_1_1_single_amplitude_q_v_m_1aee0d2c0faaa3ebe70cb250f2fad7d339: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`prob_dict` probRunDict(:ref:`QProg`& prog, :ref:`QVec` qlist) get probability by qubits .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QVec& - qubits vector .. rubric:: Returns: prob_dict