Exemplo n.º 1
0
    def test_jax(self):
        """Test that a jax array is automatically converted into
        a diagonal tensor"""
        t = jnp.array([0.1, 0.2, 0.3])
        res = fn.diag(t)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3]))

        res = fn.diag(t, k=1)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3], k=1))
Exemplo n.º 2
0
    def test_array(self):
        """Test that a NumPy array is automatically converted into
        a diagonal tensor"""
        t = np.array([0.1, 0.2, 0.3])
        res = fn.diag(t)
        assert isinstance(res, np.ndarray)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3]))

        res = fn.diag(t, k=1)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3], k=1))
Exemplo n.º 3
0
    def test_tensorflow(self):
        """Test that a tensorflow tensor is automatically converted into
        a diagonal tensor"""
        t = tf.Variable([0.1, 0.2, 0.3])
        res = fn.diag(t)
        assert isinstance(res, tf.Tensor)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3]))

        res = fn.diag(t, k=1)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3], k=1))
Exemplo n.º 4
0
    def test_torch(self):
        """Test that a torch tensor is automatically converted into
        a diagonal tensor"""
        t = torch.tensor([0.1, 0.2, 0.3])
        res = fn.diag(t)
        assert isinstance(res, torch.Tensor)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3]))

        res = fn.diag(t, k=1)
        assert fn.allclose(res, onp.diag([0.1, 0.2, 0.3], k=1))
Exemplo n.º 5
0
    def test_torch(self):
        """Test that a torch tensor is differentiable when using scatter addition"""
        x = torch.tensor([[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]], requires_grad=True)
        y = torch.tensor(0.56, requires_grad=True)

        res = fn.scatter_element_add(x, [1, 2], y ** 2)
        loss = res[1, 2]

        assert isinstance(res, torch.Tensor)
        assert fn.allclose(res.detach(), onp.array([[1.0, 1.0, 1.0], [1.0, 1.0, 1.3136]]))

        loss.backward()
        assert fn.allclose(x.grad, onp.array([[0, 0, 0], [0, 0, 1.0]]))
        assert fn.allclose(y.grad, 2 * y)
Exemplo n.º 6
0
    def test_tensorflow(self):
        """Test that a TF tensor is differentiable when using scatter addition"""
        x = tf.Variable([[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]])
        y = tf.Variable(0.56)

        with tf.GradientTape() as tape:
            res = fn.scatter_element_add(x, [1, 2], y ** 2)
            loss = res[1, 2]

        assert isinstance(res, tf.Tensor)
        assert fn.allclose(res, onp.array([[1.0, 1.0, 1.0], [1.0, 1.0, 1.3136]]))

        grad = tape.gradient(loss, [x, y])
        assert fn.allclose(grad[0], onp.array([[0, 0, 0], [0, 0, 1.0]]))
        assert fn.allclose(grad[1], 2 * y)
Exemplo n.º 7
0
    def test_array(self):
        """Test that a NumPy array is differentiable when using scatter addition"""
        x = np.array([[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]], requires_grad=True)
        y = np.array(0.56, requires_grad=True)

        def cost(weights):
            return fn.scatter_element_add(weights[0], [1, 2], weights[1] ** 2)

        res = cost([x, y])
        assert isinstance(res, np.ndarray)
        assert fn.allclose(res, onp.array([[1.0, 1.0, 1.0], [1.0, 1.0, 1.3136]]))

        grad = qml.grad(lambda weights: cost(weights)[1, 2])([x, y])
        assert fn.allclose(grad[0], onp.array([[0, 0, 0], [0, 0, 1.0]]))
        assert fn.allclose(grad[1], 2 * y)
Exemplo n.º 8
0
    def test_jax(self):
        """Test that a JAX array is differentiable when using scatter addition"""
        x = jnp.array([[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]])
        y = jnp.array(0.56)

        def cost(weights):
            return fn.scatter_element_add(weights[0], [1, 2], weights[1] ** 2)

        res = cost([x, y])
        assert isinstance(res, jax.interpreters.xla.DeviceArray)
        assert fn.allclose(res, onp.array([[1.0, 1.0, 1.0], [1.0, 1.0, 1.3136]]))

        grad = jax.grad(lambda weights: cost(weights)[1, 2])([x, y])
        assert fn.allclose(grad[0], onp.array([[0, 0, 0], [0, 0, 1.0]]))
        assert fn.allclose(grad[1], 2 * y)
Exemplo n.º 9
0
 def test_sequence(self, a, interface):
     """Test that a sequence is automatically converted into
     a diagonal tensor"""
     t = [0.1, 0.2, a]
     res = fn.diag(t)
     assert fn.get_interface(res) == interface
     assert fn.allclose(res, onp.diag([0.1, 0.2, 0.5]))
Exemplo n.º 10
0
def test_block_diag(tensors):
    """Tests for the block diagonal function"""
    res = fn.block_diag(tensors)
    expected = np.array(
        [[1, 2, 0, 0, 0], [3, 4, 0, 0, 0], [0, 0, 1, 2, 0], [0, 0, -1, -6, 0], [0, 0, 0, 0, 5]]
    )
    assert fn.allclose(res, expected)
Exemplo n.º 11
0
 def test_multidimensional_indexing_along_axis(self, t):
     """Test that indexing with a sequence properly extracts
     the elements from the specified tensor axis"""
     indices = np.array([[0, 0], [1, 0]])
     res = fn.take(t, indices, axis=1)
     expected = np.array([[[[1, 2], [1, 2]], [[3, 4], [1, 2]]],
                          [[[5, 6], [5, 6]], [[0, -1], [5, 6]]]])
     assert fn.allclose(res, expected)
Exemplo n.º 12
0
 def test_array_indexing_along_axis(self, t):
     """Test that indexing with a sequence properly extracts
     the elements from the specified tensor axis"""
     indices = [0, 1, -2]
     res = fn.take(t, indices, axis=2)
     expected = np.array([[[1, 2, 1], [3, 4, 3], [-1, 1, -1]],
                          [[5, 6, 5], [0, -1, 0], [2, 1, 2]]])
     assert fn.allclose(res, expected)
Exemplo n.º 13
0
def test_gather(tensor):
    """Tests for the gather function"""
    indices = [1, 0]
    res = fn.gather(tensor, indices)
    expected = np.array([
        [-1, -6, -3],
        [ 1,  2,  3]
    ])
    assert fn.allclose(res, expected)
Exemplo n.º 14
0
    def test_sum_axis_keepdims(self, t1):
        """Test that passing the axis argument allows for summing along
        a specific axis, while keepdims avoids the summed dimensions from being removed"""
        res = fn.sum_(t1, axis=(0, 2), keepdims=True)

        # if tensorflow or pytorch, extract view of underlying data
        if hasattr(res, "numpy"):
            res = res.numpy()

        assert fn.allclose(res, np.array([[[14], [6], [3]]]))
        assert res.shape == (1, 3, 1)
Exemplo n.º 15
0
    def test_sum_axis(self, t1):
        """Test that passing the axis argument allows for summing along
        a specific axis"""
        res = fn.sum_(t1, axis=(0, 2))

        # if tensorflow or pytorch, extract view of underlying data
        if hasattr(res, "numpy"):
            res = res.numpy()

        assert fn.allclose(res, np.array([14, 6, 3]))
        assert res.shape == (3, )
Exemplo n.º 16
0
    def test_concatenate_flattened_arrays(self, t1):
        """Concatenating arrays with axis=None will result in all arrays being pre-flattened"""
        t2 = onp.array([5])
        res = fn.concatenate([t1, t2], axis=None)

        # if tensorflow or pytorch, extract view of underlying data
        if hasattr(res, "numpy"):
            res = res.numpy()

        assert fn.allclose(res, np.array([1, 2, 5]))
        assert list(res.shape) == [3]
Exemplo n.º 17
0
    def test_stack_axis(self, t1):
        """Test that passing the axis argument allows for stacking along
        a different axis"""
        t2 = onp.array([3, 4])
        res = fn.stack([t1, t2], axis=1)

        # if tensorflow or pytorch, extract view of underlying data
        if hasattr(res, "numpy"):
            res = res.numpy()

        assert fn.allclose(res, np.array([[1, 3], [2, 4]]))
        assert list(res.shape) == [2, 2]
Exemplo n.º 18
0
def test_allclose(t1, t2):
    """Test that the allclose function works for a variety of inputs."""
    res = fn.allclose(t1, t2)

    if isinstance(t1, tf.Variable):
        t1 = tf.convert_to_tensor(t1)

    if isinstance(t2, tf.Variable):
        t2 = tf.convert_to_tensor(t2)

    expected = all(float(x) == float(y) for x, y in zip(t1, t2))
    assert res == expected
Exemplo n.º 19
0
    def test_ones_like_explicit_dtype(self, t):
        """Test that the ones like function creates the correct
        shape and type tensor."""
        res = fn.ones_like(t, dtype=np.float16)

        if isinstance(t, (list, tuple)):
            t = onp.asarray(t)

        assert res.shape == t.shape
        assert fn.get_interface(res) == fn.get_interface(t)
        assert fn.allclose(res, np.ones(t.shape))

        # if tensorflow or pytorch, extract view of underlying data
        if hasattr(res, "numpy"):
            res = res.numpy()
            t = t.numpy()

        assert onp.asarray(res).dtype.type is np.float16
Exemplo n.º 20
0
def test_sqrt(t):
    """Test that the square root function works for a variety
    of input"""
    res = fn.sqrt(t)
    assert fn.allclose(res, [1, np.sqrt(2), np.sqrt(3)])
Exemplo n.º 21
0
def test_where(t):
    """Test that the where function works as expected"""
    res = fn.where(t < 0, 100 * fn.ones_like(t), t)
    expected = np.array([[[1, 2], [3, 4], [100, 1]], [[5, 6], [0, 100], [2,
                                                                         1]]])
    assert fn.allclose(res, expected)
Exemplo n.º 22
0
 def test_torch(self):
     """Test that sum, called without the axis arguments, returns a scalar"""
     t = torch.tensor([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]])
     res = fn.sum_(t)
     assert isinstance(res, torch.Tensor)
     assert fn.allclose(res, 2.1)
Exemplo n.º 23
0
 def test_multidimensional_indexing(self, t):
     """Test that indexing with a multi-dimensional sequence properly extracts
     the elements from the flattened tensor"""
     indices = [[0, 1], [3, 2]]
     res = fn.take(t, indices)
     assert fn.allclose(res, [[1, 2], [4, 3]])
Exemplo n.º 24
0
 def test_array_indexing(self, t):
     """Test that indexing with a sequence properly extracts
     the elements from the flattened tensor"""
     indices = [0, 2, 3, 6, -2]
     res = fn.take(t, indices)
     assert fn.allclose(res, [1, 3, 4, 5, 2])
Exemplo n.º 25
0
 def test_flattened_indexing(self, t):
     """Test that indexing without the axis argument
     will flatten the tensor first"""
     indices = 5
     res = fn.take(t, indices)
     assert fn.allclose(res, 1)
Exemplo n.º 26
0
 def test_jax(self):
     """Test that sum, called without the axis arguments, returns a scalar"""
     t = jnp.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]])
     res = fn.sum_(t)
     assert fn.allclose(res, 2.1)