示例#1
0
def test_three_qbit_clean():
    c = circuit.Circuit()

    qubit_names = ["D1", "A1", "D2", "A2", "D3"]

    # clean ancillas have infinite life-time
    for qb in qubit_names:
        # set lifetime to only almost inf so that waiting gates are added but
        # ineffective
        c.add_qubit(qb, np.inf, 1e10)

    c.add_hadamard("A1", time=0)
    c.add_hadamard("A2", time=0)

    c.add_cphase("A1", "D1", time=200)
    c.add_cphase("A2", "D2", time=200)

    c.add_cphase("A1", "D2", time=100)
    c.add_cphase("A2", "D3", time=100)

    c.add_hadamard("A1", time=300)
    c.add_hadamard("A2", time=300)

    with pytest.warns(UserWarning):
        m1 = circuit.Measurement("A1", time=350, sampler=None)
    c.add_gate(m1)
    with pytest.warns(UserWarning):
        m2 = circuit.Measurement("A2", time=350, sampler=None)
    c.add_gate(m2)

    c.add_waiting_gates(tmin=0, tmax=1500)

    c.order()

    assert len(c.gates) == 27

    sdm = sparsedm.SparseDM(qubit_names)

    for bit in sdm.classical:
        sdm.classical[bit] = 1

    sdm.classical["D3"] = 0

    assert sdm.classical == {'A1': 1, 'A2': 1, 'D3': 0, 'D1': 1, 'D2': 1}

    for i in range(100):
        c.apply_to(sdm)

    assert len(m1.measurements) == 100
    assert len(m2.measurements) == 100

    assert sdm.classical == {}

    # in a clean run, we expect just one possible path
    assert np.allclose(sdm.trace(), 1)

    assert m1.measurements == [1] * 100
    assert m2.measurements == [0, 1] * 50
示例#2
0
def test_three_qbit_clean_qasm():
    config_qasm = os.path.join(os.path.dirname(__file__),
                               'config_qasm_5q.json')
    config_sim = os.path.join(os.path.dirname(__file__),
                              'config_simulator.json')
    parser = qasm.ConfigurableParser(config_qasm, config_sim)
    with pytest.warns(UserWarning):
        circuits = parser.parse(threequbit_qasm.split('\n'))
    assert len(circuits) == 1
    c = circuits[0]

    qubit_names = ["q0", "q1", "q2", "q3", "q4"]

    with pytest.warns(UserWarning):
        m1 = circuit.Measurement("q1", time=400, sampler=None)
    c.add_gate(m1)
    with pytest.warns(UserWarning):
        m2 = circuit.Measurement("q3", time=400, sampler=None)
    c.add_gate(m2)

    c.add_waiting_gates(tmin=0, tmax=1500)

    c.order()

    assert len(c.gates) == 29

    sdm = sparsedm.SparseDM(qubit_names)

    for bit in sdm.classical:
        sdm.classical[bit] = 1

    sdm.classical["q4"] = 0

    assert sdm.classical == {'q1': 1, 'q3': 1, 'q4': 0, 'q0': 1, 'q2': 1}

    for i in range(100):
        c.apply_to(sdm)

    assert len(m1.measurements) == 100
    assert len(m2.measurements) == 100

    assert sdm.classical == {}

    # in a clean run, we expect just one possible path
    assert np.allclose(sdm.trace(), 1)

    assert m1.measurements == [1] * 100
    assert m2.measurements == [0, 1] * 50
示例#3
0
    def test_output_bit(self):
        with pytest.warns(UserWarning):
            m = circuit.Measurement("A", 0, sampler=None, output_bit="O")

        sdm = MagicMock()
        sdm.peak_measurement = MagicMock(return_value=(0, 1))
        sdm.project_measurement = MagicMock()
        sdm.set_bit = MagicMock()

        m.apply_to(sdm)

        assert m.measurements == [1]

        sdm.peak_measurement.assert_called_once_with("A")
        sdm.project_measurement.assert_called_once_with("A", 1)
        sdm.set_bit.assert_called_once_with("O", 1)

        sdm.peak_measurement = MagicMock(return_value=(1, 0))
        sdm.project_measurement = MagicMock()
        sdm.set_bit = MagicMock()

        m.apply_to(sdm)

        assert m.measurements == [1, 0]

        sdm.peak_measurement.assert_called_once_with("A")
        sdm.project_measurement.assert_called_once_with("A", 0)
        sdm.set_bit.assert_called_once_with("O", 0)
示例#4
0
    def test_apply_random(self):
        sampler = circuit.uniform_sampler(42)
        m = circuit.Measurement("A", 0, sampler=sampler)

        with patch('numpy.random.RandomState') as rsclass:
            rs = MagicMock()
            rsclass.return_value = rs
            rs.random_sample = MagicMock()
            p = rs.random_sample
            p.return_value = 0.3
            sdm = MagicMock()
            sdm.peak_measurement = MagicMock(return_value=(0.06, 0.04))
            sdm.project_measurement = MagicMock()

            m.apply_to(sdm)

            sdm.project_measurement.assert_called_once_with("A", 0)

            sdm.peak_measurement = MagicMock(return_value=(0.06, 0.04))
            sdm.project_measurement = MagicMock()
            p.return_value = 0.7

            m.apply_to(sdm)

            sdm.project_measurement.assert_called_once_with("A", 1)
示例#5
0
    def test_order_regression_classical(self):
        c = circuit.Circuit("test")

        c.add_qubit("D", 1000, 1000)
        c.add_qubit("A", 1000, 1000)
        c.add_qubit("MA")
        c.add_qubit("SA")

        c.add_gate(circuit.RotateY("A", time=0, angle=np.pi / 2))
        c.add_gate(circuit.CPhase("A", "D", time=10))

        rotate_normal = circuit.RotateY("A", time=20, angle=-np.pi / 2)
        rotate_backwards = circuit.RotateY("A", time=20, angle=np.pi / 2)

        conditional_rotate1 = circuit.ConditionalGate(
            control_bit="SA", time=20, zero_gates=[rotate_normal],
            one_gates=[])
        c.add_gate(conditional_rotate1)

        conditional_rotate2 = circuit.ConditionalGate(
            control_bit="SA", time=30, zero_gates=[],
            one_gates=[rotate_backwards])
        c.add_gate(conditional_rotate2)

        sampler = circuit.BiasedSampler(readout_error=0.0015, alpha=1, seed=43)
        measurement = circuit.Measurement(
            "A", time=40, sampler=sampler, output_bit="MA")
        c.add_gate(measurement)
        c.add_gate(circuit.ClassicalCNOT("MA", "SA", time=35))

        assert len(c.gates) == 6

        c.order()

        assert len(c.gates) == 6
示例#6
0
    def test_apply_to(self):
        sdm = MagicMock()
        sdm.hadamard = MagicMock()
        sdm.amp_ph_damping = MagicMock()
        sdm.apply_ptm = MagicMock()
        sdm.peak_measurement = MagicMock(return_value=(1, 0))
        sdm.project_measurement = MagicMock()

        c = circuit.Circuit()

        c.add_qubit(circuit.Qubit("A", 10, 20))
        c.add_gate(circuit.Hadamard("A", 0))
        c.add_gate(circuit.Hadamard("A", 10))

        with pytest.warns(UserWarning):
            c.add_gate(circuit.Measurement("A", 20, sampler=None))

        c.add_waiting_gates()

        c.order()

        c.apply_to(sdm)

        sdm.assert_has_calls([call.apply_ptm("A", ptm=ANY),
                              call.apply_ptm("A", ptm=ANY),
                              call.apply_ptm("A", ptm=ANY),
                              call.apply_ptm("A", ptm=ANY),
                              call.peak_measurement("A"),
                              call.project_measurement("A", 0)])
示例#7
0
    def test_one_sampler_two_measurements(self):
        # Biased sampler
        s = circuit.BiasedSampler(alpha=1, readout_error=0.7)
        m1 = circuit.Measurement("A", 0, sampler=s, output_bit="O")
        m2 = circuit.Measurement("A", 0, sampler=s, output_bit="O")

        # uniform sampler
        s = circuit.uniform_sampler(seed=42)
        m1 = circuit.Measurement("A", 0, sampler=s, output_bit="O")
        m2 = circuit.Measurement("A", 0, sampler=s, output_bit="O")

        # selection sampler
        s = circuit.selection_sampler(result=1)
        m1 = circuit.Measurement("A", 0, sampler=s, output_bit="O")
        m2 = circuit.Measurement("A", 0, sampler=s, output_bit="O")

        m1, m2
示例#8
0
    def test_apply_with_selection_sampler(self):
        m = circuit.Measurement("A", 0, sampler=circuit.selection_sampler(1))

        sdm = MagicMock()
        sdm.peak_measurement = MagicMock(return_value=(0, 1))
        sdm.project_measurement = MagicMock()

        m.apply_to(sdm)

        assert m.measurements == [1]

        sdm.peak_measurement.assert_called_once_with("A")
        sdm.project_measurement.assert_called_once_with("A", 1)

        sdm.peak_measurement = MagicMock(return_value=(1, 0))
        sdm.project_measurement = MagicMock()

        m.apply_to(sdm)

        assert m.measurements == [1, 1]

        sdm.peak_measurement.assert_called_once_with("A")
        sdm.project_measurement.assert_called_once_with("A", 1)
示例#9
0
 def test_init(self):
     with pytest.warns(UserWarning):
         m = circuit.Measurement("A", 0, sampler=None)
     assert m.is_measurement
     assert m.involves_qubit("A")
     assert m.time == 0
示例#10
0
 def test_init(self):
     m = circuit.Measurement("A", 0, sampler=None)
     assert m.is_measurement
     assert m.involves_qubit("A")
     assert m.time == 0