import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def avrami(t,k,n):
    return 1-np.exp(-k*np.power(t,n))

def inverse_avrami(f,k,n):
    return ((1/k) * np.log(1/(1-f)) )**(1/n)

fracs = [0.2, 0.6]
times = [280, 425]

coeff, cov = curve_fit(avrami, times, fracs, [0.001,0.15])
k = coeff[0]
n = coeff[1]

t_end = inverse_avrami(0.95, k, n)

t_axis = np.linspace(200,t_end,100)
plt.plot(t_axis, avrami(t_axis, k, n))
plt.scatter(times, fracs)
plt.scatter([t_end], [0.95])
plt.show()

