def test_dimensions_of_expressions(self): a = Quantity("a") SI.set_quantity_dimension(a, length) t = Quantity("t") SI.set_quantity_dimension(t, time) res = a**2 / t # we can now determine the physical dimension of res res_dim = SI.get_dimensional_expr(res) self.assertTrue(dimsys_SI.equivalent_dims(res_dim, length**2 / time)) # In parameter dicts we can describe values along with units a_val = Quantity("a_val") SI.set_quantity_dimension(a_val, length) SI.set_quantity_scale_factor(a_val, 5 * meter) parameter_dict = {a: 5 * meter, t: 4 * second} res_val = res.subs(parameter_dict) # we can now determine the physical dimension of res_val # and check it against the expected print(SI.get_dimensional_expr(res_val)) self.assertTrue( dimsys_SI.equivalent_dims(SI.get_dimensional_expr(res), SI.get_dimensional_expr(res_val)))
def v_unit(t): # Note: # At the moment t has to be a scalar cond_1 = simplify(t) == 0 cond_2 = dimsys_SI.equivalent_dims(SI.get_dimensional_expr(t), time) assert cond_1 | cond_2 omega = 2 * pi / second # phi = 0 phi = pi / 8 V_0 = 20 * meter / second V_range = 5 * meter / second return V_0 + V_range * sin(omega * t + phi)
def test_Dimension_mul_div_exp(): assert 2*length == length*2 == length/2 == length assert 2/length == 1/length x = Symbol('x') m = x*length assert m == length*x and m.is_Mul and set(m.args) == {x, length} d = x/length assert d == x*length**-1 and d.is_Mul and set(d.args) == {x, 1/length} d = length/x assert d == length*x**-1 and d.is_Mul and set(d.args) == {1/x, length} velo = length / time assert (length * length) == length ** 2 assert dimsys_SI.get_dimensional_dependencies(length * length) == {"length": 2} assert dimsys_SI.get_dimensional_dependencies(length ** 2) == {"length": 2} assert dimsys_SI.get_dimensional_dependencies(length * time) == { "length": 1, "time": 1} assert dimsys_SI.get_dimensional_dependencies(velo) == { "length": 1, "time": -1} assert dimsys_SI.get_dimensional_dependencies(velo ** 2) == {"length": 2, "time": -2} assert dimsys_SI.get_dimensional_dependencies(length / length) == {} assert dimsys_SI.get_dimensional_dependencies(velo / length * time) == {} assert dimsys_SI.get_dimensional_dependencies(length ** -1) == {"length": -1} assert dimsys_SI.get_dimensional_dependencies(velo ** -1.5) == {"length": -1.5, "time": 1.5} length_a = length**"a" assert dimsys_SI.get_dimensional_dependencies(length_a) == {"length": Symbol("a")} assert length != 1 assert length / length != 1 length_0 = length ** 0 assert dimsys_SI.get_dimensional_dependencies(length_0) == {} # issue 18738 a = Symbol('a') b = Symbol('b') c = sqrt(a**2 + b**2) c_dim = c.subs({a: length, b: length}) assert dimsys_SI.equivalent_dims(c_dim, length)