示例#1
0
    def test_type(self):
        # Unit quaternion can be unitary or general:
        assert isinstance(GeneralQuaternion.unit(), GeneralQuaternion)
        assert isinstance(Quaternion.unit(), Quaternion)

        # Unit quaternion can not be unitary:
        assert isinstance(GeneralQuaternion.zero(), GeneralQuaternion)
        assert not isinstance(Quaternion.zero(), Quaternion)
        assert isinstance(Quaternion.zero(), GeneralQuaternion)

        assert isinstance(exp(GeneralQuaternion(1, 2, 3, 4)), GeneralQuaternion)
        assert isinstance(exp(Quaternion(1, 2, 3, 4)), Quaternion)

        assert isinstance(log(Quaternion(1, 2, 3, 4)), GeneralQuaternion)
        assert not isinstance(log(Quaternion(1, 2, 3, 4)), Quaternion)
 def test_log_identity(self):
     assert log(GeneralQuaternion.unit()) == GeneralQuaternion.zero()
 def test_log_identical_both_ways(self, arr):
     assume(np.linalg.norm(arr) > DEFAULT_TOLERANCE)
     q = GeneralQuaternion(*arr)
     assert log(q) == q.log()
 def test_exp_log(self, arr):
     assume(np.linalg.norm(arr) > DEFAULT_TOLERANCE)
     q = GeneralQuaternion(*arr).normalized()
     assert exp(log(q)) == q
     assert log(exp(q)) == GeneralQuaternion(*q.coordinates)
 def test_exp_log(self, arr):
     assume(np.linalg.norm(arr) > DEFAULT_TOLERANCE)
     q = GeneralQuaternion(*arr).normalized()
     assert exp(log(q)) == q
     assert (log(exp(q)).imaginary.tolist() == pytest.approx(
         q.imaginary.tolist()))  # log defined up to real