diff --git a/nessesary/equation/processing.py b/nessesary/equation/processing.py new file mode 100644 index 0000000..78f28f1 --- /dev/null +++ b/nessesary/equation/processing.py @@ -0,0 +1,99 @@ +from nessesary.polynomial import Polynomial +from nessesary.parser.parser import is_letter, is_op + +def change_side(equa:str): + """ + Change all left side expression of = sign + to right side. + >>> change_side("x+2-x^2 = 32-x^3") + 'x+2-x^2-32+x^3=0' + """ + temp = '' + for i in equa: + if i == " ": + temp += "" + else: + temp += i + + equa = temp + + llist = equa.split("=") + left_side, right_side = llist[0], llist[1] + + temp = '' + if (right_side[0] != "-") or (right_side[0] != "+"): + temp += '+' + temp += right_side + right_side = temp + for i in right_side: + if i == "+": + left_side += "-" + elif i == "-": + left_side += "+" + else: + left_side += i + return left_side + +def simplify(expr:str): + """ + Use to_str() method of polynomial. + to sum and sub all coefficient. + """ + poly = Polynomial(expr) + try: + result = poly.to_str() + return result + except: + raise ValueError + +def solver(expr:str): + """ + Solve expression that using polynomial solve(). + """ + poly = Polynomial(expr) + try: + result = poly.solve() + return result + except: + raise ValueError + +def poly_expand(expr:str): + """ + Add Polynomial Text to all element that + can make polynomial. + >>> poly_expand("(3x+2)^3+4x+5-2+(5x^2)^3") + 'Polynomial("3x+2")**3+Polynomial("4x")+Polynomial("5x^2")**3' + """ + i = 0 + result = "" + found = False + added = False + while i < len(expr): + char = expr[i] + if char == "(": + result += "Polynomial(" + i += 1 + found = True + else: + if not found: + if added and is_op(char): + result += f"){char}" + + added = False + if is_op(char) and char != "^": + result += f"{char}Polynomial(" + i += 1 + added = True + continue + result += char + i += 1 + + if char == ")": + found = False + + result = result.replace("++", "+").replace("--","-") + result = result.replace("^^", "^") + result = result.replace("))", ")") + result = result.replace("^", "**") + result = result.replace("Polynomial(Polynomial(", "Polynomial(") + return result