def test_composite1(): x1 = Var(-3) x2 = Var(5) x3 = Var(10) y = abs(x1) / x2 * x3 x1.forward() assert y.grad(x1) == -2.
def test_composite_trig(): x = Var(5) x2 = ops.sin(x) / ops.cos(x) x3 = ops.tan(x) x.forward() assert np.all(x2.val == pytest.approx(x3.val)) assert np.all(x2.grad(x) == pytest.approx(x3.grad(x)))
def test_composite2(): x1 = Var(-3) x2 = Var(5) x3 = Var(1) y = x2**x1 / x3 x3.forward() assert y.grad(x3) == -.008
def test_composite2(): x1 = Var(-3) x2 = Var([5, 10]) x3 = Var([1, 1]) y = x2**x1 / x3 x3.forward() assert np.all(y.grad(x3) == [-.008, -.001])
def test_composite1(): x1 = Var(-3) x2 = Var([5, 10]) x3 = Var([10, 100]) y = abs(x1) / x2 * x3 x1.forward() assert np.all(y.grad(x1) == [-2, -10])
def test_sub_vars(): x1 = Var([1, 1, 1]) x2 = Var([1, 2, 3]) y = x1 - x2 x1.forward() x2.forward() assert np.all(y == Var([0, -1, -2])) assert np.all(y.grad(x1) == np.array([1, 1, 1])) assert np.all(y.grad(x2) == np.array([-1, -1, -1]))
def test_add_vars(): x1 = Var([1, 2, 3]) x2 = Var([1, 2, 3]) y = x1 + x2 x1.forward() x2.forward() assert np.all(y == Var([2, 4, 6])) assert np.all(y.grad(x1) == np.array([1, 1, 1])) assert np.all(y.grad(x2) == np.array([1, 1, 1]))
def test_mul_vars(): x1 = Var(8) x2 = Var([2, 2, 2]) y = x1 * x2 x1.forward() x2.forward() assert np.all(y == Var([16, 16, 16])) assert np.all(y.grad(x1) == np.array([2, 2, 2])) assert np.all(y.grad(x2) == np.array([8, 8, 8]))
def test_pow_vars_forward(): x = Var(np.e) x2 = Var(2) y = x**x2 x.forward() x2.forward() assert y.val == np.e**2 assert np.all(y.grad(x) == np.array([2 * np.e])) assert np.all(y.grad(x2) == np.array([np.e**2]))
def test_div_vars(): x = Var([8, 1]) x2 = Var([2, 1]) y = x / x2 x.forward() x2.forward() assert np.all(y == Var([4, 1])) assert np.all(y.grad(x) == np.array([0.5, 1])) assert np.all(y.grad(x2) == np.array([-2., -1]))
def test_sub_vars_forward(): x1 = Var(1) x2 = Var(2) y = x1 - x2 x1.forward() x2.forward() assert y.val == -1 assert np.all(y.grad(x1) == np.array([1])) assert np.all(y.grad(x2) == np.array([-1]))
def test_mul_vars_forward(): x1 = Var(8) x2 = Var(2) y = x1 * x2 x1.forward() x2.forward() assert y.val == 16 assert np.all(y.grad(x1) == np.array([2])) assert np.all(y.grad(x2) == np.array([8]))
def test_add_vars_forward(): x1 = Var(1) x2 = Var(2) y = x1 + x2 x1.forward() x2.forward() assert y.val == 3 assert np.all(y.grad(x1) == np.array([1])) assert np.all(y.grad(x2) == np.array([1]))
def test_pow_vars(): x = Var(np.e) x2 = Var([1, 2, 3]) y = x**x2 x.forward() x2.forward() assert np.all(y == Var([np.e**1, np.e**2, np.e**3])) assert np.all(y.grad(x) == np.array([1, 2 * np.e, 3 * np.e**2])) assert np.all(y.grad(x2) == np.array([np.e, np.e**2, np.e**3]))
def test_div_vars_forward(): x = Var(8) x2 = Var(2) y = x / x2 x.forward() x2.forward() assert y.val == 4 assert np.all(y.grad(x) == np.array([0.5])) assert np.all(y.grad(x2) == np.array([-2]))
def test_radd_var_forward(): x = Var(3) y = 6 + x x.forward() assert y.val == 9 assert np.all(y.grad(x) == np.array([1]))
def test_add_var_number_forward(): x = Var(3) y = x + 5 x.forward() assert y.val == 8 assert np.all(y.grad(x) == np.array([1]))
def test_abs_forward(): x = Var(-2) y = abs(x) x.forward() assert y.val == 2 assert y.grad(x) == np.array([-1])
def test_rmul_vars_forward(): x = Var(3) y = 6 * x x.forward() assert y.val == 18 assert np.all(y.grad(x) == np.array([6]))
def test_rpow_vars_forward(): x = Var(3) y = np.e**x x.forward() assert y.val == np.e**3 assert np.all(y.grad(x) == np.array([np.e**3]))
def test_pow_var_number_forward(): x = Var(3) y = x**5 x.forward() assert y.val == 243 assert np.all(y.grad(x) == np.array([405]))
def test_neg_forward(): x = Var(2) y = -x assert y.val == -2 x.forward() assert y.grad(x) == np.array([-1])
def test_rdiv_vars_forward(): x = Var(3) y = 6 / x x.forward() assert y.val == 2 assert np.all(y.grad(x) == np.array([-2 / 3]))
def test_div_var_number_forward(): x = Var(10) y = x / 5 x.forward() assert y.val == 2. assert np.all(y.grad(x) == np.array([0.2]))
def test_sub_var_number_forward(): x = Var(3) y = x - 5 x.forward() assert y.val == -2 assert np.all(y.grad(x) == np.array([1]))
def test_sub_var_number(): x = Var([1, 2, 3]) y = x - 5 x.forward() assert np.all(y == Var([-4, -3, -2])) assert np.all(y.grad(x) == np.array([1, 1, 1]))
def test_rsub_var_forward(): x = Var(3) y = 6 - x x.forward() assert y.val == 3 assert np.all(y.grad(x) == np.array([-1]))
def test_radd_var(): x = Var([1, 2, 3]) y = 6 + x x.forward() assert np.all(y == Var([7, 8, 9])) assert np.all(y.grad(x) == np.array([1, 1, 1]))
def test_mul_var_number_forward(): x = Var(3) y = x * 5 x.forward() assert y.val == 15 assert np.all(y.grad(x) == np.array([5]))
def test_rsub_var(): x = Var([1, 2, 3]) y = 6 - x x.forward() assert np.all(y == Var([5, 4, 3])) assert np.all(y.grad(x) == np.array([-1, -1, -1]))