def test_measure_density_matrix_not_square():
    with pytest.raises(ValueError, match='not square'):
        cirq.measure_density_matrix(np.array([1, 0, 0]), [1])
    with pytest.raises(ValueError, match='not square'):
        cirq.measure_density_matrix(np.array([1, 0, 0, 0]).reshape((2, 1, 2)),
                                    [1],
                                    qid_shape=(2, 1))
Пример #2
0
def test_measure_density_matrix_seed():
    n = 5
    matrix = np.eye(2**n) / 2**n

    bits, out_matrix1 = cirq.measure_density_matrix(matrix, range(n), seed=1234)
    assert bits == [False, False, True, True, False]

    bits, out_matrix2 = cirq.measure_density_matrix(
        matrix, range(n), seed=np.random.RandomState(1234))
    assert bits == [False, False, True, True, False]

    np.testing.assert_allclose(out_matrix1, out_matrix2)
def test_measure_density_matrix_partial_indices_all_orders():
    for perm in itertools.permutations([0, 1, 2]):
        for x in range(8):
            matrix = cirq.to_valid_density_matrix(x, 3)
            bits, out_matrix = cirq.measure_density_matrix(matrix, perm)
            np.testing.assert_almost_equal(matrix, out_matrix)
            assert bits == [bool(1 & (x >> (2 - p))) for p in perm]
def test_measure_density_matrix_partial_indices():
    for index in range(3):
        for x in range(8):
            matrix = cirq.to_valid_density_matrix(x, 3)
            bits, out_matrix = cirq.measure_density_matrix(matrix, [index])
            np.testing.assert_almost_equal(out_matrix, matrix)
            assert bits == [bool(1 & (x >> (2 - index)))]
def test_measure_state_no_indices_out_is_not_matrix():
    matrix = cirq.to_valid_density_matrix(0, 3)
    out = np.zeros_like(matrix)
    bits, out_matrix = cirq.measure_density_matrix(matrix, [], out=out)
    assert [] == bits
    np.testing.assert_almost_equal(out_matrix, matrix)
    assert out is out_matrix
    assert out is not matrix
Пример #6
0
def test_measure_density_matrix_out_is_matrix():
    matrix = matrix_000_plus_010()
    bits, out_matrix = cirq.measure_density_matrix(matrix, [2, 1, 0], out=matrix)
    expected_state = np.zeros(8, dtype=np.complex64)
    expected_state[2 if bits[1] else 0] = 1.0
    expected_matrix = np.outer(np.conj(expected_state), expected_state)
    np.testing.assert_array_almost_equal(out_matrix, expected_matrix)
    assert out_matrix is matrix
Пример #7
0
def test_measure_density_matrix_computational_basis_reshaped():
    results = []
    for x in range(8):
        matrix = np.reshape(cirq.to_valid_density_matrix(x, 3), (2,) * 6)
        bits, out_matrix = cirq.measure_density_matrix(matrix, [2, 1, 0])
        results.append(bits)
        np.testing.assert_almost_equal(out_matrix, matrix)
    expected = [list(reversed(x)) for x in list(itertools.product([False, True], repeat=3))]
    assert results == expected
def test_measure_density_matrix_collapse():
    matrix = matrix_000_plus_010()
    for _ in range(10):
        bits, out_matrix = cirq.measure_density_matrix(matrix, [2, 1, 0])
        assert bits in [[False, False, False], [False, True, False]]
        expected = np.zeros(8, dtype=np.complex64)
        if bits[1]:
            expected[2] = 1j
        else:
            expected[0] = 1
        expected_matrix = np.outer(np.conj(expected), expected)
        np.testing.assert_almost_equal(out_matrix, expected_matrix)
        assert out_matrix is not matrix

    # Partial sample is correct.
    for _ in range(10):
        bits, out_matrix = cirq.measure_density_matrix(matrix, [2])
        np.testing.assert_almost_equal(out_matrix, matrix)
        assert bits == [False]

        bits, out_matrix = cirq.measure_density_matrix(matrix, [0])
        np.testing.assert_almost_equal(out_matrix, matrix)
        assert bits == [False]
def test_measure_state_empty_density_matrix():
    matrix = np.zeros(shape=())
    bits, out_matrix = cirq.measure_density_matrix(matrix, [])
    assert [] == bits
    np.testing.assert_almost_equal(matrix, out_matrix)
def test_measure_state_no_indices_out_is_matrix():
    matrix = cirq.to_valid_density_matrix(0, 3)
    bits, out_matrix = cirq.measure_density_matrix(matrix, [], out=matrix)
    assert [] == bits
    np.testing.assert_almost_equal(out_matrix, matrix)
    assert out_matrix is matrix
def test_measure_density_matrix_out_of_range():
    matrix = cirq.to_valid_density_matrix(0, 3)
    with pytest.raises(IndexError, match='-2'):
        cirq.measure_density_matrix(matrix, [-2])
    with pytest.raises(IndexError, match='3'):
        cirq.measure_density_matrix(matrix, [3])
def test_measure_density_matrix_tensor_different_left_right_shape():
    with pytest.raises(ValueError, match='not equal'):
        cirq.measure_density_matrix(np.array([1, 0, 0, 0]).reshape(
            (2, 2, 1, 1)), [1],
                                    qid_shape=(2, 1))
def test_measure_density_matrix_higher_powers_of_two():
    with pytest.raises(ValueError, match='powers of two'):
        cirq.measure_density_matrix(np.ones((2, 4, 2, 4)) / 8, [1])
def test_measure_density_matrix_not_power_of_two():
    with pytest.raises(ValueError, match='power of two'):
        cirq.measure_density_matrix(np.ones((3, 3)) / 3, [1])
    with pytest.raises(ValueError, match='power of two'):
        cirq.measure_density_matrix(np.ones((2, 3, 2, 3)) / 6, [1])
def test_measure_state_out_is_not_matrix():
    matrix = matrix_000_plus_010()
    out = np.zeros_like(matrix)
    _, out_matrix = cirq.measure_density_matrix(matrix, [2, 1, 0], out=out)
    assert out is not matrix
    assert out is out_matrix
Пример #16
0
def test_measure_density_matrix_not_square():
    with pytest.raises(ValueError, match='not square'):
        cirq.measure_density_matrix(np.array([1, 0, 0]), [1])