def test_trigonometric(self): x1 = Variable(np.pi/4, name='x1') x2 = Variable(np.pi/4, name='x2') x3 = Variable(np.pi/4, name='x3') x4 = AutoDiff.sin(x1) + AutoDiff.cos(x2) + AutoDiff.tan(x3) assert x4.val == 2**0.5 + 1 assert x4.der == {'x1': 0.70710678118654757, 'x2': -0.70710678118654746, 'x3': 1.9999999999999998}
def test_hyberbolic(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x3 = Variable(1, name='x3') x4 = AutoDiff.sinh(x1) + AutoDiff.cosh(x2) + AutoDiff.tanh(x3) assert x4.val == 3.4798759844148099 assert x4.der == {'x1': 1.5430806348152437, 'x2': 1.1752011936438014, 'x3': 0.41997434161402614}
def test_inverse_trigonometric(self): x1 = Variable(0.1, name='x1') x2 = Variable(0.2, name='x2') x3 = Variable(0.3, name='x3') x4 = AutoDiff.arcsin(x1) + AutoDiff.arccos(x2) + AutoDiff.arctan(x3) assert x4.val == 1.7610626216439926 assert x4.der == {'x1': 1.005037815259212, 'x2': -1.0206207261596576, 'x3': 0.9174311926605504}
def test_hyperbolics(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x = AutoDiff.sinh(x1) y = AutoDiff.cosh(x2) z = AutoDiff.tanh(x2) z1 = x*y+z assert z1.der2['x1x1'][0] == 1.8134302039235093 assert z1.der2['x1x2'][0] == 1.8134302039235093 assert z1.der2['x2x1'][0] == 1.8134302039235093 assert z1.der2['x2x2'][0] == 1.1737301954742847
def test_trigonometric(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x = AutoDiff.sin(x1) y = AutoDiff.cos(x2) z = AutoDiff.tan(x2) z1 = x*y+z assert z1.der2['x1x1'][0] == -0.45464871341284091 assert z1.der2['x1x2'][0] == -0.45464871341284091 assert z1.der2['x2x1'][0] == -0.45464871341284091 assert z1.der2['x2x2'][0] == 10.215210231562478
def test_exp_log(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x = AutoDiff.exp(x1) y = AutoDiff.log(x2) z1 = x*y assert z1.der2['x1x1'][0] == 0. assert z1.der2['x1x2'][0] == 2.7182818284590451 assert z1.der2['x2x1'][0] == 2.7182818284590451 assert z1.der2['x2x2'][0] == -2.7182818284590451
def test_inverse_trigonometric(self): x1 = Variable(0.5, name='x1') x2 = Variable(0.6, name='x2') x = AutoDiff.arcsin(x1) y = AutoDiff.arccos(x2) z = AutoDiff.arctan(x2) z1 = x*y+z assert z1.der2['x1x1'][0] == 0.71383219164197809 assert z1.der2['x1x2'][0] == -1.4433756729740643 assert z1.der2['x2x1'][0] == -1.4433756729740643 assert z1.der2['x2x2'][0] == -1.262381242489897
def test_div(self): x1 = Variable(1, name='x1') x2 = Variable(4, name='x2') x3 = x1 / x2 x4 = x1 / 3 x5 = 3 / x1 assert x3.val == 1 / 4 assert x3.der == {'x1': 1 / 4, 'x2': -1 / 16} assert x4.val == 1 / 3 assert x4.der == {'x1': 1 / 3} assert x5.val == 3 assert x5.der == {'x1': -3}
def test_add(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x3 = +x1 + x2 # also test __pos__ x4 = -x1 + 5 # also test __neg__ x5 = 5 + x1 assert x3.val == 2 assert x3.der == {'x1': 1, 'x2': 1} assert x4.val == 4 assert x4.der == {'x1': -1} assert x5.val == 6 assert x5.der == {'x1': 1}
def test_pow(self): x1 = Variable(3, name='x1') x2 = Variable(2, name='x2') x3 = x1**x2 x4 = x1**3 # test the case where x2 is a constant x5 = 3**x1 # test __rpow__ assert x3.val == 9 assert x3.der == {'x1': 6, 'x2': 9 * np.log(3)} assert x4.val == 27 assert x4.der == {'x1': 27} assert x5.val == 27 assert x5.der == {'x1': np.log(3) * 3**3}
def test_sub(self): x1 = Variable(4, name='x1') x2 = Variable(1, name='x2') x3 = x1 - x2 x4 = x2 - x1 x5 = 4 - x1 x6 = x1 - 4 assert x3.val == 3 assert x3.der == {'x1': 1, 'x2': -1} assert x4.val == -3 assert x4.der == {'x1': -1, 'x2': 1} assert x5.val == 0 assert x5.der == {'x1': -1} assert x6.val == 0 assert x6.der == {'x1': 1}
def test_pow(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x = AutoDiff.sin(x1) y = AutoDiff.sin(x2) z1 = x**y z2 = 2**x z3 = x**2 assert z1.der2['x1x1'][0] == -0.77527835938046719 assert z1.der2['x1x2'][0] == 0.25644885963975589 assert z1.der2['x2x1'][0] == 0.25644885963975589 assert z1.der2['x2x2'][0] == 0.13312782635352052 assert z2.der2['x1x1'][0] == -0.79381233880392665 assert z3.der2['x1x1'][0] == -0.83229367309428459
def test_add_sub(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x = AutoDiff.sin(x1) y = AutoDiff.sin(x2) z1 = x+y z2 = x-y z3 = +x z4 = -x assert z1.der2 == {'x1x1': np.array([-0.8414709848078965]), 'x2x2': np.array([-0.8414709848078965]), 'x1x2':np.array([0.0]),'x2x1':np.array([0.0])} assert z2.der2 == {'x1x1': np.array([-0.8414709848078965]), 'x2x2': np.array([0.8414709848078965]), 'x1x2': np.array([0.0]),'x2x1':np.array([0.0])} assert z3.der2 == {'x1x1': np.array([-0.8414709848078965])} assert z4.der2 == {'x1x1': np.array([0.8414709848078965])}
def test_mul_div(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x = AutoDiff.sin(x1) y = AutoDiff.sin(x2) z1 = x*y z2 = x/y z3 = 1/x z4 = x/1 assert z1.der2['x1x1'][0] == -0.70807341827357118 assert z1.der2['x1x2'][0] == 0.29192658172642888 assert z1.der2['x2x1'][0] == 0.29192658172642888 assert z1.der2['x2x2'][0] == -0.70807341827357118 assert z2.der2['x1x1'][0] == -1.0 assert z2.der2['x1x2'][0] == -0.41228292743739203 assert z2.der2['x2x1'][0] == -0.41228292743739203 assert z2.der2['x2x2'][0] == 1.8245658548747841 assert z3.der2['x1x1'][0] == 2.1683051321030673 assert z4.der2['x1x1'][0] == -0.8414709848078965
def test_sqrt(self): x1 = Variable(1, name='x1') z1 = AutoDiff.sqrt(x1) assert z1.der2['x1x1'][0] == -0.25
def test_exp(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x3 = AutoDiff.exp(x1 + x2) assert x3.val == np.exp(1+1) assert x3.der == {'x1': np.exp(1+1), 'x2': np.exp(1+1)}
def test_sigmoid(self): x1 = Variable(0, name='x1') x2 = AutoDiff.sigmoid(x1) assert x2.val == 0.5 assert x2.der == {'x1': 0.25}
def test_mul(self): x1 = Variable(4, name='x1') x2 = Variable(1, name='x2') x3 = 3 * x1 * x2 * 3 assert x3.val == 36 assert x3.der == {'x1': 9, 'x2': 36}
def test_log(self): x1 = Variable(1, name='x1') x2 = Variable(1, name='x2') x3 = AutoDiff.log(x1 + x2) assert x3.val == np.log(1+1) assert x3.der == {'x1': 1/2, 'x2': 1/2}
def test_print(self): x1 = Variable(3, name='x1') print(x1) assert 1 == 1
def test_sqrt(self): x1 = Variable(1, name='x1') x2 = AutoDiff.sqrt(x1) assert x2.val == 1 assert x2.der == {'x1': 0.5}
def test_sigmoid(self): x1 = Variable(0, name='x1') z1 = AutoDiff.sigmoid(x1) assert z1.der2['x1x1'][0] == 0