예제 #1
0
    def test_always_single_batch_shape(self):
        a = ltd.TermDynamic(torch.randn(1, 100, 2))
        b = ltd.TermDynamic(torch.randn(1, 100, 2))

        con = ltd.Always(ltd.EQ(a, b), 100)
        self.assertEqual(con.loss(0).shape, torch.Size([1]))
        self.assertEqual(con.satisfy(0).shape, torch.Size([1]))
예제 #2
0
    def test_gt_batch_shape(self):
        a = ltd.TermDynamic(torch.randn(32, 100, 2))
        b = ltd.TermDynamic(torch.randn(32, 100, 2))

        con = ltd.GT(a, b)
        self.assertEqual(con.loss(0).shape, torch.Size([32]))
        self.assertEqual(con.satisfy(0).shape, torch.Size([32]))
예제 #3
0
    def test_eventually_false_stressfull_large(self):
        a = ltd.TermDynamic(torch.ones(32, 100, 7))
        b = ltd.TermDynamic(torch.ones(32, 100, 7) + 100)

        con = ltd.Eventually(ltd.EQ(a, b), 100)

        self.assertAlmostEqual(con.loss(0)[0].item(), np.sqrt(70000), places=3)
        self.assertEqual(con.satisfy(0)[0], False)
예제 #4
0
    def test_eventually_false_is_nonzero(self):
        a = ltd.TermDynamic(torch.ones(32, 10, 2))
        b = ltd.TermDynamic(torch.ones(32, 10, 2) + 1)

        con = ltd.Eventually(ltd.EQ(a, b), 10)

        self.assertAlmostEqual(con.loss(0)[0].item(), np.sqrt(2.0), places=3)
        self.assertEqual(con.satisfy(0)[0], False)
예제 #5
0
    def test_eventually_shape(self):
        a = ltd.TermDynamic(torch.ones(64, 10000, 7))
        b = ltd.TermDynamic(torch.ones(64, 10000, 7))

        con = ltd.Eventually(ltd.EQ(a, b), 10000)

        self.assertEqual(con.loss(0).shape, torch.Size([64]))
        self.assertEqual(con.satisfy(0).shape, torch.Size([64]))
예제 #6
0
    def test_always_equal(self):
        a = ltd.TermDynamic(torch.ones(64, 10000, 7))
        b = ltd.TermDynamic(torch.ones(64, 10000, 7))

        con = ltd.Always(ltd.EQ(a, b), 10000)
        actual_loss = con.loss(0)

        self.assertEqual(actual_loss[0], 0.0)
        self.assertEqual(con.satisfy(0).all(), True)
예제 #7
0
    def test_eventually_false_stressful_small(self):
        a = ltd.TermDynamic(torch.ones(32, 100, 1))
        b = ltd.TermDynamic(torch.ones(32, 100, 1) + 0.1)

        con = ltd.Eventually(ltd.EQ(a, b), 100)
        actual_loss = con.loss(0)

        self.assertNotEqual(con.loss(0)[0], 0.0)
        self.assertAlmostEqual(con.loss(0)[0].item(), 0.1)
        self.assertEqual(con.satisfy(0)[0], False)
예제 #8
0
    def test_eventually_true_is_zero(self):
        a = ltd.TermDynamic(torch.ones(32, 10, 2))
        b = torch.ones(32, 10, 2) + 1
        b[0][5] -= 1
        b = ltd.TermDynamic(b)

        con = ltd.Eventually(ltd.EQ(a, b), 10)

        self.assertEqual(con.loss(0)[0], 0.0)
        self.assertEqual(con.satisfy(0)[0], True)
예제 #9
0
    def test_always_unequal_huge(self):
        a = ltd.TermDynamic(torch.ones(64, 10000, 7))
        b = ltd.TermDynamic(torch.ones(64, 10000, 7) + 1000)

        con = ltd.Always(ltd.EQ(a, b), 10000)

        expected_loss = torch.ones(64) * np.sqrt(7000000)
        actual_loss = con.loss(0)

        self.assertAlmostEqual(actual_loss[0].item(),
                               expected_loss[0].item(),
                               places=1)
        self.assertEqual(con.satisfy(0).all(), False)
예제 #10
0
    def test_always_unequal_stress(self):
        a = ltd.TermDynamic(torch.ones(64, 10000, 7))
        b = ltd.TermDynamic(torch.ones(64, 10000, 7) + 1)

        con = ltd.Always(ltd.EQ(a, b), 10000)

        expected_loss = torch.ones(64) * np.sqrt(7)
        actual_loss = con.loss(0)

        # Note that the numerical errors start to mount up
        # In the end we can only get it to about 1 decimal place of accuracy
        self.assertAlmostEqual(actual_loss[0].item(),
                               expected_loss[0].item(),
                               places=4)
        self.assertEqual(con.satisfy(0).all(), False)
예제 #11
0
    def test_eq_dynamic_batch_shape(self):
        a = ltd.TermDynamic(torch.randn(32, 100, 2))
        b = ltd.TermDynamic(torch.randn(32, 100, 2))

        con = ltd.EQ(a, b)
        self.assertEqual(con.loss(0).shape, torch.Size([32]))