示例#1
0
def test_controlled_op_to_gates_omits_negligible_global_phase():
    qc = cirq.QubitId()
    qt = cirq.QubitId()
    operations = decompositions.controlled_op_to_native_gates(
        control=qc, target=qt, operation=cirq.H.matrix(), tolerance=0.0001)

    assert operations == [cirq.Y(qt)**-0.25, cirq.CZ(qc, qt), cirq.Y(qt)**0.25]
示例#2
0
def test_controlled_op_to_gates_omits_negligible_global_phase():
    qc = cirq.QubitId()
    qt = cirq.QubitId()
    operations = decompositions.controlled_op_to_native_gates(
        control=qc, target=qt, operation=cirq.H.matrix(), tolerance=0.0001)

    assert operations == [cirq.Y(qt)**-0.25, cirq.CZ(qc, qt), cirq.Y(qt)**0.25]
示例#3
0
def test_controlled_op_to_gates_equivalent_on_known_and_random(mat):
    qc = cirq.QubitId()
    qt = cirq.QubitId()
    operations = decompositions.controlled_op_to_native_gates(
        control=qc, target=qt, operation=mat)
    actual_effect = _operations_to_matrix(operations, (qc, qt))
    intended_effect = linalg.kron_with_controls(linalg.CONTROL_TAG, mat)
    assert linalg.allclose_up_to_global_phase(actual_effect, intended_effect)
示例#4
0
def test_controlled_op_to_gates_equivalent_on_known_and_random(mat):
    qc = cirq.QubitId()
    qt = cirq.QubitId()
    operations = decompositions.controlled_op_to_native_gates(
        control=qc, target=qt, operation=mat)
    actual_effect = _operations_to_matrix(operations, (qc, qt))
    intended_effect = cirq.kron_with_controls(cirq.CONTROL_TAG, mat)
    assert cirq.allclose_up_to_global_phase(actual_effect, intended_effect)
示例#5
0
def test_controlled_op_to_gates_omits_negligible_global_phase():
    qc = cirq.NamedQubit('c')
    qt = cirq.NamedQubit('qt')
    operations = decompositions.controlled_op_to_native_gates(
        control=qc,
        target=qt,
        operation=cirq.unitary(cirq.H),
        tolerance=0.0001)

    assert operations == [cirq.Y(qt)**-0.25, cirq.CZ(qc, qt), cirq.Y(qt)**0.25]
示例#6
0
def test_controlled_op_to_gates_concrete_case():
    c = cirq.NamedQubit('c')
    t = cirq.NamedQubit('t')
    operations = decompositions.controlled_op_to_native_gates(
        control=c,
        target=t,
        operation=np.array([[1, 1j], [1j, 1]]) * np.sqrt(0.5),
        tolerance=0.0001)

    assert operations == [cirq.Y(t)**-0.5, cirq.CZ(c, t)**1.5,
                          cirq.Z(c)**0.25, cirq.Y(t)**0.5]
示例#7
0
def test_controlled_op_to_gates_concrete_case():
    c = cirq.NamedQubit('c')
    t = cirq.NamedQubit('t')
    operations = decompositions.controlled_op_to_native_gates(
        control=c,
        target=t,
        operation=np.array([[1, 1j], [1j, 1]]) * np.sqrt(0.5),
        tolerance=0.0001)

    assert operations == [cirq.Y(t)**-0.5, cirq.CZ(c, t)**1.5,
                          cirq.Z(c)**0.25, cirq.Y(t)**0.5]
示例#8
0
def test_controlled_op_to_gates_concrete_case():
    qc = ops.QubitId()
    qt = ops.QubitId()
    operations = decompositions.controlled_op_to_native_gates(
        control=qc,
        target=qt,
        operation=np.array([[1, 1j], [1j, 1]]) * np.sqrt(0.5),
        tolerance=0.0001)

    assert operations == [
        ops.Y(qt)**-0.5,
        ops.CZ(qc, qt)**1.5,
        ops.Z(qc)**0.25,
        ops.Y(qt)**0.5
    ]