.. index:: pair: group; ChemiQ .. _doxid-group___chemi_q: ChemiQ ====== .. toctree:: :hidden: class_QPanda_Psi4Wrapper.rst Overview ~~~~~~~~ .. ref-code-block:: cpp :class: doxyrest-overview-code-block // classes class :ref:`QPanda::Psi4Wrapper`; // global functions DLLEXPORT size_t :ref:`QPanda::getElectronNum`(const std::string& atom); DLLEXPORT :ref:`PauliOperator` :ref:`QPanda::JordanWignerTransform`(const :ref:`OrbitalActVec`& fermion_item); DLLEXPORT :ref:`PauliOperator` :ref:`QPanda::JordanWignerTransform`(const :ref:`FermionOperator`& fermion); DLLEXPORT :ref:`VarPauliOperator` :ref:`QPanda::JordanWignerTransform`(const :ref:`VarFermionOperator`& fermion); DLLEXPORT :ref:`PauliOperator` :ref:`QPanda::ParityTransform`(const :ref:`OrbitalActVec`& fermion_item, size_t maxqubit); DLLEXPORT :ref:`PauliOperator` :ref:`QPanda::ParityTransform`(const :ref:`FermionOperator`& fermio); DLLEXPORT :ref:`VarPauliOperator` :ref:`QPanda::ParityTransform`(const :ref:`VarFermionOperator`& fermion); DLLEXPORT std::vector :ref:`QPanda::BKMatrix`(size_t qn); DLLEXPORT :ref:`PauliOperator` :ref:`QPanda::BravyiKitaevTransform`( const :ref:`OrbitalActVec`& fermion_item, size_t maxqubit, std::vector BK ); DLLEXPORT :ref:`VarPauliOperator` :ref:`QPanda::BravyiKitaevTransform`(const :ref:`VarFermionOperator`& fermion, std::vector BK); DLLEXPORT size_t :ref:`QPanda::getCCS_N_Trem`(size_t qn, size_t en); DLLEXPORT size_t :ref:`QPanda::getCCSD_N_Trem`(size_t qn, size_t en); DLLEXPORT :ref:`FermionOperator` :ref:`QPanda::getCCS`(size_t qn, size_t en, const vector_d& para_vec); DLLEXPORT :ref:`VarFermionOperator` :ref:`QPanda::getCCS`(size_t qn, size_t en, :ref:`var`& para); DLLEXPORT :ref:`VarFermionOperator` :ref:`QPanda::getCCS`(size_t qn, size_t en, std::vector<:ref:`var`>& para); DLLEXPORT :ref:`FermionOperator` :ref:`QPanda::getCCSD`(size_t qn, size_t en, const vector_d& para_vec); DLLEXPORT :ref:`VarFermionOperator` :ref:`QPanda::getCCSD`(size_t qn, size_t en, :ref:`var`& para); DLLEXPORT :ref:`VarFermionOperator` :ref:`QPanda::getCCSD`(size_t qn, size_t en, std::vector<:ref:`var`>& para); DLLEXPORT :ref:`PauliOperator` :ref:`QPanda::transCC2UCC`(const :ref:`PauliOperator`& cc); DLLEXPORT :ref:`VarPauliOperator` :ref:`QPanda::transCC2UCC`(const :ref:`VarPauliOperator`& cc); DLLEXPORT :ref:`VQC` :ref:`QPanda::simulateHamiltonian`(:ref:`QVec`& qubit_vec, :ref:`VarPauliOperator`& pauli, double t, size_t slices); DLLEXPORT :ref:`VQC` :ref:`QPanda::simulateOneTerm`(:ref:`QVec`& qubit_vec, const QTerm& hamiltonian_term, const :ref:`var`& coef, double t); DLLEXPORT :ref:`VQC` :ref:`QPanda::simulateZTerm`(:ref:`QVec`& qubit_vec, const :ref:`var`& coef, double t); DLLEXPORT :ref:`FermionOperator` :ref:`QPanda::parsePsi4DataToFermion`(const std::string& data); .. _details-group___chemi_q: Detailed Documentation ~~~~~~~~~~~~~~~~~~~~~~ Global Functions ---------------- .. index:: pair: function; getElectronNum .. _doxid-group___chemi_q_1ga02b35349588cbecff66ed7b11df23836: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT size_t QPanda::getElectronNum(const std::string& atom) get the electron number of the atom. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string& - atom .. rubric:: Returns: size_t atom's electorn number .. index:: pair: function; JordanWignerTransform .. _doxid-group___chemi_q_1gabe3d00970e6051f8fa3b1723ce700625: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`PauliOperator` QPanda::JordanWignerTransform(const :ref:`OrbitalActVec`& fermion_item) Jordan-Wigner transform of one fermion term, like "3+ 1 2+ 0". .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - OrbitalActVec& - fermion term .. rubric:: Returns: PauliOperator .. rubric:: See also: :ref:`OrbitalActVec ` :ref:`PauliOperator ` .. index:: pair: function; JordanWignerTransform .. _doxid-group___chemi_q_1gaa35e415e385783eec78f5b8f0b6bc70b: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`PauliOperator` QPanda::JordanWignerTransform(const :ref:`FermionOperator`& fermion) Jordan-Wigner transform from FermionOperator to PauliOperator. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - FermionOperator& - fermion operator .. rubric:: Returns: PauliOperator .. rubric:: See also: :ref:`FermionOperator ` :ref:`PauliOperator ` .. index:: pair: function; JordanWignerTransform .. _doxid-group___chemi_q_1ga380e66e8e43918dbf73a0690bef5e9f5: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarPauliOperator` QPanda::JordanWignerTransform(const :ref:`VarFermionOperator`& fermion) Jordan-Wigner transform from VarFermionOperator to VarPauliOperator. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - VarFermionOperator& - variational fermion operator .. rubric:: Returns: VarPauliOperator .. rubric:: See also: :ref:`VarFermionOperator ` :ref:`VarPauliOperator ` .. index:: pair: function; ParityTransform .. _doxid-group___chemi_q_1gaf59314f2325b2fcde54820e67c5da280: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`PauliOperator` QPanda::ParityTransform(const :ref:`OrbitalActVec`& fermion_item, size_t maxqubit) Parity transform of one fermion term, like "3+ 1 2+ 0". .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - OrbitalActVec& - fermion term * - size_t - maxqubit .. rubric:: Returns: PauliOperator .. rubric:: See also: :ref:`OrbitalActVec ` :ref:`PauliOperator ` .. index:: pair: function; ParityTransform .. _doxid-group___chemi_q_1gaff1de62492b7cc268d8781bd53209cd3: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`PauliOperator` QPanda::ParityTransform(const :ref:`FermionOperator`& fermio) Parity transform from FermionOperator to PauliOperator. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - FermionOperator& - fermion operator .. rubric:: Returns: PauliOperator .. rubric:: See also: :ref:`FermionOperator ` :ref:`PauliOperator ` .. index:: pair: function; ParityTransform .. _doxid-group___chemi_q_1gaa4e7311a00586689562edc4d0078cb8b: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarPauliOperator` QPanda::ParityTransform(const :ref:`VarFermionOperator`& fermion) Parity transform from VarFermionOperator to VarPauliOperator. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - VarFermionOperator& - variational fermion operator .. rubric:: Returns: VarPauliOperator .. rubric:: See also: :ref:`VarFermionOperator ` :ref:`VarPauliOperator ` .. index:: pair: function; BKMatrix .. _doxid-group___chemi_q_1ga91de3b2612b1bbacc6b33ac13466632b: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT std::vector QPanda::BKMatrix(size_t qn) BKMatrix required by BravyiKitaev transform. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - qn quantum number .. index:: pair: function; BravyiKitaevTransform .. _doxid-group___chemi_q_1ga1ce91fc2dab3957e73c6aa3f7b327885: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`PauliOperator` QPanda::BravyiKitaevTransform( const :ref:`OrbitalActVec`& fermion_item, size_t maxqubit, std::vector BK ) BravyiKitaev transform of one fermion term, like "3+ 1 2+ 0". .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - OrbitalActVec& - fermion term * - size_t - maxqubit * - std::vector - BK .. rubric:: Returns: PauliOperator .. rubric:: See also: :ref:`OrbitalActVec ` :ref:`PauliOperator ` .. index:: pair: function; BravyiKitaevTransform .. _doxid-group___chemi_q_1ga4bc6e42d8e1587c1b99c85218e79b0df: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarPauliOperator` QPanda::BravyiKitaevTransform( const :ref:`VarFermionOperator`& fermion, std::vector BK ) BravyiKitaev transform from VarFermionOperator to VarPauliOperator. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - VarFermionOperator& - variational fermion operator * - std::vector - BK .. rubric:: Returns: VarPauliOperator .. rubric:: See also: :ref:`VarFermionOperator ` :ref:`VarPauliOperator ` .. index:: pair: function; getCCS_N_Trem .. _doxid-group___chemi_q_1ga1e525807937cc2fb95224ba97872c6ec: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT size_t QPanda::getCCS_N_Trem(size_t qn, size_t en) get CCS term number. Coupled cluster single model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3 .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number .. rubric:: Returns: size_t CCS term number .. index:: pair: function; getCCSD_N_Trem .. _doxid-group___chemi_q_1gabe33b2e96c7837abf24a9026d3fb9476: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT size_t QPanda::getCCSD_N_Trem(size_t qn, size_t en) get CCSD term number. Coupled cluster single and double model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3,01->23 .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number .. rubric:: Returns: size_t CCSD term number .. index:: pair: function; getCCS .. _doxid-group___chemi_q_1ga2dee7304bfeecd7a50d85a2e6c7c910c: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`FermionOperator` QPanda::getCCS(size_t qn, size_t en, const vector_d& para_vec) get Coupled cluster single model. Coupled cluster single model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3. returned FermionOperator like this: {{"2+ 0":para0},{"3+ 0":para1},{"2+ 1":para2},{"3+ 1":para3}} .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number * - vector_d& - parameters .. rubric:: Returns: FermionOperator .. index:: pair: function; getCCS .. _doxid-group___chemi_q_1ga24061dcef88f99903c778485d0b79e0e: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarFermionOperator` QPanda::getCCS(size_t qn, size_t en, :ref:`var`& para) get Coupled cluster single model with variational parameters. Coupled cluster single model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3. returned FermionOperator like this: {{"2+ 0":var[0]},{"3+ 0":var[1]},{"2+ 1":var[2]},{"3+ 1":var[3]}} .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number * - var - parameters .. rubric:: Returns: VarFermionOperator .. index:: pair: function; getCCS .. _doxid-group___chemi_q_1ga14ad05ec8598381b3ae4719810e279f1: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarFermionOperator` QPanda::getCCS(size_t qn, size_t en, std::vector<:ref:`var`>& para) get Coupled cluster single model with variational parameters. Coupled cluster single model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3. returned FermionOperator like this: {{"2+ 0":var[0]},{"3+ 0":var[1]},{"2+ 1":var[2]},{"3+ 1":var[3]}} .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number * - std::vector& - parameters .. rubric:: Returns: VarFermionOperator .. index:: pair: function; getCCSD .. _doxid-group___chemi_q_1ga4eace51dd20fd3c5878174e6e3c95a59: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`FermionOperator` QPanda::getCCSD(size_t qn, size_t en, const vector_d& para_vec) get Coupled cluster single and double model. Coupled cluster single and double model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3,01->23. returned FermionOperator like this: {{"2+ 0":para0},{"3+ 0":para1},{"2+ 1":para2},{"3+ 1":para3}, {"3+ 2+ 1 0":para5}} .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number * - vector_d& - parameters .. rubric:: Returns: FermionOperator .. index:: pair: function; getCCSD .. _doxid-group___chemi_q_1ga5fd9958db5f1b82d4e10de9298b1a340: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarFermionOperator` QPanda::getCCSD(size_t qn, size_t en, :ref:`var`& para) get Coupled cluster single and double model with variational parameters. Coupled cluster single and double model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3,01->23. returned FermionOperator like this: {{"2+ 0":var[0]},{"3+ 0":var[1]},{"2+ 1":var[2]},{"3+ 1":var[3]}, {"3+ 2+ 1 0":var[4]}} .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number * - var& - parameters .. rubric:: Returns: VarFermionOperator .. index:: pair: function; getCCSD .. _doxid-group___chemi_q_1ga05b705ee2069c55b9c13781634f2b0f6: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarFermionOperator` QPanda::getCCSD(size_t qn, size_t en, std::vector<:ref:`var`>& para) get Coupled cluster single and double model with variational parameters. Coupled cluster single and double model. e.g. 4 qubits, 2 electrons then 0 and 1 are occupied,just consider 0->2,0->3,1->2,1->3,01->23. returned FermionOperator like this: {{"2+ 0":var[0]},{"3+ 0":var[1]},{"2+ 1":var[2]},{"3+ 1":var[3]}, {"3+ 2+ 1 0":var[4]}} .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - quantum number(orbital number) * - size_t - electron number * - std::vector& - parameters .. rubric:: Returns: VarFermionOperator .. index:: pair: function; transCC2UCC .. _doxid-group___chemi_q_1ga59ff6451901ac75cfce2308a8c9becc6: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`PauliOperator` QPanda::transCC2UCC(const :ref:`PauliOperator`& cc) Generate Hamiltonian form of unitary coupled cluster based on coupled cluster,H=1j\*(T-dagger(T)), then exp(-jHt)=exp(T-dagger(T)). .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - PauliOperator& - pauli operator .. rubric:: Returns: PauliOperator .. rubric:: See also: :ref:`PauliOperator ` .. index:: pair: function; transCC2UCC .. _doxid-group___chemi_q_1gaae2511f96ce8c475dd606b1dbe279c82: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VarPauliOperator` QPanda::transCC2UCC(const :ref:`VarPauliOperator`& cc) Generate Hamiltonian form of unitary coupled cluster based on coupled cluster,H=1j\*(T-dagger(T)), then exp(-jHt)=exp(T-dagger(T)). .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - VarPauliOperator& - pauli operator .. rubric:: Returns: VarPauliOperator .. rubric:: See also: :ref:`VarPauliOperator ` .. index:: pair: function; simulateHamiltonian .. _doxid-group___chemi_q_1gac65531ce19de3b5766bc33b1dca2c014: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VQC` QPanda::simulateHamiltonian( :ref:`QVec`& qubit_vec, :ref:`VarPauliOperator`& pauli, double t, size_t slices ) Simulate a general case of hamiltonian by Trotter-Suzuki approximation. U=exp(-iHt)=(exp(-i H1 t/n)\*exp(-i H2 t/n))^n. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QVec& - the qubit needed to simulate the Hamiltonian * - VarPauliOperator& - Hamiltonian * - double - time * - size_t - the approximate slices .. rubric:: Returns: VQC .. rubric:: See also: :ref:`QVec ` :ref:`VarPauliOperator ` :ref:`QPanda::Variational::VQC ` .. index:: pair: function; simulateOneTerm .. _doxid-group___chemi_q_1ga97962c33b3af98a7a1e25d9ba716e82e: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VQC` QPanda::simulateOneTerm( :ref:`QVec`& qubit_vec, const QTerm& hamiltonian_term, const :ref:`var`& coef, double t ) Simulate a single term of Hamilonian like "X0 Y1 Z2" with coefficient and time. U=exp(-it\*coef\*H) .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QVec& - the qubit needed to simulate the Hamiltonian * - QTerm& - Hamiltonian term, string like "X0 Y1 Z2" * - var& - the coefficient of hamiltonian * - double - time .. rubric:: Returns: VQC .. rubric:: See also: :ref:`QVec ` QTerm :ref:`QPanda::Variational::var ` .. index:: pair: function; simulateZTerm .. _doxid-group___chemi_q_1gadf8fdd11093b481f74988c0330591a63: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`VQC` QPanda::simulateZTerm(:ref:`QVec`& qubit_vec, const :ref:`var`& coef, double t) Simulating z-only term like H=coef \* (Z0..Zn-1) U=exp(-iHt) .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QVec& - the qubit needed to simulate the Hamiltonian * - var& - the coefficient of hamiltonian * - double - time .. rubric:: Returns: VQC .. rubric:: See also: :ref:`QVec ` :ref:`QPanda::Variational::var ` .. index:: pair: function; parsePsi4DataToFermion .. _doxid-group___chemi_q_1ga4995c648e2dc98bbb2344483ac2b31ab: .. ref-code-block:: cpp :class: doxyrest-title-code-block DLLEXPORT :ref:`FermionOperator` QPanda::parsePsi4DataToFermion(const std::string& data) Parse psi4 data to fermion operator. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - std::string& - fermon str .. rubric:: Returns: FermionOperator .. rubric:: See also: :ref:`FermionOperator `