Spaces:
Sleeping
Sleeping
from __future__ import annotations | |
from src.main import Derivative | |
import numpy as np | |
import plotly.express as px | |
from varname import nameof | |
class Piecewise(): | |
def __init__(self, func_1: str, func_2: str, point: float, signs = ["<", ">="], start_stop_num: List[int, int, int] = [-10, 10, 200]): | |
start, stop, num = start_stop_num | |
x_values = np.linspace(start= start, stop= stop, num = num) | |
left_x_values_range = f"{nameof(x_values)} {signs[0]} {str(point)}" | |
right_x_values_range = f"{nameof(x_values)} {signs[1]} {str(point)}" | |
left_x_values = x_values[eval(left_x_values_range)] | |
right_x_values = x_values[eval(right_x_values_range)] | |
self.left_func = Derivative(expression = func_1) | |
self.right_func = Derivative(expression = func_2) | |
self.left_func.x = left_x_values | |
self.right_func.x = right_x_values | |
self.left_func() | |
self.right_func() | |
self.piecewise_func_x = x_values | |
self.piecewise_func_y = np.append(self.left_func.y, self.right_func.y) | |
self.piecewise_func_derivative = np.append(self.left_func.derivative, self.right_func.derivative) | |
def _plot_f(self): | |
fig = px.scatter(x = self.piecewise_func_x, y = self.piecewise_func_y, title = "Piecewise Function") | |
return fig | |
def _plot_dev(self): | |
fig = px.scatter(x = self.piecewise_func_x, y = self.piecewise_func_derivative, title = "Derivative") | |
return fig | |
def plot(self): | |
return self._plot_f(), self._plot_dev() | |
def get_piecewise_fn(input_1: str, input_2: str, input_3: str, sign_1: str, sign_2: str): | |
piecewise_obj = Piecewise(input_1, input_2, float(input_3), [sign_1, sign_2]) | |
f_fig, _ = piecewise_obj.plot() | |
return f_fig | |
def get_piecewise_dev(input_1: str, input_2: str, input_3: str, sign_1: str, sign_2: str): | |
piecewise_obj = Piecewise(input_1, input_2, float(input_3), [sign_1, sign_2]) | |
_, dev_fig = piecewise_obj.plot() | |
return dev_fig |