Exemple #1
0
def test_belltest():
    prog = qf.Program()
    prog += qf.Call('H', [], [0])
    prog += qf.Call('CNOT', [], [0, 1])
    ket = prog.run()

    assert qf.states_close(ket, qf.ghz_state(2))
Exemple #2
0
def test_compile_label():
    prog = qf.Program()
    prog += qf.Label('Here')
    prog += qf.Nop()
    prog += qf.Label('There')

    ket = prog.run()

    assert ket.memory[TARGETS] == {'Here': 0, 'There': 2}
Exemple #3
0
def test_div():
    ro = qf.Register()
    prog = qf.Program()
    prog += qf.Move(ro[0], 4)
    prog += qf.Move(ro[1], 1)
    prog += qf.Div(ro[0], ro[1])
    prog += qf.Div(ro[0], 2)
    ket = prog.run()
    assert ket.memory[ro[0]] == 2
Exemple #4
0
def test_xgate():
    prog = qf.Program()
    prog += qf.Call('X', params=[], qubits=[0])
    ket = prog.run()

    assert ket.qubits == (0, )
    # assert prog.cbits == []

    qf.print_state(ket)
Exemple #5
0
def test_nop():
    prog = qf.Program()
    prog += qf.Nop()
    prog.run()

    for inst in prog:
        assert inst is not None

    assert qf.Nop().qubits == ()
    assert qf.Nop().qubit_nb == 0
Exemple #6
0
def test_sub():
    ro = qf.Register()
    prog = qf.Program()
    prog += qf.Move(ro[0], 1)
    prog += qf.Move(ro[1], 2)
    prog += qf.Sub(ro[0], ro[1])
    prog += qf.Sub(ro[0], 4)
    prog += qf.Neg(ro[0])
    ket = prog.run()
    assert ket.memory[ro[0]] == 5
Exemple #7
0
def test_halt():
    ro = qf.Register()
    prog = qf.Program()
    prog += qf.FALSE(ro[0])
    prog += qf.Halt()
    prog += qf.Not(ro[0])

    ket = prog.run()
    assert ket.memory[PC] == -1
    assert ket.memory[ro[0]] == 0
Exemple #8
0
def test_measure():
    prog = qf.Program()
    prog += qf.Measure(0, ('c', 0))
    prog += qf.Call('X', params=[], qubits=[0])
    prog += qf.Measure(0, ('c', 1))
    ket = prog.run()

    assert ket.qubits == (0,)
    # assert ket.cbits == [('c', 0), ('c', 1)]  # FIXME
    assert ket.memory[('c', 0)] == 0
    assert ket.memory[('c', 1)] == 1
Exemple #9
0
def test_reset_one():
    prog = qf.Program()
    prog += qf.Call('X', params=[], qubits=[0])
    prog += qf.Call('X', params=[], qubits=[1])
    prog += qf.Reset(0)
    prog += qf.Measure(0, ('b', 0))
    prog += qf.Measure(1, ('b', 1))
    ket = prog.run()

    assert ket.memory[('b', 0)] == 0
    assert ket.memory[('b', 1)] == 1
Exemple #10
0
def test_reset():
    ro = qf.Register()
    prog = qf.Program()
    prog += qf.Move(ro[0], 1)
    prog += qf.Call('X', params=[], qubits=[0])
    prog += qf.Reset()
    prog += qf.Measure(0, ro[1])
    ket = prog.run()

    assert ket.qubits == (0, )
    assert ket.memory[ro[0]] == 1
    assert ket.memory[ro[1]] == 0
Exemple #11
0
def test_measure_until():

    prog = qf.Program()
    prog += qf.TRUE(('c', 2))
    prog += qf.Label('redo')
    prog += qf.Call('X', [], [0])
    prog += qf.Call('H', [], [0])
    prog += qf.Measure(0, ('c', 2))
    prog += qf.JumpUnless('redo', ('c', 2))

    ket = prog.run()
    assert ket.memory[('c', 2)] == 1
Exemple #12
0
def test_wait():
    ro = qf.Register()
    prog = qf.Program()
    prog += qf.FALSE(ro[0])
    prog += qf.Wait()
    prog += qf.Not(ro[0])
    prog += qf.Wait()
    prog += qf.Not(ro[0])
    prog += qf.Wait()
    prog += qf.Not(ro[0])

    ket = prog.run()
    assert ket.memory[ro[0]] == 1
Exemple #13
0
def test_defcircuit():
    prog = qf.Program()

    circ = qf.DefCircuit('CIRCX', {})
    circ += qf.Call('X', params=[], qubits=[0])

    prog += circ
    prog += qf.Call('CIRCX', params=[], qubits=[0])

    assert str(prog) == CIRC0

    # prog.compile()
    assert prog.qubits == [0]
Exemple #14
0
def test_occupation_basis():
    prog = qf.Program()
    prog += qf.Call('X', [], [0])
    prog += qf.Call('X', [], [1])
    prog += qf.Call('I', [], [2])
    prog += qf.Call('I', [], [3])

    ket = prog.run()

    assert ket.qubits == (0, 1, 2, 3)
    probs = qf.asarray(ket.probabilities())
    assert probs[1, 1, 0, 0] == 1.0
    assert probs[1, 1, 0, 1] == 0.0
Exemple #15
0
def test_comparisions():
    ro = qf.Register()
    prog = qf.Program()
    prog += qf.Move(ro[0], 1)
    prog += qf.Move(ro[1], 2)
    prog += qf.EQ(('eq', 0), ro[0], ro[1])
    prog += qf.GT(('gt', 0), ro[0], ro[1])
    prog += qf.GE(('ge', 0), ro[0], ro[1])
    prog += qf.LT(('lt', 0), ro[0], ro[1])
    prog += qf.LE(('le', 0), ro[0], ro[1])
    ket = prog.run()
    assert ket.memory[('eq', 0)] == 0
    assert ket.memory[('gt', 0)] == 0
    assert ket.memory[('ge', 0)] == 0
    assert ket.memory[('lt', 0)] == 1
    assert ket.memory[('le', 0)] == 1
Exemple #16
0
def test_qaoa_circuit():
    wf_true = [0.00167784 + 1.00210180e-05*1j, 0.50000000 - 4.99997185e-01*1j,
               0.50000000 - 4.99997185e-01*1j, 0.00167784 + 1.00210180e-05*1j]
    prog = qf.Program()
    prog += qf.Call('RY', [np.pi/2], [0])
    prog += qf.Call('RX', [np.pi], [0])
    prog += qf.Call('RY', [np.pi/2], [1])
    prog += qf.Call('RX', [np.pi], [1])
    prog += qf.Call('CNOT', [], [0, 1])
    prog += qf.Call('RX', [-np.pi/2], [1])
    prog += qf.Call('RY', [4.71572463191], [1])
    prog += qf.Call('RX', [np.pi/2], [1])
    prog += qf.Call('CNOT', [], [0, 1])
    prog += qf.Call('RX', [-2*2.74973750579], [0])
    prog += qf.Call('RX', [-2*2.74973750579], [1])

    test_state = prog.run()
    true_state = qf.State(wf_true)
    assert qf.states_close(test_state, true_state)
Exemple #17
0
def test_jump():
    ro = qf.Register()
    prog = qf.Program()
    prog += qf.FALSE(ro[0])
    prog += qf.Jump('There')
    prog += qf.Not(ro[0])
    prog += qf.Label('There')
    prog += qf.Not(ro[0])
    ket = prog.run()
    assert ket.memory[ro[0]] == 1

    prog += qf.JumpWhen('There', ro[0])
    ket = prog.run()
    assert ket.memory[ro[0]] == 0

    prog += qf.Not(ro[0])
    prog += qf.JumpUnless('There', ro[0])
    ket = prog.run()
    assert ket.memory[ro[0]] == 1
Exemple #18
0
def test_include():
    prog = qf.Program()
    prog += qf.FALSE(('a', 0))
    instr = qf.Include('somefile.quil', qf.Program())
    assert instr.quil() == 'INCLUDE "somefile.quil"'
Exemple #19
0
def test_nop_evolve():
    prog = qf.Program()
    prog += qf.Nop()
    prog.evolve()
Exemple #20
0
def test_exceptions():
    prog = qf.Program()
    prog += qf.Call('NOT_A_GATE', [], [0])
    with pytest.raises(RuntimeError):
        prog.run()
Exemple #21
0
def test_defcircuit_param():
    prog = qf.Program()
    circ = qf.DefCircuit('CIRCX', {'this': None})
    circ += qf.Nop()
    prog += circ
    assert str(prog) == CIRC1
Exemple #22
0
def _test(quil_string, *instructions):
    prog0 = qf.forest.quil_to_program(quil_string)
    prog1 = qf.Program(instructions)

    assert prog0.quil() == prog1.quil()
Exemple #23
0
def _test(quil_string, *instructions):
    prog0 = qf.parse_quil(quil_string)
    prog1 = qf.Program(instructions)

    assert prog0.quil() == prog1.quil()
Exemple #24
0
def test_empty_program():
    prog = qf.Program()
    ket = prog.run()
    assert ket.qubits == ()
    assert ket.qubit_nb == 0
Exemple #25
0
def test_call():
    prog = qf.Program()
    prog += qf.Call('BELL', params=[], qubits=[])

    assert str(prog) == 'BELL\n'