def test_doit(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        assert VecCross(vn1, vn2).doit() - vn1.cross(vn2) == Vector.zero
        assert VecCross(nabla, vn2).doit() - curl(vn2) == Vector.zero

        vn3 = C.x * C.y * C.z * C.i + C.x * C.y * C.z * C.j + C.x * C.y * C.z * C.k
        assert VecCross(nabla, vn3).doit() - curl(vn3) == Vector.zero

        expr = VecCross(v2 * VecDot(vn1, vn2), v1).doit()
        assert isinstance(expr.args[0].args[0], Add)
        expr = VecCross(v2 * VecDot(vn1, vn2), v1).doit(deep=False)
        assert isinstance(expr.args[0], VecMul)
    def test_reverse(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        assert VecDot(v1, v2).reverse == VecDot(v2, v1)
        assert VecDot(vn1, v2).reverse == VecDot(v2, vn1)
        assert VecDot(v1, vn2).reverse == VecDot(vn2, v1)
        assert VecDot(vn1, vn2).reverse == VecDot(vn2, vn1)
    def test_doit(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        expr = VecAdd(v1, v2, v1, evaluate=False)
        assert not self._check_args(expr, VecAdd(VecMul(2, v1), v2))
        assert self._check_args(expr.doit(), VecAdd(VecMul(2, v1), v2))

        expr = VecAdd(v1, v2, VecAdd(v1, v2, evaluate=False), evaluate=False)
        assert not self._check_args(expr, VecAdd(VecMul(2, v1), VecMul(2, v2)))
        assert self._check_args(expr.doit(),
                                VecAdd(VecMul(2, v1), VecMul(2, v2)))

        r = vn1 + vn2
        assert VecAdd(vn1, vn2).doit() == r

        expr = VecAdd(v1.mag, VecDot(vn1, vn2))
        assert self._check_args(expr.doit(deep=False), expr)
        assert self._check_args(expr.doit(), VecAdd(v1.mag, vn1 & vn2))

        # test the rule default_sort_key used into VecAdd.doit
        assert VecAdd(v1, one, v2).doit().args == (one, v1, v2)
        assert VecAdd(v1, VecCross(v1, v2),
                      one).doit().args == (VecCross(v1, v2), one, v1)
        # test the rule merge_explicit used into VecAdd.doit
        assert VecAdd(vn1, vn2).doit() == vn1 + vn2
        assert self._check_args(
            VecAdd(vn1, vn2, one).doit(), VecAdd(one, vn1 + vn2))
    def test_doit(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        expr = VecPow(VecDot(vn1, vn2), v1.mag)
        assert isinstance(expr, VecPow)
        assert isinstance(expr.doit(deep=False), VecPow)
        assert isinstance(expr.doit(), Pow)
예제 #5
0
    def test_doit(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        v = C.x * C.y * C.z
        assert gradient(v) == Grad(v).doit()

        expr = v * (VecDot(vn1, vn2))
        assert isinstance(Grad(expr).doit(deep=False), Grad)
        assert isinstance(Grad(expr).doit(), Vector)
    def test_is_vector(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        # one argument
        assert not VecMul(1).is_Vector
        assert not VecMul(x).is_Vector
        assert VecMul(one).is_Vector
        assert VecMul(v1).is_Vector
        # two arguments
        assert VecMul(one, x).is_Vector
        assert VecMul(0, one).is_Vector
        assert not VecMul(0, x).is_Vector
        assert VecMul(v1, 2).is_Vector
        assert not VecMul(v1.mag, 2).is_Vector
        assert VecMul(v1.mag, v2).is_Vector
        assert VecMul(v1 + v2, v2.mag).is_Vector
        assert VecMul(v1 + v2, 3).is_Vector
        assert VecMul(v1 + v2, (v1 + v2).mag).is_Vector
        # with dot product and nested mul/dot
        assert not VecMul(3, VecDot(v1, v2)).is_Vector
        assert VecMul(3, VecMul(v1, VecDot(v1, v2))).is_Vector
        assert VecMul(3, v1 + v2, VecMul(VecDot(v1, v2), x)).is_Vector
        # with cross product and nested mul/cross
        assert VecMul(3, VecCross(v1, v2)).is_Vector
        assert VecMul(3, v1.mag, VecMul(x, VecCross(v1, v2))).is_Vector
        # with cross and dot products
        assert VecMul(3, VecDot(v1, v2), VecMul(x, VecCross(v1, v2))).is_Vector
        assert not VecMul(3, VecDot(v1, v2),
                          VecDot(VecMul(x, VecCross(v1, v2)), v1)).is_Vector
    def test_is_vector(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        assert not VecDot(v1, zero).is_Vector
        assert VecDot(v1, zero).is_scalar
        assert not VecDot(v1, v2).is_Vector
        assert not VecDot(vn1, vn2).is_Vector
        assert not VecDot(v1, vn1).is_Vector
        assert not VecDot(v1 ^ v2, v1).is_Vector
    def test_creation(self):
        v1, v2, zero, one, nabla, C, vn1, vn2 = self._get_vars()
        
        assert isinstance(Normalize(v1), Normalize)
        assert isinstance(Normalize(one), Normalize)
        assert Normalize(zero) == zero
        assert isinstance(Normalize(x * v1), Normalize)

        def func(arg):
            with self.assertRaises(TypeError) as context:
                Normalize(arg)

        assert isinstance(Normalize(v1 + v2), Normalize)
        assert isinstance(Normalize(vn1), Normalize)

        args = [nabla, 1, v1.mag, VecDot(v1, v2)]
        for a in args:
            func(a)

        assert isinstance(Normalize(v1.norm), Normalize)
 def func(*args):
     with self.assertRaises(TypeError):
         VecDot(*args)
    def test_creation(self):
        v1, v2, zero, one, nabla, C, vn1, vn2, x, y, z = self._get_vars()

        assert VecDot(v1, zero) == S.Zero
        assert VecDot(zero, v1) == S.Zero
        assert isinstance(VecDot(v1, v1), VecDot)
        assert isinstance(VecDot(v1, v2), VecDot)
        assert isinstance(VecDot(v1, v1.norm), VecDot)
        assert isinstance(VecDot(v1.norm, v1), VecDot)
        assert isinstance(VecDot(nabla, v1), VecDot)
        assert isinstance(VecDot(v1, vn1), VecDot)
        assert isinstance(VecDot(vn1, v1), VecDot)
        assert isinstance(VecDot(v1 + v2, v1), VecDot)
        assert isinstance(VecDot(v1.mag * v2, v1), VecDot)
        assert isinstance(VecDot(v1 ^ v2, v1), VecDot)
        assert isinstance(VecDot((v1 ^ v2) * v1.mag, v1), VecDot)

        def func(*args):
            with self.assertRaises(TypeError):
                VecDot(*args)

        func(x, v1)
        func(v1, x)
        func(v1, v1.mag)
        func(zero, 0)
        func(nabla, nabla)
        func(v1, nabla)