import numpy as np def extremum(x, y): """ Return extremum coordinates of quadratic fit """ p = np.polyfit(x, y, 2) f = np.poly1d(p) if p[0] != 0: x_ext = -p[1] / (2 * p[0]) y_ext = f(x_ext) else: x_ext = None y_ext = None yhat = f(x) ybar = np.sum(y)/len(y) ssreg = np.sum((yhat - ybar)**2) sstot = np.sum((y - ybar)**2) R2 = ssreg / sstot x_fit = np.linspace(min(x), max(x), 100) y_fit = f(x_fit) return (x_ext, y_ext, x_fit, y_fit, R2)