Esempio n. 1
0
 def test_shortest_vector(self):
     raise SkipTest
     # simple cases
     uc = UnitCell(numpy.identity(3,float)*3)
     self.assertArraysAlmostEqual(uc.shortest_vector([3, 0, 1]), numpy.array([0, 0, 1]))
     self.assertArraysAlmostEqual(uc.shortest_vector([-3, 0, 1]), numpy.array([0, 0, 1]))
     self.assertArraysAlmostEqual(uc.shortest_vector([-2, 0, 1]), numpy.array([1, 0, 1]))
     self.assertArraysAlmostEqual(uc.shortest_vector([-1.6, 1, 1]), numpy.array([1.4, 1, 1]))
     self.assertArraysAlmostEqual(uc.shortest_vector([-1.4, 1, 1]), numpy.array([-1.4, 1, 1]))
     # simple cases
     uc = UnitCell(numpy.identity(3,float)*3, numpy.array([True, False, False]))
     self.assertArraysAlmostEqual(uc.shortest_vector([3, 0, 1]), numpy.array([0, 0, 1]))
     self.assertArraysAlmostEqual(uc.shortest_vector([3, 0, 3]), numpy.array([0, 0, 3]))
     # random tests
     for uc_counter in xrange(1000):
         uc = self.get_random_uc(full=False)
         for r_counter in xrange(10):
             r0 = numpy.random.normal(0, 10, 3)
             r1 = uc.shortest_vector(r0)
             change = r1 - r0
             self.assert_(numpy.dot(change, r0) <= 0)
             #self.assert_(numpy.linalg.norm(r0) >= numpy.linalg.norm(r1))
             index = uc.to_fractional(r0-r1)
             self.assertArraysAlmostEqual(index, numpy.round(index), doabs=True)
             index = uc.to_fractional(r1)
             self.assert_(index.max()<0.5)
             self.assert_(index.max()>=-0.5)
         r0 = numpy.random.normal(0, 10, (10,3))
         r1 = uc.shortest_vector(r0)
         for i in xrange(10):
             r1_row_bis = uc.shortest_vector(r0[i])
             self.assertArraysAlmostEqual(r1_row_bis, r1[i], doabs=True)
Esempio n. 2
0
 def test_distance_matrix_periodic(self):
     for i in xrange(1000):
         N = 6
         unit_cell = UnitCell(
             numpy.random.uniform(0,1,(3,3)),
             numpy.random.randint(0,2,3).astype(bool),
         )
         fractional = numpy.random.uniform(0,1,(N,3))
         coordinates = unit_cell.to_cartesian(fractional)
         from molmod.ext import molecules_distance_matrix
         dm = molecules_distance_matrix(coordinates, unit_cell.matrix,
                                        unit_cell.reciprocal)
         for i in xrange(N):
             for j in xrange(i,N):
                 delta = coordinates[j]-coordinates[i]
                 delta = unit_cell.shortest_vector(delta)
                 distance = numpy.linalg.norm(delta)
                 self.assertAlmostEqual(dm[i,j], distance)
Esempio n. 3
0
 def test_shortest_vector_aperiodic(self):
     unit_cell = UnitCell(numpy.identity(3, float), numpy.zeros(3, bool))
     shortest = unit_cell.shortest_vector(numpy.ones(3, float))
     expected = numpy.ones(3, float)
     self.assertArraysAlmostEqual(shortest, expected)
Esempio n. 4
0
 def test_shortest_vector_trivial(self):
     uc = UnitCell(numpy.identity(3, float))
     half = numpy.array([0.5,0.5,0.5])
     self.assertArraysEqual(uc.shortest_vector(half), -half)
     self.assertArraysEqual(uc.shortest_vector(-half), -half)