Пример #1
0
def test_choi_to_kraus_fixed_values(choi, expected_kraus):
    """Verifies that cirq.choi_to_kraus gives correct results on a few fixed inputs."""
    actual_kraus = cirq.choi_to_kraus(choi)
    assert len(actual_kraus) == len(expected_kraus)
    for i in (0, 1):
        for j in (0, 1):
            input_rho = np.zeros((2, 2))
            input_rho[i, j] = 1
            actual_rho = apply_kraus_operators(actual_kraus, input_rho)
            expected_rho = apply_kraus_operators(expected_kraus, input_rho)
            assert np.allclose(actual_rho, expected_rho)
Пример #2
0
def test_choi_to_kraus_action_on_operatorial_basis(choi):
    """Verifies that cirq.choi_to_kraus computes a valid Kraus representation."""
    kraus_operators = cirq.choi_to_kraus(choi)
    c = np.reshape(choi, (2, 2, 2, 2))
    for i in (0, 1):
        for j in (0, 1):
            input_rho = np.zeros((2, 2))
            input_rho[i, j] = 1
            actual_rho = apply_kraus_operators(kraus_operators, input_rho)
            expected_rho = c[:, i, :, j]
            assert np.allclose(actual_rho, expected_rho)
Пример #3
0
def test_choi_to_kraus_atol():
    """Verifies that insignificant Kraus operators are omitted."""
    choi = cirq.kraus_to_choi(cirq.kraus(cirq.phase_damp(1e-6)))
    assert len(cirq.choi_to_kraus(choi, atol=1e-2)) == 1
    assert len(cirq.choi_to_kraus(choi, atol=1e-4)) == 2
Пример #4
0
def test_choi_to_kraus_inverse_of_kraus_to_choi(choi):
    """Verifies that cirq.kraus_to_choi(cirq.choi_to_kraus(.)) is identity on Choi matrices."""
    kraus = cirq.choi_to_kraus(choi)
    recovered_choi = cirq.kraus_to_choi(kraus)
    assert np.allclose(recovered_choi, choi)
Пример #5
0
def test_choi_to_kraus_invalid_input(choi, error):
    with pytest.raises(ValueError, match=error):
        _ = cirq.choi_to_kraus(choi)