//public IObservable<Tuple<KeyValuePair<DateTime, double>[], IEnumerable<KeyValuePair<DateTime, Tuple<double, double>[]>>>> LastPredictions { get; }



        public PredictionService2(IObservable <KeyValuePair <DateTime, double> > series, IScheduler scheduler)
        {
            List <KeyValuePair <DateTime, double> > lst = new List <KeyValuePair <DateTime, double> >();

            series.SubscribeOn(scheduler).Subscribe(_ => lst.Add(_), () => Console.WriteLine("finished"));


            var y = ObservableFactory.Build(() => Helper.Trim(lst), TimeSpan.FromSeconds(1), scheduler)
                    .Where(_ =>
                           _ != null).Distinct()
                    .TakeUntil(series.Delay(TimeSpan.FromSeconds(0)).GetAwaiter());

            Predictions = Filter.Optimisation.BGWorker.GetOptimisedGPPredictions(y, 1) /*.Take(TimeSpan.FromSeconds(15))*/;
        }
        //public IObservable<Tuple<KeyValuePair<DateTime, double>[], IEnumerable<KeyValuePair<DateTime, Tuple<double, double>[]>>>> LastPredictions { get; }



        public PredictionService4(IObservable <KeyValuePair <DateTime, Tuple <double, double> > > series, IScheduler scheduler)
        {
            List <KeyValuePair <DateTime, Tuple <double, double> > > lst = new List <KeyValuePair <DateTime, Tuple <double, double> > >();

            series.SubscribeOn(scheduler).Subscribe(_ => lst.Add(_), () => Console.WriteLine("finished"));


            var y = ObservableFactory.Build(() => Helper.Trim(lst), TimeSpan.FromSeconds(3), scheduler)
                    .Where(_ =>
                           _ != null);
            //.TakeUntil(series.Delay(TimeSpan.FromSeconds(0)).GetAwaiter());

            var prs1 = Filter.Optimisation.BGWorker.GetOptimisedKFPredictions(y.Select(_ => _.Select(_d => new KeyValuePair <DateTime, double>(_d.Key, _d.Value.Item1)).ToArray()), 5).Select(_ => _.Output); /*.Take(TimeSpan.FromSeconds(15))*/;

            var prs2 = Filter.Optimisation.BGWorker.GetOptimisedKFPredictions(y.Select(_ => _.Select(_d => new KeyValuePair <DateTime, double>(_d.Key, _d.Value.Item2)).ToArray()), 5).Select(_ => _.Output);

            Predictions = prs1.Zip(prs2, (c, d) => c.Zip(d, (e, f) => new KeyValuePair <DateTime, Tuple <double, double>[]>(f.Key, Combine(e.Value, f.Value))));
        }