Esempio n. 1
0
def test_gradient_H(simulator, power, controlled):
    qubit = 0
    control = 1
    angle = Variable(name="angle")
    variables = {angle: power}

    H = paulis.X(qubit=qubit)
    if not controlled:
        U = gates.H(target=qubit, power=angle)
    else:
        U = gates.X(target=control) + gates.H(
            target=qubit, control=control, power=angle)

    O = ExpectationValue(U=U, H=H)
    E = simulate(O, variables=variables, backend=simulator)
    assert (numpy.isclose(E,
                          -numpy.cos(angle(variables) * (numpy.pi)) / 2 + 0.5,
                          atol=1.e-4))
    dO = grad(objective=O, variable=angle)
    dE = simulate(dO, variables=variables, backend=simulator)

    assert (numpy.isclose(dE,
                          numpy.pi * numpy.sin(angle(variables) * (numpy.pi)) /
                          2,
                          atol=1.e-4))
Esempio n. 2
0
def test_paulistring_sampling_2(backend, case):
    H = QubitHamiltonian.from_paulistrings(PauliString.from_string(case[0]))
    U = gates.H(target=1) + gates.H(target=3) + gates.X(target=5) + gates.H(
        target=5)
    E = ExpectationValue(H=H, U=U)
    result = simulate(E, backend=backend, samples=1)
    assert (isclose(result, case[1], 1.e-4))
Esempio n. 3
0
def test_gradient_PHASE_HY(simulator, angle_value, controlled, silent=False):
    angle = Variable(name="angle")
    variables = {angle: angle_value}

    qubit = 0
    H = paulis.Y(qubit=qubit)
    if controlled:
        control = 1
        U = gates.X(target=control) + gates.H(target=qubit) + gates.Phase(
            target=qubit, control=control, phi=angle) + gates.H(target=qubit)
    else:
        U = gates.H(target=qubit) + gates.Phase(
            target=qubit, phi=angle) + gates.H(target=qubit)

    O = ExpectationValue(U=U, H=H)
    E = simulate(O, variables=variables, backend=simulator)
    dO = grad(objective=O, variable='angle')
    dE = simulate(dO, variables=variables)
    assert (numpy.isclose(E, -numpy.sin(angle(variables)), atol=1.e-4))
    assert (numpy.isclose(dE, -numpy.cos(angle(variables)), atol=1.e-4))
    if not silent:
        print("E         =", E)
        print("-sin(angle)=", -numpy.sin(angle(variables)))
        print("dE        =", dE)
        print("-cos(angle)=", -numpy.cos(angle(variables)))
Esempio n. 4
0
def test_rz_phase_flip_0(simulator, p, angle):
    qubit = 0
    H = paulis.Y(qubit)
    U = gates.H(target=qubit) + gates.Rz(angle=Variable('a'), target=qubit) + gates.H(target=qubit)
    O = ExpectationValue(U=U, H=H)
    NM = PhaseFlip(p, 1)
    E = simulate(O, backend=simulator, variables={'a': angle}, samples=1000, noise=NM)
    assert (numpy.isclose(E, ((-1. + 2 * p) ** 3) * numpy.sin(angle), atol=1.e-1))
Esempio n. 5
0
def test_rz_phase_flip_1(simulator, p, angle):

    U = gates.X(target=0) + gates.H(1) + gates.CRz(
        control=0, target=1, angle=Variable('a')) + gates.H(1)
    H = paulis.Z(1) * paulis.I(0)
    O = ExpectationValue(U, H)
    NM = PhaseFlip(p, 2)
    E = simulate(O,
                 backend=simulator,
                 variables={'a': angle},
                 samples=1,
                 noise=NM)
    print(E)
Esempio n. 6
0
def test_rz_phase_flip_0(simulator, p, angle):

    qubit = 0
    H = paulis.Y(qubit)
    U = gates.H(target=qubit) + gates.Rz(angle=Variable('a'),
                                         target=qubit) + gates.H(target=qubit)
    O = ExpectationValue(U=U, H=H)
    NM = PhaseFlip(p, 1)
    E = simulate(O,
                 backend=simulator,
                 variables={'a': angle},
                 samples=1,
                 noise=NM)
    print(E)
Esempio n. 7
0
def test_gradient_deep_H(simulator, power, controls):
    if controls > 2 and simulator == "qiskit":
        # does not work yet
        return
    qubit = 0
    angle = Variable(name="angle")
    variables = {angle: power}
    control = [i for i in range(1, controls + 1)]
    H = paulis.X(qubit=qubit)

    U = gates.X(target=control) + gates.H(
        target=qubit, control=control, power=angle)

    O = ExpectationValue(U=U, H=H)
    E = simulate(O, variables=variables, backend=simulator)
    assert (numpy.isclose(E,
                          -numpy.cos(angle(variables) * (numpy.pi)) / 2 + 0.5,
                          atol=1.e-4))
    dO = grad(objective=O, variable=angle)
    dE = simulate(dO, variables=variables, backend=simulator)

    assert (numpy.isclose(dE,
                          numpy.pi * numpy.sin(angle(variables) * (numpy.pi)) /
                          2,
                          atol=1.e-4))
Esempio n. 8
0
def test_hadamard(qubit, init):
    gate = gates.H(target=qubit)
    iwfn = QubitWaveFunction.from_int(i=init, n_qubits=qubit + 1)
    wfn = simulate(gate, initial_state=init)
    test = 1.0 / numpy.sqrt(2) * (iwfn.apply_qubitoperator(paulis.Z(qubit)) +
                                  iwfn.apply_qubitoperator(paulis.X(qubit)))
    assert (wfn.isclose(test))
Esempio n. 9
0
def test_phase_damp(simulator, p):

    qubit = 0
    H = paulis.X(qubit)
    U = gates.H(target=qubit)
    O = ExpectationValue(U=U, H=H)
    NM = PhaseDamp(p, 1)
    E = simulate(O, backend=simulator, samples=1, noise=NM)
Esempio n. 10
0
def test_phase_flip(simulator, p):
    qubit = 0
    H = paulis.X(qubit)
    U = gates.H(target=qubit)
    O = ExpectationValue(U=U, H=H)
    NM = PhaseFlip(p, 1)
    E = simulate(O, backend=simulator, samples=1000, noise=NM)
    assert (numpy.isclose(E, 1.0 - 2 * p, atol=1.e-1))
Esempio n. 11
0
def test_rz_phase_flip_1(simulator, p, angle):
    U = gates.X(target=0) + gates.H(1) + gates.CRz(control=0, target=1, angle=Variable('a')) + gates.H(1)
    H = paulis.Z(1) * paulis.I(0)
    O = ExpectationValue(U, H)
    NM = PhaseFlip(p, 2)
    E = simulate(O, backend=simulator, variables={'a': angle}, samples=1000, noise=NM)
    print(E)
    assert (numpy.isclose(E, ((1.0 - 2 * p) ** 2) * numpy.cos(angle), atol=1.e-1))
Esempio n. 12
0
def test_compile_ch(target, control, power):

    circuit = gates.H(target=target, control=control, power=power)
    equivalent_circuit = compile_ch(circuit)

    equivalent_ch = gates.Ry(target=target, control=None, angle=-numpy.pi / 4) + \
                    gates.Z(target=target, control=control, power=power) + \
                    gates.Ry(target=target, control=None, angle=numpy.pi / 4)

    if control is not None:
        assert (equivalent_circuit == equivalent_ch)
Esempio n. 13
0
    with open(filename + ".tmp.tex", "w") as file:
        file.write(latex_header + "\n")
        file.write("\\begin{document}\n")
        file.write("\\input{" + filename + "}\n")
        file.write("\\end{document}\n")

    with open(filename + "tmp.log", "w") as file:
        subprocess.call(["pdflatex", str(filename) + ".tmp.tex"], stdout=file)

    move(filename + ".tmp.pdf", filename + ".pdf")
    remove(filename + ".tmp.aux")
    remove(filename + ".tmp.log")
    remove(filename + ".tmp.tex")
    if not keep_qpic:
        remove(filename + ".qpic")
    if not keep_tex:
        remove(filename + ".tex")


if __name__ == "__main__":
    circuit = gates.X(0) + gates.H(1) + gates.X(target=0, control=1) + gates.Ry(target=0, control=1,
                                                                                angle="\\theta") + gates.X(target=2,
                                                                                                           control=[0,
                                                                                                                    1])
    string = export_to_qpic(circuit)

    print(string)

    export_to_pdf(circuit, filename="test", keep_qpic=True, keep_tex=True)