class Dual: def __init__(self, value, derivative): self.value = value self.derivative = derivative # works as dot{x} def __add__(self, other): return Dual(self.value + other.value, self.derivative + other.derivative) def __mul__(self, other): return Dual(self.value * other.value, self.value * other.derivative + self.derivative * other.value) def __pow__(self, n): return Dual(self.value ** n, n * (self.value ** (n-1)) * self.derivative)def f(x): return x**4 + 3*x**2 + 2*xx = Dual(2.0, 1.0) # x = 2, dx/dx = 1 (~> dot{x})result = f(x)print(f"f(2) = {result.value}, f'(2) = {result.derivative}")# Output: f(2) = 42.0, f'(2) = 58.0