put negative sign on the gradients for guess and slip; try passing hard bounds on guess and slip to scipy optimizer