def test_boomerang_mobility_spd(self):
        ''' Test that the mobility is SPD for random configuration. '''
        theta = np.random.normal(0., 1., 4)
        theta = Quaternion(theta / np.linalg.norm(theta))
        location = [np.random.uniform(2.5, 4.) for _ in range(3)]

        mobility = bmr.boomerang_mobility([location], [theta])

        def is_pos_def(x):
            return np.all(np.linalg.eigvals(x) > 0)

        self.assertTrue(is_pos_def(mobility))
        for j in range(6):
            for k in range(j + 1, 6):
                self.assertAlmostEqual(mobility[j][k], mobility[k][j])
    def test_change_mobility_origin(self):
        ''' This tests the function in utils.py that transforms a mobility
    about one point to a mobility about another.
    '''
        # Random location and orientation
        location = [[0., 0., np.random.uniform(4., 7.)]]
        orientation = np.random.normal(0., 1., 4)
        orientation = [Quaternion(orientation / np.linalg.norm(orientation))]

        mobility = bmr.boomerang_mobility(location, orientation)

        # Choose a random other point, evaluate mobility.
        point = location[0] + np.random.normal(0., 1., 3)
        mobility_2 = bmr.boomerang_mobility_at_arbitrary_point(
            location, orientation, point)
        # Transfer mobility to point using util function.
        transferred_mobility_2 = transfer_mobility(mobility, location[0],
                                                   point)

        # Compare results.
        for j in range(0, 6):
            for k in range(0, 6):
                self.assertAlmostEqual(mobility_2[j, k],
                                       transferred_mobility_2[j, k])