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)
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)