Esempio n. 1
0
    def test_cache(self):
        a = Leaf(3.0)
        b = 1 / a
        self.assertEqual(b.node.tid, ID_INV)

        c = 12.0 / sin(a)
        d = 12.0 - sin(a)
        self.assertEqual(id(c.node.childs[0].tid), id(d.node.childs[0].tid))
Esempio n. 2
0
 def test_sin(self):
     a = Leaf(2.0)
     c = sin(a)
     res = sparse_derivative([c], [a])[0][0].value
     self.assertEqual(res, math.cos(2.0))
     del c
     self.assertEqual(a.node.ref_count, 1)
Esempio n. 3
0
 def test_a_bit_more(self):
     N = 10000
     a, b = map(Leaf, (2.0, 3.0))
     c = [sin(a + b) for _ in range(N)]
     dups = simplify(c)
     self.assertEqual(dups, 2 * N - 2)
     self.assertEqual(a.node.ref_count, 2)
Esempio n. 4
0
 def test_nested(self):
     N = 300  # not much more, stack would be exhausted
     c = a = Leaf(2.0)
     for _ in range(N):
         c = c + sin(a)
     dups = simplify(c)
     self.assertEqual(dups, N - 1)
     self.assertEqual(a.node.ref_count, 3)
Esempio n. 5
0
 def _do_calcs(self, a, b):
     av, bv = a.value, b.value
     self.assertEqual((a * b).value, av * bv)
     self.assertEqual((a / b).value, av / bv)
     self.assertEqual((a - b).value, av - bv)
     self.assertEqual((-a).value, -av)
     self.assertEqual((a ** b).value, av ** bv)
     self.assertEqual(sin(a).value, math.sin(av))
     self.assertEqual(cos(a).value, math.cos(av))
     self.assertEqual(tan(a).value, math.tan(av))
     a.value = av = 0.6
     self.assertEqual(asin(a).value, math.asin(av))
     self.assertEqual(acos(a).value, math.acos(av))
     self.assertEqual(atan(a).value, math.atan(av))
     self.assertEqual(sinh(a).value, math.sinh(av))
     self.assertEqual(cosh(a).value, math.cosh(av))
     self.assertEqual(tanh(a).value, math.tanh(av))
     self.assertEqual(sqrt(a).value, math.sqrt(av))
     self.assertEqual(log(a).value, math.log(av))
     self.assertEqual(exp(a).value, math.exp(av))
     self.assertEqual(squ(a).value, av*av)
     self.assertEqual(inv(a).value, 1.0 / av)
Esempio n. 6
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)