ChemiQ¶
Overview¶
// classes class QPanda::Psi4Wrapper; // global functions DLLEXPORT size_t QPanda::getElectronNum(const std::string& atom); DLLEXPORT PauliOperator QPanda::JordanWignerTransform(const OrbitalActVec& fermion_item); DLLEXPORT PauliOperator QPanda::JordanWignerTransform(const FermionOperator& fermion); DLLEXPORT VarPauliOperator QPanda::JordanWignerTransform(const VarFermionOperator& fermion); DLLEXPORT PauliOperator QPanda::ParityTransform(const OrbitalActVec& fermion_item, size_t maxqubit); DLLEXPORT PauliOperator QPanda::ParityTransform(const FermionOperator& fermio); DLLEXPORT VarPauliOperator QPanda::ParityTransform(const VarFermionOperator& fermion); DLLEXPORT std::vector<Eigen::MatrixXi> QPanda::BKMatrix(size_t qn); DLLEXPORT PauliOperator QPanda::BravyiKitaevTransform( const OrbitalActVec& fermion_item, size_t maxqubit, std::vector<Eigen::MatrixXi> BK ); DLLEXPORT VarPauliOperator QPanda::BravyiKitaevTransform(const VarFermionOperator& fermion, std::vector<Eigen::MatrixXi> BK); DLLEXPORT size_t QPanda::getCCS_N_Trem(size_t qn, size_t en); DLLEXPORT size_t QPanda::getCCSD_N_Trem(size_t qn, size_t en); DLLEXPORT FermionOperator QPanda::getCCS(size_t qn, size_t en, const vector_d& para_vec); DLLEXPORT VarFermionOperator QPanda::getCCS(size_t qn, size_t en, var& para); DLLEXPORT VarFermionOperator QPanda::getCCS(size_t qn, size_t en, std::vector<var>& para); DLLEXPORT FermionOperator QPanda::getCCSD(size_t qn, size_t en, const vector_d& para_vec); DLLEXPORT VarFermionOperator QPanda::getCCSD(size_t qn, size_t en, var& para); DLLEXPORT VarFermionOperator QPanda::getCCSD(size_t qn, size_t en, std::vector<var>& para); DLLEXPORT PauliOperator QPanda::transCC2UCC(const PauliOperator& cc); DLLEXPORT VarPauliOperator QPanda::transCC2UCC(const VarPauliOperator& cc); DLLEXPORT VQC QPanda::simulateHamiltonian(QVec& qubit_vec, VarPauliOperator& pauli, double t, size_t slices); DLLEXPORT VQC QPanda::simulateOneTerm(QVec& qubit_vec, const QTerm& hamiltonian_term, const var& coef, double t); DLLEXPORT VQC QPanda::simulateZTerm(QVec& qubit_vec, const var& coef, double t); DLLEXPORT FermionOperator QPanda::parsePsi4DataToFermion(const std::string& data);
Detailed Documentation¶
Global Functions¶
DLLEXPORT size_t QPanda::getElectronNum(const std::string& atom)
get the electron number of the atom.
Parameters:
| std::string& | atom |
Returns:
size_t atom’s electorn number
DLLEXPORT PauliOperator QPanda::JordanWignerTransform(const OrbitalActVec& fermion_item)
Jordan-Wigner transform of one fermion term, like “3+ 1 2+ 0”.
Parameters:
| OrbitalActVec& | fermion term |
Returns:
PauliOperator
See also:
DLLEXPORT PauliOperator QPanda::JordanWignerTransform(const FermionOperator& fermion)
Jordan-Wigner transform from FermionOperator to PauliOperator.
Parameters:
| FermionOperator& | fermion operator |
Returns:
PauliOperator
See also:
DLLEXPORT VarPauliOperator QPanda::JordanWignerTransform(const VarFermionOperator& fermion)
Jordan-Wigner transform from VarFermionOperator to VarPauliOperator.
Parameters:
| VarFermionOperator& | variational fermion operator |
Returns:
VarPauliOperator
See also:
DLLEXPORT PauliOperator QPanda::ParityTransform(const OrbitalActVec& fermion_item, size_t maxqubit)
Parity transform of one fermion term, like “3+ 1 2+ 0”.
Parameters:
| OrbitalActVec& | fermion term |
| size_t | maxqubit |
Returns:
PauliOperator
See also:
DLLEXPORT PauliOperator QPanda::ParityTransform(const FermionOperator& fermio)
Parity transform from FermionOperator to PauliOperator.
Parameters:
| FermionOperator& | fermion operator |
Returns:
PauliOperator
See also:
DLLEXPORT VarPauliOperator QPanda::ParityTransform(const VarFermionOperator& fermion)
Parity transform from VarFermionOperator to VarPauliOperator.
Parameters:
| VarFermionOperator& | variational fermion operator |
Returns:
VarPauliOperator
See also:
DLLEXPORT std::vector<Eigen::MatrixXi> QPanda::BKMatrix(size_t qn)
BKMatrix required by BravyiKitaev transform.
Parameters:
| size_t | qn quantum number |
DLLEXPORT PauliOperator QPanda::BravyiKitaevTransform( const OrbitalActVec& fermion_item, size_t maxqubit, std::vector<Eigen::MatrixXi> BK )
BravyiKitaev transform of one fermion term, like “3+ 1 2+ 0”.
Parameters:
| OrbitalActVec& | fermion term |
| size_t | maxqubit |
| std::vector<Eigen::MatrixXi> | BK |
Returns:
PauliOperator
See also:
DLLEXPORT VarPauliOperator QPanda::BravyiKitaevTransform( const VarFermionOperator& fermion, std::vector<Eigen::MatrixXi> BK )
BravyiKitaev transform from VarFermionOperator to VarPauliOperator.
Parameters:
| VarFermionOperator& | variational fermion operator |
| std::vector<Eigen::MatrixXi> | BK |
Returns:
VarPauliOperator
See also:
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
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
Returns:
size_t CCS term number
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
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
Returns:
size_t CCSD term number
DLLEXPORT 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}}
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
| vector_d& | parameters |
Returns:
FermionOperator
DLLEXPORT VarFermionOperator QPanda::getCCS(size_t qn, size_t en, 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]}}
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
| var | parameters |
Returns:
VarFermionOperator
DLLEXPORT VarFermionOperator QPanda::getCCS(size_t qn, size_t en, std::vector<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]}}
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
| std::vector<var>& | parameters |
Returns:
VarFermionOperator
DLLEXPORT 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}}
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
| vector_d& | parameters |
Returns:
FermionOperator
DLLEXPORT VarFermionOperator QPanda::getCCSD(size_t qn, size_t en, 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]}}
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
| var& | parameters |
Returns:
VarFermionOperator
DLLEXPORT VarFermionOperator QPanda::getCCSD(size_t qn, size_t en, std::vector<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]}}
Parameters:
| size_t | quantum number(orbital number) |
| size_t | electron number |
| std::vector<var>& | parameters |
Returns:
VarFermionOperator
DLLEXPORT PauliOperator QPanda::transCC2UCC(const 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)).
Parameters:
| PauliOperator& | pauli operator |
Returns:
PauliOperator
See also:
DLLEXPORT VarPauliOperator QPanda::transCC2UCC(const 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)).
Parameters:
| VarPauliOperator& | pauli operator |
Returns:
VarPauliOperator
See also:
DLLEXPORT VQC QPanda::simulateHamiltonian( QVec& qubit_vec, 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.
Parameters:
| QVec& | the qubit needed to simulate the Hamiltonian |
| VarPauliOperator& | Hamiltonian |
| double | time |
| size_t | the approximate slices |
Returns:
VQC
See also:
DLLEXPORT VQC QPanda::simulateOneTerm( QVec& qubit_vec, const QTerm& hamiltonian_term, const var& coef, double t )
Simulate a single term of Hamilonian like “X0 Y1 Z2” with coefficient and time. U=exp(-it*coef*H)
Parameters:
| QVec& | the qubit needed to simulate the Hamiltonian |
| QTerm& | Hamiltonian term, string like “X0 Y1 Z2” |
| var& | the coefficient of hamiltonian |
| double | time |
Returns:
VQC
See also:
QTerm
DLLEXPORT VQC QPanda::simulateZTerm(QVec& qubit_vec, const var& coef, double t)
Simulating z-only term like H=coef * (Z0..Zn-1) U=exp(-iHt)
Parameters:
| QVec& | the qubit needed to simulate the Hamiltonian |
| var& | the coefficient of hamiltonian |
| double | time |
Returns:
VQC
See also:
DLLEXPORT FermionOperator QPanda::parsePsi4DataToFermion(const std::string& data)
Parse psi4 data to fermion operator.
Parameters:
| std::string& | fermon str |
Returns:
FermionOperator
See also: