Ejemplo n.º 1
0
 def test_atan(self):
     a = Leaf(0.6)
     c = atan(a)
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, 1 / (1 + 0.6 * 0.6))
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 2
0
 def test_cos(self):
     a = Leaf(2.0)
     c = cos(a)
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, -math.sin(2.0))
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 3
0
 def test_acos(self):
     a = Leaf(0.6)
     c = acos(a)
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, -(1 - 0.36)**-0.5)
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 4
0
 def test_log(self):
     a = Leaf(4.0)
     c = log(a)
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, 0.25)
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 5
0
 def test_sqrt(self):
     a = Leaf(9.0)
     c = sqrt(a)
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, 1.0 / 6.0)
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 6
0
 def test_inv(self):
     a = Leaf(2.0)
     c = inv(a)
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, -0.25)
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 7
0
 def test_neg(self):
     a = Leaf(13.0)
     c = -a
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, -1.0)
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 8
0
 def test_tanh(self):
     a = Leaf(2.0)
     c = tanh(a)
     res = Derivative([c], [a])[0, 0].value
     self.assertEqual(res, math.cosh(2.0)**-2)
     del c
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 9
0
 def test_hook2(self):
     a = Leaf(1.0)
     b = exp(a)
     b_plain = b.plain()
     c = Derivative([b, b_plain], [a]).value
     self.assertEqual(c[0][0], b.value)
     self.assertEqual(c[1][0], 0.0)
Ejemplo n.º 10
0
 def test_squ(self):
     a = Leaf(13.0)
     c = a * a
     d = squ(a)
     res = Derivative([c, d], [a]).value
     self.assertListEqual(res, [[26.0], [26.0]])
     del c, d
     self.assertEqual(a.node.ref_count, 1)
Ejemplo n.º 11
0
 def test_div(self):
     a, b = Leaf(6.0), Leaf(4.0)
     c = a / b
     res = Derivative([c], [a, b])[0].value
     self.assertListEqual(res, [0.25, -0.375])
     del c
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Ejemplo n.º 12
0
 def test_mul(self):
     a, b = Leaf(11.0), Leaf(7.0)
     c = a * b
     res = Derivative([c], [a, b])[0].value
     self.assertListEqual(res, [7.0, 11.0])
     del c
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Ejemplo n.º 13
0
 def test_pow(self):
     a, b = Leaf(3.0), Leaf(4.0)
     c = a**b
     res = Derivative([c], [a, b])[0].value
     self.assertListEqual(res, [108.0, 81 * math.log(3.0)])
     del c
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Ejemplo n.º 14
0
 def test_sel(self):
     a, b = Leaf(13.0), Leaf(4.0)
     c = a.select(b)
     d = Derivative([c], [a, b])
     self.assertListEqual(d.value, [[1.0, 0.0]])
     b.value = -1.0
     d[0][0].invalidate()
     self.assertListEqual(d.value, [[0.0, 0.0]])
     del c, d
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Ejemplo n.º 15
0
    def test_empanadina(self):
        def func(x):
            y = x**6
            J = 6 * x**5
            return y, J

        a = Leaf(2.0)
        b = sqrt(a)

        y = empanadina(func, b)
        self.assertAlmostEqual(y.value, 8.0)
        self.assertAlmostEqual(Derivative([y], [a])[0, 0].value, 12.0)
Ejemplo n.º 16
0
    def test_multiple(self):
        a, b, c, d, e = map(Leaf, range(5))

        f = (a + b) * c
        g = b * b
        h = d * e
        i = h + f

        ref = [[2.0, 2.0, 1.0, 0.0], [0.0, 2.0, 0.0, 0.0],
               [0.0, 0.0, 0.0, 4.0], [2.0, 2.0, 1.0, 4.0]]

        res = Derivative([f, g, h, i], [a, b, c, d]).value
        self.assertListEqual(res, ref)
Ejemplo n.º 17
0
    def test_empanada(self):
        from math import sin as fsin, cos as fcos, exp as fexp, sqrt as fsqrt

        def func(x):
            a, b = x
            c = fexp(a + b)
            y = [a, a * fsin(b), c]
            J = [[1.0, 0.0], [fsin(b), a * fcos(b)], [c, c]]
            return y, J

        x = Leaf(2.0)
        z = [x * x, sqrt(x)]
        y = empanada(func, z, dim_out=3)

        dydx = Derivative(y, [x]).value
        dydx = [entry[0] for entry in dydx]

        ref = [
            4.0, 4 * fsin(fsqrt(2)) + fsqrt(2) * fcos(fsqrt(2)),
            (4 + 0.5 / fsqrt(2)) * fexp(4 + fsqrt(2))
        ]
        for r1, r2 in zip(dydx, ref):
            self.assertAlmostEqual(r1, r2)