PLS now runs on a background thread (had to remove all references to numpy). Progress events are successfully passed back to the UI thread. Now need to pass final results back to the UI thread and then do the same for GBM