| import gradio as gr |
| import matplotlib.pyplot as plt |
| import numpy as np |
| import cmath |
|
|
|
|
| class Quadratic: |
| """Representing a quadratic expression in the form of ax² + bx + c""" |
|
|
| def __init__(self, a: float, b: float, c: float) -> None: |
| if all(isinstance(i, (int, float)) for i in (a, b, c)): |
| if a == 0: |
| raise ValueError("Coefficient 'a' cannot be 0 for a quadratic equation.") |
| self.a = a |
| self.b = b |
| self.c = c |
| else: |
| raise ValueError("Arguments must be int or float") |
|
|
| def __repr__(self) -> str: |
| return f"{self.a}x² + {self.b}x + {self.c}" |
|
|
| def solveQuad(self): |
| """Returns roots (real or complex)""" |
| discriminant = self.b**2 - 4 * self.a * self.c |
| root1 = (-self.b + cmath.sqrt(discriminant)) / (2 * self.a) |
| root2 = (-self.b - cmath.sqrt(discriminant)) / (2 * self.a) |
| return root1, root2 |
|
|
| def evaluate(self, value): |
| return (self.a * value**2) + (self.b * value) + self.c |
|
|
| def drawFigure(self): |
| x_axis = np.linspace(-10, 10, 200) |
| y_axis = self.evaluate(x_axis) |
|
|
| fig, ax = plt.subplots() |
| ax.plot(x_axis, y_axis) |
| ax.axhline(0) |
| ax.axvline(0) |
| ax.grid(True) |
| ax.set_title(str(self)) |
|
|
| return fig |
|
|
|
|
| |
| def solve_and_plot(a, b, c): |
| try: |
| |
| a = float(a) |
| b = float(b) |
| c = float(c) |
|
|
| quad = Quadratic(a, b, c) |
| root1, root2 = quad.solveQuad() |
| fig = quad.drawFigure() |
|
|
| result = ( |
| f"Equation: {quad}\n\n" |
| f"Root 1: {root1}\n" |
| f"Root 2: {root2}" |
| ) |
|
|
| return result, fig |
|
|
| except Exception as e: |
| return f"Error: {str(e)}", None |
|
|
|
|
| |
| theme = gr.themes.Ocean( |
| font=[ |
| gr.themes.GoogleFont("Libertinus Math"), |
| "ui-sans-serif", |
| "system-ui" |
| ] |
| ) |
|
|
|
|
| |
| interface = gr.Interface( |
| fn=solve_and_plot, |
| inputs=[ |
| gr.Textbox(label="Coefficient a", value="0"), |
| gr.Textbox(label="Coefficient b", value="0"), |
| gr.Textbox(label="Coefficient c", value="0"), |
| ], |
| outputs=[ |
| gr.Textbox(label="Solution"), |
| gr.Plot(label="Graph"), |
| ], |
| title="Quadratic Equation Solver", |
| description="Solve ax² + bx + c = 0 and visualize its graph • Made by Pratham Tripathi", |
| theme=theme |
| ) |
|
|
|
|
| |
| if __name__ == "__main__": |
| interface.launch() |