Commit 9c19a7cc authored by Mccaskey, Alex's avatar Mccaskey, Alex
Browse files

update to the pyscf example

parent 30154863
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
from qcor import *

# Create the H2 hamiltonian with Pyscf
H = createOperator('pyscf', {'basis': 'sto-3g', 'geometry': 'H  0.000000   0.0      0.0\nH   0.0        0.0  .7474'})
print('\nOriginal:\n', H.toString())

# Run the Qubit Tapering Observable Transform
H_tapered = operatorTransform('qubit-tapering', H)
print('\nTapered:\n', H_tapered)

# Define a simple 1 qubit ansatz
@qjit
def ansatz(q : qreg, x : List[float]):
    Rx(q[0], x[0])
    Ry(q[0], x[1])

# Create the problem model, provide the state 
# prep circuit, Hamiltonian and note variational parameters 
num_params = 2
problemModel = qsim.ModelBuilder.createModel(ansatz, H_tapered, 2)

# Create the VQE workflow
workflow = qsim.getWorkflow('vqe')

# Execute and print the result
result = workflow.execute(problemModel)
energy = result['energy']
print(energy)
 No newline at end of file
+26 −0
Original line number Diff line number Diff line
@@ -620,6 +620,32 @@ PYBIND11_MODULE(_pyqcor, m) {
              model.user_defined_ansatz = kernel_functor;
              return std::move(model);
            },
            "")
        .def(
            "createModel",
            [](py::object py_kernel, std::shared_ptr<Observable> &obs,
               const int n_params) {
              qcor::qsim::QuantumSimulationModel model;
              auto nq = obs->nBits();
              auto kernel_functor = std::make_shared<qcor::PyKernelFunctor>(
                  py_kernel, nq, n_params);
              model.observable = obs.get();
              model.user_defined_ansatz = kernel_functor;
              return std::move(model);
            },
            "")

        .def(
            "createModel",
            [](py::object py_kernel, std::shared_ptr<Observable> &obs,
               const int n_qubits, const int n_params) {
              qcor::qsim::QuantumSimulationModel model;
              auto kernel_functor = std::make_shared<qcor::PyKernelFunctor>(
                  py_kernel, n_qubits, n_params);
              model.observable = obs.get();
              model.user_defined_ansatz = kernel_functor;
              return std::move(model);
            },
            "");

    // CostFunctionEvaluator bindings