コード例 #1
0
def test_add():
    with evaluate(False):
        expr = x + x
        assert isinstance(expr, Add)
        assert expr.args == (x, x)

        with evaluate(True):
            assert (x + x).args == (2, x)

        assert (x + x).args == (x, x)

    assert isinstance(x + x, Mul)

    with evaluate(False):
        assert S.One + 1 == Add(1, 1)
        assert 1 + S.One == Add(1, 1)

        assert S(4) - 3 == Add(4, -3)
        assert -3 + S(4) == Add(4, -3)

        assert S(2) * 4 == Mul(2, 4)
        assert 4 * S(2) == Mul(2, 4)

        assert S(6) / 3 == Mul(6, S.One / 3)
        assert S.One / 3 * 6 == Mul(S.One / 3, 6)

        assert 9**S(2) == Pow(9, 2)
        assert S(2)**9 == Pow(2, 9)

        assert S(2) / 2 == Mul(2, S.One / 2)
        assert S.One / 2 * 2 == Mul(S.One / 2, 2)

        assert S(2) / 3 + 1 == Add(S(2) / 3, 1)
        assert 1 + S(2) / 3 == Add(1, S(2) / 3)

        assert S(4) / 7 - 3 == Add(S(4) / 7, -3)
        assert -3 + S(4) / 7 == Add(-3, S(4) / 7)

        assert S(2) / 4 * 4 == Mul(S(2) / 4, 4)
        assert 4 * (S(2) / 4) == Mul(4, S(2) / 4)

        assert S(6) / 3 == Mul(6, S.One / 3)
        assert S.One / 3 * 6 == Mul(S.One / 3, 6)

        assert S.One / 3 + sqrt(3) == Add(S.One / 3, sqrt(3))
        assert sqrt(3) + S.One / 3 == Add(sqrt(3), S.One / 3)

        assert S.One / 2 * 10.333 == Mul(S.One / 2, 10.333)
        assert 10.333 * S.One / 2 == Mul(10.333, S.One / 2)

        assert sqrt(2) * sqrt(2) == Mul(sqrt(2), sqrt(2))

        assert S.One / 2 + x == Add(S.One / 2, x)
        assert x + S.One / 2 == Add(x, S.One / 2)

        assert S.One / x * x == Mul(S.One / x, x)
        assert x * S.One / x == Mul(x, S.One / x)
コード例 #2
0
def test_add():
    with evaluate(False):
        expr = x + x
        assert isinstance(expr, Add)
        assert expr.args == (x, x)

        with evaluate(True):
            assert (x + x).args == (2, x)

        assert (x + x).args == (x, x)

    assert isinstance(x + x, Mul)

    with evaluate(False):
        assert S(1) + 1 == Add(1, 1)
        assert 1 + S(1) == Add(1, 1)

        assert S(4) - 3 == Add(4, -3)
        assert -3 + S(4) == Add(4, -3)

        assert S(2) * 4 == Mul(2, 4)
        assert 4 * S(2) == Mul(2, 4)

        assert S(6) / 3 == Mul(6, S(1) / 3)
        assert S(1) / 3 * 6 == Mul(S(1) / 3, 6)

        assert 9 ** S(2) == Pow(9, 2)
        assert S(2) ** 9 == Pow(2, 9)

        assert S(2) / 2 == Mul(2, S(1) / 2)
        assert S(1) / 2 * 2 == Mul(S(1) / 2, 2)

        assert S(2) / 3 + 1 == Add(S(2) / 3, 1)
        assert 1 + S(2) / 3 == Add(1, S(2) / 3)

        assert S(4) / 7 - 3 == Add(S(4) / 7, -3)
        assert -3 + S(4) / 7 == Add(-3, S(4) / 7)

        assert S(2) / 4 * 4 == Mul(S(2) / 4, 4)
        assert 4 * (S(2) / 4) == Mul(4, S(2) / 4)

        assert S(6) / 3 == Mul(6, S(1) / 3)
        assert S(1) / 3 * 6 == Mul(S(1) / 3, 6)

        assert S(1) / 3 + sqrt(3) == Add(S(1) / 3, sqrt(3))
        assert sqrt(3) + S(1) / 3 == Add(sqrt(3), S(1) / 3)

        assert S(1) / 2 * 10.333 == Mul(S(1) / 2, 10.333)
        assert 10.333 * S(1) / 2 == Mul(10.333, S(1) / 2)

        assert sqrt(2) * sqrt(2) == Mul(sqrt(2), sqrt(2))

        assert S(1) / 2 + x == Add(S(1) / 2, x)
        assert x + S(1) / 2 == Add(x, S(1) / 2)

        assert S(1) / x * x == Mul(S(1) / x, x)
        assert x * S(1) / x == Mul(x, S(1) / x)
コード例 #3
0
def test_add():
    with evaluate(False):
        expr = x + x
        assert isinstance(expr, Add)
        assert expr.args == (x, x)

        with evaluate(True):
            assert (x + x).args == (2, x)

        assert (x + x).args == (x, x)

    assert isinstance(x + x, Mul)
コード例 #4
0
def test_add():
    with evaluate(False):
        expr = x + x
        assert isinstance(expr, Add)
        assert expr.args == (x, x)

        with evaluate(True):
            assert (x + x).args == (2, x)

        assert (x + x).args == (x, x)

    assert isinstance(x + x, Mul)
コード例 #5
0
def test_nested():
    with evaluate(False):
        expr = (x + x) + (y + y)
        assert expr.args == ((x + x), (y + y))
        assert expr.args[0].args == (x, x)
コード例 #6
0
def test_nested():
    with evaluate(False):
        expr = (x + x) + (y + y)
        assert expr.args == ((x + x), (y + y))
        assert expr.args[0].args == (x, x)
コード例 #7
0
def xu_ly_pt(formula_latex):
    '''
    input: (str) formula_latex is equation latex 
    ouput: (dict)
        + "pt_don_gian": (str) phương trình đơn giản 
        + "thanh_phan": ex('3*x^{2}|2*x|)
        + "keyword": (str) danh sách các keyword nhận biết phương trình or hệ phương trình
        + "variable_set": (str) danh sách các biến  cần tìm trong phương trình
        
    '''
    formula = tien_xu_ly_pt(formula_latex)
    # formula:{'pt':'3*x^{2} + 2*x + 4 = 0', 'key': '3*x^{2}|+|2*x|+|4|=|0'}
    # pt = parse_latex(formula)
    # pt_test = srepr(pt)
    # if 'Symbol' not in pt_test:
    #     with evaluate(False):
    #         pt = parse_latex(formula)
    # # convert sympy equation: Eq(ax+b = c) to ax + b - c
    # if pt.func in [Equality, GreaterThan, LessThan, StrictLessThan, StrictGreaterThan]:
    #     pt = pt.args[0] - pt.args[1] + S.One - S.One
    # else:
    #     pt=pt + S.One - S.One
    with evaluate(False):
        pt = parse_latex(formula)
    if pt.func in [
            Equality, GreaterThan, LessThan, StrictLessThan, StrictGreaterThan
    ]:
        pt = pt.args[0] - pt.args[1]
    check, a = forward(pt)

    if a.name == Add:
        is_add = True
    else:
        is_add = False
    if a.name == Mul:
        is_mul = True
    else:
        is_mul = False
    # biểu diễn công thức ở dạng sơ đồ cây
    #pt_chuan_hoa, keyword_para = trich_xuat_keyword(a,is_add, is_forward_variablemul)
    pt_chuan_hoa = toi_gian_cong_thuc(a, any([is_add, is_mul, check]))
    keyword_para = trich_xuat_keyword(a)
    keyword_para = list(set(keyword_para))
    for i in range(len(keyword_para)):
        keyword_para[i] = keyword_para[i].replace(' ', '')
        if keyword_para[i].startswith('-'):
            keyword_para[i] = keyword_para[i][1:]
    # tạo biến dict, var, chứa thông tin của 1 phương trình
    var = dict()
    # trường hợp biểu thức chỉ có số ko có ẩn, ta xem là bài tính giá trị biểu thức

    var['pt_don_gian'] = str(pt_chuan_hoa)
    var['thanh_phan'] = '|'.join(keyword_para)

    # trường hợp bất phương trình
    if ('\\leq' in formula) or ('\\geq' in formula) or ('<' in formula) or (
            '>' in formula):
        # add số biến biến của phương trình
        variable = lay_danh_sach_bien(pt_chuan_hoa)

        #ls_keyword_pt= []
        #ls_keyword_pt.append("bất phương trình")
        #var['keyword'] = "|".join(ls_keyword_pt)
        var['keyword'] = 'bất phương trình'
        var['ds_bien'] = "|".join([str(j) for j in set(variable)])

    else:
        # add số biến biến của phương trình
        variable = lay_danh_sach_bien(pt_chuan_hoa)

        #ls_keyword_pt= []
        #ls_keyword_pt.append("phương trình")
        #ls_keyword_pt.append("số biến "+ str(len(set(variable))))
        #var['keyword'] = "|".join(ls_keyword_pt)
        var['keyword'] = 'phương trình'
        var['ds_bien'] = "|".join([str(j) for j in set(variable)])
    return var