ds() handling of errors/convergence has changed:

 * if there is an error (i.e. the call to ddf.ds() crashes) then we
   return the last model and quit
 * if there was a convergence error then we keep going