示例#1
0
文件: Units.py 项目: chrislxj/bgc_md2
    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)))
示例#2
0
文件: Units.py 项目: chrislxj/bgc_md2
 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)