test_periodic_table_indexing.py 2.45 KB
Newer Older
1
2
3
import unittest
import torch
import torchani
Jinze Xue's avatar
Jinze Xue committed
4
from torchani.testing import TestCase
5
6


Jinze Xue's avatar
Jinze Xue committed
7
class TestSpeciesConverter(TestCase):
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

    def setUp(self):
        self.c = torchani.SpeciesConverter(['H', 'C', 'N', 'O'])

    def testSpeciesConverter(self):
        input_ = torch.tensor([
            [1, 6, 7, 8, -1],
            [1, 1, -1, 8, 1],
        ], dtype=torch.long)
        expect = torch.tensor([
            [0, 1, 2, 3, -1],
            [0, 0, -1, 3, 0],
        ], dtype=torch.long)
        dummy_coordinates = torch.empty(2, 5, 3)
        output = self.c((input_, dummy_coordinates)).species
23
        self.assertEqual(output, expect)
24
25
26
27
28
29
30
31
32


class TestSpeciesConverterJIT(TestSpeciesConverter):

    def setUp(self):
        super().setUp()
        self.c = torch.jit.script(self.c)


Jinze Xue's avatar
Jinze Xue committed
33
class TestBuiltinEnsemblePeriodicTableIndex(TestCase):
34
35
36
37
38
39
40
41
42
43

    def setUp(self):
        self.model1 = torchani.models.ANI1x()
        self.model2 = torchani.models.ANI1x(periodic_table_index=True)
        self.coordinates = torch.tensor([[[0.03192167, 0.00638559, 0.01301679],
                                          [-0.83140486, 0.39370209, -0.26395324],
                                          [-0.66518241, -0.84461308, 0.20759389],
                                          [0.45554739, 0.54289633, 0.81170881],
                                          [0.66091919, -0.16799635, -0.91037834]]],
                                        requires_grad=True)
Ignacio Pickering's avatar
Ignacio Pickering committed
44
        self.species1 = self.model1.species_to_tensor(['C', 'H', 'H', 'H', 'H']).unsqueeze(0)
45
46
47
48
49
50
51
        self.species2 = torch.tensor([[6, 1, 1, 1, 1]])

    def testCH4Ensemble(self):
        energy1 = self.model1((self.species1, self.coordinates)).energies
        energy2 = self.model2((self.species2, self.coordinates)).energies
        derivative1 = torch.autograd.grad(energy1.sum(), self.coordinates)[0]
        derivative2 = torch.autograd.grad(energy2.sum(), self.coordinates)[0]
52
53
        self.assertEqual(energy1, energy2)
        self.assertEqual(derivative1, derivative2)
54
55
56
57
58
59

    def testCH4Single(self):
        energy1 = self.model1[0]((self.species1, self.coordinates)).energies
        energy2 = self.model2[0]((self.species2, self.coordinates)).energies
        derivative1 = torch.autograd.grad(energy1.sum(), self.coordinates)[0]
        derivative2 = torch.autograd.grad(energy2.sum(), self.coordinates)[0]
60
61
        self.assertEqual(energy1, energy2)
        self.assertEqual(derivative1, derivative2)
62
63
64
65


if __name__ == '__main__':
    unittest.main()