Exemplo n.º 1
0
    def test_add(self):
        # 1) Both AD, same length
        x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[4,5]]).T)
        z = x + y
        assert np.array_equal(z.val, x.val + y.val)
        assert all([(jz - jx - jy).nnz == 0 for (jx, jy, jz) in zip(x.jac, y.jac, z.jac)])

        # 2) Both AD, len(v)==1
        x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[4]]).T)
        z = ADI(np.array([[1]]), [sps.csr_matrix(np.array([[2,2]])), sps.csr_matrix(np.array([[1]]))])
        w = x + z
        assert np.array_equal(w.val, x.val + z.val)
        assert np.array_equal(w.val, np.array([[2,3]]).T)
        assert np.array_equal(w.jac[0].toarray(), np.eye(2) + np.array([[2,2],[2,2]]))
        assert np.array_equal(w.jac[1].toarray(), np.array([[1], [1]]))

        # 3) Both AD, len(u)==1
        w = z + x
        assert np.array_equal(w.val, x.val + z.val)
        assert np.array_equal(w.val, np.array([[2,3]]).T)
        assert np.array_equal(w.jac[0].toarray(), np.eye(2) + np.array([[2,2],[2,2]]))
        assert np.array_equal(w.jac[1].toarray(), np.array([[1], [1]]))

        # 4) u AD, v scalar, len(v)==1
        x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[4]]).T)
        w = x + 5
        assert np.array_equal(w.val, np.array([[1+5,2+5]]).T)
        assert np.array_equal(w.jac[0].toarray(), x.jac[0].toarray())
        assert np.array_equal(w.jac[1].toarray(), x.jac[1].toarray())
        w2 = 5 + x
        assert np.array_equal(w2.val, np.array([[1+5,2+5]]).T)
        assert np.array_equal(w.jac[0].toarray(), x.jac[0].toarray())
        assert np.array_equal(w.jac[1].toarray(), x.jac[1].toarray())

        # 5) u AD, v vector, same length
        x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[4]]).T)
        w1 = x + np.array([[2,1]]).T
        assert np.array_equal(w1.val, np.array([[1+2,2+1]]).T)
        assert np.array_equal(w1.jac[0].toarray(), x.jac[0].toarray())
        assert np.array_equal(w1.jac[1].toarray(), x.jac[1].toarray())
        w2 = np.array([[2,1]]).T + x
        assert np.array_equal(w2.val, np.array([[1+2,2+1]]).T)
        assert np.array_equal(w2.jac[0].toarray(), x.jac[0].toarray())
        assert np.array_equal(w2.jac[1].toarray(), x.jac[1].toarray())

        # 6) Different length AD vectors
        with pytest.raises(ValueError):
            x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[1,2,3]]).T)
            x + y
Exemplo n.º 2
0
 def test_0x1_bug(self):
     # 0x1 column vector
     x, = initVariablesADI(np.array([[]]))
     y = x**2 # 0x1 column vector
     assert y.shape == (0,1)
     assert np.array_equal(np.zeros((0,1)), y.val)
     assert y.jac[0].shape == (1,0)
Exemplo n.º 3
0
 def test_dot_sparsemat_advec(self):
     x, y = initVariablesADI(np.array([[4,2]]).T, np.array([[2,3]]).T)
     C = sps.csc_matrix(np.array([[2,0],[1,1]]))
     Cx = npad.dot(C, x)
     assert np.array_equal(Cx.val, np.array([[8],[6]]))
     assert np.array_equal(Cx.jac[0].toarray(), np.array([[2,0],[1,1]]))
     assert np.array_equal(Cx.jac[1].toarray(), np.array([[0,0],[0,0]]))
Exemplo n.º 4
0
 def test_min(self):
     x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[5]]).T)
     xmin = x.min()
     assert xmin.val[0,0] == 1
     assert xmin.ndim == 2
     assert np.array_equal(xmin.jac[0].toarray(), np.array([[1,0]]))
     assert np.array_equal(xmin.jac[1].toarray(), np.array([[0]]))
Exemplo n.º 5
0
 def test_npcos(self):
     x, y = initVariablesADI(np.array([[0,np.pi/2]]).T, np.array([[5]]).T)
     cosx = np.cos(x)
     assert isinstance(cosx, ADI)
     assert np.allclose(cosx.val, np.array([[1, 0]]).T)
     assert np.allclose(cosx.jac[0].toarray(), np.array([[0,0],[0,-1]]))
     assert np.allclose(cosx.jac[1].toarray(), np.array([[0],[0]]))
Exemplo n.º 6
0
 def test_max(self):
     x, y = initVariablesADI(np.array([[0,1]]).T, np.array([[5]]).T)
     xmax = x.max()
     assert xmax.val[0,0] == 1
     assert xmax.ndim == 2
     assert np.array_equal(xmax.jac[0].toarray(), np.array([[0,1]]))
     assert np.array_equal(xmax.jac[1].toarray(), np.array([[0]]))
Exemplo n.º 7
0
 def test_pow_different_len(self):
     x, y = initVariablesADI(np.array([[1,2,3]]).T, np.array([[2,3,4,5]]).T)
     with pytest.raises(ValueError):
         x**y
     with pytest.raises(ValueError):
         x**y.val
     with pytest.raises(ValueError):
         x.val**y
Exemplo n.º 8
0
 def test_log(self):
     x, y = initVariablesADI(np.array([[4,2]]).T, np.array([[2,3]]).T)
     z = x.log()
     assert np.allclose(z.val, np.array([[1.386294361119891, 0.693147]]).T)
     assert np.allclose(z.jac[0].toarray(), np.array([[0.2500, 0], [0, 0.5000]]))
     assert np.allclose(z.jac[1].toarray(), np.array([[0,0], [0,0]]))
     w = np.log(x)
     assert np.allclose(w.val, np.array([[1.3863, 0.693147]]).T)
Exemplo n.º 9
0
 def test_pow_ad_ad_samelen(self):
     x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[4,5]]).T)
     z = x**y
     dz2dy2 = 2**5 * np.log(2)
     print(z.jac[1].toarray())
     assert np.array_equal(np.array([[1, 32]]).T, z.val)
     assert np.array_equal(np.array([[4,0],[0,80]]), z.jac[0].toarray())
     assert np.array_equal(np.array([[0,0],[0,dz2dy2]]), z.jac[1].toarray())
Exemplo n.º 10
0
 def test_exp(self):
     x, y = initVariablesADI(np.array([[4,2]]).T, np.array([[2,3]]).T)
     z = x.exp()
     assert np.allclose(z.val, np.array([[54.5982, 7.3891]]).T)
     assert np.allclose(z.jac[0].toarray(), np.array([[54.5982, 0], [0, 7.3891]]))
     assert np.allclose(z.jac[1].toarray(), np.array([[0, 0], [0, 0]]))
     w = np.exp(x)
     assert np.allclose(w.val, np.array([[54.5982, 7.3891]]).T)
Exemplo n.º 11
0
 def test_div(self):
     u, = initVariablesADI(np.array([[1]]))
     # uses "classic" division even if future division is enabled.
     import operator
     with pytest.raises(DeprecationWarning):
         operator.div(u, 5)
     with pytest.raises(DeprecationWarning):
         operator.div(5, u)
Exemplo n.º 12
0
 def test_sin(self):
     x, y = initVariablesADI(np.array([[0,np.pi/2]]).T, np.array([[5]]).T)
     sinx = x.sin()
     assert isinstance(sinx, ADI)
     assert abs(sinx.val[0,0]) < 0.0001
     assert abs(sinx.val[1,0]-1) < 0.0001
     assert abs(sinx.jac[0][0,0] - 1) < 0.0001
     assert abs(sinx.jac[0][1,1]) < 0.0001
Exemplo n.º 13
0
 def test_cos(self):
     x, y = initVariablesADI(np.array([[0,np.pi/2]]).T, np.array([[5]]).T)
     cosx = x.cos()
     assert isinstance(cosx, ADI)
     assert abs(cosx.val[0,0] - 1) < 0.0001
     assert abs(cosx.val[1,0]) < 0.0001
     assert abs(cosx.jac[0][0,0]) < 0.0001
     assert abs(cosx.jac[0][1,1] + 1) < 0.0001
Exemplo n.º 14
0
 def test_dot_ad_ad(self):
     x, y = initVariablesADI(np.array([[4]]).T, np.array([[2]]).T)
     z = x+y
     w = npad.dot(z, x)
     assert isinstance(w, ADI)
     assert np.array_equal(w.val, np.array([[24]]).T)
     assert np.array_equal(w.jac[0].toarray(), np.array([[10]]))
     assert np.array_equal(w.jac[1].toarray(), np.array([[4]]))
Exemplo n.º 15
0
 def test_dot_chain(self):
     x, y = initVariablesADI(np.array([[4,2]]).T, np.array([[2,3]]).T)
     z = x.dot(9)
     assert isinstance(z, ADI)
     assert np.array_equal(z.val, np.array([[36, 18]]).T)
     z = x.dot(3).dot(3)
     assert isinstance(z, ADI)
     assert np.array_equal(z.val, np.array([[36, 18]]).T)
Exemplo n.º 16
0
 def test_setitem(self):
     x, y = initVariablesADI(np.array([[0,1]]).T, np.array([[5]]).T)
     x[0] = x[1]
     assert x.val[0,0] == x.val[1,0]
     assert np.array_equal(x[0].jac[0].toarray(), x[1].jac[0].toarray())
     x[0] = 99
     assert x.val[0,0] == 99
     assert np.array_equal(x.jac[0].toarray(), np.array([[0,0],[0,1]]))
Exemplo n.º 17
0
    def test_getitem_only_x(self):
        x, = initVariablesADI(np.array([[4, 5]]).T)
        assert len(x.jac) == 1
        assert x.jac[0].shape == (2,2)
        assert np.array_equal(x.jac[0].toarray(), np.eye(2))

        x0 = x[(1,0),:]
        assert x0.val[0,0] == 5 and x0.val[1,0] == 4
Exemplo n.º 18
0
 def test_dot_mat_ad(self):
     x, y = initVariablesADI(np.array([[4,2]]).T, np.array([[2,3]]).T)
     z = x*y #[8; 6] with jac[0] = diag(2,3), jac[1] = diag(4,2)
     A = np.array([[1, 2], [3, 4]])
     w = npad.dot(A, z)
     assert isinstance(w, ADI)
     assert np.array_equal(w.val, np.array([[20, 48]]).T)
     assert np.array_equal(w.jac[0].toarray(), np.array([[2, 6], [6, 12]]))
     assert np.array_equal(w.jac[1].toarray(), np.array([[4, 4], [12, 8]]))
Exemplo n.º 19
0
 def test_tile(self):
     x, y = initVariablesADI(np.array([[5, -2]]).T, np.array([[3]]).T)
     yyy = npad.tile(y, (3,1))
     assert np.array_equal(yyy.val, np.array([[3,3,3]]).T)
     assert np.array_equal(yyy.jac[1].toarray(), np.array([[1,1,1]]).T)
     with pytest.raises(TypeError):
         npad.tile(y, 3)
     with pytest.raises(TypeError):
         npad.tile(y, (3,2))
Exemplo n.º 20
0
 def test_sum(self):
     x, y = initVariablesADI(np.array([[0,1]]).T, np.array([[5]]).T)
     z = x+y # [5;6]
     assert z.val[0,0] == 5 and z.val[1,0] == 6
     assert np.array_equal(z.jac[0].toarray(), np.array([[1,0],[0,1]]))
     assert np.array_equal(z.jac[1].toarray(), np.array([[1],[1]]))
     sumz = z.sum()
     assert sumz.val[0,0] == 11
     assert np.array_equal(sumz.jac[0].toarray(), np.array([[1,1]]))
     assert np.array_equal(sumz.jac[1].toarray(), np.array([[2]]))
Exemplo n.º 21
0
 def test_mul_ADI3_ADI1(self):
     x, y = initVariablesADI(np.array([[1,2]]).T, np.array([[4]]).T)
     s1 = y*x
     s2 = x*y
     assert np.array_equal(np.array([[4, 8]]).T, s1.val)
     assert np.array_equal(np.array([[4,0],[0,4]]), s1.jac[0].toarray())
     assert np.array_equal(np.array([[1],[2]]), s1.jac[1].toarray())
     assert np.array_equal(np.array([[4, 8]]).T, s2.val)
     assert np.array_equal(np.array([[4,0],[0,4]]), s2.jac[0].toarray())
     assert np.array_equal(np.array([[1],[2]]), s2.jac[1].toarray())
Exemplo n.º 22
0
 def test_rmul(self):
     x, y = initVariablesADI(np.array([[1,2,3]]).T, np.array([[4,5,6]]).T)
     z = 3*x
     assert np.array_equal(np.array([[3, 6, 9]]).T, z.val)
     assert np.array_equal(np.array([[3,0,0],[0,3,0], [0,0,3]]), z.jac[0].toarray())
     assert np.array_equal(np.array([[0,0,0],[0,0,0], [0,0,0]]), z.jac[1].toarray())
     w = 3*x*x*y + 5*x*y*y
     assert np.array_equal(np.array([[92, 310, 702]]).T, w.val)
     assert np.array_equal(np.array([[104,0,0],[0,185,0], [0,0,288]]), w.jac[0].toarray())
     assert np.array_equal(np.array([[43,0,0],[0,112,0], [0,0,207]]), w.jac[1].toarray())
Exemplo n.º 23
0
 def test_init(self):
     x, y = initVariablesADI(np.array([[1,2,3]]).T, np.array([[4,5]]).T)
     assert np.array_equal(x.val, np.array([[1,2,3]]).T)
     assert np.array_equal(y.val, np.array([[4,5]]).T)
     assert len(x.jac) == 2
     assert len(y.jac) == 2
     assert (x.jac[0] - sps.eye(3)).nnz == 0
     assert (x.jac[1] - sps.csr_matrix((3,2))).nnz == 0
     assert (y.jac[0] - sps.csr_matrix((2,3))).nnz == 0
     assert (y.jac[1] - sps.eye(2)).nnz == 0
Exemplo n.º 24
0
 def test_abs(self):
     x, y = initVariablesADI(np.array([[5, -2]]).T, np.array([[3]]).T)
     z1 = (x*y).abs()
     assert np.array_equal(z1.val, np.array([[15, 6]]).T)
     assert (z1.jac[0] - sps.diags([3, -3], 0)).nnz == 0
     assert np.array_equal(z1.jac[1].toarray(), np.array([[5], [2]]))
     z2 = npad.abs(x*y)
     assert np.array_equal(z2.val, np.array([[15, 6]]).T)
     assert (z2.jac[0] - sps.diags([3, -3], 0)).nnz == 0
     assert np.array_equal(z2.jac[1].toarray(), np.array([[5], [2]]))
Exemplo n.º 25
0
 def test_copy(self):
     # Simply assigning returns a reference
     x, = initVariablesADI(np.array([[1,2,3]]).T)
     y = x
     x.val[0,:] = 10
     assert y.val[0,:] == 10
     # Need copy to actually make a copy
     z = x.copy()
     z.val[0,:] = 11
     assert x.val[0,:] == 10
Exemplo n.º 26
0
 def test_setitem_tuple(self):
     x, = initVariablesADI(np.array([[5,4]]).T)
     # A: should work identically to B
     y = x.copy()
     y[0] = x[1]
     assert y.val[0] == 4 and y.val[1] == 4
     assert np.array_equal(y.jac[0].toarray(), np.array([[0,1],[0,1]]))
     # B: should work identically to A
     y = x.copy()
     assert isinstance(y, ADI)
     y[0,0] = x[1,0]
Exemplo n.º 27
0
 def test_mul_ad_vector(self):
     x, y = initVariablesADI(np.array([[1,2,3]]).T, np.array([[4,5,6]]).T)
     w = x*x*y*np.array([[3],[3],[3]]) + x*y*y*np.array([[5],[5],[5]])
     assert np.array_equal(np.array([[92, 310, 702]]).T, w.val)
     assert np.array_equal(np.array([[104,0,0],[0,185,0], [0,0,288]]), w.jac[0].toarray())
     assert np.array_equal(np.array([[43,0,0],[0,112,0], [0,0,207]]), w.jac[1].toarray())
     z = np.array([[2]])
     f = x*z
     assert np.array_equal(np.array([[2, 4, 6]]).T, f.val)
     assert np.array_equal(np.array([[2,0,0],[0,2,0], [0,0,2]]), f.jac[0].toarray())
     assert np.array_equal(np.array([[0,0,0],[0,0,0], [0,0,0]]), f.jac[1].toarray())
     with pytest.raises(ValueError):
         x*np.array([[1,2]]).T
Exemplo n.º 28
0
    def test_truediv(self):
        x, y = initVariablesADI(np.array([[1,2,3]]).T, np.array([[2,3,4]]).T)
        u = x+2*y

        # ADI divided by scalar
        s = u/2
        assert np.array_equal(np.array([[2.5, 4, 5.5]]).T, s.val)
        assert np.array_equal(np.array([[0.5,0,0],[0,0.5,0],[0,0,0.5]]), s.jac[0].toarray())
        assert np.array_equal(np.array([[1,0,0],[0,1,0],[0,0,1]]), s.jac[1].toarray())

        # Scalar divided by ADI
        s = 440/u
        assert np.array_equal(np.array([[88, 55, 40]]).T, s.val)
        assert np.allclose(np.array([[-17.6,0,0],[0,-6.875,0],[0,0,-3.636363636363637]]), s.jac[0].toarray())
        assert np.allclose(np.array([[-35.2,0,0],[0,-13.75,0],[0,0,-7.272727272727273]]), s.jac[1].toarray())

        # ADI divided by ADI
        s = u / (x+y)
        assert np.allclose(np.array([[1.666666666666667, 1.6, 1.571428571428571]]).T, s.val)
        assert np.allclose(np.array([[-0.222222222222222,0,0],[0,-0.12,0],[0,0,-0.081632653061225]]), s.jac[0].toarray())
        assert np.allclose(np.array([[0.111111111111111,0,0],[0,0.08,0],[0,0,0.061224489795918]]), s.jac[1].toarray())

        # ADI divided by ADI of length 1
        x, y = initVariablesADI(np.array([[8,2]]).T, np.array([[2]]).T)
        s = x/y
        assert np.array_equal(np.array([[4,1]]).T, s.val)
        assert np.array_equal(np.array([[0.5,0],[0,0.5]]), s.jac[0].toarray())
        assert np.array_equal(np.array([[-2],[-0.5]]), s.jac[1].toarray())

        # ADI of length 1 divided by vector
        s = y/np.array([[4],[2]])
        assert isinstance(s, ADI)
        assert isinstance(s.jac[0], sps.spmatrix)
        assert isinstance(s.jac[1], sps.spmatrix)
        assert np.array_equal(np.array([[0.5,1]]).T, s.val)
        assert np.array_equal(np.array([[0,0],[0,0]]), s.jac[0].toarray())
        assert np.array_equal(np.array([[0.25],[0.5]]), s.jac[1].toarray())
Exemplo n.º 29
0
    def test_pow_ad_scalar_or_scalar_ad(self):
        x, y = initVariablesADI(np.array([[1,2,3]]).T, np.array([[2,3,4]]).T)
        u = x+y
        r = 2**u
        s = u**2

        drdx = 2**u.val * np.log(2) * u.jac[0].toarray()
        drdy = 2**u.val * np.log(2) * u.jac[1].toarray()
        assert np.array_equal(np.array([[8, 32, 128]]).T, r.val)
        assert np.array_equal(drdx, r.jac[0].toarray())
        assert np.array_equal(drdy, r.jac[1].toarray())

        assert np.array_equal(np.array([[9, 25, 49]]).T, s.val)
        assert np.array_equal(np.array([[6,0,0],[0,10,0],[0,0,14]]), s.jac[0].toarray())
        assert np.array_equal(np.array([[6,0,0],[0,10,0],[0,0,14]]), s.jac[1].toarray())
Exemplo n.º 30
0
    def test_ge_gt_le_lt(self):
        x_val = np.array([[1,2,3,2,4,6,7]]).T
        y_val = np.array([[4,3,2,2,8,9,10]]).T
        x, y = initVariablesADI(x_val, y_val)
        assert np.array_equal( x_val >= y_val, x >= y )
        assert np.array_equal( x_val >= 5, x >= 5 )

        assert np.array_equal( x_val > y_val, x > y )
        assert np.array_equal( x_val > 5, x > 5 )

        assert np.array_equal( x_val <= y_val, x <= y )
        assert np.array_equal( x_val <= 5, x <= 5 )

        assert np.array_equal( x_val < y_val, x < y )
        assert np.array_equal( x_val < 5, x < 5 )