def test_add2(): ad1 = ad.AD_eval('x + x', "x", 2) assert (ad1.derivative('x'), ad1.val) == (2,4)
def test_rtruediv(): ad1 = ad.AD_eval('3/x', 'x', 2) assert (ad1.derivative('x'), ad1.val) == (-3/4,3/2)
def test_pow2(): ad1 = ad.AD_eval('x**x','x',2) assert (ad1.derivative('x'), ad1.val) == (4+ 4*math.log(2),4)
def test_rmul(): ad1 = ad.AD_eval('2 * x', 'x', 2) assert (ad1.derivative('x'), ad1.val) == (2,4)
def test_truediv2(): ad1 = ad.AD_eval('(x+2)/x', 'x', 2) assert (ad1.derivative('x'), ad1.val) == (-1/2,2)
def test_ln_with_negative(): with pytest.raises(ValueError): ad.AD_eval('log(-1*x)', 'x', 3)
def test_rsub(): ad1 = ad.AD_eval('2 - x', "x", 2) assert (ad1.derivative('x'), ad1.val) == (-1,0)
def test_AD_eval_multiple1_var2(): with pytest.raises(AssertionError): ad.AD_eval('2*x+y', ['x', 'y'],[1, '2'])
def test_AD_eval_multiple1_var3(): with pytest.raises(NameError): ad.AD_eval('exp(x)+y', ['x', 'y'],[1,2])
def test_sqrt(): ad0 = ad.AD_eval('sqrt(x)','x', 4) ad1 = ad.AD_Object(4, 'x').sqrt() assert (ad0.derivative('x'), ad0.val) == (1/4,2) assert (ad1.der['x'], ad1.val) == (1/4,2)
def test_repr_AD_eval(): ad1 = repr(ad.AD_eval('x', 'x', 1)) val = 1 der = 1 assert ad1 == "AD Object: Value = %.3f, Derivative: d(x)= %.3f ; "%(val, der)
def test_sigmoid(): ad1 = ad.AD_eval('sigmoid(x)','x',2) val = 1.0/(1.0 + math.exp(-2)) assert (round(ad1.derivative('x'),5), ad1.val) == (round(val*(1-val),5),val)
def test_log2(): with pytest.raises(ValueError): ad.AD_eval('log(x)','x',0)
def test_tanh(): ad1 = ad.AD_eval('tanh(x)','x',2) assert (ad1.derivative('x'), ad1.val) == (2 / (1 + math.cosh(4)),math.tanh(2))
def test_division_by_zero(): with pytest.raises(ValueError): ad.AD_eval('x/0', 'x', 3)
def test_AD_eval_multiple1_var4(): ad1 = ad.AD_eval('x**2+y', ['x', 'y'],[1,2]) assert (ad1.der['x'], ad1.der['y'], ad1.val) == (2,1,3)
def test_division_by_zero3(): with pytest.raises(ValueError): ad.AD_eval('(x+1)/x', 'x', 0)
def test_radd(): ad1 = ad.AD_eval('2 + x', "x", 2) assert (ad1.derivative('x'), ad1.val) == (1,4)
def test_exponential_function_name(): with pytest.raises(NameError): ad.AD_eval('3*log(5)/exp(x)', 'x', 3)
def test_sub(): ad1 = ad.AD_eval('x - 2', "x", 2) assert (ad1.derivative('x'), ad1.val) == (1,0)
def test_mul2(): ad1 = ad.AD_eval('x * x', 'x', 2) assert (ad1.derivative('x'), ad1.val) == (4,4)
def test_sub2(): ad1 = ad.AD_eval('x - 2*x', "x", 2) assert (ad1.derivative('x'), ad1.val) == (-1,-2)
def test_truediv(): ad1 = ad.AD_eval('x/2', 'x', 2) assert (ad1.derivative('x'), ad1.val) == (1/2,1)
def test_input_function_types(): x = 2 with pytest.raises(AssertionError): ad.AD_eval(3*x+2, "x", 2)
def test_negation(): ad1 = ad.AD_eval('-x', "x", 2) assert (ad1.derivative('x'), ad1.val) == (-1, -2)
def test_input_label_types(): x = 2 with pytest.raises(AssertionError): ad.AD_eval('3x+2', x, 2)
def test_pow(): ad1 = ad.AD_eval('x**3', 'x', 2) assert (ad1.derivative('x'), ad1.val) == (12,8)
def test_input_value_types(): with pytest.raises(AssertionError): ad.AD_eval('3x+2', 'x', '3')
def test_rpow(): ad1 = ad.AD_eval('3**x','x', 2) assert (ad1.derivative('x'), ad1.val) == (9*math.log(3),9)
def test_arctan(): ad1 = ad.AD_eval('arctan(x)','x', 2) assert (ad1.derivative('x'), ad1.val) == (1 / 5,math.atan(2))