Ejemplo n.º 1
0
def test_less_than():
    x = ad.variable(3.0)
    y = ad.variable(4.0)

    a = 1

    assert x < y
Ejemplo n.º 2
0
def test_equal():
    x = ad.variable(3.0)
    y = ad.variable(3.0)

    assert x == y

    x = ad.variable(3.0)
    y = ad.variable(4.0)
    assert x != y

    alpha = 2.0
    beta = 3.0
    f1 = alpha * x + beta
    f2 = x * alpha + beta
    f3 = beta + alpha * x
    f4 = beta + x * alpha

    assert f1 == f2
    assert f1 == f3
    assert f1 == f4

    f5 = beta * x + alpha
    assert f1 != f5

    z = 3.0
    assert x != z
Ejemplo n.º 3
0
def test_logistic():
    L = 1
    k = 1
    x0 = 1
    logistic = lambda x: L / (1 + np.exp(-k * (x - x0)))
    log_der = lambda x: (1 - logistic(x)) * logistic(x)

    f1 = ad.logistic(5)
    assert np.allclose(f1.val, logistic(5))

    x2 = ad.variable(10)
    f2 = ad.logistic(x2)
    assert np.allclose(f2.val, logistic(10))
    assert np.allclose(f2.der, log_der(10))

    x3 = ad.variable(-24)
    f3 = ad.logistic(x3)
    assert np.allclose(f3.val, logistic(-24))
    assert np.allclose(f3.der, log_der(-24))

    L = 2
    k = 1
    x0 = 1

    x3 = ad.variable(-24)
    f3 = ad.logistic(x3)
    assert np.allclose(f3.val, logistic(-24))
    assert np.allclose(f3.der, log_der(-24))
Ejemplo n.º 4
0
def test_less_equal():
    x = ad.variable(3.0)
    y = ad.variable(4.0)
    z = ad.variable(4.0)

    assert x <= y
    assert z <= y
    assert y <= z
Ejemplo n.º 5
0
def test_greater_than():
    x = ad.variable(3.0)
    y = ad.variable(4.0)
    z = ad.variable(4.0)

    assert not (y > z)
    assert y > x
    assert z > x
Ejemplo n.º 6
0
def test_greater_equal():
    x = ad.variable(3.0)
    y = ad.variable(3.0)
    z = ad.variable(5.0)

    assert y >= x
    assert x >= y
    assert z >= x
    assert z >= y
Ejemplo n.º 7
0
def test_notequal():
    x = ad.variable(3.0)
    y = ad.variable(4.0)

    assert x != y

    alpha = 7.0
    beta = 8.0
    f1 = alpha * x + beta

    f5 = beta * x + alpha
    assert f1 != f5

    assert f1 != 3
Ejemplo n.º 8
0
def test_sqrt():
    # square root of a scalar
    f1 = ad.sqrt(81)
    assert np.allclose(f1.val, 9)

    # square root of a variable
    x2 = ad.variable(49)
    f2 = ad.sqrt(x2)
    assert np.allclose(f2.val, 7)
    assert np.allclose(f2.der, 1 / 14)

    x3 = ad.variable(64)
    f3 = 5 + 2 * ad.sqrt(x3)
    assert np.allclose(f3.val, 21)
    assert np.allclose(f3.der, 1 / 8)
Ejemplo n.º 9
0
def test_cosh():
    # cosh of a scalar
    f1 = ad.cosh(0)
    assert np.allclose(f1.val, (np.exp(0) + np.exp(0)) / 2)

    # cosh of a variable
    x2 = ad.variable(2)
    f2 = ad.cosh(x2)
    assert np.allclose(f2.val, (np.exp(2) + np.exp(-2)) / 2)
    assert np.allclose(f2.der, (np.exp(2) - np.exp(-2)) / 2)

    x3 = ad.variable(10)
    f3 = ad.cosh(x3)
    assert np.allclose(f3.val, (np.exp(10) - np.exp(-10)) / 2)
    assert np.allclose(f3.der, (np.exp(10) + np.exp(-10)) / 2)
Ejemplo n.º 10
0
def test_sinh():
    # sinh of a scalar
    f1 = ad.sinh(2)
    assert np.allclose(f1.val, (np.exp(2) - np.exp(-2)) / 2)

    # sinh of a variable
    x2 = ad.variable(4)
    f2 = ad.sinh(x2)
    assert np.allclose(f2.val, (np.exp(4) - np.exp(-4)) / 2)
    assert np.allclose(f2.der, (np.exp(4) + np.exp(-4)) / 2)

    x3 = ad.variable(-1)
    f3 = ad.sinh(x3)
    assert np.allclose(f3.val, (np.exp(-1) - np.exp(1)) / 2)
    assert np.allclose(f3.der, (np.exp(-1) + np.exp(1)) / 2)
Ejemplo n.º 11
0
def test_exp():
    # exponential of a scalar
    f1 = ad.exp(10)
    assert np.allclose(f1.val, np.exp(10))

    # exponential of a variable
    x2 = ad.variable(5)
    f2 = ad.exp(x2)
    assert np.allclose(f2.val, np.exp(5))
    assert np.allclose(f2.der, np.exp(5))

    x3 = ad.variable(4)
    f3 = 5 + 2 * ad.exp(x3)
    assert np.allclose(f3.val, 5 + 2 * np.exp(4))
    assert np.allclose(f3.der, 2 * np.exp(4))
Ejemplo n.º 12
0
def test_arccos():
    arccos = lambda x: np.arccos(x)
    arccos_der = lambda x: -1 / np.sqrt(1 - x**2)

    f1 = ad.arccos(np.pi / 4)
    assert np.allclose(f1.val, arccos(np.pi / 4))

    x2 = ad.variable(0)
    f2 = ad.arccos(x2)
    assert np.allclose(f2.val, arccos(0))
    assert np.allclose(f2.der, arccos_der(0))

    x3 = ad.variable(np.pi / 5)
    f3 = ad.arccos(x3)
    assert np.allclose(f3.val, arccos(np.pi / 5))
    assert np.allclose(f3.der, arccos_der(np.pi / 5))
Ejemplo n.º 13
0
def test_tanh():
    th = lambda x: ((np.exp(x) - np.exp(-x)) / 2) / (
        (np.exp(x) + np.exp(-x)) / 2)
    th_der = lambda x: 1 / ((np.exp(x) + np.exp(-x)) / 2)**2
    # tanh of a scalar
    f1 = ad.tanh(3)
    assert np.allclose(f1.val, th(3))

    # tanh of a variable
    x2 = ad.variable(-2)
    f2 = ad.tanh(x2)
    assert np.allclose(f2.val, th(-2))
    assert np.allclose(f2.der, th_der(-2))

    x3 = ad.variable(0)
    f3 = ad.tanh(x3)
    assert np.allclose(f3.val, th(0))
    assert np.allclose(f3.der, th_der(0))
Ejemplo n.º 14
0
def test_log():
    # log of a scalar
    f1 = ad.log(1)
    assert np.allclose(f1.val, 0)

    f2 = ad.log(10)
    assert np.allclose(f2.val, np.log(10))

    # log of a variable
    x3 = ad.variable(1)
    f3 = ad.log(x3)
    assert np.allclose(f3.val, 0)
    assert np.allclose(f3.der, 1)

    x4 = ad.variable(3)
    f4 = ad.log(x4) * 5 + 1
    assert np.allclose(f4.val, np.log(3) * 5 + 1)
    assert np.allclose(f4.der, 5 / 3)
Ejemplo n.º 15
0
def test_simpleFunc7():
    func12_val = lambda x: np.sqrt(17) / np.exp(2 * x)
    func12_der = lambda x: -2 * np.sqrt(17) * np.exp(-2 * x)

    a12 = 2
    x12 = ad.variable(a12)

    f12 = ad.sqrt(17) / ad.exp(2 * x12)
    assert f12.val == func12_val(a12)
    assert f12.der == func12_der(a12)
Ejemplo n.º 16
0
def test_simpleFunc8():
    func13_val = lambda x: np.log(5**2 - 2 * x**2)
    func13_der = lambda x: (-4 * x) / (25 - 2 * x**2)

    a13 = 1 / 2
    x13 = ad.variable(a13)

    f13 = ad.log(5**2 - 2 * x13**2)
    assert f13.val == func13_val(a13)
    assert f13.der == func13_der(a13)
Ejemplo n.º 17
0
def test_simpleFunc9():
    func14_val = lambda x: np.sin(x) / (3 - 2 * np.cos(x))
    func14_der = lambda x: (-2 + 3 * np.cos(x)) / (3 - 2 * np.cos(x))**2

    a14 = np.pi / 4
    x14 = ad.variable(a14)

    f14 = ad.sin(x14) / (3 - 2 * ad.cos(x14))
    assert np.isclose(f14.val, func14_val(a14))
    assert np.isclose(f14.der, func14_der(a14))
Ejemplo n.º 18
0
def test_simpleFunc6():
    func11_val = lambda x: ((x**3) + 4 * x) / np.sin(3)
    func11_der = lambda x: ((3 * x**2) + 4) / np.sin(3)

    a11 = 6
    x11 = ad.variable(a11)

    f11 = ((x11**3) + 4 * x11) / ad.sin(3)
    assert f11.val == func11_val(a11)
    assert f11.der == func11_der(a11)
Ejemplo n.º 19
0
def test_simpleFunc5():
    def f1(x):
        return 254 * np.sqrt(x) - np.tan(x) + 1

    def f1_dx(x):
        return 127 / np.sqrt(x) - (1 / np.cos(x))**2

    x1 = ad.variable(65)
    f = 254 * ad.sqrt(x1) - ad.tan(x1) + 1
    assert f.val == f1(65)
    assert f.der == f1_dx(65)
Ejemplo n.º 20
0
def test_simpleFunc4():
    def f1(x):
        return 17 * np.log(x) + 25 + 1 / x

    def f1_dx(x):
        return 17 / x - 1 / x**2

    x1 = ad.variable(39)
    f = 17 * ad.log(x1) + 25 + 1 / x1
    assert f.val == f1(39)
    assert f.der == f1_dx(39)
Ejemplo n.º 21
0
def test_simpleFunc3():
    def f1(x):
        return np.sin(x) / 3 + np.cos(x) / x

    def f1_dx(x):
        return -np.sin(x) / x - np.cos(x) / x**2 + np.cos(x) / 3

    x1 = ad.variable(83)
    f = ad.sin(x1) / 3 + ad.cos(x1) / x1
    assert f.val == f1(83)
    assert f.der == f1_dx(83)
Ejemplo n.º 22
0
def test_simpleFunc2():
    def f1(x):
        return x**4 - 30 / x

    def f1_dx(x):
        return 4 * x**3 + 30 / x**2

    x1 = ad.variable(46)
    f = x1**4 - 30 / x1
    assert f.val == f1(46)
    assert f.der == f1_dx(46)
Ejemplo n.º 23
0
def test_arctan():
    arctan = lambda x: np.arctan(x)
    arctan_der = lambda x: 1 / (1 + x**2)

    f1 = ad.arctan(np.pi / 4)
    assert np.allclose(f1.val, arctan(np.pi / 4))

    x2 = ad.variable(0)
    f2 = ad.arctan(x2)
    assert np.allclose(f2.val, arctan(0))
    assert np.allclose(f2.der, arctan_der(0))
Ejemplo n.º 24
0
def test_simpleFunc1():
    def f1(x):
        return 2 * x * np.exp(x) + np.sqrt(x)

    def f1_dx(x):
        return 2 * x * np.exp(x) + 2 * np.exp(x) + 1 / (2 * np.sqrt(x))

    x1 = ad.variable(22)
    f = 2 * x1 * ad.exp(x1) + ad.sqrt(x1)
    assert f.val == f1(22)
    assert f.der == f1_dx(22)
Ejemplo n.º 25
0
def test_simpleFunc10():
    func15_val = lambda x: 3 * x**(-4) - x**2 * np.tan(x)
    func15_der = lambda x: (-12 / x**5) - 2 * x * np.tan(x) - x**2 * (
        (np.tan(x))**2 + 1)

    a15 = 0.7
    x15 = ad.variable(a15)

    f15 = 3 * x15**(-4) - x15**2 * ad.tan(x15)
    assert np.isclose(f15.val, func15_val(a15))
    assert np.isclose(f15.der, func15_der(a15))
Ejemplo n.º 26
0
def test_cos():

    # Cosine of variable:
    f1 = ad.cos(np.pi * 3 / 4)
    assert np.isclose(f1.val, -np.sqrt(2) / 2)
    assert np.isclose(f1.der, 0)

    # Cosine of variable:
    x2 = ad.variable(np.pi)
    f2 = ad.cos(x2)
    assert np.isclose(f2.val, -1.0)
    assert np.isclose(f2.der, 0.0)

    # Cosine of variable times constant:
    x3 = ad.variable(0.0)
    f3 = ad.cos(x3) * 5
    assert np.isclose(f3.val, 5.0)
    assert np.isclose(f3.der, 0.0)

    # Cosine of constant times variable:
    x4 = ad.variable(np.pi)
    f4 = ad.cos(x4 * 0.5)
    assert np.isclose(f4.val, 0.0)
    assert np.isclose(f4.der, -0.5)
Ejemplo n.º 27
0
def test_sin():

    # Sine of variable:
    f1 = ad.sin(np.pi)
    assert np.isclose(f1.val, 0.0)
    assert np.isclose(f1.der, 0.0)

    # Sine of variable:
    x2 = ad.variable(np.pi)
    f2 = ad.sin(x2)
    assert np.isclose(f2.val, 0.0)
    assert np.isclose(f2.der, -1.0)

    # Sine of variable times constant:
    x3 = ad.variable(0.0)
    f3 = ad.sin(x3) * 5
    assert np.isclose(f3.val, 0.0)
    assert np.isclose(f3.der, 5.0)

    # Sine of constant times variable:
    x4 = ad.variable(np.pi)
    f4 = ad.sin(x4 * 2)
    assert np.isclose(f4.val, 0.0)
    assert np.isclose(f4.der, 2.0)
Ejemplo n.º 28
0
def test_tan():

    # Tangent of variable:
    f1 = ad.tan(np.pi)
    assert np.isclose(f1.val, 0.0)
    assert np.isclose(f1.der, 0.0)

    # Tangent of variable:
    x2 = ad.variable(np.pi)
    f2 = ad.tan(x2)
    assert np.isclose(f2.val, 0.0)
    assert np.isclose(f2.der, 1.0)

    # Tangent of variable times constant:
    x3 = ad.variable(np.pi / 4)
    f3 = ad.tan(x3) * 5
    assert np.isclose(f3.val, 5.0)
    assert np.isclose(f3.der, 10.0)

    # Tangent of constant times variable:
    x4 = ad.variable(np.pi * 2)
    f4 = ad.tan(x4 * 0.5)
    assert np.isclose(f4.val, 0.0)
    assert np.isclose(f4.der, 0.5)
Ejemplo n.º 29
0
def test_operations():

    # Addition and multiplication:
    a = 5.0
    x = ad.variable(a)
    alpha = 2.0
    beta = 3.0

    f = alpha * x + beta
    assert f.val == 13
    assert f.der == 2

    f = x * alpha + beta
    assert f.val == 13
    assert f.der == 2

    f = beta + alpha * x
    assert f.val == 13
    assert f.der == 2

    f = beta + x * alpha
    assert f.val == 13
    assert f.der == 2

    # Power:
    a = 5.0
    x = ad.variable(a)
    f = x**2

    assert f.val == 25
    assert f.der == 10

    a = 3.0
    d = 2.0
    x = ad.variable(a, d)
    f = x**3
    assert f.val == 27
    assert f.der == 54

    with pytest.raises(ValueError):
        # power should be a number
        x**'n'

    #division(truediv)
    x = ad.variable(2)
    y = ad.variable(4)
    f = x / y
    assert f.val == 0.5
    assert f.der == 0.125

    x = ad.variable(2)
    with pytest.raises(ZeroDivisionError):
        # cannot perform division by zero
        x / 0

    with pytest.raises(ValueError):
        # should be a scalar or instance variable
        x / 'n'

    x = ad.variable(2, 2)
    f = x / 2
    assert f.val == 1
    assert f.der == 1

    #division(rtruediv)
    x = ad.variable(4)
    f = 4 / x
    assert f.val == 1
    assert f.der == -0.25

    #rpow
    a = 3
    x = ad.variable(a)
    f = 2**x
    assert f.val == 8
    assert f.der == 2**a * np.log(2)

    with pytest.raises(ValueError):
        # exponent should be a number
        's'**x