small stress testing

This commit is contained in:
2026-05-01 19:26:08 -04:00
parent d8632115b1
commit 436dda33a3
7 changed files with 74 additions and 33 deletions

View File

@@ -278,12 +278,10 @@ def trinomial_by_grouping(equation, inner):
terms = left_expr.as_ordered_terms()
t1, t2, t3, t4 = terms[0], terms[1], terms[2], terms[3]
factored_part1 = factor(t1 + t2)
if t3 != -x:
div = gcd(t3, t4)
factored_part2 = factor(t3 + t4)
else:
div = -1
factored_part2 = Mul(-1,(-t3 - t4), evaluate=False)
base = gcd(sum(terms[2:]), factored_part1)
div = simplify(sum(terms[2:]) / base)
factored_part2 = simplify((t3 + t4) / div)
factored_part2 = Mul(div,factored_part2, evaluate=False)
rest = sum(terms[2:])
new_left_expr = Add(factored_part1, rest, evaluate=False)
if n != 1:
@@ -313,10 +311,10 @@ def trinomial_by_grouping(equation, inner):
terms = left_expr.as_ordered_terms()
factors = [set(t.as_ordered_factors()) for t in terms]
common = set.intersection(*factors)
print(f"common:{common}, factors:{factors}, terms:{terms}, left_expr:{sstr(left_expr)}")
base = list(common)[0]
coeffs = [t.coeff(base) for t in terms]
new_expr = sum(coeffs) * base
#print(f"coeffs:{sstr(sum(coeffs))}, base:{sstr(base)}")
new_expr = Mul(sum(coeffs), base, evaluate=False)
new_left_expr = new_expr
if n != 1:
new_left_expr = flatten_mul(Mul(n, new_left_expr, evaluate=False))
@@ -325,6 +323,25 @@ def trinomial_by_grouping(equation, inner):
steps[-1]["step"] = f"Factor out the common factor ({sstr(base)})"
steps[-1]["rule"] = "Reverse Distributive Property"
## Flatten out identical roots optionally
if sum(coeffs) == base:
steps.append({})
steps[-1]["before"] = steps[-2]["after"]
new_left_expr = flatten_mul(Mul(n, Mul(2, base, evaluate=False), evaluate=False))
steps[-1]["after"] = f"{sstr(new_left_expr)} = {sstr(right_expr)}"
steps[-1]["step"] = f"Collect the factor ({sstr(base)})"
steps[-1]["rule"] = "Collect Like Terms"
## multiply outer number
steps.append({})
steps[-1]["before"] = steps[-2]["after"]
new_left_expr = flatten_mul(Mul(2*n, base, evaluate=False))
steps[-1]["after"] = f"{sstr(new_left_expr)} = {sstr(right_expr)}"
steps[-1]["step"] = f"Multiply Outer Numbers"
steps[-1]["rule"] = "Simplify"
return steps
def solve_roots(equation):
@@ -375,7 +392,7 @@ def solve_roots(equation):
current = steps[-1]["after"]
a = clean_factor.coeff(x)
b = clean_factor.subs(x, 0)
if b.is_zero == False:
if b.is_nonzero:
if b.is_negative:
steps.append(add_both_sides(current, -b))
elif b.is_positive: