Exemplo n.º 1
0
def test_backend_compile(tested_backend, target_backend):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    func = lambda x: x + 1
    x = rand(5)
    cfunc1 = tested_backend.compile(func)
    cfunc2 = target_backend.compile(func)
    tested_backend.assert_allclose(cfunc1(x), cfunc2(x))
Exemplo n.º 2
0
def test_backend_concatenate(tested_backend, target_backend):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    tensors = [rand((2, 3)), rand((2, 4))]
    target_result = target_backend.concatenate(tensors, axis=1)
    tensors = [tested_backend.cast(x) for x in tensors]
    tested_result = tested_backend.concatenate(tensors, axis=1)
    tested_backend.assert_allclose(tested_result, target_result)
Exemplo n.º 3
0
def test_backend_stack(tested_backend, target_backend):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    tensors = [rand(4), rand(4)]
    target_result = target_backend.stack(tensors)
    tensors = [tested_backend.cast(x) for x in tensors]
    tested_result = tested_backend.stack(tensors)
    tested_backend.assert_allclose(tested_result, target_result)
Exemplo n.º 4
0
def test_backend_eigh(tested_backend, target_backend):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    m = rand((5, 5))
    eigvals1, eigvecs1 = tested_backend.eigh(m)
    eigvals2, eigvecs2 = target_backend.eigh(m)
    np.testing.assert_allclose(eigvals1, eigvals2)
    np.testing.assert_allclose(np.abs(eigvecs1), np.abs(eigvecs2))
Exemplo n.º 5
0
def test_construct_backend(backend):
    bk = K.construct_backend(backend)
    try:
        assert bk.name == backend
    except AssertionError:
        assert bk.name.split("_")[-1] == backend
    with pytest.raises(ValueError):
        bk = K.construct_backend("test")
Exemplo n.º 6
0
def test_backend_methods_dict(tested_backend, target_backend, method, kwargs):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    tested_func = getattr(tested_backend, method)
    target_func = getattr(target_backend, method)
    target_result = target_func(**kwargs)
    kwargs = {
        k: tested_backend.cast(v) if isinstance(v, np.ndarray) else v
        for k, v in kwargs.items()
    }
    tested_result = tested_func(**kwargs)
    tested_backend.assert_allclose(tested_result, target_result)
Exemplo n.º 7
0
def test_backend_methods(tested_backend, target_backend, method, kwargs):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    tested_func = getattr(tested_backend, method)
    target_func = getattr(target_backend, method)
    if isinstance(kwargs, dict):
        np.testing.assert_allclose(tested_func(**kwargs), target_func(**kwargs))
    else:
        if method in {"kron", "inv"} and "numpy" not in tested_backend.name:
            with pytest.raises(NotImplementedError):
                tested_func(*kwargs)
        else:
            np.testing.assert_allclose(tested_func(*kwargs), target_func(*kwargs))
Exemplo n.º 8
0
def test_backend_unique(tested_backend, target_backend, return_counts):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    x = np.random.randint(10, size=(10,))
    target_result = target_backend.unique(x, return_counts=return_counts)
    test_result = tested_backend.unique(x, return_counts=return_counts)
    if return_counts:
        idx = np.argsort(test_result[0])
        np.testing.assert_allclose(np.array(test_result[0])[idx], target_result[0])
        np.testing.assert_allclose(np.array(test_result[1])[idx], target_result[1])
    else:
        idx = np.argsort(test_result)
        np.testing.assert_allclose(np.array(test_result)[idx], target_result)
Exemplo n.º 9
0
def test_backend_transpose_state(tested_backend, target_backend):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    nqubits = 5
    order = [0, 2, 3, 4, 1]
    shape = (2**nqubits, )
    state = np.random.random(shape) + 1j * np.random.random(shape)
    state = state / np.sqrt(np.sum(np.abs(state)**2))
    new_state = np.zeros_like(state)
    state = np.reshape(state, (4, 8))
    pieces = [state[i] for i in range(4)]
    target_result = target_backend.transpose_state(pieces, new_state, 5, order)
    tested_result = tested_backend.transpose_state(pieces, new_state, 5, order)
    tested_backend.assert_allclose(tested_result, target_result)
Exemplo n.º 10
0
def test_backend_methods_list(tested_backend, target_backend, method, args):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    tested_func = getattr(tested_backend, method)
    target_func = getattr(target_backend, method)
    target_result = target_func(*args)
    args = [
        tested_backend.cast(v, dtype=str(v.dtype)) if isinstance(
            v, np.ndarray) else v for v in args
    ]
    try:
        tested_result = tested_func(*args)
    except NotImplementedError:
        with pytest.raises(NotImplementedError):
            tested_func(*args)
        return
    tested_backend.assert_allclose(tested_result, target_result)
Exemplo n.º 11
0
def test_backend_eigh(tested_backend, target_backend, sparse_type):
    if tested_backend == "tensorflow" and sparse_type is not None:
        pytest.skip("Temporary skip.")
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    if sparse_type is None:
        m = rand((5, 5))
    else:
        from scipy import sparse
        m = sparse.rand(16, 16, format=sparse_type, density=0.1)
    eigvals1, eigvecs1 = tested_backend.eigh(tested_backend.cast(m),
                                             k=m.shape[0])
    eigvals2, eigvecs2 = target_backend.eigh(target_backend.cast(m),
                                             k=m.shape[0])
    tested_backend.assert_allclose(eigvals1, eigvals2, atol=1e-10)
    m1 = eigvecs1 @ np.diag(eigvals1) @ tested_backend.transpose(eigvecs1)
    m2 = eigvecs2 @ np.diag(eigvals2) @ target_backend.transpose(eigvecs2)
    tested_backend.assert_allclose(m1, m2, atol=1e-10)
Exemplo n.º 12
0
def test_backend_transpose_state(tested_backend, target_backend):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    if ((tested_backend.name == "qibotf" or target_backend.name == "qibotf")
            and
        ("GPU" in tested_backend.default_device
         or "GPU" in target_backend.default_device)):  # pragma: no cover
        pytest.skip("qibotf does not implement `transpose_state` for GPU.")
    nqubits = 5
    order = [0, 2, 3, 4, 1]
    shape = (2**nqubits, )
    state = np.random.random(shape) + 1j * np.random.random(shape)
    state = state / np.sqrt(np.sum(np.abs(state)**2))
    new_state = np.zeros_like(state)
    state = np.reshape(state, (4, 8))
    pieces = [state[i] for i in range(4)]
    target_result = target_backend.transpose_state(pieces, new_state, 5, order)
    tested_result = tested_backend.transpose_state(pieces, new_state, 5, order)
    tested_backend.assert_allclose(tested_result, target_result)
Exemplo n.º 13
0
def test_backend_gather(tested_backend, target_backend):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    x = rand(5)
    target_result = target_backend.gather(x, indices=[0, 1, 3])
    test_result = tested_backend.gather(x, indices=[0, 1, 3])
    tested_backend.assert_allclose(test_result, target_result)
    x = rand((5, 5))
    target_result = target_backend.gather(x, indices=[0, 1, 3], axis=-1)
    test_result = tested_backend.gather(x, indices=[0, 1, 3], axis=-1)
    tested_backend.assert_allclose(test_result, target_result)
    x = rand(3)
    target_result = target_backend.gather(x, condition=[True, False, True])
    test_result = tested_backend.gather(x, condition=[True, False, True])
    tested_backend.assert_allclose(test_result, target_result)

    with pytest.raises(ValueError):
        result1 = target_backend.gather(x)
    with pytest.raises(ValueError):
        result2 = tested_backend.gather(x)
Exemplo n.º 14
0
def test_backend_sparse_eigh(tested_backend, target_backend, sparse_type):
    if tested_backend == "tensorflow":
        pytest.skip("Temporary skip.")
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    from scipy import sparse
    from qibo import hamiltonians
    ham = hamiltonians.TFIM(6, h=1.0)
    m = getattr(sparse, f"{sparse_type}_matrix")(K.to_numpy(ham.matrix))
    eigvals1, eigvecs1 = tested_backend.eigh(tested_backend.cast(m))
    eigvals2, eigvecs2 = target_backend.eigh(target_backend.cast(m))
    eigvals1 = sorted(K.to_numpy(eigvals1))
    eigvals2 = sorted(K.to_numpy(eigvals2))
    tested_backend.assert_allclose(eigvals1, eigvals2)

    eigvals1 = tested_backend.eigvalsh(tested_backend.cast(m))
    eigvals2 = target_backend.eigvalsh(target_backend.cast(m))
    eigvals1 = sorted(K.to_numpy(eigvals1))
    eigvals2 = sorted(K.to_numpy(eigvals2))
    tested_backend.assert_allclose(eigvals1, eigvals2)
Exemplo n.º 15
0
def test_backend_methods_list(tested_backend, target_backend, method, args):
    tested_backend = K.construct_backend(tested_backend)
    target_backend = K.construct_backend(target_backend)
    tested_func = getattr(tested_backend, method)
    target_func = getattr(target_backend, method)
    target_result = target_func(*args)
    if tested_backend.name == "qibojit" and tested_backend.op.get_backend(
    ) == "cupy":  # pragma: no cover
        # cupy is not tested by CI!
        args = [
            tested_backend.cast(v) if isinstance(v, np.ndarray) else v
            for v in args
        ]
    try:
        tested_result = tested_func(*args)
    except NotImplementedError:
        with pytest.raises(NotImplementedError):
            tested_func(*args)
        return
    tested_backend.assert_allclose(tested_result, target_result)
Exemplo n.º 16
0
def test_construct_backend(backend_name):
    bk = K.construct_backend(backend_name)
    assert bk.name == backend_name
    with pytest.raises(ValueError):
        bk = K.construct_backend("test")