.. index:: pair: class; QPanda::MPSQVM .. _doxid-class_q_panda_1_1_m_p_s_q_v_m: class QPanda::MPSQVM ==================== .. toctree:: :hidden: Overview ~~~~~~~~ MPS quantum virtual machine. :ref:`More...` .. ref-code-block:: cpp :class: doxyrest-overview-code-block #include class MPSQVM: public :ref:`QPanda::IdealQVM`, private :ref:`QPanda::TraversalInterface` { public: // methods virtual void :ref:`init`(); virtual void :target:`initState`( const :ref:`QStat`& state = {}, const :ref:`QVec`& qlist = {} ); virtual std::map :ref:`directlyRun`(:ref:`QProg`& qProg); virtual std::map :target:`quickMeasure`( :ref:`QVec` vQubit, size_t shots ); virtual std::map :ref:`runWithConfiguration`(:ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, int); virtual std::map :ref:`runWithConfiguration`(:ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, rapidjson::Document&); virtual :ref:`QStat` :target:`getQState`(); virtual :ref:`prob_tuple` :target:`pMeasure`( :ref:`QVec` qubits, int select_max = -1 ); virtual :ref:`prob_tuple` :target:`PMeasure`( :ref:`QVec` qubits, int select_max = -1 ); virtual :ref:`prob_vec` :target:`PMeasure_no_index`(:ref:`QVec` qubits); :ref:`prob_vec` :target:`pMeasureNoIndex`(:ref:`QVec` qubit_vector); :ref:`qcomplex_t` :target:`pmeasure_bin_index`( :ref:`QProg` prog, std::string str ); :ref:`qcomplex_t` :target:`pmeasure_dec_index`( :ref:`QProg` prog, std::string str ); :ref:`QStat` :target:`pmeasure_bin_subset`( :ref:`QProg` prog, const std::vector& bin_strs ); :ref:`QStat` :target:`pmeasure_dec_subset`( :ref:`QProg` prog, const std::vector& dec_strs ); virtual :ref:`prob_tuple` :target:`getProbTupleList`( :ref:`QVec`, int selectMax = -1 ); virtual :ref:`prob_vec` :target:`getProbList`( :ref:`QVec`, int selectMax = -1 ); virtual :ref:`prob_dict` :target:`getProbDict`( :ref:`QVec`, int selectMax = -1 ); virtual :ref:`prob_tuple` :target:`probRunTupleList`( :ref:`QProg`&, :ref:`QVec`, int selectMax = -1 ); virtual :ref:`prob_vec` :target:`probRunList`( :ref:`QProg`&, :ref:`QVec`, int selectMax = -1 ); virtual :ref:`prob_dict` :target:`probRunDict`( :ref:`QProg`&, :ref:`QVec`, int selectMax = -1 ); void :target:`execute`( std::shared_ptr<:ref:`AbstractQGateNode`>, std::shared_ptr<:ref:`QNode`>, :ref:`QCircuitConfig`& config ); void :target:`execute`( std::shared_ptr<:ref:`AbstractClassicalProg`>, std::shared_ptr<:ref:`QNode`>, :ref:`QCircuitConfig`& config ); void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumMeasure`>, std::shared_ptr<:ref:`QNode`>, :ref:`QCircuitConfig`& config ); void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumReset`>, std::shared_ptr<:ref:`QNode`>, :ref:`QCircuitConfig`& config ); void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumCircuit`>, std::shared_ptr<:ref:`QNode`>, :ref:`QCircuitConfig`& config ); void :target:`execute`( std::shared_ptr<:ref:`AbstractQuantumProgram`>, std::shared_ptr<:ref:`QNode`>, :ref:`QCircuitConfig`& config ); void :target:`execute`( std::shared_ptr<:ref:`AbstractControlFlowNode`>, std::shared_ptr<:ref:`QNode`>, :ref:`QCircuitConfig`& config ); void :target:`set_mixed_unitary_error`( :ref:`GateType` gate_type, const std::vector<:ref:`QStat`>& ); void :target:`set_mixed_unitary_error`( :ref:`GateType` gate_type, const std::vector<:ref:`QStat`>&, const std::vector& ); void :target:`set_mixed_unitary_error`( :ref:`GateType` gate_type, const std::vector<:ref:`QStat`>&, const std::vector<:ref:`QVec`>& ); void :target:`set_mixed_unitary_error`( :ref:`GateType` gate_type, const std::vector<:ref:`QStat`>&, const std::vector&, const std::vector<:ref:`QVec`>& ); void :target:`set_noise_model`( :ref:`NOISE_MODEL` model, :ref:`GateType` gate_type, double param ); void :target:`set_noise_model`( :ref:`NOISE_MODEL` model, :ref:`GateType` gate_type, double param, const :ref:`QVec`& qubits_vec ); void :target:`set_noise_model`( :ref:`NOISE_MODEL` model, :ref:`GateType` gate_type, double param, const std::vector<:ref:`QVec`>& qubits_vecs ); void :target:`set_noise_model`( :ref:`NOISE_MODEL` model, :ref:`GateType` gate_type, double T1, double T2, double time_param ); void :target:`set_noise_model`( :ref:`NOISE_MODEL` model, :ref:`GateType` gate_type, double T1, double T2, double time_param, const :ref:`QVec`& qubits_vec ); void :target:`set_noise_model`( :ref:`NOISE_MODEL` model, :ref:`GateType` gate_type, double T1, double T2, double time_param, const std::vector<:ref:`QVec`>& qubits_vecs ); void :target:`set_readout_error`( const std::vector>& readout_params, const :ref:`QVec`& qubits ); void :target:`set_measure_error`( :ref:`NOISE_MODEL` model, double param ); void :target:`set_measure_error`( :ref:`NOISE_MODEL` model, double param, const :ref:`QVec`& qubits_vec ); void :target:`set_measure_error`( :ref:`NOISE_MODEL` model, double T1, double T2, double time_param ); void :target:`set_measure_error`( :ref:`NOISE_MODEL` model, double T1, double T2, double time_param, const :ref:`QVec`& qubits_vec ); void :target:`set_rotation_error`(double param); void :target:`set_reset_error`( double reset_0_param, double reset_1_param ); }; 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 :ref:`prob_vec` :ref:`PMeasure_no_index`(:ref:`QVec` qubit_vector) = 0; virtual :ref:`prob_tuple` :ref:`getProbTupleList`(:ref:`QVec`, int) = 0; virtual :ref:`prob_vec` :ref:`getProbList`(:ref:`QVec`, int) = 0; virtual :ref:`prob_dict` :ref:`getProbDict`(:ref:`QVec`, int) = 0; virtual :ref:`prob_tuple` :ref:`probRunTupleList`(:ref:`QProg`&, :ref:`QVec`, int) = 0; virtual :ref:`prob_vec` :ref:`probRunList`(:ref:`QProg`&, :ref:`QVec`, int) = 0; virtual :ref:`prob_dict` :ref:`probRunDict`(:ref:`QProg`&, :ref:`QVec`, int) = 0; virtual std::map :ref:`quickMeasure`(:ref:`QVec`, size_t) = 0; virtual :ref:`prob_tuple` :ref:`PMeasure`(:ref:`QVec` qubit_vector, int select_max) = 0; virtual :ref:`QStat` :ref:`getQStat`() = 0; virtual :ref:`prob_tuple` :ref:`getProbTupleList`(:ref:`QVec`, int selectMax = -1); virtual :ref:`prob_vec` :ref:`getProbList`(:ref:`QVec`, int selectMax = -1); virtual :ref:`prob_dict` :ref:`getProbDict`(:ref:`QVec`, int selectMax = -1); virtual :ref:`prob_tuple` :ref:`probRunTupleList`(:ref:`QProg`&, :ref:`QVec`, int selectMax = -1); virtual :ref:`prob_vec` :ref:`probRunList`(:ref:`QProg`&, :ref:`QVec`, int selectMax = -1); virtual :ref:`prob_dict` :ref:`probRunDict`(:ref:`QProg`&, :ref:`QVec`, int selectMax = -1); :ref:`prob_tuple` :ref:`probRunTupleList`(:ref:`QProg`&, const std::vector&, int selectMax = -1); :ref:`prob_vec` :ref:`probRunList`(:ref:`QProg`&, const std::vector&, int selectMax = -1); :ref:`prob_dict` :ref:`probRunDict`(:ref:`QProg`&, const std::vector&, int selectMax = -1); virtual std::map :ref:`quickMeasure`(:ref:`QVec`, size_t); virtual :ref:`QStat` :ref:`getQStat`(); virtual :ref:`prob_tuple` :ref:`PMeasure`(:ref:`QVec` qubit_vector, int select_max); virtual :ref:`prob_vec` :ref:`PMeasure_no_index`(:ref:`QVec` qubit_vector); :ref:`QStat` :ref:`getQState`(); :ref:`prob_tuple` :ref:`pMeasure`(:ref:`QVec` qubit_vector, int select_max); :ref:`prob_vec` :ref:`pMeasureNoIndex`(:ref:`QVec` qubit_vector); 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_m_p_s_q_v_m: Detailed Documentation ~~~~~~~~~~~~~~~~~~~~~~ MPS quantum virtual machine. Methods ------- .. index:: pair: function; init .. _doxid-class_q_panda_1_1_m_p_s_q_v_m_1ab826b271d3b1bee6f0d4d5bc61343c24: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual void init() init .. rubric:: Returns: void .. index:: pair: function; directlyRun .. _doxid-class_q_panda_1_1_m_p_s_q_v_m_1a3f83449be1c0d1ed66db48795b3b4b3f: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual std::map directlyRun(:ref:`QProg`& qProg) directlyRun .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program .. rubric:: Returns: std::map .. index:: pair: function; runWithConfiguration .. _doxid-class_q_panda_1_1_m_p_s_q_v_m_1a99a914d22be63a0779e1d222f94f9be9: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual std::map runWithConfiguration( :ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, int ) runWithConfiguration .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - std::vector& - * - int - .. rubric:: Returns: std::map .. index:: pair: function; runWithConfiguration .. _doxid-class_q_panda_1_1_m_p_s_q_v_m_1a5b66dd6d3acfbb42e839ff6084e68e34: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual std::map runWithConfiguration( :ref:`QProg`&, std::vector<:ref:`ClassicalCondition`>&, rapidjson::Document& ) runWithConfiguration .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - std::vector& - * - rapidjson::Document& - .. rubric:: Returns: std::map