implementing a 'model' class
maybe it would help with the statistics, fitting, etc routines to have a 'model' class. this class would be like a function, but the parmeters of the model would be an attribute. this way you can be really strict about the function signatures. this also means you wouldn't need to constantly specify params=... in these fit functions. you instead would only have to pass model=... and the fit function would figure out the rest
you may need to do something like have 'parameter' objects that inherit from np.array or something. then you could do checkType(params,parameter) along with making sure the signature only has one argument to enforce the function has a particular form.