# -*- coding: utf-8 -*-

"""Copyright 2015 Roger R Labbe Jr.


Code supporting the book

Kalman and Bayesian Filters in Python
https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python


This is licensed under an MIT license. See the LICENSE.txt file
for more information.
"""

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)


import kf_book.book_plots as book_plots
import numpy as np
from matplotlib.patches import Circle, Rectangle, Polygon, Arrow, FancyArrow
import pylab as plt
import time


def plot_gh_results(weights, estimates, predictions, time_step=0):

    n = len(weights)
    if time_step > 0:
        rng = range(1, n+1)
    else:
        rng = range(n, n+1)

    plt.xlim([-1, n+1])
    plt.ylim([156.0, 173])
    act, = book_plots.plot_track([0, n], [160, 160+n], c='k')
    plt.gcf().canvas.draw()

    for i in rng:
        xs = list(range(i+1))

        #plt.cla()

        pred, = book_plots.plot_track(xs[1:], predictions[:i], c='r', marker='v')
        plt.xlim([-1, n+1])
        plt.ylim([156.0, 173])
        plt.gcf().canvas.draw()
        time.sleep(time_step)

        scale, = book_plots.plot_measurements(xs[1:], weights[:i], color='k', lines=False)
        plt.xlim([-1, n+1])
        plt.ylim([156.0, 173])
        plt.gcf().canvas.draw()
        time.sleep(time_step)

        book_plots.plot_filter(xs[:i+1], estimates[:i+1], marker='o')
        plt.xlim([-1, n+1])
        plt.ylim([156.0, 173])
        plt.gcf().canvas.draw()
        time.sleep(time_step)

        plt.legend([act, scale, pred], ['Actual Weight', 'Measurement', 'Predictions'], loc=4)
    book_plots.set_labels(x='day', y='weight (lbs)')




def print_results(estimates, prediction, weight):
    print('previous: {:.2f}, prediction: {:.2f} estimate {:.2f}'.format(
          estimates[-2], prediction, weight))




def plot_g_h_results(measurements, filtered_data,
                     title='', z_label='Measurements',
                     **kwargs):

    book_plots.plot_filter(filtered_data, **kwargs)
    book_plots.plot_measurements(measurements, label=z_label)
    plt.legend(loc=4)
    plt.title(title)
    plt.gca().set_xlim(left=0,right=len(measurements))

    return

    import time
    if not interactive:
        book_plots.plot_filter(filtered_data, **kwargs)
        book_plots.plot_measurements(measurements, label=z_label)
        book_plots.show_legend()
        plt.title(title)
        plt.gca().set_xlim(left=0,right=len(measurements))
    else:
        for i in range(2, len(measurements)):
            book_plots.plot_filter(filtered_data, **kwargs)
            book_plots.plot_measurements(measurements, label=z_label)
            book_plots.show_legend()
            plt.title(title)
            plt.gca().set_xlim(left=0,right=len(measurements))
            plt.gca().canvas.draw()
            time.sleep(0.5)



if __name__ == '__main__':
    import seaborn
    plot_errorbar1()
    #create_predict_update_chart()