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:

OrbitalActVec

PauliOperator

DLLEXPORT PauliOperator QPanda::JordanWignerTransform(const FermionOperator& fermion)

Jordan-Wigner transform from FermionOperator to PauliOperator.

Parameters:

FermionOperator& fermion operator

Returns:

PauliOperator

See also:

FermionOperator

PauliOperator

DLLEXPORT VarPauliOperator QPanda::JordanWignerTransform(const VarFermionOperator& fermion)

Jordan-Wigner transform from VarFermionOperator to VarPauliOperator.

Parameters:

VarFermionOperator& variational fermion operator

Returns:

VarPauliOperator

See also:

VarFermionOperator

VarPauliOperator

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:

OrbitalActVec

PauliOperator

DLLEXPORT PauliOperator QPanda::ParityTransform(const FermionOperator& fermio)

Parity transform from FermionOperator to PauliOperator.

Parameters:

FermionOperator& fermion operator

Returns:

PauliOperator

See also:

FermionOperator

PauliOperator

DLLEXPORT VarPauliOperator QPanda::ParityTransform(const VarFermionOperator& fermion)

Parity transform from VarFermionOperator to VarPauliOperator.

Parameters:

VarFermionOperator& variational fermion operator

Returns:

VarPauliOperator

See also:

VarFermionOperator

VarPauliOperator

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:

OrbitalActVec

PauliOperator

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:

VarFermionOperator

VarPauliOperator

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:

PauliOperator

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:

VarPauliOperator

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:

QVec

VarPauliOperator

QPanda::Variational::VQC

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:

QVec

QTerm

QPanda::Variational::var

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:

QVec

QPanda::Variational::var

DLLEXPORT FermionOperator QPanda::parsePsi4DataToFermion(const std::string& data)

Parse psi4 data to fermion operator.

Parameters:

std::string& fermon str

Returns:

FermionOperator

See also:

FermionOperator