.. index:: pair: group; Utilities .. _doxid-group___utilities: Utilities ========= .. toctree:: :hidden: struct_QPanda_CallGateInfo.rst struct_QPanda_KakDescription.rst class_QPanda_AdjacentQGates.rst class_QPanda_BasicGridDevice.rst class_QPanda_CancelControlQubitVector.rst class_QPanda_ConfigMap.rst class_QPanda_CrossEntropyBenchmarking.rst class_QPanda_DecomposeControlUnitarySingleQGate.rst class_QPanda_DecomposeDoubleQGate.rst class_QPanda_DecomposeMultipleControlQGate.rst class_QPanda_DecomposeUnitarySingleQGateIntoMetadataSingleQGate.rst class_DeleteUnitQnode.rst class_QPanda_DoubleGateTypeValidator.rst class_QPanda_DRAW_TEXT_PIC_DrawQProg.rst class_QPanda_ExGridDevice.rst class_QPanda_Exp.rst class_QPanda_FillQProg.rst class_QPanda_GetAllNodeType.rst class_QPanda_GetAllUsedQubitAndCBit.rst class_QPanda_GraphDijkstra.rst class_QPanda_JsonConfigParam.rst class_QPanda_KAK.rst class_QPanda_MergeSingleGate.rst class_QPanda_MetadataValidity.rst class_QPanda_NodeInfo.rst class_QPanda_OriginIRVisitor.rst class_QPanda_QASMToQProg.rst class_QPanda_QCircuitParam.rst class_QPanda_QCodarMatch.rst class_QPanda_QGateCompare.rst class_QPanda_QGateCounter.rst class_QPanda_QPandaException.rst class_QPanda_QProgBuilder.rst class_QPanda_QProgClockCycle.rst class_QPanda_QProgDAG.rst class_QPanda_QProgDataParse.rst class_QPanda_QProgFlattening.rst class_QPanda_QProgStored.rst class_QPanda_QProgToMatrix.rst class_QPanda_QProgToOriginIR.rst class_QPanda_QProgToQASM.rst class_QPanda_QProgToQCircuit.rst class_QPanda_QProgToQGate.rst class_QPanda_QProgToQMeasure.rst class_QPanda_QProgToQuil.rst class_QPanda_QRunesToQProg.rst class_QPanda_QScheduler.rst class_QPanda_QString.rst class_QPanda_QuantumMetadata.rst class_QPanda_QuantumVolume.rst class_QPanda_RandomCircuit.rst class_QPanda_RandomizedBenchmarking.rst class_ReadLock.rst class_QPanda_RemapQProg.rst class_QPanda_SU4TopologyMatch.rst class_SharedMutex.rst class_QPanda_SimpleGridDevice.rst class_QPanda_SingleGateTypeValidator.rst class_QPanda_TimeSequenceConfig.rst class_QPanda_TopologyMatch.rst class_QPanda_TransformByCNOT.rst class_QPanda_TransformByCZ.rst class_QPanda_TransformByISWAP.rst class_QPanda_TransformBySWAP.rst class_QPanda_TransformDecomposition.rst class_QPanda_TransformQGateType.rst class_QPanda_TransformSwapAlg.rst class_QPanda_TransformSwapAlgFactory.rst class_QPanda_Traversal.rst class_QPanda_TraversalConfig.rst class_QPanda_TraversalInterface.rst class_QPanda_TraverseByNodeIter.rst class_QPanda_UncompletedGridDevice.rst class_WriteLock.rst class_QPanda_init_fail.rst class_QPanda_qalloc_fail.rst class_QPanda_qcircuit_construction_fail.rst class_QPanda_qprog_construction_fail.rst class_QPanda_qprog_syntax_error.rst class_QPanda_qvm_attributes_error.rst class_QPanda_result_get_fail.rst class_QPanda_run_fail.rst class_QPanda_undefine_error.rst Overview ~~~~~~~~ .. ref-code-block:: cpp :class: doxyrest-overview-code-block // typedefs typedef :ref:`QGate` (*:ref:`QPanda::QGateFunc`)(Qubit *); // structs struct :ref:`QPanda::CallGateInfo`; struct :ref:`QPanda::KakDescription`; // classes class :ref:`QPanda::AdjacentQGates`; class :ref:`QPanda::BasicGridDevice`; class :ref:`QPanda::CancelControlQubitVector`; class :ref:`QPanda::ConfigMap`; class :ref:`QPanda::CrossEntropyBenchmarking`; class :ref:`QPanda::DecomposeControlUnitarySingleQGate`; class :ref:`QPanda::DecomposeDoubleQGate`; class :ref:`QPanda::DecomposeMultipleControlQGate`; class :ref:`QPanda::DecomposeUnitarySingleQGateIntoMetadataSingleQGate`; class :ref:`DeleteUnitQnode`; class :ref:`QPanda::DoubleGateTypeValidator`; class :ref:`QPanda::DRAW_TEXT_PIC::DrawQProg`; class :ref:`QPanda::ExGridDevice`; class :ref:`QPanda::Exp`; class :ref:`QPanda::FillQProg`; class :ref:`QPanda::GetAllNodeType`; class :ref:`QPanda::GetAllUsedQubitAndCBit`; class :ref:`QPanda::GraphDijkstra`; class :ref:`QPanda::JsonConfigParam`; class :ref:`QPanda::KAK`; class :ref:`QPanda::MergeSingleGate`; class :ref:`QPanda::MetadataValidity`; class :ref:`QPanda::NodeInfo`; class :ref:`QPanda::OriginIRVisitor`; class :ref:`QPanda::QASMToQProg`; class :ref:`QPanda::QCircuitParam`; class :ref:`QPanda::QCodarMatch`; class :ref:`QPanda::QGateCompare`; class :ref:`QPanda::QGateCounter`; class :ref:`QPanda::QPandaException`; class :ref:`QPanda::QProgBuilder`; class :ref:`QPanda::QProgClockCycle`; class :ref:`QPanda::QProgDAG`; class :ref:`QPanda::QProgDataParse`; class :ref:`QPanda::QProgFlattening`; class :ref:`QPanda::QProgStored`; class :ref:`QPanda::QProgToMatrix`; class :ref:`QPanda::QProgToOriginIR`; class :ref:`QPanda::QProgToQASM`; class :ref:`QPanda::QProgToQCircuit`; class :ref:`QPanda::QProgToQGate`; class :ref:`QPanda::QProgToQMeasure`; class :ref:`QPanda::QProgToQuil`; class :ref:`QPanda::QRunesToQProg`; class :ref:`QPanda::QScheduler`; class :ref:`QPanda::QString`; class :ref:`QPanda::QuantumMetadata`; class :ref:`QPanda::QuantumVolume`; class :ref:`QPanda::RandomCircuit`; class :ref:`QPanda::RandomizedBenchmarking`; class :ref:`ReadLock`; class :ref:`QPanda::RemapQProg`; class :ref:`QPanda::SU4TopologyMatch`; class :ref:`SharedMutex`; class :ref:`QPanda::SimpleGridDevice`; class :ref:`QPanda::SingleGateTypeValidator`; class :ref:`QPanda::TimeSequenceConfig`; class :ref:`QPanda::TopologyMatch`; class :ref:`QPanda::TransformByCNOT`; class :ref:`QPanda::TransformByCZ`; class :ref:`QPanda::TransformByISWAP`; class :ref:`QPanda::TransformBySWAP`; class :ref:`QPanda::TransformDecomposition`; class :ref:`QPanda::TransformQGateType`; class :ref:`QPanda::TransformSwapAlg`; class :ref:`QPanda::TransformSwapAlgFactory`; class :ref:`QPanda::Traversal`; class :ref:`QPanda::TraversalConfig`; template class :ref:`QPanda::TraversalInterface`; class :ref:`QPanda::TraverseByNodeIter`; class :ref:`QPanda::UncompletedGridDevice`; class :ref:`WriteLock`; class :ref:`QPanda::init_fail`; class :ref:`QPanda::qalloc_fail`; class :ref:`QPanda::qcircuit_construction_fail`; class :ref:`QPanda::qprog_construction_fail`; class :ref:`QPanda::qprog_syntax_error`; class :ref:`QPanda::qvm_attributes_error`; class :ref:`QPanda::result_get_fail`; class :ref:`QPanda::run_fail`; class :ref:`QPanda::undefine_error`; // global functions :ref:`QProg` :ref:`QPanda::transformOriginIRToQProg`(std::string filePath, :ref:`QuantumMachine`* qm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv); :ref:`QProg` :ref:`QPanda::convert_originir_to_qprog`(std::string file_path, :ref:`QuantumMachine`* qm); :ref:`QProg` :ref:`QPanda::convert_originir_to_qprog`(std::string file_path, :ref:`QuantumMachine`* qm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv); :ref:`QProg` :ref:`QPanda::convert_originir_string_to_qprog`(std::string str_originir, :ref:`QuantumMachine`* qm); :ref:`QProg` :ref:`QPanda::convert_originir_string_to_qprog`(std::string str_originir, :ref:`QuantumMachine`* qm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv); :ref:`QProg` :ref:`QPanda::convert_qasm_to_qprog`(std::string file_path, :ref:`QuantumMachine`* qvm); :ref:`QProg` :ref:`QPanda::convert_qasm_to_qprog`(std::string file_path, :ref:`QuantumMachine`* qvm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv); :ref:`QProg` :ref:`QPanda::convert_qasm_string_to_qprog`(std::string qasm_str, :ref:`QuantumMachine`* qvm); :ref:`QProg` :ref:`QPanda::convert_qasm_string_to_qprog`(std::string qasm_str, :ref:`QuantumMachine`* qvm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv); bool :ref:`QPanda::transformBinaryDataToQProg`( :ref:`QuantumMachine`* qm, const std::vector& data, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog ); bool :ref:`QPanda::transformBinaryDataToQProg`(:ref:`QuantumMachine`* qm, const std::string& filename, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog); bool :ref:`QPanda::convert_binary_data_to_qprog`( :ref:`QuantumMachine`* qm, const std::vector& data, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog ); bool :ref:`QPanda::convert_binary_data_to_qprog`(:ref:`QuantumMachine`* qm, const std::string& filename, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog); std::vector :ref:`QPanda::transformQProgToBinary`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm); void :ref:`QPanda::transformQProgToBinary`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, const std::string& filename); std::vector :ref:`QPanda::convert_qprog_to_binary`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm); void :ref:`QPanda::convert_qprog_to_binary`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, const std::string& filename); template std::string :ref:`QPanda::transformQProgToOriginIR`(_Ty& node, :ref:`QuantumMachine`* machine); template std::string :ref:`QPanda::convert_qprog_to_originir`(_Ty& node, :ref:`QuantumMachine`* machine); void :ref:`QPanda::write_to_originir_file`(:ref:`QProg` prog, :ref:`QuantumMachine`* qvm, const std::string file_name); std::string :ref:`QPanda::convert_qprog_to_qasm`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm); void :ref:`QPanda::write_to_qasm_file`(:ref:`QProg` prog, :ref:`QuantumMachine`* qvm, const std::string file_name); std::string :ref:`QPanda::transformQProgToQuil`(:ref:`QProg`&, :ref:`QuantumMachine`* quantum_machine); std::string :ref:`QPanda::convert_qprog_to_quil`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm); std::vector<:ref:`ClassicalCondition`> :ref:`QPanda::transformQRunesToQProg`(std::string, :ref:`QProg`&, :ref:`QuantumMachine`*); void :ref:`QPanda::quantum_chip_adapter`( :ref:`QProg`& prog, :ref:`QuantumMachine`* quantum_machine, :ref:`QVec`& new_qvec, bool b_mapping = true, const std::string config_data = :ref:`CONFIG_PATH` ); int :ref:`QPanda::arbitraryRotationMetadataValidity`(std::vector& gates, std::vector& valid_gates); int :ref:`QPanda::doubleContinuousMetadataValidity`(std::vector& gates, std::vector& valid_gates); int :ref:`QPanda::singleContinuousAndDiscreteMetadataValidity`(std::vector& gates, std::vector& valid_gates); int :ref:`QPanda::doubleDiscreteMetadataValidity`(std::vector& gates, std::vector& valid_gates); int :ref:`QPanda::doubleGateMetadataValidity`(std::vector& gates, std::vector& valid_gates); int :ref:`QPanda::validateSingleQGateType`(std::vector& gates, std::vector& valid_gates); bool :ref:`QPanda::isMatchTopology`(const :ref:`QGate`& gate, const std::vector>& vecTopoSt); std::string :ref:`QPanda::getAdjacentQGateType`(:ref:`QProg` prog, :ref:`NodeIter`& nodeItr, std::vector<:ref:`NodeInfo`>& adjacentNodes); bool :ref:`QPanda::isSwappable`(:ref:`QProg` prog, :ref:`NodeIter`& nodeItr1, :ref:`NodeIter`& nodeItr2); bool :ref:`QPanda::isSupportedGateType`(const :ref:`NodeIter`& nodeItr); :ref:`QStat` :ref:`QPanda::getCircuitMatrix`( :ref:`QProg` srcProg, const bool b_bid_endian = false, const :ref:`NodeIter` nodeItrStart = :ref:`NodeIter`(), const :ref:`NodeIter` nodeItrEnd = :ref:`NodeIter`() ); void :ref:`QPanda::pickUpNode`( :ref:`QProg`& outPutProg, :ref:`QProg` srcProg, const std::vector<:ref:`NodeType`> reject_node_types, const :ref:`NodeIter` nodeItrStart = :ref:`NodeIter`(), const :ref:`NodeIter` nodeItrEnd = :ref:`NodeIter`(), bool bDagger = false ); size_t :ref:`QPanda::get_all_used_qubits`(:ref:`QProg` prog, std::vector& vecQuBitsInUse); size_t :ref:`QPanda::get_all_used_class_bits`(:ref:`QProg` prog, std::vector& vecClBitsInUse); size_t :ref:`QPanda::get_measure_info`(:ref:`QProg` prog, std::vector>& measure_info); std::string :ref:`QPanda::printAllNodeType`(:ref:`QProg` prog); void :ref:`QPanda::get_gate_parameter`(std::shared_ptr<:ref:`AbstractQGateNode`> pGate, std::string& para_str); bool :ref:`QPanda::check_dagger`(std::shared_ptr<:ref:`AbstractQGateNode`> p_gate, const bool& b_dagger); template size_t :ref:`QPanda::getQGateNum`(_Ty& node); size_t :ref:`QPanda::getQProgClockCycle`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, bool optimize = false); size_t :ref:`QPanda::get_qprog_clock_cycle`(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, bool optimize = false); std::string :ref:`QPanda::draw_qprog`( :ref:`QProg` prog, uint32_t length = 100, bool b_out_put_to_file = false, const :ref:`NodeIter` itr_start = :ref:`NodeIter`(), const :ref:`NodeIter` itr_end = :ref:`NodeIter`() ); std::string :ref:`QPanda::draw_qprog_with_clock`( :ref:`QProg` prog, const std::string config_data = :ref:`CONFIG_PATH`, uint32_t length = 100, bool b_out_put_to_file = false, const :ref:`NodeIter` itr_start = :ref:`NodeIter`(), const :ref:`NodeIter` itr_end = :ref:`NodeIter`() ); std::ostream& :ref:`QPanda::operator <<` (std::ostream& out, :ref:`QProg` prog); :ref:`QProg` :ref:`QPanda::qcodar_match_by_simple_type`(:ref:`QProg` prog, :ref:`QVec`& qv, :ref:`QuantumMachine`* machine, size_t m = 2, size_t n = 4, size_t run_times = 5); .. _details-group___utilities: Detailed Documentation ~~~~~~~~~~~~~~~~~~~~~~ Typedefs -------- .. index:: pair: typedef; QGateFunc .. _doxid-group___utilities_1ga979195d0548ad2c3bb1dce490b063ac6: .. ref-code-block:: cpp :class: doxyrest-title-code-block typedef :ref:`QGate` (*QPanda::QGateFunc)(Qubit *) Apply Quantum Gate on a series of :ref:`Qubit `. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - :ref:`QVec ` - qubit vector * - std::function - :ref:`QGate ` function .. rubric:: Returns: :ref:`QCircuit ` Global Functions ---------------- .. index:: pair: function; transformOriginIRToQProg .. _doxid-group___utilities_1ga3ebdc6e64354fbb9a4840bee72f0b29a: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::transformOriginIRToQProg( std::string filePath, :ref:`QuantumMachine`* qm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv ) OriginIR Transform To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - OriginIR file path * - QuantumMachine\* - quantum machine pointer * - :ref:`QVec ` - qubit pointer * - std::vector - classical register vector .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_originir_to_qprog .. _doxid-group___utilities_1gaac2060fa16ef56111baae96c504dc5e3: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_originir_to_qprog(std::string file_path, :ref:`QuantumMachine`* qm) Convert OriginIR To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - OriginIR file path * - QuantumMachine\* - quantum machine pointer .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_originir_to_qprog .. _doxid-group___utilities_1ga2378b45c5225e8fea4a5bc8b71e1c697: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_originir_to_qprog( std::string file_path, :ref:`QuantumMachine`* qm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv ) Convert OriginIR To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - OriginIR file path * - QuantumMachine\* - quantum machine pointer * - :ref:`QVec ` - qubit pointer vector * - std::vector - classical register vector .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_originir_string_to_qprog .. _doxid-group___utilities_1ga663bf50e836b485b1681d99140e262e1: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_originir_string_to_qprog(std::string str_originir, :ref:`QuantumMachine`* qm) Convert OriginIR String To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - OriginIR String * - QuantumMachine\* - quantum machine pointer .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_originir_string_to_qprog .. _doxid-group___utilities_1ga7d86fcf5e2ae953ada82822b178124d1: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_originir_string_to_qprog( std::string str_originir, :ref:`QuantumMachine`* qm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv ) Convert OriginIR String To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - OriginIR String * - QuantumMachine\* - quantum machine pointer * - :ref:`QVec ` - qubit pointer * - std::vector - classical register vector .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_qasm_to_qprog .. _doxid-group___utilities_1ga58cc63a9077019716862a43ecdf0f82c: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_qasm_to_qprog(std::string file_path, :ref:`QuantumMachine`* qvm) QASM Transform To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - QASM file path * - QuantumMachine\* - quantum machine pointer .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_qasm_to_qprog .. _doxid-group___utilities_1ga22f7ec638fa0c0d60ba36c5e9ba88e57: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_qasm_to_qprog( std::string file_path, :ref:`QuantumMachine`* qvm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv ) QASM Transform To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - QASM file path * - QuantumMachine\* - quantum machine pointer * - :ref:`QVec ` - qubit pointer vector * - std::vector - classical register vector .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_qasm_string_to_qprog .. _doxid-group___utilities_1gafcdec6e2d9990eba6bb423a764f4dcdd: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_qasm_string_to_qprog(std::string qasm_str, :ref:`QuantumMachine`* qvm) QASM Transform To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - QASM string * - QuantumMachine\* - quantum machine pointer .. rubric:: Returns: :ref:`QProg ` quantum program .. index:: pair: function; convert_qasm_string_to_qprog .. _doxid-group___utilities_1gaf04fc3399712138b73250e9cc996c86f: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::convert_qasm_string_to_qprog( std::string qasm_str, :ref:`QuantumMachine`* qvm, :ref:`QVec`& qv, std::vector<:ref:`ClassicalCondition`>& cv ) QASM Transform To Quantum Program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string - QASM string * - QuantumMachine\* - quantum machine pointer * - :ref:`QVec ` - qubit pointer vector * - std::vector - classical register vector @retur .. index:: pair: function; transformBinaryDataToQProg .. _doxid-group___utilities_1ga126fbcaac23e41abf1cd661028cc9f57: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::transformBinaryDataToQProg( :ref:`QuantumMachine`* qm, const std::vector& data, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog ) Parse quantum program interface for binary data vector. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QuantumMachine\* - quantum machine pointer * - std::vector& - data binary data vector * - QVec& - qubits * - std::vector& - cbits * - QProg& - Quantum program .. rubric:: Returns: bool .. index:: pair: function; transformBinaryDataToQProg .. _doxid-group___utilities_1ga284d5b244a500b2103933ba318433455: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::transformBinaryDataToQProg( :ref:`QuantumMachine`* qm, const std::string& filename, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog ) Parse quantum program interface for binary file. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QuantumMachine\* - quantum machine pointer * - std::string& - binary file name * - QVec& - qubits * - std::vector& - cbits * - QProg& - Quantum program .. rubric:: Returns: bool .. index:: pair: function; convert_binary_data_to_qprog .. _doxid-group___utilities_1ga964bc45fa95994092d40d3df1fee947d: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::convert_binary_data_to_qprog( :ref:`QuantumMachine`* qm, const std::vector& data, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog ) Parse quantum program interface for binary data vector. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QuantumMachine\* - quantum machine pointer * - std::vector& - data binary data vector * - QVec& - qubits * - std::vector& - cbits * - QProg& - Quantum program .. rubric:: Returns: bool .. index:: pair: function; convert_binary_data_to_qprog .. _doxid-group___utilities_1gae732643b9f76756d4cbd21b52b9ee49a: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::convert_binary_data_to_qprog( :ref:`QuantumMachine`* qm, const std::string& filename, :ref:`QVec`& qubits, std::vector<:ref:`ClassicalCondition`>& cbits, :ref:`QProg`& prog ) Parse quantum program interface for binary file. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QuantumMachine\* - quantum machine pointer * - std::string& - binary file name * - QVec& - qubits * - std::vector& - cbits * - QProg& - Quantum program .. rubric:: Returns: bool .. index:: pair: function; transformQProgToBinary .. _doxid-group___utilities_1gab977f2314768f84df494fc726b269957: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::vector QPanda::transformQProgToBinary(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm) Get quantum program binary data. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QuantumMachine& - quantum .. rubric:: Returns: std::vector quantum program binary data .. index:: pair: function; transformQProgToBinary .. _doxid-group___utilities_1gae59f3170912283e6f2912778bda63a4d: .. ref-code-block:: cpp :class: doxyrest-title-code-block void QPanda::transformQProgToBinary(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, const std::string& filename) Store quantum program in binary file. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QuantumMachine\* - quantum machine * - std::string& - binary filename .. rubric:: Returns: void .. index:: pair: function; convert_qprog_to_binary .. _doxid-group___utilities_1gac91ac2b0027e3eb2f08ae86a1fc5201e: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::vector QPanda::convert_qprog_to_binary(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm) Get quantum program binary data. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QuantumMachine& - quantum .. rubric:: Returns: std::vector quantum program binary data .. index:: pair: function; convert_qprog_to_binary .. _doxid-group___utilities_1gaa5d087d0a28e6d87372ad75f6a3ae010: .. ref-code-block:: cpp :class: doxyrest-title-code-block void QPanda::convert_qprog_to_binary(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, const std::string& filename) Store quantum program in binary file. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QuantumMachine\* - quantum machine * - std::string& - binary filename .. rubric:: Returns: void .. index:: pair: function; transformQProgToOriginIR .. _doxid-group___utilities_1gac85a4be007c80a0c9bcac301414797c3: .. ref-code-block:: cpp :class: doxyrest-title-code-block template std::string QPanda::transformQProgToOriginIR( _Ty& node, :ref:`QuantumMachine`* machine ) Quantum Program Transform To OriginIR .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - _Ty& - quantum program, quantum circuit, quantum while or quantum if .. rubric:: Returns: std::string OriginIR instruction set .. rubric:: See also: .. ref-code-block:: cpp auto qvm = CPUQVM(); qvm.init(); auto qubit = qvm.qAllocMany(6); auto cbit = qvm.cAllocMany(2); auto prog = QProg(); prog << CZ(qubit[0], qubit[2]) << H(qubit[1]) << CNOT(qubit[1], qubit[2]) << RX(qubit[0],pi/2) << Measure(qubit[1],cbit[1]); extern QuantumMachine* global_quantum_machine; std::cout << transformQProgToOriginIR(prog, global_quantum_machine) << std::endl; finalize(); .. index:: pair: function; convert_qprog_to_originir .. _doxid-group___utilities_1ga139b35c89a0f7882bc77200bcf3e7b08: .. ref-code-block:: cpp :class: doxyrest-title-code-block template std::string QPanda::convert_qprog_to_originir( _Ty& node, :ref:`QuantumMachine`* machine ) Convert Quantum Program To OriginIR. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - _Ty& - quantum program, quantum circuit, quantum while or quantum if * - QuantumMachine\* - quantum machine .. rubric:: Returns: std::string OriginIR instruction set .. index:: pair: function; write_to_originir_file .. _doxid-group___utilities_1gaacaf590edec6cd53f930b03df02f9c85: .. ref-code-block:: cpp :class: doxyrest-title-code-block void QPanda::write_to_originir_file(:ref:`QProg` prog, :ref:`QuantumMachine`* qvm, const std::string file_name) write prog to originir file .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - Quantum Program * - QuantumMachine\* - quantum machine pointer * - const - std::string originir file name .. rubric:: Returns: .. index:: pair: function; convert_qprog_to_qasm .. _doxid-group___utilities_1ga9e790548fd3c3cc2280c5d553805d3c7: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string QPanda::convert_qprog_to_qasm(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm) Convert Quantum program to QASM instruction set. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - Quantum Program * - QuantumMachine\* - quantum machine pointer * - IBMQBackends - ibmBackend = IBMQ_QASM_SIMULATOR .. rubric:: Returns: std::string QASM instruction set .. index:: pair: function; write_to_qasm_file .. _doxid-group___utilities_1gaf32b48c2e232cd0ad54f4841fd34653d: .. ref-code-block:: cpp :class: doxyrest-title-code-block void QPanda::write_to_qasm_file(:ref:`QProg` prog, :ref:`QuantumMachine`* qvm, const std::string file_name) write prog to qasm file .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - Quantum Program * - QuantumMachine\* - quantum machine pointer * - const - std::string qasm file name .. rubric:: Returns: .. index:: pair: function; transformQProgToQuil .. _doxid-group___utilities_1ga1afab9eb4d36a2758e559b40f63e82cc: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string QPanda::transformQProgToQuil(:ref:`QProg`&, :ref:`QuantumMachine`* quantum_machine) Quantum program transform to quil instruction set interface. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QuantumMachine\* - quantum machine pointer .. rubric:: Returns: std::string instruction set .. rubric:: See also: .. ref-code-block:: cpp init(); QProg prog; auto qvec = qAllocMany(4); auto cvec = cAllocMany(4); prog << X(qvec[0]) << Y(qvec[1]) << H(qvec[0]) << RX(qvec[0], 3.14) << Measure(qvec[1], cvec[0]) ; extern QuantumMachine* global_quantum_machine; transformQProgToQuil(prog, global_quantum_machine) finalize(); .. index:: pair: function; convert_qprog_to_quil .. _doxid-group___utilities_1ga6ba609a5a9659c9247464add93496ccb: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string QPanda::convert_qprog_to_quil(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm) Quantum program transform to quil instruction set interface. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - quantum program * - QuantumMachine\* - quantum machine pointer .. rubric:: Returns: std::string instruction set .. index:: pair: function; transformQRunesToQProg .. _doxid-group___utilities_1ga1f9755f387cd30e9ac65ea502269f908: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::vector<:ref:`ClassicalCondition`> QPanda::transformQRunesToQProg(std::string, :ref:`QProg`&, :ref:`QuantumMachine`*) QRunes instruction set transform to quantum program interface. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - empty quantum program .. rubric:: Returns: void .. index:: pair: function; quantum_chip_adapter .. _doxid-group___utilities_1gaf8056e807ce59581186c3176f594b702: .. ref-code-block:: cpp :class: doxyrest-title-code-block void QPanda::quantum_chip_adapter( :ref:`QProg`& prog, :ref:`QuantumMachine`* quantum_machine, :ref:`QVec`& new_qvec, bool b_mapping = true, const std::string config_data = :ref:`CONFIG_PATH` ) Quantum chip adaptive conversion. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QProg& - Quantum Program * - QuantumMachine\* - quantum machine pointer * - QVec& - Quantum bits after mapping. Note: if b_mapping is false, the input :ref:`QVec ` will be misoperated. * - bool - whether or not perform the mapping operation. * - const - std::string It can be configuration file or configuration data, which can be distinguished by file suffix, so the configuration file must be end with ".json", default is CONFIG_PATH .. rubric:: Returns: .. index:: pair: function; arbitraryRotationMetadataValidity .. _doxid-group___utilities_1ga785ac4c99106792eb8c00392e5576104: .. ref-code-block:: cpp :class: doxyrest-title-code-block int QPanda::arbitraryRotationMetadataValidity( std::vector& gates, std::vector& valid_gates ) Judge if the metadata's type is arbitrary rotation. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::vector& - the gates is judged * - std::vector& - output the valid gates .. rubric:: Returns: Return the style of metadata validity .. index:: pair: function; doubleContinuousMetadataValidity .. _doxid-group___utilities_1gac4ba5476ec612a6f63122f9c33ccfbd8: .. ref-code-block:: cpp :class: doxyrest-title-code-block int QPanda::doubleContinuousMetadataValidity( std::vector& gates, std::vector& valid_gates ) Judge if the metadata's type is double continuous. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::vector& - the gates is judged * - std::vector& - output the valid gates .. rubric:: Returns: Return the style of metadata validity .. index:: pair: function; singleContinuousAndDiscreteMetadataValidity .. _doxid-group___utilities_1ga429a2bcbd0f51f6a5560bcb088c10e1e: .. ref-code-block:: cpp :class: doxyrest-title-code-block int QPanda::singleContinuousAndDiscreteMetadataValidity( std::vector& gates, std::vector& valid_gates ) Judge if the metadata's type is single continuous and discrete. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::vector& - the gates is judged * - std::vector& - output the valid gates .. rubric:: Returns: Return the style of metadata validity .. index:: pair: function; doubleDiscreteMetadataValidity .. _doxid-group___utilities_1ga5534bc47fbbbf2ccd5bd994feeebfd6a: .. ref-code-block:: cpp :class: doxyrest-title-code-block int QPanda::doubleDiscreteMetadataValidity( std::vector& gates, std::vector& valid_gates ) Judge if the metadata's type is double discrete. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::vector& - the gates is judged * - std::vector& - output the valid gates .. rubric:: Returns: Return the style of metadata validity .. index:: pair: function; doubleGateMetadataValidity .. _doxid-group___utilities_1gaceaea9db4f27bd09e4930b2ffa2fdfb5: .. ref-code-block:: cpp :class: doxyrest-title-code-block int QPanda::doubleGateMetadataValidity( std::vector& gates, std::vector& valid_gates ) Judge double gate type. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::vector& - the gates is judged * - std::vector& - output the valid gates .. rubric:: Returns: Return the style of metadata validity .. index:: pair: function; validateSingleQGateType .. _doxid-group___utilities_1ga0d5aad0edcc57eae1140ca91bf50bb5e: .. ref-code-block:: cpp :class: doxyrest-title-code-block int QPanda::validateSingleQGateType( std::vector& gates, std::vector& valid_gates ) Verify the validity of single quantum gates. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::vector& - gates vertor * - std::vector& - output the valid gates .. rubric:: Returns: int single quantum gate type .. index:: pair: function; isMatchTopology .. _doxid-group___utilities_1gafce6dbcae83d04515f17f59a8265aecb: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::isMatchTopology( const :ref:`QGate`& gate, const std::vector>& vecTopoSt ) judge the Qgate if match the target topologic structure of quantum circuit .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - vector>& - the target topologic structure of quantum circuit .. rubric:: Returns: if the Qgate match the target topologic structure return true, or else return false .. rubric:: See also: JsonConfigParam::readAdjacentMatrix(TiXmlElement \*, int&, std::vector>&) .. index:: pair: function; getAdjacentQGateType .. _doxid-group___utilities_1ga001536c094ce89eef0f37a5ed3f8880d: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string QPanda::getAdjacentQGateType( :ref:`QProg` prog, :ref:`NodeIter`& nodeItr, std::vector<:ref:`NodeInfo`>& adjacentNodes ) get the adjacent quantum gates's(the front one and the back one) type .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - nodeItr - the specialed :ref:`NodeIter ` * - std::vector& - adjacentNodes the front node and the back node .. rubric:: Returns: result string. .. rubric:: See also: .. index:: pair: function; isSwappable .. _doxid-group___utilities_1ga80e7e2572030d685250da60497ad551f: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::isSwappable(:ref:`QProg` prog, :ref:`NodeIter`& nodeItr1, :ref:`NodeIter`& nodeItr2) judge the specialed two NodeIters whether can be exchanged If the two input nodeIters are in different sub-prog, they are unswappable. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - nodeItr1 - the first :ref:`NodeIter ` * - nodeItr2 - the second :ref:`NodeIter ` .. rubric:: Returns: if the two NodeIters can be exchanged, return true, otherwise retuen false. .. index:: pair: function; isSupportedGateType .. _doxid-group___utilities_1ga28afe2b7d347e24df633c81ebb0d8ff1: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::isSupportedGateType(const :ref:`NodeIter`& nodeItr) judge if the target node is a base :ref:`QGate ` type .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - nodeItr - the target :ref:`NodeIter ` .. rubric:: Returns: if the target node is a base :ref:`QGate ` type, return true, otherwise retuen false. .. rubric:: See also: .. index:: pair: function; getCircuitMatrix .. _doxid-group___utilities_1ga124b0790cd5be2ccc668dccdb6f44efe: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QStat` QPanda::getCircuitMatrix( :ref:`QProg` srcProg, const bool b_bid_endian = false, const :ref:`NodeIter` nodeItrStart = :ref:`NodeIter`(), const :ref:`NodeIter` nodeItrEnd = :ref:`NodeIter`() ) get the target matrix between the input two Nodeiters .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - const - bool :ref:`Qubit ` order mark of output matrix, true for positive sequence(Bid Endian), false for inverted order(Little Endian), default is false * - nodeItrStart - the start :ref:`NodeIter ` * - nodeItrEnd - the end :ref:`NodeIter ` .. rubric:: Returns: the target matrix include all the :ref:`QGate ` 's matrix (multiply). .. rubric:: See also: .. index:: pair: function; pickUpNode .. _doxid-group___utilities_1ga98495795ac67b0a62bfe9421627d8380: .. ref-code-block:: cpp :class: doxyrest-title-code-block void QPanda::pickUpNode( :ref:`QProg`& outPutProg, :ref:`QProg` srcProg, const std::vector<:ref:`NodeType`> reject_node_types, const :ref:`NodeIter` nodeItrStart = :ref:`NodeIter`(), const :ref:`NodeIter` nodeItrEnd = :ref:`NodeIter`(), bool bDagger = false ) pick up the nodes of srcProg between nodeItrStart and nodeItrEnd to outPutProg .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - outPutProg - the output prog * - srcProg - The source prog * - nodeItrStart - The start pos of source prog * - nodeItrEnd - The end pos of source prog * - reject_node_types - vector of the reject node types. * - bDagger - daggger flag @ Note: If there are any Qif/Qwhile nodes between nodeItrStart and nodeItrEnd, Or the nodeItrStart and the nodeItrEnd are in different sub-circuit, an exception will be throw. .. index:: pair: function; get_all_used_qubits .. _doxid-group___utilities_1ga3501335f46decb71829be8dde89af2cc: .. ref-code-block:: cpp :class: doxyrest-title-code-block size_t QPanda::get_all_used_qubits(:ref:`QProg` prog, std::vector& vecQuBitsInUse) Get all the used quantum bits in the input prog. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - prog - the input prog * - vecQuBitsInUse - The vector of used quantum bits, sorted from small to large; .. rubric:: Returns: return the size of used qubits,sorted by physical address, in descending order .. index:: pair: function; get_all_used_class_bits .. _doxid-group___utilities_1ga61e049c9f5830e9e7d873dcc3ad9cb49: .. ref-code-block:: cpp :class: doxyrest-title-code-block size_t QPanda::get_all_used_class_bits(:ref:`QProg` prog, std::vector& vecClBitsInUse) Get all the used class bits in the input prog. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - prog - the input prog * - vecClBitsInUse - The vector of used class bits, sorted from small to large; .. rubric:: Returns: return the size of used class bits .. index:: pair: function; get_measure_info .. _doxid-group___utilities_1gae7764808f386c690003a13258ebc8535: .. ref-code-block:: cpp :class: doxyrest-title-code-block size_t QPanda::get_measure_info( :ref:`QProg` prog, std::vector>& measure_info ) Get all the measure-info in the input prog. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - prog - the input prog * - std::vector> - The vector of measure-info: std::pair .. rubric:: Returns: return the size of measure-info .. index:: pair: function; printAllNodeType .. _doxid-group___utilities_1gae66749bec396a311e4d27171a30f97a3: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string QPanda::printAllNodeType(:ref:`QProg` prog) output all the node type of the target prog .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - the - target prog .. rubric:: Returns: return the output string .. index:: pair: function; get_gate_parameter .. _doxid-group___utilities_1ga79406ec5a5ba912ce1675534c4ed9366: .. ref-code-block:: cpp :class: doxyrest-title-code-block void QPanda::get_gate_parameter(std::shared_ptr<:ref:`AbstractQGateNode`> pGate, std::string& para_str) get gate parameter .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - pGate - the target gate pointer * - para_str - parameter string .. rubric:: Returns: .. index:: pair: function; check_dagger .. _doxid-group___utilities_1ga1b6530f6d8c906aed1634b509035ceb4: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool QPanda::check_dagger(std::shared_ptr<:ref:`AbstractQGateNode`> p_gate, const bool& b_dagger) Check if it is a valid dagger. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - bool - .. rubric:: Returns: bool true for valid dagger .. index:: pair: function; getQGateNum .. _doxid-group___utilities_1gaa2167d6194906299c48b50228436f367: .. ref-code-block:: cpp :class: doxyrest-title-code-block template size_t QPanda::getQGateNum(_Ty& node) Count quantum gate num under quantum program, quantum circuit, quantum while, quantum if. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - _Ty& - quantum program, quantum circuit, quantum while or quantum if .. rubric:: Returns: size_t Quantum gate num .. rubric:: See also: .. ref-code-block:: cpp init(); auto qubits = qAllocMany(4); auto cbits = cAllocMany(4); auto circuit = CreateEmptyCircuit(); circuit << H(qubits[0]) << X(qubits[1]) << S(qubits[2]) << iSWAP(qubits[1], qubits[2]) << RX(qubits[3], PI/4); auto count = getQGateNumber(&circuit); std::cout << "QCircuit count: " << count << std::endl; finalize(); .. index:: pair: function; getQProgClockCycle .. _doxid-group___utilities_1ga2213e8b29b8575ab8b3140e746105a33: .. ref-code-block:: cpp :class: doxyrest-title-code-block size_t QPanda::getQProgClockCycle(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, bool optimize = false) Get quantum program clock cycle. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - :ref:`QProg ` - & quantum program * - QuantumMachine\* - quantum machine pointer .. rubric:: See also: .. ref-code-block:: cpp auto qvm = CPUQVM(); qvm.init(); auto qubits = qvm.qAllocMany(4); auto prog = QProg(); prog << H(qubits[0]) << CNOT(qubits[0], qubits[1]) << iSWAP(qubits[1], qubits[2]) << RX(qubits[3], PI/4); extern QuantumMachine* global_quantum_machine; auto time = getQProgClockCycle(prog,global_quantum_machine ); std::cout << "clockCycle : " << time << std::endl; .. index:: pair: function; get_qprog_clock_cycle .. _doxid-group___utilities_1gaee357ef471dd4546550d5689ae97cd03: .. ref-code-block:: cpp :class: doxyrest-title-code-block size_t QPanda::get_qprog_clock_cycle(:ref:`QProg`& prog, :ref:`QuantumMachine`* qm, bool optimize = false) Get quantum program clock cycle. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - :ref:`QProg ` - & quantum program * - QuantumMachine\* - quantum machine pointer .. index:: pair: function; draw_qprog .. _doxid-group___utilities_1ga77ea8621d7fe5fa493b18c1224db75b7: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string QPanda::draw_qprog( :ref:`QProg` prog, uint32_t length = 100, bool b_out_put_to_file = false, const :ref:`NodeIter` itr_start = :ref:`NodeIter`(), const :ref:`NodeIter` itr_end = :ref:`NodeIter`() ) output a quantum prog/circuit to console by text-pic(UTF-8 code), and will save the text-pic in file named QCircuitTextPic.txt in the same time in current path. All the output characters are UTF-8 encoded. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - prog - the source prog * - itr_start - The start pos, default is the first node of the prog * - itr_end - The end pos, default is the end node of the prog .. rubric:: Returns: the output string .. index:: pair: function; draw_qprog_with_clock .. _doxid-group___utilities_1gabd350b91611fc11460c8d2665d3aa829: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string QPanda::draw_qprog_with_clock( :ref:`QProg` prog, const std::string config_data = :ref:`CONFIG_PATH`, uint32_t length = 100, bool b_out_put_to_file = false, const :ref:`NodeIter` itr_start = :ref:`NodeIter`(), const :ref:`NodeIter` itr_end = :ref:`NodeIter`() ) output a quantum prog/circuit by time sequence to console by text-pic(UTF-8 code), and will save the text-pic in file named QCircuitTextPic.txt in the same time in current path. All the output characters are GBK encoded on windows, UTF-8 encoded on other OS. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - prog - the source prog * - const - std::string It can be configuration file or configuration data, which can be distinguished by file suffix, so the configuration file must be end with ".json", default is CONFIG_PATH * - itr_start - The start pos, default is the first node of the prog * - itr_end - The end pos, default is the end node of the prog .. rubric:: Returns: the output string .. index:: pair: function; operator<< .. _doxid-group___utilities_1gae4df8ff2e43a6a8ad196b3fe1ab31208: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::ostream& QPanda::operator << (std::ostream& out, :ref:`QProg` prog) Overload operator <<. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::ostream& - ostream * - :ref:`QProg ` - quantum program .. rubric:: Returns: std::ostream .. index:: pair: function; qcodar_match_by_simple_type .. _doxid-group___utilities_1gad89f466db768b81ca10a60bd4063950a: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`QProg` QPanda::qcodar_match_by_simple_type( :ref:`QProg` prog, :ref:`QVec`& qv, :ref:`QuantumMachine`* machine, size_t m = 2, size_t n = 4, size_t run_times = 5 ) A Contextual Duration-Aware :ref:`Qubit ` Mapping for V arious NISQ Devices. QCodarGridDevice : SIMPLE_TYPE It's a simple undirected topology graph, build a topology based on the values of m and n 0 = 1 = 2 = 3 eg: m = 2, n = 4 .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - :ref:`QProg ` - quantum program * - :ref:`QVec ` - qubit vector * - QuantumMachine\* - quantum machine * - size_t - m : the length of the topology * - size_t - n : the width of the topology * - size_t - run_times : the number of times run the remapping, better parameters get better results .. rubric:: Returns: :ref:`QProg ` mapped quantum program