def test_jacobian_self():
    q = Array((num2, num3))
    jac = q.jacobian(q)
    assert jac[0, 0] == 1
    assert jac[0, 1] == 0
    assert jac[1, 0] == 0
    assert jac[1, 1] == 1
def test_steepest_descent_armijo():
    """Should trigger the line search
    """
    initial_guess = Array([Number(2), Number(1)])
    _, xstar, _, _ = optimizations.steepest_descent(rosenbrock,
                                                    initial_guess,
                                                    iterations=50)
def test_iter():
    q = Array((num2, num3))
    q_ = []
    for el in q:
        q_.append(el)

    assert q_ == [num2, num3]
def test_steepest_descent():

    initial_guess = Array([Number(1.1), Number(1.1)])
    _, xstar, _, _ = optimizations.steepest_descent(bowl,
                                                    initial_guess,
                                                    iterations=400)
    # print(xstar)
    assert xstar[0].val == pytest.approx(1, abs=1e-3)
    assert xstar[1].val == pytest.approx(1, abs=1e-3)
示例#5
0
        def inner_func(*args, **kwargs):
            # Check if args[0] has len. If so, apply the function elementwise and return an array
            # rather than a Number
            try:
                value = func(*args, **kwargs)
                deriv = deriv_func(*args, **kwargs)
                return Number(value, deriv)

            except AttributeError:

                vals = [func(element, *args[1:], **kwargs) for element in args[0]]
                derivs = [deriv_func(element, *args[1:], **kwargs) for element in args[0]]
                numbers = [Number(val, deriv) for val, deriv in zip(vals, derivs)]
                return Array(numbers)
def test_str():
    q = Array((num2, num3))
    assert str(q) == '[Number(val=2) Number(val=3)]'
def test_indexing():
    q = Array((num2, num3))
    assert q[0] == num2
def test_mul_array():
    q = Array((num2, num3))
    w = q * q
    assert w[0].val == 4
    assert w[1].val == 9
def test_len():
    q = Array((num2, num3))
    assert len(q) == 2
def test_radd_scalar():
    q = Array((num2, num3))
    w = 2 + q
    assert w[0].val == 4
    assert w[1].val == 5
def test_rsub_scalar():
    q = Array((num2, num3))
    w = 10 - q
    assert w[0].val == 8
    assert w[1].val == 7
def test_array_converts_to_number():
    q = Array((Number(0), 0))
    assert q[0].val == 0
    assert q[1].val == 0
def test_add():
    q = Array((num2, num3))
    w = q + q
    assert w[0].val == 4
    assert w[1].val == 6
def test_array_func():
    q = Array((Number(0), Number(1)))

    w = operations.exp(q)
    assert w[0].val == pytest.approx(1)
    assert w[1].val == pytest.approx(np.exp(1))
def test_jacobian_scalar():
    q = Array((num2, num3))
    jac = q.jacobian(q[0])
    assert jac[0] == 1
    assert jac[1] == 0
def test_neg():
    q = Array((num2, num3))
    w = -q
    assert w[0].val == -2
    assert w[1].val == -3
def test_rpow():
    q = Array((num2, num3))
    v = [2, 2]
    w = v**q
    assert w[0].val == 4
    assert w[1].val == 8
def test_pow():
    q = Array((num2, num3))
    w = q**2
    assert w[0].val == 4
    assert w[1].val == 9
def test_div_scalar():
    q = Array((num2, num3))
    w = q / 2
    assert w[0].val == pytest.approx(1)
    assert w[1].val == pytest.approx(3 / 2)
def test_eq():
    q = Array((Number(0), 0))
    assert q == q
def test_setitem():
    q = Array((num2, num3))
    q[0] = num2
    assert q[0] == num2
def test_repr():
    q = Array((num2, num3))
    assert repr(q) == 'Array([Number(val=2) Number(val=3)])'
def test_add_scalar():
    q = Array((num2, num3))
    w = q + 1
    assert w[0].val == 3
    assert w[1].val == 4
def test_rdiv():
    q = Array((num2, num3))
    w = 12 / q
    assert w[0].val == pytest.approx(6)
    assert w[1].val == pytest.approx(4)
def test_sub_array():
    q = Array((num2, num3))
    w = q - q
    assert w[0].val == 0
    assert w[1].val == 0
def test_neq():
    q = Array((Number(0), 0))

    w = Array((Number(0), 1))

    assert q != w
def test_sub_scalar():
    q = Array((num2, num3))
    w = q - 1
    assert w[0].val == 1
    assert w[1].val == 2
def test_dot():
    q = Array((Number(0), 0))
    assert q.dot(q).val == 0
def test_neq_mixed():
    q = Array((Number(0), 0))
    assert q != 'a'
    assert q != 1
def test_array_only_number():
    q = Array((num2, num2))
    with pytest.raises(ValueError):
        q[0] = 1