Example #1
0
 def test_inv(self):
     a = Leaf(2.0)
     c = inv(a)
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, -0.25)
     del c
     self.assertEqual(a.node.ref_count, 1)
Example #2
0
 def test_tanh(self):
     a = Leaf(2.0)
     c = tanh(a)
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, math.cosh(2.0)**-2)
     del c
     self.assertEqual(a.node.ref_count, 1)
Example #3
0
 def test_sqrt(self):
     a = Leaf(9.0)
     c = sqrt(a)
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, 1.0 / 6.0)
     del c
     self.assertEqual(a.node.ref_count, 1)
Example #4
0
 def test_acos(self):
     a = Leaf(0.6)
     c = acos(a)
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, -(1 - 0.36)**-0.5)
     del c
     self.assertEqual(a.node.ref_count, 1)
Example #5
0
 def test_atan(self):
     a = Leaf(0.6)
     c = atan(a)
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, 1 / (1 + 0.6 * 0.6))
     del c
     self.assertEqual(a.node.ref_count, 1)
Example #6
0
 def test_neg(self):
     a = Leaf(13.0)
     c = -a
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, -1.0)
     del c
     self.assertEqual(a.node.ref_count, 1)
Example #7
0
 def test_cos(self):
     a = Leaf(2.0)
     c = cos(a)
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, -math.sin(2.0))
     del c
     self.assertEqual(a.node.ref_count, 1)
Example #8
0
 def test_pow(self):
     a, b = Leaf(3.0), Leaf(4.0)
     c = a**b
     res = sparse_derivative([c], [a, b])
     res = [res[0][0].value, res[0][1].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)
Example #9
0
 def test_squ(self):
     a = Leaf(13.0)
     c = a * a
     d = squ(a)
     res = sparse_derivative([c, d], [a])
     res = [res[0][0].value, res[1][0].value]
     self.assertListEqual(res, [[26.0], [26.0]])
     del c, d
     self.assertEqual(a.node.ref_count, 1)
Example #10
0
 def test_div(self):
     a, b = Leaf(6.0), Leaf(4.0)
     c = a / b
     res = sparse_derivative([c], [a, b])
     res = [res[0][0].value, res[0][1].value]
     self.assertListEqual(res, [0.25, -0.375])
     del c
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Example #11
0
 def test_sub(self):
     a, b = Leaf(11.0), Leaf(7.0)
     c = a - b
     res = sparse_derivative([c], [a, b])
     res = [res[0][0].value, res[0][1].value]
     self.assertListEqual(res, [1.0, -1.0])
     del c
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Example #12
0
 def test_sel(self):
     a, b = Leaf(13.0), Leaf(4.0)
     c = a.select(b)
     d = sparse_derivative([c], [a, b])
     dv = [d[0][0].value, d[0][1].value]
     self.assertListEqual(dv, [1.0, 0.0])
     b.value = -1.0
     d[0][0].invalidate()
     self.assertEqual(d[0][0].value, 0.0)
     del c, d
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Example #13
0
 def test_mul(self):
     a, b = Leaf(11.0), Leaf(7.0)
     print("Def a:", a.node.ref_count)
     c = a * b
     print("Def c:", a.node.ref_count)
     res = sparse_derivative([c], [a, b])
     print("Der c:", a.node.ref_count)
     res = [res[0][0].value, res[0][1].value]
     self.assertListEqual(res, [7.0, 11.0])
     print("Del res:", a.node.ref_count)
     del c
     print("Del c:", a.node.ref_count)
     self.assertEqual(a.node.ref_count, 1)
     self.assertEqual(b.node.ref_count, 1)
Example #14
0
 def test_sparse(self):
     ind = [Leaf(i) for i in range(5)]
     dep = [ind[0] * ind[1], ind[3] + ind[4], ind[1] / ind[4], sin(ind[3])]
     deri = sparse_derivative(dep, ind)
     ref = {
         0: {
             0: 1.0,
             1: 0.0
         },
         1: {
             3: 1.0,
             4: 1.0
         },
         2: {
             1: 1 / 4,
             4: -1 / 16
         },
         3: {
             3: math.cos(3)
         }
     }
     for d, di in deri.items():
         for i, v in di.items():
             self.assertAlmostEqual(v.value, ref[d][i], delta=1e-10)