def test_truediv(): x=ad.Node(4,2) y=ad.Node(2,1) temp=x/y assert(temp.val==2) assert(temp.der==(4-4)/4) with pytest.raises(ValueError): x/"1"
def test_add(): x = ad.Node(2.0) + ad.Node(1.0) assert(x.val==3) assert(x.der==2) x=ad.Node(2.0)+10 y=10+ad.Node(2.0) assert(x==y) with pytest.raises(ValueError): x+"1"
def test_power(): x=ad.Node(2.0,2.0) x=x**3 assert(x.val==8) assert(x.der==24) with pytest.raises(ValueError): x**"2"
def test_rtruediv(): x=ad.Node(10,2) y=1/x assert(y.val==0.1) assert (y.der == -1/100*2) with pytest.raises(ValueError): "1"/x
def test_logb(): x = ad.Node(2.0, 2.0) a = ad.logb(np.exp(1), x) b = ad.log(x) assert (np.isclose(a.val, b.val) & np.isclose(a.der, b.der)) x = ad.Node(8.0, 2.0) a = ad.logb(2, x) assert (np.isclose(a.val, 3)) assert (np.isclose(a.der, 0.360674)) x = ad.Node_b(8.0, ) a = ad.logb(2, x) assert (np.isclose(a.val, 3)) a = ad.logb(3, 27) assert (np.isclose(a, 3)) with pytest.raises(ValueError): ad.logb(x, 2) with pytest.raises(ValueError): ad.logb(2, "1")
def test_arccos(): x = ad.Node(0.5, 0.5) x = ad.arccos(x) assert np.isclose(x.val, np.arccos(0.5)) assert np.isclose(x.der, (-1 / np.sqrt(0.75)) * 0.5) x = ad.Node_b(0.5) x = ad.arccos(x) assert np.isclose(x.val, np.arccos(0.5)) x = ad.arccos(1) assert np.isclose(x, np.arccos(1)) with pytest.raises(ValueError): ad.arccos("1") x = ad.Node(2, 0.5) with pytest.raises(ValueError): ad.arccos(x) x = ad.Node_b(2) with pytest.raises(ValueError): ad.arccos(x)
def test_log(): x = ad.Node(2, 2) x = ad.log(x) assert np.isclose(x.val, np.log(2)) assert np.isclose(x.der, 1) x = ad.Node_b(1.0) x = ad.log(x) assert np.isclose(x.val, 0) x = ad.log(1) assert np.isclose(x, 0) with pytest.raises(ValueError): ad.log("1")
def test_sin(): x = ad.Node(1.0) x = ad.sin(x) assert np.isclose(x.val, np.sin(1)) assert np.isclose(x.der, np.cos(1)) x = ad.Node_b(1.0) x = ad.sin(x) assert np.isclose(x.val, np.sin(1)) x = ad.sin(np.pi) assert np.isclose(x, np.sin(np.pi)) with pytest.raises(ValueError): ad.sin("1")
def test_exp(): x = ad.Node(0, 2) x = ad.exp(x) assert np.isclose(x.val, 1) assert np.isclose(x.der, 2) x = ad.Node_b(0) x = ad.exp(x) assert np.isclose(x.val, 1) x = ad.exp(0) assert np.isclose(x, 1) with pytest.raises(ValueError): ad.exp("1")
def test_tan(): x = ad.Node(1.0, 2) x = ad.tan(x) assert np.isclose(x.val, np.tan(1)) assert np.isclose(x.der, 2 * 1 / (np.cos(1)**2)) x = ad.Node_b(1.0) x = ad.tan(x) assert np.isclose(x.val, np.tan(1)) x = ad.tan(np.pi) assert np.isclose(x, np.tan(np.pi)) with pytest.raises(ValueError): ad.tan("1")
def test_tanh(): x = ad.Node(2) x = ad.tanh(x) assert np.isclose(x.val, np.tanh(2)) assert np.isclose(x.der, 1 / (np.cosh(2)**2)) x = ad.Node_b(2) x = ad.tanh(x) assert np.isclose(x.val, np.tanh(2)) x = ad.tanh(2) assert np.isclose(x, np.tanh(2)) with pytest.raises(ValueError): ad.tanh("1")
def test_logistic(): x = ad.Node(2) x = ad.logistic(x) assert np.isclose(x.val, np.exp(2) / (np.exp(2) + 1)) assert np.isclose(x.der, np.exp(-2) / ((1 + np.exp(-2))**2)) x = ad.Node_b(2) x = ad.logistic(x) assert np.isclose(x.val, np.exp(2) / (np.exp(2) + 1)) x = ad.logistic(2) assert np.isclose(x, np.exp(2) / (np.exp(2) + 1)) with pytest.raises(ValueError): ad.logistic("1")
def test_sqrt(): x = ad.Node(4) x = ad.sqrt(x) assert np.isclose(x.val, 2) assert np.isclose(x.der, 0.25) x = ad.Node_b(4) x = ad.sqrt(x) assert np.isclose(x.val, 2) x = ad.sqrt(4) assert np.isclose(x, np.sqrt(4)) with pytest.raises(ValueError): ad.sqrt("1")
def test_power(): x = ad.Node(2.0, 2.0) a = ad.power(3, x) assert (np.isclose(a.val, 9)) assert (np.isclose(a.der, 3**2 * np.log(3) * x.der)) x = ad.Node_b(2.0) a = ad.power(3, x) assert (np.isclose(a.val, 9)) a = ad.power(2, 5) assert (np.isclose(a, 2**5)) with pytest.raises(ValueError): ad.power(x, 2) with pytest.raises(ValueError): ad.power(2, "1")
def test_arctan(): x = ad.Node(2) x = ad.arctan(x) assert np.isclose(x.val, np.arctan(2)) assert np.isclose(x.der, 0.2) x = ad.Node_b(2) x = ad.arctan(x) assert np.isclose(x.val, np.arctan(2)) x = ad.arctan(2) assert np.isclose(x, np.arctan(2)) with pytest.raises(ValueError): ad.arctan("1")
def test_not_equal_num(): x = ad.Node(2.0) + 2 y = ad.Node(4.0, 2.0) assert x != y
def test_not_equal_node(): x = ad.Node(2.0) + ad.Node(4.0) y = ad.Node(1.0, 2.0) assert x != y
def test_neg(): x = -ad.Node(5.0) assert x.val == -5 assert x.der == -1
def test_truediv_num(): x = ad.Node(4, 2) x=x/2 assert (x.val == 2) assert (x.der == 1)
def test_rmul(): x = 5 * ad.Node(4,2) assert x.val == 20 assert x.der == 10 with pytest.raises(ValueError): "1"*x
def test_mul_num(): x = ad.Node(5.0) * 4 assert x.val == 20 assert x.der == 4
def test_sub_num(): x = ad.Node(5.0) - 3 assert x.val == 2 assert x.der == 1 with pytest.raises(ValueError): x-"1"
def test_mul(): x = ad.Node(5.0) * ad.Node(4) assert x.val == 20 assert x.der == 9 with pytest.raises(ValueError): x*"1"
def test_rsub(): x = 5 - ad.Node(2.0) assert x.val == 3 assert x.der == -1 with pytest.raises(ValueError): "1"-x
def test_equal(): x = ad.Node(2.0) + ad.Node(1.0) y = ad.Node(3.0, 2.0) assert x == y
def test_sub(): x = ad.Node(5.0) - ad.Node(3) assert x.val == 2 assert x.der == 0