コード例 #1
0
def estimate_gradient(f_h, precision, n_measurements=50, cxn=False):
    """ Estimate the gradient from point of evaluation
        to point of perturbation, h

    :param float f_h: Oracle output at perturbation h.
    :param int precision: Bit precision of gradient.
    :param Connection cxn: connection to the QPU or QVM
    :param int n_measurements: Number of times to measure system.
    """

    # enumerate input and ancilla qubits
    input_qubits = list(range(precision))
    ancilla_qubit = precision

    # generate gradient program
    perturbation_sign = np.sign(f_h)
    p_gradient = gradient_estimator(abs(f_h), ancilla_qubit)

    # run gradient program
    if not cxn:
        from pyquil.api import SyncConnection
        cxn = SyncConnection()
    measurements = cxn.run(p_gradient, input_qubits, n_measurements)

    # summarize measurements
    bf_estimate = perturbation_sign * measurements_to_bf(measurements)
    bf_explicit = '{0:.16f}'.format(bf_estimate)
    deci_estimate = binary_to_real(bf_explicit)

    return deci_estimate
コード例 #2
0
from pyquil.api import SyncConnection
from pyquil.api import QVMConnection
from pyquil.gates import *

p = Program()
p.inst(H(0))
p.inst(CNOT(0, 1))
qvm = SyncConnection()
result = qvm.wavefunction(p)
print('result', result)

qvm = QVMConnection()
p = Program()
p.inst(H(0), CNOT(0, 1), MEASURE(0, 0), MEASURE(1, 1))
print(p)
x = qvm.run(p, [0, 1], 10)
print(x)

import numpy as np
from pyquil.quil import Program
from pyquil.api import QVMConnection
quantum_simulator = QVMConnection()
# pyQuil is based around operations (or gates) so we will start with the most
# basic one: the identity operation, called I. I takes one argument, the index
# of the qubit that it should be applied to.
from pyquil.gates import I
p = Program(I(0))

# Quantum states are called wavefunctions for historical reasons.
# We can run this basic program on our connection to the simulator.
# This call will return the state of our qubits after we run program p.