  In this notes we describe an algorithm for non-linear fitting which
incorporates some of the features of linear least squares into a general
minimum $\chi^2$ fit and provide a pure Python implementation of the algorithm.
It consists of the variable projection method (varpro), combined with a Newton
optimizer and stabilized using the steepest descent with an adaptative step.
The algorithm includes a term to account for Bayesian priors. We performed
tests of the algorithm using simulated data. This method is suitable, for
example, for fitting with sums of exponentials as often needed in Lattice
Quantum Chromodynamics.
